Name: series-workflowdwp66 Phase: Succeeded StartedAt: 2026-06-23 22:32:43 +0000 UTC FinishedAt: 2026-06-24 02:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[0] Phase: Succeeded StartedAt: 2026-06-23 22:32:43 +0000 UTC FinishedAt: 2026-06-23 22:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 22:32:43 +0000 UTC FinishedAt: 2026-06-23 22:43:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a986fde914d88af47eb78fd29c5d1af7952c3500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_CONNCOUNT", "NF_CONNTRACK", "NF_CT_NETLINK", "NF_FLOW_TABLE", "NFT_COMPAT", "NFT_CT", "NFT_SYNPROXY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a986fde914d88af47eb78fd29c5d1af7952c3500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_CONNCOUNT", "NF_CONNTRACK", "NF_CT_NETLINK", "NF_FLOW_TABLE", "NFT_COMPAT", "NFT_CT", "NFT_SYNPROXY" ], "series_id": "f3cd7cfa-3541-4291-b98a-2fd0edf60d44" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__nf_conncount_add", "__nf_ct_expect_check", "__nf_conntrack_helper_register", "ctnetlink_change_helper", "ctnetlink_alloc_expect", "nf_flow_ip4_tunnel_proto", "nft_target_bridge_validate", "nft_ct_expect_obj_init", "nft_ct_expect_obj_eval", "nft_synproxy_eval_v4", "nft_synproxy_eval_v6" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfQ09NUEFUJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORlRfU1lOUFJPWFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm5jb3VudF9hZGQmIzM0OywKICAgICYjMzQ7X19uZl9jdF9leHBlY3RfY2hlY2smIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19jaGFuZ2VfaGVscGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAgICYjMzQ7bmZfZmxvd19pcDRfdHVubmVsX3Byb3RvJiMzNDssCiAgICAmIzM0O25mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG5ldGZpbHRlciwgaW5jbHVkaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZsb3cgdGFibGVzLCBhbmQgbmZ0YWJsZXMgY29tcGF0aWJpbGl0eS4gSXQgbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb25uZWN0aW9uIGNvdW50aW5nLCBleHBlY3RhdGlvbiBjaGVja2luZywgaGVscGVyIHJlZ2lzdHJhdGlvbiwgYW5kIG5ldGxpbmsgaGFuZGxpbmcuIEl0IGFsc28gYWRkcyBhIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBicmlkZ2UgdGFyZ2V0cyBpbiBuZnRfY29tcGF0IGFuZCBmaXhlcyB0aW1lb3V0IGhhbmRsaW5nIGluIG5mdF9jdC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBvciBieSBwcm9jZXNzaW5nIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNTIxZGQxOGYxMmI2MmFiYTI2ZjA4NmEzMWU0OTAyMDMxZGI5OTYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMjI6NDE6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcbmluZGV4IDIwZDcwZGRkYmU1MDk4Li4yNTA2MmY0YTBkZDVmMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcbkBAIC0xOCw3ICYjNDM7MTgsNyBAQFxuICAqIEBtYXRjaDpcdHRoZSBtYXRjaCBleHRlbnNpb25cbiAgKiBAdGFyZ2V0Olx0dGhlIHRhcmdldCBleHRlbnNpb25cbiAgKiBAbWF0Y2hpbmZvOlx0cGVyLW1hdGNoIGRhdGFcbi0gKiBAdGFyZ2V0aW5mbzpcdHBlci10YXJnZXQgZGF0YVxuJiM0MzsgKiBAdGFyZ2luZm86XHRwZXItdGFyZ2V0IGRhdGFcbiAgKiBAc3RhdGU6XHRwb2ludGVyIHRvIGhvb2sgc3RhdGUgdGhpcyBwYWNrZXQgY2FtZSBmcm9tXG4gICogQGZyYWdvZmY6XHRwYWNrZXQgaXMgYSBmcmFnbWVudCwgdGhpcyBpcyB0aGUgZGF0YSBvZmZzZXRcbiAgKiBAdGhvZmY6XHRwb3NpdGlvbiBvZiB0cmFuc3BvcnQgaGVhZGVyIHJlbGF0aXZlIHRvIHNrYi1cdTAwM2VkYXRhXG5AQCAtNzcsNyAmIzQzOzc3LDkgQEAgc3RhdGljIGlubGluZSB1X2ludDhfdCB4dF9mYW1pbHkoY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuICAqIEBtYXRjaDpcdHN0cnVjdCB4dF9tYXRjaCB0aHJvdWdoIHdoaWNoIHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWRcbiAgKiBAbWF0Y2hpbmZvOlx0cGVyLW1hdGNoIGRhdGFcbiAgKiBAaG9va19tYXNrOlx0dmlhIHdoaWNoIGhvb2tzIHRoZSBuZXcgcnVsZSBpcyByZWFjaGFibGVcbi0gKiBPdGhlciBmaWVsZHMgYXMgYWJvdmUuXG4mIzQzOyAqIEBmYW1pbHk6XHRhY3R1YWwgTkZQUk9UT18qIHRocm91Z2ggd2hpY2ggdGhlIGZ1bmN0aW9uIGlzIGludm9rZWRcbiYjNDM7ICpcdFx0KGhlbHBmdWwgd2hlbiBtYXRjaC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19VTlNQRUMpXG4mIzQzOyAqIEBuZnRfY29tcGF0Olx0cnVubmluZyBmcm9tIHRoZSBuZnQgY29tcGF0IGxheWVyIGlmIHRydWVcbiAgKi9cbiBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0ge1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuQEAgLTkxLDggJiM0Mzs5MywxMyBAQCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0ge1xuIH07XG4gXG4gLyoqXG4tICogc3RydWN0IHh0X21kdG9yX3BhcmFtIC0gbWF0Y2ggZGVzdHJ1Y3RvciBwYXJhbWV0ZXJzXG4tICogRmllbGRzIGFzIGFib3ZlLlxuJiM0MzsgKiBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIC0gbWF0Y2ggZGVzdHJ1Y3RvciBwYXJhbWV0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIEBuZXQ6XHRuZXR3b3JrIG5hbWVzcGFjZSB0aHJvdWdoIHdoaWNoIHRoZSBjaGVjayB3YXMgaW52b2tlZFxuJiM0MzsgKiBAbWF0Y2g6XHRzdHJ1Y3QgeHRfbWF0Y2ggdGhyb3VnaCB3aGljaCB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkXG4mIzQzOyAqIEBtYXRjaGluZm86XHRwZXItbWF0Y2ggZGF0YVxuJiM0MzsgKiBAZmFtaWx5Olx0YWN0dWFsIE5GUFJPVE9fKiB0aHJvdWdoIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkXG4mIzQzOyAqXHRcdChoZWxwZnVsIHdoZW4gbWF0Y2gtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKVxuICAqL1xuIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuQEAgLTEwNSwxMCAmIzQzOzExMiwxNiBAQCBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIHtcbiAgKiBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gLSBwYXJhbWV0ZXJzIGZvciB0YXJnZXQgZXh0ZW5zaW9ucyYjMzk7XG4gICogY2hlY2tlbnRyeSBmdW5jdGlvbnNcbiAgKlxuJiM0MzsgKiBAbmV0Olx0bmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCB3aGljaCB0aGUgY2hlY2sgd2FzIGludm9rZWRcbiYjNDM7ICogQHRhYmxlOlx0dGFibGUgdGhlIHJ1bGUgaXMgdHJpZWQgdG8gYmUgaW5zZXJ0ZWQgaW50b1xuICAqIEBlbnRyeWluZm86XHR0aGUgZmFtaWx5LXNwZWNpZmljIHJ1bGUgZGF0YVxuICAqIFx0XHQoc3RydWN0IGlwdF9lbnRyeSwgaXA2dF9lbnRyeSwgYXJwdF9lbnRyeSwgZWJ0X2VudHJ5KVxuLSAqXG4tICogT3RoZXIgZmllbGRzIHNlZSBhYm92ZS5cbiYjNDM7ICogQHRhcmdldDpcdHRoZSB0YXJnZXQgZXh0ZW5zaW9uXG4mIzQzOyAqIEB0YXJnaW5mbzpcdHBlci10YXJnZXQgZGF0YVxuJiM0MzsgKiBAaG9va19tYXNrOlx0dmlhIHdoaWNoIGhvb2tzIHRoZSBuZXcgcnVsZSBpcyByZWFjaGFibGVcbiYjNDM7ICogQGZhbWlseTpcdGFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZFxuJiM0MzsgKlx0XHQoaGVscGZ1bCB3aGVuIG1hdGNoLVx1MDAzZWZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcbiYjNDM7ICogQG5mdF9jb21wYXQ6XHRydW5uaW5nIGZyb20gdGhlIG5mdCBjb21wYXQgbGF5ZXIgaWYgdHJ1ZVxuICAqL1xuIHN0cnVjdCB4dF90Z2Noa19wYXJhbSB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG5AQCAtMzM2LDkgJiM0MzszNDksOSBAQCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqeHRfYWxsb2NfdGFibGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSk7XG4gdm9pZCB4dF9mcmVlX3RhYmxlX2luZm8oc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8pO1xuIFxuIC8qKlxuLSAqIHh0X3JlY3NlcSAtIHJlY3Vyc2l2ZSBzZXFjb3VudCBmb3IgbmV0ZmlsdGVyIHVzZVxuJiM0MzsgKiB2YXIgeHRfcmVjc2VxIC0gcmVjdXJzaXZlIHNlcWNvdW50IGZvciBuZXRmaWx0ZXIgdXNlXG4gICpcbi0gKiBQYWNrZXQgcHJvY2Vzc2luZyBjaGFuZ2VzIHRoZSBzZXFjb3VudCBvbmx5IGlmIG5vIHJlY3Vyc2lvbiBoYXBwZW5lZFxuJiM0MzsgKiBQYWNrZXQgcHJvY2Vzc2luZyBjaGFuZ2VzIHRoZSBzZXFjb3VudCBvbmx5IGlmIG5vIHJlY3Vyc2lvbiBoYXBwZW5lZC5cbiAgKiBnZXRfY291bnRlcnMoKSBjYW4gdXNlIHJlYWRfc2VxY291bnRfYmVnaW4oKS9yZWFkX3NlcWNvdW50X3JldHJ5KCksXG4gICogYmVjYXVzZSB3ZSB1c2UgdGhlIG5vcm1hbCBzZXFjb3VudCBjb252ZW50aW9uIDpcbiAgKiBMb3cgb3JkZXIgYml0IHNldCB0byAxIGlmIGEgd3JpdGVyIGlzIGFjdGl2ZS5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuaW5kZXggYmU0YTEyMGQ1NDllYjMuLmMwMjQzNDVjOWJkODYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuQEAgLTI2LDYgJiM0MzsyNiw3IEBAIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0IHtcbiBcdHBvc3NpYmxlX25ldF90IG5ldDtcbiBcbiBcdC8qIFdlIGV4cGVjdCB0aGlzIHR1cGxlLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFzayAqL1xuJiM0MztcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyX3R1cGxlO1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5pbmRleCA4MTAyNTEwMWY4NmRhYS4uYzc2MWNkODE1OGIyNTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5AQCAtMTE0LDYgJiM0MzsxMTQsMTAgQEAgaW50IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICosIHVuc2lnbmVkIGludCxcbiB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiosXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCk7XG4gXG4mIzQzOyNkZWZpbmUgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKG5hbWUpIFxcXG4mIzQzO1x0cHJfd2FybihcJiMzNDtUaGUgJXMgY29ubnRyYWNrIGhlbHBlciBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwuXFxuXCYjMzQ7XHRcXFxuJiM0MztcdFx0XCYjMzQ7UGxlYXNlIGNvbnRhY3QgdGhlIG5ldGZpbHRlci1kZXZlbCBtYWlsaW5nIGxpc3QgaWYgeW91IHN0aWxsIG5lZWQgdGhpcy5cXG5cJiMzNDssIG5hbWUpXG4mIzQzO1xuIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKTtcbiBcbiBpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xuaW5kZXggNjY1ZjgwMDhjYzRiMjcuLjRjMDRjZDhkNDBhMjI5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWdcbkBAIC0yNTYsOCAmIzQzOzI1Niw3IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xuIFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbiBjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuLVx0dHJpc3RhdGUgXCYjMzQ7SVJDIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi1cdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4gXHRoZWxwXG4gXHQgIFRoZXJlIGlzIGEgY29tbW9ubHktdXNlZCBleHRlbnNpb24gdG8gSVJDIGNhbGxlZFxuIFx0ICBEaXJlY3QgQ2xpZW50LXRvLUNsaWVudCBQcm90b2NvbCAoRENDKS4gIFRoaXMgZW5hYmxlcyB1c2VycyB0byBzZW5kXG5AQCAtMjY3LDYgJiM0MzsyNjYsOCBAQCBjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuIFx0ICB1c2luZyBOQVQsIHRoaXMgZXh0ZW5zaW9uIHdpbGwgZW5hYmxlIHlvdSB0byBzZW5kIGZpbGVzIGFuZCBpbml0aWF0ZVxuIFx0ICBjaGF0cy4gIE5vdGUgdGhhdCB5b3UgZG8gTk9UIG5lZWQgdGhpcyBleHRlbnNpb24gdG8gZ2V0IGZpbGVzIG9yXG4gXHQgIGhhdmUgb3RoZXJzIGluaXRpYXRlIGNoYXRzLCBvciBldmVyeXRoaW5nIGVsc2UgaW4gSVJDLlxuJiM0MztcdCAgRENDIHRyYWNraW5nIGJlaGluZCBOQVQgcmVxdWlyZXMgcGxhaW50ZXh0ICh1bmVuY3J5cHRlZCkgSVJDLCBzb1xuJiM0MztcdCAgdGhpcyBoZWxwZXIgaXMgb2YgbGltaXRlZCB1c2UgdGhlc2UgZGF5cy5cbiBcbiBcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gXG5AQCAtMzA4LDE3ICYjNDM7MzA5LDE3IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxuIFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbiBjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbiBcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gXHRzZWxlY3QgTkZfQ1RfUFJPVE9fR1JFXG4gXHRoZWxwXG4gXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUFBUUCAoUG9pbnQgdG8gUG9pbnQgVHVubmVsbGluZ1xuIFx0ICBQcm90b2NvbCwgUkZDMjYzNykgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgTkFULlxuIFxuLVx0ICBJZiB5b3UgYXJlIHJ1bm5pbmcgUFBUUCBzZXNzaW9ucyBvdmVyIGEgc3RhdGVmdWwgZmlyZXdhbGwgb3IgTkFUXG4mIzQzO1x0ICBJZiB5b3UgYXJlIHN0aWxsIHJ1bm5pbmcgUFBUUCBzZXNzaW9ucyBvdmVyIGEgc3RhdGVmdWwgZmlyZXdhbGwgb3IgTkFUXG4gXHQgIGJveCwgeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuXG4gXG4tXHQgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkIHlldC5cbiYjNDM7XHQgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkLlxuIFx0ICBTcGVjaWZpY2FsbHkgdGhlc2UgbGltaXRhdGlvbnMgZXhpc3Q6XG4gXHQgICAgLSBCbGluZGx5IGFzc3VtZXMgdGhhdCBjb250cm9sIGNvbm5lY3Rpb25zIGFyZSBhbHdheXMgZXN0YWJsaXNoZWRcbiBcdCAgICAgIGluIFBOUy1cdTAwM2VQQUMgZGlyZWN0aW9uLiBUaGlzIGlzIGEgdmlvbGF0aW9uIG9mIFJGQzI2MzcuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbmluZGV4IGRkNjcwMDRhNWNjMDllLi45MTU4MjA2OWY2ZDJlZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbkBAIC0xODMsMTcgJiM0MzsxODMsMTYgQEAgc3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGlmIChjdCBcdTAwMjZcdTAwMjYgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xuLVx0XHQvKiBsb2NhbCBjb25uZWN0aW9ucyBhcmUgY29uZmlybWVkIGluIHBvc3Ryb3V0aW5nIHNvIGNvbmZpcm1hdGlvblxuLVx0XHQgKiBtaWdodCBoYXZlIGhhcHBlbmVkIGJlZm9yZSBoaXR0aW5nIGNvbm5saW1pdFxuJiM0MztcdFx0LyogQ29ubmVjdGlvbiBpcyBjb25maXJtZWQgYnV0IG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBzZXR1cCBwaGFzZS5cbiYjNDM7XHRcdCAqIE9ubHkgc2tpcCB0aGUgdHJhY2tpbmcgaWYgaXQgaXMgZnVsbHkgYXNzdXJlZC4gVGhpcyBndWFyYW50ZWVzXG4mIzQzO1x0XHQgKiB0aGF0IHNldHVwIHBhY2tldHMgb3IgcmV0cmFuc21pc3Npb25zIGFyZSBwcm9wZXJseSBjb3VudGVkIGFuZFxuJiM0MztcdFx0ICogZGVkdXBsaWNhdGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHNrYi1cdTAwM2Vza2JfaWlmICE9IExPT1BCQUNLX0lGSU5ERVgpIHtcbiYjNDM7XHRcdGlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykpIHtcbiBcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdGdvdG8gb3V0X3B1dDtcbiBcdFx0fVxuIFxuLVx0XHQvKiB0aGlzIGlzIGxpa2VseSBhIGxvY2FsIGNvbm5lY3Rpb24sIHNraXAgb3B0aW1pemF0aW9uIHRvIGF2b2lkXG4tXHRcdCAqIGFkZGluZyBkdXBsaWNhdGVzIGZyb20gYSAmIzM5O3BhY2tldCB0cmFpbiYjMzk7XG4tXHRcdCAqL1xuIFx0XHRnb3RvIGNoZWNrX2Nvbm5lY3Rpb25zO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbmluZGV4IDQwMDExOWI2MzIwZTcyLi5iZjc4ODI4Yzc1NDlkNCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuQEAgLTYyLDYgJiM0Mzs2Miw3IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChleHAgPT0gTlVMTClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0ZXhwLVx1MDAzZW1hc3Rlcl90dXBsZVx0ICA9IGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuIFx0ZXhwLVx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XG4gXG4gXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cdTAwM2VoZWxwZXIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbmluZGV4IDQ5ZTE4ZWRhMDM3ZWYxLi4zODYzMGM1ZTAwNmYwOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuQEAgLTM1NSw2ICYjNDM7MzU1LDggQEAgdm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB1bnNpZ25lZCBpbnQgY2xhc3MsXG4gXHRleHAtXHUwMDNldHVwbGUuc3JjLmwzbnVtID0gZmFtaWx5O1xuIFx0ZXhwLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9IHByb3RvO1xuIFxuJiM0MztcdGV4cC1cdTAwM2VtYXN0ZXJfdHVwbGUgPSBjdC1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcbiYjNDM7XG4gXHRpZiAoc2FkZHIpIHtcbiBcdFx0bWVtY3B5KFx1MDAyNmV4cC1cdTAwM2V0dXBsZS5zcmMudTMsIHNhZGRyLCBsZW4pO1xuIFx0XHRpZiAoc2l6ZW9mKGV4cC1cdTAwM2V0dXBsZS5zcmMudTMpIFx1MDAzZSBsZW4pXG5AQCAtNDk0LDkgJiM0Mzs0OTYsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgX19uZl9jdF9leHBlY3RfY2hlY2soc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbiBcdFx0XHRcdFx0ICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpO1xuIFx0aWYgKGhlbHBlcikge1xuIFx0XHRwID0gXHUwMDI2aGVscGVyLVx1MDAzZWV4cGVjdF9wb2xpY3lbZXhwZWN0LVx1MDAzZWNsYXNzXTtcbi1cdFx0aWYgKHAtXHUwMDNlbWF4X2V4cGVjdGVkIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0aW5nW2V4cGVjdC1cdTAwM2VjbGFzc10gXHUwMDNlPSBwLVx1MDAzZW1heF9leHBlY3RlZClcbiYjNDM7XHRcdGlmIChtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0LVx1MDAzZWNsYXNzXSBcdTAwM2U9IHAtXHUwMDNlbWF4X2V4cGVjdGVkKVxuIFx0XHRcdGV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgcCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBkZWZhdWx0X2V4cF9wb2xpY3kgPSB7XG4mIzQzO1x0XHRcdC5tYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVCxcbiYjNDM7XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGluZ1tleHBlY3QtXHUwMDNlY2xhc3NdIFx1MDAzZT0gZGVmYXVsdF9leHBfcG9saWN5Lm1heF9leHBlY3RlZClcbiYjNDM7XHRcdFx0ZXZpY3Rfb2xkZXN0X2V4cGVjdChtYXN0ZXJfaGVscCwgZXhwZWN0LCBcdTAwMjZkZWZhdWx0X2V4cF9wb2xpY3kpO1xuIFx0fVxuIFxuIFx0Y25ldCA9IG5mX2N0X3Blcm5ldChuZXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDhiOTQwMDFjMjQzMDY2Li41MDA1MDliMTc2NjNlZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTM3NCw4ICYjNDM7Mzc0LDEzIEBAIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIFx0aWYgKCFuZl9jdF9oZWxwZXJfaGFzaClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4tXHRpZiAobWUtXHUwMDNlZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gbWUtXHUwMDNlZXhwZWN0X2NsYXNzX21heDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbWUtXHUwMDNlZXhwZWN0X3BvbGljeVtpXS5tYXhfZXhwZWN0ZWQpXG4mIzQzO1x0XHRcdG1lLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1lLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkIFx1MDAzZSBORl9DVF9FWFBFQ1RfTUFYX0NOVClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmZfY3RfaGVscGVyX2hzaXplOyBpJiM0MzsmIzQzOykge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbmluZGV4IDBjMTE3Yjg0OTJlOTkyLi4xOTNhYjM0ZGI3OTVmOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuQEAgLTI2Miw2ICYjNDM7MjYyLDggQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IGksIHJldDtcbiBcbiYjNDM7XHRuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpO1xuJiM0MztcbiBcdGlmIChtYXhfZGNjX2NoYW5uZWxzIFx1MDAzYyAxKSB7XG4gXHRcdHByX2VycihcJiMzNDttYXhfZGNjX2NoYW5uZWxzIG11c3Qgbm90IGJlIHplcm9cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDRlNzhkMjQ4Mjk4OTVlLi40MjE3NzE1ZDQyZGMyNCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMTk1MywxOSAmIzQzOzE5NTMsNiBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGlmICghc3RyY21wKGhlbHBuYW1lLCBcJiMzNDtcJiMzNDspIFx1MDAyNlx1MDAyNiBoZWxwKSB7XG4tXHRcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVx1MDAzZWhlbHBlcik7XG4tXHRcdGlmIChoZWxwZXIpIHtcbi1cdFx0XHQvKiB3ZSBoYWQgYSBoZWxwZXIgYmVmb3JlIC4uLiAqL1xuLVx0XHRcdG5mX2N0X3JlbW92ZV9leHBlY3RhdGlvbnMoY3QpO1xuLVx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVscC1cdTAwM2VoZWxwZXIsIE5VTEwpO1xuLVx0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2aGVscGVyLVx1MDAzZWN0X3JlZmNudCkpXG4tXHRcdFx0XHRrZnJlZV9yY3UoaGVscGVyLCByY3UpO1xuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbiBcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXG4gXHRcdFx0XHRcdCAgICBuZl9jdF9wcm90b251bShjdCkpO1xuIFx0aWYgKGhlbHBlciA9PSBOVUxMKSB7XG5AQCAtMzAxNSw3ICYjNDM7MzAwMiw2IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApXG4ge1xuIFx0X19zMzIgdGltZW91dCA9IChfX3MzMikoUkVBRF9PTkNFKGV4cC1cdTAwM2V0aW1lb3V0KSAtIG5mY3RfdGltZV9zdGFtcCkgLyBIWjtcbi1cdHN0cnVjdCBuZl9jb25uICptYXN0ZXIgPSBleHAtXHUwMDNlbWFzdGVyO1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuIFx0c3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtcztcbkBAIC0zMDMwLDkgJiM0MzszMDE2LDcgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfbWFzayhza2IsIFx1MDAyNmV4cC1cdTAwM2V0dXBsZSwgXHUwMDI2ZXhwLVx1MDAzZW1hc2spIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi1cdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLFxuLVx0XHRcdFx0IFx1MDAyNm1hc3Rlci1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSxcbi1cdFx0XHRcdCBDVEFfRVhQRUNUX01BU1RFUikgXHUwMDNjIDApXG4mIzQzO1x0aWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsIFx1MDAyNmV4cC1cdTAwM2VtYXN0ZXJfdHVwbGUsIENUQV9FWFBFQ1RfTUFTVEVSKSBcdTAwM2MgMClcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcbkBAIC0zMDQ1LDkgJiM0MzszMDI5LDkgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgQ1RBX0VYUEVDVF9OQVRfRElSLCBodG9ubChleHAtXHUwMDNlZGlyKSkpXG4gXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRcdG5hdF90dXBsZS5zcmMubDNudW0gPSBuZl9jdF9sM251bShtYXN0ZXIpO1xuJiM0MztcdFx0bmF0X3R1cGxlLnNyYy5sM251bSA9IGV4cC1cdTAwM2VtYXN0ZXJfdHVwbGUuc3JjLmwzbnVtO1xuIFx0XHRuYXRfdHVwbGUuc3JjLnUzID0gZXhwLVx1MDAzZXNhdmVkX2FkZHI7XG4tXHRcdG5hdF90dXBsZS5kc3QucHJvdG9udW0gPSBuZl9jdF9wcm90b251bShtYXN0ZXIpO1xuJiM0MztcdFx0bmF0X3R1cGxlLmRzdC5wcm90b251bSA9IGV4cC1cdTAwM2VtYXN0ZXJfdHVwbGUuZHN0LnByb3RvbnVtO1xuIFx0XHRuYXRfdHVwbGUuc3JjLnUgPSBleHAtXHUwMDNlc2F2ZWRfcHJvdG87XG4gXG4gXHRcdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLCBcdTAwMjZuYXRfdHVwbGUsXG5AQCAtMzU4OSw2ICYjNDM7MzU3Myw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gI2VuZGlmXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoZXhwLVx1MDAzZWhlbHBlciwgaGVscGVyKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihleHAtXHUwMDNlYXNzaWduX2hlbHBlciwgYXNzaWduX2hlbHBlcik7XG4mIzQzO1x0ZXhwLVx1MDAzZW1hc3Rlcl90dXBsZSA9IGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuIFx0ZXhwLVx1MDAzZXR1cGxlID0gKnR1cGxlO1xuIFx0ZXhwLVx1MDAzZW1hc2suc3JjLnUzID0gbWFzay1cdTAwM2VzcmMudTM7XG4gXHRleHAtXHUwMDNlbWFzay5zcmMudS5hbGwgPSBtYXNrLVx1MDAzZXNyYy51LmFsbDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbmluZGV4IDc3NjUwNWE3OGU2NDU2Li44MGZjMTRjODdkZGM0YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG5AQCAtNTQ1LDYgJiM0Mzs1NDUsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpXG4gXG4gXHRwcHRwLmRlc3Ryb3kgPSBncmVfcHB0cF9kZXN0cm95X3NpYmxpbmdzO1xuIFxuJiM0MztcdG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChwcHRwLm5hbWUpO1xuJiM0MztcbiBcdHJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNnBwdHAsIFx1MDAyNnBwdHBfcHRyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggZTdhM2ZiMmIyZDk0NjYuLjI5ZTkzYWMxZTJlNDAwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtMzI2LDggJiM0MzszMjYsMTAgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgY3R4LVx1MDAzZW9mZnNldCk7XG4tXHRzaXplID0gaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMjtcbiYjNDM7XHRpZiAoaXBoLVx1MDAzZWlobCBcdTAwM2MgNSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRzaXplID0gaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMjtcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcGgpIHx8IHVubGlrZWx5KGlwX2hhc19vcHRpb25zKHNpemUpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTMzNSw5ICYjNDM7MzM3LDkgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7XG4tXHRcdGN0eC1cdTAwM2V0dW4ucHJvdG8gPSBJUFBST1RPX0lQSVA7XG4mIzQzO1x0XHRjdHgtXHUwMDNldHVuLnByb3RvID0gaXBoLVx1MDAzZXByb3RvY29sO1xuIFx0XHRjdHgtXHUwMDNldHVuLmhkcl9zaXplID0gc2l6ZTtcbi1cdFx0Y3R4LVx1MDAzZW9mZnNldCAmIzQzOz0gc2l6ZTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VvZmZzZXQgJiM0Mzs9IGN0eC1cdTAwM2V0dW4uaGRyX3NpemU7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbmluZGV4IDJiYmY1MTYzYzBlMjczLi42M2ZmNmI0ZDVkMjE0YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5AQCAtMTE4MSw2ICYjNDM7MTE4MSwxNiBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0c3RydWN0IG5mX2hvb2tfb3BzICpuYXRfb3BzO1xuIFx0aW50IGksIHJldDtcbiBcbiYjNDM7I2lmbmRlZiBNT0RVTEVcbiYjNDM7XHQvKiBJZiBuZl9uYXRfY29yZSBpcyBidWlsdC1pbiBhbmQgbmZfbmF0X2luaXQoKSBmYWlscywgZGVwZW5kZW50XG4mIzQzO1x0ICogbW9kdWxlcyBsaWtlIG5mdF9jaGFpbl9uYXQua28gbWF5IHN0aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi5cbiYjNDM7XHQgKiBIb3dldmVyLCBuYXRfbmV0IHdvdWxkIGJlIGludmFsaWQsIGxpa2VseSBwb2ludGluZyB0byBzb21lIG90aGVyXG4mIzQzO1x0ICogcGVyLW5ldCBzdHJ1Y3R1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbmZfbmF0X2hvb2spKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKHBmIFx1MDAzZT0gQVJSQVlfU0laRShuYXRfbmV0LVx1MDAzZW5hdF9wcm90b19uZXQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuY1xuaW5kZXggMGNhYTkzMDRkMmQwMzAuLjYzODY0YjkyODI1OTA5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jXG5AQCAtMzk3LDYgJiM0MzszOTcsMjIgQEAgc3RhdGljIGludCBuZnRfdGFyZ2V0X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQgPSBleHByLVx1MDAzZW9wcy1cdTAwM2VkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBEbyBub3QgYWxsb3cgVU5TUEVDIHRvIHN0YW5kLWluIGZvciBORlBST1RPX0JSSURHRVxuJiM0MztcdCAqIHRhcmdldHM6IHRoZXkgYXJlIGluY29tcGF0aWJsZS4gIGVidGFibGVzIHRhcmdldHMgcmV0dXJuXG4mIzQzO1x0ICogRUJUX0FDQ0VQVCwgRFJPUCBhbmQgc28gb24gd2hpY2ggYXJlIG5vdCBjb21wYXRpYmxlIHdpdGhcbiYjNDM7XHQgKiBORl9BQ0NFUFQsIE5GX0RST1AgYW5kIHNvIG9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0YXJnZXQtXHUwMDNlZmFtaWx5ICE9IE5GUFJPVE9fQlJJREdFKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZnRfdGFyZ2V0X3ZhbGlkYXRlKGN0eCwgZXhwcik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19uZnRfbWF0Y2hfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbkBAIC05MzIsMTMgJiM0Mzs5NDgsMTUgQEAgbmZ0X3RhcmdldF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRvcHMtXHUwMDNlaW5pdCA9IG5mdF90YXJnZXRfaW5pdDtcbiBcdG9wcy1cdTAwM2VkZXN0cm95ID0gbmZ0X3RhcmdldF9kZXN0cm95O1xuIFx0b3BzLVx1MDAzZWR1bXAgPSBuZnRfdGFyZ2V0X2R1bXA7XG4tXHRvcHMtXHUwMDNldmFsaWRhdGUgPSBuZnRfdGFyZ2V0X3ZhbGlkYXRlO1xuIFx0b3BzLVx1MDAzZWRhdGEgPSB0YXJnZXQ7XG4gXG4tXHRpZiAoZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFKVxuJiM0MztcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19CUklER0UpIHtcbiBcdFx0b3BzLVx1MDAzZWV2YWwgPSBuZnRfdGFyZ2V0X2V2YWxfYnJpZGdlO1xuLVx0ZWxzZVxuJiM0MztcdFx0b3BzLVx1MDAzZXZhbGlkYXRlID0gbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGU7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0b3BzLVx1MDAzZWV2YWwgPSBuZnRfdGFyZ2V0X2V2YWxfeHQ7XG4mIzQzO1x0XHRvcHMtXHUwMDNldmFsaWRhdGUgPSBuZnRfdGFyZ2V0X3ZhbGlkYXRlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiBvcHM7XG4gZXJyOlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCA5NTgwNTRkZDJlMmVjYy4uMDNhODhjNzdlMGYwMjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5AQCAtMTIxNSwxMSAmIzQzOzEyMTUsMjMgQEAgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqIHtcbiBcdHUzMlx0XHR0aW1lb3V0O1xuIH07XG4gXG4mIzQzO3N0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MzIgKnZhbClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgamlmZmllc192YWwgPSBtc2Vjc190b19qaWZmaWVzKG5sYV9nZXRfdTMyKGF0dHIpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGppZmZpZXNfdmFsIFx1MDAzZSBVSU5UX01BWClcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHQqdmFsID0gamlmZmllc192YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRpZiAoIXRiW05GVEFfQ1RfRVhQRUNUX0w0UFJPVE9dIHx8XG4gXHQgICAgIXRiW05GVEFfQ1RfRVhQRUNUX0RQT1JUXSB8fFxuQEAgLTEyNTQsOCAmIzQzOzEyNjYsMTEgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbiYjNDM7XHRlcnIgPSBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdLCBcdTAwMjZwcml2LVx1MDAzZXRpbWVvdXQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdHByaXYtXHUwMDNlZHBvcnQgPSBubGFfZ2V0X2JlMTYodGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdKTtcbi1cdHByaXYtXHUwMDNldGltZW91dCA9IG5sYV9nZXRfdTMyKHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdKTtcbiBcdHByaXYtXHUwMDNlc2l6ZSA9IG5sYV9nZXRfdTgodGJbTkZUQV9DVF9FWFBFQ1RfU0laRV0pO1xuIFxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNlZmFtaWx5KTtcbkBAIC0xMjc1LDcgJiM0MzsxMjkwLDcgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAobmxhX3B1dF9iZTE2KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDNQUk9UTywgaHRvbnMocHJpdi1cdTAwM2VsM251bSkpIHx8XG4gXHQgICAgbmxhX3B1dF91OChza2IsIE5GVEFfQ1RfRVhQRUNUX0w0UFJPVE8sIHByaXYtXHUwMDNlbDRwcm90bykgfHxcbiBcdCAgICBubGFfcHV0X2JlMTYoc2tiLCBORlRBX0NUX0VYUEVDVF9EUE9SVCwgcHJpdi1cdTAwM2VkcG9ydCkgfHxcbi1cdCAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIHByaXYtXHUwMDNldGltZW91dCkgfHxcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORlRBX0NUX0VYUEVDVF9USU1FT1VULCBqaWZmaWVzX3RvX21zZWNzKHByaXYtXHUwMDNldGltZW91dCkpIHx8XG4gXHQgICAgbmxhX3B1dF91OChza2IsIE5GVEFfQ1RfRVhQRUNUX1NJWkUsIHByaXYtXHUwMDNlc2l6ZSkpXG4gXHRcdHJldHVybiAtMTtcbiBcbkBAIC0xMzI1LDcgJiM0MzsxMzQwLDcgQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIFx0XHQgICAgICAgICAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MyxcbiBcdFx0ICAgICAgICAgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsXG4gXHRcdCAgICAgICAgICBwcml2LVx1MDAzZWw0cHJvdG8sIE5VTEwsIFx1MDAyNnByaXYtXHUwMDNlZHBvcnQpO1xuLVx0ZXhwLVx1MDAzZXRpbWVvdXQgJiM0Mzs9IHByaXYtXHUwMDNldGltZW91dCAqIEhaO1xuJiM0MztcdGV4cC1cdTAwM2V0aW1lb3V0ICYjNDM7PSBwcml2LVx1MDAzZXRpbWVvdXQ7XG4gXG4gXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbmluZGV4IDc2NDFmMjQ5NjE0Yzk3Li45ZWQyODhjOWQxNjg4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbkBAIC0yNCwxNCAmIzQzOzI0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICYjNDM7IDFdID0ge1xuIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cyxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0LFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyAqaW5mbyxcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdilcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvICppbmZvKVxuIHtcbiBcdHRoaXNfY3B1X2luYyhzbmV0LVx1MDAzZXN0YXRzLVx1MDAzZXN5bl9yZWNlaXZlZCk7XG4gXHRpZiAodGNwLVx1MDAzZWVjZSBcdTAwMjZcdTAwMjYgdGNwLVx1MDAzZWN3cilcbiBcdFx0b3B0cy1cdTAwM2VvcHRpb25zIHw9IE5GX1NZTlBST1hZX09QVF9FQ047XG4gXG4tXHRvcHRzLVx1MDAzZW9wdGlvbnMgXHUwMDI2PSBwcml2LVx1MDAzZWluZm8ub3B0aW9ucztcbiYjNDM7XHRvcHRzLVx1MDAzZW9wdGlvbnMgXHUwMDI2PSBpbmZvLVx1MDAzZW9wdGlvbnM7XG4gXHRvcHRzLVx1MDAzZW1zc19lbmNvZGUgPSBvcHRzLVx1MDAzZW1zc19vcHRpb247XG4gXHRvcHRzLVx1MDAzZW1zc19vcHRpb24gPSBpbmZvLVx1MDAzZW1zcztcbiBcdGlmIChvcHRzLVx1MDAzZW9wdGlvbnMgXHUwMDI2IE5GX1NZTlBST1hZX09QVF9USU1FU1RBTVApXG5AQCAtNTYsNyAmIzQzOzU1LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2V2YWxfdjQoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbiBcbiBcdGlmICh0Y3AtXHUwMDNlc3luKSB7XG4gXHRcdC8qIEluaXRpYWwgU1lOIGZyb20gY2xpZW50ICovXG4tXHRcdG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsIFx1MDAyNmluZm8sIHByaXYpO1xuJiM0MztcdFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXHUwMDI2aW5mbyk7XG4gXHRcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFjayhuZXQsIHNrYiwgdGNwLCBvcHRzKTtcbiBcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG5AQCAtODcsNyAmIzQzOzg2LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2V2YWxfdjYoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbiBcbiBcdGlmICh0Y3AtXHUwMDNlc3luKSB7XG4gXHRcdC8qIEluaXRpYWwgU1lOIGZyb20gY2xpZW50ICovXG4tXHRcdG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsIFx1MDAyNmluZm8sIHByaXYpO1xuJiM0MztcdFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXHUwMDI2aW5mbyk7XG4gXHRcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFja19pcHY2KG5ldCwgc2tiLCB0Y3AsIG9wdHMpO1xuIFx0XHRjb25zdW1lX3NrYihza2IpO1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX1NUT0xFTjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoXG5pbmRleCBkODYwZjdkOTc0NGJmOC4uNzI2MTk3NTk1N2VmMTggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2hcbkBAIC0yLDE4ICYjNDM7MiwzMiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjXG4gIyBUZXN0aW5nIEZvciBTQ1RQIENPTExJU0lPTiBTQ0VOQVJJTyBhcyBCZWxvdzpcbi0jXG4mIzQzOyMgMS4gU3RhbGUgSU5JVF9BQ0sgY2FwdHVyZTpcbiAjICAgMTQ6MzU6NDcuNjU1Mjc5IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbiAjICAgMTQ6MzU6NDguMzUzMjUwIElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMTE4NzIwNjE4N11cbiAjICAgMTQ6MzU6NDguMzUzMjc1IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDIwMTc4MzczNTldXG4gIyAgIDE0OjM1OjQ4LjM1MzI4MyBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT11cbiAjICAgMTQ6MzU6NDguMzUzOTc3IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBBQ0tdXG4gIyAgIDE0OjM1OjQ4Ljg1NTMzNSBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAxNjQ1Nzk5NzBdXG4mIzQzOyMgICAoRGVsYXllZClcbiYjNDM7I1xuJiM0MzsjIDIuIFN0YWxlIElOSVQgY2FwdHVyZTpcbiYjNDM7IyAgIDE0OjM1OjQ4LjM1MzI1MCBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUXSBbaW5pdCB0YWc6IDExODcyMDYxODddXG4mIzQzOyMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbiYjNDM7IyAgIDE0OjM1OjQ4LjM1MzI4MyBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT11cbiYjNDM7IyAgIDE0OjM1OjQ4LjM1Mzk3NyBJUCBDTElFTlRfSVAuUE9SVCBcdTAwM2UgU0VSVkVSX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgQUNLXVxuJiM0MzsjICAgMTQ6MzU6NDcuNjU1Mjc5IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbiYjNDM7IyAgIChEZWxheWVkKVxuJiM0MzsjICAgMTQ6MzU6NDguODU1MzM1IElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDE2NDU3OTk3MF1cbiAjXG4gIyBUT1BPOiBTRVJWRVJfTlMgKGxpbmswKVx1MDAzYy0tLVx1MDAzZShsaW5rMSkgUk9VVEVSX05TIChsaW5rMilcdTAwM2MtLS1cdTAwM2UobGluazMpIENMSUVOVF9OU1xuIFxuIHNvdXJjZSBsaWIuc2hcbiBcbiYjNDM7Y2hlY2t0b29sIFwmIzM0O25mdCAtLXZlcnNpb25cJiMzNDsgXCYjMzQ7cnVuIHRlc3Qgd2l0aG91dCBuZnRcJiMzNDtcbiYjNDM7Y2hlY2t0b29sIFwmIzM0O3RjIC1oXCYjMzQ7IFwmIzM0O3J1biB0ZXN0IHdpdGhvdXQgdGNcJiMzNDtcbiYjNDM7Y2hlY2t0b29sIFwmIzM0O21vZHByb2JlIC1xIHNjdHBcJiMzNDsgXCYjMzQ7bG9hZCBzY3RwIG1vZHVsZVwmIzM0O1xuJiM0MztcbiBDTElFTlRfSVA9XCYjMzQ7MTk4LjUxLjIwMC4xXCYjMzQ7XG4gQ0xJRU5UX1BPUlQ9MTIzNFxuIFxuQEAgLTI0LDcgJiM0MzszOCw4IEBAIENMSUVOVF9HVz1cJiMzNDsxOTguNTEuMjAwLjJcJiMzNDtcbiBTRVJWRVJfR1c9XCYjMzQ7MTk4LjUxLjEwMC4yXCYjMzQ7XG4gXG4gIyBzZXR1cCB0aGUgdG9wb1xuLXNldHVwKCkge1xuJiM0Mzt0b3BvX3NldHVwKCkge1xuJiM0MztcdCMgc2V0dXBfbnMgY2xlYW5zIHVwIGV4aXN0aW5nIG5ldCBuYW1lc3BhY2VzIGZpcnN0LlxuIFx0c2V0dXBfbnMgQ0xJRU5UX05TIFNFUlZFUl9OUyBST1VURVJfTlNcbiBcdGlwIC1uIFwmIzM0OyRTRVJWRVJfTlNcJiMzNDsgbGluayBhZGQgbGluazAgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsaW5rMSBuZXRucyBcJiMzNDskUk9VVEVSX05TXCYjMzQ7XG4gXHRpcCAtbiBcJiMzNDskQ0xJRU5UX05TXCYjMzQ7IGxpbmsgYWRkIGxpbmszIHR5cGUgdmV0aCBwZWVyIG5hbWUgbGluazIgbmV0bnMgXCYjMzQ7JFJPVVRFUl9OU1wmIzM0O1xuQEAgLTM4LDM1ICYjNDM7NTMsNTMgQEAgc2V0dXAoKSB7XG4gXHRpcCAtbiBcJiMzNDskUk9VVEVSX05TXCYjMzQ7IGFkZHIgYWRkICRTRVJWRVJfR1cvMjQgZGV2IGxpbmsxXG4gXHRpcCAtbiBcJiMzNDskUk9VVEVSX05TXCYjMzQ7IGFkZHIgYWRkICRDTElFTlRfR1cvMjQgZGV2IGxpbmsyXG4gXHRpcCBuZXQgZXhlYyBcJiMzNDskUk9VVEVSX05TXCYjMzQ7IHN5c2N0bCAtd3EgbmV0LmlwdjQuaXBfZm9yd2FyZD0xXG4mIzQzO1x0c3lzY3RsIC13cSBuZXQubmV0ZmlsdGVyLm5mX2xvZ19hbGxfbmV0bnM9MVxuIFxuIFx0aXAgLW4gXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyBsaW5rIHNldCBsaW5rMyB1cFxuIFx0aXAgLW4gXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyBhZGRyIGFkZCAkQ0xJRU5UX0lQLzI0IGRldiBsaW5rM1xuIFx0aXAgLW4gXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyByb3V0ZSBhZGQgJFNFUlZFUl9JUCBkZXYgbGluazMgdmlhICRDTElFTlRfR1dcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uZl9kZWxheSgpXG4mIzQzO3tcbiYjNDM7XHQjIHNpbXVsYXRlIHRoZSBkZWxheSBvbiBPVlMgdXBjYWxsIGJ5IHNldHRpbmcgdXAgYSBkZWxheSBmb3IgSU5JVF9BQ0svSU5JVCB3aXRoXG4mIzQzO1x0bG9jYWwgbnM9JDFcbiYjNDM7XHRsb2NhbCBsaW5rPSQyXG4mIzQzO1x0bG9jYWwgY2h1bmtfdHlwZT0kM1xuIFxuLVx0IyBzaW11bGF0ZSB0aGUgZGVsYXkgb24gT1ZTIHVwY2FsbCBieSBzZXR0aW5nIHVwIGEgZGVsYXkgZm9yIElOSVRfQUNLIHdpdGhcbi1cdCMgdGMgb24gJFNFUlZFUl9OUyBzaWRlXG4tXHR0YyAtbiBcJiMzNDskU0VSVkVSX05TXCYjMzQ7IHFkaXNjIGFkZCBkZXYgbGluazAgcm9vdCBoYW5kbGUgMTogaHRiIHIycSA2NFxuLVx0dGMgLW4gXCYjMzQ7JFNFUlZFUl9OU1wmIzM0OyBjbGFzcyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxMDBtYml0XG4tXHR0YyAtbiBcJiMzNDskU0VSVkVSX05TXCYjMzQ7IGZpbHRlciBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBwcm90b2NvbCBpcCB1MzIgbWF0Y2ggaXAgcHJvdG9jb2wgMTMyIFxcXG4tXHRcdDB4ZmYgbWF0Y2ggdTggMiAweGZmIGF0IDMyIGZsb3dpZCAxOjFcbi1cdGlmICEgdGMgLW4gXCYjMzQ7JFNFUlZFUl9OU1wmIzM0OyBxZGlzYyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOjEgaGFuZGxlIDEwOiBuZXRlbSBkZWxheSAxMjAwbXM7IHRoZW5cbiYjNDM7XHQjIHVzZSBhIHNtYWxsZXIgbnVtYmVyIGZvciBhc3NvYyYjMzk7cyBtYXhfcmV0cmFucyB0byByZXByb2R1Y2UgdGhlIGlzc3VlXG4mIzQzO1x0aXAgbmV0IGV4ZWMgXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyBzeXNjdGwgLXdxIG5ldC5zY3RwLmFzc29jaWF0aW9uX21heF9yZXRyYW5zPTNcbiYjNDM7XG4mIzQzO1x0dGMgLW4gXCYjMzQ7JG5zXCYjMzQ7IHFkaXNjIGFkZCBkZXYgXCYjMzQ7JGxpbmtcJiMzNDsgcm9vdCBoYW5kbGUgMTogaHRiIHIycSA2NFxuJiM0MztcdHRjIC1uIFwmIzM0OyRuc1wmIzM0OyBjbGFzcyBhZGQgZGV2IFwmIzM0OyRsaW5rXCYjMzQ7IHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxMDBtYml0XG4mIzQzO1x0dGMgLW4gXCYjMzQ7JG5zXCYjMzQ7IGZpbHRlciBhZGQgZGV2IFwmIzM0OyRsaW5rXCYjMzQ7IHBhcmVudCAxOiBwcm90b2NvbCBpcCBcXFxuJiM0MztcdFx0dTMyIG1hdGNoIGlwIHByb3RvY29sIDEzMiAweGZmIG1hdGNoIHU4IFwmIzM0OyRjaHVua190eXBlXCYjMzQ7IDB4ZmYgYXQgMzIgZmxvd2lkIDE6MVxuJiM0MztcdGlmICEgdGMgLW4gXCYjMzQ7JG5zXCYjMzQ7IHFkaXNjIGFkZCBkZXYgXCYjMzQ7JGxpbmtcJiMzNDsgcGFyZW50IDE6MSBoYW5kbGUgMTA6IG5ldGVtIGRlbGF5IDEyMDBtczsgdGhlblxuIFx0XHRlY2hvIFwmIzM0O1NLSVA6IENhbm5vdCBhZGQgbmV0ZW0gcWRpc2NcJiMzNDtcbi1cdFx0ZXhpdCAka3NmdF9za2lwXG4mIzQzO1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuIFx0ZmlcbiBcbiBcdCMgc2ltdWxhdGUgdGhlIGN0c3RhdGUgY2hlY2sgb24gT1ZTIG5mX2Nvbm50cmFja1xuLVx0aXAgbmV0IGV4ZWMgXCYjMzQ7JFJPVVRFUl9OU1wmIzM0OyBpcHRhYmxlcyAtQSBGT1JXQVJEIC1tIHN0YXRlIC0tc3RhdGUgSU5WQUxJRCxVTlRSQUNLRUQgLWogRFJPUFxuLVx0aXAgbmV0IGV4ZWMgXCYjMzQ7JFJPVVRFUl9OU1wmIzM0OyBpcHRhYmxlcyAtQSBJTlBVVCAtcCBzY3RwIC1qIERST1Bcbi1cbi1cdCMgdXNlIGEgc21hbGxlciBudW1iZXIgZm9yIGFzc29jJiMzOTtzIG1heF9yZXRyYW5zIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWVcbi1cdG1vZHByb2JlIC1xIHNjdHBcbi1cdGlwIG5ldCBleGVjIFwmIzM0OyRDTElFTlRfTlNcJiMzNDsgc3lzY3RsIC13cSBuZXQuc2N0cC5hc3NvY2lhdGlvbl9tYXhfcmV0cmFucz0zXG4mIzQzO1x0aXAgbmV0IGV4ZWMgXCYjMzQ7JFJPVVRFUl9OU1wmIzM0OyBuZnQgLWYgLSBcdTAwM2NcdTAwM2MtRU9GXG4mIzQzO1x0dGFibGUgaXAgdCB7XG4mIzQzO1x0XHRjaGFpbiBmb3J3YXJkIHtcbiYjNDM7XHRcdFx0dHlwZSBmaWx0ZXIgaG9vayBmb3J3YXJkIHByaW9yaXR5IGZpbHRlcjsgcG9saWN5IGFjY2VwdDtcbiYjNDM7XHRcdFx0bWV0YSBsNHByb3RvIGljbXAgY291bnRlciBhY2NlcHRcbiYjNDM7XHRcdFx0Y3Qgc3RhdGUgbmV3IGNvdW50ZXIgYWNjZXB0XG4mIzQzO1x0XHRcdGN0IHN0YXRlIGVzdGFibGlzaGVkLHJlbGF0ZWQgY291bnRlciBhY2NlcHRcbiYjNDM7XHRcdFx0Y3Qgc3RhdGUgaW52YWxpZCBsb2cgZmxhZ3MgYWxsIGNvdW50ZXIgZHJvcCBjb21tZW50IFxcXG4mIzQzO1x0XHRcdFwmIzM0O0V4cGVjdCB0byBkcm9wIHN0YWxlIElOSVQvSU5JVF9BQ0sgY2h1bmtzXCYjMzQ7XG4mIzQzO1x0XHRcdGNvdW50ZXJcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0RU9GXG4mIzQzO1x0cmV0dXJuIDBcbiB9XG4gXG4gY2xlYW51cCgpIHtcbi1cdGlwIG5ldCBleGVjIFwmIzM0OyRDTElFTlRfTlNcJiMzNDsgcGtpbGwgc2N0cF9jb2xsaXNpb24gXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4tXHRpcCBuZXQgZXhlYyBcJiMzNDskU0VSVkVSX05TXCYjMzQ7IHBraWxsIHNjdHBfY29sbGlzaW9uIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdCMgY2xlYW51cF9hbGxfbnMgdGVybWluYXRlcyBydW5uaW5nIHByb2Nlc3NlcyBpbiB0aGUgbmFtZXNwYWNlcy5cbiBcdGNsZWFudXBfYWxsX25zXG4mIzQzO1x0c3lzY3RsIC13cSBuZXQubmV0ZmlsdGVyLm5mX2xvZ19hbGxfbmV0bnM9MFxuIH1cbiBcbiBkb190ZXN0KCkge1xuQEAgLTgxLDcgJiM0MzsxMTQsMTkgQEAgZG9fdGVzdCgpIHtcbiBcbiAjIHJ1biB0aGUgdGVzdCBjYXNlXG4gdHJhcCBjbGVhbnVwIEVYSVRcbi1zZXR1cCBcdTAwMjZcdTAwMjYgXFxcbi1lY2hvIFwmIzM0O1Rlc3QgZm9yIFNDVFAgQ29sbGlzaW9uIGluIG5mX2Nvbm50cmFjazpcJiMzNDsgXHUwMDI2XHUwMDI2IFxcXG4tZG9fdGVzdCBcdTAwMjZcdTAwMjYgZWNobyBcJiMzNDtQQVNTIVwmIzM0O1xuLWV4aXQgJD9cbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7VGVzdCBmb3IgU0NUUCBJTklUX0FDSyBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlwmIzM0O1xuJiM0Mzt0b3BvX3NldHVwIHx8IGV4aXQgJD9cbiYjNDM7Y29uZl9kZWxheSAkU0VSVkVSX05TIGxpbmswIDIgfHwgZXhpdCAkP1xuJiM0MztcbiYjNDM7aWYgISBkb190ZXN0OyB0aGVuXG4mIzQzO1x0ZXhpdCAka3NmdF9mYWlsXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O1Rlc3QgZm9yIFNDVFAgSU5JVCBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlwmIzM0O1xuJiM0Mzt0b3BvX3NldHVwIHx8IGV4aXQgJD9cbiYjNDM7Y29uZl9kZWxheSAkQ0xJRU5UX05TIGxpbmszIDEgfHwgZXhpdCAkP1xuJiM0MztcbiYjNDM7aWYgISBkb190ZXN0OyB0aGVuXG4mIzQzO1x0ZXhpdCAka3NmdF9mYWlsXG4mIzQzO2ZpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaFxuaW5kZXggZDgwMzkwODQ4ZTg1MDkuLjdjODU3YTJlMGYzNDk0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLnNoXG5AQCAtODUsMTEgJiM0Mzs4NSwxMiBAQCBpcCAtbmV0IFwmIzM0OyRuczNcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIDEwLjAuMy4xXG4gaXAgLW5ldCBcJiMzNDskbnMzXCYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjM6OjFcbiBcbiBsb2FkX3J1bGVzZXQoKSB7XG4tXHRsb2NhbCBuYW1lPSQxXG4tXHRsb2NhbCBwcmlvPSQyXG4mIzQzO1x0bG9jYWwgZmFtaWx5PSQxXG4mIzQzO1x0bG9jYWwgbmFtZT0kMlxuJiM0MztcdGxvY2FsIHByaW89JDNcbiBcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3JvdXRlclwmIzM0OyBuZnQgLWYgL2Rldi9zdGRpbiBcdTAwM2NcdTAwM2NFT0Zcbi10YWJsZSBpbmV0ICRuYW1lIHtcbiYjNDM7dGFibGUgJGZhbWlseSAkbmFtZSB7XG4gXHRjaGFpbiBuZnEge1xuIFx0XHRpcCBwcm90b2NvbCBpY21wIHF1ZXVlIGJ5cGFzc1xuIFx0XHRpY21wdjYgdHlwZSB7IFwmIzM0O2VjaG8tcmVxdWVzdFwmIzM0OywgXCYjMzQ7ZWNoby1yZXBseVwmIzM0OyB9IHF1ZXVlIG51bSAxIGJ5cGFzc1xuQEAgLTIyOCw2ICYjNDM7MjI5LDcgQEAgbmZfcXVldWVfd2FpdCgpXG4gdGVzdF9xdWV1ZSgpXG4ge1xuIFx0bG9jYWwgZXhwZWN0ZWQ9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBmYW1pbHk9XCYjMzQ7JDJcJiMzNDtcbiBcdGxvY2FsIGxhc3Q9XCYjMzQ7XCYjMzQ7XG4gXG4gXHQjIHNwYXduIG5mX3F1ZXVlIGxpc3RlbmVyc1xuQEAgLTI1NSwxMSAmIzQzOzI1NywxMyBAQCB0ZXN0X3F1ZXVlKClcbiBcdFx0aWYgWyB4XCYjMzQ7JGxhc3RcJiMzNDsgIT0geFwmIzM0OyRleHBlY3RlZCBwYWNrZXRzIHRvdGFsXCYjMzQ7IF07IHRoZW5cbiBcdFx0XHRlY2hvIFwmIzM0O0ZBSUw6IEV4cGVjdGVkICRleHBlY3RlZCBwYWNrZXRzIHRvdGFsLCBidXQgZ290ICRsYXN0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4gXHRcdFx0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgbmZ0IGxpc3QgcnVsZXNldFxuJiM0MztcdFx0XHRlY2hvIC1uIFwmIzM0OyRUTVBGSUxFMDogXCYjMzQ7O2NhdCBcJiMzNDskVE1QRklMRTBcJiMzNDtcbiYjNDM7XHRcdFx0ZWNobyAtbiBcJiMzNDskVE1QRklMRTE6IFwmIzM0OztjYXQgXCYjMzQ7JFRNUEZJTEUxXCYjMzQ7XG4gXHRcdFx0ZXhpdCAxXG4gXHRcdGZpXG4gXHRkb25lXG4gXG4tXHRlY2hvIFwmIzM0O1BBU1M6IEV4cGVjdGVkIGFuZCByZWNlaXZlZCAkbGFzdFwmIzM0O1xuJiM0MztcdGVjaG8gXCYjMzQ7UEFTUzogRXhwZWN0ZWQgYW5kIHJlY2VpdmVkICRsYXN0ICgkZmFtaWx5KVwmIzM0O1xuIH1cbiBcbiBsaXN0ZW5lcl9yZWFkeSgpXG5AQCAtNDAwLDYgJiM0Mzs0MDQsOCBAQCBFT0ZcbiBcbiBcdGtpbGwgXCYjMzQ7JG5mcXBpZFwmIzM0O1xuIFx0ZWNobyBcJiMzNDtQQVNTOiBpY21wJiM0MztuZnF1ZXVlIHZpYSB2cmZcJiMzNDtcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczFcJiMzNDsgbGluayBkZWwgdHZyZlxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zMVwmIzM0OyBuZnQgZmx1c2ggcnVsZXNldFxuIH1cbiBcbiBzY3RwX2xpc3RlbmVyX3JlYWR5KClcbkBAIC04MTQsMTIgJiM0Mzs4MjAsNTMgQEAgRU9GXG4gXHRjaGVja190YWludGVkIFwmIzM0O3F1ZXVlIHByb2dyYW0gZXhpdGluZyB3aGlsZSBwYWNrZXRzIHF1ZXVlZFwmIzM0O1xuIH1cbiBcbiYjNDM7dGVzdF9xdWV1ZV9icmlkZ2UoKVxuJiM0Mzt7XG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgYWRkciBmbHVzaCBkZXYgdmV0aDBcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuc3JvdXRlclwmIzM0OyBhZGRyIGZsdXNoIGRldiB2ZXRoMVxuJiM0MztcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuc3JvdXRlclwmIzM0OyBsaW5rIGFkZCBicjAgdHlwZSBicmlkZ2VcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuc3JvdXRlclwmIzM0OyBsaW5rIHNldCB2ZXRoMCBtYXN0ZXIgYnIwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgbGluayBzZXQgdmV0aDEgbWFzdGVyIGJyMFxuJiM0MztcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuc3JvdXRlclwmIzM0OyBsaW5rIHNldCBicjAgdXBcbiYjNDM7XG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgYWRkciBhZGQgMTAuMC4yLjEvMTYgZGV2IGJyMFxuJiM0MztcdGlwIC1uZXQgXCYjMzQ7JG5zcm91dGVyXCYjMzQ7IGFkZHIgYWRkIGRlYWQ6Mjo6MS82NCBkZXYgYnIwIG5vZGFkXG4mIzQzO1xuJiM0MztcdGlwIC1uZXQgXCYjMzQ7JG5zMVwmIzM0OyBhZGRyIGZsdXNoIGRldiBldGgwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IGFkZHIgZmx1c2ggZGV2IGV0aDBcbiYjNDM7XG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMxXCYjMzQ7IGFkZHIgYWRkIDEwLjAuMS4xLzE2IGRldiBldGgwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMxXCYjMzQ7IGFkZHIgYWRkIGRlYWQ6Mjo6Mi82NCBkZXYgZXRoMCBub2RhZFxuJiM0MztcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczJcJiMzNDsgYWRkciBhZGQgMTAuMC4yLjk5LzE2IGRldiBldGgwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IGFkZHIgYWRkIGRlYWQ6Mjo6OTkvNjQgZGV2IGV0aDAgbm9kYWRcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgbmZ0IGZsdXNoIHJ1bGVzZXRcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgc3lzY3RsIG5ldC5pcHY2LmNvbmYuYWxsLmZvcndhcmRpbmc9MCBcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDAuZm9yd2FyZGluZz0wIFx1MDAzZSAvZGV2L251bGxcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3JvdXRlclwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS5mb3J3YXJkaW5nPTAgXHUwMDNlIC9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHRpZiAhIHRlc3RfcGluZzt0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IG5ldG5zIGJyaWRnZSBjb25uZWN0aXZpdHlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgJHJldFxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGxvYWRfcnVsZXNldCBcJiMzNDticmlkZ2VcJiMzNDsgXCYjMzQ7ZmlsdGVyXCYjMzQ7IDEwXG4mIzQzO1x0dGVzdF9xdWV1ZSAxMCBcJiMzNDticmlkZ2VcJiMzNDtcbiYjNDM7XG4mIzQzO1x0bG9hZF9ydWxlc2V0IFwmIzM0O2JyaWRnZVwmIzM0OyBcJiMzNDtmaWx0ZXIyXCYjMzQ7IDIwXG4mIzQzO1x0dGVzdF9xdWV1ZSAyMCBcJiMzNDticmlkZ2VcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3JvdXRlclwmIzM0OyBzeXNjdGwgbmV0LmlwdjYuY29uZi5hbGwuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3JvdXRlclwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMC5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcm91dGVyXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgxLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDIuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBcbi1sb2FkX3J1bGVzZXQgXCYjMzQ7ZmlsdGVyXCYjMzQ7IDBcbiYjNDM7bG9hZF9ydWxlc2V0IFwmIzM0O2luZXRcJiMzNDsgXCYjMzQ7ZmlsdGVyXCYjMzQ7IDBcbiBcbiBpZiB0ZXN0X3Bpbmc7IHRoZW5cbiBcdCMgcXVldWUgYnlwYXNzIHdvcmtzIChydWxlcyB3ZXJlIHNraXBwZWQsIG5vIGxpc3RlbmVyKVxuQEAgLTg0MiwxMSAmIzQzOzg4OSwxMSBAQCBsb2FkX2NvdW50ZXJfcnVsZXNldCAxMFxuICMgMXggaWNtcCBwcmVyb3V0aW5nLGZvcndhcmQscG9zdHJvdXRpbmcgLVx1MDAzZSAzIHF1ZXVlIGV2ZW50cyAoNiBpbmNsLiByZXBseSkuXG4gIyAxeCBpY21wIHByZXJvdXRpbmcsaW5wdXQsb3V0cHV0IHBvc3Ryb3V0aW5nIC1cdTAwM2UgNCBxdWV1ZSBldmVudHMgaW5jbC4gcmVwbHkuXG4gIyBzbyB3ZSBleHBlY3QgdGhhdCB1c2Vyc3BhY2UgcHJvZ3JhbSByZWNlaXZlcyAxMCBwYWNrZXRzLlxuLXRlc3RfcXVldWUgMTBcbiYjNDM7dGVzdF9xdWV1ZSAxMCBcJiMzNDtpbmV0XCYjMzQ7XG4gXG4gIyBzYW1lLiAgV2UgcXVldWUgdG8gYSBzZWNvbmQgcHJvZ3JhbSBhcyB3ZWxsLlxuLWxvYWRfcnVsZXNldCBcJiMzNDtmaWx0ZXIyXCYjMzQ7IDIwXG4tdGVzdF9xdWV1ZSAyMFxuJiM0Mztsb2FkX3J1bGVzZXQgXCYjMzQ7aW5ldFwmIzM0OyBcJiMzNDtmaWx0ZXIyXCYjMzQ7IDIwXG4mIzQzO3Rlc3RfcXVldWUgMjAgXCYjMzQ7aW5ldFwmIzM0O1xuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zMVwmIzM0OyBuZnQgZmx1c2ggcnVsZXNldFxuIFxuIHRlc3RfdGNwX2ZvcndhcmRcbkBAIC04NjMsNCAmIzQzOzkxMCw3IEBAIHRlc3RfcXVldWVfc3RyZXNzXG4gdGVzdF9pY21wX3ZyZlxuIHRlc3RfcXVldWVfcmVtb3ZhbFxuIFxuJiM0MzsjIHR1cm5zIHJvdXRlciBpbnRvIGEgYnJpZGdlXG4mIzQzO3Rlc3RfcXVldWVfYnJpZGdlXG4mIzQzO1xuIGV4aXQgJHJldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfQ09NUEFUJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORlRfU1lOUFJPWFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm5jb3VudF9hZGQmIzM0OywKICAgICYjMzQ7X19uZl9jdF9leHBlY3RfY2hlY2smIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19jaGFuZ2VfaGVscGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAgICYjMzQ7bmZfZmxvd19pcDRfdHVubmVsX3Byb3RvJiMzNDssCiAgICAmIzM0O25mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG5ldGZpbHRlciwgaW5jbHVkaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZsb3cgdGFibGVzLCBhbmQgbmZ0YWJsZXMgY29tcGF0aWJpbGl0eS4gSXQgbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb25uZWN0aW9uIGNvdW50aW5nLCBleHBlY3RhdGlvbiBjaGVja2luZywgaGVscGVyIHJlZ2lzdHJhdGlvbiwgYW5kIG5ldGxpbmsgaGFuZGxpbmcuIEl0IGFsc28gYWRkcyBhIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBicmlkZ2UgdGFyZ2V0cyBpbiBuZnRfY29tcGF0IGFuZCBmaXhlcyB0aW1lb3V0IGhhbmRsaW5nIGluIG5mdF9jdC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBvciBieSBwcm9jZXNzaW5nIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1MjFkZDE4ZjEyYjYyYWJhMjZmMDg2YTMxZTQ5MDIwMzFkYjk5NjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAyMjo0MToxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCmluZGV4IDIwZDcwZGRkYmU1MDk4Li4yNTA2MmY0YTBkZDVmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC0xOCw3ICYjNDM7MTgsNyBAQAogICogQG1hdGNoOgl0aGUgbWF0Y2ggZXh0ZW5zaW9uCiAgKiBAdGFyZ2V0Ogl0aGUgdGFyZ2V0IGV4dGVuc2lvbgogICogQG1hdGNoaW5mbzoJcGVyLW1hdGNoIGRhdGEKLSAqIEB0YXJnZXRpbmZvOglwZXItdGFyZ2V0IGRhdGEKJiM0MzsgKiBAdGFyZ2luZm86CXBlci10YXJnZXQgZGF0YQogICogQHN0YXRlOglwb2ludGVyIHRvIGhvb2sgc3RhdGUgdGhpcyBwYWNrZXQgY2FtZSBmcm9tCiAgKiBAZnJhZ29mZjoJcGFja2V0IGlzIGEgZnJhZ21lbnQsIHRoaXMgaXMgdGhlIGRhdGEgb2Zmc2V0CiAgKiBAdGhvZmY6CXBvc2l0aW9uIG9mIHRyYW5zcG9ydCBoZWFkZXIgcmVsYXRpdmUgdG8gc2tiLSZndDtkYXRhCkBAIC03Nyw3ICYjNDM7NzcsOSBAQCBzdGF0aWMgaW5saW5lIHVfaW50OF90IHh0X2ZhbWlseShjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAgKiBAbWF0Y2g6CXN0cnVjdCB4dF9tYXRjaCB0aHJvdWdoIHdoaWNoIHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQKICAqIEBtYXRjaGluZm86CXBlci1tYXRjaCBkYXRhCiAgKiBAaG9va19tYXNrOgl2aWEgd2hpY2ggaG9va3MgdGhlIG5ldyBydWxlIGlzIHJlYWNoYWJsZQotICogT3RoZXIgZmllbGRzIGFzIGFib3ZlLgomIzQzOyAqIEBmYW1pbHk6CWFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZAomIzQzOyAqCQkoaGVscGZ1bCB3aGVuIG1hdGNoLSZndDtmYW1pbHkgPT0gTkZQUk9UT19VTlNQRUMpCiYjNDM7ICogQG5mdF9jb21wYXQ6CXJ1bm5pbmcgZnJvbSB0aGUgbmZ0IGNvbXBhdCBsYXllciBpZiB0cnVlCiAgKi8KIHN0cnVjdCB4dF9tdGNoa19wYXJhbSB7CiAJc3RydWN0IG5ldCAqbmV0OwpAQCAtOTEsOCAmIzQzOzkzLDEzIEBAIHN0cnVjdCB4dF9tdGNoa19wYXJhbSB7CiB9OwogCiAvKioKLSAqIHN0cnVjdCB4dF9tZHRvcl9wYXJhbSAtIG1hdGNoIGRlc3RydWN0b3IgcGFyYW1ldGVycwotICogRmllbGRzIGFzIGFib3ZlLgomIzQzOyAqIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gLSBtYXRjaCBkZXN0cnVjdG9yIHBhcmFtZXRlcnMKJiM0MzsgKgomIzQzOyAqIEBuZXQ6CW5ldHdvcmsgbmFtZXNwYWNlIHRocm91Z2ggd2hpY2ggdGhlIGNoZWNrIHdhcyBpbnZva2VkCiYjNDM7ICogQG1hdGNoOglzdHJ1Y3QgeHRfbWF0Y2ggdGhyb3VnaCB3aGljaCB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkCiYjNDM7ICogQG1hdGNoaW5mbzoJcGVyLW1hdGNoIGRhdGEKJiM0MzsgKiBAZmFtaWx5OglhY3R1YWwgTkZQUk9UT18qIHRocm91Z2ggd2hpY2ggdGhlIGZ1bmN0aW9uIGlzIGludm9rZWQKJiM0MzsgKgkJKGhlbHBmdWwgd2hlbiBtYXRjaC0mZ3Q7ZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKQogICovCiBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIHsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CkBAIC0xMDUsMTAgJiM0MzsxMTIsMTYgQEAgc3RydWN0IHh0X210ZHRvcl9wYXJhbSB7CiAgKiBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gLSBwYXJhbWV0ZXJzIGZvciB0YXJnZXQgZXh0ZW5zaW9ucyYjMzk7CiAgKiBjaGVja2VudHJ5IGZ1bmN0aW9ucwogICoKJiM0MzsgKiBAbmV0OgluZXR3b3JrIG5hbWVzcGFjZSB0aHJvdWdoIHdoaWNoIHRoZSBjaGVjayB3YXMgaW52b2tlZAomIzQzOyAqIEB0YWJsZToJdGFibGUgdGhlIHJ1bGUgaXMgdHJpZWQgdG8gYmUgaW5zZXJ0ZWQgaW50bwogICogQGVudHJ5aW5mbzoJdGhlIGZhbWlseS1zcGVjaWZpYyBydWxlIGRhdGEKICAqIAkJKHN0cnVjdCBpcHRfZW50cnksIGlwNnRfZW50cnksIGFycHRfZW50cnksIGVidF9lbnRyeSkKLSAqCi0gKiBPdGhlciBmaWVsZHMgc2VlIGFib3ZlLgomIzQzOyAqIEB0YXJnZXQ6CXRoZSB0YXJnZXQgZXh0ZW5zaW9uCiYjNDM7ICogQHRhcmdpbmZvOglwZXItdGFyZ2V0IGRhdGEKJiM0MzsgKiBAaG9va19tYXNrOgl2aWEgd2hpY2ggaG9va3MgdGhlIG5ldyBydWxlIGlzIHJlYWNoYWJsZQomIzQzOyAqIEBmYW1pbHk6CWFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZAomIzQzOyAqCQkoaGVscGZ1bCB3aGVuIG1hdGNoLSZndDtmYW1pbHkgPT0gTkZQUk9UT19VTlNQRUMpCiYjNDM7ICogQG5mdF9jb21wYXQ6CXJ1bm5pbmcgZnJvbSB0aGUgbmZ0IGNvbXBhdCBsYXllciBpZiB0cnVlCiAgKi8KIHN0cnVjdCB4dF90Z2Noa19wYXJhbSB7CiAJc3RydWN0IG5ldCAqbmV0OwpAQCAtMzM2LDkgJiM0MzszNDksOSBAQCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqeHRfYWxsb2NfdGFibGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSk7CiB2b2lkIHh0X2ZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyk7CiAKIC8qKgotICogeHRfcmVjc2VxIC0gcmVjdXJzaXZlIHNlcWNvdW50IGZvciBuZXRmaWx0ZXIgdXNlCiYjNDM7ICogdmFyIHh0X3JlY3NlcSAtIHJlY3Vyc2l2ZSBzZXFjb3VudCBmb3IgbmV0ZmlsdGVyIHVzZQogICoKLSAqIFBhY2tldCBwcm9jZXNzaW5nIGNoYW5nZXMgdGhlIHNlcWNvdW50IG9ubHkgaWYgbm8gcmVjdXJzaW9uIGhhcHBlbmVkCiYjNDM7ICogUGFja2V0IHByb2Nlc3NpbmcgY2hhbmdlcyB0aGUgc2VxY291bnQgb25seSBpZiBubyByZWN1cnNpb24gaGFwcGVuZWQuCiAgKiBnZXRfY291bnRlcnMoKSBjYW4gdXNlIHJlYWRfc2VxY291bnRfYmVnaW4oKS9yZWFkX3NlcWNvdW50X3JldHJ5KCksCiAgKiBiZWNhdXNlIHdlIHVzZSB0aGUgbm9ybWFsIHNlcWNvdW50IGNvbnZlbnRpb24gOgogICogTG93IG9yZGVyIGJpdCBzZXQgdG8gMSBpZiBhIHdyaXRlciBpcyBhY3RpdmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaAppbmRleCBiZTRhMTIwZDU0OWViMy4uYzAyNDM0NWM5YmQ4NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaApAQCAtMjYsNiAmIzQzOzI2LDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgewogCXBvc3NpYmxlX25ldF90IG5ldDsKIAogCS8qIFdlIGV4cGVjdCB0aGlzIHR1cGxlLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFzayAqLwomIzQzOwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG1hc3Rlcl90dXBsZTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCA4MTAyNTEwMWY4NmRhYS4uYzc2MWNkODE1OGIyNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaApAQCAtMTE0LDYgJiM0MzsxMTQsMTAgQEAgaW50IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICosIHVuc2lnbmVkIGludCwKIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKiwKIAkJCQkgICAgIHVuc2lnbmVkIGludCk7CiAKJiM0MzsjZGVmaW5lIG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChuYW1lKSBcCiYjNDM7CXByX3dhcm4oJiMzNDtUaGUgJXMgY29ubnRyYWNrIGhlbHBlciBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwuXG4mIzM0OwlcCiYjNDM7CQkmIzM0O1BsZWFzZSBjb250YWN0IHRoZSBuZXRmaWx0ZXItZGV2ZWwgbWFpbGluZyBsaXN0IGlmIHlvdSBzdGlsbCBuZWVkIHRoaXMuXG4mIzM0OywgbmFtZSkKJiM0MzsKIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKTsKIAogaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA2NjVmODAwOGNjNGIyNy4uNGMwNGNkOGQ0MGEyMjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTI1Niw4ICYjNDM7MjU2LDcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE5GX0NPTk5UUkFDS19JUkMKLQl0cmlzdGF0ZSAmIzM0O0lSQyBwcm90b2NvbCBzdXBwb3J0JiMzNDsKLQlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KJiM0MzsJdHJpc3RhdGUgJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKSYjMzQ7CiAJaGVscAogCSAgVGhlcmUgaXMgYSBjb21tb25seS11c2VkIGV4dGVuc2lvbiB0byBJUkMgY2FsbGVkCiAJICBEaXJlY3QgQ2xpZW50LXRvLUNsaWVudCBQcm90b2NvbCAoRENDKS4gIFRoaXMgZW5hYmxlcyB1c2VycyB0byBzZW5kCkBAIC0yNjcsNiAmIzQzOzI2Niw4IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfSVJDCiAJICB1c2luZyBOQVQsIHRoaXMgZXh0ZW5zaW9uIHdpbGwgZW5hYmxlIHlvdSB0byBzZW5kIGZpbGVzIGFuZCBpbml0aWF0ZQogCSAgY2hhdHMuICBOb3RlIHRoYXQgeW91IGRvIE5PVCBuZWVkIHRoaXMgZXh0ZW5zaW9uIHRvIGdldCBmaWxlcyBvcgogCSAgaGF2ZSBvdGhlcnMgaW5pdGlhdGUgY2hhdHMsIG9yIGV2ZXJ5dGhpbmcgZWxzZSBpbiBJUkMuCiYjNDM7CSAgRENDIHRyYWNraW5nIGJlaGluZCBOQVQgcmVxdWlyZXMgcGxhaW50ZXh0ICh1bmVuY3J5cHRlZCkgSVJDLCBzbwomIzQzOwkgIHRoaXMgaGVscGVyIGlzIG9mIGxpbWl0ZWQgdXNlIHRoZXNlIGRheXMuCiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0zMDgsMTcgJiM0MzszMDksMTcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19TTk1QCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE5GX0NPTk5UUkFDS19QUFRQCi0JdHJpc3RhdGUgJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQmIzM0OwomIzQzOwl0cmlzdGF0ZSAmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZCkmIzM0OwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECiAJc2VsZWN0IE5GX0NUX1BST1RPX0dSRQogCWhlbHAKIAkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUFBUUCAoUG9pbnQgdG8gUG9pbnQgVHVubmVsbGluZwogCSAgUHJvdG9jb2wsIFJGQzI2MzcpIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIE5BVC4KIAotCSAgSWYgeW91IGFyZSBydW5uaW5nIFBQVFAgc2Vzc2lvbnMgb3ZlciBhIHN0YXRlZnVsIGZpcmV3YWxsIG9yIE5BVAomIzQzOwkgIElmIHlvdSBhcmUgc3RpbGwgcnVubmluZyBQUFRQIHNlc3Npb25zIG92ZXIgYSBzdGF0ZWZ1bCBmaXJld2FsbCBvciBOQVQKIAkgIGJveCwgeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuCiAKLQkgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkIHlldC4KJiM0MzsJICBQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgUFBUUCBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIHN1cHBvcnRlZC4KIAkgIFNwZWNpZmljYWxseSB0aGVzZSBsaW1pdGF0aW9ucyBleGlzdDoKIAkgICAgLSBCbGluZGx5IGFzc3VtZXMgdGhhdCBjb250cm9sIGNvbm5lY3Rpb25zIGFyZSBhbHdheXMgZXN0YWJsaXNoZWQKIAkgICAgICBpbiBQTlMtJmd0O1BBQyBkaXJlY3Rpb24uIFRoaXMgaXMgYSB2aW9sYXRpb24gb2YgUkZDMjYzNy4KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jCmluZGV4IGRkNjcwMDRhNWNjMDllLi45MTU4MjA2OWY2ZDJlZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jCkBAIC0xODMsMTcgJiM0MzsxODMsMTYgQEAgc3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LAogCQlyZXR1cm4gLUVOT0VOVDsKIAogCWlmIChjdCAmYW1wOyZhbXA7IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHsKLQkJLyogbG9jYWwgY29ubmVjdGlvbnMgYXJlIGNvbmZpcm1lZCBpbiBwb3N0cm91dGluZyBzbyBjb25maXJtYXRpb24KLQkJICogbWlnaHQgaGF2ZSBoYXBwZW5lZCBiZWZvcmUgaGl0dGluZyBjb25ubGltaXQKJiM0MzsJCS8qIENvbm5lY3Rpb24gaXMgY29uZmlybWVkIGJ1dCBtaWdodCBzdGlsbCBiZSBpbiB0aGUgc2V0dXAgcGhhc2UuCiYjNDM7CQkgKiBPbmx5IHNraXAgdGhlIHRyYWNraW5nIGlmIGl0IGlzIGZ1bGx5IGFzc3VyZWQuIFRoaXMgZ3VhcmFudGVlcwomIzQzOwkJICogdGhhdCBzZXR1cCBwYWNrZXRzIG9yIHJldHJhbnNtaXNzaW9ucyBhcmUgcHJvcGVybHkgY291bnRlZCBhbmQKJiM0MzsJCSAqIGRlZHVwbGljYXRlZC4KIAkJICovCi0JCWlmIChza2ItJmd0O3NrYl9paWYgIT0gTE9PUEJBQ0tfSUZJTkRFWCkgewomIzQzOwkJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKSkgewogCQkJZXJyID0gLUVFWElTVDsKIAkJCWdvdG8gb3V0X3B1dDsKIAkJfQogCi0JCS8qIHRoaXMgaXMgbGlrZWx5IGEgbG9jYWwgY29ubmVjdGlvbiwgc2tpcCBvcHRpbWl6YXRpb24gdG8gYXZvaWQKLQkJICogYWRkaW5nIGR1cGxpY2F0ZXMgZnJvbSBhICYjMzk7cGFja2V0IHRyYWluJiMzOTsKLQkJICovCiAJCWdvdG8gY2hlY2tfY29ubmVjdGlvbnM7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jCmluZGV4IDQwMDExOWI2MzIwZTcyLi5iZjc4ODI4Yzc1NDlkNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKQEAgLTYyLDYgJiM0Mzs2Miw3IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoZXhwID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCiYjNDM7CWV4cC0mZ3Q7bWFzdGVyX3R1cGxlCSAgPSBjdC0mZ3Q7dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7CiAJZXhwLSZndDt0dXBsZSAgICAgICAgICAgICAgICA9IGN0LSZndDt0dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZTsKIAogCWhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLSZndDtoZWxwZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwppbmRleCA0OWUxOGVkYTAzN2VmMS4uMzg2MzBjNWUwMDZmMDggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCkBAIC0zNTUsNiAmIzQzOzM1NSw4IEBAIHZvaWQgbmZfY3RfZXhwZWN0X2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdW5zaWduZWQgaW50IGNsYXNzLAogCWV4cC0mZ3Q7dHVwbGUuc3JjLmwzbnVtID0gZmFtaWx5OwogCWV4cC0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtID0gcHJvdG87CiAKJiM0MzsJZXhwLSZndDttYXN0ZXJfdHVwbGUgPSBjdC0mZ3Q7dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7CiYjNDM7CiAJaWYgKHNhZGRyKSB7CiAJCW1lbWNweSgmYW1wO2V4cC0mZ3Q7dHVwbGUuc3JjLnUzLCBzYWRkciwgbGVuKTsKIAkJaWYgKHNpemVvZihleHAtJmd0O3R1cGxlLnNyYy51MykgJmd0OyBsZW4pCkBAIC00OTQsOSAmIzQzOzQ5NiwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBfX25mX2N0X2V4cGVjdF9jaGVjayhzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LAogCQkJCQkgICBsb2NrZGVwX2lzX2hlbGQoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKTsKIAlpZiAoaGVscGVyKSB7CiAJCXAgPSAmYW1wO2hlbHBlci0mZ3Q7ZXhwZWN0X3BvbGljeVtleHBlY3QtJmd0O2NsYXNzXTsKLQkJaWYgKHAtJmd0O21heF9leHBlY3RlZCAmYW1wOyZhbXA7Ci0JCSAgICBtYXN0ZXJfaGVscC0mZ3Q7ZXhwZWN0aW5nW2V4cGVjdC0mZ3Q7Y2xhc3NdICZndDs9IHAtJmd0O21heF9leHBlY3RlZCkKJiM0MzsJCWlmIChtYXN0ZXJfaGVscC0mZ3Q7ZXhwZWN0aW5nW2V4cGVjdC0mZ3Q7Y2xhc3NdICZndDs9IHAtJmd0O21heF9leHBlY3RlZCkKIAkJCWV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgcCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZGVmYXVsdF9leHBfcG9saWN5ID0gewomIzQzOwkJCS5tYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVCwKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQlpZiAobWFzdGVyX2hlbHAtJmd0O2V4cGVjdGluZ1tleHBlY3QtJmd0O2NsYXNzXSAmZ3Q7PSBkZWZhdWx0X2V4cF9wb2xpY3kubWF4X2V4cGVjdGVkKQomIzQzOwkJCWV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgJmFtcDtkZWZhdWx0X2V4cF9wb2xpY3kpOwogCX0KIAogCWNuZXQgPSBuZl9jdF9wZXJuZXQobmV0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggOGI5NDAwMWMyNDMwNjYuLjUwMDUwOWIxNzY2M2VkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwpAQCAtMzc0LDggJiM0MzszNzQsMTMgQEAgaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiAJaWYgKCFuZl9jdF9oZWxwZXJfaGFzaCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlpZiAobWUtJmd0O2V4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCAmZ3Q7IE5GX0NUX0VYUEVDVF9NQVhfQ05UKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7PSBtZS0mZ3Q7ZXhwZWN0X2NsYXNzX21heDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbWUtJmd0O2V4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkKQomIzQzOwkJCW1lLSZndDtleHBlY3RfcG9saWN5W2ldLm1heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UOwomIzQzOwomIzQzOwkJaWYgKG1lLSZndDtleHBlY3RfcG9saWN5W2ldLm1heF9leHBlY3RlZCAmZ3Q7IE5GX0NUX0VYUEVDVF9NQVhfQ05UKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAltdXRleF9sb2NrKCZhbXA7bmZfY3RfaGVscGVyX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbmZfY3RfaGVscGVyX2hzaXplOyBpJiM0MzsmIzQzOykgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwppbmRleCAwYzExN2I4NDkyZTk5Mi4uMTkzYWIzNGRiNzk1ZjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKQogewogCWludCBpLCByZXQ7CiAKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKEhFTFBFUl9OQU1FKTsKJiM0MzsKIAlpZiAobWF4X2RjY19jaGFubmVscyAmbHQ7IDEpIHsKIAkJcHJfZXJyKCYjMzQ7bWF4X2RjY19jaGFubmVscyBtdXN0IG5vdCBiZSB6ZXJvXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDRlNzhkMjQ4Mjk4OTVlLi40MjE3NzE1ZDQyZGMyNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtMTk1MywxOSAmIzQzOzE5NTMsNiBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoIXN0cmNtcChoZWxwbmFtZSwgJiMzNDsmIzM0OykgJmFtcDsmYW1wOyBoZWxwKSB7Ci0JCWhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLSZndDtoZWxwZXIpOwotCQlpZiAoaGVscGVyKSB7Ci0JCQkvKiB3ZSBoYWQgYSBoZWxwZXIgYmVmb3JlIC4uLiAqLwotCQkJbmZfY3RfcmVtb3ZlX2V4cGVjdGF0aW9ucyhjdCk7Ci0JCQlSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtJmd0O2hlbHBlciwgTlVMTCk7Ci0JCQlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aGVscGVyLSZndDtjdF9yZWZjbnQpKQotCQkJCWtmcmVlX3JjdShoZWxwZXIsIHJjdSk7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiAwOwotCX0KLQogCWhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksCiAJCQkJCSAgICBuZl9jdF9wcm90b251bShjdCkpOwogCWlmIChoZWxwZXIgPT0gTlVMTCkgewpAQCAtMzAxNSw3ICYjNDM7MzAwMiw2IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKIHsKIAlfX3MzMiB0aW1lb3V0ID0gKF9fczMyKShSRUFEX09OQ0UoZXhwLSZndDt0aW1lb3V0KSAtIG5mY3RfdGltZV9zdGFtcCkgLyBIWjsKLQlzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyID0gZXhwLSZndDttYXN0ZXI7CiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpCiAJc3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtczsKQEAgLTMwMzAsOSAmIzQzOzMwMTYsNyBAQCBjdG5ldGxpbmtfZXhwX2R1bXBfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCWlmIChjdG5ldGxpbmtfZXhwX2R1bXBfbWFzayhza2IsICZhbXA7ZXhwLSZndDt0dXBsZSwgJmFtcDtleHAtJmd0O21hc2spICZsdDsgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsCi0JCQkJICZhbXA7bWFzdGVyLSZndDt0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwKLQkJCQkgQ1RBX0VYUEVDVF9NQVNURVIpICZsdDsgMCkKJiM0MzsJaWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsICZhbXA7ZXhwLSZndDttYXN0ZXJfdHVwbGUsIENUQV9FWFBFQ1RfTUFTVEVSKSAmbHQ7IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKQpAQCAtMzA0NSw5ICYjNDM7MzAyOSw5IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaWYgKG5sYV9wdXRfYmUzMihza2IsIENUQV9FWFBFQ1RfTkFUX0RJUiwgaHRvbmwoZXhwLSZndDtkaXIpKSkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JCW5hdF90dXBsZS5zcmMubDNudW0gPSBuZl9jdF9sM251bShtYXN0ZXIpOwomIzQzOwkJbmF0X3R1cGxlLnNyYy5sM251bSA9IGV4cC0mZ3Q7bWFzdGVyX3R1cGxlLnNyYy5sM251bTsKIAkJbmF0X3R1cGxlLnNyYy51MyA9IGV4cC0mZ3Q7c2F2ZWRfYWRkcjsKLQkJbmF0X3R1cGxlLmRzdC5wcm90b251bSA9IG5mX2N0X3Byb3RvbnVtKG1hc3Rlcik7CiYjNDM7CQluYXRfdHVwbGUuZHN0LnByb3RvbnVtID0gZXhwLSZndDttYXN0ZXJfdHVwbGUuZHN0LnByb3RvbnVtOwogCQluYXRfdHVwbGUuc3JjLnUgPSBleHAtJmd0O3NhdmVkX3Byb3RvOwogCiAJCWlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLCAmYW1wO25hdF90dXBsZSwKQEAgLTM1ODksNiAmIzQzOzM1NzMsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LAogI2VuZGlmCiAJcmN1X2Fzc2lnbl9wb2ludGVyKGV4cC0mZ3Q7aGVscGVyLCBoZWxwZXIpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihleHAtJmd0O2Fzc2lnbl9oZWxwZXIsIGFzc2lnbl9oZWxwZXIpOwomIzQzOwlleHAtJmd0O21hc3Rlcl90dXBsZSA9IGN0LSZndDt0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTsKIAlleHAtJmd0O3R1cGxlID0gKnR1cGxlOwogCWV4cC0mZ3Q7bWFzay5zcmMudTMgPSBtYXNrLSZndDtzcmMudTM7CiAJZXhwLSZndDttYXNrLnNyYy51LmFsbCA9IG1hc2stJmd0O3NyYy51LmFsbDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCA3NzY1MDVhNzhlNjQ1Ni4uODBmYzE0Yzg3ZGRjNGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKQEAgLTU0NSw2ICYjNDM7NTQ1LDggQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKQogCiAJcHB0cC5kZXN0cm95ID0gZ3JlX3BwdHBfZGVzdHJveV9zaWJsaW5nczsKIAomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQocHB0cC5uYW1lKTsKJiM0MzsKIAlyZXR1cm4gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO3BwdHAsICZhbXA7cHB0cF9wdHIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCmluZGV4IGU3YTNmYjJiMmQ5NDY2Li4yOWU5M2FjMWUyZTQwMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKQEAgLTMyNiw4ICYjNDM7MzI2LDEwIEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQlyZXR1cm4gZmFsc2U7CiAKIAlpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGN0eC0mZ3Q7b2Zmc2V0KTsKLQlzaXplID0gaXBoLSZndDtpaGwgJmx0OyZsdDsgMjsKJiM0MzsJaWYgKGlwaC0mZ3Q7aWhsICZsdDsgNSkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAomIzQzOwlzaXplID0gaXBoLSZndDtpaGwgJmx0OyZsdDsgMjsKIAlpZiAoaXBfaXNfZnJhZ21lbnQoaXBoKSB8fCB1bmxpa2VseShpcF9oYXNfb3B0aW9ucyhzaXplKSkpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMzM1LDkgJiM0MzszMzcsOSBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7Ci0JCWN0eC0mZ3Q7dHVuLnByb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwkJY3R4LSZndDt0dW4ucHJvdG8gPSBpcGgtJmd0O3Byb3RvY29sOwogCQljdHgtJmd0O3R1bi5oZHJfc2l6ZSA9IHNpemU7Ci0JCWN0eC0mZ3Q7b2Zmc2V0ICYjNDM7PSBzaXplOwomIzQzOwkJY3R4LSZndDtvZmZzZXQgJiM0Mzs9IGN0eC0mZ3Q7dHVuLmhkcl9zaXplOwogCX0KIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDJiYmY1MTYzYzBlMjczLi42M2ZmNmI0ZDVkMjE0YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMTE4MSw2ICYjNDM7MTE4MSwxNiBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLAogCXN0cnVjdCBuZl9ob29rX29wcyAqbmF0X29wczsKIAlpbnQgaSwgcmV0OwogCiYjNDM7I2lmbmRlZiBNT0RVTEUKJiM0MzsJLyogSWYgbmZfbmF0X2NvcmUgaXMgYnVpbHQtaW4gYW5kIG5mX25hdF9pbml0KCkgZmFpbHMsIGRlcGVuZGVudAomIzQzOwkgKiBtb2R1bGVzIGxpa2UgbmZ0X2NoYWluX25hdC5rbyBtYXkgc3RpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLgomIzQzOwkgKiBIb3dldmVyLCBuYXRfbmV0IHdvdWxkIGJlIGludmFsaWQsIGxpa2VseSBwb2ludGluZyB0byBzb21lIG90aGVyCiYjNDM7CSAqIHBlci1uZXQgc3RydWN0dXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSghbmZfbmF0X2hvb2spKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOyNlbmRpZgomIzQzOwogCWlmIChXQVJOX09OX09OQ0UocGYgJmd0Oz0gQVJSQVlfU0laRShuYXRfbmV0LSZndDtuYXRfcHJvdG9fbmV0KSkpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jCmluZGV4IDBjYWE5MzA0ZDJkMDMwLi42Mzg2NGI5MjgyNTkwOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMKQEAgLTM5Nyw2ICYjNDM7Mzk3LDIyIEBAIHN0YXRpYyBpbnQgbmZ0X3RhcmdldF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQgPSBleHByLSZndDtvcHMtJmd0O2RhdGE7CiYjNDM7CiYjNDM7CS8qIERvIG5vdCBhbGxvdyBVTlNQRUMgdG8gc3RhbmQtaW4gZm9yIE5GUFJPVE9fQlJJREdFCiYjNDM7CSAqIHRhcmdldHM6IHRoZXkgYXJlIGluY29tcGF0aWJsZS4gIGVidGFibGVzIHRhcmdldHMgcmV0dXJuCiYjNDM7CSAqIEVCVF9BQ0NFUFQsIERST1AgYW5kIHNvIG9uIHdoaWNoIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoCiYjNDM7CSAqIE5GX0FDQ0VQVCwgTkZfRFJPUCBhbmQgc28gb24uCiYjNDM7CSAqLwomIzQzOwlpZiAodGFyZ2V0LSZndDtmYW1pbHkgIT0gTkZQUk9UT19CUklER0UpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5mdF90YXJnZXRfdmFsaWRhdGUoY3R4LCBleHByKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX25mdF9tYXRjaF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKIAkJCSAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKQEAgLTkzMiwxMyAmIzQzOzk0OCwxNSBAQCBuZnRfdGFyZ2V0X3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAlvcHMtJmd0O2luaXQgPSBuZnRfdGFyZ2V0X2luaXQ7CiAJb3BzLSZndDtkZXN0cm95ID0gbmZ0X3RhcmdldF9kZXN0cm95OwogCW9wcy0mZ3Q7ZHVtcCA9IG5mdF90YXJnZXRfZHVtcDsKLQlvcHMtJmd0O3ZhbGlkYXRlID0gbmZ0X3RhcmdldF92YWxpZGF0ZTsKIAlvcHMtJmd0O2RhdGEgPSB0YXJnZXQ7CiAKLQlpZiAoZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFKQomIzQzOwlpZiAoZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFKSB7CiAJCW9wcy0mZ3Q7ZXZhbCA9IG5mdF90YXJnZXRfZXZhbF9icmlkZ2U7Ci0JZWxzZQomIzQzOwkJb3BzLSZndDt2YWxpZGF0ZSA9IG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlOwomIzQzOwl9IGVsc2UgewogCQlvcHMtJmd0O2V2YWwgPSBuZnRfdGFyZ2V0X2V2YWxfeHQ7CiYjNDM7CQlvcHMtJmd0O3ZhbGlkYXRlID0gbmZ0X3RhcmdldF92YWxpZGF0ZTsKJiM0MzsJfQogCiAJcmV0dXJuIG9wczsKIGVycjoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCmluZGV4IDk1ODA1NGRkMmUyZWNjLi4wM2E4OGM3N2UwZjAyOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCkBAIC0xMjE1LDExICYjNDM7MTIxNSwyMyBAQCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogewogCXUzMgkJdGltZW91dDsKIH07CiAKJiM0MztzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGppZmZpZXNfdmFsID0gbXNlY3NfdG9famlmZmllcyhubGFfZ2V0X3UzMihhdHRyKSk7CiYjNDM7CiYjNDM7CWlmIChqaWZmaWVzX3ZhbCAmZ3Q7IFVJTlRfTUFYKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CSp2YWwgPSBqaWZmaWVzX3ZhbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSwKIAkJCQkgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAoIXRiW05GVEFfQ1RfRVhQRUNUX0w0UFJPVE9dIHx8CiAJICAgICF0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0gfHwKQEAgLTEyNTQsOCAmIzQzOzEyNjYsMTEgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKJiM0MzsJZXJyID0gbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldCh0YltORlRBX0NUX0VYUEVDVF9USU1FT1VUXSwgJmFtcDtwcml2LSZndDt0aW1lb3V0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJcHJpdi0mZ3Q7ZHBvcnQgPSBubGFfZ2V0X2JlMTYodGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdKTsKLQlwcml2LSZndDt0aW1lb3V0ID0gbmxhX2dldF91MzIodGJbTkZUQV9DVF9FWFBFQ1RfVElNRU9VVF0pOwogCXByaXYtJmd0O3NpemUgPSBubGFfZ2V0X3U4KHRiW05GVEFfQ1RfRVhQRUNUX1NJWkVdKTsKIAogCXJldHVybiBuZl9jdF9uZXRuc19nZXQoY3R4LSZndDtuZXQsIGN0eC0mZ3Q7ZmFtaWx5KTsKQEAgLTEyNzUsNyAmIzQzOzEyOTAsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAobmxhX3B1dF9iZTE2KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDNQUk9UTywgaHRvbnMocHJpdi0mZ3Q7bDNudW0pKSB8fAogCSAgICBubGFfcHV0X3U4KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDRQUk9UTywgcHJpdi0mZ3Q7bDRwcm90bykgfHwKIAkgICAgbmxhX3B1dF9iZTE2KHNrYiwgTkZUQV9DVF9FWFBFQ1RfRFBPUlQsIHByaXYtJmd0O2Rwb3J0KSB8fAotCSAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIHByaXYtJmd0O3RpbWVvdXQpIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIGppZmZpZXNfdG9fbXNlY3MocHJpdi0mZ3Q7dGltZW91dCkpIHx8CiAJICAgIG5sYV9wdXRfdTgoc2tiLCBORlRBX0NUX0VYUEVDVF9TSVpFLCBwcml2LSZndDtzaXplKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0xMzI1LDcgJiM0MzsxMzQwLDcgQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLAogCQkgICAgICAgICAgJmFtcDtjdC0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywKIAkJICAgICAgICAgICZhbXA7Y3QtJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCiAJCSAgICAgICAgICBwcml2LSZndDtsNHByb3RvLCBOVUxMLCAmYW1wO3ByaXYtJmd0O2Rwb3J0KTsKLQlleHAtJmd0O3RpbWVvdXQgJiM0Mzs9IHByaXYtJmd0O3RpbWVvdXQgKiBIWjsKJiM0MzsJZXhwLSZndDt0aW1lb3V0ICYjNDM7PSBwcml2LSZndDt0aW1lb3V0OwogCiAJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkKIAkJcmVncy0mZ3Q7dmVyZGljdC5jb2RlID0gTkZfRFJPUDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jCmluZGV4IDc2NDFmMjQ5NjE0Yzk3Li45ZWQyODhjOWQxNjg4MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jCkBAIC0yNCwxNCAmIzQzOzI0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICYjNDM7IDFdID0gewogc3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKHN0cnVjdCBzeW5wcm94eV9vcHRpb25zICpvcHRzLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwLAogCQkJCSAgICAgc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCwKLQkJCQkgICAgIHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvICppbmZvLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdikKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyAqaW5mbykKIHsKIAl0aGlzX2NwdV9pbmMoc25ldC0mZ3Q7c3RhdHMtJmd0O3N5bl9yZWNlaXZlZCk7CiAJaWYgKHRjcC0mZ3Q7ZWNlICZhbXA7JmFtcDsgdGNwLSZndDtjd3IpCiAJCW9wdHMtJmd0O29wdGlvbnMgfD0gTkZfU1lOUFJPWFlfT1BUX0VDTjsKIAotCW9wdHMtJmd0O29wdGlvbnMgJmFtcDs9IHByaXYtJmd0O2luZm8ub3B0aW9uczsKJiM0MzsJb3B0cy0mZ3Q7b3B0aW9ucyAmYW1wOz0gaW5mby0mZ3Q7b3B0aW9uczsKIAlvcHRzLSZndDttc3NfZW5jb2RlID0gb3B0cy0mZ3Q7bXNzX29wdGlvbjsKIAlvcHRzLSZndDttc3Nfb3B0aW9uID0gaW5mby0mZ3Q7bXNzOwogCWlmIChvcHRzLSZndDtvcHRpb25zICZhbXA7IE5GX1NZTlBST1hZX09QVF9USU1FU1RBTVApCkBAIC01Niw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92NChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LAogCiAJaWYgKHRjcC0mZ3Q7c3luKSB7CiAJCS8qIEluaXRpYWwgU1lOIGZyb20gY2xpZW50ICovCi0JCW5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsICZhbXA7aW5mbywgcHJpdik7CiYjNDM7CQluZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCAmYW1wO2luZm8pOwogCQlzeW5wcm94eV9zZW5kX2NsaWVudF9zeW5hY2sobmV0LCBza2IsIHRjcCwgb3B0cyk7CiAJCWNvbnN1bWVfc2tiKHNrYik7CiAJCXJlZ3MtJmd0O3ZlcmRpY3QuY29kZSA9IE5GX1NUT0xFTjsKQEAgLTg3LDcgJiM0Mzs4Niw3IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y2KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsCiAKIAlpZiAodGNwLSZndDtzeW4pIHsKIAkJLyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi8KLQkJbmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgJmFtcDtpbmZvLCBwcml2KTsKJiM0MzsJCW5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsICZhbXA7aW5mbyk7CiAJCXN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFja19pcHY2KG5ldCwgc2tiLCB0Y3AsIG9wdHMpOwogCQljb25zdW1lX3NrYihza2IpOwogCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoCmluZGV4IGQ4NjBmN2Q5NzQ0YmY4Li43MjYxOTc1OTU3ZWYxOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2gKQEAgLTIsMTggJiM0MzsyLDMyIEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjCiAjIFRlc3RpbmcgRm9yIFNDVFAgQ09MTElTSU9OIFNDRU5BUklPIGFzIEJlbG93OgotIwomIzQzOyMgMS4gU3RhbGUgSU5JVF9BQ0sgY2FwdHVyZToKICMgICAxNDozNTo0Ny42NTUyNzkgSVAgQ0xJRU5UX0lQLlBPUlQgJmd0OyBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV0KICMgICAxNDozNTo0OC4zNTMyNTAgSVAgU0VSVkVSX0lQLlBPUlQgJmd0OyBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMTE4NzIwNjE4N10KICMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgJmd0OyBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDIwMTc4MzczNTldCiAjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUICZndDsgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT10KICMgICAxNDozNTo0OC4zNTM5NzcgSVAgQ0xJRU5UX0lQLlBPUlQgJmd0OyBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBBQ0tdCiAjICAgMTQ6MzU6NDguODU1MzM1IElQIFNFUlZFUl9JUC5QT1JUICZndDsgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAxNjQ1Nzk5NzBdCiYjNDM7IyAgIChEZWxheWVkKQomIzQzOyMKJiM0MzsjIDIuIFN0YWxlIElOSVQgY2FwdHVyZToKJiM0MzsjICAgMTQ6MzU6NDguMzUzMjUwIElQIFNFUlZFUl9JUC5QT1JUICZndDsgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUXSBbaW5pdCB0YWc6IDExODcyMDYxODddCiYjNDM7IyAgIDE0OjM1OjQ4LjM1MzI3NSBJUCBDTElFTlRfSVAuUE9SVCAmZ3Q7IFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMjAxNzgzNzM1OV0KJiM0MzsjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUICZndDsgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT10KJiM0MzsjICAgMTQ6MzU6NDguMzUzOTc3IElQIENMSUVOVF9JUC5QT1JUICZndDsgU0VSVkVSX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgQUNLXQomIzQzOyMgICAxNDozNTo0Ny42NTUyNzkgSVAgQ0xJRU5UX0lQLlBPUlQgJmd0OyBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV0KJiM0MzsjICAgKERlbGF5ZWQpCiYjNDM7IyAgIDE0OjM1OjQ4Ljg1NTMzNSBJUCBTRVJWRVJfSVAuUE9SVCAmZ3Q7IENMSUVOVF9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMTY0NTc5OTcwXQogIwogIyBUT1BPOiBTRVJWRVJfTlMgKGxpbmswKSZsdDstLS0mZ3Q7KGxpbmsxKSBST1VURVJfTlMgKGxpbmsyKSZsdDstLS0mZ3Q7KGxpbmszKSBDTElFTlRfTlMKIAogc291cmNlIGxpYi5zaAogCiYjNDM7Y2hlY2t0b29sICYjMzQ7bmZ0IC0tdmVyc2lvbiYjMzQ7ICYjMzQ7cnVuIHRlc3Qgd2l0aG91dCBuZnQmIzM0OwomIzQzO2NoZWNrdG9vbCAmIzM0O3RjIC1oJiMzNDsgJiMzNDtydW4gdGVzdCB3aXRob3V0IHRjJiMzNDsKJiM0MztjaGVja3Rvb2wgJiMzNDttb2Rwcm9iZSAtcSBzY3RwJiMzNDsgJiMzNDtsb2FkIHNjdHAgbW9kdWxlJiMzNDsKJiM0MzsKIENMSUVOVF9JUD0mIzM0OzE5OC41MS4yMDAuMSYjMzQ7CiBDTElFTlRfUE9SVD0xMjM0CiAKQEAgLTI0LDcgJiM0MzszOCw4IEBAIENMSUVOVF9HVz0mIzM0OzE5OC41MS4yMDAuMiYjMzQ7CiBTRVJWRVJfR1c9JiMzNDsxOTguNTEuMTAwLjImIzM0OwogCiAjIHNldHVwIHRoZSB0b3BvCi1zZXR1cCgpIHsKJiM0Mzt0b3BvX3NldHVwKCkgewomIzQzOwkjIHNldHVwX25zIGNsZWFucyB1cCBleGlzdGluZyBuZXQgbmFtZXNwYWNlcyBmaXJzdC4KIAlzZXR1cF9ucyBDTElFTlRfTlMgU0VSVkVSX05TIFJPVVRFUl9OUwogCWlwIC1uICYjMzQ7JFNFUlZFUl9OUyYjMzQ7IGxpbmsgYWRkIGxpbmswIHR5cGUgdmV0aCBwZWVyIG5hbWUgbGluazEgbmV0bnMgJiMzNDskUk9VVEVSX05TJiMzNDsKIAlpcCAtbiAmIzM0OyRDTElFTlRfTlMmIzM0OyBsaW5rIGFkZCBsaW5rMyB0eXBlIHZldGggcGVlciBuYW1lIGxpbmsyIG5ldG5zICYjMzQ7JFJPVVRFUl9OUyYjMzQ7CkBAIC0zOCwzNSAmIzQzOzUzLDUzIEBAIHNldHVwKCkgewogCWlwIC1uICYjMzQ7JFJPVVRFUl9OUyYjMzQ7IGFkZHIgYWRkICRTRVJWRVJfR1cvMjQgZGV2IGxpbmsxCiAJaXAgLW4gJiMzNDskUk9VVEVSX05TJiMzNDsgYWRkciBhZGQgJENMSUVOVF9HVy8yNCBkZXYgbGluazIKIAlpcCBuZXQgZXhlYyAmIzM0OyRST1VURVJfTlMmIzM0OyBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2ZvcndhcmQ9MQomIzQzOwlzeXNjdGwgLXdxIG5ldC5uZXRmaWx0ZXIubmZfbG9nX2FsbF9uZXRucz0xCiAKIAlpcCAtbiAmIzM0OyRDTElFTlRfTlMmIzM0OyBsaW5rIHNldCBsaW5rMyB1cAogCWlwIC1uICYjMzQ7JENMSUVOVF9OUyYjMzQ7IGFkZHIgYWRkICRDTElFTlRfSVAvMjQgZGV2IGxpbmszCiAJaXAgLW4gJiMzNDskQ0xJRU5UX05TJiMzNDsgcm91dGUgYWRkICRTRVJWRVJfSVAgZGV2IGxpbmszIHZpYSAkQ0xJRU5UX0dXCiYjNDM7fQomIzQzOwomIzQzO2NvbmZfZGVsYXkoKQomIzQzO3sKJiM0MzsJIyBzaW11bGF0ZSB0aGUgZGVsYXkgb24gT1ZTIHVwY2FsbCBieSBzZXR0aW5nIHVwIGEgZGVsYXkgZm9yIElOSVRfQUNLL0lOSVQgd2l0aAomIzQzOwlsb2NhbCBucz0kMQomIzQzOwlsb2NhbCBsaW5rPSQyCiYjNDM7CWxvY2FsIGNodW5rX3R5cGU9JDMKIAotCSMgc2ltdWxhdGUgdGhlIGRlbGF5IG9uIE9WUyB1cGNhbGwgYnkgc2V0dGluZyB1cCBhIGRlbGF5IGZvciBJTklUX0FDSyB3aXRoCi0JIyB0YyBvbiAkU0VSVkVSX05TIHNpZGUKLQl0YyAtbiAmIzM0OyRTRVJWRVJfTlMmIzM0OyBxZGlzYyBhZGQgZGV2IGxpbmswIHJvb3QgaGFuZGxlIDE6IGh0YiByMnEgNjQKLQl0YyAtbiAmIzM0OyRTRVJWRVJfTlMmIzM0OyBjbGFzcyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxMDBtYml0Ci0JdGMgLW4gJiMzNDskU0VSVkVSX05TJiMzNDsgZmlsdGVyIGFkZCBkZXYgbGluazAgcGFyZW50IDE6IHByb3RvY29sIGlwIHUzMiBtYXRjaCBpcCBwcm90b2NvbCAxMzIgXAotCQkweGZmIG1hdGNoIHU4IDIgMHhmZiBhdCAzMiBmbG93aWQgMToxCi0JaWYgISB0YyAtbiAmIzM0OyRTRVJWRVJfTlMmIzM0OyBxZGlzYyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOjEgaGFuZGxlIDEwOiBuZXRlbSBkZWxheSAxMjAwbXM7IHRoZW4KJiM0MzsJIyB1c2UgYSBzbWFsbGVyIG51bWJlciBmb3IgYXNzb2MmIzM5O3MgbWF4X3JldHJhbnMgdG8gcmVwcm9kdWNlIHRoZSBpc3N1ZQomIzQzOwlpcCBuZXQgZXhlYyAmIzM0OyRDTElFTlRfTlMmIzM0OyBzeXNjdGwgLXdxIG5ldC5zY3RwLmFzc29jaWF0aW9uX21heF9yZXRyYW5zPTMKJiM0MzsKJiM0MzsJdGMgLW4gJiMzNDskbnMmIzM0OyBxZGlzYyBhZGQgZGV2ICYjMzQ7JGxpbmsmIzM0OyByb290IGhhbmRsZSAxOiBodGIgcjJxIDY0CiYjNDM7CXRjIC1uICYjMzQ7JG5zJiMzNDsgY2xhc3MgYWRkIGRldiAmIzM0OyRsaW5rJiMzNDsgcGFyZW50IDE6IGNsYXNzaWQgMToxIGh0YiByYXRlIDEwMG1iaXQKJiM0MzsJdGMgLW4gJiMzNDskbnMmIzM0OyBmaWx0ZXIgYWRkIGRldiAmIzM0OyRsaW5rJiMzNDsgcGFyZW50IDE6IHByb3RvY29sIGlwIFwKJiM0MzsJCXUzMiBtYXRjaCBpcCBwcm90b2NvbCAxMzIgMHhmZiBtYXRjaCB1OCAmIzM0OyRjaHVua190eXBlJiMzNDsgMHhmZiBhdCAzMiBmbG93aWQgMToxCiYjNDM7CWlmICEgdGMgLW4gJiMzNDskbnMmIzM0OyBxZGlzYyBhZGQgZGV2ICYjMzQ7JGxpbmsmIzM0OyBwYXJlbnQgMToxIGhhbmRsZSAxMDogbmV0ZW0gZGVsYXkgMTIwMG1zOyB0aGVuCiAJCWVjaG8gJiMzNDtTS0lQOiBDYW5ub3QgYWRkIG5ldGVtIHFkaXNjJiMzNDsKLQkJZXhpdCAka3NmdF9za2lwCiYjNDM7CQlyZXR1cm4gJGtzZnRfc2tpcAogCWZpCiAKIAkjIHNpbXVsYXRlIHRoZSBjdHN0YXRlIGNoZWNrIG9uIE9WUyBuZl9jb25udHJhY2sKLQlpcCBuZXQgZXhlYyAmIzM0OyRST1VURVJfTlMmIzM0OyBpcHRhYmxlcyAtQSBGT1JXQVJEIC1tIHN0YXRlIC0tc3RhdGUgSU5WQUxJRCxVTlRSQUNLRUQgLWogRFJPUAotCWlwIG5ldCBleGVjICYjMzQ7JFJPVVRFUl9OUyYjMzQ7IGlwdGFibGVzIC1BIElOUFVUIC1wIHNjdHAgLWogRFJPUAotCi0JIyB1c2UgYSBzbWFsbGVyIG51bWJlciBmb3IgYXNzb2MmIzM5O3MgbWF4X3JldHJhbnMgdG8gcmVwcm9kdWNlIHRoZSBpc3N1ZQotCW1vZHByb2JlIC1xIHNjdHAKLQlpcCBuZXQgZXhlYyAmIzM0OyRDTElFTlRfTlMmIzM0OyBzeXNjdGwgLXdxIG5ldC5zY3RwLmFzc29jaWF0aW9uX21heF9yZXRyYW5zPTMKJiM0MzsJaXAgbmV0IGV4ZWMgJiMzNDskUk9VVEVSX05TJiMzNDsgbmZ0IC1mIC0gJmx0OyZsdDstRU9GCiYjNDM7CXRhYmxlIGlwIHQgewomIzQzOwkJY2hhaW4gZm9yd2FyZCB7CiYjNDM7CQkJdHlwZSBmaWx0ZXIgaG9vayBmb3J3YXJkIHByaW9yaXR5IGZpbHRlcjsgcG9saWN5IGFjY2VwdDsKJiM0MzsJCQltZXRhIGw0cHJvdG8gaWNtcCBjb3VudGVyIGFjY2VwdAomIzQzOwkJCWN0IHN0YXRlIG5ldyBjb3VudGVyIGFjY2VwdAomIzQzOwkJCWN0IHN0YXRlIGVzdGFibGlzaGVkLHJlbGF0ZWQgY291bnRlciBhY2NlcHQKJiM0MzsJCQljdCBzdGF0ZSBpbnZhbGlkIGxvZyBmbGFncyBhbGwgY291bnRlciBkcm9wIGNvbW1lbnQgXAomIzQzOwkJCSYjMzQ7RXhwZWN0IHRvIGRyb3Agc3RhbGUgSU5JVC9JTklUX0FDSyBjaHVua3MmIzM0OwomIzQzOwkJCWNvdW50ZXIKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlFT0YKJiM0MzsJcmV0dXJuIDAKIH0KIAogY2xlYW51cCgpIHsKLQlpcCBuZXQgZXhlYyAmIzM0OyRDTElFTlRfTlMmIzM0OyBwa2lsbCBzY3RwX2NvbGxpc2lvbiAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxCi0JaXAgbmV0IGV4ZWMgJiMzNDskU0VSVkVSX05TJiMzNDsgcGtpbGwgc2N0cF9jb2xsaXNpb24gJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MQomIzQzOwkjIGNsZWFudXBfYWxsX25zIHRlcm1pbmF0ZXMgcnVubmluZyBwcm9jZXNzZXMgaW4gdGhlIG5hbWVzcGFjZXMuCiAJY2xlYW51cF9hbGxfbnMKJiM0MzsJc3lzY3RsIC13cSBuZXQubmV0ZmlsdGVyLm5mX2xvZ19hbGxfbmV0bnM9MAogfQogCiBkb190ZXN0KCkgewpAQCAtODEsNyAmIzQzOzExNCwxOSBAQCBkb190ZXN0KCkgewogCiAjIHJ1biB0aGUgdGVzdCBjYXNlCiB0cmFwIGNsZWFudXAgRVhJVAotc2V0dXAgJmFtcDsmYW1wOyBcCi1lY2hvICYjMzQ7VGVzdCBmb3IgU0NUUCBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOiYjMzQ7ICZhbXA7JmFtcDsgXAotZG9fdGVzdCAmYW1wOyZhbXA7IGVjaG8gJiMzNDtQQVNTISYjMzQ7Ci1leGl0ICQ/CiYjNDM7CiYjNDM7ZWNobyAmIzM0O1Rlc3QgZm9yIFNDVFAgSU5JVF9BQ0sgQ29sbGlzaW9uIGluIG5mX2Nvbm50cmFjazomIzM0OwomIzQzO3RvcG9fc2V0dXAgfHwgZXhpdCAkPwomIzQzO2NvbmZfZGVsYXkgJFNFUlZFUl9OUyBsaW5rMCAyIHx8IGV4aXQgJD8KJiM0MzsKJiM0MztpZiAhIGRvX3Rlc3Q7IHRoZW4KJiM0MzsJZXhpdCAka3NmdF9mYWlsCiYjNDM7ZmkKJiM0MzsKJiM0MztlY2hvICYjMzQ7VGVzdCBmb3IgU0NUUCBJTklUIENvbGxpc2lvbiBpbiBuZl9jb25udHJhY2s6JiMzNDsKJiM0Mzt0b3BvX3NldHVwIHx8IGV4aXQgJD8KJiM0Mztjb25mX2RlbGF5ICRDTElFTlRfTlMgbGluazMgMSB8fCBleGl0ICQ/CiYjNDM7CiYjNDM7aWYgISBkb190ZXN0OyB0aGVuCiYjNDM7CWV4aXQgJGtzZnRfZmFpbAomIzQzO2ZpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLnNoCmluZGV4IGQ4MDM5MDg0OGU4NTA5Li43Yzg1N2EyZTBmMzQ5NCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2gKQEAgLTg1LDExICYjNDM7ODUsMTIgQEAgaXAgLW5ldCAmIzM0OyRuczMmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTAuMC4zLjEKIGlwIC1uZXQgJiMzNDskbnMzJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGRlYWQ6Mzo6MQogCiBsb2FkX3J1bGVzZXQoKSB7Ci0JbG9jYWwgbmFtZT0kMQotCWxvY2FsIHByaW89JDIKJiM0MzsJbG9jYWwgZmFtaWx5PSQxCiYjNDM7CWxvY2FsIG5hbWU9JDIKJiM0MzsJbG9jYWwgcHJpbz0kMwogCiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcm91dGVyJiMzNDsgbmZ0IC1mIC9kZXYvc3RkaW4gJmx0OyZsdDtFT0YKLXRhYmxlIGluZXQgJG5hbWUgewomIzQzO3RhYmxlICRmYW1pbHkgJG5hbWUgewogCWNoYWluIG5mcSB7CiAJCWlwIHByb3RvY29sIGljbXAgcXVldWUgYnlwYXNzCiAJCWljbXB2NiB0eXBlIHsgJiMzNDtlY2hvLXJlcXVlc3QmIzM0OywgJiMzNDtlY2hvLXJlcGx5JiMzNDsgfSBxdWV1ZSBudW0gMSBieXBhc3MKQEAgLTIyOCw2ICYjNDM7MjI5LDcgQEAgbmZfcXVldWVfd2FpdCgpCiB0ZXN0X3F1ZXVlKCkKIHsKIAlsb2NhbCBleHBlY3RlZD0mIzM0OyQxJiMzNDsKJiM0MzsJbG9jYWwgZmFtaWx5PSYjMzQ7JDImIzM0OwogCWxvY2FsIGxhc3Q9JiMzNDsmIzM0OwogCiAJIyBzcGF3biBuZl9xdWV1ZSBsaXN0ZW5lcnMKQEAgLTI1NSwxMSAmIzQzOzI1NywxMyBAQCB0ZXN0X3F1ZXVlKCkKIAkJaWYgWyB4JiMzNDskbGFzdCYjMzQ7ICE9IHgmIzM0OyRleHBlY3RlZCBwYWNrZXRzIHRvdGFsJiMzNDsgXTsgdGhlbgogCQkJZWNobyAmIzM0O0ZBSUw6IEV4cGVjdGVkICRleHBlY3RlZCBwYWNrZXRzIHRvdGFsLCBidXQgZ290ICRsYXN0JiMzNDsgMSZndDsmYW1wOzIKIAkJCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyb3V0ZXImIzM0OyBuZnQgbGlzdCBydWxlc2V0CiYjNDM7CQkJZWNobyAtbiAmIzM0OyRUTVBGSUxFMDogJiMzNDs7Y2F0ICYjMzQ7JFRNUEZJTEUwJiMzNDsKJiM0MzsJCQllY2hvIC1uICYjMzQ7JFRNUEZJTEUxOiAmIzM0OztjYXQgJiMzNDskVE1QRklMRTEmIzM0OwogCQkJZXhpdCAxCiAJCWZpCiAJZG9uZQogCi0JZWNobyAmIzM0O1BBU1M6IEV4cGVjdGVkIGFuZCByZWNlaXZlZCAkbGFzdCYjMzQ7CiYjNDM7CWVjaG8gJiMzNDtQQVNTOiBFeHBlY3RlZCBhbmQgcmVjZWl2ZWQgJGxhc3QgKCRmYW1pbHkpJiMzNDsKIH0KIAogbGlzdGVuZXJfcmVhZHkoKQpAQCAtNDAwLDYgJiM0Mzs0MDQsOCBAQCBFT0YKIAogCWtpbGwgJiMzNDskbmZxcGlkJiMzNDsKIAllY2hvICYjMzQ7UEFTUzogaWNtcCYjNDM7bmZxdWV1ZSB2aWEgdnJmJiMzNDsKJiM0MzsJaXAgLW5ldCAmIzM0OyRuczEmIzM0OyBsaW5rIGRlbCB0dnJmCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMxJiMzNDsgbmZ0IGZsdXNoIHJ1bGVzZXQKIH0KIAogc2N0cF9saXN0ZW5lcl9yZWFkeSgpCkBAIC04MTQsMTIgJiM0Mzs4MjAsNTMgQEAgRU9GCiAJY2hlY2tfdGFpbnRlZCAmIzM0O3F1ZXVlIHByb2dyYW0gZXhpdGluZyB3aGlsZSBwYWNrZXRzIHF1ZXVlZCYjMzQ7CiB9CiAKJiM0Mzt0ZXN0X3F1ZXVlX2JyaWRnZSgpCiYjNDM7ewomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zcm91dGVyJiMzNDsgYWRkciBmbHVzaCBkZXYgdmV0aDAKJiM0MzsJaXAgLW5ldCAmIzM0OyRuc3JvdXRlciYjMzQ7IGFkZHIgZmx1c2ggZGV2IHZldGgxCiYjNDM7CiYjNDM7CWlwIC1uZXQgJiMzNDskbnNyb3V0ZXImIzM0OyBsaW5rIGFkZCBicjAgdHlwZSBicmlkZ2UKJiM0MzsJaXAgLW5ldCAmIzM0OyRuc3JvdXRlciYjMzQ7IGxpbmsgc2V0IHZldGgwIG1hc3RlciBicjAKJiM0MzsJaXAgLW5ldCAmIzM0OyRuc3JvdXRlciYjMzQ7IGxpbmsgc2V0IHZldGgxIG1hc3RlciBicjAKJiM0MzsKJiM0MzsJaXAgLW5ldCAmIzM0OyRuc3JvdXRlciYjMzQ7IGxpbmsgc2V0IGJyMCB1cAomIzQzOwomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zcm91dGVyJiMzNDsgYWRkciBhZGQgMTAuMC4yLjEvMTYgZGV2IGJyMAomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zcm91dGVyJiMzNDsgYWRkciBhZGQgZGVhZDoyOjoxLzY0IGRldiBicjAgbm9kYWQKJiM0MzsKJiM0MzsJaXAgLW5ldCAmIzM0OyRuczEmIzM0OyBhZGRyIGZsdXNoIGRldiBldGgwCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMyJiMzNDsgYWRkciBmbHVzaCBkZXYgZXRoMAomIzQzOwomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIDEwLjAuMS4xLzE2IGRldiBldGgwCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgYWRkciBhZGQgZGVhZDoyOjoyLzY0IGRldiBldGgwIG5vZGFkCiYjNDM7CiYjNDM7CWlwIC1uZXQgJiMzNDskbnMyJiMzNDsgYWRkciBhZGQgMTAuMC4yLjk5LzE2IGRldiBldGgwCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMyJiMzNDsgYWRkciBhZGQgZGVhZDoyOjo5OS82NCBkZXYgZXRoMCBub2RhZAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcm91dGVyJiMzNDsgbmZ0IGZsdXNoIHJ1bGVzZXQKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2Ni5jb25mLmFsbC5mb3J3YXJkaW5nPTAgJmd0OyAvZGV2L251bGwKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgwLmZvcndhcmRpbmc9MCAmZ3Q7IC9kZXYvbnVsbAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcm91dGVyJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDEuZm9yd2FyZGluZz0wICZndDsgL2Rldi9udWxsCiYjNDM7CiYjNDM7CWlmICEgdGVzdF9waW5nO3RoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBuZXRucyBicmlkZ2UgY29ubmVjdGl2aXR5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJHJldAomIzQzOwlmaQomIzQzOwomIzQzOwlsb2FkX3J1bGVzZXQgJiMzNDticmlkZ2UmIzM0OyAmIzM0O2ZpbHRlciYjMzQ7IDEwCiYjNDM7CXRlc3RfcXVldWUgMTAgJiMzNDticmlkZ2UmIzM0OwomIzQzOwomIzQzOwlsb2FkX3J1bGVzZXQgJiMzNDticmlkZ2UmIzM0OyAmIzM0O2ZpbHRlcjImIzM0OyAyMAomIzQzOwl0ZXN0X3F1ZXVlIDIwICYjMzQ7YnJpZGdlJiMzNDsKJiM0Mzt9CiYjNDM7CiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcm91dGVyJiMzNDsgc3lzY3RsIG5ldC5pcHY2LmNvbmYuYWxsLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgwLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgxLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgyLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogCi1sb2FkX3J1bGVzZXQgJiMzNDtmaWx0ZXImIzM0OyAwCiYjNDM7bG9hZF9ydWxlc2V0ICYjMzQ7aW5ldCYjMzQ7ICYjMzQ7ZmlsdGVyJiMzNDsgMAogCiBpZiB0ZXN0X3Bpbmc7IHRoZW4KIAkjIHF1ZXVlIGJ5cGFzcyB3b3JrcyAocnVsZXMgd2VyZSBza2lwcGVkLCBubyBsaXN0ZW5lcikKQEAgLTg0MiwxMSAmIzQzOzg4OSwxMSBAQCBsb2FkX2NvdW50ZXJfcnVsZXNldCAxMAogIyAxeCBpY21wIHByZXJvdXRpbmcsZm9yd2FyZCxwb3N0cm91dGluZyAtJmd0OyAzIHF1ZXVlIGV2ZW50cyAoNiBpbmNsLiByZXBseSkuCiAjIDF4IGljbXAgcHJlcm91dGluZyxpbnB1dCxvdXRwdXQgcG9zdHJvdXRpbmcgLSZndDsgNCBxdWV1ZSBldmVudHMgaW5jbC4gcmVwbHkuCiAjIHNvIHdlIGV4cGVjdCB0aGF0IHVzZXJzcGFjZSBwcm9ncmFtIHJlY2VpdmVzIDEwIHBhY2tldHMuCi10ZXN0X3F1ZXVlIDEwCiYjNDM7dGVzdF9xdWV1ZSAxMCAmIzM0O2luZXQmIzM0OwogCiAjIHNhbWUuICBXZSBxdWV1ZSB0byBhIHNlY29uZCBwcm9ncmFtIGFzIHdlbGwuCi1sb2FkX3J1bGVzZXQgJiMzNDtmaWx0ZXIyJiMzNDsgMjAKLXRlc3RfcXVldWUgMjAKJiM0Mztsb2FkX3J1bGVzZXQgJiMzNDtpbmV0JiMzNDsgJiMzNDtmaWx0ZXIyJiMzNDsgMjAKJiM0Mzt0ZXN0X3F1ZXVlIDIwICYjMzQ7aW5ldCYjMzQ7CiBpcCBuZXRucyBleGVjICYjMzQ7JG5zMSYjMzQ7IG5mdCBmbHVzaCBydWxlc2V0CiAKIHRlc3RfdGNwX2ZvcndhcmQKQEAgLTg2Myw0ICYjNDM7OTEwLDcgQEAgdGVzdF9xdWV1ZV9zdHJlc3MKIHRlc3RfaWNtcF92cmYKIHRlc3RfcXVldWVfcmVtb3ZhbAogCiYjNDM7IyB0dXJucyByb3V0ZXIgaW50byBhIGJyaWRnZQomIzQzO3Rlc3RfcXVldWVfYnJpZGdlCiYjNDM7CiBleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5ldGZpbHRlciBQYXRjaCBTZXJpZXMgUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgbmV0ZmlsdGVyIHBhdGNoIHNlcmllcy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgc3Vic3RhbnRpYWwgc2V0IG9mIGNoYW5nZXMgYWNyb3NzIHZhcmlvdXMgY29tcG9uZW50cywgdG91Y2hpbmcgYm90aCBjb3JlIGNvbm50cmFjayBhbmQgdGhlIG5ld2VyIG5mdGFibGVzIGluZnJhc3RydWN0dXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgbWlub3IgdHdlYWssIHNvIHdlIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKRmlyc3QsIEkgc2VlIHNldmVyYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHh0YWJsZXNgIGluZnJhc3RydWN0dXJlLCBwcmltYXJpbHkgaW4gdGhlIGB4dF9tdGNoa19wYXJhbWAsIGB4dF9tdGR0b3JfcGFyYW1gLCBgeHRfdGdjaGtfcGFyYW1gLCBhbmQgYHh0X2FjdGlvbl9wYXJhbWAgc3RydWN0dXJlcy4gIFRoZSBhZGRpdGlvbiBvZiBgZmFtaWx5YCwgYG5mdF9jb21wYXRgLCBgbmV0YCwgYG1hdGNoYCwgYW5kIG90aGVyIGZpZWxkcyBpbmRpY2F0ZXMgYSBkZWVwZXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgbmV0d29yayBuYW1lc3BhY2UgYW5kIG5mdGFibGVzIGNvbXBhdGliaWxpdHkuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBzZXJpZXMgaXMgZmFjaWxpdGF0aW5nIGEgY2xvc2VyIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgbGVnYWN5IGB4dGFibGVzYCBhbmQgdGhlIG5ld2VyIG5mdGFibGVzIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHdhdGNoaW5nIHRoZSBgbmZ0X2NvbXBhdGAgZmxhZ3MgY2xvc2VseSwgYXMgdGhvc2UgYXJlIG9mdGVuIGluZGljYXRvcnMgb2YgbGVnYWN5IGNvZGUgdGhhdCBzdGlsbCBuZWVkcyBzdXBwb3J0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBuZl9jb25udHJhY2tfZXhwZWN0LmhgLCBgbmZfY29ubnRyYWNrX2hlbHBlci5oYCwgYW5kIHJlbGF0ZWQgZmlsZXMgYXJlIGFsc28gc2lnbmlmaWNhbnQuIEFkZGluZyB0aGUgYG1hc3Rlcl90dXBsZWAgZmllbGQgdG8gYG5mX2Nvbm50cmFja19leHBlY3RgIGFuZCBpbmNvcnBvcmF0aW5nIHRoZSBgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkYCBtYWNybyBzdWdnZXN0cyByZWZhY3RvcmluZyBhbmQgYSBtb3ZlIHRvd2FyZHMgbW9yZSBleHBsaWNpdCBoYW5kbGluZyBvZiBjb25uZWN0aW9uIGV4cGVjdGF0aW9ucyBhbmQgaGVscGVyIGRlcHJlY2F0aW9uLCBsaWtlbHkgaW4gcHJlcGFyYXRpb24gZm9yIHJlbW92aW5nIHNvbWUgbGVnYWN5IGZ1bmN0aW9uYWxpdHkuIFRoZSBjaGFuZ2VzIGluIGBuZl9jdF9leHBlY3RfaW5pdGAgYW5kIGBfX25mX2N0X2V4cGVjdF9jaGVja2AgZGVzZXJ2ZSBhdHRlbnRpb24sIGFzIHRoZSB1c2Ugb2YgYGRlZmF1bHRfZXhwX3BvbGljeWAgaWYgYGhlbHBlcmAgaXMgTlVMTCBoYXMgc3VidGxlIGJ1dCBpbXBvcnRhbnQgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZXNlIGNoYW5nZXMgdGhvcm91Z2hseS4KClRoZSBjaGFuZ2VzIGluIGBuZl9jb25uY291bnQuY2AsIHNwZWNpZmljYWxseSB0aGUgc2hpZnQgZnJvbSBgc2tiLSZndDtza2JfaWlmICE9IExPT1BCQUNLX0lGSU5ERVhgIHRvIGB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cylgIGluIGBfX25mX2Nvbm5jb3VudF9hZGRgLCBsb29rcyBsaWtlIGEgcGVyZm9ybWFuY2UvYWNjdXJhY3kgb3B0aW1pemF0aW9uLiBUaGlzIGRlc2VydmVzIGEgY2xvc2VyIGxvb2sgdG8gc2VlIGhvdyBpdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4gTGlrZXdpc2UsIGNoYW5nZXMgdG8gYG5mX2Nvbm50cmFja19icm9hZGNhc3QuY2AgYW5kIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCwgd2hpY2ggbm93IHVzZSBgZXhwLSZndDttYXN0ZXJfdHVwbGVgIGhlYXZpbHksIHdhcnJhbnQgdGVzdGluZywgYXMgd2VsbCBhcyB0aGUgYWRkaXRpb24gdG8gYG5mX2Nvbm50cmFja19wcHRwLmNgIGFuZCBgbmZfY29ubnRyYWNrX2lyYy5jYCB0aGF0IGRlcHJlY2F0ZSB0aGUgaGVscGVyLgoKVGhlIGBuZl9mbG93X3RhYmxlX2lwLmNgIGNoYW5nZSwgd2l0aCB0aGUgYWRkZWQgYGlwaC0mZ3Q7aWhsICZsdDsgNWAgY2hlY2sgaW4gYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2AsIGxvb2tzIGxpa2UgYSBwYWNrZXQgc2FuaXR5IGNoZWNrLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgYSBjcmFzaCBvciBzb21lIG90aGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3IuICBJIGFsc28gc2VlIHNvbWUgYWRkZWQgY2hlY2tzIGluIGBuZl9uYXRfY29yZS5jYCBmb3IgYCFuZl9uYXRfaG9va2AgaW4gYG5mX25hdF9yZWdpc3Rlcl9mbmAuIFRoZXNlIGFyZSBiYXNpYyBzYW5pdHkgY2hlY2tzIHRoYXQgc2hvdWxkIGJlIHRlc3RlZCwgYnV0IHRoZXkgc2hvdWxkIGJlIGVhc2lseSBmdXp6YWJsZS4KClRoZSBuZnRhYmxlcyBjaGFuZ2VzLCBlc3BlY2lhbGx5IGluIGBuZnRfY29tcGF0LmNgIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgIGFuZCBpdHMgaW50ZWdyYXRpb24gd2l0aCBgTkZQUk9UT19CUklER0VgLCBzdHJvbmdseSBpbmRpY2F0ZSBmdXJ0aGVyIGJyaWRnZSBzdXBwb3J0IGFuZCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSB1cGdyYWRlcy4gIEkmIzM5O20gYWxzbyBzZWVpbmcgYW4gZXh0ZW5zaW9uIG9uIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIGBuZnRfY3QuY2Agd2l0aCBgbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldGAgYmVpbmcgYWRkZWQsIGFuZCBjaGFuZ2VzIHRvIGhvdyB0aGUgdGltZW91dCBpcyB1c2VkIGluIHNldmVyYWwgbG9jYXRpb25zLiBDaGFuZ2VzIGluIGBuZnRfc3lucHJveHkuY2Agc2ltcGxpZnlpbmcgYG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9uc2Agd2l0aCByZW1vdmFsIG9mIHRoZSBgcHJpdmAgYXJndW1lbnQgc2VlbSBmYWlybHkgbWlub3IuCgpGaW5hbGx5LCB0aGUgdXBkYXRlcyB0byB0aGUgc2VsZi10ZXN0cyBpbiBgY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoYCBhbmQgYG5mdF9xdWV1ZS5zaGAgYXJlIHBvc2l0aXZlIHNpZ25zLiBHb29kIHRlc3RzIGFyZSBjcml0aWNhbCB0byB2ZXJpZnkgYWxsIHRoaXMsIHNvIHRoZXkgc2hvdWxkIGJlIGludGVncmF0ZWQgaW50byBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZS4KCioqRnVuY3Rpb25hbCBDaGFuZ2VzIGFuZCBDb25maWd1cmF0aW9uKioKCkZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGUgbW9zdCBpbnRlcmVzdGluZyBjaGFuZ2VzIGFyZToKCiogICBgbmZfY29ubmNvdW50LmNgOiAgQWx0ZXJlZCBsb2dpYyBpbiBgX19uZl9jb25uY291bnRfYWRkYC4KKiAgIGBuZl9jb25udHJhY2tfZXhwZWN0LmNgOiBNb2RpZmljYXRpb24gdG8gYF9fbmZfY3RfZXhwZWN0X2NoZWNrYAoqICAgYG5mX2Nvbm50cmFja19oZWxwZXIuY2A6IENoYW5nZXMgaW4gYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAuCiogICBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2A6ICBDaGFuZ2VzIGFyb3VuZCBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgIGFuZCBgZXhwLSZndDttYXN0ZXJfdHVwbGVgLgoqICAgYG5mX2Zsb3dfdGFibGVfaXAuY2A6ICBUaGUgbmV3IGNoZWNrIGluIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLgoqICAgYG5mdF9jb21wYXQuY2A6IFRoZSBhZGRpdGlvbiBvZiBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgLgoqICAgYG5mdF9jdC5jYDogVGhlIGFkZGVkCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25uY291bnQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT03OT1vYmotJChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKSAmIzQzOz0gbmZfc3lucHJveHlfY29yZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgwLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkgJiM0Mzs9IG5mX2Nvbm5jb3VudC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgT2JqZWN0IEZpbGVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4gVGhlIGNsdWUgaXMgaW4gdGhlIGZpbGUgbmFtZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgbmZfZmxvd190YWJsZV9pcC5vYCBhbmQgYW55IG90aGVyIHNpbWlsYXIgb2JqZWN0IGZpbGVzLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmbG93IHRhYmxlIGZvciBJUCB0cmFmZmljLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29kZSBvcmdhbml6YXRpb24sIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBlc3BlY2lhbGx5LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBlcmZvcm1hbmNlIGFuZCBzY2FsYWJpbGl0eSwgc28gSSBuZWVkIGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBzZWN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGxpZXMsIHNvIEkgY2FuIGV4dHJhcG9sYXRlIHdoYXQgZWxzZSBtaWdodCBleGlzdCBpbiB0aGUgbGFyZ2VyIGtlcm5lbCBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2lwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQyPW9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjkzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqRXhhbWluaW5nIE5ldGZpbHRlciBDb21wYXRpYmlsaXR5IE1vZHVsZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGEgZmV3IE5ldGZpbHRlciBtb2R1bGVzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBjaGVjayBvbiBgbmZ0X2NvbXBhdC5vYCwgdGhlbiBtb3ZlIG9uIHRvIGBuZnRfY3Qub2AsIGFuZCBmaW5hbGx5LCBJJiMzOTtsbCBleGFtaW5lIGBuZnRfc3lucHJveHkub2AuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBpZGVudGlmeSBhbnl0aGluZyB0aGF0IG5lZWRzIHR3ZWFraW5nIG9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gVGhlc2UgYXJlIGtleSBjb21wb25lbnRzLCBzbyB0aG9yb3VnaG5lc3MgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIGFuZCBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY29tcGF0Lm98bmZ0X2N0Lm98bmZ0X3N5bnByb3h5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTA4PW9iai0kKENPTkZJR19ORl9UQUJMRVMpXHRcdCYjNDM7PSBuZl90YWJsZXMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX05GVF9DT01QQVQpXHQmIzQzOz0gbmZ0X2NvbXBhdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExMC1vYmotJChDT05GSUdfTkZUX0NPTk5MSU1JVClcdCYjNDM7PSBuZnRfY29ubmxpbWl0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ORlRfTlVNR0VOKVx0JiM0Mzs9IG5mdF9udW1nZW4ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzMj1vYmotJChDT05GSUdfTkZUX1hGUk0pXHRcdCYjNDM7PSBuZnRfeGZybS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzMzpvYmotJChDT05GSUdfTkZUX1NZTlBST1hZKVx0JiM0Mzs9IG5mdF9zeW5wcm94eS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBuZl9jb25udHJhY2tfbmV0bGluay5vYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXJnZXQgaXMgYG5mX2Nvbm50cmFja19uZXRsaW5rLm9gLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IG5ldGxpbmsgc29ja2V0cyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBsaWtlbHkgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgYmV0d2VlbiB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRoZSBrZXJuZWwmIzM5O3MgY29ubmVjdGlvbiB0cmFja2luZyBzdWJzeXN0ZW0uIEkgZXhwZWN0IHRvIHNlZSBldmlkZW5jZSBvZiB0aGUgbmV0bGluayBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiBoZXJlIOKAkyB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmVzLCB0aGUgYXR0cmlidXRlIGhhbmRsaW5nLCBhbmQgdGhlIGxpa2VseSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUgaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gZXhhbWluZSBob3cgaXQgaGFuZGxlcyBjb25uZWN0aW9uIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG1vZGlmaWNhdGlvbiBldmVudHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCByZWxhdGVkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllczogQXJlIHRoZXJlIGFueSBidWZmZXIgb3ZlcmZsb3dzIGluIGhvdyBpdCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgZGF0YT8gRG9lcyBpdCBjb3JyZWN0bHkgdmFsaWRhdGUgaW5wdXQgYmVmb3JlIHBhc3NpbmcgaXQgdG8ga2VybmVsIGludGVybmFscz8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgd2hlbiBoYW5kbGluZyBjb25jdXJyZW50IG5ldGxpbmsgbWVzc2FnZXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIG1vZHVsZSYjMzk7cyBleHBvcnRlZCBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIG5ldGxpbmsgbWVzc2FnZSBoYW5kbGluZyBhbmQgZGF0YSBwYXJzaW5nLiBJdCYjMzk7bGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCYjMzk7cyBjb25jdXJyZW5jeSBtb2RlbCAoc3BpbmxvY2tzLCBSQ1UsIGV0Yy4pIHRvIGV2YWx1YXRlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfbmV0bGluay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICYjNDM7PSBuZl9jb25udHJhY2sub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LKSAmIzQzOz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjU4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBDb25maWd1cmF0aW9ucyBhbmQgRnVuY3Rpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNldCBvZiBjb25maWd1cmF0aW9uczogYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktgLCBgTkZfRkxPV19UQUJMRWAsIGBORlRfQ09NUEFUYCwgYE5GVF9DVGAsIGFuZCBgTkZUX1NZTlBST1hZYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBpbnRlcmRlcGVuZGVuY2llcyBhbmQgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25uZWN0ZWQgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLgoKTGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgbGlrZWx5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYy4gSSBzZWU6IGBfX25mX2Nvbm5jb3VudF9hZGRgLCB3aGljaCBwcm9iYWJseSBoYW5kbGVzIGNvbm5lY3Rpb24gY291bnRpbmc7IGBfX25mX2N0X2V4cGVjdF9jaGVja2AsIGludm9sdmVkIGluIGNvbm5lY3Rpb24gdHJhY2tpbmcgZXhwZWN0YXRpb25zOyBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgZGVhbGluZyB3aXRoIGhlbHBlciBtb2R1bGVzOyBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgLCB3aGljaCBsaWtlbHkgdGllcyBpbnRvIG5ldGxpbmsgY29uZmlndXJhdGlvbjsgYGN0bmV0bGlua19hbGxvY19leHBlY3RgIGZvciBhbGxvY2F0aW5nIGV4cGVjdGF0aW9ucyB2aWEgbmV0bGluazsgYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2Agc2VlbXMgc3BlY2lmaWMgdG8gSVB2NCB0dW5uZWwgcHJvdG9jb2xzOyBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgIGZvciBicmlkZ2UgdmFsaWRhdGlvbnMgaW4gbmZ0YWJsZXM7IGFuZCwgdGhlIG5mdGFibGVzIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHN5bnByb3h5IGZ1bmN0aW9uczogYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAsIGBuZnRfc3lucHJveHlfZXZhbF92NGAsIGFuZCBgbmZ0X3N5bnByb3h5X2V2YWxfdjZgLiBUaGF0IHNldCBnaXZlcyBtZSBhIGdyZWF0IHBpY3R1cmUgb2YgdGhlIHBpZWNlcy4KCk5vdyBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYW5kIGxvb2sgZm9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBsaW5rZWQgdG8gdGhvc2UgcHJpbWFyeSBmdW5jdGlvbnMuIEkgYW0gc2VlaW5nIGBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHBgLCBgbmZfY3RfZXhwZWN0X2luaXRgLCBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCwgYW5kIGBuZnRfdGFyZ2V0X3NlbGVjdF9vcHNgLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgYW55IGNoYW5nZXMgbWFkZSB0byBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYC4gVGhpcyBpcyBnaXZpbmcgbWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGUgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19pcDRfdHVubmVsX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MzA5PXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfZmxvd194bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0zMTgtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzozMTk6c3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0zMjAtXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9Mzg3PXN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDE2LVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0MTc6XHRcdHJldCA9IG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhjdHgsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00MTgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY2OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE5ldHdvcmsgRmxvdyBFbmNhcHN1bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBmdW5jdGlvbiwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBzdGF0aWNhbGx5IGNhbGxlZCBieSBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiB0cmFjaW5nIG5ldHdvcmsgZW5jYXBzdWxhdGlvbiBiZWhhdmlvci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggaG93IHRoZSBicmlkZ2UgdGFyZ2V0IGlzIHZhbGlkYXRlZC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz0zNTM9c3RhdGljIGludCBuZnRfdGFyZ2V0X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtMzk5LVxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM6NDAwOnN0YXRpYyBpbnQgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTQwMS1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz05MDM9bmZ0X3RhcmdldF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtOTU0LVx0XHRvcHMtXHUwMDNlZXZhbCA9IG5mdF90YXJnZXRfZXZhbF9icmlkZ2U7XG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzo5NTU6XHRcdG9wcy1cdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlO1xubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtOTU2LVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgKioKCkFscmlnaHQsIHNvIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gYWN0aW5nIGFzIGEgY2FsbGJhY2suIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBmb2N1cyBwb2ludCBmb3IgYW5hbHlzaXMg4oCTIGl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgd2l0aGluIHRoZSBicmlkZ2UmIzM5O3Mgb3BlcmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGl0LCBzZWUgd2hhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZy4gTXkgZXhwZWN0YXRpb24gaXMgdGhpcyBmdW5jdGlvbiBpcyB2YWxpZGF0aW5nIHRoYXQgdGhlIGRhdGEgdGhhdCBpcyBiZWluZyBicmlkZ2VkIGlzIGxlZ2l0aW1hdGUuCgpMZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBicmlkZ2Ugb3BlcmF0ZXMsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb25udHJhY2sgY29udGV4dC4gTGV0JiMzOTtzIGxvb2sgYXQgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFzcGVjdHMgYXJlIHNldCB1cC4gSSYjMzk7bSBlYWdlciB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhwZWN0YXRpb25zIGFyZSBpbml0aWFsaXplZCB0byBzZWUgaWYgdGhpcyBleHBsYWlucyB0aGUgYnJpZGdlIGluIGFueSB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEyMTg9c3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIyOC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTIyOTpzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIzMC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM2NC1cdC5ldmFsXHRcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTM2NTpcdC5pbml0XHRcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM2Ni1cdC5kZXN0cm95XHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzLCBwcmVzZW50ZWQgYXMgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTkZ0YWJsZXMgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpSaWdodCwgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgIGFuZCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAgLSB0aG9zZSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMuIFRoZXkgY2xlYXJseSBkZWZpbmUgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBldmFsdWF0aW9uIHN0ZXBzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGV4cGVjdGF0aW9ucywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIHRvIHJlc2lkZSB3aGVuIGRlYWxpbmcgd2l0aCBleHBlY3RlZCBjb25uZWN0aW9ucy4gTGV0JiMzOTtzIG1ha2UgYSBub3RlIG9mIHRob3NlIGFzIG91ciBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoaXMuCgpPa2F5LCBsZXQmIzM5O3Mgbm93IHN3aXRjaCBvdXIgYXR0ZW50aW9uIG92ZXIgdG8gYG5mdF9zeW5wcm94eV9ldmFsX3Y0YCBzaW5jZSB0aGlzIHNlZW1zIGxpa2UgYSByZWxhdGVkIGFuZCBpbnRlcmVzdGluZyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWxfdjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jPTI0PXN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTQzLVxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYzo0NDpzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92NChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy00NS1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYz0xMDY9c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTE0MC1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYzoxNDE6XHRcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcdTAwMjZfdGNwaCwgXHUwMDI2b3B0cyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTE0Mi1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRm9jdXNpbmcgb24gS2V5IFN5bWJvbHMqKgoKUmlnaHQsIGBuZnRfc3lucHJveHlfZXZhbF92NGAgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAgc2VlbSBsaWtlIGdvb2QganVtcGluZy1vZmYgcG9pbnRzLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZXhhbWluZSBjbG9zZWx5LCB0aGV5IHByb2JhYmx5IGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVzZSBhcyBzdGFydGluZyBwb2ludHMgdG8gd29yayBmcm9tLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGdlbmVyYWxpemVkLgoKTm93LCBsZXQmIzM5O3MgYWxzbyBoYXZlIGEgbG9vayBhdCB0aGUgYF9fbmZfY29ubmNvdW50X2FkZGAgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25mX2Nvbm5jb3VudF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTEzMD1zdGF0aWMgYm9vbCBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2Ioc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTY2LVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoxNjc6c3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xNjgtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTI3Nj1pbnQgbmZfY29ubmNvdW50X2FkZF9za2Ioc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjg0LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpc3QtXHUwMDNlbGlzdF9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6Mjg1Olx0cmV0ID0gX19uZl9jb25uY291bnRfYWRkKG5ldCwgc2tiLCBsM251bSwgbGlzdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTI4Ni1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpc3QtXHUwMDNlbGlzdF9sb2NrKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTUzMT1jb3VudF90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTU4MC1cdC8qIHNhbWUgc291cmNlIG5ldHdvcmsgLVx1MDAzZSBiZSBjb3VudGVkISAqL1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzo1ODE6XHRyZXQgPSBfX25mX2Nvbm5jb3VudF9hZGQobmV0LCBza2IsIGwzbnVtLCBcdTAwMjZyYmNvbm4tXHUwMDNlbGlzdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTU4Mi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJiY29ubi1cdTAwM2VsaXN0Lmxpc3RfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipNeSBMaW5lIG9mIElucXVpcnk6IE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4uIEZvY3VzaW5nIG9uIGBfX25mX2Nvbm5jb3VudF9hZGRgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGZ1bmN0aW9uIGlzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIOKAkyBhIGNyaXRpY2FsIGFyZWEgZm9yIGFuYWx5emluZyBjb25uZWN0aW9uIHN0YXRlIGFuZCBwZXJmb3JtYW5jZS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgcmVsYXRpb24gdGhhdCBpdCBoYXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gTmV4dCB1cCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBfX25mX2N0X2V4cGVjdF9jaGVja2AuIEkmIzM5O20gY3VyaW91cyBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgc29tZWhvdy4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGV4cGVjdGF0aW9uIG1hbmFnZW1lbnQsIHBlcmhhcHMgZGVhbGluZyB3aXRoIHJlbGF0ZWQgY29ubmVjdGlvbnMgb3IgY29ubmVjdGlvbiB0cmFja2luZyBvZiBwcm90b2NvbHMgdGhhdCByZXF1aXJlIG11bHRpcGxlIHN0cmVhbXMgb3IgaW50ZXJhY3Rpb25zLiBFeGFtaW5pbmcgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3Qgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgb3ZlcmFsbCB0cmFja2luZyBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZl9jdF9leHBlY3RfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYz00Mzg9c3RhdGljIHZvaWQgZXZpY3Rfb2xkZXN0X2V4cGVjdChzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy00NTktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzo0NjA6c3RhdGljIGlubGluZSBpbnQgX19uZl9jdF9leHBlY3RfY2hlY2soc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTQ2MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYz01MTk9aW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3JlcG9ydChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTUzMS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jOjUzMjpcdHJldCA9IF9fbmZfY3RfZXhwZWN0X2NoZWNrKGV4cGVjdCwgbWFzdGVyX2hlbHAsIGZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTUzMy1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKk15IExpbmUgb2YgSW5xdWlyeTogRXhwZWN0YXRpb24gQ2hlY2tzIGFuZCBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcnMqKgoKUmlnaHQsIHNvIEkgc2VlIGEgcHJvbWlzaW5nIGxlYWQgd2l0aCBgX19uZl9jdF9leHBlY3RfY2hlY2tgLiBUaGF0JiMzOTtzIGEgc29saWQgZnVuY3Rpb24gdG8ga2VlcCBpbiBtaW5kLCBhIGxpa2VseSBrZXkgcGllY2UgaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHV6emxlLiBJdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCkJ1dCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQuIFdoYXQmIzM5O3MgdGhlIHdpZGVyIGNvbnRleHQ/IEdpdmVuIHRoYXQgZXhwZWN0YXRpb25zIGFyZSBhIHBpZWNlIG9mIHRoZSBsYXJnZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCBob3cgaGVscGVycyBhcmUgcmVnaXN0ZXJlZC4gU28sIGxldCYjMzk7cyBhbHNvIGRlbHZlIGludG8gYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgbmV4dCBzdGVwLCBhcyBpdCBsaWtlbHkgZGVmaW5lcyB0aGUgbWVjaGFuaXNtcyBmb3Igc2V0dGluZyB1cCBhbmQgZW5hYmxpbmcgdGhlc2UgaGVscGVycy4gVW5kZXJzdGFuZGluZyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHdoZXJlIGV4cGVjdGF0aW9ucyBmaXQgaW4sIGFuZCBob3cgdG8gcG90ZW50aWFsbHkgaW5mbHVlbmNlIG9yIHdvcmsgd2l0aCB0aGVtLiBNeSBnb2FsLCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9uIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MzYyPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzYzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MzY0OmludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzY1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTQtfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDE1OkVYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3Rlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz00MTc9aW50IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQzMDpcdGVyciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihuZXdfaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQzMS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTE5PWludCBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUzNS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjUzNjpcdFx0ZXJyID0gX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKG5ld19oZWxwZXIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTM3LVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0yMjA9bmZubF9jdGhlbHBlcl9jcmVhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODAtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjI4MTpcdHJldCA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihoZWxwZXIpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODItXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE2MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAgaXMgYSByZWFsbHkgc29saWQgc3RhcnRpbmcgcG9pbnQgaGVyZS4gVGhhdCBmdW5jdGlvbiBpcyB0aGUga2V5IHRvIGhvb2tpbmcgdXAgbmV3IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc28gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgaXMgZGVmaW5pdGVseSBjcnVjaWFsLgoKRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmAgbmV4dC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgdXNlcnNwYWNlIHdvdWxkIGxpa2VseSB1c2UgdG8gbW9kaWZ5IG9yIHJlZ2lzdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc28gSSBiZXQgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdWx0aW1hdGVseSBnZXRzIGluaXRpYXRlZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyB3b3JrIGluIHRhbmRlbS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSByZWdpc3RyYXRpb24gcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19jaGFuZ2VfaGVscGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE5MDQ9Y3RuZXRsaW5rX3NldHVwX25hdChzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTkyNS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxOTI2OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5MjctXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTIxNjI9Y3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMTcxLVx0aWYgKGNkYVtDVEFfSEVMUF0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyMTcyOlx0XHRlcnIgPSBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihjdCwgY2RhKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMTczLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yNzkzPWN0bmV0bGlua19nbHVlX3BhcnNlX2N0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI4MDctXHRpZiAoY2RhW0NUQV9IRUxQXSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI4MDg6XHRcdGVyciA9IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKGN0LCBjZGEpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI4MDktXHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGBjdG5ldGxpbmtgIEZvY3VzKioKCk9rYXksIHNvIGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmAgc2VlbXMgbGlrZSBhIHNvbGlkIGVudHJ5IHBvaW50IGZvciBteSBjdXJyZW50IGludmVzdGlnYXRpb24uIFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgZm9jdXMgaW5pdGlhbGx5LiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mLi4uIHdoYXRldmVyIGl0IGlzIGBjdG5ldGxpbmtgIGlzIG1hbmFnaW5nLgoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAsIEkgd2FudCB0byBwaXZvdCBhbmQgZXhwbG9yZSB3aGVyZSBleHBlY3RhdGlvbiBhbGxvY2F0aW9uIGlzIGRvbmUsIHdoaWNoIGlzIHdoeSBJIHdhbnQgdG8gY2hlY2sgYGN0bmV0bGlua19hbGxvY19leHBlY3RgLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgZnVuY3Rpb24gY2FsbHMgYW5kIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcy4gVGhpcyBzZWVtcyBsaWtlIGl0IHdpbGwgYmUgYSBnb29kIHBpZWNlIG9mIHRoZSBwdXp6bGUgdG8gZm9sbG93IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYzMD1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI2MzE6Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MzItXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqYXNzaWduX2hlbHBlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mjg1Nj1jdG5ldGxpbmtfZ2x1ZV9hdHRhY2hfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODg4Olx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdCgoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICopY2RhLCBjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODg5LVx0XHRcdFx0ICAgICBhc3NpZ25faGVscGVyLCBcdTAwMjZ0dXBsZSwgXHUwMDI2bWFzayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM1MTk9c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNTIwOmN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzUyMS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphc3NpZ25faGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNjAwPWN0bmV0bGlua19jcmVhdGVfZXhwZWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYzMS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjMyOlx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjZGEsIGN0LCBOVUxMLCBcdTAwMjZ0dXBsZSwgXHUwMDI2bWFzayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYzMy1cdGlmIChJU19FUlIoZXhwKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGlzIGtlcm5lbCBuZXRsaW5rIGNvZGUuIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCDigJMgdGhhdCBmZWVscyBsaWtlIGEgZ29vZCwgZm9jdXNlZCBzcG90IHRvIHJlYWxseSBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBleHBlY3RhdGlvbiBtYW5hZ2VtZW50LiBUaGF0IGZ1bmN0aW9uIGNhbGwgc2VlbXMgbGlrZSBhIGtleSBwaWVjZS4KClJpZ2h0LCBzbyB3aGVyZSYjMzk7cyB0aGUgcmVnaXN0cmF0aW9uPyBOb3csIGxldCYjMzk7cyBzZWUsIHRoYXQgYG5mX25hdF9yZWdpc3Rlcl9mbmAgY2FsbC4uLiBsZXQmIzM5O3MgY2hlY2sgdGhhdCByZWdpc3RyYXRpb24gZnVuY3Rpb24uLi4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIHBhdGggZnJvbSB0aGVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiB3b3JrcyB3aXRoIHRoaXMgbmV0bGluayBhbGxvY2F0aW9uIHBpZWNlLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gc2VlIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIE5BVCBhbmQgY29ubmVjdGlvbiB0cmFja2luZy4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9uYXRfcmVnaXN0ZXJfZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9MTE2OT1zdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE3My1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzoxMTc0OmludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE3NS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3JpZ19uYXRfb3BzLCB1bnNpZ25lZCBpbnQgb3BzX2NvdW50KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM9Nzk3PWludCBuZl9uYXRfaXB2NF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzKVxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy03OTgte1xubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYzo3OTk6XHRyZXR1cm4gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgb3BzLVx1MDAzZXBmLCBvcHMsIG5mX25hdF9pcHY0X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtODAwLVx0XHRcdFx0ICBBUlJBWV9TSVpFKG5mX25hdF9pcHY0X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM9MTA1OD1pbnQgbmZfbmF0X2lwdjZfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcylcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA1OS17XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjEwNjA6XHRyZXR1cm4gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgb3BzLVx1MDAzZXBmLCBvcHMsIG5mX25hdF9pcHY2X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA2MS1cdFx0XHRcdCAgQVJSQVlfU0laRShuZl9uYXRfaXB2Nl9vcHMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTEwNzM9aW50IG5mX25hdF9pbmV0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMpXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy0xMDc5LVxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYzoxMDgwOlx0cmV0ID0gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgTkZQUk9UT19JUFY2LCBvcHMsIG5mX25hdF9pcHY2X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA4MS1cdFx0XHRcdCBBUlJBWV9TSVpFKG5mX25hdF9pcHY2X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA4NC1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM6MTA4NTpcdHJldCA9IG5mX25hdF9yZWdpc3Rlcl9mbihuZXQsIE5GUFJPVE9fSVBWNCwgb3BzLCBuZl9uYXRfaXB2NF9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTEwODYtXHRcdFx0XHQgQVJSQVlfU0laRShuZl9uYXRfaXB2NF9vcHMpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS2VybmVsIE5ldHdvcmsgRnVuY3Rpb24gUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIGBuZl9uYXRfcmVnaXN0ZXJfZm5gIHNlZW1zIGxpa2UgYSBwcmV0dHkgaW1wb3J0YW50IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB0byB6ZXJvIGluIG9uLiBJdCYjMzk7cyBvZnRlbiB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiAoTkFUKSBtb2R1bGVzIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHJpZ2h0PyBBbmQgd2hlbiBJIHRoaW5rIGFib3V0IHRoYXQsIEnigJltIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBleHBlY3RhdGlvbiBzZXR1cCwgd2hpY2ggd2lsbCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIHRoZSBOQVQgaGVscGVyIHdpdGggdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBOQVQgQ29ubmVjdGlvbiBUcmFja2luZyBlbnRyeSwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIGBuZl9jdF9leHBlY3RfaW5pdGAuIFRoYXQmIzM5O2xsIGxpa2VseSBzaG93IGhvdyB0aGUgc3lzdGVtIHByZXBzIGl0c2VsZiB0byBoYW5kbGUgZXhwZWN0ZWQgY29ubmVjdGlvbnMgcmVsYXRlZCB0byB0aGUgTkFUIHJ1bGVzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgTkFUJiMzOTtkIGNvbm5lY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2V4cGVjdF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYz0yMTA9dm9pZCBpcF92c19uZmN0X2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jLTIyMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmM6MjIzOlx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYy0yMjQtXHRcdFx0ZnJvbV9ycyA/IFx1MDAyNmNwLVx1MDAzZWRhZGRyIDogXHUwMDI2Y3AtXHUwMDNlY2FkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9ODM9c3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE0Ni1cdFx0dHVwbGUgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE0NzpcdFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE0OC1cdFx0XHRcdCAgbmZfY3RfbDNudW0oY3QpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTMxOD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfYWxsb2MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTMyMy0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jOjMyNDp2b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHVuc2lnbmVkIGludCBjbGFzcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTMyNS1cdFx0ICAgICAgIHVfaW50OF90IGZhbWlseSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zOTUtfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6Mzk2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pbml0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTM5Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYz0zNjY9c3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTE0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmM6NTE1Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgY21kLmwzbnVtLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTE2LVx0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgZGFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MjA5PXN0YXRpYyBpbnQgZXhwZWN0X3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yMzYtXHRcdHJldHVybiAtMTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjIzNzpcdG5mX2N0X2V4cGVjdF9pbml0KHJ0cF9leHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yMzgtXHRcdFx0ICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTI0Ni1cdH1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjI0NzpcdG5mX2N0X2V4cGVjdF9pbml0KHJ0Y3BfZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMjQ4LVx0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51Myxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0yODM9c3RhdGljIGludCBleHBlY3RfdDEyMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTMwNS1cdFx0cmV0dXJuIC0xO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MzA2Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzA3LVx0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51Myxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz02MTg9c3RhdGljIGludCBleHBlY3RfaDI0NShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNjM4LVx0XHRyZXR1cm4gLTE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo2Mzk6XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy02NDAtXHRcdFx0ICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTczNT1zdGF0aWMgaW50IGV4cGVjdF9jYWxsZm9yd2FyZGluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTc2Ni1cdFx0cmV0dXJuIC0xO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NzY3Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNzY4LVx0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgXHUwMDI2YWRkcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xMTgzPXN0YXRpYyBpbnQgZXhwZWN0X3E5MzEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEyMTMtXHRcdHJldHVybiAtMTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEyMTQ6XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjE1LVx0XHRcdCAgZ2tyb3V0ZWRfb25seSA/IC8qIG9ubHkgYWNjZXB0IGNhbGxzIGZyb20gR0s/ICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTI2Mz1zdGF0aWMgaW50IHByb2Nlc3NfZ2NmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjkwLVx0XHRyZXR1cm4gLTE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMjkxOlx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTI5Mi1cdFx0XHQgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIFx1MDAyNmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTQ4Nj1zdGF0aWMgaW50IHByb2Nlc3NfYWNmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTE4LVx0XHRyZXR1cm4gLTE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNTE5Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTUyMC1cdFx0XHQgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIFx1MDAyNmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTU1Mz1zdGF0aWMgaW50IHByb2Nlc3NfbGNmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTcyLVx0XHRyZXR1cm4gLTE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNTczOlx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTU3NC1cdFx0XHQgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIFx1MDAyNmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM9MTAyPXN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yMzEtXHRcdFx0cG9ydCA9IGh0b25zKGRjY19wb3J0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jOjIzMjpcdFx0XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjMzLVx0XHRcdFx0XHQgIHR1cGxlLVx1MDAzZXNyYy5sM251bSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM9MTI4PXN0YXRpYyBpbnQgZXhwX2dyZShzdHJ1Y3QgbmZfY29ubiAqY3QsIF9fYmUxNiBjYWxsaWQsIF9fYmUxNiBwZWVyX2NhbGxpZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtMTQ0LVx0ZGlyID0gSVBfQ1RfRElSX09SSUdJTkFMO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jOjE0NTpcdG5mX2N0X2V4cGVjdF9pbml0KGV4cF9vcmlnLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy0xNDYtXHRcdFx0ICBuZl9jdF9sM251bShjdCksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jLTE1My1cdGRpciA9IElQX0NUX0RJUl9SRVBMWTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYzoxNTQ6XHRuZl9jdF9leHBlY3RfaW5pdChleHBfcmVwbHksIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jLTE1NS1cdFx0XHQgIG5mX2N0X2wzbnVtKGN0KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9NTg9c3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE1NC1cdHR1cGxlID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM6MTU1Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE1Ni1cdFx0XHQgIFx1MDAyNnR1cGxlLVx1MDAzZXNyYy51MywgXHUwMDI2dHVwbGUtXHUwMDNlZHN0LnUzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jPTkyOT1zdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xMDQ4LVx0XHRnb3RvIGVycjE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYzoxMDQ5Olx0bmZfY3RfZXhwZWN0X2luaXQocnRwX2V4cCwgY2xhc3MsIG5mX2N0X2wzbnVtKGN0KSwgc2FkZHIsIGRhZGRyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA1MC1cdFx0XHQgIElQUFJPVE9fVURQLCBOVUxMLCBcdTAwMjZydHBfcG9ydCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA1NC1cdFx0Z290byBlcnIyO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTA1NTpcdG5mX2N0X2V4cGVjdF9pbml0KHJ0Y3BfZXhwLCBjbGFzcywgbmZfY3RfbDNudW0oY3QpLCBzYWRkciwgZGFkZHIsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xMDU2LVx0XHRcdCAgSVBQUk9UT19VRFAsIE5VTEwsIFx1MDAyNnJ0Y3BfcG9ydCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM9MTMyNj1zdGF0aWMgaW50IHByb2Nlc3NfcmVnaXN0ZXJfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xNDExLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTQxMjpcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgU0lQX0VYUEVDVF9TSUdOQUxMSU5HLCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xNDEzLVx0XHRcdCAgc2FkZHIsIFx1MDAyNmRhZGRyLCBwcm90bywgTlVMTCwgXHUwMDI2cG9ydCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jPTM4PXN0YXRpYyBpbnQgdGZ0cF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jLTY3LVx0XHR0dXBsZSA9IFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jOjY4Olx0XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jLTY5LVx0XHRcdFx0ICBuZl9jdF9sM251bShjdCksXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzAwPXN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzMzgtXHR9XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEzMzk6XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBsM251bSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM0MC1cdFx0ICAgICAgICAgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uLiBgbmZfY3RfZXhwZWN0X2luaXRgIGlzIGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UsIGJ1dCB0aGUgcmVhbCBtZWF0IGlzIGluIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCBzaW5jZSB0aGF0JiMzOTtzIHRoZSBjYWxsZXIgdGhhdCBnb3QgdGhlIHJlY2VudCBtb2RpZmljYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2Ygc3ltYm9scyBJIG5lZWQgdG8gY2hlY2sgZm9yIHJlYWNoYWJpbGl0eTogYF9fbmZfY29ubmNvdW50X2FkZGAsIGBfX25mX2N0X2V4cGVjdF9jaGVja2AsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgLCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAsIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLCBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAsIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCwgYG5mdF9zeW5wcm94eV9ldmFsX3Y0YCwgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAuCgpBbHJpZ2h0LCBmaXJzdCB1cCwgYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2AuICBZZXAsIGl0JiMzOTtzIGNhbGxlZCBieSBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AuICBHb29kLCB0aGF0JiMzOTtzIHJlYWNoYWJsZS4KCk5leHQsIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWAuIExvb2tzIGxpa2UgaXQmIzM5O3MgdXNlZCBpbiBgbmZ0X3RhcmdldF9zZWxlY3Rfb3BzYCB3aGVuIHRoZSBgZmFtaWx5YCBpcyBgTkZQUk9UT19CUklER0VgLiBQZXJmZWN0LgoKTm93LCBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAuICBZZXAsIHRoYXQmIzM5O3MgdXNlZCBpbiBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYC4gIE1ha2VzIHNlbnNlLgoKSG93IGFib3V0IGBuZnRfc3lucHJveHlfZXZhbF92NGA/ICBJdCYjMzk7cyBjYWxsZWQgYnkgYG5mdF9zeW5wcm94eV9kb19ldmFsYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYG5mdF9zeW5wcm94eV9ldmFsYC4gIEdvdCBpdC4KCmBfX25mX2Nvbm5jb3VudF9hZGRgPyAgUmVhY2hhYmxlIC0gY2FsbGVkIGJ5IGBuZl9jb25uY291bnRfYWRkX3NrYmAgYW5kIGBjb3VudF90cmVlYC4KCmBfX25mX2N0X2V4cGVjdF9jaGVja2A/ICBZZXMsIGNhbGxlZCBieSBgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0YC4KCmBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgPyAgQWxzbyByZWFjaGFibGUsIGNhbGxlZCBieSBgbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcmAgYW5kIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAuCgpNb3Zpbmcgb24gdG8gYGN0bmV0bGlua19jaGFuZ2VfaGVscGVyYC4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBjdG5ldGxpbmtfY2hhbmdlX2Nvbm50cmFja2AgYW5kIGBjdG5ldGxpbmtfZ2x1ZV9wYXJzZV9jdGAuIFRoYXQmIzM5O3MgZ29vZC4KCkFuZCBsYXN0bHksIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YC4gVGhhdCYjMzk7cyBjYWxsZWQgYnkgYGN0bmV0bGlua19nbHVlX2F0dGFjaF9leHBlY3RgIGFuZCBgY3RuZXRsaW5rX2NyZWF0ZV9leHBlY3RgLiBPa2F5LCBhbGwgdGhlIHN5bWJvbHMgYXJlIHJlYWNoYWJsZSEKCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBJJiMzOTt2ZSBnb3QgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktgLCBgTkZfRkxPV19UQUJMRWAsIGBORlRfQ09NUEFUYCwgYE5GVF9DVGAsIGFuZCBgTkZUX1NZTlBST1hZYC4KCkp1c3QgbWFraW5nIHN1cmUsIGZvciBgTkZfQ09OTlRSQUNLYC4uLiBhbSBJIG1pc3NpbmcgYW55dGhpbmc/IE5vLCBqdXN0IGBORl9DT05OVFJBQ0tgIGlzIHN1ZmZpY2llbnQuCgpPa2F5LCBjaGVja2luZyBkZXBlbmRlbmNpZXMuIGBORlRfQ09NUEFUYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfWFRBQkxFU2AuIE1ha2VzIHNlbnNlLiBgTkZUX0NUYCBuZWVkcyBgTkZfQ09OTlRSQUNLYC4gIEFuZCBgTkZUX1NZTlBST1hZYCBuZWVkcyBib3RoIGBORl9DT05OVFJBQ0tgICphbmQqIGBORVRGSUxURVJfU1lOUFJPWFlgLiBSaWdodCwgSSYjMzk7bGwgYWRkIGBORVRGSUxURVJfU1lOUFJPWFlgIHRvIHRoZSBsaXN0LiBUaGF0JiMzOTtzIGFsbCBJIG5lZWQgZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVURklMVEVSX1NZTlBST1hZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ0Nz1jb25maWcgTkZfTkFUX09WU1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDUwOmNvbmZpZyBORVRGSUxURVJfU1lOUFJPWFlcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTEtXHR0cmlzdGF0ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTEtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjUyOlx0c2VsZWN0IE5FVEZJTFRFUl9TWU5QUk9YWVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1My1cdHNlbGVjdCBTWU5fQ09PS0lFU1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NzY9b2JqLSQoQ09ORklHX05GX05BVF9URlRQKSAmIzQzOz0gbmZfbmF0X3RmdHAub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNzgtIyBTWU5QUk9YWVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKSAmIzQzOz0gbmZfc3lucHJveHlfY29yZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jPTMwPXN0YXRpYyBjb25zdCB1OCBuZl9jdF9leHRfdHlwZV9sZW5bTkZfQ1RfRVhUX05VTV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtNDgtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYzo0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtNTAtXHRbTkZfQ1RfRVhUX1NZTlBST1hZXSA9IHNpemVvZihzdHJ1Y3QgbmZfY29ubl9zeW5wcm94eSksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM9NTc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgdG90YWxfZXh0ZW5zaW9uX3NpemUodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy04MC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jOjgxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy04Mi1cdFx0JiM0Mzsgc2l6ZW9mKHN0cnVjdCBuZl9jb25uX3N5bnByb3h5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ5OAoJCQkJCQkJb3V0cHV0OiAyOTkKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTmV0ZmlsdGVyKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYE5FVEZJTFRFUl9TWU5QUk9YWWAgaXMgaW1wbGljaXRseSBzZWxlY3RlZCBieSBgTkZUX1NZTlBST1hZYCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3PigJRubyBuZWVkIHRvIGV4cGxpY2l0bHkgdGFyZ2V0IGl0LiBOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIHRvdWNoaW5nIGNyaXRpY2FsIG5ldGZpbHRlciBjb21wb25lbnRzOiBjb25uZWN0aW9uIHRyYWNraW5nLCBmbG93IHRhYmxlcywgYW5kIG5mdGFibGVzIGludGVncmF0aW9uLiBUaGlzIHRvdWNoZXMgY29yZSBmdW5jdGlvbnMgbGlrZSBjb25uZWN0aW9uIGNvdW50aW5nLCBleHBlY3RhdGlvbiBjaGVja3MsIGhlbHBlciByZWdpc3RyYXRpb24sIGFuZCBuZXRsaW5rIGhhbmRsaW5nLiBJJiMzOTttIGFsc28gc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gYnJpZGdlIHRhcmdldCB2YWxpZGF0aW9uIHdpdGhpbiBgbmZ0X2NvbXBhdGAgYW5kIHNvbWUgYWRqdXN0bWVudHMgdG8gdGltZW91dCBoYW5kbGluZyB3aXRoaW4gYG5mdF9jdGAuIEFsbCBvZiB0aGVzZSBjaGFuZ2VzIGhhdmUgYSBjbGVhciBwYXRoIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBvciBieSBwcm9jZXNzaW5nIGFjdHVhbCBuZXR3b3JrIHBhY2tldHMuIFRoaXMgc2NyZWFtcyBmdXp6aW5nIHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyByZWZpbmUgdGhlIHN5bWJvbCBsaXN0IGZvciB0aGUgZnV6emluZy4gSSBkb24mIzM5O3Qgd2FudCB0byBjaG9vc2UgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBob3QgcGF0aHMuIEkmIzM5O3ZlIGdvdCBhIG11Y2ggbW9yZSBmb2N1c2VkIGxpc3Qgbm93OgoKKiAgIGBfX25mX2Nvbm5jb3VudF9hZGRgCiogICBgX19uZl9jdF9leHBlY3RfY2hlY2tgCiogICBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYAoqICAgYGN0bmV0bGlua19jaGFuZ2VfaGVscGVyYAoqICAgYGN0bmV0bGlua19hbGxvY19leHBlY3RgCiogICBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYAoqICAgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYAoqICAgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgCiogICBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAKKiAgIGBuZnRfc3lucHJveHlfZXZhbF92NGAKKiAgIGBuZnRfc3lucHJveHlfZXZhbF92NmAKClRoZXNlIGFyZSBoaWdobHkgcmVsZXZhbnQgdG8gdGhlIGludHJvZHVjZWQgZmVhdHVyZXMgYW5kIG5vdCBvdmVybHkgZ2VuZXJpYy4gSSB0aGluayB0aGlzIGxpc3QgaXMgc29saWQgYW5kIGZvY3VzZWQgZm9yIGFjaGlldmluZyB0aGUgZnV6emluZyBvYmplY3RpdmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9DT01QQVQmIzM0OywKICAgICYjMzQ7TkZUX0NUJiMzNDssCiAgICAmIzM0O05GVF9TWU5QUk9YWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmZfY29ubmNvdW50X2FkZCYjMzQ7LAogICAgJiMzNDtfX25mX2N0X2V4cGVjdF9jaGVjayYjMzQ7LAogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2NoYW5nZV9oZWxwZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8mIzM0OywKICAgICYjMzQ7bmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y0JiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbmV0ZmlsdGVyLCBpbmNsdWRpbmcgY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBjb21wYXRpYmlsaXR5LiBJdCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvbm5lY3Rpb24gY291bnRpbmcsIGV4cGVjdGF0aW9uIGNoZWNraW5nLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSXQgYWxzbyBhZGRzIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGJyaWRnZSB0YXJnZXRzIGluIG5mdF9jb21wYXQgYW5kIGZpeGVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gbmZ0X2N0LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG9yIGJ5IHByb2Nlc3NpbmcgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9DT01QQVQmIzM0OywKICAgICYjMzQ7TkZUX0NUJiMzNDssCiAgICAmIzM0O05GVF9TWU5QUk9YWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmZfY29ubmNvdW50X2FkZCYjMzQ7LAogICAgJiMzNDtfX25mX2N0X2V4cGVjdF9jaGVjayYjMzQ7LAogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2NoYW5nZV9oZWxwZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8mIzM0OywKICAgICYjMzQ7bmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y0JiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbmV0ZmlsdGVyLCBpbmNsdWRpbmcgY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBjb21wYXRpYmlsaXR5LiBJdCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvbm5lY3Rpb24gY291bnRpbmcsIGV4cGVjdGF0aW9uIGNoZWNraW5nLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSXQgYWxzbyBhZGRzIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGJyaWRnZSB0YXJnZXRzIGluIG5mdF9jb21wYXQgYW5kIGZpeGVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gbmZ0X2N0LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG9yIGJ5IHByb2Nlc3NpbmcgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjE4LjY1MjU1MzAyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjY1MzAxMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0NPTVBBVFwiLFxuICAgIFwiTkZUX0NUXCIsXG4gICAgXCJORlRfU1lOUFJPWFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2Nvbm5jb3VudF9hZGRcIixcbiAgICBcIl9fbmZfY3RfZXhwZWN0X2NoZWNrXCIsXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJcIixcbiAgICBcImN0bmV0bGlua19jaGFuZ2VfaGVscGVyXCIsXG4gICAgXCJjdG5ldGxpbmtfYWxsb2NfZXhwZWN0XCIsXG4gICAgXCJuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9cIixcbiAgICBcIm5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlXCIsXG4gICAgXCJuZnRfY3RfZXhwZWN0X29ial9pbml0XCIsXG4gICAgXCJuZnRfY3RfZXhwZWN0X29ial9ldmFsXCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NFwiLFxuICAgIFwibmZ0X3N5bnByb3h5X2V2YWxfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG5ldGZpbHRlciwgaW5jbHVkaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZsb3cgdGFibGVzLCBhbmQgbmZ0YWJsZXMgY29tcGF0aWJpbGl0eS4gSXQgbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb25uZWN0aW9uIGNvdW50aW5nLCBleHBlY3RhdGlvbiBjaGVja2luZywgaGVscGVyIHJlZ2lzdHJhdGlvbiwgYW5kIG5ldGxpbmsgaGFuZGxpbmcuIEl0IGFsc28gYWRkcyBhIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBicmlkZ2UgdGFyZ2V0cyBpbiBuZnRfY29tcGF0IGFuZCBmaXhlcyB0aW1lb3V0IGhhbmRsaW5nIGluIG5mdF9jdC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBvciBieSBwcm9jZXNzaW5nIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjE4LjY1MjU2MDY2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMDYxOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDUyMWRkMThmMTJiNjJhYmEyNmYwODZhMzFlNDkwMjAzMWRiOTk2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAyMjo0MToxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxcbmluZGV4IDIwZDcwZGRkYmU1MDk4Li4yNTA2MmY0YTBkZDVmMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxcbkBAIC0xOCw3ICsxOCw3IEBAXFxuICAqIEBtYXRjaDpcXHR0aGUgbWF0Y2ggZXh0ZW5zaW9uXFxuICAqIEB0YXJnZXQ6XFx0dGhlIHRhcmdldCBleHRlbnNpb25cXG4gICogQG1hdGNoaW5mbzpcXHRwZXItbWF0Y2ggZGF0YVxcbi0gKiBAdGFyZ2V0aW5mbzpcXHRwZXItdGFyZ2V0IGRhdGFcXG4rICogQHRhcmdpbmZvOlxcdHBlci10YXJnZXQgZGF0YVxcbiAgKiBAc3RhdGU6XFx0cG9pbnRlciB0byBob29rIHN0YXRlIHRoaXMgcGFja2V0IGNhbWUgZnJvbVxcbiAgKiBAZnJhZ29mZjpcXHRwYWNrZXQgaXMgYSBmcmFnbWVudCwgdGhpcyBpcyB0aGUgZGF0YSBvZmZzZXRcXG4gICogQHRob2ZmOlxcdHBvc2l0aW9uIG9mIHRyYW5zcG9ydCBoZWFkZXIgcmVsYXRpdmUgdG8gc2tiLVxcdTAwM2VkYXRhXFxuQEAgLTc3LDcgKzc3LDkgQEAgc3RhdGljIGlubGluZSB1X2ludDhfdCB4dF9mYW1pbHkoY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiAgKiBAbWF0Y2g6XFx0c3RydWN0IHh0X21hdGNoIHRocm91Z2ggd2hpY2ggdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZFxcbiAgKiBAbWF0Y2hpbmZvOlxcdHBlci1tYXRjaCBkYXRhXFxuICAqIEBob29rX21hc2s6XFx0dmlhIHdoaWNoIGhvb2tzIHRoZSBuZXcgcnVsZSBpcyByZWFjaGFibGVcXG4tICogT3RoZXIgZmllbGRzIGFzIGFib3ZlLlxcbisgKiBAZmFtaWx5OlxcdGFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZFxcbisgKlxcdFxcdChoZWxwZnVsIHdoZW4gbWF0Y2gtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcXG4rICogQG5mdF9jb21wYXQ6XFx0cnVubmluZyBmcm9tIHRoZSBuZnQgY29tcGF0IGxheWVyIGlmIHRydWVcXG4gICovXFxuIHN0cnVjdCB4dF9tdGNoa19wYXJhbSB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG5AQCAtOTEsOCArOTMsMTMgQEAgc3RydWN0IHh0X210Y2hrX3BhcmFtIHtcXG4gfTtcXG4gXFxuIC8qKlxcbi0gKiBzdHJ1Y3QgeHRfbWR0b3JfcGFyYW0gLSBtYXRjaCBkZXN0cnVjdG9yIHBhcmFtZXRlcnNcXG4tICogRmllbGRzIGFzIGFib3ZlLlxcbisgKiBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIC0gbWF0Y2ggZGVzdHJ1Y3RvciBwYXJhbWV0ZXJzXFxuKyAqXFxuKyAqIEBuZXQ6XFx0bmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCB3aGljaCB0aGUgY2hlY2sgd2FzIGludm9rZWRcXG4rICogQG1hdGNoOlxcdHN0cnVjdCB4dF9tYXRjaCB0aHJvdWdoIHdoaWNoIHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWRcXG4rICogQG1hdGNoaW5mbzpcXHRwZXItbWF0Y2ggZGF0YVxcbisgKiBAZmFtaWx5OlxcdGFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZFxcbisgKlxcdFxcdChoZWxwZnVsIHdoZW4gbWF0Y2gtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcXG4gICovXFxuIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuQEAgLTEwNSwxMCArMTEyLDE2IEBAIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xcbiAgKiBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gLSBwYXJhbWV0ZXJzIGZvciB0YXJnZXQgZXh0ZW5zaW9ucydcXG4gICogY2hlY2tlbnRyeSBmdW5jdGlvbnNcXG4gICpcXG4rICogQG5ldDpcXHRuZXR3b3JrIG5hbWVzcGFjZSB0aHJvdWdoIHdoaWNoIHRoZSBjaGVjayB3YXMgaW52b2tlZFxcbisgKiBAdGFibGU6XFx0dGFibGUgdGhlIHJ1bGUgaXMgdHJpZWQgdG8gYmUgaW5zZXJ0ZWQgaW50b1xcbiAgKiBAZW50cnlpbmZvOlxcdHRoZSBmYW1pbHktc3BlY2lmaWMgcnVsZSBkYXRhXFxuICAqIFxcdFxcdChzdHJ1Y3QgaXB0X2VudHJ5LCBpcDZ0X2VudHJ5LCBhcnB0X2VudHJ5LCBlYnRfZW50cnkpXFxuLSAqXFxuLSAqIE90aGVyIGZpZWxkcyBzZWUgYWJvdmUuXFxuKyAqIEB0YXJnZXQ6XFx0dGhlIHRhcmdldCBleHRlbnNpb25cXG4rICogQHRhcmdpbmZvOlxcdHBlci10YXJnZXQgZGF0YVxcbisgKiBAaG9va19tYXNrOlxcdHZpYSB3aGljaCBob29rcyB0aGUgbmV3IHJ1bGUgaXMgcmVhY2hhYmxlXFxuKyAqIEBmYW1pbHk6XFx0YWN0dWFsIE5GUFJPVE9fKiB0aHJvdWdoIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkXFxuKyAqXFx0XFx0KGhlbHBmdWwgd2hlbiBtYXRjaC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKVxcbisgKiBAbmZ0X2NvbXBhdDpcXHRydW5uaW5nIGZyb20gdGhlIG5mdCBjb21wYXQgbGF5ZXIgaWYgdHJ1ZVxcbiAgKi9cXG4gc3RydWN0IHh0X3RnY2hrX3BhcmFtIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbkBAIC0zMzYsOSArMzQ5LDkgQEAgc3RydWN0IHh0X3RhYmxlX2luZm8gKnh0X2FsbG9jX3RhYmxlX2luZm8odW5zaWduZWQgaW50IHNpemUpO1xcbiB2b2lkIHh0X2ZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyk7XFxuIFxcbiAvKipcXG4tICogeHRfcmVjc2VxIC0gcmVjdXJzaXZlIHNlcWNvdW50IGZvciBuZXRmaWx0ZXIgdXNlXFxuKyAqIHZhciB4dF9yZWNzZXEgLSByZWN1cnNpdmUgc2VxY291bnQgZm9yIG5ldGZpbHRlciB1c2VcXG4gICpcXG4tICogUGFja2V0IHByb2Nlc3NpbmcgY2hhbmdlcyB0aGUgc2VxY291bnQgb25seSBpZiBubyByZWN1cnNpb24gaGFwcGVuZWRcXG4rICogUGFja2V0IHByb2Nlc3NpbmcgY2hhbmdlcyB0aGUgc2VxY291bnQgb25seSBpZiBubyByZWN1cnNpb24gaGFwcGVuZWQuXFxuICAqIGdldF9jb3VudGVycygpIGNhbiB1c2UgcmVhZF9zZXFjb3VudF9iZWdpbigpL3JlYWRfc2VxY291bnRfcmV0cnkoKSxcXG4gICogYmVjYXVzZSB3ZSB1c2UgdGhlIG5vcm1hbCBzZXFjb3VudCBjb252ZW50aW9uIDpcXG4gICogTG93IG9yZGVyIGJpdCBzZXQgdG8gMSBpZiBhIHdyaXRlciBpcyBhY3RpdmUuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFxuaW5kZXggYmU0YTEyMGQ1NDllYjMuLmMwMjQzNDVjOWJkODYyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFxuQEAgLTI2LDYgKzI2LDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3Qge1xcbiBcXHRwb3NzaWJsZV9uZXRfdCBuZXQ7XFxuIFxcbiBcXHQvKiBXZSBleHBlY3QgdGhpcyB0dXBsZSwgd2l0aCB0aGUgZm9sbG93aW5nIG1hc2sgKi9cXG4rXFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBtYXN0ZXJfdHVwbGU7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcXG5pbmRleCA4MTAyNTEwMWY4NmRhYS4uYzc2MWNkODE1OGIyNTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcXG5AQCAtMTE0LDYgKzExNCwxMCBAQCBpbnQgbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiwgdW5zaWduZWQgaW50LFxcbiB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiosXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50KTtcXG4gXFxuKyNkZWZpbmUgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKG5hbWUpIFxcXFxcXG4rXFx0cHJfd2FybihcXFwiVGhlICVzIGNvbm50cmFjayBoZWxwZXIgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsLlxcXFxuXFxcIlxcdFxcXFxcXG4rXFx0XFx0XFxcIlBsZWFzZSBjb250YWN0IHRoZSBuZXRmaWx0ZXItZGV2ZWwgbWFpbGluZyBsaXN0IGlmIHlvdSBzdGlsbCBuZWVkIHRoaXMuXFxcXG5cXFwiLCBuYW1lKVxcbitcXG4gc3RydWN0IG5mX2Nvbm5faGVscCAqbmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApO1xcbiBcXG4gaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnXFxuaW5kZXggNjY1ZjgwMDhjYzRiMjcuLjRjMDRjZDhkNDBhMjI5IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcbkBAIC0yNTYsOCArMjU2LDcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxuIFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIFxcbiBjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbi1cXHR0cmlzdGF0ZSBcXFwiSVJDIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLVxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbitcXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuIFxcdGhlbHBcXG4gXFx0ICBUaGVyZSBpcyBhIGNvbW1vbmx5LXVzZWQgZXh0ZW5zaW9uIHRvIElSQyBjYWxsZWRcXG4gXFx0ICBEaXJlY3QgQ2xpZW50LXRvLUNsaWVudCBQcm90b2NvbCAoRENDKS4gIFRoaXMgZW5hYmxlcyB1c2VycyB0byBzZW5kXFxuQEAgLTI2Nyw2ICsyNjYsOCBAQCBjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbiBcXHQgIHVzaW5nIE5BVCwgdGhpcyBleHRlbnNpb24gd2lsbCBlbmFibGUgeW91IHRvIHNlbmQgZmlsZXMgYW5kIGluaXRpYXRlXFxuIFxcdCAgY2hhdHMuICBOb3RlIHRoYXQgeW91IGRvIE5PVCBuZWVkIHRoaXMgZXh0ZW5zaW9uIHRvIGdldCBmaWxlcyBvclxcbiBcXHQgIGhhdmUgb3RoZXJzIGluaXRpYXRlIGNoYXRzLCBvciBldmVyeXRoaW5nIGVsc2UgaW4gSVJDLlxcbitcXHQgIERDQyB0cmFja2luZyBiZWhpbmQgTkFUIHJlcXVpcmVzIHBsYWludGV4dCAodW5lbmNyeXB0ZWQpIElSQywgc29cXG4rXFx0ICB0aGlzIGhlbHBlciBpcyBvZiBsaW1pdGVkIHVzZSB0aGVzZSBkYXlzLlxcbiBcXG4gXFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gXFxuQEAgLTMwOCwxNyArMzA5LDE3IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxcbiBcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiBcXG4gY29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXFxuLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuK1xcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbiBcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiBcXHRzZWxlY3QgTkZfQ1RfUFJPVE9fR1JFXFxuIFxcdGhlbHBcXG4gXFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFBQVFAgKFBvaW50IHRvIFBvaW50IFR1bm5lbGxpbmdcXG4gXFx0ICBQcm90b2NvbCwgUkZDMjYzNykgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgTkFULlxcbiBcXG4tXFx0ICBJZiB5b3UgYXJlIHJ1bm5pbmcgUFBUUCBzZXNzaW9ucyBvdmVyIGEgc3RhdGVmdWwgZmlyZXdhbGwgb3IgTkFUXFxuK1xcdCAgSWYgeW91IGFyZSBzdGlsbCBydW5uaW5nIFBQVFAgc2Vzc2lvbnMgb3ZlciBhIHN0YXRlZnVsIGZpcmV3YWxsIG9yIE5BVFxcbiBcXHQgIGJveCwgeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuXFxuIFxcbi1cXHQgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkIHlldC5cXG4rXFx0ICBQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgUFBUUCBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIHN1cHBvcnRlZC5cXG4gXFx0ICBTcGVjaWZpY2FsbHkgdGhlc2UgbGltaXRhdGlvbnMgZXhpc3Q6XFxuIFxcdCAgICAtIEJsaW5kbHkgYXNzdW1lcyB0aGF0IGNvbnRyb2wgY29ubmVjdGlvbnMgYXJlIGFsd2F5cyBlc3RhYmxpc2hlZFxcbiBcXHQgICAgICBpbiBQTlMtXFx1MDAzZVBBQyBkaXJlY3Rpb24uIFRoaXMgaXMgYSB2aW9sYXRpb24gb2YgUkZDMjYzNy5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcXG5pbmRleCBkZDY3MDA0YTVjYzA5ZS4uOTE1ODIwNjlmNmQyZWUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcXG5AQCAtMTgzLDE3ICsxODMsMTYgQEAgc3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGlmIChjdCBcXHUwMDI2XFx1MDAyNiBuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XFxuLVxcdFxcdC8qIGxvY2FsIGNvbm5lY3Rpb25zIGFyZSBjb25maXJtZWQgaW4gcG9zdHJvdXRpbmcgc28gY29uZmlybWF0aW9uXFxuLVxcdFxcdCAqIG1pZ2h0IGhhdmUgaGFwcGVuZWQgYmVmb3JlIGhpdHRpbmcgY29ubmxpbWl0XFxuK1xcdFxcdC8qIENvbm5lY3Rpb24gaXMgY29uZmlybWVkIGJ1dCBtaWdodCBzdGlsbCBiZSBpbiB0aGUgc2V0dXAgcGhhc2UuXFxuK1xcdFxcdCAqIE9ubHkgc2tpcCB0aGUgdHJhY2tpbmcgaWYgaXQgaXMgZnVsbHkgYXNzdXJlZC4gVGhpcyBndWFyYW50ZWVzXFxuK1xcdFxcdCAqIHRoYXQgc2V0dXAgcGFja2V0cyBvciByZXRyYW5zbWlzc2lvbnMgYXJlIHByb3Blcmx5IGNvdW50ZWQgYW5kXFxuK1xcdFxcdCAqIGRlZHVwbGljYXRlZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChza2ItXFx1MDAzZXNrYl9paWYgIT0gTE9PUEJBQ0tfSUZJTkRFWCkge1xcbitcXHRcXHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4gXFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHQvKiB0aGlzIGlzIGxpa2VseSBhIGxvY2FsIGNvbm5lY3Rpb24sIHNraXAgb3B0aW1pemF0aW9uIHRvIGF2b2lkXFxuLVxcdFxcdCAqIGFkZGluZyBkdXBsaWNhdGVzIGZyb20gYSAncGFja2V0IHRyYWluJ1xcbi1cXHRcXHQgKi9cXG4gXFx0XFx0Z290byBjaGVja19jb25uZWN0aW9ucztcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xcbmluZGV4IDQwMDExOWI2MzIwZTcyLi5iZjc4ODI4Yzc1NDlkNCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXFxuQEAgLTYyLDYgKzYyLDcgQEAgaW50IG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoZXhwID09IE5VTEwpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0ZXhwLVxcdTAwM2VtYXN0ZXJfdHVwbGVcXHQgID0gY3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xcbiBcXHRleHAtXFx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlO1xcbiBcXG4gXFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXFx1MDAzZWhlbHBlcik7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG5pbmRleCA0OWUxOGVkYTAzN2VmMS4uMzg2MzBjNWUwMDZmMDggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xcbkBAIC0zNTUsNiArMzU1LDggQEAgdm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB1bnNpZ25lZCBpbnQgY2xhc3MsXFxuIFxcdGV4cC1cXHUwMDNldHVwbGUuc3JjLmwzbnVtID0gZmFtaWx5O1xcbiBcXHRleHAtXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9IHByb3RvO1xcbiBcXG4rXFx0ZXhwLVxcdTAwM2VtYXN0ZXJfdHVwbGUgPSBjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XFxuK1xcbiBcXHRpZiAoc2FkZHIpIHtcXG4gXFx0XFx0bWVtY3B5KFxcdTAwMjZleHAtXFx1MDAzZXR1cGxlLnNyYy51Mywgc2FkZHIsIGxlbik7XFxuIFxcdFxcdGlmIChzaXplb2YoZXhwLVxcdTAwM2V0dXBsZS5zcmMudTMpIFxcdTAwM2UgbGVuKVxcbkBAIC00OTQsOSArNDk2LDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fbmZfY3RfZXhwZWN0X2NoZWNrKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XFxuIFxcdGlmIChoZWxwZXIpIHtcXG4gXFx0XFx0cCA9IFxcdTAwMjZoZWxwZXItXFx1MDAzZWV4cGVjdF9wb2xpY3lbZXhwZWN0LVxcdTAwM2VjbGFzc107XFxuLVxcdFxcdGlmIChwLVxcdTAwM2VtYXhfZXhwZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1hc3Rlcl9oZWxwLVxcdTAwM2VleHBlY3RpbmdbZXhwZWN0LVxcdTAwM2VjbGFzc10gXFx1MDAzZT0gcC1cXHUwMDNlbWF4X2V4cGVjdGVkKVxcbitcXHRcXHRpZiAobWFzdGVyX2hlbHAtXFx1MDAzZWV4cGVjdGluZ1tleHBlY3QtXFx1MDAzZWNsYXNzXSBcXHUwMDNlPSBwLVxcdTAwM2VtYXhfZXhwZWN0ZWQpXFxuIFxcdFxcdFxcdGV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgcCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBkZWZhdWx0X2V4cF9wb2xpY3kgPSB7XFxuK1xcdFxcdFxcdC5tYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVCxcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdGlmIChtYXN0ZXJfaGVscC1cXHUwMDNlZXhwZWN0aW5nW2V4cGVjdC1cXHUwMDNlY2xhc3NdIFxcdTAwM2U9IGRlZmF1bHRfZXhwX3BvbGljeS5tYXhfZXhwZWN0ZWQpXFxuK1xcdFxcdFxcdGV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgXFx1MDAyNmRlZmF1bHRfZXhwX3BvbGljeSk7XFxuIFxcdH1cXG4gXFxuIFxcdGNuZXQgPSBuZl9jdF9wZXJuZXQobmV0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbmluZGV4IDhiOTQwMDFjMjQzMDY2Li41MDA1MDliMTc2NjNlZCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuQEAgLTM3NCw4ICszNzQsMTMgQEAgaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxuIFxcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4tXFx0aWYgKG1lLVxcdTAwM2VleHBlY3RfcG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQgXFx1MDAzZSBORl9DVF9FWFBFQ1RfTUFYX0NOVClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gbWUtXFx1MDAzZWV4cGVjdF9jbGFzc19tYXg7IGkrKykge1xcbitcXHRcXHRpZiAoIW1lLVxcdTAwM2VleHBlY3RfcG9saWN5W2ldLm1heF9leHBlY3RlZClcXG4rXFx0XFx0XFx0bWUtXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XFxuK1xcbitcXHRcXHRpZiAobWUtXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkIFxcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZfY3RfaGVscGVyX2hzaXplOyBpKyspIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xcbmluZGV4IDBjMTE3Yjg0OTJlOTkyLi4xOTNhYjM0ZGI3OTVmOSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXFxuQEAgLTI2Miw2ICsyNjIsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgaSwgcmV0O1xcbiBcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKEhFTFBFUl9OQU1FKTtcXG4rXFxuIFxcdGlmIChtYXhfZGNjX2NoYW5uZWxzIFxcdTAwM2MgMSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIm1heF9kY2NfY2hhbm5lbHMgbXVzdCBub3QgYmUgemVyb1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG5pbmRleCA0ZTc4ZDI0ODI5ODk1ZS4uNDIxNzcxNWQ0MmRjMjQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuQEAgLTE5NTMsMTkgKzE5NTMsNiBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFzdHJjbXAoaGVscG5hbWUsIFxcXCJcXFwiKSBcXHUwMDI2XFx1MDAyNiBoZWxwKSB7XFxuLVxcdFxcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVxcdTAwM2VoZWxwZXIpO1xcbi1cXHRcXHRpZiAoaGVscGVyKSB7XFxuLVxcdFxcdFxcdC8qIHdlIGhhZCBhIGhlbHBlciBiZWZvcmUgLi4uICovXFxuLVxcdFxcdFxcdG5mX2N0X3JlbW92ZV9leHBlY3RhdGlvbnMoY3QpO1xcbi1cXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXFx1MDAzZWhlbHBlciwgTlVMTCk7XFxuLVxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmhlbHBlci1cXHUwMDNlY3RfcmVmY250KSlcXG4tXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGhlbHBlciwgcmN1KTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuIFxcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBuZl9jdF9wcm90b251bShjdCkpO1xcbiBcXHRpZiAoaGVscGVyID09IE5VTEwpIHtcXG5AQCAtMzAxNSw3ICszMDAyLDYgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApXFxuIHtcXG4gXFx0X19zMzIgdGltZW91dCA9IChfX3MzMikoUkVBRF9PTkNFKGV4cC1cXHUwMDNldGltZW91dCkgLSBuZmN0X3RpbWVfc3RhbXApIC8gSFo7XFxuLVxcdHN0cnVjdCBuZl9jb25uICptYXN0ZXIgPSBleHAtXFx1MDAzZW1hc3RlcjtcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcXG4gXFx0c3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtcztcXG5AQCAtMzAzMCw5ICszMDE2LDcgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFx0aWYgKGN0bmV0bGlua19leHBfZHVtcF9tYXNrKHNrYiwgXFx1MDAyNmV4cC1cXHUwMDNldHVwbGUsIFxcdTAwMjZleHAtXFx1MDAzZW1hc2spIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLVxcdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLFxcbi1cXHRcXHRcXHRcXHQgXFx1MDAyNm1hc3Rlci1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsXFxuLVxcdFxcdFxcdFxcdCBDVEFfRVhQRUNUX01BU1RFUikgXFx1MDAzYyAwKVxcbitcXHRpZiAoY3RuZXRsaW5rX2V4cF9kdW1wX3R1cGxlKHNrYiwgXFx1MDAyNmV4cC1cXHUwMDNlbWFzdGVyX3R1cGxlLCBDVEFfRVhQRUNUX01BU1RFUikgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXFxuQEAgLTMwNDUsOSArMzAyOSw5IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0aWYgKG5sYV9wdXRfYmUzMihza2IsIENUQV9FWFBFQ1RfTkFUX0RJUiwgaHRvbmwoZXhwLVxcdTAwM2VkaXIpKSlcXG4gXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbi1cXHRcXHRuYXRfdHVwbGUuc3JjLmwzbnVtID0gbmZfY3RfbDNudW0obWFzdGVyKTtcXG4rXFx0XFx0bmF0X3R1cGxlLnNyYy5sM251bSA9IGV4cC1cXHUwMDNlbWFzdGVyX3R1cGxlLnNyYy5sM251bTtcXG4gXFx0XFx0bmF0X3R1cGxlLnNyYy51MyA9IGV4cC1cXHUwMDNlc2F2ZWRfYWRkcjtcXG4tXFx0XFx0bmF0X3R1cGxlLmRzdC5wcm90b251bSA9IG5mX2N0X3Byb3RvbnVtKG1hc3Rlcik7XFxuK1xcdFxcdG5hdF90dXBsZS5kc3QucHJvdG9udW0gPSBleHAtXFx1MDAzZW1hc3Rlcl90dXBsZS5kc3QucHJvdG9udW07XFxuIFxcdFxcdG5hdF90dXBsZS5zcmMudSA9IGV4cC1cXHUwMDNlc2F2ZWRfcHJvdG87XFxuIFxcbiBcXHRcXHRpZiAoY3RuZXRsaW5rX2V4cF9kdW1wX3R1cGxlKHNrYiwgXFx1MDAyNm5hdF90dXBsZSxcXG5AQCAtMzU4OSw2ICszNTczLDcgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gI2VuZGlmXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihleHAtXFx1MDAzZWhlbHBlciwgaGVscGVyKTtcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGV4cC1cXHUwMDNlYXNzaWduX2hlbHBlciwgYXNzaWduX2hlbHBlcik7XFxuK1xcdGV4cC1cXHUwMDNlbWFzdGVyX3R1cGxlID0gY3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xcbiBcXHRleHAtXFx1MDAzZXR1cGxlID0gKnR1cGxlO1xcbiBcXHRleHAtXFx1MDAzZW1hc2suc3JjLnUzID0gbWFzay1cXHUwMDNlc3JjLnUzO1xcbiBcXHRleHAtXFx1MDAzZW1hc2suc3JjLnUuYWxsID0gbWFzay1cXHUwMDNlc3JjLnUuYWxsO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcXG5pbmRleCA3NzY1MDVhNzhlNjQ1Ni4uODBmYzE0Yzg3ZGRjNGIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXFxuQEAgLTU0NSw2ICs1NDUsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpXFxuIFxcbiBcXHRwcHRwLmRlc3Ryb3kgPSBncmVfcHB0cF9kZXN0cm95X3NpYmxpbmdzO1xcbiBcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKHBwdHAubmFtZSk7XFxuK1xcbiBcXHRyZXR1cm4gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2cHB0cCwgXFx1MDAyNnBwdHBfcHRyKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbmluZGV4IGU3YTNmYjJiMmQ5NDY2Li4yOWU5M2FjMWUyZTQwMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuQEAgLTMyNiw4ICszMjYsMTAgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuLVxcdHNpemUgPSBpcGgtXFx1MDAzZWlobCBcXHUwMDNjXFx1MDAzYyAyO1xcbitcXHRpZiAoaXBoLVxcdTAwM2VpaGwgXFx1MDAzYyA1KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRzaXplID0gaXBoLVxcdTAwM2VpaGwgXFx1MDAzY1xcdTAwM2MgMjtcXG4gXFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwaCkgfHwgdW5saWtlbHkoaXBfaGFzX29wdGlvbnMoc2l6ZSkpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbkBAIC0zMzUsOSArMzM3LDkgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBJUCkge1xcbi1cXHRcXHRjdHgtXFx1MDAzZXR1bi5wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0XFx0Y3R4LVxcdTAwM2V0dW4ucHJvdG8gPSBpcGgtXFx1MDAzZXByb3RvY29sO1xcbiBcXHRcXHRjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemU7XFxuLVxcdFxcdGN0eC1cXHUwMDNlb2Zmc2V0ICs9IHNpemU7XFxuK1xcdFxcdGN0eC1cXHUwMDNlb2Zmc2V0ICs9IGN0eC1cXHUwMDNldHVuLmhkcl9zaXplO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXFxuaW5kZXggMmJiZjUxNjNjMGUyNzMuLjYzZmY2YjRkNWQyMTRhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbkBAIC0xMTgxLDYgKzExODEsMTYgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4gXFx0c3RydWN0IG5mX2hvb2tfb3BzICpuYXRfb3BzO1xcbiBcXHRpbnQgaSwgcmV0O1xcbiBcXG4rI2lmbmRlZiBNT0RVTEVcXG4rXFx0LyogSWYgbmZfbmF0X2NvcmUgaXMgYnVpbHQtaW4gYW5kIG5mX25hdF9pbml0KCkgZmFpbHMsIGRlcGVuZGVudFxcbitcXHQgKiBtb2R1bGVzIGxpa2UgbmZ0X2NoYWluX25hdC5rbyBtYXkgc3RpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLlxcbitcXHQgKiBIb3dldmVyLCBuYXRfbmV0IHdvdWxkIGJlIGludmFsaWQsIGxpa2VseSBwb2ludGluZyB0byBzb21lIG90aGVyXFxuK1xcdCAqIHBlci1uZXQgc3RydWN0dXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbmZfbmF0X2hvb2spKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuKyNlbmRpZlxcbitcXG4gXFx0aWYgKFdBUk5fT05fT05DRShwZiBcXHUwMDNlPSBBUlJBWV9TSVpFKG5hdF9uZXQtXFx1MDAzZW5hdF9wcm90b19uZXQpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jXFxuaW5kZXggMGNhYTkzMDRkMmQwMzAuLjYzODY0YjkyODI1OTA5IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmNcXG5AQCAtMzk3LDYgKzM5NywyMiBAQCBzdGF0aWMgaW50IG5mdF90YXJnZXRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxcbit7XFxuK1xcdHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCA9IGV4cHItXFx1MDAzZW9wcy1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdC8qIERvIG5vdCBhbGxvdyBVTlNQRUMgdG8gc3RhbmQtaW4gZm9yIE5GUFJPVE9fQlJJREdFXFxuK1xcdCAqIHRhcmdldHM6IHRoZXkgYXJlIGluY29tcGF0aWJsZS4gIGVidGFibGVzIHRhcmdldHMgcmV0dXJuXFxuK1xcdCAqIEVCVF9BQ0NFUFQsIERST1AgYW5kIHNvIG9uIHdoaWNoIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoXFxuK1xcdCAqIE5GX0FDQ0VQVCwgTkZfRFJPUCBhbmQgc28gb24uXFxuK1xcdCAqL1xcbitcXHRpZiAodGFyZ2V0LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19CUklER0UpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0cmV0dXJuIG5mdF90YXJnZXRfdmFsaWRhdGUoY3R4LCBleHByKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19uZnRfbWF0Y2hfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbkBAIC05MzIsMTMgKzk0OCwxNSBAQCBuZnRfdGFyZ2V0X3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0b3BzLVxcdTAwM2Vpbml0ID0gbmZ0X3RhcmdldF9pbml0O1xcbiBcXHRvcHMtXFx1MDAzZWRlc3Ryb3kgPSBuZnRfdGFyZ2V0X2Rlc3Ryb3k7XFxuIFxcdG9wcy1cXHUwMDNlZHVtcCA9IG5mdF90YXJnZXRfZHVtcDtcXG4tXFx0b3BzLVxcdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfdmFsaWRhdGU7XFxuIFxcdG9wcy1cXHUwMDNlZGF0YSA9IHRhcmdldDtcXG4gXFxuLVxcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19CUklER0UpXFxuK1xcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19CUklER0UpIHtcXG4gXFx0XFx0b3BzLVxcdTAwM2VldmFsID0gbmZ0X3RhcmdldF9ldmFsX2JyaWRnZTtcXG4tXFx0ZWxzZVxcbitcXHRcXHRvcHMtXFx1MDAzZXZhbGlkYXRlID0gbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGU7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdG9wcy1cXHUwMDNlZXZhbCA9IG5mdF90YXJnZXRfZXZhbF94dDtcXG4rXFx0XFx0b3BzLVxcdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfdmFsaWRhdGU7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiBvcHM7XFxuIGVycjpcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5pbmRleCA5NTgwNTRkZDJlMmVjYy4uMDNhODhjNzdlMGYwMjggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5AQCAtMTIxNSwxMSArMTIxNSwyMyBAQCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmoge1xcbiBcXHR1MzJcXHRcXHR0aW1lb3V0O1xcbiB9O1xcbiBcXG4rc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgamlmZmllc192YWwgPSBtc2Vjc190b19qaWZmaWVzKG5sYV9nZXRfdTMyKGF0dHIpKTtcXG4rXFxuK1xcdGlmIChqaWZmaWVzX3ZhbCBcXHUwMDNlIFVJTlRfTUFYKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdCp2YWwgPSBqaWZmaWVzX3ZhbDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoIXRiW05GVEFfQ1RfRVhQRUNUX0w0UFJPVE9dIHx8XFxuIFxcdCAgICAhdGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdIHx8XFxuQEAgLTEyNTQsOCArMTI2NiwxMSBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIFxcbitcXHRlcnIgPSBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdLCBcXHUwMDI2cHJpdi1cXHUwMDNldGltZW91dCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRwcml2LVxcdTAwM2VkcG9ydCA9IG5sYV9nZXRfYmUxNih0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0pO1xcbi1cXHRwcml2LVxcdTAwM2V0aW1lb3V0ID0gbmxhX2dldF91MzIodGJbTkZUQV9DVF9FWFBFQ1RfVElNRU9VVF0pO1xcbiBcXHRwcml2LVxcdTAwM2VzaXplID0gbmxhX2dldF91OCh0YltORlRBX0NUX0VYUEVDVF9TSVpFXSk7XFxuIFxcbiBcXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cXHUwMDNlbmV0LCBjdHgtXFx1MDAzZWZhbWlseSk7XFxuQEAgLTEyNzUsNyArMTI5MCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAobmxhX3B1dF9iZTE2KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDNQUk9UTywgaHRvbnMocHJpdi1cXHUwMDNlbDNudW0pKSB8fFxcbiBcXHQgICAgbmxhX3B1dF91OChza2IsIE5GVEFfQ1RfRVhQRUNUX0w0UFJPVE8sIHByaXYtXFx1MDAzZWw0cHJvdG8pIHx8XFxuIFxcdCAgICBubGFfcHV0X2JlMTYoc2tiLCBORlRBX0NUX0VYUEVDVF9EUE9SVCwgcHJpdi1cXHUwMDNlZHBvcnQpIHx8XFxuLVxcdCAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIHByaXYtXFx1MDAzZXRpbWVvdXQpIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIGppZmZpZXNfdG9fbXNlY3MocHJpdi1cXHUwMDNldGltZW91dCkpIHx8XFxuIFxcdCAgICBubGFfcHV0X3U4KHNrYiwgTkZUQV9DVF9FWFBFQ1RfU0laRSwgcHJpdi1cXHUwMDNlc2l6ZSkpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuQEAgLTEzMjUsNyArMTM0MCw3IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4gXFx0XFx0ICAgICAgICAgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MyxcXG4gXFx0XFx0ICAgICAgICAgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MyxcXG4gXFx0XFx0ICAgICAgICAgIHByaXYtXFx1MDAzZWw0cHJvdG8sIE5VTEwsIFxcdTAwMjZwcml2LVxcdTAwM2VkcG9ydCk7XFxuLVxcdGV4cC1cXHUwMDNldGltZW91dCArPSBwcml2LVxcdTAwM2V0aW1lb3V0ICogSFo7XFxuK1xcdGV4cC1cXHUwMDNldGltZW91dCArPSBwcml2LVxcdTAwM2V0aW1lb3V0O1xcbiBcXG4gXFx0aWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMClcXG4gXFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcXG5pbmRleCA3NjQxZjI0OTYxNGM5Ny4uOWVkMjg4YzlkMTY4ODAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcXG5AQCAtMjQsMTQgKzI0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICsgMV0gPSB7XFxuIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cyxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3AsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyAqaW5mbyxcXG4tXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2KVxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHRoaXNfY3B1X2luYyhzbmV0LVxcdTAwM2VzdGF0cy1cXHUwMDNlc3luX3JlY2VpdmVkKTtcXG4gXFx0aWYgKHRjcC1cXHUwMDNlZWNlIFxcdTAwMjZcXHUwMDI2IHRjcC1cXHUwMDNlY3dyKVxcbiBcXHRcXHRvcHRzLVxcdTAwM2VvcHRpb25zIHw9IE5GX1NZTlBST1hZX09QVF9FQ047XFxuIFxcbi1cXHRvcHRzLVxcdTAwM2VvcHRpb25zIFxcdTAwMjY9IHByaXYtXFx1MDAzZWluZm8ub3B0aW9ucztcXG4rXFx0b3B0cy1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2PSBpbmZvLVxcdTAwM2VvcHRpb25zO1xcbiBcXHRvcHRzLVxcdTAwM2Vtc3NfZW5jb2RlID0gb3B0cy1cXHUwMDNlbXNzX29wdGlvbjtcXG4gXFx0b3B0cy1cXHUwMDNlbXNzX29wdGlvbiA9IGluZm8tXFx1MDAzZW1zcztcXG4gXFx0aWYgKG9wdHMtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNiBORl9TWU5QUk9YWV9PUFRfVElNRVNUQU1QKVxcbkBAIC01Niw3ICs1NSw3IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIFxcbiBcXHRpZiAodGNwLVxcdTAwM2VzeW4pIHtcXG4gXFx0XFx0LyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi9cXG4tXFx0XFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXFx1MDAyNmluZm8sIHByaXYpO1xcbitcXHRcXHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcXHUwMDI2aW5mbyk7XFxuIFxcdFxcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFjayhuZXQsIHNrYiwgdGNwLCBvcHRzKTtcXG4gXFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfU1RPTEVOO1xcbkBAIC04Nyw3ICs4Niw3IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y2KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIFxcbiBcXHRpZiAodGNwLVxcdTAwM2VzeW4pIHtcXG4gXFx0XFx0LyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi9cXG4tXFx0XFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXFx1MDAyNmluZm8sIHByaXYpO1xcbitcXHRcXHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcXHUwMDI2aW5mbyk7XFxuIFxcdFxcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFja19pcHY2KG5ldCwgc2tiLCB0Y3AsIG9wdHMpO1xcbiBcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiBcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2hcXG5pbmRleCBkODYwZjdkOTc0NGJmOC4uNzI2MTk3NTk1N2VmMTggMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaFxcbkBAIC0yLDE4ICsyLDMyIEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gI1xcbiAjIFRlc3RpbmcgRm9yIFNDVFAgQ09MTElTSU9OIFNDRU5BUklPIGFzIEJlbG93Olxcbi0jXFxuKyMgMS4gU3RhbGUgSU5JVF9BQ0sgY2FwdHVyZTpcXG4gIyAgIDE0OjM1OjQ3LjY1NTI3OSBJUCBDTElFTlRfSVAuUE9SVCBcXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAyMDE3ODM3MzU5XVxcbiAjICAgMTQ6MzU6NDguMzUzMjUwIElQIFNFUlZFUl9JUC5QT1JUIFxcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUXSBbaW5pdCB0YWc6IDExODcyMDYxODddXFxuICMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgXFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDIwMTc4MzczNTldXFxuICMgICAxNDozNTo0OC4zNTMyODMgSVAgU0VSVkVSX0lQLlBPUlQgXFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBFQ0hPXVxcbiAjICAgMTQ6MzU6NDguMzUzOTc3IElQIENMSUVOVF9JUC5QT1JUIFxcdTAwM2UgU0VSVkVSX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgQUNLXVxcbiAjICAgMTQ6MzU6NDguODU1MzM1IElQIFNFUlZFUl9JUC5QT1JUIFxcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAxNjQ1Nzk5NzBdXFxuKyMgICAoRGVsYXllZClcXG4rI1xcbisjIDIuIFN0YWxlIElOSVQgY2FwdHVyZTpcXG4rIyAgIDE0OjM1OjQ4LjM1MzI1MCBJUCBTRVJWRVJfSVAuUE9SVCBcXHUwMDNlIENMSUVOVF9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAxMTg3MjA2MTg3XVxcbisjICAgMTQ6MzU6NDguMzUzMjc1IElQIENMSUVOVF9JUC5QT1JUIFxcdTAwM2UgU0VSVkVSX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAyMDE3ODM3MzU5XVxcbisjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUIFxcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT11cXG4rIyAgIDE0OjM1OjQ4LjM1Mzk3NyBJUCBDTElFTlRfSVAuUE9SVCBcXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbQ09PS0lFIEFDS11cXG4rIyAgIDE0OjM1OjQ3LjY1NTI3OSBJUCBDTElFTlRfSVAuUE9SVCBcXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAyMDE3ODM3MzU5XVxcbisjICAgKERlbGF5ZWQpXFxuKyMgICAxNDozNTo0OC44NTUzMzUgSVAgU0VSVkVSX0lQLlBPUlQgXFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDE2NDU3OTk3MF1cXG4gI1xcbiAjIFRPUE86IFNFUlZFUl9OUyAobGluazApXFx1MDAzYy0tLVxcdTAwM2UobGluazEpIFJPVVRFUl9OUyAobGluazIpXFx1MDAzYy0tLVxcdTAwM2UobGluazMpIENMSUVOVF9OU1xcbiBcXG4gc291cmNlIGxpYi5zaFxcbiBcXG4rY2hlY2t0b29sIFxcXCJuZnQgLS12ZXJzaW9uXFxcIiBcXFwicnVuIHRlc3Qgd2l0aG91dCBuZnRcXFwiXFxuK2NoZWNrdG9vbCBcXFwidGMgLWhcXFwiIFxcXCJydW4gdGVzdCB3aXRob3V0IHRjXFxcIlxcbitjaGVja3Rvb2wgXFxcIm1vZHByb2JlIC1xIHNjdHBcXFwiIFxcXCJsb2FkIHNjdHAgbW9kdWxlXFxcIlxcbitcXG4gQ0xJRU5UX0lQPVxcXCIxOTguNTEuMjAwLjFcXFwiXFxuIENMSUVOVF9QT1JUPTEyMzRcXG4gXFxuQEAgLTI0LDcgKzM4LDggQEAgQ0xJRU5UX0dXPVxcXCIxOTguNTEuMjAwLjJcXFwiXFxuIFNFUlZFUl9HVz1cXFwiMTk4LjUxLjEwMC4yXFxcIlxcbiBcXG4gIyBzZXR1cCB0aGUgdG9wb1xcbi1zZXR1cCgpIHtcXG4rdG9wb19zZXR1cCgpIHtcXG4rXFx0IyBzZXR1cF9ucyBjbGVhbnMgdXAgZXhpc3RpbmcgbmV0IG5hbWVzcGFjZXMgZmlyc3QuXFxuIFxcdHNldHVwX25zIENMSUVOVF9OUyBTRVJWRVJfTlMgUk9VVEVSX05TXFxuIFxcdGlwIC1uIFxcXCIkU0VSVkVSX05TXFxcIiBsaW5rIGFkZCBsaW5rMCB0eXBlIHZldGggcGVlciBuYW1lIGxpbmsxIG5ldG5zIFxcXCIkUk9VVEVSX05TXFxcIlxcbiBcXHRpcCAtbiBcXFwiJENMSUVOVF9OU1xcXCIgbGluayBhZGQgbGluazMgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsaW5rMiBuZXRucyBcXFwiJFJPVVRFUl9OU1xcXCJcXG5AQCAtMzgsMzUgKzUzLDUzIEBAIHNldHVwKCkge1xcbiBcXHRpcCAtbiBcXFwiJFJPVVRFUl9OU1xcXCIgYWRkciBhZGQgJFNFUlZFUl9HVy8yNCBkZXYgbGluazFcXG4gXFx0aXAgLW4gXFxcIiRST1VURVJfTlNcXFwiIGFkZHIgYWRkICRDTElFTlRfR1cvMjQgZGV2IGxpbmsyXFxuIFxcdGlwIG5ldCBleGVjIFxcXCIkUk9VVEVSX05TXFxcIiBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2ZvcndhcmQ9MVxcbitcXHRzeXNjdGwgLXdxIG5ldC5uZXRmaWx0ZXIubmZfbG9nX2FsbF9uZXRucz0xXFxuIFxcbiBcXHRpcCAtbiBcXFwiJENMSUVOVF9OU1xcXCIgbGluayBzZXQgbGluazMgdXBcXG4gXFx0aXAgLW4gXFxcIiRDTElFTlRfTlNcXFwiIGFkZHIgYWRkICRDTElFTlRfSVAvMjQgZGV2IGxpbmszXFxuIFxcdGlwIC1uIFxcXCIkQ0xJRU5UX05TXFxcIiByb3V0ZSBhZGQgJFNFUlZFUl9JUCBkZXYgbGluazMgdmlhICRDTElFTlRfR1dcXG4rfVxcbitcXG4rY29uZl9kZWxheSgpXFxuK3tcXG4rXFx0IyBzaW11bGF0ZSB0aGUgZGVsYXkgb24gT1ZTIHVwY2FsbCBieSBzZXR0aW5nIHVwIGEgZGVsYXkgZm9yIElOSVRfQUNLL0lOSVQgd2l0aFxcbitcXHRsb2NhbCBucz0kMVxcbitcXHRsb2NhbCBsaW5rPSQyXFxuK1xcdGxvY2FsIGNodW5rX3R5cGU9JDNcXG4gXFxuLVxcdCMgc2ltdWxhdGUgdGhlIGRlbGF5IG9uIE9WUyB1cGNhbGwgYnkgc2V0dGluZyB1cCBhIGRlbGF5IGZvciBJTklUX0FDSyB3aXRoXFxuLVxcdCMgdGMgb24gJFNFUlZFUl9OUyBzaWRlXFxuLVxcdHRjIC1uIFxcXCIkU0VSVkVSX05TXFxcIiBxZGlzYyBhZGQgZGV2IGxpbmswIHJvb3QgaGFuZGxlIDE6IGh0YiByMnEgNjRcXG4tXFx0dGMgLW4gXFxcIiRTRVJWRVJfTlNcXFwiIGNsYXNzIGFkZCBkZXYgbGluazAgcGFyZW50IDE6IGNsYXNzaWQgMToxIGh0YiByYXRlIDEwMG1iaXRcXG4tXFx0dGMgLW4gXFxcIiRTRVJWRVJfTlNcXFwiIGZpbHRlciBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBwcm90b2NvbCBpcCB1MzIgbWF0Y2ggaXAgcHJvdG9jb2wgMTMyIFxcXFxcXG4tXFx0XFx0MHhmZiBtYXRjaCB1OCAyIDB4ZmYgYXQgMzIgZmxvd2lkIDE6MVxcbi1cXHRpZiAhIHRjIC1uIFxcXCIkU0VSVkVSX05TXFxcIiBxZGlzYyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOjEgaGFuZGxlIDEwOiBuZXRlbSBkZWxheSAxMjAwbXM7IHRoZW5cXG4rXFx0IyB1c2UgYSBzbWFsbGVyIG51bWJlciBmb3IgYXNzb2MncyBtYXhfcmV0cmFucyB0byByZXByb2R1Y2UgdGhlIGlzc3VlXFxuK1xcdGlwIG5ldCBleGVjIFxcXCIkQ0xJRU5UX05TXFxcIiBzeXNjdGwgLXdxIG5ldC5zY3RwLmFzc29jaWF0aW9uX21heF9yZXRyYW5zPTNcXG4rXFxuK1xcdHRjIC1uIFxcXCIkbnNcXFwiIHFkaXNjIGFkZCBkZXYgXFxcIiRsaW5rXFxcIiByb290IGhhbmRsZSAxOiBodGIgcjJxIDY0XFxuK1xcdHRjIC1uIFxcXCIkbnNcXFwiIGNsYXNzIGFkZCBkZXYgXFxcIiRsaW5rXFxcIiBwYXJlbnQgMTogY2xhc3NpZCAxOjEgaHRiIHJhdGUgMTAwbWJpdFxcbitcXHR0YyAtbiBcXFwiJG5zXFxcIiBmaWx0ZXIgYWRkIGRldiBcXFwiJGxpbmtcXFwiIHBhcmVudCAxOiBwcm90b2NvbCBpcCBcXFxcXFxuK1xcdFxcdHUzMiBtYXRjaCBpcCBwcm90b2NvbCAxMzIgMHhmZiBtYXRjaCB1OCBcXFwiJGNodW5rX3R5cGVcXFwiIDB4ZmYgYXQgMzIgZmxvd2lkIDE6MVxcbitcXHRpZiAhIHRjIC1uIFxcXCIkbnNcXFwiIHFkaXNjIGFkZCBkZXYgXFxcIiRsaW5rXFxcIiBwYXJlbnQgMToxIGhhbmRsZSAxMDogbmV0ZW0gZGVsYXkgMTIwMG1zOyB0aGVuXFxuIFxcdFxcdGVjaG8gXFxcIlNLSVA6IENhbm5vdCBhZGQgbmV0ZW0gcWRpc2NcXFwiXFxuLVxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbiBcXHRmaVxcbiBcXG4gXFx0IyBzaW11bGF0ZSB0aGUgY3RzdGF0ZSBjaGVjayBvbiBPVlMgbmZfY29ubnRyYWNrXFxuLVxcdGlwIG5ldCBleGVjIFxcXCIkUk9VVEVSX05TXFxcIiBpcHRhYmxlcyAtQSBGT1JXQVJEIC1tIHN0YXRlIC0tc3RhdGUgSU5WQUxJRCxVTlRSQUNLRUQgLWogRFJPUFxcbi1cXHRpcCBuZXQgZXhlYyBcXFwiJFJPVVRFUl9OU1xcXCIgaXB0YWJsZXMgLUEgSU5QVVQgLXAgc2N0cCAtaiBEUk9QXFxuLVxcbi1cXHQjIHVzZSBhIHNtYWxsZXIgbnVtYmVyIGZvciBhc3NvYydzIG1heF9yZXRyYW5zIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWVcXG4tXFx0bW9kcHJvYmUgLXEgc2N0cFxcbi1cXHRpcCBuZXQgZXhlYyBcXFwiJENMSUVOVF9OU1xcXCIgc3lzY3RsIC13cSBuZXQuc2N0cC5hc3NvY2lhdGlvbl9tYXhfcmV0cmFucz0zXFxuK1xcdGlwIG5ldCBleGVjIFxcXCIkUk9VVEVSX05TXFxcIiBuZnQgLWYgLSBcXHUwMDNjXFx1MDAzYy1FT0ZcXG4rXFx0dGFibGUgaXAgdCB7XFxuK1xcdFxcdGNoYWluIGZvcndhcmQge1xcbitcXHRcXHRcXHR0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgZmlsdGVyOyBwb2xpY3kgYWNjZXB0O1xcbitcXHRcXHRcXHRtZXRhIGw0cHJvdG8gaWNtcCBjb3VudGVyIGFjY2VwdFxcbitcXHRcXHRcXHRjdCBzdGF0ZSBuZXcgY291bnRlciBhY2NlcHRcXG4rXFx0XFx0XFx0Y3Qgc3RhdGUgZXN0YWJsaXNoZWQscmVsYXRlZCBjb3VudGVyIGFjY2VwdFxcbitcXHRcXHRcXHRjdCBzdGF0ZSBpbnZhbGlkIGxvZyBmbGFncyBhbGwgY291bnRlciBkcm9wIGNvbW1lbnQgXFxcXFxcbitcXHRcXHRcXHRcXFwiRXhwZWN0IHRvIGRyb3Agc3RhbGUgSU5JVC9JTklUX0FDSyBjaHVua3NcXFwiXFxuK1xcdFxcdFxcdGNvdW50ZXJcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdEVPRlxcbitcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbiBjbGVhbnVwKCkge1xcbi1cXHRpcCBuZXQgZXhlYyBcXFwiJENMSUVOVF9OU1xcXCIgcGtpbGwgc2N0cF9jb2xsaXNpb24gXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxuLVxcdGlwIG5ldCBleGVjIFxcXCIkU0VSVkVSX05TXFxcIiBwa2lsbCBzY3RwX2NvbGxpc2lvbiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0IyBjbGVhbnVwX2FsbF9ucyB0ZXJtaW5hdGVzIHJ1bm5pbmcgcHJvY2Vzc2VzIGluIHRoZSBuYW1lc3BhY2VzLlxcbiBcXHRjbGVhbnVwX2FsbF9uc1xcbitcXHRzeXNjdGwgLXdxIG5ldC5uZXRmaWx0ZXIubmZfbG9nX2FsbF9uZXRucz0wXFxuIH1cXG4gXFxuIGRvX3Rlc3QoKSB7XFxuQEAgLTgxLDcgKzExNCwxOSBAQCBkb190ZXN0KCkge1xcbiBcXG4gIyBydW4gdGhlIHRlc3QgY2FzZVxcbiB0cmFwIGNsZWFudXAgRVhJVFxcbi1zZXR1cCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLWVjaG8gXFxcIlRlc3QgZm9yIFNDVFAgQ29sbGlzaW9uIGluIG5mX2Nvbm50cmFjazpcXFwiIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4tZG9fdGVzdCBcXHUwMDI2XFx1MDAyNiBlY2hvIFxcXCJQQVNTIVxcXCJcXG4tZXhpdCAkP1xcbitcXG4rZWNobyBcXFwiVGVzdCBmb3IgU0NUUCBJTklUX0FDSyBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlxcXCJcXG4rdG9wb19zZXR1cCB8fCBleGl0ICQ/XFxuK2NvbmZfZGVsYXkgJFNFUlZFUl9OUyBsaW5rMCAyIHx8IGV4aXQgJD9cXG4rXFxuK2lmICEgZG9fdGVzdDsgdGhlblxcbitcXHRleGl0ICRrc2Z0X2ZhaWxcXG4rZmlcXG4rXFxuK2VjaG8gXFxcIlRlc3QgZm9yIFNDVFAgSU5JVCBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlxcXCJcXG4rdG9wb19zZXR1cCB8fCBleGl0ICQ/XFxuK2NvbmZfZGVsYXkgJENMSUVOVF9OUyBsaW5rMyAxIHx8IGV4aXQgJD9cXG4rXFxuK2lmICEgZG9fdGVzdDsgdGhlblxcbitcXHRleGl0ICRrc2Z0X2ZhaWxcXG4rZmlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaFxcbmluZGV4IGQ4MDM5MDg0OGU4NTA5Li43Yzg1N2EyZTBmMzQ5NCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLnNoXFxuQEAgLTg1LDExICs4NSwxMiBAQCBpcCAtbmV0IFxcXCIkbnMzXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTAuMC4zLjFcXG4gaXAgLW5ldCBcXFwiJG5zM1xcXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGRlYWQ6Mzo6MVxcbiBcXG4gbG9hZF9ydWxlc2V0KCkge1xcbi1cXHRsb2NhbCBuYW1lPSQxXFxuLVxcdGxvY2FsIHByaW89JDJcXG4rXFx0bG9jYWwgZmFtaWx5PSQxXFxuK1xcdGxvY2FsIG5hbWU9JDJcXG4rXFx0bG9jYWwgcHJpbz0kM1xcbiBcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcm91dGVyXFxcIiBuZnQgLWYgL2Rldi9zdGRpbiBcXHUwMDNjXFx1MDAzY0VPRlxcbi10YWJsZSBpbmV0ICRuYW1lIHtcXG4rdGFibGUgJGZhbWlseSAkbmFtZSB7XFxuIFxcdGNoYWluIG5mcSB7XFxuIFxcdFxcdGlwIHByb3RvY29sIGljbXAgcXVldWUgYnlwYXNzXFxuIFxcdFxcdGljbXB2NiB0eXBlIHsgXFxcImVjaG8tcmVxdWVzdFxcXCIsIFxcXCJlY2hvLXJlcGx5XFxcIiB9IHF1ZXVlIG51bSAxIGJ5cGFzc1xcbkBAIC0yMjgsNiArMjI5LDcgQEAgbmZfcXVldWVfd2FpdCgpXFxuIHRlc3RfcXVldWUoKVxcbiB7XFxuIFxcdGxvY2FsIGV4cGVjdGVkPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgZmFtaWx5PVxcXCIkMlxcXCJcXG4gXFx0bG9jYWwgbGFzdD1cXFwiXFxcIlxcbiBcXG4gXFx0IyBzcGF3biBuZl9xdWV1ZSBsaXN0ZW5lcnNcXG5AQCAtMjU1LDExICsyNTcsMTMgQEAgdGVzdF9xdWV1ZSgpXFxuIFxcdFxcdGlmIFsgeFxcXCIkbGFzdFxcXCIgIT0geFxcXCIkZXhwZWN0ZWQgcGFja2V0cyB0b3RhbFxcXCIgXTsgdGhlblxcbiBcXHRcXHRcXHRlY2hvIFxcXCJGQUlMOiBFeHBlY3RlZCAkZXhwZWN0ZWQgcGFja2V0cyB0b3RhbCwgYnV0IGdvdCAkbGFzdFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbiBcXHRcXHRcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyb3V0ZXJcXFwiIG5mdCBsaXN0IHJ1bGVzZXRcXG4rXFx0XFx0XFx0ZWNobyAtbiBcXFwiJFRNUEZJTEUwOiBcXFwiO2NhdCBcXFwiJFRNUEZJTEUwXFxcIlxcbitcXHRcXHRcXHRlY2hvIC1uIFxcXCIkVE1QRklMRTE6IFxcXCI7Y2F0IFxcXCIkVE1QRklMRTFcXFwiXFxuIFxcdFxcdFxcdGV4aXQgMVxcbiBcXHRcXHRmaVxcbiBcXHRkb25lXFxuIFxcbi1cXHRlY2hvIFxcXCJQQVNTOiBFeHBlY3RlZCBhbmQgcmVjZWl2ZWQgJGxhc3RcXFwiXFxuK1xcdGVjaG8gXFxcIlBBU1M6IEV4cGVjdGVkIGFuZCByZWNlaXZlZCAkbGFzdCAoJGZhbWlseSlcXFwiXFxuIH1cXG4gXFxuIGxpc3RlbmVyX3JlYWR5KClcXG5AQCAtNDAwLDYgKzQwNCw4IEBAIEVPRlxcbiBcXG4gXFx0a2lsbCBcXFwiJG5mcXBpZFxcXCJcXG4gXFx0ZWNobyBcXFwiUEFTUzogaWNtcCtuZnF1ZXVlIHZpYSB2cmZcXFwiXFxuK1xcdGlwIC1uZXQgXFxcIiRuczFcXFwiIGxpbmsgZGVsIHR2cmZcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zMVxcXCIgbmZ0IGZsdXNoIHJ1bGVzZXRcXG4gfVxcbiBcXG4gc2N0cF9saXN0ZW5lcl9yZWFkeSgpXFxuQEAgLTgxNCwxMiArODIwLDUzIEBAIEVPRlxcbiBcXHRjaGVja190YWludGVkIFxcXCJxdWV1ZSBwcm9ncmFtIGV4aXRpbmcgd2hpbGUgcGFja2V0cyBxdWV1ZWRcXFwiXFxuIH1cXG4gXFxuK3Rlc3RfcXVldWVfYnJpZGdlKClcXG4re1xcbitcXHRpcCAtbmV0IFxcXCIkbnNyb3V0ZXJcXFwiIGFkZHIgZmx1c2ggZGV2IHZldGgwXFxuK1xcdGlwIC1uZXQgXFxcIiRuc3JvdXRlclxcXCIgYWRkciBmbHVzaCBkZXYgdmV0aDFcXG4rXFxuK1xcdGlwIC1uZXQgXFxcIiRuc3JvdXRlclxcXCIgbGluayBhZGQgYnIwIHR5cGUgYnJpZGdlXFxuK1xcdGlwIC1uZXQgXFxcIiRuc3JvdXRlclxcXCIgbGluayBzZXQgdmV0aDAgbWFzdGVyIGJyMFxcbitcXHRpcCAtbmV0IFxcXCIkbnNyb3V0ZXJcXFwiIGxpbmsgc2V0IHZldGgxIG1hc3RlciBicjBcXG4rXFxuK1xcdGlwIC1uZXQgXFxcIiRuc3JvdXRlclxcXCIgbGluayBzZXQgYnIwIHVwXFxuK1xcbitcXHRpcCAtbmV0IFxcXCIkbnNyb3V0ZXJcXFwiIGFkZHIgYWRkIDEwLjAuMi4xLzE2IGRldiBicjBcXG4rXFx0aXAgLW5ldCBcXFwiJG5zcm91dGVyXFxcIiBhZGRyIGFkZCBkZWFkOjI6OjEvNjQgZGV2IGJyMCBub2RhZFxcbitcXG4rXFx0aXAgLW5ldCBcXFwiJG5zMVxcXCIgYWRkciBmbHVzaCBkZXYgZXRoMFxcbitcXHRpcCAtbmV0IFxcXCIkbnMyXFxcIiBhZGRyIGZsdXNoIGRldiBldGgwXFxuK1xcbitcXHRpcCAtbmV0IFxcXCIkbnMxXFxcIiBhZGRyIGFkZCAxMC4wLjEuMS8xNiBkZXYgZXRoMFxcbitcXHRpcCAtbmV0IFxcXCIkbnMxXFxcIiBhZGRyIGFkZCBkZWFkOjI6OjIvNjQgZGV2IGV0aDAgbm9kYWRcXG4rXFxuK1xcdGlwIC1uZXQgXFxcIiRuczJcXFwiIGFkZHIgYWRkIDEwLjAuMi45OS8xNiBkZXYgZXRoMFxcbitcXHRpcCAtbmV0IFxcXCIkbnMyXFxcIiBhZGRyIGFkZCBkZWFkOjI6Ojk5LzY0IGRldiBldGgwIG5vZGFkXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyb3V0ZXJcXFwiIG5mdCBmbHVzaCBydWxlc2V0XFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyb3V0ZXJcXFwiIHN5c2N0bCBuZXQuaXB2Ni5jb25mLmFsbC5mb3J3YXJkaW5nPTAgXFx1MDAzZSAvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcm91dGVyXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMC5mb3J3YXJkaW5nPTAgXFx1MDAzZSAvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcm91dGVyXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS5mb3J3YXJkaW5nPTAgXFx1MDAzZSAvZGV2L251bGxcXG4rXFxuK1xcdGlmICEgdGVzdF9waW5nO3RoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogbmV0bnMgYnJpZGdlIGNvbm5lY3Rpdml0eVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRleGl0ICRyZXRcXG4rXFx0ZmlcXG4rXFxuK1xcdGxvYWRfcnVsZXNldCBcXFwiYnJpZGdlXFxcIiBcXFwiZmlsdGVyXFxcIiAxMFxcbitcXHR0ZXN0X3F1ZXVlIDEwIFxcXCJicmlkZ2VcXFwiXFxuK1xcbitcXHRsb2FkX3J1bGVzZXQgXFxcImJyaWRnZVxcXCIgXFxcImZpbHRlcjJcXFwiIDIwXFxuK1xcdHRlc3RfcXVldWUgMjAgXFxcImJyaWRnZVxcXCJcXG4rfVxcbitcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcm91dGVyXFxcIiBzeXNjdGwgbmV0LmlwdjYuY29uZi5hbGwuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3JvdXRlclxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3JvdXRlclxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDEuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3JvdXRlclxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDIuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIFxcbi1sb2FkX3J1bGVzZXQgXFxcImZpbHRlclxcXCIgMFxcbitsb2FkX3J1bGVzZXQgXFxcImluZXRcXFwiIFxcXCJmaWx0ZXJcXFwiIDBcXG4gXFxuIGlmIHRlc3RfcGluZzsgdGhlblxcbiBcXHQjIHF1ZXVlIGJ5cGFzcyB3b3JrcyAocnVsZXMgd2VyZSBza2lwcGVkLCBubyBsaXN0ZW5lcilcXG5AQCAtODQyLDExICs4ODksMTEgQEAgbG9hZF9jb3VudGVyX3J1bGVzZXQgMTBcXG4gIyAxeCBpY21wIHByZXJvdXRpbmcsZm9yd2FyZCxwb3N0cm91dGluZyAtXFx1MDAzZSAzIHF1ZXVlIGV2ZW50cyAoNiBpbmNsLiByZXBseSkuXFxuICMgMXggaWNtcCBwcmVyb3V0aW5nLGlucHV0LG91dHB1dCBwb3N0cm91dGluZyAtXFx1MDAzZSA0IHF1ZXVlIGV2ZW50cyBpbmNsLiByZXBseS5cXG4gIyBzbyB3ZSBleHBlY3QgdGhhdCB1c2Vyc3BhY2UgcHJvZ3JhbSByZWNlaXZlcyAxMCBwYWNrZXRzLlxcbi10ZXN0X3F1ZXVlIDEwXFxuK3Rlc3RfcXVldWUgMTAgXFxcImluZXRcXFwiXFxuIFxcbiAjIHNhbWUuICBXZSBxdWV1ZSB0byBhIHNlY29uZCBwcm9ncmFtIGFzIHdlbGwuXFxuLWxvYWRfcnVsZXNldCBcXFwiZmlsdGVyMlxcXCIgMjBcXG4tdGVzdF9xdWV1ZSAyMFxcbitsb2FkX3J1bGVzZXQgXFxcImluZXRcXFwiIFxcXCJmaWx0ZXIyXFxcIiAyMFxcbit0ZXN0X3F1ZXVlIDIwIFxcXCJpbmV0XFxcIlxcbiBpcCBuZXRucyBleGVjIFxcXCIkbnMxXFxcIiBuZnQgZmx1c2ggcnVsZXNldFxcbiBcXG4gdGVzdF90Y3BfZm9yd2FyZFxcbkBAIC04NjMsNCArOTEwLDcgQEAgdGVzdF9xdWV1ZV9zdHJlc3NcXG4gdGVzdF9pY21wX3ZyZlxcbiB0ZXN0X3F1ZXVlX3JlbW92YWxcXG4gXFxuKyMgdHVybnMgcm91dGVyIGludG8gYSBicmlkZ2VcXG4rdGVzdF9xdWV1ZV9icmlkZ2VcXG4rXFxuIGV4aXQgJHJldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MToxOS4yMzU3MzkxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA2ODIxMDQ4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfQ09NUEFUXCIsXG4gICAgXCJORlRfQ1RcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbmZfY29ubmNvdW50X2FkZFwiLFxuICAgIFwiX19uZl9jdF9leHBlY3RfY2hlY2tcIixcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlclwiLFxuICAgIFwiY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19leHBlY3RcIixcbiAgICBcIm5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b1wiLFxuICAgIFwibmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y0XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbmV0ZmlsdGVyLCBpbmNsdWRpbmcgY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBjb21wYXRpYmlsaXR5LiBJdCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvbm5lY3Rpb24gY291bnRpbmcsIGV4cGVjdGF0aW9uIGNoZWNraW5nLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSXQgYWxzbyBhZGRzIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGJyaWRnZSB0YXJnZXRzIGluIG5mdF9jb21wYXQgYW5kIGZpeGVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gbmZ0X2N0LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG9yIGJ5IHByb2Nlc3NpbmcgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNTIxZGQxOGYxMmI2MmFiYTI2ZjA4NmEzMWU0OTAyMDMxZGI5OTYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMjI6NDE6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxuaW5kZXggMjBkNzBkZGRiZTUwOTguLjI1MDYyZjRhMGRkNWYxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxuQEAgLTE4LDcgKzE4LDcgQEBcbiAgKiBAbWF0Y2g6XHR0aGUgbWF0Y2ggZXh0ZW5zaW9uXG4gICogQHRhcmdldDpcdHRoZSB0YXJnZXQgZXh0ZW5zaW9uXG4gICogQG1hdGNoaW5mbzpcdHBlci1tYXRjaCBkYXRhXG4tICogQHRhcmdldGluZm86XHRwZXItdGFyZ2V0IGRhdGFcbisgKiBAdGFyZ2luZm86XHRwZXItdGFyZ2V0IGRhdGFcbiAgKiBAc3RhdGU6XHRwb2ludGVyIHRvIGhvb2sgc3RhdGUgdGhpcyBwYWNrZXQgY2FtZSBmcm9tXG4gICogQGZyYWdvZmY6XHRwYWNrZXQgaXMgYSBmcmFnbWVudCwgdGhpcyBpcyB0aGUgZGF0YSBvZmZzZXRcbiAgKiBAdGhvZmY6XHRwb3NpdGlvbiBvZiB0cmFuc3BvcnQgaGVhZGVyIHJlbGF0aXZlIHRvIHNrYi1cdTAwM2VkYXRhXG5AQCAtNzcsNyArNzcsOSBAQCBzdGF0aWMgaW5saW5lIHVfaW50OF90IHh0X2ZhbWlseShjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gICogQG1hdGNoOlx0c3RydWN0IHh0X21hdGNoIHRocm91Z2ggd2hpY2ggdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZFxuICAqIEBtYXRjaGluZm86XHRwZXItbWF0Y2ggZGF0YVxuICAqIEBob29rX21hc2s6XHR2aWEgd2hpY2ggaG9va3MgdGhlIG5ldyBydWxlIGlzIHJlYWNoYWJsZVxuLSAqIE90aGVyIGZpZWxkcyBhcyBhYm92ZS5cbisgKiBAZmFtaWx5Olx0YWN0dWFsIE5GUFJPVE9fKiB0aHJvdWdoIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkXG4rICpcdFx0KGhlbHBmdWwgd2hlbiBtYXRjaC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19VTlNQRUMpXG4rICogQG5mdF9jb21wYXQ6XHRydW5uaW5nIGZyb20gdGhlIG5mdCBjb21wYXQgbGF5ZXIgaWYgdHJ1ZVxuICAqL1xuIHN0cnVjdCB4dF9tdGNoa19wYXJhbSB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG5AQCAtOTEsOCArOTMsMTMgQEAgc3RydWN0IHh0X210Y2hrX3BhcmFtIHtcbiB9O1xuIFxuIC8qKlxuLSAqIHN0cnVjdCB4dF9tZHRvcl9wYXJhbSAtIG1hdGNoIGRlc3RydWN0b3IgcGFyYW1ldGVyc1xuLSAqIEZpZWxkcyBhcyBhYm92ZS5cbisgKiBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIC0gbWF0Y2ggZGVzdHJ1Y3RvciBwYXJhbWV0ZXJzXG4rICpcbisgKiBAbmV0Olx0bmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCB3aGljaCB0aGUgY2hlY2sgd2FzIGludm9rZWRcbisgKiBAbWF0Y2g6XHRzdHJ1Y3QgeHRfbWF0Y2ggdGhyb3VnaCB3aGljaCB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkXG4rICogQG1hdGNoaW5mbzpcdHBlci1tYXRjaCBkYXRhXG4rICogQGZhbWlseTpcdGFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZFxuKyAqXHRcdChoZWxwZnVsIHdoZW4gbWF0Y2gtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKVxuICAqL1xuIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuQEAgLTEwNSwxMCArMTEyLDE2IEBAIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xuICAqIHN0cnVjdCB4dF90Z2Noa19wYXJhbSAtIHBhcmFtZXRlcnMgZm9yIHRhcmdldCBleHRlbnNpb25zJ1xuICAqIGNoZWNrZW50cnkgZnVuY3Rpb25zXG4gICpcbisgKiBAbmV0Olx0bmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCB3aGljaCB0aGUgY2hlY2sgd2FzIGludm9rZWRcbisgKiBAdGFibGU6XHR0YWJsZSB0aGUgcnVsZSBpcyB0cmllZCB0byBiZSBpbnNlcnRlZCBpbnRvXG4gICogQGVudHJ5aW5mbzpcdHRoZSBmYW1pbHktc3BlY2lmaWMgcnVsZSBkYXRhXG4gICogXHRcdChzdHJ1Y3QgaXB0X2VudHJ5LCBpcDZ0X2VudHJ5LCBhcnB0X2VudHJ5LCBlYnRfZW50cnkpXG4tICpcbi0gKiBPdGhlciBmaWVsZHMgc2VlIGFib3ZlLlxuKyAqIEB0YXJnZXQ6XHR0aGUgdGFyZ2V0IGV4dGVuc2lvblxuKyAqIEB0YXJnaW5mbzpcdHBlci10YXJnZXQgZGF0YVxuKyAqIEBob29rX21hc2s6XHR2aWEgd2hpY2ggaG9va3MgdGhlIG5ldyBydWxlIGlzIHJlYWNoYWJsZVxuKyAqIEBmYW1pbHk6XHRhY3R1YWwgTkZQUk9UT18qIHRocm91Z2ggd2hpY2ggdGhlIGZ1bmN0aW9uIGlzIGludm9rZWRcbisgKlx0XHQoaGVscGZ1bCB3aGVuIG1hdGNoLVx1MDAzZWZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcbisgKiBAbmZ0X2NvbXBhdDpcdHJ1bm5pbmcgZnJvbSB0aGUgbmZ0IGNvbXBhdCBsYXllciBpZiB0cnVlXG4gICovXG4gc3RydWN0IHh0X3RnY2hrX3BhcmFtIHtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbkBAIC0zMzYsOSArMzQ5LDkgQEAgc3RydWN0IHh0X3RhYmxlX2luZm8gKnh0X2FsbG9jX3RhYmxlX2luZm8odW5zaWduZWQgaW50IHNpemUpO1xuIHZvaWQgeHRfZnJlZV90YWJsZV9pbmZvKHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKTtcbiBcbiAvKipcbi0gKiB4dF9yZWNzZXEgLSByZWN1cnNpdmUgc2VxY291bnQgZm9yIG5ldGZpbHRlciB1c2VcbisgKiB2YXIgeHRfcmVjc2VxIC0gcmVjdXJzaXZlIHNlcWNvdW50IGZvciBuZXRmaWx0ZXIgdXNlXG4gICpcbi0gKiBQYWNrZXQgcHJvY2Vzc2luZyBjaGFuZ2VzIHRoZSBzZXFjb3VudCBvbmx5IGlmIG5vIHJlY3Vyc2lvbiBoYXBwZW5lZFxuKyAqIFBhY2tldCBwcm9jZXNzaW5nIGNoYW5nZXMgdGhlIHNlcWNvdW50IG9ubHkgaWYgbm8gcmVjdXJzaW9uIGhhcHBlbmVkLlxuICAqIGdldF9jb3VudGVycygpIGNhbiB1c2UgcmVhZF9zZXFjb3VudF9iZWdpbigpL3JlYWRfc2VxY291bnRfcmV0cnkoKSxcbiAgKiBiZWNhdXNlIHdlIHVzZSB0aGUgbm9ybWFsIHNlcWNvdW50IGNvbnZlbnRpb24gOlxuICAqIExvdyBvcmRlciBiaXQgc2V0IHRvIDEgaWYgYSB3cml0ZXIgaXMgYWN0aXZlLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXG5pbmRleCBiZTRhMTIwZDU0OWViMy4uYzAyNDM0NWM5YmQ4NjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXG5AQCAtMjYsNiArMjYsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCB7XG4gXHRwb3NzaWJsZV9uZXRfdCBuZXQ7XG4gXG4gXHQvKiBXZSBleHBlY3QgdGhpcyB0dXBsZSwgd2l0aCB0aGUgZm9sbG93aW5nIG1hc2sgKi9cbitcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyX3R1cGxlO1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5pbmRleCA4MTAyNTEwMWY4NmRhYS4uYzc2MWNkODE1OGIyNTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5AQCAtMTE0LDYgKzExNCwxMCBAQCBpbnQgbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiwgdW5zaWduZWQgaW50LFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50KTtcbiBcbisjZGVmaW5lIG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChuYW1lKSBcXFxuK1x0cHJfd2FybihcIlRoZSAlcyBjb25udHJhY2sgaGVscGVyIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbC5cXG5cIlx0XFxcbitcdFx0XCJQbGVhc2UgY29udGFjdCB0aGUgbmV0ZmlsdGVyLWRldmVsIG1haWxpbmcgbGlzdCBpZiB5b3Ugc3RpbGwgbmVlZCB0aGlzLlxcblwiLCBuYW1lKVxuK1xuIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKTtcbiBcbiBpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xuaW5kZXggNjY1ZjgwMDhjYzRiMjcuLjRjMDRjZDhkNDBhMjI5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnXG4rKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWdcbkBAIC0yNTYsOCArMjU2LDcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG4gXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIFxuIGNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG4tXHR0cmlzdGF0ZSBcIklSQyBwcm90b2NvbCBzdXBwb3J0XCJcbi1cdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuK1x0dHJpc3RhdGUgXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwiXG4gXHRoZWxwXG4gXHQgIFRoZXJlIGlzIGEgY29tbW9ubHktdXNlZCBleHRlbnNpb24gdG8gSVJDIGNhbGxlZFxuIFx0ICBEaXJlY3QgQ2xpZW50LXRvLUNsaWVudCBQcm90b2NvbCAoRENDKS4gIFRoaXMgZW5hYmxlcyB1c2VycyB0byBzZW5kXG5AQCAtMjY3LDYgKzI2Niw4IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG4gXHQgIHVzaW5nIE5BVCwgdGhpcyBleHRlbnNpb24gd2lsbCBlbmFibGUgeW91IHRvIHNlbmQgZmlsZXMgYW5kIGluaXRpYXRlXG4gXHQgIGNoYXRzLiAgTm90ZSB0aGF0IHlvdSBkbyBOT1QgbmVlZCB0aGlzIGV4dGVuc2lvbiB0byBnZXQgZmlsZXMgb3JcbiBcdCAgaGF2ZSBvdGhlcnMgaW5pdGlhdGUgY2hhdHMsIG9yIGV2ZXJ5dGhpbmcgZWxzZSBpbiBJUkMuXG4rXHQgIERDQyB0cmFja2luZyBiZWhpbmQgTkFUIHJlcXVpcmVzIHBsYWludGV4dCAodW5lbmNyeXB0ZWQpIElSQywgc29cbitcdCAgdGhpcyBoZWxwZXIgaXMgb2YgbGltaXRlZCB1c2UgdGhlc2UgZGF5cy5cbiBcbiBcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gXG5AQCAtMzA4LDE3ICszMDksMTcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG4gXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIFxuIGNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxuLVx0dHJpc3RhdGUgXCJQUHRQIHByb3RvY29sIHN1cHBvcnRcIlxuK1x0dHJpc3RhdGUgXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCJcbiBcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gXHRzZWxlY3QgTkZfQ1RfUFJPVE9fR1JFXG4gXHRoZWxwXG4gXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUFBUUCAoUG9pbnQgdG8gUG9pbnQgVHVubmVsbGluZ1xuIFx0ICBQcm90b2NvbCwgUkZDMjYzNykgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgTkFULlxuIFxuLVx0ICBJZiB5b3UgYXJlIHJ1bm5pbmcgUFBUUCBzZXNzaW9ucyBvdmVyIGEgc3RhdGVmdWwgZmlyZXdhbGwgb3IgTkFUXG4rXHQgIElmIHlvdSBhcmUgc3RpbGwgcnVubmluZyBQUFRQIHNlc3Npb25zIG92ZXIgYSBzdGF0ZWZ1bCBmaXJld2FsbCBvciBOQVRcbiBcdCAgYm94LCB5b3UgbWF5IHdhbnQgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS5cbiBcbi1cdCAgUGxlYXNlIG5vdGUgdGhhdCBub3QgYWxsIFBQVFAgbW9kZXMgb2Ygb3BlcmF0aW9uIGFyZSBzdXBwb3J0ZWQgeWV0LlxuK1x0ICBQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgUFBUUCBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIHN1cHBvcnRlZC5cbiBcdCAgU3BlY2lmaWNhbGx5IHRoZXNlIGxpbWl0YXRpb25zIGV4aXN0OlxuIFx0ICAgIC0gQmxpbmRseSBhc3N1bWVzIHRoYXQgY29udHJvbCBjb25uZWN0aW9ucyBhcmUgYWx3YXlzIGVzdGFibGlzaGVkXG4gXHQgICAgICBpbiBQTlMtXHUwMDNlUEFDIGRpcmVjdGlvbi4gVGhpcyBpcyBhIHZpb2xhdGlvbiBvZiBSRkMyNjM3LlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5pbmRleCBkZDY3MDA0YTVjYzA5ZS4uOTE1ODIwNjlmNmQyZWUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5AQCAtMTgzLDE3ICsxODMsMTYgQEAgc3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGlmIChjdCBcdTAwMjZcdTAwMjYgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xuLVx0XHQvKiBsb2NhbCBjb25uZWN0aW9ucyBhcmUgY29uZmlybWVkIGluIHBvc3Ryb3V0aW5nIHNvIGNvbmZpcm1hdGlvblxuLVx0XHQgKiBtaWdodCBoYXZlIGhhcHBlbmVkIGJlZm9yZSBoaXR0aW5nIGNvbm5saW1pdFxuK1x0XHQvKiBDb25uZWN0aW9uIGlzIGNvbmZpcm1lZCBidXQgbWlnaHQgc3RpbGwgYmUgaW4gdGhlIHNldHVwIHBoYXNlLlxuK1x0XHQgKiBPbmx5IHNraXAgdGhlIHRyYWNraW5nIGlmIGl0IGlzIGZ1bGx5IGFzc3VyZWQuIFRoaXMgZ3VhcmFudGVlc1xuK1x0XHQgKiB0aGF0IHNldHVwIHBhY2tldHMgb3IgcmV0cmFuc21pc3Npb25zIGFyZSBwcm9wZXJseSBjb3VudGVkIGFuZFxuK1x0XHQgKiBkZWR1cGxpY2F0ZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoc2tiLVx1MDAzZXNrYl9paWYgIT0gTE9PUEJBQ0tfSUZJTkRFWCkge1xuK1x0XHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKSB7XG4gXHRcdFx0ZXJyID0gLUVFWElTVDtcbiBcdFx0XHRnb3RvIG91dF9wdXQ7XG4gXHRcdH1cbiBcbi1cdFx0LyogdGhpcyBpcyBsaWtlbHkgYSBsb2NhbCBjb25uZWN0aW9uLCBza2lwIG9wdGltaXphdGlvbiB0byBhdm9pZFxuLVx0XHQgKiBhZGRpbmcgZHVwbGljYXRlcyBmcm9tIGEgJ3BhY2tldCB0cmFpbidcbi1cdFx0ICovXG4gXHRcdGdvdG8gY2hlY2tfY29ubmVjdGlvbnM7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuaW5kZXggNDAwMTE5YjYzMjBlNzIuLmJmNzg4MjhjNzU0OWQ0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG5AQCAtNjIsNiArNjIsNyBAQCBpbnQgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoZXhwID09IE5VTEwpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0ZXhwLVx1MDAzZW1hc3Rlcl90dXBsZVx0ICA9IGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuIFx0ZXhwLVx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XG4gXG4gXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cdTAwM2VoZWxwZXIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbmluZGV4IDQ5ZTE4ZWRhMDM3ZWYxLi4zODYzMGM1ZTAwNmYwOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuQEAgLTM1NSw2ICszNTUsOCBAQCB2b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHVuc2lnbmVkIGludCBjbGFzcyxcbiBcdGV4cC1cdTAwM2V0dXBsZS5zcmMubDNudW0gPSBmYW1pbHk7XG4gXHRleHAtXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID0gcHJvdG87XG4gXG4rXHRleHAtXHUwMDNlbWFzdGVyX3R1cGxlID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4rXG4gXHRpZiAoc2FkZHIpIHtcbiBcdFx0bWVtY3B5KFx1MDAyNmV4cC1cdTAwM2V0dXBsZS5zcmMudTMsIHNhZGRyLCBsZW4pO1xuIFx0XHRpZiAoc2l6ZW9mKGV4cC1cdTAwM2V0dXBsZS5zcmMudTMpIFx1MDAzZSBsZW4pXG5AQCAtNDk0LDkgKzQ5NiwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBfX25mX2N0X2V4cGVjdF9jaGVjayhzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LFxuIFx0XHRcdFx0XHQgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XG4gXHRpZiAoaGVscGVyKSB7XG4gXHRcdHAgPSBcdTAwMjZoZWxwZXItXHUwMDNlZXhwZWN0X3BvbGljeVtleHBlY3QtXHUwMDNlY2xhc3NdO1xuLVx0XHRpZiAocC1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0LVx1MDAzZWNsYXNzXSBcdTAwM2U9IHAtXHUwMDNlbWF4X2V4cGVjdGVkKVxuK1x0XHRpZiAobWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0aW5nW2V4cGVjdC1cdTAwM2VjbGFzc10gXHUwMDNlPSBwLVx1MDAzZW1heF9leHBlY3RlZClcbiBcdFx0XHRldmljdF9vbGRlc3RfZXhwZWN0KG1hc3Rlcl9oZWxwLCBleHBlY3QsIHApO1xuK1x0fSBlbHNlIHtcbitcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGRlZmF1bHRfZXhwX3BvbGljeSA9IHtcbitcdFx0XHQubWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQsXG4rXHRcdH07XG4rXG4rXHRcdGlmIChtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0LVx1MDAzZWNsYXNzXSBcdTAwM2U9IGRlZmF1bHRfZXhwX3BvbGljeS5tYXhfZXhwZWN0ZWQpXG4rXHRcdFx0ZXZpY3Rfb2xkZXN0X2V4cGVjdChtYXN0ZXJfaGVscCwgZXhwZWN0LCBcdTAwMjZkZWZhdWx0X2V4cF9wb2xpY3kpO1xuIFx0fVxuIFxuIFx0Y25ldCA9IG5mX2N0X3Blcm5ldChuZXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDhiOTQwMDFjMjQzMDY2Li41MDA1MDliMTc2NjNlZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTM3NCw4ICszNzQsMTMgQEAgaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4gXHRpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdGlmIChtZS1cdTAwM2VleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCBcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IG1lLVx1MDAzZWV4cGVjdF9jbGFzc19tYXg7IGkrKykge1xuK1x0XHRpZiAoIW1lLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkKVxuK1x0XHRcdG1lLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XG4rXG4rXHRcdGlmIChtZS1cdTAwM2VleHBlY3RfcG9saWN5W2ldLm1heF9leHBlY3RlZCBcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZl9jdF9oZWxwZXJfaHNpemU7IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbmluZGV4IDBjMTE3Yjg0OTJlOTkyLi4xOTNhYjM0ZGI3OTVmOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuQEAgLTI2Miw2ICsyNjIsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiB7XG4gXHRpbnQgaSwgcmV0O1xuIFxuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKEhFTFBFUl9OQU1FKTtcbitcbiBcdGlmIChtYXhfZGNjX2NoYW5uZWxzIFx1MDAzYyAxKSB7XG4gXHRcdHByX2VycihcIm1heF9kY2NfY2hhbm5lbHMgbXVzdCBub3QgYmUgemVyb1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA0ZTc4ZDI0ODI5ODk1ZS4uNDIxNzcxNWQ0MmRjMjQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTE5NTMsMTkgKzE5NTMsNiBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGlmICghc3RyY21wKGhlbHBuYW1lLCBcIlwiKSBcdTAwMjZcdTAwMjYgaGVscCkge1xuLVx0XHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cdTAwM2VoZWxwZXIpO1xuLVx0XHRpZiAoaGVscGVyKSB7XG4tXHRcdFx0Lyogd2UgaGFkIGEgaGVscGVyIGJlZm9yZSAuLi4gKi9cbi1cdFx0XHRuZl9jdF9yZW1vdmVfZXhwZWN0YXRpb25zKGN0KTtcbi1cdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXHUwMDNlaGVscGVyLCBOVUxMKTtcbi1cdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmhlbHBlci1cdTAwM2VjdF9yZWZjbnQpKVxuLVx0XHRcdFx0a2ZyZWVfcmN1KGhlbHBlciwgcmN1KTtcbi1cdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4gXHRoZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChoZWxwbmFtZSwgbmZfY3RfbDNudW0oY3QpLFxuIFx0XHRcdFx0XHQgICAgbmZfY3RfcHJvdG9udW0oY3QpKTtcbiBcdGlmIChoZWxwZXIgPT0gTlVMTCkge1xuQEAgLTMwMTUsNyArMzAwMiw2IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApXG4ge1xuIFx0X19zMzIgdGltZW91dCA9IChfX3MzMikoUkVBRF9PTkNFKGV4cC1cdTAwM2V0aW1lb3V0KSAtIG5mY3RfdGltZV9zdGFtcCkgLyBIWjtcbi1cdHN0cnVjdCBuZl9jb25uICptYXN0ZXIgPSBleHAtXHUwMDNlbWFzdGVyO1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuIFx0c3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtcztcbkBAIC0zMDMwLDkgKzMwMTYsNyBAQCBjdG5ldGxpbmtfZXhwX2R1bXBfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFx0aWYgKGN0bmV0bGlua19leHBfZHVtcF9tYXNrKHNrYiwgXHUwMDI2ZXhwLVx1MDAzZXR1cGxlLCBcdTAwMjZleHAtXHUwMDNlbWFzaykgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLVx0aWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsXG4tXHRcdFx0XHQgXHUwMDI2bWFzdGVyLVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLFxuLVx0XHRcdFx0IENUQV9FWFBFQ1RfTUFTVEVSKSBcdTAwM2MgMClcbitcdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLCBcdTAwMjZleHAtXHUwMDNlbWFzdGVyX3R1cGxlLCBDVEFfRVhQRUNUX01BU1RFUikgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG5AQCAtMzA0NSw5ICszMDI5LDkgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgQ1RBX0VYUEVDVF9OQVRfRElSLCBodG9ubChleHAtXHUwMDNlZGlyKSkpXG4gXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRcdG5hdF90dXBsZS5zcmMubDNudW0gPSBuZl9jdF9sM251bShtYXN0ZXIpO1xuK1x0XHRuYXRfdHVwbGUuc3JjLmwzbnVtID0gZXhwLVx1MDAzZW1hc3Rlcl90dXBsZS5zcmMubDNudW07XG4gXHRcdG5hdF90dXBsZS5zcmMudTMgPSBleHAtXHUwMDNlc2F2ZWRfYWRkcjtcbi1cdFx0bmF0X3R1cGxlLmRzdC5wcm90b251bSA9IG5mX2N0X3Byb3RvbnVtKG1hc3Rlcik7XG4rXHRcdG5hdF90dXBsZS5kc3QucHJvdG9udW0gPSBleHAtXHUwMDNlbWFzdGVyX3R1cGxlLmRzdC5wcm90b251bTtcbiBcdFx0bmF0X3R1cGxlLnNyYy51ID0gZXhwLVx1MDAzZXNhdmVkX3Byb3RvO1xuIFxuIFx0XHRpZiAoY3RuZXRsaW5rX2V4cF9kdW1wX3R1cGxlKHNrYiwgXHUwMDI2bmF0X3R1cGxlLFxuQEAgLTM1ODksNiArMzU3Myw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gI2VuZGlmXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoZXhwLVx1MDAzZWhlbHBlciwgaGVscGVyKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihleHAtXHUwMDNlYXNzaWduX2hlbHBlciwgYXNzaWduX2hlbHBlcik7XG4rXHRleHAtXHUwMDNlbWFzdGVyX3R1cGxlID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4gXHRleHAtXHUwMDNldHVwbGUgPSAqdHVwbGU7XG4gXHRleHAtXHUwMDNlbWFzay5zcmMudTMgPSBtYXNrLVx1MDAzZXNyYy51MztcbiBcdGV4cC1cdTAwM2VtYXNrLnNyYy51LmFsbCA9IG1hc2stXHUwMDNlc3JjLnUuYWxsO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuaW5kZXggNzc2NTA1YTc4ZTY0NTYuLjgwZmMxNGM4N2RkYzRiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbkBAIC01NDUsNiArNTQ1LDggQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKVxuIFxuIFx0cHB0cC5kZXN0cm95ID0gZ3JlX3BwdHBfZGVzdHJveV9zaWJsaW5ncztcbiBcbitcdG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChwcHRwLm5hbWUpO1xuK1xuIFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2cHB0cCwgXHUwMDI2cHB0cF9wdHIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCBlN2EzZmIyYjJkOTQ2Ni4uMjllOTNhYzFlMmU0MDAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbkBAIC0zMjYsOCArMzI2LDEwIEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgY3R4LVx1MDAzZW9mZnNldCk7XG4tXHRzaXplID0gaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMjtcbitcdGlmIChpcGgtXHUwMDNlaWhsIFx1MDAzYyA1KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHRzaXplID0gaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMjtcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcGgpIHx8IHVubGlrZWx5KGlwX2hhc19vcHRpb25zKHNpemUpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTMzNSw5ICszMzcsOSBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVApIHtcbi1cdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IElQUFJPVE9fSVBJUDtcbitcdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemU7XG4tXHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gc2l6ZTtcbitcdFx0Y3R4LVx1MDAzZW9mZnNldCArPSBjdHgtXHUwMDNldHVuLmhkcl9zaXplO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5pbmRleCAyYmJmNTE2M2MwZTI3My4uNjNmZjZiNGQ1ZDIxNGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuQEAgLTExODEsNiArMTE4MSwxNiBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0c3RydWN0IG5mX2hvb2tfb3BzICpuYXRfb3BzO1xuIFx0aW50IGksIHJldDtcbiBcbisjaWZuZGVmIE1PRFVMRVxuK1x0LyogSWYgbmZfbmF0X2NvcmUgaXMgYnVpbHQtaW4gYW5kIG5mX25hdF9pbml0KCkgZmFpbHMsIGRlcGVuZGVudFxuK1x0ICogbW9kdWxlcyBsaWtlIG5mdF9jaGFpbl9uYXQua28gbWF5IHN0aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi5cbitcdCAqIEhvd2V2ZXIsIG5hdF9uZXQgd291bGQgYmUgaW52YWxpZCwgbGlrZWx5IHBvaW50aW5nIHRvIHNvbWUgb3RoZXJcbitcdCAqIHBlci1uZXQgc3RydWN0dXJlLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFuZl9uYXRfaG9vaykpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbisjZW5kaWZcbitcbiBcdGlmIChXQVJOX09OX09OQ0UocGYgXHUwMDNlPSBBUlJBWV9TSVpFKG5hdF9uZXQtXHUwMDNlbmF0X3Byb3RvX25ldCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jXG5pbmRleCAwY2FhOTMwNGQyZDAzMC4uNjM4NjRiOTI4MjU5MDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmNcbkBAIC0zOTcsNiArMzk3LDIyIEBAIHN0YXRpYyBpbnQgbmZ0X3RhcmdldF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbit7XG4rXHRzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQgPSBleHByLVx1MDAzZW9wcy1cdTAwM2VkYXRhO1xuK1xuK1x0LyogRG8gbm90IGFsbG93IFVOU1BFQyB0byBzdGFuZC1pbiBmb3IgTkZQUk9UT19CUklER0VcbitcdCAqIHRhcmdldHM6IHRoZXkgYXJlIGluY29tcGF0aWJsZS4gIGVidGFibGVzIHRhcmdldHMgcmV0dXJuXG4rXHQgKiBFQlRfQUNDRVBULCBEUk9QIGFuZCBzbyBvbiB3aGljaCBhcmUgbm90IGNvbXBhdGlibGUgd2l0aFxuK1x0ICogTkZfQUNDRVBULCBORl9EUk9QIGFuZCBzbyBvbi5cbitcdCAqL1xuK1x0aWYgKHRhcmdldC1cdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19CUklER0UpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0cmV0dXJuIG5mdF90YXJnZXRfdmFsaWRhdGUoY3R4LCBleHByKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19uZnRfbWF0Y2hfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbkBAIC05MzIsMTMgKzk0OCwxNSBAQCBuZnRfdGFyZ2V0X3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdG9wcy1cdTAwM2Vpbml0ID0gbmZ0X3RhcmdldF9pbml0O1xuIFx0b3BzLVx1MDAzZWRlc3Ryb3kgPSBuZnRfdGFyZ2V0X2Rlc3Ryb3k7XG4gXHRvcHMtXHUwMDNlZHVtcCA9IG5mdF90YXJnZXRfZHVtcDtcbi1cdG9wcy1cdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfdmFsaWRhdGU7XG4gXHRvcHMtXHUwMDNlZGF0YSA9IHRhcmdldDtcbiBcbi1cdGlmIChmYW1pbHkgPT0gTkZQUk9UT19CUklER0UpXG4rXHRpZiAoZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFKSB7XG4gXHRcdG9wcy1cdTAwM2VldmFsID0gbmZ0X3RhcmdldF9ldmFsX2JyaWRnZTtcbi1cdGVsc2VcbitcdFx0b3BzLVx1MDAzZXZhbGlkYXRlID0gbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGU7XG4rXHR9IGVsc2Uge1xuIFx0XHRvcHMtXHUwMDNlZXZhbCA9IG5mdF90YXJnZXRfZXZhbF94dDtcbitcdFx0b3BzLVx1MDAzZXZhbGlkYXRlID0gbmZ0X3RhcmdldF92YWxpZGF0ZTtcbitcdH1cbiBcbiBcdHJldHVybiBvcHM7XG4gZXJyOlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCA5NTgwNTRkZDJlMmVjYy4uMDNhODhjNzdlMGYwMjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5AQCAtMTIxNSwxMSArMTIxNSwyMyBAQCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmoge1xuIFx0dTMyXHRcdHRpbWVvdXQ7XG4gfTtcbiBcbitzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBqaWZmaWVzX3ZhbCA9IG1zZWNzX3RvX2ppZmZpZXMobmxhX2dldF91MzIoYXR0cikpO1xuK1xuK1x0aWYgKGppZmZpZXNfdmFsIFx1MDAzZSBVSU5UX01BWClcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHQqdmFsID0gamlmZmllc192YWw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuK1x0aW50IGVycjtcbiBcbiBcdGlmICghdGJbTkZUQV9DVF9FWFBFQ1RfTDRQUk9UT10gfHxcbiBcdCAgICAhdGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdIHx8XG5AQCAtMTI1NCw4ICsxMjY2LDExIEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4rXHRlcnIgPSBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdLCBcdTAwMjZwcml2LVx1MDAzZXRpbWVvdXQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdHByaXYtXHUwMDNlZHBvcnQgPSBubGFfZ2V0X2JlMTYodGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdKTtcbi1cdHByaXYtXHUwMDNldGltZW91dCA9IG5sYV9nZXRfdTMyKHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdKTtcbiBcdHByaXYtXHUwMDNlc2l6ZSA9IG5sYV9nZXRfdTgodGJbTkZUQV9DVF9FWFBFQ1RfU0laRV0pO1xuIFxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNlZmFtaWx5KTtcbkBAIC0xMjc1LDcgKzEyOTAsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBORlRBX0NUX0VYUEVDVF9MM1BST1RPLCBodG9ucyhwcml2LVx1MDAzZWwzbnVtKSkgfHxcbiBcdCAgICBubGFfcHV0X3U4KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDRQUk9UTywgcHJpdi1cdTAwM2VsNHByb3RvKSB8fFxuIFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIE5GVEFfQ1RfRVhQRUNUX0RQT1JULCBwcml2LVx1MDAzZWRwb3J0KSB8fFxuLVx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkZUQV9DVF9FWFBFQ1RfVElNRU9VVCwgcHJpdi1cdTAwM2V0aW1lb3V0KSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkZUQV9DVF9FWFBFQ1RfVElNRU9VVCwgamlmZmllc190b19tc2Vjcyhwcml2LVx1MDAzZXRpbWVvdXQpKSB8fFxuIFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBORlRBX0NUX0VYUEVDVF9TSVpFLCBwcml2LVx1MDAzZXNpemUpKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTMyNSw3ICsxMzQwLDcgQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIFx0XHQgICAgICAgICAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MyxcbiBcdFx0ICAgICAgICAgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsXG4gXHRcdCAgICAgICAgICBwcml2LVx1MDAzZWw0cHJvdG8sIE5VTEwsIFx1MDAyNnByaXYtXHUwMDNlZHBvcnQpO1xuLVx0ZXhwLVx1MDAzZXRpbWVvdXQgKz0gcHJpdi1cdTAwM2V0aW1lb3V0ICogSFo7XG4rXHRleHAtXHUwMDNldGltZW91dCArPSBwcml2LVx1MDAzZXRpbWVvdXQ7XG4gXG4gXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbmluZGV4IDc2NDFmMjQ5NjE0Yzk3Li45ZWQyODhjOWQxNjg4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbkBAIC0yNCwxNCArMjQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zeW5wcm94eV9wb2xpY3lbTkZUQV9TWU5QUk9YWV9NQVggKyAxXSA9IHtcbiBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfdGNwX29wdGlvbnMoc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCxcbi1cdFx0XHRcdCAgICAgc3RydWN0IG5mX3N5bnByb3h5X2luZm8gKmluZm8sXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYpXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvICppbmZvKVxuIHtcbiBcdHRoaXNfY3B1X2luYyhzbmV0LVx1MDAzZXN0YXRzLVx1MDAzZXN5bl9yZWNlaXZlZCk7XG4gXHRpZiAodGNwLVx1MDAzZWVjZSBcdTAwMjZcdTAwMjYgdGNwLVx1MDAzZWN3cilcbiBcdFx0b3B0cy1cdTAwM2VvcHRpb25zIHw9IE5GX1NZTlBST1hZX09QVF9FQ047XG4gXG4tXHRvcHRzLVx1MDAzZW9wdGlvbnMgXHUwMDI2PSBwcml2LVx1MDAzZWluZm8ub3B0aW9ucztcbitcdG9wdHMtXHUwMDNlb3B0aW9ucyBcdTAwMjY9IGluZm8tXHUwMDNlb3B0aW9ucztcbiBcdG9wdHMtXHUwMDNlbXNzX2VuY29kZSA9IG9wdHMtXHUwMDNlbXNzX29wdGlvbjtcbiBcdG9wdHMtXHUwMDNlbXNzX29wdGlvbiA9IGluZm8tXHUwMDNlbXNzO1xuIFx0aWYgKG9wdHMtXHUwMDNlb3B0aW9ucyBcdTAwMjYgTkZfU1lOUFJPWFlfT1BUX1RJTUVTVEFNUClcbkBAIC01Niw3ICs1NSw3IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXG4gXG4gXHRpZiAodGNwLVx1MDAzZXN5bikge1xuIFx0XHQvKiBJbml0aWFsIFNZTiBmcm9tIGNsaWVudCAqL1xuLVx0XHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcdTAwMjZpbmZvLCBwcml2KTtcbitcdFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXHUwMDI2aW5mbyk7XG4gXHRcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFjayhuZXQsIHNrYiwgdGNwLCBvcHRzKTtcbiBcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG5AQCAtODcsNyArODYsNyBAQCBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92Nihjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxuIFxuIFx0aWYgKHRjcC1cdTAwM2VzeW4pIHtcbiBcdFx0LyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi9cbi1cdFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXHUwMDI2aW5mbywgcHJpdik7XG4rXHRcdG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsIFx1MDAyNmluZm8pO1xuIFx0XHRzeW5wcm94eV9zZW5kX2NsaWVudF9zeW5hY2tfaXB2NihuZXQsIHNrYiwgdGNwLCBvcHRzKTtcbiBcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaFxuaW5kZXggZDg2MGY3ZDk3NDRiZjguLjcyNjE5NzU5NTdlZjE4IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoXG5AQCAtMiwxOCArMiwzMiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjXG4gIyBUZXN0aW5nIEZvciBTQ1RQIENPTExJU0lPTiBTQ0VOQVJJTyBhcyBCZWxvdzpcbi0jXG4rIyAxLiBTdGFsZSBJTklUX0FDSyBjYXB0dXJlOlxuICMgICAxNDozNTo0Ny42NTUyNzkgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAyMDE3ODM3MzU5XVxuICMgICAxNDozNTo0OC4zNTMyNTAgSVAgU0VSVkVSX0lQLlBPUlQgXHUwMDNlIENMSUVOVF9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAxMTg3MjA2MTg3XVxuICMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbiAjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBFQ0hPXVxuICMgICAxNDozNTo0OC4zNTM5NzcgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbQ09PS0lFIEFDS11cbiAjICAgMTQ6MzU6NDguODU1MzM1IElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDE2NDU3OTk3MF1cbisjICAgKERlbGF5ZWQpXG4rI1xuKyMgMi4gU3RhbGUgSU5JVCBjYXB0dXJlOlxuKyMgICAxNDozNTo0OC4zNTMyNTAgSVAgU0VSVkVSX0lQLlBPUlQgXHUwMDNlIENMSUVOVF9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAxMTg3MjA2MTg3XVxuKyMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbisjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBFQ0hPXVxuKyMgICAxNDozNTo0OC4zNTM5NzcgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbQ09PS0lFIEFDS11cbisjICAgMTQ6MzU6NDcuNjU1Mjc5IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbisjICAgKERlbGF5ZWQpXG4rIyAgIDE0OjM1OjQ4Ljg1NTMzNSBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAxNjQ1Nzk5NzBdXG4gI1xuICMgVE9QTzogU0VSVkVSX05TIChsaW5rMClcdTAwM2MtLS1cdTAwM2UobGluazEpIFJPVVRFUl9OUyAobGluazIpXHUwMDNjLS0tXHUwMDNlKGxpbmszKSBDTElFTlRfTlNcbiBcbiBzb3VyY2UgbGliLnNoXG4gXG4rY2hlY2t0b29sIFwibmZ0IC0tdmVyc2lvblwiIFwicnVuIHRlc3Qgd2l0aG91dCBuZnRcIlxuK2NoZWNrdG9vbCBcInRjIC1oXCIgXCJydW4gdGVzdCB3aXRob3V0IHRjXCJcbitjaGVja3Rvb2wgXCJtb2Rwcm9iZSAtcSBzY3RwXCIgXCJsb2FkIHNjdHAgbW9kdWxlXCJcbitcbiBDTElFTlRfSVA9XCIxOTguNTEuMjAwLjFcIlxuIENMSUVOVF9QT1JUPTEyMzRcbiBcbkBAIC0yNCw3ICszOCw4IEBAIENMSUVOVF9HVz1cIjE5OC41MS4yMDAuMlwiXG4gU0VSVkVSX0dXPVwiMTk4LjUxLjEwMC4yXCJcbiBcbiAjIHNldHVwIHRoZSB0b3BvXG4tc2V0dXAoKSB7XG4rdG9wb19zZXR1cCgpIHtcbitcdCMgc2V0dXBfbnMgY2xlYW5zIHVwIGV4aXN0aW5nIG5ldCBuYW1lc3BhY2VzIGZpcnN0LlxuIFx0c2V0dXBfbnMgQ0xJRU5UX05TIFNFUlZFUl9OUyBST1VURVJfTlNcbiBcdGlwIC1uIFwiJFNFUlZFUl9OU1wiIGxpbmsgYWRkIGxpbmswIHR5cGUgdmV0aCBwZWVyIG5hbWUgbGluazEgbmV0bnMgXCIkUk9VVEVSX05TXCJcbiBcdGlwIC1uIFwiJENMSUVOVF9OU1wiIGxpbmsgYWRkIGxpbmszIHR5cGUgdmV0aCBwZWVyIG5hbWUgbGluazIgbmV0bnMgXCIkUk9VVEVSX05TXCJcbkBAIC0zOCwzNSArNTMsNTMgQEAgc2V0dXAoKSB7XG4gXHRpcCAtbiBcIiRST1VURVJfTlNcIiBhZGRyIGFkZCAkU0VSVkVSX0dXLzI0IGRldiBsaW5rMVxuIFx0aXAgLW4gXCIkUk9VVEVSX05TXCIgYWRkciBhZGQgJENMSUVOVF9HVy8yNCBkZXYgbGluazJcbiBcdGlwIG5ldCBleGVjIFwiJFJPVVRFUl9OU1wiIHN5c2N0bCAtd3EgbmV0LmlwdjQuaXBfZm9yd2FyZD0xXG4rXHRzeXNjdGwgLXdxIG5ldC5uZXRmaWx0ZXIubmZfbG9nX2FsbF9uZXRucz0xXG4gXG4gXHRpcCAtbiBcIiRDTElFTlRfTlNcIiBsaW5rIHNldCBsaW5rMyB1cFxuIFx0aXAgLW4gXCIkQ0xJRU5UX05TXCIgYWRkciBhZGQgJENMSUVOVF9JUC8yNCBkZXYgbGluazNcbiBcdGlwIC1uIFwiJENMSUVOVF9OU1wiIHJvdXRlIGFkZCAkU0VSVkVSX0lQIGRldiBsaW5rMyB2aWEgJENMSUVOVF9HV1xuK31cbitcbitjb25mX2RlbGF5KClcbit7XG4rXHQjIHNpbXVsYXRlIHRoZSBkZWxheSBvbiBPVlMgdXBjYWxsIGJ5IHNldHRpbmcgdXAgYSBkZWxheSBmb3IgSU5JVF9BQ0svSU5JVCB3aXRoXG4rXHRsb2NhbCBucz0kMVxuK1x0bG9jYWwgbGluaz0kMlxuK1x0bG9jYWwgY2h1bmtfdHlwZT0kM1xuIFxuLVx0IyBzaW11bGF0ZSB0aGUgZGVsYXkgb24gT1ZTIHVwY2FsbCBieSBzZXR0aW5nIHVwIGEgZGVsYXkgZm9yIElOSVRfQUNLIHdpdGhcbi1cdCMgdGMgb24gJFNFUlZFUl9OUyBzaWRlXG4tXHR0YyAtbiBcIiRTRVJWRVJfTlNcIiBxZGlzYyBhZGQgZGV2IGxpbmswIHJvb3QgaGFuZGxlIDE6IGh0YiByMnEgNjRcbi1cdHRjIC1uIFwiJFNFUlZFUl9OU1wiIGNsYXNzIGFkZCBkZXYgbGluazAgcGFyZW50IDE6IGNsYXNzaWQgMToxIGh0YiByYXRlIDEwMG1iaXRcbi1cdHRjIC1uIFwiJFNFUlZFUl9OU1wiIGZpbHRlciBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBwcm90b2NvbCBpcCB1MzIgbWF0Y2ggaXAgcHJvdG9jb2wgMTMyIFxcXG4tXHRcdDB4ZmYgbWF0Y2ggdTggMiAweGZmIGF0IDMyIGZsb3dpZCAxOjFcbi1cdGlmICEgdGMgLW4gXCIkU0VSVkVSX05TXCIgcWRpc2MgYWRkIGRldiBsaW5rMCBwYXJlbnQgMToxIGhhbmRsZSAxMDogbmV0ZW0gZGVsYXkgMTIwMG1zOyB0aGVuXG4rXHQjIHVzZSBhIHNtYWxsZXIgbnVtYmVyIGZvciBhc3NvYydzIG1heF9yZXRyYW5zIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWVcbitcdGlwIG5ldCBleGVjIFwiJENMSUVOVF9OU1wiIHN5c2N0bCAtd3EgbmV0LnNjdHAuYXNzb2NpYXRpb25fbWF4X3JldHJhbnM9M1xuK1xuK1x0dGMgLW4gXCIkbnNcIiBxZGlzYyBhZGQgZGV2IFwiJGxpbmtcIiByb290IGhhbmRsZSAxOiBodGIgcjJxIDY0XG4rXHR0YyAtbiBcIiRuc1wiIGNsYXNzIGFkZCBkZXYgXCIkbGlua1wiIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxMDBtYml0XG4rXHR0YyAtbiBcIiRuc1wiIGZpbHRlciBhZGQgZGV2IFwiJGxpbmtcIiBwYXJlbnQgMTogcHJvdG9jb2wgaXAgXFxcbitcdFx0dTMyIG1hdGNoIGlwIHByb3RvY29sIDEzMiAweGZmIG1hdGNoIHU4IFwiJGNodW5rX3R5cGVcIiAweGZmIGF0IDMyIGZsb3dpZCAxOjFcbitcdGlmICEgdGMgLW4gXCIkbnNcIiBxZGlzYyBhZGQgZGV2IFwiJGxpbmtcIiBwYXJlbnQgMToxIGhhbmRsZSAxMDogbmV0ZW0gZGVsYXkgMTIwMG1zOyB0aGVuXG4gXHRcdGVjaG8gXCJTS0lQOiBDYW5ub3QgYWRkIG5ldGVtIHFkaXNjXCJcbi1cdFx0ZXhpdCAka3NmdF9za2lwXG4rXHRcdHJldHVybiAka3NmdF9za2lwXG4gXHRmaVxuIFxuIFx0IyBzaW11bGF0ZSB0aGUgY3RzdGF0ZSBjaGVjayBvbiBPVlMgbmZfY29ubnRyYWNrXG4tXHRpcCBuZXQgZXhlYyBcIiRST1VURVJfTlNcIiBpcHRhYmxlcyAtQSBGT1JXQVJEIC1tIHN0YXRlIC0tc3RhdGUgSU5WQUxJRCxVTlRSQUNLRUQgLWogRFJPUFxuLVx0aXAgbmV0IGV4ZWMgXCIkUk9VVEVSX05TXCIgaXB0YWJsZXMgLUEgSU5QVVQgLXAgc2N0cCAtaiBEUk9QXG4tXG4tXHQjIHVzZSBhIHNtYWxsZXIgbnVtYmVyIGZvciBhc3NvYydzIG1heF9yZXRyYW5zIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWVcbi1cdG1vZHByb2JlIC1xIHNjdHBcbi1cdGlwIG5ldCBleGVjIFwiJENMSUVOVF9OU1wiIHN5c2N0bCAtd3EgbmV0LnNjdHAuYXNzb2NpYXRpb25fbWF4X3JldHJhbnM9M1xuK1x0aXAgbmV0IGV4ZWMgXCIkUk9VVEVSX05TXCIgbmZ0IC1mIC0gXHUwMDNjXHUwMDNjLUVPRlxuK1x0dGFibGUgaXAgdCB7XG4rXHRcdGNoYWluIGZvcndhcmQge1xuK1x0XHRcdHR5cGUgZmlsdGVyIGhvb2sgZm9yd2FyZCBwcmlvcml0eSBmaWx0ZXI7IHBvbGljeSBhY2NlcHQ7XG4rXHRcdFx0bWV0YSBsNHByb3RvIGljbXAgY291bnRlciBhY2NlcHRcbitcdFx0XHRjdCBzdGF0ZSBuZXcgY291bnRlciBhY2NlcHRcbitcdFx0XHRjdCBzdGF0ZSBlc3RhYmxpc2hlZCxyZWxhdGVkIGNvdW50ZXIgYWNjZXB0XG4rXHRcdFx0Y3Qgc3RhdGUgaW52YWxpZCBsb2cgZmxhZ3MgYWxsIGNvdW50ZXIgZHJvcCBjb21tZW50IFxcXG4rXHRcdFx0XCJFeHBlY3QgdG8gZHJvcCBzdGFsZSBJTklUL0lOSVRfQUNLIGNodW5rc1wiXG4rXHRcdFx0Y291bnRlclxuK1x0XHR9XG4rXHR9XG4rXHRFT0ZcbitcdHJldHVybiAwXG4gfVxuIFxuIGNsZWFudXAoKSB7XG4tXHRpcCBuZXQgZXhlYyBcIiRDTElFTlRfTlNcIiBwa2lsbCBzY3RwX2NvbGxpc2lvbiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbi1cdGlwIG5ldCBleGVjIFwiJFNFUlZFUl9OU1wiIHBraWxsIHNjdHBfY29sbGlzaW9uIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0IyBjbGVhbnVwX2FsbF9ucyB0ZXJtaW5hdGVzIHJ1bm5pbmcgcHJvY2Vzc2VzIGluIHRoZSBuYW1lc3BhY2VzLlxuIFx0Y2xlYW51cF9hbGxfbnNcbitcdHN5c2N0bCAtd3EgbmV0Lm5ldGZpbHRlci5uZl9sb2dfYWxsX25ldG5zPTBcbiB9XG4gXG4gZG9fdGVzdCgpIHtcbkBAIC04MSw3ICsxMTQsMTkgQEAgZG9fdGVzdCgpIHtcbiBcbiAjIHJ1biB0aGUgdGVzdCBjYXNlXG4gdHJhcCBjbGVhbnVwIEVYSVRcbi1zZXR1cCBcdTAwMjZcdTAwMjYgXFxcbi1lY2hvIFwiVGVzdCBmb3IgU0NUUCBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlwiIFx1MDAyNlx1MDAyNiBcXFxuLWRvX3Rlc3QgXHUwMDI2XHUwMDI2IGVjaG8gXCJQQVNTIVwiXG4tZXhpdCAkP1xuK1xuK2VjaG8gXCJUZXN0IGZvciBTQ1RQIElOSVRfQUNLIENvbGxpc2lvbiBpbiBuZl9jb25udHJhY2s6XCJcbit0b3BvX3NldHVwIHx8IGV4aXQgJD9cbitjb25mX2RlbGF5ICRTRVJWRVJfTlMgbGluazAgMiB8fCBleGl0ICQ/XG4rXG4raWYgISBkb190ZXN0OyB0aGVuXG4rXHRleGl0ICRrc2Z0X2ZhaWxcbitmaVxuK1xuK2VjaG8gXCJUZXN0IGZvciBTQ1RQIElOSVQgQ29sbGlzaW9uIGluIG5mX2Nvbm50cmFjazpcIlxuK3RvcG9fc2V0dXAgfHwgZXhpdCAkP1xuK2NvbmZfZGVsYXkgJENMSUVOVF9OUyBsaW5rMyAxIHx8IGV4aXQgJD9cbitcbitpZiAhIGRvX3Rlc3Q7IHRoZW5cbitcdGV4aXQgJGtzZnRfZmFpbFxuK2ZpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaFxuaW5kZXggZDgwMzkwODQ4ZTg1MDkuLjdjODU3YTJlMGYzNDk0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLnNoXG5AQCAtODUsMTEgKzg1LDEyIEBAIGlwIC1uZXQgXCIkbnMzXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIDEwLjAuMy4xXG4gaXAgLW5ldCBcIiRuczNcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZGVhZDozOjoxXG4gXG4gbG9hZF9ydWxlc2V0KCkge1xuLVx0bG9jYWwgbmFtZT0kMVxuLVx0bG9jYWwgcHJpbz0kMlxuK1x0bG9jYWwgZmFtaWx5PSQxXG4rXHRsb2NhbCBuYW1lPSQyXG4rXHRsb2NhbCBwcmlvPSQzXG4gXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIG5mdCAtZiAvZGV2L3N0ZGluIFx1MDAzY1x1MDAzY0VPRlxuLXRhYmxlIGluZXQgJG5hbWUge1xuK3RhYmxlICRmYW1pbHkgJG5hbWUge1xuIFx0Y2hhaW4gbmZxIHtcbiBcdFx0aXAgcHJvdG9jb2wgaWNtcCBxdWV1ZSBieXBhc3NcbiBcdFx0aWNtcHY2IHR5cGUgeyBcImVjaG8tcmVxdWVzdFwiLCBcImVjaG8tcmVwbHlcIiB9IHF1ZXVlIG51bSAxIGJ5cGFzc1xuQEAgLTIyOCw2ICsyMjksNyBAQCBuZl9xdWV1ZV93YWl0KClcbiB0ZXN0X3F1ZXVlKClcbiB7XG4gXHRsb2NhbCBleHBlY3RlZD1cIiQxXCJcbitcdGxvY2FsIGZhbWlseT1cIiQyXCJcbiBcdGxvY2FsIGxhc3Q9XCJcIlxuIFxuIFx0IyBzcGF3biBuZl9xdWV1ZSBsaXN0ZW5lcnNcbkBAIC0yNTUsMTEgKzI1NywxMyBAQCB0ZXN0X3F1ZXVlKClcbiBcdFx0aWYgWyB4XCIkbGFzdFwiICE9IHhcIiRleHBlY3RlZCBwYWNrZXRzIHRvdGFsXCIgXTsgdGhlblxuIFx0XHRcdGVjaG8gXCJGQUlMOiBFeHBlY3RlZCAkZXhwZWN0ZWQgcGFja2V0cyB0b3RhbCwgYnV0IGdvdCAkbGFzdFwiIDFcdTAwM2VcdTAwMjYyXG4gXHRcdFx0aXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIG5mdCBsaXN0IHJ1bGVzZXRcbitcdFx0XHRlY2hvIC1uIFwiJFRNUEZJTEUwOiBcIjtjYXQgXCIkVE1QRklMRTBcIlxuK1x0XHRcdGVjaG8gLW4gXCIkVE1QRklMRTE6IFwiO2NhdCBcIiRUTVBGSUxFMVwiXG4gXHRcdFx0ZXhpdCAxXG4gXHRcdGZpXG4gXHRkb25lXG4gXG4tXHRlY2hvIFwiUEFTUzogRXhwZWN0ZWQgYW5kIHJlY2VpdmVkICRsYXN0XCJcbitcdGVjaG8gXCJQQVNTOiBFeHBlY3RlZCBhbmQgcmVjZWl2ZWQgJGxhc3QgKCRmYW1pbHkpXCJcbiB9XG4gXG4gbGlzdGVuZXJfcmVhZHkoKVxuQEAgLTQwMCw2ICs0MDQsOCBAQCBFT0ZcbiBcbiBcdGtpbGwgXCIkbmZxcGlkXCJcbiBcdGVjaG8gXCJQQVNTOiBpY21wK25mcXVldWUgdmlhIHZyZlwiXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGxpbmsgZGVsIHR2cmZcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnMxXCIgbmZ0IGZsdXNoIHJ1bGVzZXRcbiB9XG4gXG4gc2N0cF9saXN0ZW5lcl9yZWFkeSgpXG5AQCAtODE0LDEyICs4MjAsNTMgQEAgRU9GXG4gXHRjaGVja190YWludGVkIFwicXVldWUgcHJvZ3JhbSBleGl0aW5nIHdoaWxlIHBhY2tldHMgcXVldWVkXCJcbiB9XG4gXG4rdGVzdF9xdWV1ZV9icmlkZ2UoKVxuK3tcbitcdGlwIC1uZXQgXCIkbnNyb3V0ZXJcIiBhZGRyIGZsdXNoIGRldiB2ZXRoMFxuK1x0aXAgLW5ldCBcIiRuc3JvdXRlclwiIGFkZHIgZmx1c2ggZGV2IHZldGgxXG4rXG4rXHRpcCAtbmV0IFwiJG5zcm91dGVyXCIgbGluayBhZGQgYnIwIHR5cGUgYnJpZGdlXG4rXHRpcCAtbmV0IFwiJG5zcm91dGVyXCIgbGluayBzZXQgdmV0aDAgbWFzdGVyIGJyMFxuK1x0aXAgLW5ldCBcIiRuc3JvdXRlclwiIGxpbmsgc2V0IHZldGgxIG1hc3RlciBicjBcbitcbitcdGlwIC1uZXQgXCIkbnNyb3V0ZXJcIiBsaW5rIHNldCBicjAgdXBcbitcbitcdGlwIC1uZXQgXCIkbnNyb3V0ZXJcIiBhZGRyIGFkZCAxMC4wLjIuMS8xNiBkZXYgYnIwXG4rXHRpcCAtbmV0IFwiJG5zcm91dGVyXCIgYWRkciBhZGQgZGVhZDoyOjoxLzY0IGRldiBicjAgbm9kYWRcbitcbitcdGlwIC1uZXQgXCIkbnMxXCIgYWRkciBmbHVzaCBkZXYgZXRoMFxuK1x0aXAgLW5ldCBcIiRuczJcIiBhZGRyIGZsdXNoIGRldiBldGgwXG4rXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGFkZHIgYWRkIDEwLjAuMS4xLzE2IGRldiBldGgwXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGFkZHIgYWRkIGRlYWQ6Mjo6Mi82NCBkZXYgZXRoMCBub2RhZFxuK1xuK1x0aXAgLW5ldCBcIiRuczJcIiBhZGRyIGFkZCAxMC4wLjIuOTkvMTYgZGV2IGV0aDBcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgZGVhZDoyOjo5OS82NCBkZXYgZXRoMCBub2RhZFxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIG5mdCBmbHVzaCBydWxlc2V0XG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcm91dGVyXCIgc3lzY3RsIG5ldC5pcHY2LmNvbmYuYWxsLmZvcndhcmRpbmc9MCBcdTAwM2UgL2Rldi9udWxsXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcm91dGVyXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDAuZm9yd2FyZGluZz0wIFx1MDAzZSAvZGV2L251bGxcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyb3V0ZXJcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS5mb3J3YXJkaW5nPTAgXHUwMDNlIC9kZXYvbnVsbFxuK1xuK1x0aWYgISB0ZXN0X3Bpbmc7dGhlblxuK1x0XHRlY2hvIFwiRkFJTDogbmV0bnMgYnJpZGdlIGNvbm5lY3Rpdml0eVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgJHJldFxuK1x0ZmlcbitcbitcdGxvYWRfcnVsZXNldCBcImJyaWRnZVwiIFwiZmlsdGVyXCIgMTBcbitcdHRlc3RfcXVldWUgMTAgXCJicmlkZ2VcIlxuK1xuK1x0bG9hZF9ydWxlc2V0IFwiYnJpZGdlXCIgXCJmaWx0ZXIyXCIgMjBcbitcdHRlc3RfcXVldWUgMjAgXCJicmlkZ2VcIlxuK31cbitcbiBpcCBuZXRucyBleGVjIFwiJG5zcm91dGVyXCIgc3lzY3RsIG5ldC5pcHY2LmNvbmYuYWxsLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgxLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgyLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gXG4tbG9hZF9ydWxlc2V0IFwiZmlsdGVyXCIgMFxuK2xvYWRfcnVsZXNldCBcImluZXRcIiBcImZpbHRlclwiIDBcbiBcbiBpZiB0ZXN0X3Bpbmc7IHRoZW5cbiBcdCMgcXVldWUgYnlwYXNzIHdvcmtzIChydWxlcyB3ZXJlIHNraXBwZWQsIG5vIGxpc3RlbmVyKVxuQEAgLTg0MiwxMSArODg5LDExIEBAIGxvYWRfY291bnRlcl9ydWxlc2V0IDEwXG4gIyAxeCBpY21wIHByZXJvdXRpbmcsZm9yd2FyZCxwb3N0cm91dGluZyAtXHUwMDNlIDMgcXVldWUgZXZlbnRzICg2IGluY2wuIHJlcGx5KS5cbiAjIDF4IGljbXAgcHJlcm91dGluZyxpbnB1dCxvdXRwdXQgcG9zdHJvdXRpbmcgLVx1MDAzZSA0IHF1ZXVlIGV2ZW50cyBpbmNsLiByZXBseS5cbiAjIHNvIHdlIGV4cGVjdCB0aGF0IHVzZXJzcGFjZSBwcm9ncmFtIHJlY2VpdmVzIDEwIHBhY2tldHMuXG4tdGVzdF9xdWV1ZSAxMFxuK3Rlc3RfcXVldWUgMTAgXCJpbmV0XCJcbiBcbiAjIHNhbWUuICBXZSBxdWV1ZSB0byBhIHNlY29uZCBwcm9ncmFtIGFzIHdlbGwuXG4tbG9hZF9ydWxlc2V0IFwiZmlsdGVyMlwiIDIwXG4tdGVzdF9xdWV1ZSAyMFxuK2xvYWRfcnVsZXNldCBcImluZXRcIiBcImZpbHRlcjJcIiAyMFxuK3Rlc3RfcXVldWUgMjAgXCJpbmV0XCJcbiBpcCBuZXRucyBleGVjIFwiJG5zMVwiIG5mdCBmbHVzaCBydWxlc2V0XG4gXG4gdGVzdF90Y3BfZm9yd2FyZFxuQEAgLTg2Myw0ICs5MTAsNyBAQCB0ZXN0X3F1ZXVlX3N0cmVzc1xuIHRlc3RfaWNtcF92cmZcbiB0ZXN0X3F1ZXVlX3JlbW92YWxcbiBcbisjIHR1cm5zIHJvdXRlciBpbnRvIGEgYnJpZGdlXG4rdGVzdF9xdWV1ZV9icmlkZ2VcbitcbiBleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjE5LjIzNTc0MTI3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MDU3NjUyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5ldGZpbHRlciBQYXRjaCBTZXJpZXMgUmV2aWV3KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIG5ldGZpbHRlciBwYXRjaCBzZXJpZXMuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHN1YnN0YW50aWFsIHNldCBvZiBjaGFuZ2VzIGFjcm9zcyB2YXJpb3VzIGNvbXBvbmVudHMsIHRvdWNoaW5nIGJvdGggY29yZSBjb25udHJhY2sgYW5kIHRoZSBuZXdlciBuZnRhYmxlcyBpbmZyYXN0cnVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIG1pbm9yIHR3ZWFrLCBzbyB3ZSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIGltcGFjdC5cblxuRmlyc3QsIEkgc2VlIHNldmVyYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHh0YWJsZXNgIGluZnJhc3RydWN0dXJlLCBwcmltYXJpbHkgaW4gdGhlIGB4dF9tdGNoa19wYXJhbWAsIGB4dF9tdGR0b3JfcGFyYW1gLCBgeHRfdGdjaGtfcGFyYW1gLCBhbmQgYHh0X2FjdGlvbl9wYXJhbWAgc3RydWN0dXJlcy4gIFRoZSBhZGRpdGlvbiBvZiBgZmFtaWx5YCwgYG5mdF9jb21wYXRgLCBgbmV0YCwgYG1hdGNoYCwgYW5kIG90aGVyIGZpZWxkcyBpbmRpY2F0ZXMgYSBkZWVwZXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgbmV0d29yayBuYW1lc3BhY2UgYW5kIG5mdGFibGVzIGNvbXBhdGliaWxpdHkuIEl0J3MgY2xlYXIgdGhhdCB0aGlzIHNlcmllcyBpcyBmYWNpbGl0YXRpbmcgYSBjbG9zZXIgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBsZWdhY3kgYHh0YWJsZXNgIGFuZCB0aGUgbmV3ZXIgbmZ0YWJsZXMgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEknbSB3YXRjaGluZyB0aGUgYG5mdF9jb21wYXRgIGZsYWdzIGNsb3NlbHksIGFzIHRob3NlIGFyZSBvZnRlbiBpbmRpY2F0b3JzIG9mIGxlZ2FjeSBjb2RlIHRoYXQgc3RpbGwgbmVlZHMgc3VwcG9ydCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cblRoZSBtb2RpZmljYXRpb25zIHRvIGBuZl9jb25udHJhY2tfZXhwZWN0LmhgLCBgbmZfY29ubnRyYWNrX2hlbHBlci5oYCwgYW5kIHJlbGF0ZWQgZmlsZXMgYXJlIGFsc28gc2lnbmlmaWNhbnQuIEFkZGluZyB0aGUgYG1hc3Rlcl90dXBsZWAgZmllbGQgdG8gYG5mX2Nvbm50cmFja19leHBlY3RgIGFuZCBpbmNvcnBvcmF0aW5nIHRoZSBgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkYCBtYWNybyBzdWdnZXN0cyByZWZhY3RvcmluZyBhbmQgYSBtb3ZlIHRvd2FyZHMgbW9yZSBleHBsaWNpdCBoYW5kbGluZyBvZiBjb25uZWN0aW9uIGV4cGVjdGF0aW9ucyBhbmQgaGVscGVyIGRlcHJlY2F0aW9uLCBsaWtlbHkgaW4gcHJlcGFyYXRpb24gZm9yIHJlbW92aW5nIHNvbWUgbGVnYWN5IGZ1bmN0aW9uYWxpdHkuIFRoZSBjaGFuZ2VzIGluIGBuZl9jdF9leHBlY3RfaW5pdGAgYW5kIGBfX25mX2N0X2V4cGVjdF9jaGVja2AgZGVzZXJ2ZSBhdHRlbnRpb24sIGFzIHRoZSB1c2Ugb2YgYGRlZmF1bHRfZXhwX3BvbGljeWAgaWYgYGhlbHBlcmAgaXMgTlVMTCBoYXMgc3VidGxlIGJ1dCBpbXBvcnRhbnQgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZXNlIGNoYW5nZXMgdGhvcm91Z2hseS5cblxuVGhlIGNoYW5nZXMgaW4gYG5mX2Nvbm5jb3VudC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBzaGlmdCBmcm9tIGBza2ItXHUwMDNlc2tiX2lpZiAhPSBMT09QQkFDS19JRklOREVYYCB0byBgdGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpYCBpbiBgX19uZl9jb25uY291bnRfYWRkYCwgbG9va3MgbGlrZSBhIHBlcmZvcm1hbmNlL2FjY3VyYWN5IG9wdGltaXphdGlvbi4gVGhpcyBkZXNlcnZlcyBhIGNsb3NlciBsb29rIHRvIHNlZSBob3cgaXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIHVuZGVyIGxvYWQuIExpa2V3aXNlLCBjaGFuZ2VzIHRvIGBuZl9jb25udHJhY2tfYnJvYWRjYXN0LmNgIGFuZCBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHdoaWNoIG5vdyB1c2UgYGV4cC1cdTAwM2VtYXN0ZXJfdHVwbGVgIGhlYXZpbHksIHdhcnJhbnQgdGVzdGluZywgYXMgd2VsbCBhcyB0aGUgYWRkaXRpb24gdG8gYG5mX2Nvbm50cmFja19wcHRwLmNgIGFuZCBgbmZfY29ubnRyYWNrX2lyYy5jYCB0aGF0IGRlcHJlY2F0ZSB0aGUgaGVscGVyLlxuXG5UaGUgYG5mX2Zsb3dfdGFibGVfaXAuY2AgY2hhbmdlLCB3aXRoIHRoZSBhZGRlZCBgaXBoLVx1MDAzZWlobCBcdTAwM2MgNWAgY2hlY2sgaW4gYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2AsIGxvb2tzIGxpa2UgYSBwYWNrZXQgc2FuaXR5IGNoZWNrLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgYSBjcmFzaCBvciBzb21lIG90aGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3IuICBJIGFsc28gc2VlIHNvbWUgYWRkZWQgY2hlY2tzIGluIGBuZl9uYXRfY29yZS5jYCBmb3IgYCFuZl9uYXRfaG9va2AgaW4gYG5mX25hdF9yZWdpc3Rlcl9mbmAuIFRoZXNlIGFyZSBiYXNpYyBzYW5pdHkgY2hlY2tzIHRoYXQgc2hvdWxkIGJlIHRlc3RlZCwgYnV0IHRoZXkgc2hvdWxkIGJlIGVhc2lseSBmdXp6YWJsZS5cblxuVGhlIG5mdGFibGVzIGNoYW5nZXMsIGVzcGVjaWFsbHkgaW4gYG5mdF9jb21wYXQuY2Agd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWAgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIGBORlBST1RPX0JSSURHRWAsIHN0cm9uZ2x5IGluZGljYXRlIGZ1cnRoZXIgYnJpZGdlIHN1cHBvcnQgYW5kIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IHVwZ3JhZGVzLiAgSSdtIGFsc28gc2VlaW5nIGFuIGV4dGVuc2lvbiBvbiB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBgbmZ0X2N0LmNgIHdpdGggYG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXRgIGJlaW5nIGFkZGVkLCBhbmQgY2hhbmdlcyB0byBob3cgdGhlIHRpbWVvdXQgaXMgdXNlZCBpbiBzZXZlcmFsIGxvY2F0aW9ucy4gQ2hhbmdlcyBpbiBgbmZ0X3N5bnByb3h5LmNgIHNpbXBsaWZ5aW5nIGBuZnRfc3lucHJveHlfdGNwX29wdGlvbnNgIHdpdGggcmVtb3ZhbCBvZiB0aGUgYHByaXZgIGFyZ3VtZW50IHNlZW0gZmFpcmx5IG1pbm9yLlxuXG5GaW5hbGx5LCB0aGUgdXBkYXRlcyB0byB0aGUgc2VsZi10ZXN0cyBpbiBgY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoYCBhbmQgYG5mdF9xdWV1ZS5zaGAgYXJlIHBvc2l0aXZlIHNpZ25zLiBHb29kIHRlc3RzIGFyZSBjcml0aWNhbCB0byB2ZXJpZnkgYWxsIHRoaXMsIHNvIHRoZXkgc2hvdWxkIGJlIGludGVncmF0ZWQgaW50byBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZS5cblxuKipGdW5jdGlvbmFsIENoYW5nZXMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Gcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2hhbmdlcyBhcmU6XG5cbiogICBgbmZfY29ubmNvdW50LmNgOiAgQWx0ZXJlZCBsb2dpYyBpbiBgX19uZl9jb25uY291bnRfYWRkYC5cbiogICBgbmZfY29ubnRyYWNrX2V4cGVjdC5jYDogTW9kaWZpY2F0aW9uIHRvIGBfX25mX2N0X2V4cGVjdF9jaGVja2BcbiogICBgbmZfY29ubnRyYWNrX2hlbHBlci5jYDogQ2hhbmdlcyBpbiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYC5cbiogICBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2A6ICBDaGFuZ2VzIGFyb3VuZCBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgIGFuZCBgZXhwLVx1MDAzZW1hc3Rlcl90dXBsZWAuXG4qICAgYG5mX2Zsb3dfdGFibGVfaXAuY2A6ICBUaGUgbmV3IGNoZWNrIGluIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLlxuKiAgIGBuZnRfY29tcGF0LmNgOiBUaGUgYWRkaXRpb24gb2YgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYC5cbiogICBgbmZ0X2N0LmNgOiBUaGUgYWRkZWRcblxuIiwiSW5wdXRUb2tlbnMiOjEzNTYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjM2LjI5MzM5NjQ5NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc4NjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25uY291bnQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Nzk9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSkgKz0gbmZfc3lucHJveHlfY29yZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04MC1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSArPSBuZl9jb25uY291bnQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjM2LjM1NzE5NTk2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjQ5MTkyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgT2JqZWN0IEZpbGVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUuIFRoZSBjbHVlIGlzIGluIHRoZSBmaWxlIG5hbWVzLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgYG5mX2Zsb3dfdGFibGVfaXAub2AgYW5kIGFueSBvdGhlciBzaW1pbGFyIG9iamVjdCBmaWxlcy4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZmxvdyB0YWJsZSBmb3IgSVAgdHJhZmZpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUgb3JnYW5pemF0aW9uLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgZXNwZWNpYWxseSwgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBlcmZvcm1hbmNlIGFuZCBzY2FsYWJpbGl0eSwgc28gSSBuZWVkIGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBzZWN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGxpZXMsIHNvIEkgY2FuIGV4dHJhcG9sYXRlIHdoYXQgZWxzZSBtaWdodCBleGlzdCBpbiB0aGUgbGFyZ2VyIGtlcm5lbCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo0Mi43MjIxMTc2NjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0Nzc4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9pcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjQyLjc3ODYwODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcxOTU2MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkV4YW1pbmluZyBOZXRmaWx0ZXIgQ29tcGF0aWJpbGl0eSBNb2R1bGVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGEgZmV3IE5ldGZpbHRlciBtb2R1bGVzLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNoZWNrIG9uIGBuZnRfY29tcGF0Lm9gLCB0aGVuIG1vdmUgb24gdG8gYG5mdF9jdC5vYCwgYW5kIGZpbmFsbHksIEknbGwgZXhhbWluZSBgbmZ0X3N5bnByb3h5Lm9gLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBpZGVudGlmeSBhbnl0aGluZyB0aGF0IG5lZWRzIHR3ZWFraW5nIG9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gVGhlc2UgYXJlIGtleSBjb21wb25lbnRzLCBzbyB0aG9yb3VnaG5lc3MgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIGFuZCBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLiBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIG9mIGNvdXJzZSwgYW55IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY5MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjQ1LjY1MDU3MTkxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjI2Nzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY29tcGF0Lm98bmZ0X2N0Lm98bmZ0X3N5bnByb3h5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEwOD1vYmotJChDT05GSUdfTkZfVEFCTEVTKVxcdFxcdCs9IG5mX3RhYmxlcy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX05GVF9DT01QQVQpXFx0Kz0gbmZ0X2NvbXBhdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTAtb2JqLSQoQ09ORklHX05GVF9DT05OTElNSVQpXFx0Kz0gbmZ0X2Nvbm5saW1pdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX05GVF9OVU1HRU4pXFx0Kz0gbmZ0X251bWdlbi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX05GVF9DVClcXHRcXHQrPSBuZnRfY3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVxcdCs9IG5mdF9mbG93X29mZmxvYWQub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzI9b2JqLSQoQ09ORklHX05GVF9YRlJNKVxcdFxcdCs9IG5mdF94ZnJtLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzMzpvYmotJChDT05GSUdfTkZUX1NZTlBST1hZKVxcdCs9IG5mdF9zeW5wcm94eS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjQ1LjczMjg0ODQxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTg2NzU1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZl9jb25udHJhY2tfbmV0bGluay5vYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdGFyZ2V0IGlzIGBuZl9jb25udHJhY2tfbmV0bGluay5vYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IG5ldGxpbmsgc29ja2V0cyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBsaWtlbHkgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgYmV0d2VlbiB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRoZSBrZXJuZWwncyBjb25uZWN0aW9uIHRyYWNraW5nIHN1YnN5c3RlbS4gSSBleHBlY3QgdG8gc2VlIGV2aWRlbmNlIG9mIHRoZSBuZXRsaW5rIHByb3RvY29sIGltcGxlbWVudGF0aW9uIGhlcmUg4oCTIHRoZSBtZXNzYWdlIHN0cnVjdHVyZXMsIHRoZSBhdHRyaWJ1dGUgaGFuZGxpbmcsIGFuZCB0aGUgbGlrZWx5IGludGVyYWN0aW9uIHdpdGggdGhlIGNvbm50cmFjayB0YWJsZSBpdHNlbGYuIEknbSBnb2luZyB0byB3YW50IHRvIGV4YW1pbmUgaG93IGl0IGhhbmRsZXMgY29ubmVjdGlvbiBjcmVhdGlvbiwgZGVsZXRpb24sIGFuZCBtb2RpZmljYXRpb24gZXZlbnRzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCByZWxhdGVkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllczogQXJlIHRoZXJlIGFueSBidWZmZXIgb3ZlcmZsb3dzIGluIGhvdyBpdCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgZGF0YT8gRG9lcyBpdCBjb3JyZWN0bHkgdmFsaWRhdGUgaW5wdXQgYmVmb3JlIHBhc3NpbmcgaXQgdG8ga2VybmVsIGludGVybmFscz8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgd2hlbiBoYW5kbGluZyBjb25jdXJyZW50IG5ldGxpbmsgbWVzc2FnZXM/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgbW9kdWxlJ3MgZXhwb3J0ZWQgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byBuZXRsaW5rIG1lc3NhZ2UgaGFuZGxpbmcgYW5kIGRhdGEgcGFyc2luZy4gSXQnbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCdzIGNvbmN1cnJlbmN5IG1vZGVsIChzcGlubG9ja3MsIFJDVSwgZXRjLikgdG8gZXZhbHVhdGUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxODgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo0OS44MzE1Mjg2NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTk3MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19uZXRsaW5rLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICs9IG5mX2Nvbm50cmFjay5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM2LSMgbmV0bGluayBpbnRlcmZhY2UgZm9yIG5mX2Nvbm50cmFja1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTkspICs9IG5mX2Nvbm50cmFja19uZXRsaW5rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo0OS44OTE3NDY3NTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI4MzUwNzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbnMgYW5kIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc2V0IG9mIGNvbmZpZ3VyYXRpb25zOiBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS2AsIGBORl9GTE9XX1RBQkxFYCwgYE5GVF9DT01QQVRgLCBgTkZUX0NUYCwgYW5kIGBORlRfU1lOUFJPWFlgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyZGVwZW5kZW5jaWVzIGFuZCB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbm5lY3RlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuXG5cbkxldCBtZSB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGF0IGxpa2VseSByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMuIEkgc2VlOiBgX19uZl9jb25uY291bnRfYWRkYCwgd2hpY2ggcHJvYmFibHkgaGFuZGxlcyBjb25uZWN0aW9uIGNvdW50aW5nOyBgX19uZl9jdF9leHBlY3RfY2hlY2tgLCBpbnZvbHZlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nIGV4cGVjdGF0aW9uczsgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGRlYWxpbmcgd2l0aCBoZWxwZXIgbW9kdWxlczsgYGN0bmV0bGlua19jaGFuZ2VfaGVscGVyYCwgd2hpY2ggbGlrZWx5IHRpZXMgaW50byBuZXRsaW5rIGNvbmZpZ3VyYXRpb247IGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCBmb3IgYWxsb2NhdGluZyBleHBlY3RhdGlvbnMgdmlhIG5ldGxpbms7IGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gIHNlZW1zIHNwZWNpZmljIHRvIElQdjQgdHVubmVsIHByb3RvY29sczsgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYCBmb3IgYnJpZGdlIHZhbGlkYXRpb25zIGluIG5mdGFibGVzOyBhbmQsIHRoZSBuZnRhYmxlcyBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBzeW5wcm94eSBmdW5jdGlvbnM6IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X3N5bnByb3h5X2V2YWxfdjRgLCBhbmQgYG5mdF9zeW5wcm94eV9ldmFsX3Y2YC4gVGhhdCBzZXQgZ2l2ZXMgbWUgYSBncmVhdCBwaWN0dXJlIG9mIHRoZSBwaWVjZXMuXG5cbk5vdyBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYW5kIGxvb2sgZm9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBsaW5rZWQgdG8gdGhvc2UgcHJpbWFyeSBmdW5jdGlvbnMuIEkgYW0gc2VlaW5nIGBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHBgLCBgbmZfY3RfZXhwZWN0X2luaXRgLCBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCwgYW5kIGBuZnRfdGFyZ2V0X3NlbGVjdF9vcHNgLiBJJ2xsIHdhbnQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBhbnkgY2hhbmdlcyBtYWRlIHRvIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLiBUaGlzIGlzIGdpdmluZyBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo1Ni4xNzUyNTY5MzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTc1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0zMDk9c3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMzE4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjMxOTpzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0zMjAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9Mzg3PXN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00MTYtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDE3OlxcdFxcdHJldCA9IG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhjdHgsIHNrYik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDE4LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo1Ni4yNDI4NDI1NDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1MzY4MDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTmV0d29yayBGbG93IEVuY2Fwc3VsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBmdW5jdGlvbiwgZXNwZWNpYWxseSBzaW5jZSBpdCdzIHN0YXRpY2FsbHkgY2FsbGVkIGJ5IGBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbGAuIFRoYXQgbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIHRyYWNpbmcgbmV0d29yayBlbmNhcHN1bGF0aW9uIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIGhvdyB0aGUgYnJpZGdlIHRhcmdldCBpcyB2YWxpZGF0ZWQuIEknbGwgdGFrZSBhIGxvb2sgYXQgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo1OC45OTY1MjU1NjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTc1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jPTM1Mz1zdGF0aWMgaW50IG5mdF90YXJnZXRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTM5OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzo0MDA6c3RhdGljIGludCBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTQwMS1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz05MDM9bmZ0X3RhcmdldF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy05NTQtXFx0XFx0b3BzLVxcdTAwM2VldmFsID0gbmZ0X3RhcmdldF9ldmFsX2JyaWRnZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzo5NTU6XFx0XFx0b3BzLVxcdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTk1Ni1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo1OS4wNTc3MjUzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA5ODI3NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgKipcblxuQWxyaWdodCwgc28gYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBhY3RpbmcgYXMgYSBjYWxsYmFjay4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHBvaW50IGZvciBhbmFseXNpcyDigJMgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIHdpdGhpbiB0aGUgYnJpZGdlJ3Mgb3BlcmF0aW9uLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gaXQsIHNlZSB3aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yIHZhbGlkYXRpbmcuIE15IGV4cGVjdGF0aW9uIGlzIHRoaXMgZnVuY3Rpb24gaXMgdmFsaWRhdGluZyB0aGF0IHRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgYnJpZGdlZCBpcyBsZWdpdGltYXRlLlxuXG5MZXQncyBzaGlmdCBnZWFycyBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGJyaWRnZSBvcGVyYXRlcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbm50cmFjayBjb250ZXh0LiBMZXQncyBsb29rIGF0IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhc3BlY3RzIGFyZSBzZXQgdXAuIEknbSBlYWdlciB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhwZWN0YXRpb25zIGFyZSBpbml0aWFsaXplZCB0byBzZWUgaWYgdGhpcyBleHBsYWlucyB0aGUgYnJpZGdlIGluIGFueSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTExLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MDMuMDY3NTU2MzUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ0NTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY3RfZXhwZWN0X29ial9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTIxOD1zdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyMjgtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjI5OnN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIzMC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzY0LVxcdC5ldmFsXFx0XFx0PSBuZnRfY3RfZXhwZWN0X29ial9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTM2NTpcXHQuaW5pdFxcdFxcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzNjYtXFx0LmRlc3Ryb3lcXHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjAzLjEyOTAwODc1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM2MDMyMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzLCBwcmVzZW50ZWQgYXMgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBORnRhYmxlcyBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuUmlnaHQsIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIC0gdGhvc2UgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IGNsZWFybHkgZGVmaW5lIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZXZhbHVhdGlvbiBzdGVwcyBmb3IgY29ubmVjdGlvbiB0cmFja2luZyBleHBlY3RhdGlvbnMsIHdoaWNoIGlzIHByZWNpc2VseSB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIHRvIHJlc2lkZSB3aGVuIGRlYWxpbmcgd2l0aCBleHBlY3RlZCBjb25uZWN0aW9ucy4gTGV0J3MgbWFrZSBhIG5vdGUgb2YgdGhvc2UgYXMgb3VyIHByaW1hcnkgdGFyZ2V0cyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhpcy5cblxuT2theSwgbGV0J3Mgbm93IHN3aXRjaCBvdXIgYXR0ZW50aW9uIG92ZXIgdG8gYG5mdF9zeW5wcm94eV9ldmFsX3Y0YCBzaW5jZSB0aGlzIHNlZW1zIGxpa2UgYSByZWxhdGVkIGFuZCBpbnRlcmVzdGluZyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjowNS45NjUwNDQyMThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTEwNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9zeW5wcm94eV9ldmFsX3Y0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmM9MjQ9c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKHN0cnVjdCBzeW5wcm94eV9vcHRpb25zICpvcHRzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy00My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jOjQ0OnN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy00NS1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYz0xMDY9c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMtMTQwLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmM6MTQxOlxcdFxcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcXHUwMDI2X3RjcGgsIFxcdTAwMjZvcHRzKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTE0Mi1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjA2LjAyODE2MzI0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA4MTIxMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEZvY3VzaW5nIG9uIEtleSBTeW1ib2xzKipcblxuUmlnaHQsIGBuZnRfc3lucHJveHlfZXZhbF92NGAgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAgc2VlbSBsaWtlIGdvb2QganVtcGluZy1vZmYgcG9pbnRzLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZXhhbWluZSBjbG9zZWx5LCB0aGV5IHByb2JhYmx5IGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoZXNlIGFzIHN0YXJ0aW5nIHBvaW50cyB0byB3b3JrIGZyb20uIExldCdzIHNlZSBpZiB0aGUgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBnZW5lcmFsaXplZC5cblxuTm93LCBsZXQncyBhbHNvIGhhdmUgYSBsb29rIGF0IHRoZSBgX19uZl9jb25uY291bnRfYWRkYCBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MDguOTM2Mjg3MTAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTkyOTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25mX2Nvbm5jb3VudF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xMzA9c3RhdGljIGJvb2wgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MTY3OnN0YXRpYyBpbnQgX19uZl9jb25uY291bnRfYWRkKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTE2OC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0yNzY9aW50IG5mX2Nvbm5jb3VudF9hZGRfc2tiKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjg0LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlzdC1cXHUwMDNlbGlzdF9sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjI4NTpcXHRyZXQgPSBfX25mX2Nvbm5jb3VudF9hZGQobmV0LCBza2IsIGwzbnVtLCBsaXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTI4Ni1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlzdC1cXHUwMDNlbGlzdF9sb2NrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NTMxPWNvdW50X3RyZWUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy01ODAtXFx0Lyogc2FtZSBzb3VyY2UgbmV0d29yayAtXFx1MDAzZSBiZSBjb3VudGVkISAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NTgxOlxcdHJldCA9IF9fbmZfY29ubmNvdW50X2FkZChuZXQsIHNrYiwgbDNudW0sIFxcdTAwMjZyYmNvbm4tXFx1MDAzZWxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNTgyLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyYmNvbm4tXFx1MDAzZWxpc3QubGlzdF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MDkuMDAyMjIyMDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0MTk4Nzc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipNeSBMaW5lIG9mIElucXVpcnk6IE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluLiBGb2N1c2luZyBvbiBgX19uZl9jb25uY291bnRfYWRkYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBtZWNoYW5pc21zIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayDigJMgYSBjcml0aWNhbCBhcmVhIGZvciBhbmFseXppbmcgY29ubmVjdGlvbiBzdGF0ZSBhbmQgcGVyZm9ybWFuY2UuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHJlbGF0aW9uIHRoYXQgaXQgaGFzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIE5leHQgdXAsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgX19uZl9jdF9leHBlY3RfY2hlY2tgLiBJJ20gY3VyaW91cyBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgc29tZWhvdy4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gZXhwZWN0YXRpb24gbWFuYWdlbWVudCwgcGVyaGFwcyBkZWFsaW5nIHdpdGggcmVsYXRlZCBjb25uZWN0aW9ucyBvciBjb25uZWN0aW9uIHRyYWNraW5nIG9mIHByb3RvY29scyB0aGF0IHJlcXVpcmUgbXVsdGlwbGUgc3RyZWFtcyBvciBpbnRlcmFjdGlvbnMuIEV4YW1pbmluZyBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIHRyYWNraW5nIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IHJldmVhbCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDczOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjE0LjQ0NDIxMzA5NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2ODUwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZl9jdF9leHBlY3RfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9NDM4PXN0YXRpYyB2b2lkIGV2aWN0X29sZGVzdF9leHBlY3Qoc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy00NTktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NDYwOnN0YXRpYyBpbmxpbmUgaW50IF9fbmZfY3RfZXhwZWN0X2NoZWNrKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNDYxLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTUxOT1pbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy01MzEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NTMyOlxcdHJldCA9IF9fbmZfY3RfZXhwZWN0X2NoZWNrKGV4cGVjdCwgbWFzdGVyX2hlbHAsIGZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy01MzMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjE0LjUwNDkwNDYwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ5ODYyOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgTGluZSBvZiBJbnF1aXJ5OiBFeHBlY3RhdGlvbiBDaGVja3MgYW5kIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVycyoqXG5cblJpZ2h0LCBzbyBJIHNlZSBhIHByb21pc2luZyBsZWFkIHdpdGggYF9fbmZfY3RfZXhwZWN0X2NoZWNrYC4gVGhhdCdzIGEgc29saWQgZnVuY3Rpb24gdG8ga2VlcCBpbiBtaW5kLCBhIGxpa2VseSBrZXkgcGllY2UgaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHV6emxlLiBJdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5CdXQgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBXaGF0J3MgdGhlIHdpZGVyIGNvbnRleHQ/IEdpdmVuIHRoYXQgZXhwZWN0YXRpb25zIGFyZSBhIHBpZWNlIG9mIHRoZSBsYXJnZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCBob3cgaGVscGVycyBhcmUgcmVnaXN0ZXJlZC4gU28sIGxldCdzIGFsc28gZGVsdmUgaW50byBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBuZXh0IHN0ZXAsIGFzIGl0IGxpa2VseSBkZWZpbmVzIHRoZSBtZWNoYW5pc21zIGZvciBzZXR0aW5nIHVwIGFuZCBlbmFibGluZyB0aGVzZSBoZWxwZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2Ygd2hlcmUgZXhwZWN0YXRpb25zIGZpdCBpbiwgYW5kIGhvdyB0byBwb3RlbnRpYWxseSBpbmZsdWVuY2Ugb3Igd29yayB3aXRoIHRoZW0uIE15IGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjE3Ljg1NDc3MDcwMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4NDg5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTM2Mj1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfbG9nKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MzY0OmludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTM2NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQxNTpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQxNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz00MTc9aW50IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDI5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQzMDpcXHRlcnIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIobmV3X2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDMxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTE5PWludCBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTM1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjUzNjpcXHRcXHRlcnIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIobmV3X2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTM3LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTIyMD1uZm5sX2N0aGVscGVyX2NyZWF0ZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjgxOlxcdHJldCA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihoZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjgyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjoxNy45Mjk2MzYyNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM0MzE3OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGlzIGEgcmVhbGx5IHNvbGlkIHN0YXJ0aW5nIHBvaW50IGhlcmUuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGtleSB0byBob29raW5nIHVwIG5ldyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIHVzZWQgaXMgZGVmaW5pdGVseSBjcnVjaWFsLlxuXG5Gcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgIG5leHQuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgdXNlcnNwYWNlIHdvdWxkIGxpa2VseSB1c2UgdG8gbW9kaWZ5IG9yIHJlZ2lzdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc28gSSBiZXQgdGhhdCdzIHdoZXJlIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyB1bHRpbWF0ZWx5IGdldHMgaW5pdGlhdGVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIHdvcmsgaW4gdGFuZGVtLiBMZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgcmVnaXN0cmF0aW9uIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE2MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjIxLjA2Mzk1NzIzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYxMjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdG5ldGxpbmtfY2hhbmdlX2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTkwND1jdG5ldGxpbmtfc2V0dXBfbmF0KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5MjUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE5MjY6c3RhdGljIGludCBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5MjctXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTIxNjI9Y3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTIxNzEtXFx0aWYgKGNkYVtDVEFfSEVMUF0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjE3MjpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihjdCwgY2RhKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjE3My1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yNzkzPWN0bmV0bGlua19nbHVlX3BhcnNlX2N0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjgwNy1cXHRpZiAoY2RhW0NUQV9IRUxQXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODA4OlxcdFxcdGVyciA9IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKGN0LCBjZGEpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODA5LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjoyMS4xMzQ1NzU5MThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MjM3MjUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBjdG5ldGxpbmtgIEZvY3VzKipcblxuT2theSwgc28gYGN0bmV0bGlua19jaGFuZ2VfaGVscGVyYCBzZWVtcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIGZvY3VzIGluaXRpYWxseS4gTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mLi4uIHdoYXRldmVyIGl0IGlzIGBjdG5ldGxpbmtgIGlzIG1hbmFnaW5nLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCwgSSB3YW50IHRvIHBpdm90IGFuZCBleHBsb3JlIHdoZXJlIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gaXMgZG9uZSwgd2hpY2ggaXMgd2h5IEkgd2FudCB0byBjaGVjayBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGZ1bmN0aW9uIGNhbGxzIGFuZCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgc2VlbXMgbGlrZSBpdCB3aWxsIGJlIGEgZ29vZCBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIGZvbGxvdyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjIzLjkwNjk1MjE0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzMDY4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2FsbG9jX2V4cGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYzMD1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyNjMxOmN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjYzMi1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmFzc2lnbl9oZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mjg1Nj1jdG5ldGxpbmtfZ2x1ZV9hdHRhY2hfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODg4OlxcdGV4cCA9IGN0bmV0bGlua19hbGxvY19leHBlY3QoKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqKWNkYSwgY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI4ODktXFx0XFx0XFx0XFx0ICAgICBhc3NpZ25faGVscGVyLCBcXHUwMDI2dHVwbGUsIFxcdTAwMjZtYXNrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNTE5PXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM1MjA6Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzUyMS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmFzc2lnbl9oZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzYwMD1jdG5ldGxpbmtfY3JlYXRlX2V4cGVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYzMS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM2MzI6XFx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjZGEsIGN0LCBOVUxMLCBcXHUwMDI2dHVwbGUsIFxcdTAwMjZtYXNrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYzMy1cXHRpZiAoSVNfRVJSKGV4cCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MjMuOTc2MjY4MjY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDQxNzgyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhpcyBrZXJuZWwgbmV0bGluayBjb2RlLiBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAg4oCTIHRoYXQgZmVlbHMgbGlrZSBhIGdvb2QsIGZvY3VzZWQgc3BvdCB0byByZWFsbHkgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZXhwZWN0YXRpb24gbWFuYWdlbWVudC4gVGhhdCBmdW5jdGlvbiBjYWxsIHNlZW1zIGxpa2UgYSBrZXkgcGllY2UuXG5cblJpZ2h0LCBzbyB3aGVyZSdzIHRoZSByZWdpc3RyYXRpb24/IE5vdywgbGV0J3Mgc2VlLCB0aGF0IGBuZl9uYXRfcmVnaXN0ZXJfZm5gIGNhbGwuLi4gbGV0J3MgY2hlY2sgdGhhdCByZWdpc3RyYXRpb24gZnVuY3Rpb24uLi4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgcGF0aCBmcm9tIHRoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIHdpdGggdGhpcyBuZXRsaW5rIGFsbG9jYXRpb24gcGllY2UuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBzZWUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gTkFUIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nLiBIb3BlZnVsbHkgdGhpcyB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MjguMTgwNDQ5NDA0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI3NDE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9uYXRfcmVnaXN0ZXJfZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNjk9c3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gZm9sbG93X21hc3Rlcl9uYXQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE3My1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTE3NDppbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xMTc1LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9yaWdfbmF0X29wcywgdW5zaWduZWQgaW50IG9wc19jb3VudClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM9Nzk3PWludCBuZl9uYXRfaXB2NF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNzk4LXtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjc5OTpcXHRyZXR1cm4gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgb3BzLVxcdTAwM2VwZiwgb3BzLCBuZl9uYXRfaXB2NF9vcHMsXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy04MDAtXFx0XFx0XFx0XFx0ICBBUlJBWV9TSVpFKG5mX25hdF9pcHY0X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYz0xMDU4PWludCBuZl9uYXRfaXB2Nl9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA1OS17XFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYzoxMDYwOlxcdHJldHVybiBuZl9uYXRfcmVnaXN0ZXJfZm4obmV0LCBvcHMtXFx1MDAzZXBmLCBvcHMsIG5mX25hdF9pcHY2X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTEwNjEtXFx0XFx0XFx0XFx0ICBBUlJBWV9TSVpFKG5mX25hdF9pcHY2X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYz0xMDczPWludCBuZl9uYXRfaW5ldF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy0xMDc5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM6MTA4MDpcXHRyZXQgPSBuZl9uYXRfcmVnaXN0ZXJfZm4obmV0LCBORlBST1RPX0lQVjYsIG9wcywgbmZfbmF0X2lwdjZfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA4MS1cXHRcXHRcXHRcXHQgQVJSQVlfU0laRShuZl9uYXRfaXB2Nl9vcHMpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA4NC1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjEwODU6XFx0cmV0ID0gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgTkZQUk9UT19JUFY0LCBvcHMsIG5mX25hdF9pcHY0X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTEwODYtXFx0XFx0XFx0XFx0IEFSUkFZX1NJWkUobmZfbmF0X2lwdjRfb3BzKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjI4LjI0OTczMDg1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE4ODg3NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIE5ldHdvcmsgRnVuY3Rpb24gUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYG5mX25hdF9yZWdpc3Rlcl9mbmAgc2VlbXMgbGlrZSBhIHByZXR0eSBpbXBvcnRhbnQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHRvIHplcm8gaW4gb24uIEl0J3Mgb2Z0ZW4gdGhlIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gKE5BVCkgbW9kdWxlcyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCByaWdodD8gQW5kIHdoZW4gSSB0aGluayBhYm91dCB0aGF0LCBJ4oCZbSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgZXhwZWN0YXRpb24gc2V0dXAsIHdoaWNoIHdpbGwgcHJvYmFibHkgYmUgaGFuZGxlZCBpbiB0aGUgTkFUIGhlbHBlciB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgTkFUIENvbm5lY3Rpb24gVHJhY2tpbmcgZW50cnksIHNvIGxldCdzIGRpZyBpbnRvIGBuZl9jdF9leHBlY3RfaW5pdGAuIFRoYXQnbGwgbGlrZWx5IHNob3cgaG93IHRoZSBzeXN0ZW0gcHJlcHMgaXRzZWxmIHRvIGhhbmRsZSBleHBlY3RlZCBjb25uZWN0aW9ucyByZWxhdGVkIHRvIHRoZSBOQVQgcnVsZXMuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgTkFUJ2QgY29ubmVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjozMS4zNjg2Mjk0MjNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDkxNTkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF9leHBlY3RfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jPTIxMD12b2lkIGlwX3ZzX25mY3RfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYy0yMjItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYzoyMjM6XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtMjI0LVxcdFxcdFxcdGZyb21fcnMgPyBcXHUwMDI2Y3AtXFx1MDAzZWRhZGRyIDogXFx1MDAyNmNwLVxcdTAwM2VjYWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jPTgzPXN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE0Ni1cXHRcXHR0dXBsZSA9IFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTQ3OlxcdFxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMTQ4LVxcdFxcdFxcdFxcdCAgbmZfY3RfbDNudW0oY3QpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9MzE4PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9hbGxvYyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zMjMtICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MzI0OnZvaWQgbmZfY3RfZXhwZWN0X2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdW5zaWduZWQgaW50IGNsYXNzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTMyNS1cXHRcXHQgICAgICAgdV9pbnQ4X3QgZmFtaWx5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzk1LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzozOTY6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2luaXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTM5Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jPTM2Nj1zdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jLTUxNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYzo1MTU6XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgY21kLmwzbnVtLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jLTUxNi1cXHRcXHRcXHQgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgZGFkZHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0yMDk9c3RhdGljIGludCBleHBlY3RfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMjM2LVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoyMzc6XFx0bmZfY3RfZXhwZWN0X2luaXQocnRwX2V4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yMzgtXFx0XFx0XFx0ICBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yNDYtXFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjI0NzpcXHRuZl9jdF9leHBlY3RfaW5pdChydGNwX2V4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yNDgtXFx0XFx0XFx0ICBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0yODM9c3RhdGljIGludCBleHBlY3RfdDEyMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzA1LVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzozMDY6XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTMwNy1cXHRcXHRcXHQgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTYxOD1zdGF0aWMgaW50IGV4cGVjdF9oMjQ1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYzOC1cXHRcXHRyZXR1cm4gLTE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NjM5OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy02NDAtXFx0XFx0XFx0ICBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz03MzU9c3RhdGljIGludCBleHBlY3RfY2FsbGZvcndhcmRpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTc2Ni1cXHRcXHRyZXR1cm4gLTE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NzY3OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy03NjgtXFx0XFx0XFx0ICBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIFxcdTAwMjZhZGRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTE4Mz1zdGF0aWMgaW50IGV4cGVjdF9xOTMxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEyMTMtXFx0XFx0cmV0dXJuIC0xO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEyMTQ6XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEyMTUtXFx0XFx0XFx0ICBna3JvdXRlZF9vbmx5ID8gLyogb25seSBhY2NlcHQgY2FsbHMgZnJvbSBHSz8gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEyNjM9c3RhdGljIGludCBwcm9jZXNzX2djZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjkwLVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMjkxOlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjkyLVxcdFxcdFxcdCAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCBcXHUwMDI2YWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE0ODY9c3RhdGljIGludCBwcm9jZXNzX2FjZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTE4LVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNTE5OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTIwLVxcdFxcdFxcdCAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCBcXHUwMDI2YWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE1NTM9c3RhdGljIGludCBwcm9jZXNzX2xjZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTcyLVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNTczOlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTc0LVxcdFxcdFxcdCAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCBcXHUwMDI2YWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jPTEwMj1zdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yMzEtXFx0XFx0XFx0cG9ydCA9IGh0b25zKGRjY19wb3J0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYzoyMzI6XFx0XFx0XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yMzMtXFx0XFx0XFx0XFx0XFx0ICB0dXBsZS1cXHUwMDNlc3JjLmwzbnVtLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jPTEyOD1zdGF0aWMgaW50IGV4cF9ncmUoc3RydWN0IG5mX2Nvbm4gKmN0LCBfX2JlMTYgY2FsbGlkLCBfX2JlMTYgcGVlcl9jYWxsaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtMTQ0LVxcdGRpciA9IElQX0NUX0RJUl9PUklHSU5BTDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM6MTQ1OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cF9vcmlnLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtMTQ2LVxcdFxcdFxcdCAgbmZfY3RfbDNudW0oY3QpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jLTE1My1cXHRkaXIgPSBJUF9DVF9ESVJfUkVQTFk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jOjE1NDpcXHRuZl9jdF9leHBlY3RfaW5pdChleHBfcmVwbHksIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy0xNTUtXFx0XFx0XFx0ICBuZl9jdF9sM251bShjdCksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9NTg9c3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMtMTU0LVxcdHR1cGxlID0gXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM6MTU1OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMtMTU2LVxcdFxcdFxcdCAgXFx1MDAyNnR1cGxlLVxcdTAwM2VzcmMudTMsIFxcdTAwMjZ0dXBsZS1cXHUwMDNlZHN0LnUzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM9OTI5PXN0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA0OC1cXHRcXHRnb3RvIGVycjE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTA0OTpcXHRuZl9jdF9leHBlY3RfaW5pdChydHBfZXhwLCBjbGFzcywgbmZfY3RfbDNudW0oY3QpLCBzYWRkciwgZGFkZHIsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA1MC1cXHRcXHRcXHQgIElQUFJPVE9fVURQLCBOVUxMLCBcXHUwMDI2cnRwX3BvcnQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA1NC1cXHRcXHRnb3RvIGVycjI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTA1NTpcXHRuZl9jdF9leHBlY3RfaW5pdChydGNwX2V4cCwgY2xhc3MsIG5mX2N0X2wzbnVtKGN0KSwgc2FkZHIsIGRhZGRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTEwNTYtXFx0XFx0XFx0ICBJUFBST1RPX1VEUCwgTlVMTCwgXFx1MDAyNnJ0Y3BfcG9ydCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYz0xMzI2PXN0YXRpYyBpbnQgcHJvY2Vzc19yZWdpc3Rlcl9yZXF1ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTQxMS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYzoxNDEyOlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgU0lQX0VYUEVDVF9TSUdOQUxMSU5HLCBuZl9jdF9sM251bShjdCksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTQxMy1cXHRcXHRcXHQgIHNhZGRyLCBcXHUwMDI2ZGFkZHIsIHByb3RvLCBOVUxMLCBcXHUwMDI2cG9ydCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmM9Mzg9c3RhdGljIGludCB0ZnRwX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy02Ny1cXHRcXHR0dXBsZSA9IFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jOjY4OlxcdFxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jLTY5LVxcdFxcdFxcdFxcdCAgbmZfY3RfbDNudW0oY3QpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzAwPXN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMzOC1cXHR9XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMzM5OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIGwzbnVtLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM0MC1cXHRcXHQgICAgICAgICAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjozMS41NDk1NTM4NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDIwNTg2NDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBSZWFjaGFiaWxpdHkgYW5kIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24uIGBuZl9jdF9leHBlY3RfaW5pdGAgaXMgY2FsbGVkIGFsbCBvdmVyIHRoZSBwbGFjZSwgYnV0IHRoZSByZWFsIG1lYXQgaXMgaW4gYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIHNpbmNlIHRoYXQncyB0aGUgY2FsbGVyIHRoYXQgZ290IHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGEgbGlzdCBvZiBzeW1ib2xzIEkgbmVlZCB0byBjaGVjayBmb3IgcmVhY2hhYmlsaXR5OiBgX19uZl9jb25uY291bnRfYWRkYCwgYF9fbmZfY3RfZXhwZWN0X2NoZWNrYCwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmAsIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCwgYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2AsIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWAsIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X3N5bnByb3h5X2V2YWxfdjRgLCBhbmQgYG5mdF9zeW5wcm94eV9ldmFsX3Y2YC5cblxuQWxyaWdodCwgZmlyc3QgdXAsIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLiAgWWVwLCBpdCdzIGNhbGxlZCBieSBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AuICBHb29kLCB0aGF0J3MgcmVhY2hhYmxlLlxuXG5OZXh0LCBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgLiBMb29rcyBsaWtlIGl0J3MgdXNlZCBpbiBgbmZ0X3RhcmdldF9zZWxlY3Rfb3BzYCB3aGVuIHRoZSBgZmFtaWx5YCBpcyBgTkZQUk9UT19CUklER0VgLiBQZXJmZWN0LlxuXG5Ob3csIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YC4gIFllcCwgdGhhdCdzIHVzZWQgaW4gYG5mdF9jdF9leHBlY3Rfb2JqX29wc2AuICBNYWtlcyBzZW5zZS5cblxuSG93IGFib3V0IGBuZnRfc3lucHJveHlfZXZhbF92NGA/ICBJdCdzIGNhbGxlZCBieSBgbmZ0X3N5bnByb3h5X2RvX2V2YWxgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgbmZ0X3N5bnByb3h5X2V2YWxgLiAgR290IGl0LlxuXG5gX19uZl9jb25uY291bnRfYWRkYD8gIFJlYWNoYWJsZSAtIGNhbGxlZCBieSBgbmZfY29ubmNvdW50X2FkZF9za2JgIGFuZCBgY291bnRfdHJlZWAuXG5cbmBfX25mX2N0X2V4cGVjdF9jaGVja2A/ICBZZXMsIGNhbGxlZCBieSBgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0YC5cblxuYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmA/ICBBbHNvIHJlYWNoYWJsZSwgY2FsbGVkIGJ5IGBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyYCBhbmQgYG5mbmxfY3RoZWxwZXJfY3JlYXRlYC5cblxuTW92aW5nIG9uIHRvIGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmAuIEl0J3MgY2FsbGVkIGJ5IGBjdG5ldGxpbmtfY2hhbmdlX2Nvbm50cmFja2AgYW5kIGBjdG5ldGxpbmtfZ2x1ZV9wYXJzZV9jdGAuIFRoYXQncyBnb29kLlxuXG5BbmQgbGFzdGx5LCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAuIFRoYXQncyBjYWxsZWQgYnkgYGN0bmV0bGlua19nbHVlX2F0dGFjaF9leHBlY3RgIGFuZCBgY3RuZXRsaW5rX2NyZWF0ZV9leHBlY3RgLiBPa2F5LCBhbGwgdGhlIHN5bWJvbHMgYXJlIHJlYWNoYWJsZSFcblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gSSd2ZSBnb3QgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktgLCBgTkZfRkxPV19UQUJMRWAsIGBORlRfQ09NUEFUYCwgYE5GVF9DVGAsIGFuZCBgTkZUX1NZTlBST1hZYC5cblxuSnVzdCBtYWtpbmcgc3VyZSwgZm9yIGBORl9DT05OVFJBQ0tgLi4uIGFtIEkgbWlzc2luZyBhbnl0aGluZz8gTm8sIGp1c3QgYE5GX0NPTk5UUkFDS2AgaXMgc3VmZmljaWVudC5cblxuT2theSwgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLiBgTkZUX0NPTVBBVGAgZGVwZW5kcyBvbiBgTkVURklMVEVSX1hUQUJMRVNgLiBNYWtlcyBzZW5zZS4gYE5GVF9DVGAgbmVlZHMgYE5GX0NPTk5UUkFDS2AuICBBbmQgYE5GVF9TWU5QUk9YWWAgbmVlZHMgYm90aCBgTkZfQ09OTlRSQUNLYCAqYW5kKiBgTkVURklMVEVSX1NZTlBST1hZYC4gUmlnaHQsIEknbGwgYWRkIGBORVRGSUxURVJfU1lOUFJPWFlgIHRvIHRoZSBsaXN0LiBUaGF0J3MgYWxsIEkgbmVlZCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM1NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0Mjo0MS43NTU0MTk5MDVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjcwODY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRGSUxURVJfU1lOUFJPWFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ0Nz1jb25maWcgTkZfTkFUX09WU1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDUwOmNvbmZpZyBORVRGSUxURVJfU1lOUFJPWFlcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDUxLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTEtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY1MjpcXHRzZWxlY3QgTkVURklMVEVSX1NZTlBST1hZXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1My1cXHRzZWxlY3QgU1lOX0NPT0tJRVNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NzY9b2JqLSQoQ09ORklHX05GX05BVF9URlRQKSArPSBuZl9uYXRfdGZ0cC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTc4LSMgU1lOUFJPWFlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpICs9IG5mX3N5bnByb3h5X2NvcmUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYz0zMD1zdGF0aWMgY29uc3QgdTggbmZfY3RfZXh0X3R5cGVfbGVuW05GX0NUX0VYVF9OVU1dID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtNDgtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM6NDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy01MC1cXHRbTkZfQ1RfRVhUX1NZTlBST1hZXSA9IHNpemVvZihzdHJ1Y3QgbmZfY29ubl9zeW5wcm94eSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYz01Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludCB0b3RhbF9leHRlbnNpb25fc2l6ZSh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODAtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM6ODE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy04Mi1cXHRcXHQrIHNpemVvZihzdHJ1Y3QgbmZfY29ubl9zeW5wcm94eSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6NDEuOTMyMTY3NjYxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4OTk4NTE3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTmV0ZmlsdGVyKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTkVURklMVEVSX1NZTlBST1hZYCBpcyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBORlRfU1lOUFJPWFlgLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5nc+KAlG5vIG5lZWQgdG8gZXhwbGljaXRseSB0YXJnZXQgaXQuIE5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zLiBUaGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyBjcml0aWNhbCBuZXRmaWx0ZXIgY29tcG9uZW50czogY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBpbnRlZ3JhdGlvbi4gVGhpcyB0b3VjaGVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgY29ubmVjdGlvbiBjb3VudGluZywgZXhwZWN0YXRpb24gY2hlY2tzLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSSdtIGFsc28gc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gYnJpZGdlIHRhcmdldCB2YWxpZGF0aW9uIHdpdGhpbiBgbmZ0X2NvbXBhdGAgYW5kIHNvbWUgYWRqdXN0bWVudHMgdG8gdGltZW91dCBoYW5kbGluZyB3aXRoaW4gYG5mdF9jdGAuIEFsbCBvZiB0aGVzZSBjaGFuZ2VzIGhhdmUgYSBjbGVhciBwYXRoIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBvciBieSBwcm9jZXNzaW5nIGFjdHVhbCBuZXR3b3JrIHBhY2tldHMuIFRoaXMgc2NyZWFtcyBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoZSBzeW1ib2wgbGlzdCBmb3IgdGhlIGZ1enppbmcuIEkgZG9uJ3Qgd2FudCB0byBjaG9vc2UgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBob3QgcGF0aHMuIEkndmUgZ290IGEgbXVjaCBtb3JlIGZvY3VzZWQgbGlzdCBub3c6XG5cbiogICBgX19uZl9jb25uY291bnRfYWRkYFxuKiAgIGBfX25mX2N0X2V4cGVjdF9jaGVja2BcbiogICBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYFxuKiAgIGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmBcbiogICBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGBcbiogICBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYFxuKiAgIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWBcbiogICBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGBcbiogICBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGBcbiogICBgbmZ0X3N5bnByb3h5X2V2YWxfdjRgXG4qICAgYG5mdF9zeW5wcm94eV9ldmFsX3Y2YFxuXG5UaGVzZSBhcmUgaGlnaGx5IHJlbGV2YW50IHRvIHRoZSBpbnRyb2R1Y2VkIGZlYXR1cmVzIGFuZCBub3Qgb3Zlcmx5IGdlbmVyaWMuIEkgdGhpbmsgdGhpcyBsaXN0IGlzIHNvbGlkIGFuZCBmb2N1c2VkIGZvciBhY2hpZXZpbmcgdGhlIGZ1enppbmcgb2JqZWN0aXZlLlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDk4LCJPdXRwdXRUb2tlbnMiOjI5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0Mjo0OS44MzIwMjM0MDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTgxNDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfQ09NUEFUXCIsXG4gICAgXCJORlRfQ1RcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbmZfY29ubmNvdW50X2FkZFwiLFxuICAgIFwiX19uZl9jdF9leHBlY3RfY2hlY2tcIixcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlclwiLFxuICAgIFwiY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19leHBlY3RcIixcbiAgICBcIm5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b1wiLFxuICAgIFwibmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y0XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbmV0ZmlsdGVyLCBpbmNsdWRpbmcgY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBjb21wYXRpYmlsaXR5LiBJdCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvbm5lY3Rpb24gY291bnRpbmcsIGV4cGVjdGF0aW9uIGNoZWNraW5nLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSXQgYWxzbyBhZGRzIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGJyaWRnZSB0YXJnZXRzIGluIG5mdF9jb21wYXQgYW5kIGZpeGVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gbmZ0X2N0LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG9yIGJ5IHByb2Nlc3NpbmcgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9DT01QQVRcIixcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkZUX1NZTlBST1hZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jb25uY291bnRfYWRkXCIsXG4gICAgXCJfX25mX2N0X2V4cGVjdF9jaGVja1wiLFxuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJjdG5ldGxpbmtfY2hhbmdlX2hlbHBlclwiLFxuICAgIFwiY3RuZXRsaW5rX2FsbG9jX2V4cGVjdFwiLFxuICAgIFwibmZfZmxvd19pcDRfdHVubmVsX3Byb3RvXCIsXG4gICAgXCJuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZVwiLFxuICAgIFwibmZ0X2N0X2V4cGVjdF9vYmpfaW5pdFwiLFxuICAgIFwibmZ0X2N0X2V4cGVjdF9vYmpfZXZhbFwiLFxuICAgIFwibmZ0X3N5bnByb3h5X2V2YWxfdjRcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBuZXRmaWx0ZXIsIGluY2x1ZGluZyBjb25uZWN0aW9uIHRyYWNraW5nLCBmbG93IHRhYmxlcywgYW5kIG5mdGFibGVzIGNvbXBhdGliaWxpdHkuIEl0IG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY29ubmVjdGlvbiBjb3VudGluZywgZXhwZWN0YXRpb24gY2hlY2tpbmcsIGhlbHBlciByZWdpc3RyYXRpb24sIGFuZCBuZXRsaW5rIGhhbmRsaW5nLiBJdCBhbHNvIGFkZHMgYSBuZXcgdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYnJpZGdlIHRhcmdldHMgaW4gbmZ0X2NvbXBhdCBhbmQgZml4ZXMgdGltZW91dCBoYW5kbGluZyBpbiBuZnRfY3QuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0ZmlsdGVyIGZ1bmN0aW9uYWxpdHkgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgb3IgYnkgcHJvY2Vzc2luZyBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdwp66[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 22:32:43 +0000 UTC FinishedAt: 2026-06-23 22:42:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a986fde914d88af47eb78fd29c5d1af7952c3500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_CONNCOUNT", "NF_CONNTRACK", "NF_CT_NETLINK", "NF_FLOW_TABLE", "NFT_COMPAT", "NFT_CT", "NFT_SYNPROXY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a986fde914d88af47eb78fd29c5d1af7952c3500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_CONNCOUNT", "NF_CONNTRACK", "NF_CT_NETLINK", "NF_FLOW_TABLE", "NFT_COMPAT", "NFT_CT", "NFT_SYNPROXY" ], "series_id": "f3cd7cfa-3541-4291-b98a-2fd0edf60d44" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__nf_conncount_add", "__nf_ct_expect_check", "__nf_conntrack_helper_register", "ctnetlink_change_helper", "ctnetlink_alloc_expect", "nf_flow_ip4_tunnel_proto", "nft_target_bridge_validate", "nft_ct_expect_obj_init", "nft_ct_expect_obj_eval", "nft_synproxy_eval_v4", "nft_synproxy_eval_v6" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfQ09NUEFUJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORlRfU1lOUFJPWFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm5jb3VudF9hZGQmIzM0OywKICAgICYjMzQ7X19uZl9jdF9leHBlY3RfY2hlY2smIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19jaGFuZ2VfaGVscGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAgICYjMzQ7bmZfZmxvd19pcDRfdHVubmVsX3Byb3RvJiMzNDssCiAgICAmIzM0O25mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG5ldGZpbHRlciwgaW5jbHVkaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZsb3cgdGFibGVzLCBhbmQgbmZ0YWJsZXMgY29tcGF0aWJpbGl0eS4gSXQgbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb25uZWN0aW9uIGNvdW50aW5nLCBleHBlY3RhdGlvbiBjaGVja2luZywgaGVscGVyIHJlZ2lzdHJhdGlvbiwgYW5kIG5ldGxpbmsgaGFuZGxpbmcuIEl0IGFsc28gYWRkcyBhIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBicmlkZ2UgdGFyZ2V0cyBpbiBuZnRfY29tcGF0IGFuZCBmaXhlcyB0aW1lb3V0IGhhbmRsaW5nIGluIG5mdF9jdC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBvciBieSBwcm9jZXNzaW5nIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNTIxZGQxOGYxMmI2MmFiYTI2ZjA4NmEzMWU0OTAyMDMxZGI5OTYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMjI6NDE6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcbmluZGV4IDIwZDcwZGRkYmU1MDk4Li4yNTA2MmY0YTBkZDVmMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmhcbkBAIC0xOCw3ICYjNDM7MTgsNyBAQFxuICAqIEBtYXRjaDpcdHRoZSBtYXRjaCBleHRlbnNpb25cbiAgKiBAdGFyZ2V0Olx0dGhlIHRhcmdldCBleHRlbnNpb25cbiAgKiBAbWF0Y2hpbmZvOlx0cGVyLW1hdGNoIGRhdGFcbi0gKiBAdGFyZ2V0aW5mbzpcdHBlci10YXJnZXQgZGF0YVxuJiM0MzsgKiBAdGFyZ2luZm86XHRwZXItdGFyZ2V0IGRhdGFcbiAgKiBAc3RhdGU6XHRwb2ludGVyIHRvIGhvb2sgc3RhdGUgdGhpcyBwYWNrZXQgY2FtZSBmcm9tXG4gICogQGZyYWdvZmY6XHRwYWNrZXQgaXMgYSBmcmFnbWVudCwgdGhpcyBpcyB0aGUgZGF0YSBvZmZzZXRcbiAgKiBAdGhvZmY6XHRwb3NpdGlvbiBvZiB0cmFuc3BvcnQgaGVhZGVyIHJlbGF0aXZlIHRvIHNrYi1cdTAwM2VkYXRhXG5AQCAtNzcsNyAmIzQzOzc3LDkgQEAgc3RhdGljIGlubGluZSB1X2ludDhfdCB4dF9mYW1pbHkoY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuICAqIEBtYXRjaDpcdHN0cnVjdCB4dF9tYXRjaCB0aHJvdWdoIHdoaWNoIHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWRcbiAgKiBAbWF0Y2hpbmZvOlx0cGVyLW1hdGNoIGRhdGFcbiAgKiBAaG9va19tYXNrOlx0dmlhIHdoaWNoIGhvb2tzIHRoZSBuZXcgcnVsZSBpcyByZWFjaGFibGVcbi0gKiBPdGhlciBmaWVsZHMgYXMgYWJvdmUuXG4mIzQzOyAqIEBmYW1pbHk6XHRhY3R1YWwgTkZQUk9UT18qIHRocm91Z2ggd2hpY2ggdGhlIGZ1bmN0aW9uIGlzIGludm9rZWRcbiYjNDM7ICpcdFx0KGhlbHBmdWwgd2hlbiBtYXRjaC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19VTlNQRUMpXG4mIzQzOyAqIEBuZnRfY29tcGF0Olx0cnVubmluZyBmcm9tIHRoZSBuZnQgY29tcGF0IGxheWVyIGlmIHRydWVcbiAgKi9cbiBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0ge1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuQEAgLTkxLDggJiM0Mzs5MywxMyBAQCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0ge1xuIH07XG4gXG4gLyoqXG4tICogc3RydWN0IHh0X21kdG9yX3BhcmFtIC0gbWF0Y2ggZGVzdHJ1Y3RvciBwYXJhbWV0ZXJzXG4tICogRmllbGRzIGFzIGFib3ZlLlxuJiM0MzsgKiBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIC0gbWF0Y2ggZGVzdHJ1Y3RvciBwYXJhbWV0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIEBuZXQ6XHRuZXR3b3JrIG5hbWVzcGFjZSB0aHJvdWdoIHdoaWNoIHRoZSBjaGVjayB3YXMgaW52b2tlZFxuJiM0MzsgKiBAbWF0Y2g6XHRzdHJ1Y3QgeHRfbWF0Y2ggdGhyb3VnaCB3aGljaCB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkXG4mIzQzOyAqIEBtYXRjaGluZm86XHRwZXItbWF0Y2ggZGF0YVxuJiM0MzsgKiBAZmFtaWx5Olx0YWN0dWFsIE5GUFJPVE9fKiB0aHJvdWdoIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkXG4mIzQzOyAqXHRcdChoZWxwZnVsIHdoZW4gbWF0Y2gtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKVxuICAqL1xuIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuQEAgLTEwNSwxMCAmIzQzOzExMiwxNiBAQCBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIHtcbiAgKiBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gLSBwYXJhbWV0ZXJzIGZvciB0YXJnZXQgZXh0ZW5zaW9ucyYjMzk7XG4gICogY2hlY2tlbnRyeSBmdW5jdGlvbnNcbiAgKlxuJiM0MzsgKiBAbmV0Olx0bmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCB3aGljaCB0aGUgY2hlY2sgd2FzIGludm9rZWRcbiYjNDM7ICogQHRhYmxlOlx0dGFibGUgdGhlIHJ1bGUgaXMgdHJpZWQgdG8gYmUgaW5zZXJ0ZWQgaW50b1xuICAqIEBlbnRyeWluZm86XHR0aGUgZmFtaWx5LXNwZWNpZmljIHJ1bGUgZGF0YVxuICAqIFx0XHQoc3RydWN0IGlwdF9lbnRyeSwgaXA2dF9lbnRyeSwgYXJwdF9lbnRyeSwgZWJ0X2VudHJ5KVxuLSAqXG4tICogT3RoZXIgZmllbGRzIHNlZSBhYm92ZS5cbiYjNDM7ICogQHRhcmdldDpcdHRoZSB0YXJnZXQgZXh0ZW5zaW9uXG4mIzQzOyAqIEB0YXJnaW5mbzpcdHBlci10YXJnZXQgZGF0YVxuJiM0MzsgKiBAaG9va19tYXNrOlx0dmlhIHdoaWNoIGhvb2tzIHRoZSBuZXcgcnVsZSBpcyByZWFjaGFibGVcbiYjNDM7ICogQGZhbWlseTpcdGFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZFxuJiM0MzsgKlx0XHQoaGVscGZ1bCB3aGVuIG1hdGNoLVx1MDAzZWZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcbiYjNDM7ICogQG5mdF9jb21wYXQ6XHRydW5uaW5nIGZyb20gdGhlIG5mdCBjb21wYXQgbGF5ZXIgaWYgdHJ1ZVxuICAqL1xuIHN0cnVjdCB4dF90Z2Noa19wYXJhbSB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG5AQCAtMzM2LDkgJiM0MzszNDksOSBAQCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqeHRfYWxsb2NfdGFibGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSk7XG4gdm9pZCB4dF9mcmVlX3RhYmxlX2luZm8oc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm8pO1xuIFxuIC8qKlxuLSAqIHh0X3JlY3NlcSAtIHJlY3Vyc2l2ZSBzZXFjb3VudCBmb3IgbmV0ZmlsdGVyIHVzZVxuJiM0MzsgKiB2YXIgeHRfcmVjc2VxIC0gcmVjdXJzaXZlIHNlcWNvdW50IGZvciBuZXRmaWx0ZXIgdXNlXG4gICpcbi0gKiBQYWNrZXQgcHJvY2Vzc2luZyBjaGFuZ2VzIHRoZSBzZXFjb3VudCBvbmx5IGlmIG5vIHJlY3Vyc2lvbiBoYXBwZW5lZFxuJiM0MzsgKiBQYWNrZXQgcHJvY2Vzc2luZyBjaGFuZ2VzIHRoZSBzZXFjb3VudCBvbmx5IGlmIG5vIHJlY3Vyc2lvbiBoYXBwZW5lZC5cbiAgKiBnZXRfY291bnRlcnMoKSBjYW4gdXNlIHJlYWRfc2VxY291bnRfYmVnaW4oKS9yZWFkX3NlcWNvdW50X3JldHJ5KCksXG4gICogYmVjYXVzZSB3ZSB1c2UgdGhlIG5vcm1hbCBzZXFjb3VudCBjb252ZW50aW9uIDpcbiAgKiBMb3cgb3JkZXIgYml0IHNldCB0byAxIGlmIGEgd3JpdGVyIGlzIGFjdGl2ZS5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuaW5kZXggYmU0YTEyMGQ1NDllYjMuLmMwMjQzNDVjOWJkODYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaFxuQEAgLTI2LDYgJiM0MzsyNiw3IEBAIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0IHtcbiBcdHBvc3NpYmxlX25ldF90IG5ldDtcbiBcbiBcdC8qIFdlIGV4cGVjdCB0aGlzIHR1cGxlLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFzayAqL1xuJiM0MztcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyX3R1cGxlO1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5pbmRleCA4MTAyNTEwMWY4NmRhYS4uYzc2MWNkODE1OGIyNTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5AQCAtMTE0LDYgJiM0MzsxMTQsMTAgQEAgaW50IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICosIHVuc2lnbmVkIGludCxcbiB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiosXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCk7XG4gXG4mIzQzOyNkZWZpbmUgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKG5hbWUpIFxcXG4mIzQzO1x0cHJfd2FybihcJiMzNDtUaGUgJXMgY29ubnRyYWNrIGhlbHBlciBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwuXFxuXCYjMzQ7XHRcXFxuJiM0MztcdFx0XCYjMzQ7UGxlYXNlIGNvbnRhY3QgdGhlIG5ldGZpbHRlci1kZXZlbCBtYWlsaW5nIGxpc3QgaWYgeW91IHN0aWxsIG5lZWQgdGhpcy5cXG5cJiMzNDssIG5hbWUpXG4mIzQzO1xuIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKTtcbiBcbiBpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xuaW5kZXggNjY1ZjgwMDhjYzRiMjcuLjRjMDRjZDhkNDBhMjI5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWdcbkBAIC0yNTYsOCAmIzQzOzI1Niw3IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xuIFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbiBjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuLVx0dHJpc3RhdGUgXCYjMzQ7SVJDIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi1cdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4gXHRoZWxwXG4gXHQgIFRoZXJlIGlzIGEgY29tbW9ubHktdXNlZCBleHRlbnNpb24gdG8gSVJDIGNhbGxlZFxuIFx0ICBEaXJlY3QgQ2xpZW50LXRvLUNsaWVudCBQcm90b2NvbCAoRENDKS4gIFRoaXMgZW5hYmxlcyB1c2VycyB0byBzZW5kXG5AQCAtMjY3LDYgJiM0MzsyNjYsOCBAQCBjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuIFx0ICB1c2luZyBOQVQsIHRoaXMgZXh0ZW5zaW9uIHdpbGwgZW5hYmxlIHlvdSB0byBzZW5kIGZpbGVzIGFuZCBpbml0aWF0ZVxuIFx0ICBjaGF0cy4gIE5vdGUgdGhhdCB5b3UgZG8gTk9UIG5lZWQgdGhpcyBleHRlbnNpb24gdG8gZ2V0IGZpbGVzIG9yXG4gXHQgIGhhdmUgb3RoZXJzIGluaXRpYXRlIGNoYXRzLCBvciBldmVyeXRoaW5nIGVsc2UgaW4gSVJDLlxuJiM0MztcdCAgRENDIHRyYWNraW5nIGJlaGluZCBOQVQgcmVxdWlyZXMgcGxhaW50ZXh0ICh1bmVuY3J5cHRlZCkgSVJDLCBzb1xuJiM0MztcdCAgdGhpcyBoZWxwZXIgaXMgb2YgbGltaXRlZCB1c2UgdGhlc2UgZGF5cy5cbiBcbiBcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gXG5AQCAtMzA4LDE3ICYjNDM7MzA5LDE3IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxuIFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbiBjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbiBcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gXHRzZWxlY3QgTkZfQ1RfUFJPVE9fR1JFXG4gXHRoZWxwXG4gXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUFBUUCAoUG9pbnQgdG8gUG9pbnQgVHVubmVsbGluZ1xuIFx0ICBQcm90b2NvbCwgUkZDMjYzNykgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgTkFULlxuIFxuLVx0ICBJZiB5b3UgYXJlIHJ1bm5pbmcgUFBUUCBzZXNzaW9ucyBvdmVyIGEgc3RhdGVmdWwgZmlyZXdhbGwgb3IgTkFUXG4mIzQzO1x0ICBJZiB5b3UgYXJlIHN0aWxsIHJ1bm5pbmcgUFBUUCBzZXNzaW9ucyBvdmVyIGEgc3RhdGVmdWwgZmlyZXdhbGwgb3IgTkFUXG4gXHQgIGJveCwgeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuXG4gXG4tXHQgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkIHlldC5cbiYjNDM7XHQgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkLlxuIFx0ICBTcGVjaWZpY2FsbHkgdGhlc2UgbGltaXRhdGlvbnMgZXhpc3Q6XG4gXHQgICAgLSBCbGluZGx5IGFzc3VtZXMgdGhhdCBjb250cm9sIGNvbm5lY3Rpb25zIGFyZSBhbHdheXMgZXN0YWJsaXNoZWRcbiBcdCAgICAgIGluIFBOUy1cdTAwM2VQQUMgZGlyZWN0aW9uLiBUaGlzIGlzIGEgdmlvbGF0aW9uIG9mIFJGQzI2MzcuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbmluZGV4IGRkNjcwMDRhNWNjMDllLi45MTU4MjA2OWY2ZDJlZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcbkBAIC0xODMsMTcgJiM0MzsxODMsMTYgQEAgc3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGlmIChjdCBcdTAwMjZcdTAwMjYgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xuLVx0XHQvKiBsb2NhbCBjb25uZWN0aW9ucyBhcmUgY29uZmlybWVkIGluIHBvc3Ryb3V0aW5nIHNvIGNvbmZpcm1hdGlvblxuLVx0XHQgKiBtaWdodCBoYXZlIGhhcHBlbmVkIGJlZm9yZSBoaXR0aW5nIGNvbm5saW1pdFxuJiM0MztcdFx0LyogQ29ubmVjdGlvbiBpcyBjb25maXJtZWQgYnV0IG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBzZXR1cCBwaGFzZS5cbiYjNDM7XHRcdCAqIE9ubHkgc2tpcCB0aGUgdHJhY2tpbmcgaWYgaXQgaXMgZnVsbHkgYXNzdXJlZC4gVGhpcyBndWFyYW50ZWVzXG4mIzQzO1x0XHQgKiB0aGF0IHNldHVwIHBhY2tldHMgb3IgcmV0cmFuc21pc3Npb25zIGFyZSBwcm9wZXJseSBjb3VudGVkIGFuZFxuJiM0MztcdFx0ICogZGVkdXBsaWNhdGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHNrYi1cdTAwM2Vza2JfaWlmICE9IExPT1BCQUNLX0lGSU5ERVgpIHtcbiYjNDM7XHRcdGlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykpIHtcbiBcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdGdvdG8gb3V0X3B1dDtcbiBcdFx0fVxuIFxuLVx0XHQvKiB0aGlzIGlzIGxpa2VseSBhIGxvY2FsIGNvbm5lY3Rpb24sIHNraXAgb3B0aW1pemF0aW9uIHRvIGF2b2lkXG4tXHRcdCAqIGFkZGluZyBkdXBsaWNhdGVzIGZyb20gYSAmIzM5O3BhY2tldCB0cmFpbiYjMzk7XG4tXHRcdCAqL1xuIFx0XHRnb3RvIGNoZWNrX2Nvbm5lY3Rpb25zO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbmluZGV4IDQwMDExOWI2MzIwZTcyLi5iZjc4ODI4Yzc1NDlkNCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuQEAgLTYyLDYgJiM0Mzs2Miw3IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChleHAgPT0gTlVMTClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0ZXhwLVx1MDAzZW1hc3Rlcl90dXBsZVx0ICA9IGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuIFx0ZXhwLVx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XG4gXG4gXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cdTAwM2VoZWxwZXIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbmluZGV4IDQ5ZTE4ZWRhMDM3ZWYxLi4zODYzMGM1ZTAwNmYwOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuQEAgLTM1NSw2ICYjNDM7MzU1LDggQEAgdm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB1bnNpZ25lZCBpbnQgY2xhc3MsXG4gXHRleHAtXHUwMDNldHVwbGUuc3JjLmwzbnVtID0gZmFtaWx5O1xuIFx0ZXhwLVx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9IHByb3RvO1xuIFxuJiM0MztcdGV4cC1cdTAwM2VtYXN0ZXJfdHVwbGUgPSBjdC1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcbiYjNDM7XG4gXHRpZiAoc2FkZHIpIHtcbiBcdFx0bWVtY3B5KFx1MDAyNmV4cC1cdTAwM2V0dXBsZS5zcmMudTMsIHNhZGRyLCBsZW4pO1xuIFx0XHRpZiAoc2l6ZW9mKGV4cC1cdTAwM2V0dXBsZS5zcmMudTMpIFx1MDAzZSBsZW4pXG5AQCAtNDk0LDkgJiM0Mzs0OTYsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgX19uZl9jdF9leHBlY3RfY2hlY2soc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbiBcdFx0XHRcdFx0ICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpO1xuIFx0aWYgKGhlbHBlcikge1xuIFx0XHRwID0gXHUwMDI2aGVscGVyLVx1MDAzZWV4cGVjdF9wb2xpY3lbZXhwZWN0LVx1MDAzZWNsYXNzXTtcbi1cdFx0aWYgKHAtXHUwMDNlbWF4X2V4cGVjdGVkIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0aW5nW2V4cGVjdC1cdTAwM2VjbGFzc10gXHUwMDNlPSBwLVx1MDAzZW1heF9leHBlY3RlZClcbiYjNDM7XHRcdGlmIChtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0LVx1MDAzZWNsYXNzXSBcdTAwM2U9IHAtXHUwMDNlbWF4X2V4cGVjdGVkKVxuIFx0XHRcdGV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgcCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBkZWZhdWx0X2V4cF9wb2xpY3kgPSB7XG4mIzQzO1x0XHRcdC5tYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVCxcbiYjNDM7XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hc3Rlcl9oZWxwLVx1MDAzZWV4cGVjdGluZ1tleHBlY3QtXHUwMDNlY2xhc3NdIFx1MDAzZT0gZGVmYXVsdF9leHBfcG9saWN5Lm1heF9leHBlY3RlZClcbiYjNDM7XHRcdFx0ZXZpY3Rfb2xkZXN0X2V4cGVjdChtYXN0ZXJfaGVscCwgZXhwZWN0LCBcdTAwMjZkZWZhdWx0X2V4cF9wb2xpY3kpO1xuIFx0fVxuIFxuIFx0Y25ldCA9IG5mX2N0X3Blcm5ldChuZXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDhiOTQwMDFjMjQzMDY2Li41MDA1MDliMTc2NjNlZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTM3NCw4ICYjNDM7Mzc0LDEzIEBAIGludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIFx0aWYgKCFuZl9jdF9oZWxwZXJfaGFzaClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4tXHRpZiAobWUtXHUwMDNlZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gbWUtXHUwMDNlZXhwZWN0X2NsYXNzX21heDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbWUtXHUwMDNlZXhwZWN0X3BvbGljeVtpXS5tYXhfZXhwZWN0ZWQpXG4mIzQzO1x0XHRcdG1lLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1lLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkIFx1MDAzZSBORl9DVF9FWFBFQ1RfTUFYX0NOVClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmZfY3RfaGVscGVyX2hzaXplOyBpJiM0MzsmIzQzOykge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbmluZGV4IDBjMTE3Yjg0OTJlOTkyLi4xOTNhYjM0ZGI3OTVmOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuQEAgLTI2Miw2ICYjNDM7MjYyLDggQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2lyY19pbml0KHZvaWQpXG4ge1xuIFx0aW50IGksIHJldDtcbiBcbiYjNDM7XHRuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQoSEVMUEVSX05BTUUpO1xuJiM0MztcbiBcdGlmIChtYXhfZGNjX2NoYW5uZWxzIFx1MDAzYyAxKSB7XG4gXHRcdHByX2VycihcJiMzNDttYXhfZGNjX2NoYW5uZWxzIG11c3Qgbm90IGJlIHplcm9cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDRlNzhkMjQ4Mjk4OTVlLi40MjE3NzE1ZDQyZGMyNCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMTk1MywxOSAmIzQzOzE5NTMsNiBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGlmICghc3RyY21wKGhlbHBuYW1lLCBcJiMzNDtcJiMzNDspIFx1MDAyNlx1MDAyNiBoZWxwKSB7XG4tXHRcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVx1MDAzZWhlbHBlcik7XG4tXHRcdGlmIChoZWxwZXIpIHtcbi1cdFx0XHQvKiB3ZSBoYWQgYSBoZWxwZXIgYmVmb3JlIC4uLiAqL1xuLVx0XHRcdG5mX2N0X3JlbW92ZV9leHBlY3RhdGlvbnMoY3QpO1xuLVx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVscC1cdTAwM2VoZWxwZXIsIE5VTEwpO1xuLVx0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2aGVscGVyLVx1MDAzZWN0X3JlZmNudCkpXG4tXHRcdFx0XHRrZnJlZV9yY3UoaGVscGVyLCByY3UpO1xuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbiBcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXG4gXHRcdFx0XHRcdCAgICBuZl9jdF9wcm90b251bShjdCkpO1xuIFx0aWYgKGhlbHBlciA9PSBOVUxMKSB7XG5AQCAtMzAxNSw3ICYjNDM7MzAwMiw2IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApXG4ge1xuIFx0X19zMzIgdGltZW91dCA9IChfX3MzMikoUkVBRF9PTkNFKGV4cC1cdTAwM2V0aW1lb3V0KSAtIG5mY3RfdGltZV9zdGFtcCkgLyBIWjtcbi1cdHN0cnVjdCBuZl9jb25uICptYXN0ZXIgPSBleHAtXHUwMDNlbWFzdGVyO1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuIFx0c3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtcztcbkBAIC0zMDMwLDkgJiM0MzszMDE2LDcgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfbWFzayhza2IsIFx1MDAyNmV4cC1cdTAwM2V0dXBsZSwgXHUwMDI2ZXhwLVx1MDAzZW1hc2spIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi1cdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLFxuLVx0XHRcdFx0IFx1MDAyNm1hc3Rlci1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSxcbi1cdFx0XHRcdCBDVEFfRVhQRUNUX01BU1RFUikgXHUwMDNjIDApXG4mIzQzO1x0aWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsIFx1MDAyNmV4cC1cdTAwM2VtYXN0ZXJfdHVwbGUsIENUQV9FWFBFQ1RfTUFTVEVSKSBcdTAwM2MgMClcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcbkBAIC0zMDQ1LDkgJiM0MzszMDI5LDkgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgQ1RBX0VYUEVDVF9OQVRfRElSLCBodG9ubChleHAtXHUwMDNlZGlyKSkpXG4gXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRcdG5hdF90dXBsZS5zcmMubDNudW0gPSBuZl9jdF9sM251bShtYXN0ZXIpO1xuJiM0MztcdFx0bmF0X3R1cGxlLnNyYy5sM251bSA9IGV4cC1cdTAwM2VtYXN0ZXJfdHVwbGUuc3JjLmwzbnVtO1xuIFx0XHRuYXRfdHVwbGUuc3JjLnUzID0gZXhwLVx1MDAzZXNhdmVkX2FkZHI7XG4tXHRcdG5hdF90dXBsZS5kc3QucHJvdG9udW0gPSBuZl9jdF9wcm90b251bShtYXN0ZXIpO1xuJiM0MztcdFx0bmF0X3R1cGxlLmRzdC5wcm90b251bSA9IGV4cC1cdTAwM2VtYXN0ZXJfdHVwbGUuZHN0LnByb3RvbnVtO1xuIFx0XHRuYXRfdHVwbGUuc3JjLnUgPSBleHAtXHUwMDNlc2F2ZWRfcHJvdG87XG4gXG4gXHRcdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLCBcdTAwMjZuYXRfdHVwbGUsXG5AQCAtMzU4OSw2ICYjNDM7MzU3Myw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gI2VuZGlmXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoZXhwLVx1MDAzZWhlbHBlciwgaGVscGVyKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihleHAtXHUwMDNlYXNzaWduX2hlbHBlciwgYXNzaWduX2hlbHBlcik7XG4mIzQzO1x0ZXhwLVx1MDAzZW1hc3Rlcl90dXBsZSA9IGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuIFx0ZXhwLVx1MDAzZXR1cGxlID0gKnR1cGxlO1xuIFx0ZXhwLVx1MDAzZW1hc2suc3JjLnUzID0gbWFzay1cdTAwM2VzcmMudTM7XG4gXHRleHAtXHUwMDNlbWFzay5zcmMudS5hbGwgPSBtYXNrLVx1MDAzZXNyYy51LmFsbDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbmluZGV4IDc3NjUwNWE3OGU2NDU2Li44MGZjMTRjODdkZGM0YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG5AQCAtNTQ1LDYgJiM0Mzs1NDUsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpXG4gXG4gXHRwcHRwLmRlc3Ryb3kgPSBncmVfcHB0cF9kZXN0cm95X3NpYmxpbmdzO1xuIFxuJiM0MztcdG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChwcHRwLm5hbWUpO1xuJiM0MztcbiBcdHJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNnBwdHAsIFx1MDAyNnBwdHBfcHRyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggZTdhM2ZiMmIyZDk0NjYuLjI5ZTkzYWMxZTJlNDAwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtMzI2LDggJiM0MzszMjYsMTAgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgY3R4LVx1MDAzZW9mZnNldCk7XG4tXHRzaXplID0gaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMjtcbiYjNDM7XHRpZiAoaXBoLVx1MDAzZWlobCBcdTAwM2MgNSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRzaXplID0gaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMjtcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcGgpIHx8IHVubGlrZWx5KGlwX2hhc19vcHRpb25zKHNpemUpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTMzNSw5ICYjNDM7MzM3LDkgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7XG4tXHRcdGN0eC1cdTAwM2V0dW4ucHJvdG8gPSBJUFBST1RPX0lQSVA7XG4mIzQzO1x0XHRjdHgtXHUwMDNldHVuLnByb3RvID0gaXBoLVx1MDAzZXByb3RvY29sO1xuIFx0XHRjdHgtXHUwMDNldHVuLmhkcl9zaXplID0gc2l6ZTtcbi1cdFx0Y3R4LVx1MDAzZW9mZnNldCAmIzQzOz0gc2l6ZTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VvZmZzZXQgJiM0Mzs9IGN0eC1cdTAwM2V0dW4uaGRyX3NpemU7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbmluZGV4IDJiYmY1MTYzYzBlMjczLi42M2ZmNmI0ZDVkMjE0YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5AQCAtMTE4MSw2ICYjNDM7MTE4MSwxNiBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0c3RydWN0IG5mX2hvb2tfb3BzICpuYXRfb3BzO1xuIFx0aW50IGksIHJldDtcbiBcbiYjNDM7I2lmbmRlZiBNT0RVTEVcbiYjNDM7XHQvKiBJZiBuZl9uYXRfY29yZSBpcyBidWlsdC1pbiBhbmQgbmZfbmF0X2luaXQoKSBmYWlscywgZGVwZW5kZW50XG4mIzQzO1x0ICogbW9kdWxlcyBsaWtlIG5mdF9jaGFpbl9uYXQua28gbWF5IHN0aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi5cbiYjNDM7XHQgKiBIb3dldmVyLCBuYXRfbmV0IHdvdWxkIGJlIGludmFsaWQsIGxpa2VseSBwb2ludGluZyB0byBzb21lIG90aGVyXG4mIzQzO1x0ICogcGVyLW5ldCBzdHJ1Y3R1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbmZfbmF0X2hvb2spKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKHBmIFx1MDAzZT0gQVJSQVlfU0laRShuYXRfbmV0LVx1MDAzZW5hdF9wcm90b19uZXQpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuY1xuaW5kZXggMGNhYTkzMDRkMmQwMzAuLjYzODY0YjkyODI1OTA5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jXG5AQCAtMzk3LDYgJiM0MzszOTcsMjIgQEAgc3RhdGljIGludCBuZnRfdGFyZ2V0X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQgPSBleHByLVx1MDAzZW9wcy1cdTAwM2VkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBEbyBub3QgYWxsb3cgVU5TUEVDIHRvIHN0YW5kLWluIGZvciBORlBST1RPX0JSSURHRVxuJiM0MztcdCAqIHRhcmdldHM6IHRoZXkgYXJlIGluY29tcGF0aWJsZS4gIGVidGFibGVzIHRhcmdldHMgcmV0dXJuXG4mIzQzO1x0ICogRUJUX0FDQ0VQVCwgRFJPUCBhbmQgc28gb24gd2hpY2ggYXJlIG5vdCBjb21wYXRpYmxlIHdpdGhcbiYjNDM7XHQgKiBORl9BQ0NFUFQsIE5GX0RST1AgYW5kIHNvIG9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0YXJnZXQtXHUwMDNlZmFtaWx5ICE9IE5GUFJPVE9fQlJJREdFKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZnRfdGFyZ2V0X3ZhbGlkYXRlKGN0eCwgZXhwcik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19uZnRfbWF0Y2hfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbkBAIC05MzIsMTMgJiM0Mzs5NDgsMTUgQEAgbmZ0X3RhcmdldF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRvcHMtXHUwMDNlaW5pdCA9IG5mdF90YXJnZXRfaW5pdDtcbiBcdG9wcy1cdTAwM2VkZXN0cm95ID0gbmZ0X3RhcmdldF9kZXN0cm95O1xuIFx0b3BzLVx1MDAzZWR1bXAgPSBuZnRfdGFyZ2V0X2R1bXA7XG4tXHRvcHMtXHUwMDNldmFsaWRhdGUgPSBuZnRfdGFyZ2V0X3ZhbGlkYXRlO1xuIFx0b3BzLVx1MDAzZWRhdGEgPSB0YXJnZXQ7XG4gXG4tXHRpZiAoZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFKVxuJiM0MztcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19CUklER0UpIHtcbiBcdFx0b3BzLVx1MDAzZWV2YWwgPSBuZnRfdGFyZ2V0X2V2YWxfYnJpZGdlO1xuLVx0ZWxzZVxuJiM0MztcdFx0b3BzLVx1MDAzZXZhbGlkYXRlID0gbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGU7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0b3BzLVx1MDAzZWV2YWwgPSBuZnRfdGFyZ2V0X2V2YWxfeHQ7XG4mIzQzO1x0XHRvcHMtXHUwMDNldmFsaWRhdGUgPSBuZnRfdGFyZ2V0X3ZhbGlkYXRlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiBvcHM7XG4gZXJyOlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCA5NTgwNTRkZDJlMmVjYy4uMDNhODhjNzdlMGYwMjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5AQCAtMTIxNSwxMSAmIzQzOzEyMTUsMjMgQEAgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqIHtcbiBcdHUzMlx0XHR0aW1lb3V0O1xuIH07XG4gXG4mIzQzO3N0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MzIgKnZhbClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgamlmZmllc192YWwgPSBtc2Vjc190b19qaWZmaWVzKG5sYV9nZXRfdTMyKGF0dHIpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGppZmZpZXNfdmFsIFx1MDAzZSBVSU5UX01BWClcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHQqdmFsID0gamlmZmllc192YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRpZiAoIXRiW05GVEFfQ1RfRVhQRUNUX0w0UFJPVE9dIHx8XG4gXHQgICAgIXRiW05GVEFfQ1RfRVhQRUNUX0RQT1JUXSB8fFxuQEAgLTEyNTQsOCAmIzQzOzEyNjYsMTEgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbiYjNDM7XHRlcnIgPSBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdLCBcdTAwMjZwcml2LVx1MDAzZXRpbWVvdXQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdHByaXYtXHUwMDNlZHBvcnQgPSBubGFfZ2V0X2JlMTYodGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdKTtcbi1cdHByaXYtXHUwMDNldGltZW91dCA9IG5sYV9nZXRfdTMyKHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdKTtcbiBcdHByaXYtXHUwMDNlc2l6ZSA9IG5sYV9nZXRfdTgodGJbTkZUQV9DVF9FWFBFQ1RfU0laRV0pO1xuIFxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNlZmFtaWx5KTtcbkBAIC0xMjc1LDcgJiM0MzsxMjkwLDcgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAobmxhX3B1dF9iZTE2KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDNQUk9UTywgaHRvbnMocHJpdi1cdTAwM2VsM251bSkpIHx8XG4gXHQgICAgbmxhX3B1dF91OChza2IsIE5GVEFfQ1RfRVhQRUNUX0w0UFJPVE8sIHByaXYtXHUwMDNlbDRwcm90bykgfHxcbiBcdCAgICBubGFfcHV0X2JlMTYoc2tiLCBORlRBX0NUX0VYUEVDVF9EUE9SVCwgcHJpdi1cdTAwM2VkcG9ydCkgfHxcbi1cdCAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIHByaXYtXHUwMDNldGltZW91dCkgfHxcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORlRBX0NUX0VYUEVDVF9USU1FT1VULCBqaWZmaWVzX3RvX21zZWNzKHByaXYtXHUwMDNldGltZW91dCkpIHx8XG4gXHQgICAgbmxhX3B1dF91OChza2IsIE5GVEFfQ1RfRVhQRUNUX1NJWkUsIHByaXYtXHUwMDNlc2l6ZSkpXG4gXHRcdHJldHVybiAtMTtcbiBcbkBAIC0xMzI1LDcgJiM0MzsxMzQwLDcgQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIFx0XHQgICAgICAgICAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MyxcbiBcdFx0ICAgICAgICAgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsXG4gXHRcdCAgICAgICAgICBwcml2LVx1MDAzZWw0cHJvdG8sIE5VTEwsIFx1MDAyNnByaXYtXHUwMDNlZHBvcnQpO1xuLVx0ZXhwLVx1MDAzZXRpbWVvdXQgJiM0Mzs9IHByaXYtXHUwMDNldGltZW91dCAqIEhaO1xuJiM0MztcdGV4cC1cdTAwM2V0aW1lb3V0ICYjNDM7PSBwcml2LVx1MDAzZXRpbWVvdXQ7XG4gXG4gXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbmluZGV4IDc2NDFmMjQ5NjE0Yzk3Li45ZWQyODhjOWQxNjg4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbkBAIC0yNCwxNCAmIzQzOzI0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICYjNDM7IDFdID0ge1xuIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cyxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc3lucHJveHlfbmV0ICpzbmV0LFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyAqaW5mbyxcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdilcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvICppbmZvKVxuIHtcbiBcdHRoaXNfY3B1X2luYyhzbmV0LVx1MDAzZXN0YXRzLVx1MDAzZXN5bl9yZWNlaXZlZCk7XG4gXHRpZiAodGNwLVx1MDAzZWVjZSBcdTAwMjZcdTAwMjYgdGNwLVx1MDAzZWN3cilcbiBcdFx0b3B0cy1cdTAwM2VvcHRpb25zIHw9IE5GX1NZTlBST1hZX09QVF9FQ047XG4gXG4tXHRvcHRzLVx1MDAzZW9wdGlvbnMgXHUwMDI2PSBwcml2LVx1MDAzZWluZm8ub3B0aW9ucztcbiYjNDM7XHRvcHRzLVx1MDAzZW9wdGlvbnMgXHUwMDI2PSBpbmZvLVx1MDAzZW9wdGlvbnM7XG4gXHRvcHRzLVx1MDAzZW1zc19lbmNvZGUgPSBvcHRzLVx1MDAzZW1zc19vcHRpb247XG4gXHRvcHRzLVx1MDAzZW1zc19vcHRpb24gPSBpbmZvLVx1MDAzZW1zcztcbiBcdGlmIChvcHRzLVx1MDAzZW9wdGlvbnMgXHUwMDI2IE5GX1NZTlBST1hZX09QVF9USU1FU1RBTVApXG5AQCAtNTYsNyAmIzQzOzU1LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2V2YWxfdjQoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbiBcbiBcdGlmICh0Y3AtXHUwMDNlc3luKSB7XG4gXHRcdC8qIEluaXRpYWwgU1lOIGZyb20gY2xpZW50ICovXG4tXHRcdG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsIFx1MDAyNmluZm8sIHByaXYpO1xuJiM0MztcdFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXHUwMDI2aW5mbyk7XG4gXHRcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFjayhuZXQsIHNrYiwgdGNwLCBvcHRzKTtcbiBcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG5AQCAtODcsNyAmIzQzOzg2LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2V2YWxfdjYoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbiBcbiBcdGlmICh0Y3AtXHUwMDNlc3luKSB7XG4gXHRcdC8qIEluaXRpYWwgU1lOIGZyb20gY2xpZW50ICovXG4tXHRcdG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsIFx1MDAyNmluZm8sIHByaXYpO1xuJiM0MztcdFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXHUwMDI2aW5mbyk7XG4gXHRcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFja19pcHY2KG5ldCwgc2tiLCB0Y3AsIG9wdHMpO1xuIFx0XHRjb25zdW1lX3NrYihza2IpO1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX1NUT0xFTjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoXG5pbmRleCBkODYwZjdkOTc0NGJmOC4uNzI2MTk3NTk1N2VmMTggMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2hcbkBAIC0yLDE4ICYjNDM7MiwzMiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjXG4gIyBUZXN0aW5nIEZvciBTQ1RQIENPTExJU0lPTiBTQ0VOQVJJTyBhcyBCZWxvdzpcbi0jXG4mIzQzOyMgMS4gU3RhbGUgSU5JVF9BQ0sgY2FwdHVyZTpcbiAjICAgMTQ6MzU6NDcuNjU1Mjc5IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbiAjICAgMTQ6MzU6NDguMzUzMjUwIElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMTE4NzIwNjE4N11cbiAjICAgMTQ6MzU6NDguMzUzMjc1IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDIwMTc4MzczNTldXG4gIyAgIDE0OjM1OjQ4LjM1MzI4MyBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT11cbiAjICAgMTQ6MzU6NDguMzUzOTc3IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBBQ0tdXG4gIyAgIDE0OjM1OjQ4Ljg1NTMzNSBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAxNjQ1Nzk5NzBdXG4mIzQzOyMgICAoRGVsYXllZClcbiYjNDM7I1xuJiM0MzsjIDIuIFN0YWxlIElOSVQgY2FwdHVyZTpcbiYjNDM7IyAgIDE0OjM1OjQ4LjM1MzI1MCBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUXSBbaW5pdCB0YWc6IDExODcyMDYxODddXG4mIzQzOyMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbiYjNDM7IyAgIDE0OjM1OjQ4LjM1MzI4MyBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT11cbiYjNDM7IyAgIDE0OjM1OjQ4LjM1Mzk3NyBJUCBDTElFTlRfSVAuUE9SVCBcdTAwM2UgU0VSVkVSX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgQUNLXVxuJiM0MzsjICAgMTQ6MzU6NDcuNjU1Mjc5IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbiYjNDM7IyAgIChEZWxheWVkKVxuJiM0MzsjICAgMTQ6MzU6NDguODU1MzM1IElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDE2NDU3OTk3MF1cbiAjXG4gIyBUT1BPOiBTRVJWRVJfTlMgKGxpbmswKVx1MDAzYy0tLVx1MDAzZShsaW5rMSkgUk9VVEVSX05TIChsaW5rMilcdTAwM2MtLS1cdTAwM2UobGluazMpIENMSUVOVF9OU1xuIFxuIHNvdXJjZSBsaWIuc2hcbiBcbiYjNDM7Y2hlY2t0b29sIFwmIzM0O25mdCAtLXZlcnNpb25cJiMzNDsgXCYjMzQ7cnVuIHRlc3Qgd2l0aG91dCBuZnRcJiMzNDtcbiYjNDM7Y2hlY2t0b29sIFwmIzM0O3RjIC1oXCYjMzQ7IFwmIzM0O3J1biB0ZXN0IHdpdGhvdXQgdGNcJiMzNDtcbiYjNDM7Y2hlY2t0b29sIFwmIzM0O21vZHByb2JlIC1xIHNjdHBcJiMzNDsgXCYjMzQ7bG9hZCBzY3RwIG1vZHVsZVwmIzM0O1xuJiM0MztcbiBDTElFTlRfSVA9XCYjMzQ7MTk4LjUxLjIwMC4xXCYjMzQ7XG4gQ0xJRU5UX1BPUlQ9MTIzNFxuIFxuQEAgLTI0LDcgJiM0MzszOCw4IEBAIENMSUVOVF9HVz1cJiMzNDsxOTguNTEuMjAwLjJcJiMzNDtcbiBTRVJWRVJfR1c9XCYjMzQ7MTk4LjUxLjEwMC4yXCYjMzQ7XG4gXG4gIyBzZXR1cCB0aGUgdG9wb1xuLXNldHVwKCkge1xuJiM0Mzt0b3BvX3NldHVwKCkge1xuJiM0MztcdCMgc2V0dXBfbnMgY2xlYW5zIHVwIGV4aXN0aW5nIG5ldCBuYW1lc3BhY2VzIGZpcnN0LlxuIFx0c2V0dXBfbnMgQ0xJRU5UX05TIFNFUlZFUl9OUyBST1VURVJfTlNcbiBcdGlwIC1uIFwmIzM0OyRTRVJWRVJfTlNcJiMzNDsgbGluayBhZGQgbGluazAgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsaW5rMSBuZXRucyBcJiMzNDskUk9VVEVSX05TXCYjMzQ7XG4gXHRpcCAtbiBcJiMzNDskQ0xJRU5UX05TXCYjMzQ7IGxpbmsgYWRkIGxpbmszIHR5cGUgdmV0aCBwZWVyIG5hbWUgbGluazIgbmV0bnMgXCYjMzQ7JFJPVVRFUl9OU1wmIzM0O1xuQEAgLTM4LDM1ICYjNDM7NTMsNTMgQEAgc2V0dXAoKSB7XG4gXHRpcCAtbiBcJiMzNDskUk9VVEVSX05TXCYjMzQ7IGFkZHIgYWRkICRTRVJWRVJfR1cvMjQgZGV2IGxpbmsxXG4gXHRpcCAtbiBcJiMzNDskUk9VVEVSX05TXCYjMzQ7IGFkZHIgYWRkICRDTElFTlRfR1cvMjQgZGV2IGxpbmsyXG4gXHRpcCBuZXQgZXhlYyBcJiMzNDskUk9VVEVSX05TXCYjMzQ7IHN5c2N0bCAtd3EgbmV0LmlwdjQuaXBfZm9yd2FyZD0xXG4mIzQzO1x0c3lzY3RsIC13cSBuZXQubmV0ZmlsdGVyLm5mX2xvZ19hbGxfbmV0bnM9MVxuIFxuIFx0aXAgLW4gXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyBsaW5rIHNldCBsaW5rMyB1cFxuIFx0aXAgLW4gXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyBhZGRyIGFkZCAkQ0xJRU5UX0lQLzI0IGRldiBsaW5rM1xuIFx0aXAgLW4gXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyByb3V0ZSBhZGQgJFNFUlZFUl9JUCBkZXYgbGluazMgdmlhICRDTElFTlRfR1dcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uZl9kZWxheSgpXG4mIzQzO3tcbiYjNDM7XHQjIHNpbXVsYXRlIHRoZSBkZWxheSBvbiBPVlMgdXBjYWxsIGJ5IHNldHRpbmcgdXAgYSBkZWxheSBmb3IgSU5JVF9BQ0svSU5JVCB3aXRoXG4mIzQzO1x0bG9jYWwgbnM9JDFcbiYjNDM7XHRsb2NhbCBsaW5rPSQyXG4mIzQzO1x0bG9jYWwgY2h1bmtfdHlwZT0kM1xuIFxuLVx0IyBzaW11bGF0ZSB0aGUgZGVsYXkgb24gT1ZTIHVwY2FsbCBieSBzZXR0aW5nIHVwIGEgZGVsYXkgZm9yIElOSVRfQUNLIHdpdGhcbi1cdCMgdGMgb24gJFNFUlZFUl9OUyBzaWRlXG4tXHR0YyAtbiBcJiMzNDskU0VSVkVSX05TXCYjMzQ7IHFkaXNjIGFkZCBkZXYgbGluazAgcm9vdCBoYW5kbGUgMTogaHRiIHIycSA2NFxuLVx0dGMgLW4gXCYjMzQ7JFNFUlZFUl9OU1wmIzM0OyBjbGFzcyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxMDBtYml0XG4tXHR0YyAtbiBcJiMzNDskU0VSVkVSX05TXCYjMzQ7IGZpbHRlciBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBwcm90b2NvbCBpcCB1MzIgbWF0Y2ggaXAgcHJvdG9jb2wgMTMyIFxcXG4tXHRcdDB4ZmYgbWF0Y2ggdTggMiAweGZmIGF0IDMyIGZsb3dpZCAxOjFcbi1cdGlmICEgdGMgLW4gXCYjMzQ7JFNFUlZFUl9OU1wmIzM0OyBxZGlzYyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOjEgaGFuZGxlIDEwOiBuZXRlbSBkZWxheSAxMjAwbXM7IHRoZW5cbiYjNDM7XHQjIHVzZSBhIHNtYWxsZXIgbnVtYmVyIGZvciBhc3NvYyYjMzk7cyBtYXhfcmV0cmFucyB0byByZXByb2R1Y2UgdGhlIGlzc3VlXG4mIzQzO1x0aXAgbmV0IGV4ZWMgXCYjMzQ7JENMSUVOVF9OU1wmIzM0OyBzeXNjdGwgLXdxIG5ldC5zY3RwLmFzc29jaWF0aW9uX21heF9yZXRyYW5zPTNcbiYjNDM7XG4mIzQzO1x0dGMgLW4gXCYjMzQ7JG5zXCYjMzQ7IHFkaXNjIGFkZCBkZXYgXCYjMzQ7JGxpbmtcJiMzNDsgcm9vdCBoYW5kbGUgMTogaHRiIHIycSA2NFxuJiM0MztcdHRjIC1uIFwmIzM0OyRuc1wmIzM0OyBjbGFzcyBhZGQgZGV2IFwmIzM0OyRsaW5rXCYjMzQ7IHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxMDBtYml0XG4mIzQzO1x0dGMgLW4gXCYjMzQ7JG5zXCYjMzQ7IGZpbHRlciBhZGQgZGV2IFwmIzM0OyRsaW5rXCYjMzQ7IHBhcmVudCAxOiBwcm90b2NvbCBpcCBcXFxuJiM0MztcdFx0dTMyIG1hdGNoIGlwIHByb3RvY29sIDEzMiAweGZmIG1hdGNoIHU4IFwmIzM0OyRjaHVua190eXBlXCYjMzQ7IDB4ZmYgYXQgMzIgZmxvd2lkIDE6MVxuJiM0MztcdGlmICEgdGMgLW4gXCYjMzQ7JG5zXCYjMzQ7IHFkaXNjIGFkZCBkZXYgXCYjMzQ7JGxpbmtcJiMzNDsgcGFyZW50IDE6MSBoYW5kbGUgMTA6IG5ldGVtIGRlbGF5IDEyMDBtczsgdGhlblxuIFx0XHRlY2hvIFwmIzM0O1NLSVA6IENhbm5vdCBhZGQgbmV0ZW0gcWRpc2NcJiMzNDtcbi1cdFx0ZXhpdCAka3NmdF9za2lwXG4mIzQzO1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuIFx0ZmlcbiBcbiBcdCMgc2ltdWxhdGUgdGhlIGN0c3RhdGUgY2hlY2sgb24gT1ZTIG5mX2Nvbm50cmFja1xuLVx0aXAgbmV0IGV4ZWMgXCYjMzQ7JFJPVVRFUl9OU1wmIzM0OyBpcHRhYmxlcyAtQSBGT1JXQVJEIC1tIHN0YXRlIC0tc3RhdGUgSU5WQUxJRCxVTlRSQUNLRUQgLWogRFJPUFxuLVx0aXAgbmV0IGV4ZWMgXCYjMzQ7JFJPVVRFUl9OU1wmIzM0OyBpcHRhYmxlcyAtQSBJTlBVVCAtcCBzY3RwIC1qIERST1Bcbi1cbi1cdCMgdXNlIGEgc21hbGxlciBudW1iZXIgZm9yIGFzc29jJiMzOTtzIG1heF9yZXRyYW5zIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWVcbi1cdG1vZHByb2JlIC1xIHNjdHBcbi1cdGlwIG5ldCBleGVjIFwmIzM0OyRDTElFTlRfTlNcJiMzNDsgc3lzY3RsIC13cSBuZXQuc2N0cC5hc3NvY2lhdGlvbl9tYXhfcmV0cmFucz0zXG4mIzQzO1x0aXAgbmV0IGV4ZWMgXCYjMzQ7JFJPVVRFUl9OU1wmIzM0OyBuZnQgLWYgLSBcdTAwM2NcdTAwM2MtRU9GXG4mIzQzO1x0dGFibGUgaXAgdCB7XG4mIzQzO1x0XHRjaGFpbiBmb3J3YXJkIHtcbiYjNDM7XHRcdFx0dHlwZSBmaWx0ZXIgaG9vayBmb3J3YXJkIHByaW9yaXR5IGZpbHRlcjsgcG9saWN5IGFjY2VwdDtcbiYjNDM7XHRcdFx0bWV0YSBsNHByb3RvIGljbXAgY291bnRlciBhY2NlcHRcbiYjNDM7XHRcdFx0Y3Qgc3RhdGUgbmV3IGNvdW50ZXIgYWNjZXB0XG4mIzQzO1x0XHRcdGN0IHN0YXRlIGVzdGFibGlzaGVkLHJlbGF0ZWQgY291bnRlciBhY2NlcHRcbiYjNDM7XHRcdFx0Y3Qgc3RhdGUgaW52YWxpZCBsb2cgZmxhZ3MgYWxsIGNvdW50ZXIgZHJvcCBjb21tZW50IFxcXG4mIzQzO1x0XHRcdFwmIzM0O0V4cGVjdCB0byBkcm9wIHN0YWxlIElOSVQvSU5JVF9BQ0sgY2h1bmtzXCYjMzQ7XG4mIzQzO1x0XHRcdGNvdW50ZXJcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0RU9GXG4mIzQzO1x0cmV0dXJuIDBcbiB9XG4gXG4gY2xlYW51cCgpIHtcbi1cdGlwIG5ldCBleGVjIFwmIzM0OyRDTElFTlRfTlNcJiMzNDsgcGtpbGwgc2N0cF9jb2xsaXNpb24gXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4tXHRpcCBuZXQgZXhlYyBcJiMzNDskU0VSVkVSX05TXCYjMzQ7IHBraWxsIHNjdHBfY29sbGlzaW9uIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuJiM0MztcdCMgY2xlYW51cF9hbGxfbnMgdGVybWluYXRlcyBydW5uaW5nIHByb2Nlc3NlcyBpbiB0aGUgbmFtZXNwYWNlcy5cbiBcdGNsZWFudXBfYWxsX25zXG4mIzQzO1x0c3lzY3RsIC13cSBuZXQubmV0ZmlsdGVyLm5mX2xvZ19hbGxfbmV0bnM9MFxuIH1cbiBcbiBkb190ZXN0KCkge1xuQEAgLTgxLDcgJiM0MzsxMTQsMTkgQEAgZG9fdGVzdCgpIHtcbiBcbiAjIHJ1biB0aGUgdGVzdCBjYXNlXG4gdHJhcCBjbGVhbnVwIEVYSVRcbi1zZXR1cCBcdTAwMjZcdTAwMjYgXFxcbi1lY2hvIFwmIzM0O1Rlc3QgZm9yIFNDVFAgQ29sbGlzaW9uIGluIG5mX2Nvbm50cmFjazpcJiMzNDsgXHUwMDI2XHUwMDI2IFxcXG4tZG9fdGVzdCBcdTAwMjZcdTAwMjYgZWNobyBcJiMzNDtQQVNTIVwmIzM0O1xuLWV4aXQgJD9cbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7VGVzdCBmb3IgU0NUUCBJTklUX0FDSyBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlwmIzM0O1xuJiM0Mzt0b3BvX3NldHVwIHx8IGV4aXQgJD9cbiYjNDM7Y29uZl9kZWxheSAkU0VSVkVSX05TIGxpbmswIDIgfHwgZXhpdCAkP1xuJiM0MztcbiYjNDM7aWYgISBkb190ZXN0OyB0aGVuXG4mIzQzO1x0ZXhpdCAka3NmdF9mYWlsXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O1Rlc3QgZm9yIFNDVFAgSU5JVCBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlwmIzM0O1xuJiM0Mzt0b3BvX3NldHVwIHx8IGV4aXQgJD9cbiYjNDM7Y29uZl9kZWxheSAkQ0xJRU5UX05TIGxpbmszIDEgfHwgZXhpdCAkP1xuJiM0MztcbiYjNDM7aWYgISBkb190ZXN0OyB0aGVuXG4mIzQzO1x0ZXhpdCAka3NmdF9mYWlsXG4mIzQzO2ZpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaFxuaW5kZXggZDgwMzkwODQ4ZTg1MDkuLjdjODU3YTJlMGYzNDk0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLnNoXG5AQCAtODUsMTEgJiM0Mzs4NSwxMiBAQCBpcCAtbmV0IFwmIzM0OyRuczNcJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIDEwLjAuMy4xXG4gaXAgLW5ldCBcJiMzNDskbnMzXCYjMzQ7IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBkZWFkOjM6OjFcbiBcbiBsb2FkX3J1bGVzZXQoKSB7XG4tXHRsb2NhbCBuYW1lPSQxXG4tXHRsb2NhbCBwcmlvPSQyXG4mIzQzO1x0bG9jYWwgZmFtaWx5PSQxXG4mIzQzO1x0bG9jYWwgbmFtZT0kMlxuJiM0MztcdGxvY2FsIHByaW89JDNcbiBcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3JvdXRlclwmIzM0OyBuZnQgLWYgL2Rldi9zdGRpbiBcdTAwM2NcdTAwM2NFT0Zcbi10YWJsZSBpbmV0ICRuYW1lIHtcbiYjNDM7dGFibGUgJGZhbWlseSAkbmFtZSB7XG4gXHRjaGFpbiBuZnEge1xuIFx0XHRpcCBwcm90b2NvbCBpY21wIHF1ZXVlIGJ5cGFzc1xuIFx0XHRpY21wdjYgdHlwZSB7IFwmIzM0O2VjaG8tcmVxdWVzdFwmIzM0OywgXCYjMzQ7ZWNoby1yZXBseVwmIzM0OyB9IHF1ZXVlIG51bSAxIGJ5cGFzc1xuQEAgLTIyOCw2ICYjNDM7MjI5LDcgQEAgbmZfcXVldWVfd2FpdCgpXG4gdGVzdF9xdWV1ZSgpXG4ge1xuIFx0bG9jYWwgZXhwZWN0ZWQ9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBmYW1pbHk9XCYjMzQ7JDJcJiMzNDtcbiBcdGxvY2FsIGxhc3Q9XCYjMzQ7XCYjMzQ7XG4gXG4gXHQjIHNwYXduIG5mX3F1ZXVlIGxpc3RlbmVyc1xuQEAgLTI1NSwxMSAmIzQzOzI1NywxMyBAQCB0ZXN0X3F1ZXVlKClcbiBcdFx0aWYgWyB4XCYjMzQ7JGxhc3RcJiMzNDsgIT0geFwmIzM0OyRleHBlY3RlZCBwYWNrZXRzIHRvdGFsXCYjMzQ7IF07IHRoZW5cbiBcdFx0XHRlY2hvIFwmIzM0O0ZBSUw6IEV4cGVjdGVkICRleHBlY3RlZCBwYWNrZXRzIHRvdGFsLCBidXQgZ290ICRsYXN0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4gXHRcdFx0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgbmZ0IGxpc3QgcnVsZXNldFxuJiM0MztcdFx0XHRlY2hvIC1uIFwmIzM0OyRUTVBGSUxFMDogXCYjMzQ7O2NhdCBcJiMzNDskVE1QRklMRTBcJiMzNDtcbiYjNDM7XHRcdFx0ZWNobyAtbiBcJiMzNDskVE1QRklMRTE6IFwmIzM0OztjYXQgXCYjMzQ7JFRNUEZJTEUxXCYjMzQ7XG4gXHRcdFx0ZXhpdCAxXG4gXHRcdGZpXG4gXHRkb25lXG4gXG4tXHRlY2hvIFwmIzM0O1BBU1M6IEV4cGVjdGVkIGFuZCByZWNlaXZlZCAkbGFzdFwmIzM0O1xuJiM0MztcdGVjaG8gXCYjMzQ7UEFTUzogRXhwZWN0ZWQgYW5kIHJlY2VpdmVkICRsYXN0ICgkZmFtaWx5KVwmIzM0O1xuIH1cbiBcbiBsaXN0ZW5lcl9yZWFkeSgpXG5AQCAtNDAwLDYgJiM0Mzs0MDQsOCBAQCBFT0ZcbiBcbiBcdGtpbGwgXCYjMzQ7JG5mcXBpZFwmIzM0O1xuIFx0ZWNobyBcJiMzNDtQQVNTOiBpY21wJiM0MztuZnF1ZXVlIHZpYSB2cmZcJiMzNDtcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczFcJiMzNDsgbGluayBkZWwgdHZyZlxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zMVwmIzM0OyBuZnQgZmx1c2ggcnVsZXNldFxuIH1cbiBcbiBzY3RwX2xpc3RlbmVyX3JlYWR5KClcbkBAIC04MTQsMTIgJiM0Mzs4MjAsNTMgQEAgRU9GXG4gXHRjaGVja190YWludGVkIFwmIzM0O3F1ZXVlIHByb2dyYW0gZXhpdGluZyB3aGlsZSBwYWNrZXRzIHF1ZXVlZFwmIzM0O1xuIH1cbiBcbiYjNDM7dGVzdF9xdWV1ZV9icmlkZ2UoKVxuJiM0Mzt7XG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgYWRkciBmbHVzaCBkZXYgdmV0aDBcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuc3JvdXRlclwmIzM0OyBhZGRyIGZsdXNoIGRldiB2ZXRoMVxuJiM0MztcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuc3JvdXRlclwmIzM0OyBsaW5rIGFkZCBicjAgdHlwZSBicmlkZ2VcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuc3JvdXRlclwmIzM0OyBsaW5rIHNldCB2ZXRoMCBtYXN0ZXIgYnIwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgbGluayBzZXQgdmV0aDEgbWFzdGVyIGJyMFxuJiM0MztcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuc3JvdXRlclwmIzM0OyBsaW5rIHNldCBicjAgdXBcbiYjNDM7XG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgYWRkciBhZGQgMTAuMC4yLjEvMTYgZGV2IGJyMFxuJiM0MztcdGlwIC1uZXQgXCYjMzQ7JG5zcm91dGVyXCYjMzQ7IGFkZHIgYWRkIGRlYWQ6Mjo6MS82NCBkZXYgYnIwIG5vZGFkXG4mIzQzO1xuJiM0MztcdGlwIC1uZXQgXCYjMzQ7JG5zMVwmIzM0OyBhZGRyIGZsdXNoIGRldiBldGgwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IGFkZHIgZmx1c2ggZGV2IGV0aDBcbiYjNDM7XG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMxXCYjMzQ7IGFkZHIgYWRkIDEwLjAuMS4xLzE2IGRldiBldGgwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMxXCYjMzQ7IGFkZHIgYWRkIGRlYWQ6Mjo6Mi82NCBkZXYgZXRoMCBub2RhZFxuJiM0MztcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczJcJiMzNDsgYWRkciBhZGQgMTAuMC4yLjk5LzE2IGRldiBldGgwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IGFkZHIgYWRkIGRlYWQ6Mjo6OTkvNjQgZGV2IGV0aDAgbm9kYWRcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgbmZ0IGZsdXNoIHJ1bGVzZXRcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgc3lzY3RsIG5ldC5pcHY2LmNvbmYuYWxsLmZvcndhcmRpbmc9MCBcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDAuZm9yd2FyZGluZz0wIFx1MDAzZSAvZGV2L251bGxcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuc3JvdXRlclwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS5mb3J3YXJkaW5nPTAgXHUwMDNlIC9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHRpZiAhIHRlc3RfcGluZzt0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IG5ldG5zIGJyaWRnZSBjb25uZWN0aXZpdHlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgJHJldFxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGxvYWRfcnVsZXNldCBcJiMzNDticmlkZ2VcJiMzNDsgXCYjMzQ7ZmlsdGVyXCYjMzQ7IDEwXG4mIzQzO1x0dGVzdF9xdWV1ZSAxMCBcJiMzNDticmlkZ2VcJiMzNDtcbiYjNDM7XG4mIzQzO1x0bG9hZF9ydWxlc2V0IFwmIzM0O2JyaWRnZVwmIzM0OyBcJiMzNDtmaWx0ZXIyXCYjMzQ7IDIwXG4mIzQzO1x0dGVzdF9xdWV1ZSAyMCBcJiMzNDticmlkZ2VcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3JvdXRlclwmIzM0OyBzeXNjdGwgbmV0LmlwdjYuY29uZi5hbGwuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBpcCBuZXRucyBleGVjIFwmIzM0OyRuc3JvdXRlclwmIzM0OyBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMC5mb3J3YXJkaW5nPTEgXHUwMDNlIC9kZXYvbnVsbFxuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcm91dGVyXCYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgxLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyb3V0ZXJcJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDIuZm9yd2FyZGluZz0xIFx1MDAzZSAvZGV2L251bGxcbiBcbi1sb2FkX3J1bGVzZXQgXCYjMzQ7ZmlsdGVyXCYjMzQ7IDBcbiYjNDM7bG9hZF9ydWxlc2V0IFwmIzM0O2luZXRcJiMzNDsgXCYjMzQ7ZmlsdGVyXCYjMzQ7IDBcbiBcbiBpZiB0ZXN0X3Bpbmc7IHRoZW5cbiBcdCMgcXVldWUgYnlwYXNzIHdvcmtzIChydWxlcyB3ZXJlIHNraXBwZWQsIG5vIGxpc3RlbmVyKVxuQEAgLTg0MiwxMSAmIzQzOzg4OSwxMSBAQCBsb2FkX2NvdW50ZXJfcnVsZXNldCAxMFxuICMgMXggaWNtcCBwcmVyb3V0aW5nLGZvcndhcmQscG9zdHJvdXRpbmcgLVx1MDAzZSAzIHF1ZXVlIGV2ZW50cyAoNiBpbmNsLiByZXBseSkuXG4gIyAxeCBpY21wIHByZXJvdXRpbmcsaW5wdXQsb3V0cHV0IHBvc3Ryb3V0aW5nIC1cdTAwM2UgNCBxdWV1ZSBldmVudHMgaW5jbC4gcmVwbHkuXG4gIyBzbyB3ZSBleHBlY3QgdGhhdCB1c2Vyc3BhY2UgcHJvZ3JhbSByZWNlaXZlcyAxMCBwYWNrZXRzLlxuLXRlc3RfcXVldWUgMTBcbiYjNDM7dGVzdF9xdWV1ZSAxMCBcJiMzNDtpbmV0XCYjMzQ7XG4gXG4gIyBzYW1lLiAgV2UgcXVldWUgdG8gYSBzZWNvbmQgcHJvZ3JhbSBhcyB3ZWxsLlxuLWxvYWRfcnVsZXNldCBcJiMzNDtmaWx0ZXIyXCYjMzQ7IDIwXG4tdGVzdF9xdWV1ZSAyMFxuJiM0Mztsb2FkX3J1bGVzZXQgXCYjMzQ7aW5ldFwmIzM0OyBcJiMzNDtmaWx0ZXIyXCYjMzQ7IDIwXG4mIzQzO3Rlc3RfcXVldWUgMjAgXCYjMzQ7aW5ldFwmIzM0O1xuIGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zMVwmIzM0OyBuZnQgZmx1c2ggcnVsZXNldFxuIFxuIHRlc3RfdGNwX2ZvcndhcmRcbkBAIC04NjMsNCAmIzQzOzkxMCw3IEBAIHRlc3RfcXVldWVfc3RyZXNzXG4gdGVzdF9pY21wX3ZyZlxuIHRlc3RfcXVldWVfcmVtb3ZhbFxuIFxuJiM0MzsjIHR1cm5zIHJvdXRlciBpbnRvIGEgYnJpZGdlXG4mIzQzO3Rlc3RfcXVldWVfYnJpZGdlXG4mIzQzO1xuIGV4aXQgJHJldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9DT05OQ09VTlQmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfQ09NUEFUJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7LAogICAgJiMzNDtORlRfU1lOUFJPWFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25mX2Nvbm5jb3VudF9hZGQmIzM0OywKICAgICYjMzQ7X19uZl9jdF9leHBlY3RfY2hlY2smIzM0OywKICAgICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19jaGFuZ2VfaGVscGVyJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAgICYjMzQ7bmZfZmxvd19pcDRfdHVubmVsX3Byb3RvJiMzNDssCiAgICAmIzM0O25mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NCYjMzQ7LAogICAgJiMzNDtuZnRfc3lucHJveHlfZXZhbF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG5ldGZpbHRlciwgaW5jbHVkaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZsb3cgdGFibGVzLCBhbmQgbmZ0YWJsZXMgY29tcGF0aWJpbGl0eS4gSXQgbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb25uZWN0aW9uIGNvdW50aW5nLCBleHBlY3RhdGlvbiBjaGVja2luZywgaGVscGVyIHJlZ2lzdHJhdGlvbiwgYW5kIG5ldGxpbmsgaGFuZGxpbmcuIEl0IGFsc28gYWRkcyBhIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBicmlkZ2UgdGFyZ2V0cyBpbiBuZnRfY29tcGF0IGFuZCBmaXhlcyB0aW1lb3V0IGhhbmRsaW5nIGluIG5mdF9jdC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBvciBieSBwcm9jZXNzaW5nIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA1MjFkZDE4ZjEyYjYyYWJhMjZmMDg2YTMxZTQ5MDIwMzFkYjk5NjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAyMjo0MToxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCmluZGV4IDIwZDcwZGRkYmU1MDk4Li4yNTA2MmY0YTBkZDVmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC0xOCw3ICYjNDM7MTgsNyBAQAogICogQG1hdGNoOgl0aGUgbWF0Y2ggZXh0ZW5zaW9uCiAgKiBAdGFyZ2V0Ogl0aGUgdGFyZ2V0IGV4dGVuc2lvbgogICogQG1hdGNoaW5mbzoJcGVyLW1hdGNoIGRhdGEKLSAqIEB0YXJnZXRpbmZvOglwZXItdGFyZ2V0IGRhdGEKJiM0MzsgKiBAdGFyZ2luZm86CXBlci10YXJnZXQgZGF0YQogICogQHN0YXRlOglwb2ludGVyIHRvIGhvb2sgc3RhdGUgdGhpcyBwYWNrZXQgY2FtZSBmcm9tCiAgKiBAZnJhZ29mZjoJcGFja2V0IGlzIGEgZnJhZ21lbnQsIHRoaXMgaXMgdGhlIGRhdGEgb2Zmc2V0CiAgKiBAdGhvZmY6CXBvc2l0aW9uIG9mIHRyYW5zcG9ydCBoZWFkZXIgcmVsYXRpdmUgdG8gc2tiLSZndDtkYXRhCkBAIC03Nyw3ICYjNDM7NzcsOSBAQCBzdGF0aWMgaW5saW5lIHVfaW50OF90IHh0X2ZhbWlseShjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAgKiBAbWF0Y2g6CXN0cnVjdCB4dF9tYXRjaCB0aHJvdWdoIHdoaWNoIHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWQKICAqIEBtYXRjaGluZm86CXBlci1tYXRjaCBkYXRhCiAgKiBAaG9va19tYXNrOgl2aWEgd2hpY2ggaG9va3MgdGhlIG5ldyBydWxlIGlzIHJlYWNoYWJsZQotICogT3RoZXIgZmllbGRzIGFzIGFib3ZlLgomIzQzOyAqIEBmYW1pbHk6CWFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZAomIzQzOyAqCQkoaGVscGZ1bCB3aGVuIG1hdGNoLSZndDtmYW1pbHkgPT0gTkZQUk9UT19VTlNQRUMpCiYjNDM7ICogQG5mdF9jb21wYXQ6CXJ1bm5pbmcgZnJvbSB0aGUgbmZ0IGNvbXBhdCBsYXllciBpZiB0cnVlCiAgKi8KIHN0cnVjdCB4dF9tdGNoa19wYXJhbSB7CiAJc3RydWN0IG5ldCAqbmV0OwpAQCAtOTEsOCAmIzQzOzkzLDEzIEBAIHN0cnVjdCB4dF9tdGNoa19wYXJhbSB7CiB9OwogCiAvKioKLSAqIHN0cnVjdCB4dF9tZHRvcl9wYXJhbSAtIG1hdGNoIGRlc3RydWN0b3IgcGFyYW1ldGVycwotICogRmllbGRzIGFzIGFib3ZlLgomIzQzOyAqIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gLSBtYXRjaCBkZXN0cnVjdG9yIHBhcmFtZXRlcnMKJiM0MzsgKgomIzQzOyAqIEBuZXQ6CW5ldHdvcmsgbmFtZXNwYWNlIHRocm91Z2ggd2hpY2ggdGhlIGNoZWNrIHdhcyBpbnZva2VkCiYjNDM7ICogQG1hdGNoOglzdHJ1Y3QgeHRfbWF0Y2ggdGhyb3VnaCB3aGljaCB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkCiYjNDM7ICogQG1hdGNoaW5mbzoJcGVyLW1hdGNoIGRhdGEKJiM0MzsgKiBAZmFtaWx5OglhY3R1YWwgTkZQUk9UT18qIHRocm91Z2ggd2hpY2ggdGhlIGZ1bmN0aW9uIGlzIGludm9rZWQKJiM0MzsgKgkJKGhlbHBmdWwgd2hlbiBtYXRjaC0mZ3Q7ZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKQogICovCiBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIHsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CkBAIC0xMDUsMTAgJiM0MzsxMTIsMTYgQEAgc3RydWN0IHh0X210ZHRvcl9wYXJhbSB7CiAgKiBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gLSBwYXJhbWV0ZXJzIGZvciB0YXJnZXQgZXh0ZW5zaW9ucyYjMzk7CiAgKiBjaGVja2VudHJ5IGZ1bmN0aW9ucwogICoKJiM0MzsgKiBAbmV0OgluZXR3b3JrIG5hbWVzcGFjZSB0aHJvdWdoIHdoaWNoIHRoZSBjaGVjayB3YXMgaW52b2tlZAomIzQzOyAqIEB0YWJsZToJdGFibGUgdGhlIHJ1bGUgaXMgdHJpZWQgdG8gYmUgaW5zZXJ0ZWQgaW50bwogICogQGVudHJ5aW5mbzoJdGhlIGZhbWlseS1zcGVjaWZpYyBydWxlIGRhdGEKICAqIAkJKHN0cnVjdCBpcHRfZW50cnksIGlwNnRfZW50cnksIGFycHRfZW50cnksIGVidF9lbnRyeSkKLSAqCi0gKiBPdGhlciBmaWVsZHMgc2VlIGFib3ZlLgomIzQzOyAqIEB0YXJnZXQ6CXRoZSB0YXJnZXQgZXh0ZW5zaW9uCiYjNDM7ICogQHRhcmdpbmZvOglwZXItdGFyZ2V0IGRhdGEKJiM0MzsgKiBAaG9va19tYXNrOgl2aWEgd2hpY2ggaG9va3MgdGhlIG5ldyBydWxlIGlzIHJlYWNoYWJsZQomIzQzOyAqIEBmYW1pbHk6CWFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZAomIzQzOyAqCQkoaGVscGZ1bCB3aGVuIG1hdGNoLSZndDtmYW1pbHkgPT0gTkZQUk9UT19VTlNQRUMpCiYjNDM7ICogQG5mdF9jb21wYXQ6CXJ1bm5pbmcgZnJvbSB0aGUgbmZ0IGNvbXBhdCBsYXllciBpZiB0cnVlCiAgKi8KIHN0cnVjdCB4dF90Z2Noa19wYXJhbSB7CiAJc3RydWN0IG5ldCAqbmV0OwpAQCAtMzM2LDkgJiM0MzszNDksOSBAQCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqeHRfYWxsb2NfdGFibGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSk7CiB2b2lkIHh0X2ZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyk7CiAKIC8qKgotICogeHRfcmVjc2VxIC0gcmVjdXJzaXZlIHNlcWNvdW50IGZvciBuZXRmaWx0ZXIgdXNlCiYjNDM7ICogdmFyIHh0X3JlY3NlcSAtIHJlY3Vyc2l2ZSBzZXFjb3VudCBmb3IgbmV0ZmlsdGVyIHVzZQogICoKLSAqIFBhY2tldCBwcm9jZXNzaW5nIGNoYW5nZXMgdGhlIHNlcWNvdW50IG9ubHkgaWYgbm8gcmVjdXJzaW9uIGhhcHBlbmVkCiYjNDM7ICogUGFja2V0IHByb2Nlc3NpbmcgY2hhbmdlcyB0aGUgc2VxY291bnQgb25seSBpZiBubyByZWN1cnNpb24gaGFwcGVuZWQuCiAgKiBnZXRfY291bnRlcnMoKSBjYW4gdXNlIHJlYWRfc2VxY291bnRfYmVnaW4oKS9yZWFkX3NlcWNvdW50X3JldHJ5KCksCiAgKiBiZWNhdXNlIHdlIHVzZSB0aGUgbm9ybWFsIHNlcWNvdW50IGNvbnZlbnRpb24gOgogICogTG93IG9yZGVyIGJpdCBzZXQgdG8gMSBpZiBhIHdyaXRlciBpcyBhY3RpdmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaAppbmRleCBiZTRhMTIwZDU0OWViMy4uYzAyNDM0NWM5YmQ4NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaApAQCAtMjYsNiAmIzQzOzI2LDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgewogCXBvc3NpYmxlX25ldF90IG5ldDsKIAogCS8qIFdlIGV4cGVjdCB0aGlzIHR1cGxlLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFzayAqLwomIzQzOwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG1hc3Rlcl90dXBsZTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCA4MTAyNTEwMWY4NmRhYS4uYzc2MWNkODE1OGIyNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaApAQCAtMTE0LDYgJiM0MzsxMTQsMTAgQEAgaW50IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICosIHVuc2lnbmVkIGludCwKIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKiwKIAkJCQkgICAgIHVuc2lnbmVkIGludCk7CiAKJiM0MzsjZGVmaW5lIG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChuYW1lKSBcCiYjNDM7CXByX3dhcm4oJiMzNDtUaGUgJXMgY29ubnRyYWNrIGhlbHBlciBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwuXG4mIzM0OwlcCiYjNDM7CQkmIzM0O1BsZWFzZSBjb250YWN0IHRoZSBuZXRmaWx0ZXItZGV2ZWwgbWFpbGluZyBsaXN0IGlmIHlvdSBzdGlsbCBuZWVkIHRoaXMuXG4mIzM0OywgbmFtZSkKJiM0MzsKIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKTsKIAogaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCA2NjVmODAwOGNjNGIyNy4uNGMwNGNkOGQ0MGEyMjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTI1Niw4ICYjNDM7MjU2LDcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE5GX0NPTk5UUkFDS19JUkMKLQl0cmlzdGF0ZSAmIzM0O0lSQyBwcm90b2NvbCBzdXBwb3J0JiMzNDsKLQlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KJiM0MzsJdHJpc3RhdGUgJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKSYjMzQ7CiAJaGVscAogCSAgVGhlcmUgaXMgYSBjb21tb25seS11c2VkIGV4dGVuc2lvbiB0byBJUkMgY2FsbGVkCiAJICBEaXJlY3QgQ2xpZW50LXRvLUNsaWVudCBQcm90b2NvbCAoRENDKS4gIFRoaXMgZW5hYmxlcyB1c2VycyB0byBzZW5kCkBAIC0yNjcsNiAmIzQzOzI2Niw4IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfSVJDCiAJICB1c2luZyBOQVQsIHRoaXMgZXh0ZW5zaW9uIHdpbGwgZW5hYmxlIHlvdSB0byBzZW5kIGZpbGVzIGFuZCBpbml0aWF0ZQogCSAgY2hhdHMuICBOb3RlIHRoYXQgeW91IGRvIE5PVCBuZWVkIHRoaXMgZXh0ZW5zaW9uIHRvIGdldCBmaWxlcyBvcgogCSAgaGF2ZSBvdGhlcnMgaW5pdGlhdGUgY2hhdHMsIG9yIGV2ZXJ5dGhpbmcgZWxzZSBpbiBJUkMuCiYjNDM7CSAgRENDIHRyYWNraW5nIGJlaGluZCBOQVQgcmVxdWlyZXMgcGxhaW50ZXh0ICh1bmVuY3J5cHRlZCkgSVJDLCBzbwomIzQzOwkgIHRoaXMgaGVscGVyIGlzIG9mIGxpbWl0ZWQgdXNlIHRoZXNlIGRheXMuCiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0zMDgsMTcgJiM0MzszMDksMTcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19TTk1QCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE5GX0NPTk5UUkFDS19QUFRQCi0JdHJpc3RhdGUgJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQmIzM0OwomIzQzOwl0cmlzdGF0ZSAmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZCkmIzM0OwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECiAJc2VsZWN0IE5GX0NUX1BST1RPX0dSRQogCWhlbHAKIAkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUFBUUCAoUG9pbnQgdG8gUG9pbnQgVHVubmVsbGluZwogCSAgUHJvdG9jb2wsIFJGQzI2MzcpIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIE5BVC4KIAotCSAgSWYgeW91IGFyZSBydW5uaW5nIFBQVFAgc2Vzc2lvbnMgb3ZlciBhIHN0YXRlZnVsIGZpcmV3YWxsIG9yIE5BVAomIzQzOwkgIElmIHlvdSBhcmUgc3RpbGwgcnVubmluZyBQUFRQIHNlc3Npb25zIG92ZXIgYSBzdGF0ZWZ1bCBmaXJld2FsbCBvciBOQVQKIAkgIGJveCwgeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuCiAKLQkgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkIHlldC4KJiM0MzsJICBQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgUFBUUCBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIHN1cHBvcnRlZC4KIAkgIFNwZWNpZmljYWxseSB0aGVzZSBsaW1pdGF0aW9ucyBleGlzdDoKIAkgICAgLSBCbGluZGx5IGFzc3VtZXMgdGhhdCBjb250cm9sIGNvbm5lY3Rpb25zIGFyZSBhbHdheXMgZXN0YWJsaXNoZWQKIAkgICAgICBpbiBQTlMtJmd0O1BBQyBkaXJlY3Rpb24uIFRoaXMgaXMgYSB2aW9sYXRpb24gb2YgUkZDMjYzNy4KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jCmluZGV4IGRkNjcwMDRhNWNjMDllLi45MTU4MjA2OWY2ZDJlZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jCkBAIC0xODMsMTcgJiM0MzsxODMsMTYgQEAgc3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LAogCQlyZXR1cm4gLUVOT0VOVDsKIAogCWlmIChjdCAmYW1wOyZhbXA7IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHsKLQkJLyogbG9jYWwgY29ubmVjdGlvbnMgYXJlIGNvbmZpcm1lZCBpbiBwb3N0cm91dGluZyBzbyBjb25maXJtYXRpb24KLQkJICogbWlnaHQgaGF2ZSBoYXBwZW5lZCBiZWZvcmUgaGl0dGluZyBjb25ubGltaXQKJiM0MzsJCS8qIENvbm5lY3Rpb24gaXMgY29uZmlybWVkIGJ1dCBtaWdodCBzdGlsbCBiZSBpbiB0aGUgc2V0dXAgcGhhc2UuCiYjNDM7CQkgKiBPbmx5IHNraXAgdGhlIHRyYWNraW5nIGlmIGl0IGlzIGZ1bGx5IGFzc3VyZWQuIFRoaXMgZ3VhcmFudGVlcwomIzQzOwkJICogdGhhdCBzZXR1cCBwYWNrZXRzIG9yIHJldHJhbnNtaXNzaW9ucyBhcmUgcHJvcGVybHkgY291bnRlZCBhbmQKJiM0MzsJCSAqIGRlZHVwbGljYXRlZC4KIAkJICovCi0JCWlmIChza2ItJmd0O3NrYl9paWYgIT0gTE9PUEJBQ0tfSUZJTkRFWCkgewomIzQzOwkJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKSkgewogCQkJZXJyID0gLUVFWElTVDsKIAkJCWdvdG8gb3V0X3B1dDsKIAkJfQogCi0JCS8qIHRoaXMgaXMgbGlrZWx5IGEgbG9jYWwgY29ubmVjdGlvbiwgc2tpcCBvcHRpbWl6YXRpb24gdG8gYXZvaWQKLQkJICogYWRkaW5nIGR1cGxpY2F0ZXMgZnJvbSBhICYjMzk7cGFja2V0IHRyYWluJiMzOTsKLQkJICovCiAJCWdvdG8gY2hlY2tfY29ubmVjdGlvbnM7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jCmluZGV4IDQwMDExOWI2MzIwZTcyLi5iZjc4ODI4Yzc1NDlkNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMKQEAgLTYyLDYgJiM0Mzs2Miw3IEBAIGludCBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoZXhwID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCiYjNDM7CWV4cC0mZ3Q7bWFzdGVyX3R1cGxlCSAgPSBjdC0mZ3Q7dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7CiAJZXhwLSZndDt0dXBsZSAgICAgICAgICAgICAgICA9IGN0LSZndDt0dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZTsKIAogCWhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLSZndDtoZWxwZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwppbmRleCA0OWUxOGVkYTAzN2VmMS4uMzg2MzBjNWUwMDZmMDggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCkBAIC0zNTUsNiAmIzQzOzM1NSw4IEBAIHZvaWQgbmZfY3RfZXhwZWN0X2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdW5zaWduZWQgaW50IGNsYXNzLAogCWV4cC0mZ3Q7dHVwbGUuc3JjLmwzbnVtID0gZmFtaWx5OwogCWV4cC0mZ3Q7dHVwbGUuZHN0LnByb3RvbnVtID0gcHJvdG87CiAKJiM0MzsJZXhwLSZndDttYXN0ZXJfdHVwbGUgPSBjdC0mZ3Q7dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7CiYjNDM7CiAJaWYgKHNhZGRyKSB7CiAJCW1lbWNweSgmYW1wO2V4cC0mZ3Q7dHVwbGUuc3JjLnUzLCBzYWRkciwgbGVuKTsKIAkJaWYgKHNpemVvZihleHAtJmd0O3R1cGxlLnNyYy51MykgJmd0OyBsZW4pCkBAIC00OTQsOSAmIzQzOzQ5NiwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBfX25mX2N0X2V4cGVjdF9jaGVjayhzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LAogCQkJCQkgICBsb2NrZGVwX2lzX2hlbGQoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKTsKIAlpZiAoaGVscGVyKSB7CiAJCXAgPSAmYW1wO2hlbHBlci0mZ3Q7ZXhwZWN0X3BvbGljeVtleHBlY3QtJmd0O2NsYXNzXTsKLQkJaWYgKHAtJmd0O21heF9leHBlY3RlZCAmYW1wOyZhbXA7Ci0JCSAgICBtYXN0ZXJfaGVscC0mZ3Q7ZXhwZWN0aW5nW2V4cGVjdC0mZ3Q7Y2xhc3NdICZndDs9IHAtJmd0O21heF9leHBlY3RlZCkKJiM0MzsJCWlmIChtYXN0ZXJfaGVscC0mZ3Q7ZXhwZWN0aW5nW2V4cGVjdC0mZ3Q7Y2xhc3NdICZndDs9IHAtJmd0O21heF9leHBlY3RlZCkKIAkJCWV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgcCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgZGVmYXVsdF9leHBfcG9saWN5ID0gewomIzQzOwkJCS5tYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVCwKJiM0MzsJCX07CiYjNDM7CiYjNDM7CQlpZiAobWFzdGVyX2hlbHAtJmd0O2V4cGVjdGluZ1tleHBlY3QtJmd0O2NsYXNzXSAmZ3Q7PSBkZWZhdWx0X2V4cF9wb2xpY3kubWF4X2V4cGVjdGVkKQomIzQzOwkJCWV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgJmFtcDtkZWZhdWx0X2V4cF9wb2xpY3kpOwogCX0KIAogCWNuZXQgPSBuZl9jdF9wZXJuZXQobmV0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggOGI5NDAwMWMyNDMwNjYuLjUwMDUwOWIxNzY2M2VkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwpAQCAtMzc0LDggJiM0MzszNzQsMTMgQEAgaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiAJaWYgKCFuZl9jdF9oZWxwZXJfaGFzaCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlpZiAobWUtJmd0O2V4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCAmZ3Q7IE5GX0NUX0VYUEVDVF9NQVhfQ05UKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7PSBtZS0mZ3Q7ZXhwZWN0X2NsYXNzX21heDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbWUtJmd0O2V4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkKQomIzQzOwkJCW1lLSZndDtleHBlY3RfcG9saWN5W2ldLm1heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UOwomIzQzOwomIzQzOwkJaWYgKG1lLSZndDtleHBlY3RfcG9saWN5W2ldLm1heF9leHBlY3RlZCAmZ3Q7IE5GX0NUX0VYUEVDVF9NQVhfQ05UKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKIAltdXRleF9sb2NrKCZhbXA7bmZfY3RfaGVscGVyX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbmZfY3RfaGVscGVyX2hzaXplOyBpJiM0MzsmIzQzOykgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwppbmRleCAwYzExN2I4NDkyZTk5Mi4uMTkzYWIzNGRiNzk1ZjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCkBAIC0yNjIsNiAmIzQzOzI2Miw4IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKQogewogCWludCBpLCByZXQ7CiAKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKEhFTFBFUl9OQU1FKTsKJiM0MzsKIAlpZiAobWF4X2RjY19jaGFubmVscyAmbHQ7IDEpIHsKIAkJcHJfZXJyKCYjMzQ7bWF4X2RjY19jaGFubmVscyBtdXN0IG5vdCBiZSB6ZXJvXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDRlNzhkMjQ4Mjk4OTVlLi40MjE3NzE1ZDQyZGMyNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtMTk1MywxOSAmIzQzOzE5NTMsNiBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoIXN0cmNtcChoZWxwbmFtZSwgJiMzNDsmIzM0OykgJmFtcDsmYW1wOyBoZWxwKSB7Ci0JCWhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLSZndDtoZWxwZXIpOwotCQlpZiAoaGVscGVyKSB7Ci0JCQkvKiB3ZSBoYWQgYSBoZWxwZXIgYmVmb3JlIC4uLiAqLwotCQkJbmZfY3RfcmVtb3ZlX2V4cGVjdGF0aW9ucyhjdCk7Ci0JCQlSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtJmd0O2hlbHBlciwgTlVMTCk7Ci0JCQlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aGVscGVyLSZndDtjdF9yZWZjbnQpKQotCQkJCWtmcmVlX3JjdShoZWxwZXIsIHJjdSk7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiAwOwotCX0KLQogCWhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksCiAJCQkJCSAgICBuZl9jdF9wcm90b251bShjdCkpOwogCWlmIChoZWxwZXIgPT0gTlVMTCkgewpAQCAtMzAxNSw3ICYjNDM7MzAwMiw2IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKIHsKIAlfX3MzMiB0aW1lb3V0ID0gKF9fczMyKShSRUFEX09OQ0UoZXhwLSZndDt0aW1lb3V0KSAtIG5mY3RfdGltZV9zdGFtcCkgLyBIWjsKLQlzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyID0gZXhwLSZndDttYXN0ZXI7CiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpCiAJc3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtczsKQEAgLTMwMzAsOSAmIzQzOzMwMTYsNyBAQCBjdG5ldGxpbmtfZXhwX2R1bXBfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCWlmIChjdG5ldGxpbmtfZXhwX2R1bXBfbWFzayhza2IsICZhbXA7ZXhwLSZndDt0dXBsZSwgJmFtcDtleHAtJmd0O21hc2spICZsdDsgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsCi0JCQkJICZhbXA7bWFzdGVyLSZndDt0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwKLQkJCQkgQ1RBX0VYUEVDVF9NQVNURVIpICZsdDsgMCkKJiM0MzsJaWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsICZhbXA7ZXhwLSZndDttYXN0ZXJfdHVwbGUsIENUQV9FWFBFQ1RfTUFTVEVSKSAmbHQ7IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKQpAQCAtMzA0NSw5ICYjNDM7MzAyOSw5IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaWYgKG5sYV9wdXRfYmUzMihza2IsIENUQV9FWFBFQ1RfTkFUX0RJUiwgaHRvbmwoZXhwLSZndDtkaXIpKSkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JCW5hdF90dXBsZS5zcmMubDNudW0gPSBuZl9jdF9sM251bShtYXN0ZXIpOwomIzQzOwkJbmF0X3R1cGxlLnNyYy5sM251bSA9IGV4cC0mZ3Q7bWFzdGVyX3R1cGxlLnNyYy5sM251bTsKIAkJbmF0X3R1cGxlLnNyYy51MyA9IGV4cC0mZ3Q7c2F2ZWRfYWRkcjsKLQkJbmF0X3R1cGxlLmRzdC5wcm90b251bSA9IG5mX2N0X3Byb3RvbnVtKG1hc3Rlcik7CiYjNDM7CQluYXRfdHVwbGUuZHN0LnByb3RvbnVtID0gZXhwLSZndDttYXN0ZXJfdHVwbGUuZHN0LnByb3RvbnVtOwogCQluYXRfdHVwbGUuc3JjLnUgPSBleHAtJmd0O3NhdmVkX3Byb3RvOwogCiAJCWlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLCAmYW1wO25hdF90dXBsZSwKQEAgLTM1ODksNiAmIzQzOzM1NzMsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LAogI2VuZGlmCiAJcmN1X2Fzc2lnbl9wb2ludGVyKGV4cC0mZ3Q7aGVscGVyLCBoZWxwZXIpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihleHAtJmd0O2Fzc2lnbl9oZWxwZXIsIGFzc2lnbl9oZWxwZXIpOwomIzQzOwlleHAtJmd0O21hc3Rlcl90dXBsZSA9IGN0LSZndDt0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTsKIAlleHAtJmd0O3R1cGxlID0gKnR1cGxlOwogCWV4cC0mZ3Q7bWFzay5zcmMudTMgPSBtYXNrLSZndDtzcmMudTM7CiAJZXhwLSZndDttYXNrLnNyYy51LmFsbCA9IG1hc2stJmd0O3NyYy51LmFsbDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCA3NzY1MDVhNzhlNjQ1Ni4uODBmYzE0Yzg3ZGRjNGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKQEAgLTU0NSw2ICYjNDM7NTQ1LDggQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKQogCiAJcHB0cC5kZXN0cm95ID0gZ3JlX3BwdHBfZGVzdHJveV9zaWJsaW5nczsKIAomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQocHB0cC5uYW1lKTsKJiM0MzsKIAlyZXR1cm4gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1wO3BwdHAsICZhbXA7cHB0cF9wdHIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCmluZGV4IGU3YTNmYjJiMmQ5NDY2Li4yOWU5M2FjMWUyZTQwMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKQEAgLTMyNiw4ICYjNDM7MzI2LDEwIEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQlyZXR1cm4gZmFsc2U7CiAKIAlpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGN0eC0mZ3Q7b2Zmc2V0KTsKLQlzaXplID0gaXBoLSZndDtpaGwgJmx0OyZsdDsgMjsKJiM0MzsJaWYgKGlwaC0mZ3Q7aWhsICZsdDsgNSkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAomIzQzOwlzaXplID0gaXBoLSZndDtpaGwgJmx0OyZsdDsgMjsKIAlpZiAoaXBfaXNfZnJhZ21lbnQoaXBoKSB8fCB1bmxpa2VseShpcF9oYXNfb3B0aW9ucyhzaXplKSkpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMzM1LDkgJiM0MzszMzcsOSBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7Ci0JCWN0eC0mZ3Q7dHVuLnByb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwkJY3R4LSZndDt0dW4ucHJvdG8gPSBpcGgtJmd0O3Byb3RvY29sOwogCQljdHgtJmd0O3R1bi5oZHJfc2l6ZSA9IHNpemU7Ci0JCWN0eC0mZ3Q7b2Zmc2V0ICYjNDM7PSBzaXplOwomIzQzOwkJY3R4LSZndDtvZmZzZXQgJiM0Mzs9IGN0eC0mZ3Q7dHVuLmhkcl9zaXplOwogCX0KIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDJiYmY1MTYzYzBlMjczLi42M2ZmNmI0ZDVkMjE0YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMTE4MSw2ICYjNDM7MTE4MSwxNiBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLAogCXN0cnVjdCBuZl9ob29rX29wcyAqbmF0X29wczsKIAlpbnQgaSwgcmV0OwogCiYjNDM7I2lmbmRlZiBNT0RVTEUKJiM0MzsJLyogSWYgbmZfbmF0X2NvcmUgaXMgYnVpbHQtaW4gYW5kIG5mX25hdF9pbml0KCkgZmFpbHMsIGRlcGVuZGVudAomIzQzOwkgKiBtb2R1bGVzIGxpa2UgbmZ0X2NoYWluX25hdC5rbyBtYXkgc3RpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLgomIzQzOwkgKiBIb3dldmVyLCBuYXRfbmV0IHdvdWxkIGJlIGludmFsaWQsIGxpa2VseSBwb2ludGluZyB0byBzb21lIG90aGVyCiYjNDM7CSAqIHBlci1uZXQgc3RydWN0dXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSghbmZfbmF0X2hvb2spKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOyNlbmRpZgomIzQzOwogCWlmIChXQVJOX09OX09OQ0UocGYgJmd0Oz0gQVJSQVlfU0laRShuYXRfbmV0LSZndDtuYXRfcHJvdG9fbmV0KSkpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jCmluZGV4IDBjYWE5MzA0ZDJkMDMwLi42Mzg2NGI5MjgyNTkwOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMKQEAgLTM5Nyw2ICYjNDM7Mzk3LDIyIEBAIHN0YXRpYyBpbnQgbmZ0X3RhcmdldF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQgPSBleHByLSZndDtvcHMtJmd0O2RhdGE7CiYjNDM7CiYjNDM7CS8qIERvIG5vdCBhbGxvdyBVTlNQRUMgdG8gc3RhbmQtaW4gZm9yIE5GUFJPVE9fQlJJREdFCiYjNDM7CSAqIHRhcmdldHM6IHRoZXkgYXJlIGluY29tcGF0aWJsZS4gIGVidGFibGVzIHRhcmdldHMgcmV0dXJuCiYjNDM7CSAqIEVCVF9BQ0NFUFQsIERST1AgYW5kIHNvIG9uIHdoaWNoIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoCiYjNDM7CSAqIE5GX0FDQ0VQVCwgTkZfRFJPUCBhbmQgc28gb24uCiYjNDM7CSAqLwomIzQzOwlpZiAodGFyZ2V0LSZndDtmYW1pbHkgIT0gTkZQUk9UT19CUklER0UpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5mdF90YXJnZXRfdmFsaWRhdGUoY3R4LCBleHByKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX25mdF9tYXRjaF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKIAkJCSAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKQEAgLTkzMiwxMyAmIzQzOzk0OCwxNSBAQCBuZnRfdGFyZ2V0X3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAlvcHMtJmd0O2luaXQgPSBuZnRfdGFyZ2V0X2luaXQ7CiAJb3BzLSZndDtkZXN0cm95ID0gbmZ0X3RhcmdldF9kZXN0cm95OwogCW9wcy0mZ3Q7ZHVtcCA9IG5mdF90YXJnZXRfZHVtcDsKLQlvcHMtJmd0O3ZhbGlkYXRlID0gbmZ0X3RhcmdldF92YWxpZGF0ZTsKIAlvcHMtJmd0O2RhdGEgPSB0YXJnZXQ7CiAKLQlpZiAoZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFKQomIzQzOwlpZiAoZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFKSB7CiAJCW9wcy0mZ3Q7ZXZhbCA9IG5mdF90YXJnZXRfZXZhbF9icmlkZ2U7Ci0JZWxzZQomIzQzOwkJb3BzLSZndDt2YWxpZGF0ZSA9IG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlOwomIzQzOwl9IGVsc2UgewogCQlvcHMtJmd0O2V2YWwgPSBuZnRfdGFyZ2V0X2V2YWxfeHQ7CiYjNDM7CQlvcHMtJmd0O3ZhbGlkYXRlID0gbmZ0X3RhcmdldF92YWxpZGF0ZTsKJiM0MzsJfQogCiAJcmV0dXJuIG9wczsKIGVycjoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCmluZGV4IDk1ODA1NGRkMmUyZWNjLi4wM2E4OGM3N2UwZjAyOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCkBAIC0xMjE1LDExICYjNDM7MTIxNSwyMyBAQCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogewogCXUzMgkJdGltZW91dDsKIH07CiAKJiM0MztzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGppZmZpZXNfdmFsID0gbXNlY3NfdG9famlmZmllcyhubGFfZ2V0X3UzMihhdHRyKSk7CiYjNDM7CiYjNDM7CWlmIChqaWZmaWVzX3ZhbCAmZ3Q7IFVJTlRfTUFYKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CSp2YWwgPSBqaWZmaWVzX3ZhbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSwKIAkJCQkgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAoIXRiW05GVEFfQ1RfRVhQRUNUX0w0UFJPVE9dIHx8CiAJICAgICF0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0gfHwKQEAgLTEyNTQsOCAmIzQzOzEyNjYsMTEgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKJiM0MzsJZXJyID0gbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldCh0YltORlRBX0NUX0VYUEVDVF9USU1FT1VUXSwgJmFtcDtwcml2LSZndDt0aW1lb3V0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJcHJpdi0mZ3Q7ZHBvcnQgPSBubGFfZ2V0X2JlMTYodGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdKTsKLQlwcml2LSZndDt0aW1lb3V0ID0gbmxhX2dldF91MzIodGJbTkZUQV9DVF9FWFBFQ1RfVElNRU9VVF0pOwogCXByaXYtJmd0O3NpemUgPSBubGFfZ2V0X3U4KHRiW05GVEFfQ1RfRVhQRUNUX1NJWkVdKTsKIAogCXJldHVybiBuZl9jdF9uZXRuc19nZXQoY3R4LSZndDtuZXQsIGN0eC0mZ3Q7ZmFtaWx5KTsKQEAgLTEyNzUsNyAmIzQzOzEyOTAsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAobmxhX3B1dF9iZTE2KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDNQUk9UTywgaHRvbnMocHJpdi0mZ3Q7bDNudW0pKSB8fAogCSAgICBubGFfcHV0X3U4KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDRQUk9UTywgcHJpdi0mZ3Q7bDRwcm90bykgfHwKIAkgICAgbmxhX3B1dF9iZTE2KHNrYiwgTkZUQV9DVF9FWFBFQ1RfRFBPUlQsIHByaXYtJmd0O2Rwb3J0KSB8fAotCSAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIHByaXYtJmd0O3RpbWVvdXQpIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIGppZmZpZXNfdG9fbXNlY3MocHJpdi0mZ3Q7dGltZW91dCkpIHx8CiAJICAgIG5sYV9wdXRfdTgoc2tiLCBORlRBX0NUX0VYUEVDVF9TSVpFLCBwcml2LSZndDtzaXplKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0xMzI1LDcgJiM0MzsxMzQwLDcgQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLAogCQkgICAgICAgICAgJmFtcDtjdC0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywKIAkJICAgICAgICAgICZhbXA7Y3QtJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCiAJCSAgICAgICAgICBwcml2LSZndDtsNHByb3RvLCBOVUxMLCAmYW1wO3ByaXYtJmd0O2Rwb3J0KTsKLQlleHAtJmd0O3RpbWVvdXQgJiM0Mzs9IHByaXYtJmd0O3RpbWVvdXQgKiBIWjsKJiM0MzsJZXhwLSZndDt0aW1lb3V0ICYjNDM7PSBwcml2LSZndDt0aW1lb3V0OwogCiAJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkKIAkJcmVncy0mZ3Q7dmVyZGljdC5jb2RlID0gTkZfRFJPUDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jCmluZGV4IDc2NDFmMjQ5NjE0Yzk3Li45ZWQyODhjOWQxNjg4MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jCkBAIC0yNCwxNCAmIzQzOzI0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICYjNDM7IDFdID0gewogc3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKHN0cnVjdCBzeW5wcm94eV9vcHRpb25zICpvcHRzLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwLAogCQkJCSAgICAgc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCwKLQkJCQkgICAgIHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvICppbmZvLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdikKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyAqaW5mbykKIHsKIAl0aGlzX2NwdV9pbmMoc25ldC0mZ3Q7c3RhdHMtJmd0O3N5bl9yZWNlaXZlZCk7CiAJaWYgKHRjcC0mZ3Q7ZWNlICZhbXA7JmFtcDsgdGNwLSZndDtjd3IpCiAJCW9wdHMtJmd0O29wdGlvbnMgfD0gTkZfU1lOUFJPWFlfT1BUX0VDTjsKIAotCW9wdHMtJmd0O29wdGlvbnMgJmFtcDs9IHByaXYtJmd0O2luZm8ub3B0aW9uczsKJiM0MzsJb3B0cy0mZ3Q7b3B0aW9ucyAmYW1wOz0gaW5mby0mZ3Q7b3B0aW9uczsKIAlvcHRzLSZndDttc3NfZW5jb2RlID0gb3B0cy0mZ3Q7bXNzX29wdGlvbjsKIAlvcHRzLSZndDttc3Nfb3B0aW9uID0gaW5mby0mZ3Q7bXNzOwogCWlmIChvcHRzLSZndDtvcHRpb25zICZhbXA7IE5GX1NZTlBST1hZX09QVF9USU1FU1RBTVApCkBAIC01Niw3ICYjNDM7NTUsNyBAQCBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92NChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LAogCiAJaWYgKHRjcC0mZ3Q7c3luKSB7CiAJCS8qIEluaXRpYWwgU1lOIGZyb20gY2xpZW50ICovCi0JCW5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsICZhbXA7aW5mbywgcHJpdik7CiYjNDM7CQluZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCAmYW1wO2luZm8pOwogCQlzeW5wcm94eV9zZW5kX2NsaWVudF9zeW5hY2sobmV0LCBza2IsIHRjcCwgb3B0cyk7CiAJCWNvbnN1bWVfc2tiKHNrYik7CiAJCXJlZ3MtJmd0O3ZlcmRpY3QuY29kZSA9IE5GX1NUT0xFTjsKQEAgLTg3LDcgJiM0Mzs4Niw3IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y2KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsCiAKIAlpZiAodGNwLSZndDtzeW4pIHsKIAkJLyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi8KLQkJbmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgJmFtcDtpbmZvLCBwcml2KTsKJiM0MzsJCW5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsICZhbXA7aW5mbyk7CiAJCXN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFja19pcHY2KG5ldCwgc2tiLCB0Y3AsIG9wdHMpOwogCQljb25zdW1lX3NrYihza2IpOwogCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoCmluZGV4IGQ4NjBmN2Q5NzQ0YmY4Li43MjYxOTc1OTU3ZWYxOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2gKQEAgLTIsMTggJiM0MzsyLDMyIEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjCiAjIFRlc3RpbmcgRm9yIFNDVFAgQ09MTElTSU9OIFNDRU5BUklPIGFzIEJlbG93OgotIwomIzQzOyMgMS4gU3RhbGUgSU5JVF9BQ0sgY2FwdHVyZToKICMgICAxNDozNTo0Ny42NTUyNzkgSVAgQ0xJRU5UX0lQLlBPUlQgJmd0OyBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV0KICMgICAxNDozNTo0OC4zNTMyNTAgSVAgU0VSVkVSX0lQLlBPUlQgJmd0OyBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMTE4NzIwNjE4N10KICMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgJmd0OyBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDIwMTc4MzczNTldCiAjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUICZndDsgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT10KICMgICAxNDozNTo0OC4zNTM5NzcgSVAgQ0xJRU5UX0lQLlBPUlQgJmd0OyBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBBQ0tdCiAjICAgMTQ6MzU6NDguODU1MzM1IElQIFNFUlZFUl9JUC5QT1JUICZndDsgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAxNjQ1Nzk5NzBdCiYjNDM7IyAgIChEZWxheWVkKQomIzQzOyMKJiM0MzsjIDIuIFN0YWxlIElOSVQgY2FwdHVyZToKJiM0MzsjICAgMTQ6MzU6NDguMzUzMjUwIElQIFNFUlZFUl9JUC5QT1JUICZndDsgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUXSBbaW5pdCB0YWc6IDExODcyMDYxODddCiYjNDM7IyAgIDE0OjM1OjQ4LjM1MzI3NSBJUCBDTElFTlRfSVAuUE9SVCAmZ3Q7IFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMjAxNzgzNzM1OV0KJiM0MzsjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUICZndDsgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT10KJiM0MzsjICAgMTQ6MzU6NDguMzUzOTc3IElQIENMSUVOVF9JUC5QT1JUICZndDsgU0VSVkVSX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgQUNLXQomIzQzOyMgICAxNDozNTo0Ny42NTUyNzkgSVAgQ0xJRU5UX0lQLlBPUlQgJmd0OyBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV0KJiM0MzsjICAgKERlbGF5ZWQpCiYjNDM7IyAgIDE0OjM1OjQ4Ljg1NTMzNSBJUCBTRVJWRVJfSVAuUE9SVCAmZ3Q7IENMSUVOVF9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMTY0NTc5OTcwXQogIwogIyBUT1BPOiBTRVJWRVJfTlMgKGxpbmswKSZsdDstLS0mZ3Q7KGxpbmsxKSBST1VURVJfTlMgKGxpbmsyKSZsdDstLS0mZ3Q7KGxpbmszKSBDTElFTlRfTlMKIAogc291cmNlIGxpYi5zaAogCiYjNDM7Y2hlY2t0b29sICYjMzQ7bmZ0IC0tdmVyc2lvbiYjMzQ7ICYjMzQ7cnVuIHRlc3Qgd2l0aG91dCBuZnQmIzM0OwomIzQzO2NoZWNrdG9vbCAmIzM0O3RjIC1oJiMzNDsgJiMzNDtydW4gdGVzdCB3aXRob3V0IHRjJiMzNDsKJiM0MztjaGVja3Rvb2wgJiMzNDttb2Rwcm9iZSAtcSBzY3RwJiMzNDsgJiMzNDtsb2FkIHNjdHAgbW9kdWxlJiMzNDsKJiM0MzsKIENMSUVOVF9JUD0mIzM0OzE5OC41MS4yMDAuMSYjMzQ7CiBDTElFTlRfUE9SVD0xMjM0CiAKQEAgLTI0LDcgJiM0MzszOCw4IEBAIENMSUVOVF9HVz0mIzM0OzE5OC41MS4yMDAuMiYjMzQ7CiBTRVJWRVJfR1c9JiMzNDsxOTguNTEuMTAwLjImIzM0OwogCiAjIHNldHVwIHRoZSB0b3BvCi1zZXR1cCgpIHsKJiM0Mzt0b3BvX3NldHVwKCkgewomIzQzOwkjIHNldHVwX25zIGNsZWFucyB1cCBleGlzdGluZyBuZXQgbmFtZXNwYWNlcyBmaXJzdC4KIAlzZXR1cF9ucyBDTElFTlRfTlMgU0VSVkVSX05TIFJPVVRFUl9OUwogCWlwIC1uICYjMzQ7JFNFUlZFUl9OUyYjMzQ7IGxpbmsgYWRkIGxpbmswIHR5cGUgdmV0aCBwZWVyIG5hbWUgbGluazEgbmV0bnMgJiMzNDskUk9VVEVSX05TJiMzNDsKIAlpcCAtbiAmIzM0OyRDTElFTlRfTlMmIzM0OyBsaW5rIGFkZCBsaW5rMyB0eXBlIHZldGggcGVlciBuYW1lIGxpbmsyIG5ldG5zICYjMzQ7JFJPVVRFUl9OUyYjMzQ7CkBAIC0zOCwzNSAmIzQzOzUzLDUzIEBAIHNldHVwKCkgewogCWlwIC1uICYjMzQ7JFJPVVRFUl9OUyYjMzQ7IGFkZHIgYWRkICRTRVJWRVJfR1cvMjQgZGV2IGxpbmsxCiAJaXAgLW4gJiMzNDskUk9VVEVSX05TJiMzNDsgYWRkciBhZGQgJENMSUVOVF9HVy8yNCBkZXYgbGluazIKIAlpcCBuZXQgZXhlYyAmIzM0OyRST1VURVJfTlMmIzM0OyBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2ZvcndhcmQ9MQomIzQzOwlzeXNjdGwgLXdxIG5ldC5uZXRmaWx0ZXIubmZfbG9nX2FsbF9uZXRucz0xCiAKIAlpcCAtbiAmIzM0OyRDTElFTlRfTlMmIzM0OyBsaW5rIHNldCBsaW5rMyB1cAogCWlwIC1uICYjMzQ7JENMSUVOVF9OUyYjMzQ7IGFkZHIgYWRkICRDTElFTlRfSVAvMjQgZGV2IGxpbmszCiAJaXAgLW4gJiMzNDskQ0xJRU5UX05TJiMzNDsgcm91dGUgYWRkICRTRVJWRVJfSVAgZGV2IGxpbmszIHZpYSAkQ0xJRU5UX0dXCiYjNDM7fQomIzQzOwomIzQzO2NvbmZfZGVsYXkoKQomIzQzO3sKJiM0MzsJIyBzaW11bGF0ZSB0aGUgZGVsYXkgb24gT1ZTIHVwY2FsbCBieSBzZXR0aW5nIHVwIGEgZGVsYXkgZm9yIElOSVRfQUNLL0lOSVQgd2l0aAomIzQzOwlsb2NhbCBucz0kMQomIzQzOwlsb2NhbCBsaW5rPSQyCiYjNDM7CWxvY2FsIGNodW5rX3R5cGU9JDMKIAotCSMgc2ltdWxhdGUgdGhlIGRlbGF5IG9uIE9WUyB1cGNhbGwgYnkgc2V0dGluZyB1cCBhIGRlbGF5IGZvciBJTklUX0FDSyB3aXRoCi0JIyB0YyBvbiAkU0VSVkVSX05TIHNpZGUKLQl0YyAtbiAmIzM0OyRTRVJWRVJfTlMmIzM0OyBxZGlzYyBhZGQgZGV2IGxpbmswIHJvb3QgaGFuZGxlIDE6IGh0YiByMnEgNjQKLQl0YyAtbiAmIzM0OyRTRVJWRVJfTlMmIzM0OyBjbGFzcyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxMDBtYml0Ci0JdGMgLW4gJiMzNDskU0VSVkVSX05TJiMzNDsgZmlsdGVyIGFkZCBkZXYgbGluazAgcGFyZW50IDE6IHByb3RvY29sIGlwIHUzMiBtYXRjaCBpcCBwcm90b2NvbCAxMzIgXAotCQkweGZmIG1hdGNoIHU4IDIgMHhmZiBhdCAzMiBmbG93aWQgMToxCi0JaWYgISB0YyAtbiAmIzM0OyRTRVJWRVJfTlMmIzM0OyBxZGlzYyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOjEgaGFuZGxlIDEwOiBuZXRlbSBkZWxheSAxMjAwbXM7IHRoZW4KJiM0MzsJIyB1c2UgYSBzbWFsbGVyIG51bWJlciBmb3IgYXNzb2MmIzM5O3MgbWF4X3JldHJhbnMgdG8gcmVwcm9kdWNlIHRoZSBpc3N1ZQomIzQzOwlpcCBuZXQgZXhlYyAmIzM0OyRDTElFTlRfTlMmIzM0OyBzeXNjdGwgLXdxIG5ldC5zY3RwLmFzc29jaWF0aW9uX21heF9yZXRyYW5zPTMKJiM0MzsKJiM0MzsJdGMgLW4gJiMzNDskbnMmIzM0OyBxZGlzYyBhZGQgZGV2ICYjMzQ7JGxpbmsmIzM0OyByb290IGhhbmRsZSAxOiBodGIgcjJxIDY0CiYjNDM7CXRjIC1uICYjMzQ7JG5zJiMzNDsgY2xhc3MgYWRkIGRldiAmIzM0OyRsaW5rJiMzNDsgcGFyZW50IDE6IGNsYXNzaWQgMToxIGh0YiByYXRlIDEwMG1iaXQKJiM0MzsJdGMgLW4gJiMzNDskbnMmIzM0OyBmaWx0ZXIgYWRkIGRldiAmIzM0OyRsaW5rJiMzNDsgcGFyZW50IDE6IHByb3RvY29sIGlwIFwKJiM0MzsJCXUzMiBtYXRjaCBpcCBwcm90b2NvbCAxMzIgMHhmZiBtYXRjaCB1OCAmIzM0OyRjaHVua190eXBlJiMzNDsgMHhmZiBhdCAzMiBmbG93aWQgMToxCiYjNDM7CWlmICEgdGMgLW4gJiMzNDskbnMmIzM0OyBxZGlzYyBhZGQgZGV2ICYjMzQ7JGxpbmsmIzM0OyBwYXJlbnQgMToxIGhhbmRsZSAxMDogbmV0ZW0gZGVsYXkgMTIwMG1zOyB0aGVuCiAJCWVjaG8gJiMzNDtTS0lQOiBDYW5ub3QgYWRkIG5ldGVtIHFkaXNjJiMzNDsKLQkJZXhpdCAka3NmdF9za2lwCiYjNDM7CQlyZXR1cm4gJGtzZnRfc2tpcAogCWZpCiAKIAkjIHNpbXVsYXRlIHRoZSBjdHN0YXRlIGNoZWNrIG9uIE9WUyBuZl9jb25udHJhY2sKLQlpcCBuZXQgZXhlYyAmIzM0OyRST1VURVJfTlMmIzM0OyBpcHRhYmxlcyAtQSBGT1JXQVJEIC1tIHN0YXRlIC0tc3RhdGUgSU5WQUxJRCxVTlRSQUNLRUQgLWogRFJPUAotCWlwIG5ldCBleGVjICYjMzQ7JFJPVVRFUl9OUyYjMzQ7IGlwdGFibGVzIC1BIElOUFVUIC1wIHNjdHAgLWogRFJPUAotCi0JIyB1c2UgYSBzbWFsbGVyIG51bWJlciBmb3IgYXNzb2MmIzM5O3MgbWF4X3JldHJhbnMgdG8gcmVwcm9kdWNlIHRoZSBpc3N1ZQotCW1vZHByb2JlIC1xIHNjdHAKLQlpcCBuZXQgZXhlYyAmIzM0OyRDTElFTlRfTlMmIzM0OyBzeXNjdGwgLXdxIG5ldC5zY3RwLmFzc29jaWF0aW9uX21heF9yZXRyYW5zPTMKJiM0MzsJaXAgbmV0IGV4ZWMgJiMzNDskUk9VVEVSX05TJiMzNDsgbmZ0IC1mIC0gJmx0OyZsdDstRU9GCiYjNDM7CXRhYmxlIGlwIHQgewomIzQzOwkJY2hhaW4gZm9yd2FyZCB7CiYjNDM7CQkJdHlwZSBmaWx0ZXIgaG9vayBmb3J3YXJkIHByaW9yaXR5IGZpbHRlcjsgcG9saWN5IGFjY2VwdDsKJiM0MzsJCQltZXRhIGw0cHJvdG8gaWNtcCBjb3VudGVyIGFjY2VwdAomIzQzOwkJCWN0IHN0YXRlIG5ldyBjb3VudGVyIGFjY2VwdAomIzQzOwkJCWN0IHN0YXRlIGVzdGFibGlzaGVkLHJlbGF0ZWQgY291bnRlciBhY2NlcHQKJiM0MzsJCQljdCBzdGF0ZSBpbnZhbGlkIGxvZyBmbGFncyBhbGwgY291bnRlciBkcm9wIGNvbW1lbnQgXAomIzQzOwkJCSYjMzQ7RXhwZWN0IHRvIGRyb3Agc3RhbGUgSU5JVC9JTklUX0FDSyBjaHVua3MmIzM0OwomIzQzOwkJCWNvdW50ZXIKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlFT0YKJiM0MzsJcmV0dXJuIDAKIH0KIAogY2xlYW51cCgpIHsKLQlpcCBuZXQgZXhlYyAmIzM0OyRDTElFTlRfTlMmIzM0OyBwa2lsbCBzY3RwX2NvbGxpc2lvbiAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxCi0JaXAgbmV0IGV4ZWMgJiMzNDskU0VSVkVSX05TJiMzNDsgcGtpbGwgc2N0cF9jb2xsaXNpb24gJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MQomIzQzOwkjIGNsZWFudXBfYWxsX25zIHRlcm1pbmF0ZXMgcnVubmluZyBwcm9jZXNzZXMgaW4gdGhlIG5hbWVzcGFjZXMuCiAJY2xlYW51cF9hbGxfbnMKJiM0MzsJc3lzY3RsIC13cSBuZXQubmV0ZmlsdGVyLm5mX2xvZ19hbGxfbmV0bnM9MAogfQogCiBkb190ZXN0KCkgewpAQCAtODEsNyAmIzQzOzExNCwxOSBAQCBkb190ZXN0KCkgewogCiAjIHJ1biB0aGUgdGVzdCBjYXNlCiB0cmFwIGNsZWFudXAgRVhJVAotc2V0dXAgJmFtcDsmYW1wOyBcCi1lY2hvICYjMzQ7VGVzdCBmb3IgU0NUUCBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOiYjMzQ7ICZhbXA7JmFtcDsgXAotZG9fdGVzdCAmYW1wOyZhbXA7IGVjaG8gJiMzNDtQQVNTISYjMzQ7Ci1leGl0ICQ/CiYjNDM7CiYjNDM7ZWNobyAmIzM0O1Rlc3QgZm9yIFNDVFAgSU5JVF9BQ0sgQ29sbGlzaW9uIGluIG5mX2Nvbm50cmFjazomIzM0OwomIzQzO3RvcG9fc2V0dXAgfHwgZXhpdCAkPwomIzQzO2NvbmZfZGVsYXkgJFNFUlZFUl9OUyBsaW5rMCAyIHx8IGV4aXQgJD8KJiM0MzsKJiM0MztpZiAhIGRvX3Rlc3Q7IHRoZW4KJiM0MzsJZXhpdCAka3NmdF9mYWlsCiYjNDM7ZmkKJiM0MzsKJiM0MztlY2hvICYjMzQ7VGVzdCBmb3IgU0NUUCBJTklUIENvbGxpc2lvbiBpbiBuZl9jb25udHJhY2s6JiMzNDsKJiM0Mzt0b3BvX3NldHVwIHx8IGV4aXQgJD8KJiM0Mztjb25mX2RlbGF5ICRDTElFTlRfTlMgbGluazMgMSB8fCBleGl0ICQ/CiYjNDM7CiYjNDM7aWYgISBkb190ZXN0OyB0aGVuCiYjNDM7CWV4aXQgJGtzZnRfZmFpbAomIzQzO2ZpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLnNoCmluZGV4IGQ4MDM5MDg0OGU4NTA5Li43Yzg1N2EyZTBmMzQ5NCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2gKQEAgLTg1LDExICYjNDM7ODUsMTIgQEAgaXAgLW5ldCAmIzM0OyRuczMmIzM0OyByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTAuMC4zLjEKIGlwIC1uZXQgJiMzNDskbnMzJiMzNDsgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGRlYWQ6Mzo6MQogCiBsb2FkX3J1bGVzZXQoKSB7Ci0JbG9jYWwgbmFtZT0kMQotCWxvY2FsIHByaW89JDIKJiM0MzsJbG9jYWwgZmFtaWx5PSQxCiYjNDM7CWxvY2FsIG5hbWU9JDIKJiM0MzsJbG9jYWwgcHJpbz0kMwogCiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcm91dGVyJiMzNDsgbmZ0IC1mIC9kZXYvc3RkaW4gJmx0OyZsdDtFT0YKLXRhYmxlIGluZXQgJG5hbWUgewomIzQzO3RhYmxlICRmYW1pbHkgJG5hbWUgewogCWNoYWluIG5mcSB7CiAJCWlwIHByb3RvY29sIGljbXAgcXVldWUgYnlwYXNzCiAJCWljbXB2NiB0eXBlIHsgJiMzNDtlY2hvLXJlcXVlc3QmIzM0OywgJiMzNDtlY2hvLXJlcGx5JiMzNDsgfSBxdWV1ZSBudW0gMSBieXBhc3MKQEAgLTIyOCw2ICYjNDM7MjI5LDcgQEAgbmZfcXVldWVfd2FpdCgpCiB0ZXN0X3F1ZXVlKCkKIHsKIAlsb2NhbCBleHBlY3RlZD0mIzM0OyQxJiMzNDsKJiM0MzsJbG9jYWwgZmFtaWx5PSYjMzQ7JDImIzM0OwogCWxvY2FsIGxhc3Q9JiMzNDsmIzM0OwogCiAJIyBzcGF3biBuZl9xdWV1ZSBsaXN0ZW5lcnMKQEAgLTI1NSwxMSAmIzQzOzI1NywxMyBAQCB0ZXN0X3F1ZXVlKCkKIAkJaWYgWyB4JiMzNDskbGFzdCYjMzQ7ICE9IHgmIzM0OyRleHBlY3RlZCBwYWNrZXRzIHRvdGFsJiMzNDsgXTsgdGhlbgogCQkJZWNobyAmIzM0O0ZBSUw6IEV4cGVjdGVkICRleHBlY3RlZCBwYWNrZXRzIHRvdGFsLCBidXQgZ290ICRsYXN0JiMzNDsgMSZndDsmYW1wOzIKIAkJCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyb3V0ZXImIzM0OyBuZnQgbGlzdCBydWxlc2V0CiYjNDM7CQkJZWNobyAtbiAmIzM0OyRUTVBGSUxFMDogJiMzNDs7Y2F0ICYjMzQ7JFRNUEZJTEUwJiMzNDsKJiM0MzsJCQllY2hvIC1uICYjMzQ7JFRNUEZJTEUxOiAmIzM0OztjYXQgJiMzNDskVE1QRklMRTEmIzM0OwogCQkJZXhpdCAxCiAJCWZpCiAJZG9uZQogCi0JZWNobyAmIzM0O1BBU1M6IEV4cGVjdGVkIGFuZCByZWNlaXZlZCAkbGFzdCYjMzQ7CiYjNDM7CWVjaG8gJiMzNDtQQVNTOiBFeHBlY3RlZCBhbmQgcmVjZWl2ZWQgJGxhc3QgKCRmYW1pbHkpJiMzNDsKIH0KIAogbGlzdGVuZXJfcmVhZHkoKQpAQCAtNDAwLDYgJiM0Mzs0MDQsOCBAQCBFT0YKIAogCWtpbGwgJiMzNDskbmZxcGlkJiMzNDsKIAllY2hvICYjMzQ7UEFTUzogaWNtcCYjNDM7bmZxdWV1ZSB2aWEgdnJmJiMzNDsKJiM0MzsJaXAgLW5ldCAmIzM0OyRuczEmIzM0OyBsaW5rIGRlbCB0dnJmCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMxJiMzNDsgbmZ0IGZsdXNoIHJ1bGVzZXQKIH0KIAogc2N0cF9saXN0ZW5lcl9yZWFkeSgpCkBAIC04MTQsMTIgJiM0Mzs4MjAsNTMgQEAgRU9GCiAJY2hlY2tfdGFpbnRlZCAmIzM0O3F1ZXVlIHByb2dyYW0gZXhpdGluZyB3aGlsZSBwYWNrZXRzIHF1ZXVlZCYjMzQ7CiB9CiAKJiM0Mzt0ZXN0X3F1ZXVlX2JyaWRnZSgpCiYjNDM7ewomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zcm91dGVyJiMzNDsgYWRkciBmbHVzaCBkZXYgdmV0aDAKJiM0MzsJaXAgLW5ldCAmIzM0OyRuc3JvdXRlciYjMzQ7IGFkZHIgZmx1c2ggZGV2IHZldGgxCiYjNDM7CiYjNDM7CWlwIC1uZXQgJiMzNDskbnNyb3V0ZXImIzM0OyBsaW5rIGFkZCBicjAgdHlwZSBicmlkZ2UKJiM0MzsJaXAgLW5ldCAmIzM0OyRuc3JvdXRlciYjMzQ7IGxpbmsgc2V0IHZldGgwIG1hc3RlciBicjAKJiM0MzsJaXAgLW5ldCAmIzM0OyRuc3JvdXRlciYjMzQ7IGxpbmsgc2V0IHZldGgxIG1hc3RlciBicjAKJiM0MzsKJiM0MzsJaXAgLW5ldCAmIzM0OyRuc3JvdXRlciYjMzQ7IGxpbmsgc2V0IGJyMCB1cAomIzQzOwomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zcm91dGVyJiMzNDsgYWRkciBhZGQgMTAuMC4yLjEvMTYgZGV2IGJyMAomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zcm91dGVyJiMzNDsgYWRkciBhZGQgZGVhZDoyOjoxLzY0IGRldiBicjAgbm9kYWQKJiM0MzsKJiM0MzsJaXAgLW5ldCAmIzM0OyRuczEmIzM0OyBhZGRyIGZsdXNoIGRldiBldGgwCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMyJiMzNDsgYWRkciBmbHVzaCBkZXYgZXRoMAomIzQzOwomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIDEwLjAuMS4xLzE2IGRldiBldGgwCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgYWRkciBhZGQgZGVhZDoyOjoyLzY0IGRldiBldGgwIG5vZGFkCiYjNDM7CiYjNDM7CWlwIC1uZXQgJiMzNDskbnMyJiMzNDsgYWRkciBhZGQgMTAuMC4yLjk5LzE2IGRldiBldGgwCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMyJiMzNDsgYWRkciBhZGQgZGVhZDoyOjo5OS82NCBkZXYgZXRoMCBub2RhZAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcm91dGVyJiMzNDsgbmZ0IGZsdXNoIHJ1bGVzZXQKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2Ni5jb25mLmFsbC5mb3J3YXJkaW5nPTAgJmd0OyAvZGV2L251bGwKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgwLmZvcndhcmRpbmc9MCAmZ3Q7IC9kZXYvbnVsbAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcm91dGVyJiMzNDsgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDEuZm9yd2FyZGluZz0wICZndDsgL2Rldi9udWxsCiYjNDM7CiYjNDM7CWlmICEgdGVzdF9waW5nO3RoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBuZXRucyBicmlkZ2UgY29ubmVjdGl2aXR5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJHJldAomIzQzOwlmaQomIzQzOwomIzQzOwlsb2FkX3J1bGVzZXQgJiMzNDticmlkZ2UmIzM0OyAmIzM0O2ZpbHRlciYjMzQ7IDEwCiYjNDM7CXRlc3RfcXVldWUgMTAgJiMzNDticmlkZ2UmIzM0OwomIzQzOwomIzQzOwlsb2FkX3J1bGVzZXQgJiMzNDticmlkZ2UmIzM0OyAmIzM0O2ZpbHRlcjImIzM0OyAyMAomIzQzOwl0ZXN0X3F1ZXVlIDIwICYjMzQ7YnJpZGdlJiMzNDsKJiM0Mzt9CiYjNDM7CiBpcCBuZXRucyBleGVjICYjMzQ7JG5zcm91dGVyJiMzNDsgc3lzY3RsIG5ldC5pcHY2LmNvbmYuYWxsLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgwLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgxLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3JvdXRlciYjMzQ7IHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgyLmZvcndhcmRpbmc9MSAmZ3Q7IC9kZXYvbnVsbAogCi1sb2FkX3J1bGVzZXQgJiMzNDtmaWx0ZXImIzM0OyAwCiYjNDM7bG9hZF9ydWxlc2V0ICYjMzQ7aW5ldCYjMzQ7ICYjMzQ7ZmlsdGVyJiMzNDsgMAogCiBpZiB0ZXN0X3Bpbmc7IHRoZW4KIAkjIHF1ZXVlIGJ5cGFzcyB3b3JrcyAocnVsZXMgd2VyZSBza2lwcGVkLCBubyBsaXN0ZW5lcikKQEAgLTg0MiwxMSAmIzQzOzg4OSwxMSBAQCBsb2FkX2NvdW50ZXJfcnVsZXNldCAxMAogIyAxeCBpY21wIHByZXJvdXRpbmcsZm9yd2FyZCxwb3N0cm91dGluZyAtJmd0OyAzIHF1ZXVlIGV2ZW50cyAoNiBpbmNsLiByZXBseSkuCiAjIDF4IGljbXAgcHJlcm91dGluZyxpbnB1dCxvdXRwdXQgcG9zdHJvdXRpbmcgLSZndDsgNCBxdWV1ZSBldmVudHMgaW5jbC4gcmVwbHkuCiAjIHNvIHdlIGV4cGVjdCB0aGF0IHVzZXJzcGFjZSBwcm9ncmFtIHJlY2VpdmVzIDEwIHBhY2tldHMuCi10ZXN0X3F1ZXVlIDEwCiYjNDM7dGVzdF9xdWV1ZSAxMCAmIzM0O2luZXQmIzM0OwogCiAjIHNhbWUuICBXZSBxdWV1ZSB0byBhIHNlY29uZCBwcm9ncmFtIGFzIHdlbGwuCi1sb2FkX3J1bGVzZXQgJiMzNDtmaWx0ZXIyJiMzNDsgMjAKLXRlc3RfcXVldWUgMjAKJiM0Mztsb2FkX3J1bGVzZXQgJiMzNDtpbmV0JiMzNDsgJiMzNDtmaWx0ZXIyJiMzNDsgMjAKJiM0Mzt0ZXN0X3F1ZXVlIDIwICYjMzQ7aW5ldCYjMzQ7CiBpcCBuZXRucyBleGVjICYjMzQ7JG5zMSYjMzQ7IG5mdCBmbHVzaCBydWxlc2V0CiAKIHRlc3RfdGNwX2ZvcndhcmQKQEAgLTg2Myw0ICYjNDM7OTEwLDcgQEAgdGVzdF9xdWV1ZV9zdHJlc3MKIHRlc3RfaWNtcF92cmYKIHRlc3RfcXVldWVfcmVtb3ZhbAogCiYjNDM7IyB0dXJucyByb3V0ZXIgaW50byBhIGJyaWRnZQomIzQzO3Rlc3RfcXVldWVfYnJpZGdlCiYjNDM7CiBleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5ldGZpbHRlciBQYXRjaCBTZXJpZXMgUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgbmV0ZmlsdGVyIHBhdGNoIHNlcmllcy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgc3Vic3RhbnRpYWwgc2V0IG9mIGNoYW5nZXMgYWNyb3NzIHZhcmlvdXMgY29tcG9uZW50cywgdG91Y2hpbmcgYm90aCBjb3JlIGNvbm50cmFjayBhbmQgdGhlIG5ld2VyIG5mdGFibGVzIGluZnJhc3RydWN0dXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgbWlub3IgdHdlYWssIHNvIHdlIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKRmlyc3QsIEkgc2VlIHNldmVyYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHh0YWJsZXNgIGluZnJhc3RydWN0dXJlLCBwcmltYXJpbHkgaW4gdGhlIGB4dF9tdGNoa19wYXJhbWAsIGB4dF9tdGR0b3JfcGFyYW1gLCBgeHRfdGdjaGtfcGFyYW1gLCBhbmQgYHh0X2FjdGlvbl9wYXJhbWAgc3RydWN0dXJlcy4gIFRoZSBhZGRpdGlvbiBvZiBgZmFtaWx5YCwgYG5mdF9jb21wYXRgLCBgbmV0YCwgYG1hdGNoYCwgYW5kIG90aGVyIGZpZWxkcyBpbmRpY2F0ZXMgYSBkZWVwZXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgbmV0d29yayBuYW1lc3BhY2UgYW5kIG5mdGFibGVzIGNvbXBhdGliaWxpdHkuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhpcyBzZXJpZXMgaXMgZmFjaWxpdGF0aW5nIGEgY2xvc2VyIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgbGVnYWN5IGB4dGFibGVzYCBhbmQgdGhlIG5ld2VyIG5mdGFibGVzIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHdhdGNoaW5nIHRoZSBgbmZ0X2NvbXBhdGAgZmxhZ3MgY2xvc2VseSwgYXMgdGhvc2UgYXJlIG9mdGVuIGluZGljYXRvcnMgb2YgbGVnYWN5IGNvZGUgdGhhdCBzdGlsbCBuZWVkcyBzdXBwb3J0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBuZl9jb25udHJhY2tfZXhwZWN0LmhgLCBgbmZfY29ubnRyYWNrX2hlbHBlci5oYCwgYW5kIHJlbGF0ZWQgZmlsZXMgYXJlIGFsc28gc2lnbmlmaWNhbnQuIEFkZGluZyB0aGUgYG1hc3Rlcl90dXBsZWAgZmllbGQgdG8gYG5mX2Nvbm50cmFja19leHBlY3RgIGFuZCBpbmNvcnBvcmF0aW5nIHRoZSBgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkYCBtYWNybyBzdWdnZXN0cyByZWZhY3RvcmluZyBhbmQgYSBtb3ZlIHRvd2FyZHMgbW9yZSBleHBsaWNpdCBoYW5kbGluZyBvZiBjb25uZWN0aW9uIGV4cGVjdGF0aW9ucyBhbmQgaGVscGVyIGRlcHJlY2F0aW9uLCBsaWtlbHkgaW4gcHJlcGFyYXRpb24gZm9yIHJlbW92aW5nIHNvbWUgbGVnYWN5IGZ1bmN0aW9uYWxpdHkuIFRoZSBjaGFuZ2VzIGluIGBuZl9jdF9leHBlY3RfaW5pdGAgYW5kIGBfX25mX2N0X2V4cGVjdF9jaGVja2AgZGVzZXJ2ZSBhdHRlbnRpb24sIGFzIHRoZSB1c2Ugb2YgYGRlZmF1bHRfZXhwX3BvbGljeWAgaWYgYGhlbHBlcmAgaXMgTlVMTCBoYXMgc3VidGxlIGJ1dCBpbXBvcnRhbnQgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZXNlIGNoYW5nZXMgdGhvcm91Z2hseS4KClRoZSBjaGFuZ2VzIGluIGBuZl9jb25uY291bnQuY2AsIHNwZWNpZmljYWxseSB0aGUgc2hpZnQgZnJvbSBgc2tiLSZndDtza2JfaWlmICE9IExPT1BCQUNLX0lGSU5ERVhgIHRvIGB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cylgIGluIGBfX25mX2Nvbm5jb3VudF9hZGRgLCBsb29rcyBsaWtlIGEgcGVyZm9ybWFuY2UvYWNjdXJhY3kgb3B0aW1pemF0aW9uLiBUaGlzIGRlc2VydmVzIGEgY2xvc2VyIGxvb2sgdG8gc2VlIGhvdyBpdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4gTGlrZXdpc2UsIGNoYW5nZXMgdG8gYG5mX2Nvbm50cmFja19icm9hZGNhc3QuY2AgYW5kIGBuZl9jb25udHJhY2tfbmV0bGluay5jYCwgd2hpY2ggbm93IHVzZSBgZXhwLSZndDttYXN0ZXJfdHVwbGVgIGhlYXZpbHksIHdhcnJhbnQgdGVzdGluZywgYXMgd2VsbCBhcyB0aGUgYWRkaXRpb24gdG8gYG5mX2Nvbm50cmFja19wcHRwLmNgIGFuZCBgbmZfY29ubnRyYWNrX2lyYy5jYCB0aGF0IGRlcHJlY2F0ZSB0aGUgaGVscGVyLgoKVGhlIGBuZl9mbG93X3RhYmxlX2lwLmNgIGNoYW5nZSwgd2l0aCB0aGUgYWRkZWQgYGlwaC0mZ3Q7aWhsICZsdDsgNWAgY2hlY2sgaW4gYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2AsIGxvb2tzIGxpa2UgYSBwYWNrZXQgc2FuaXR5IGNoZWNrLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgYSBjcmFzaCBvciBzb21lIG90aGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3IuICBJIGFsc28gc2VlIHNvbWUgYWRkZWQgY2hlY2tzIGluIGBuZl9uYXRfY29yZS5jYCBmb3IgYCFuZl9uYXRfaG9va2AgaW4gYG5mX25hdF9yZWdpc3Rlcl9mbmAuIFRoZXNlIGFyZSBiYXNpYyBzYW5pdHkgY2hlY2tzIHRoYXQgc2hvdWxkIGJlIHRlc3RlZCwgYnV0IHRoZXkgc2hvdWxkIGJlIGVhc2lseSBmdXp6YWJsZS4KClRoZSBuZnRhYmxlcyBjaGFuZ2VzLCBlc3BlY2lhbGx5IGluIGBuZnRfY29tcGF0LmNgIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgIGFuZCBpdHMgaW50ZWdyYXRpb24gd2l0aCBgTkZQUk9UT19CUklER0VgLCBzdHJvbmdseSBpbmRpY2F0ZSBmdXJ0aGVyIGJyaWRnZSBzdXBwb3J0IGFuZCBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSB1cGdyYWRlcy4gIEkmIzM5O20gYWxzbyBzZWVpbmcgYW4gZXh0ZW5zaW9uIG9uIHRoZSB0aW1lb3V0IGhhbmRsaW5nIGluIGBuZnRfY3QuY2Agd2l0aCBgbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldGAgYmVpbmcgYWRkZWQsIGFuZCBjaGFuZ2VzIHRvIGhvdyB0aGUgdGltZW91dCBpcyB1c2VkIGluIHNldmVyYWwgbG9jYXRpb25zLiBDaGFuZ2VzIGluIGBuZnRfc3lucHJveHkuY2Agc2ltcGxpZnlpbmcgYG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9uc2Agd2l0aCByZW1vdmFsIG9mIHRoZSBgcHJpdmAgYXJndW1lbnQgc2VlbSBmYWlybHkgbWlub3IuCgpGaW5hbGx5LCB0aGUgdXBkYXRlcyB0byB0aGUgc2VsZi10ZXN0cyBpbiBgY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoYCBhbmQgYG5mdF9xdWV1ZS5zaGAgYXJlIHBvc2l0aXZlIHNpZ25zLiBHb29kIHRlc3RzIGFyZSBjcml0aWNhbCB0byB2ZXJpZnkgYWxsIHRoaXMsIHNvIHRoZXkgc2hvdWxkIGJlIGludGVncmF0ZWQgaW50byBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZS4KCioqRnVuY3Rpb25hbCBDaGFuZ2VzIGFuZCBDb25maWd1cmF0aW9uKioKCkZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGUgbW9zdCBpbnRlcmVzdGluZyBjaGFuZ2VzIGFyZToKCiogICBgbmZfY29ubmNvdW50LmNgOiAgQWx0ZXJlZCBsb2dpYyBpbiBgX19uZl9jb25uY291bnRfYWRkYC4KKiAgIGBuZl9jb25udHJhY2tfZXhwZWN0LmNgOiBNb2RpZmljYXRpb24gdG8gYF9fbmZfY3RfZXhwZWN0X2NoZWNrYAoqICAgYG5mX2Nvbm50cmFja19oZWxwZXIuY2A6IENoYW5nZXMgaW4gYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAuCiogICBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2A6ICBDaGFuZ2VzIGFyb3VuZCBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgIGFuZCBgZXhwLSZndDttYXN0ZXJfdHVwbGVgLgoqICAgYG5mX2Zsb3dfdGFibGVfaXAuY2A6ICBUaGUgbmV3IGNoZWNrIGluIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLgoqICAgYG5mdF9jb21wYXQuY2A6IFRoZSBhZGRpdGlvbiBvZiBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgLgoqICAgYG5mdF9jdC5jYDogVGhlIGFkZGVkCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25uY291bnQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT03OT1vYmotJChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKSAmIzQzOz0gbmZfc3lucHJveHlfY29yZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgwLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfTkVURklMVEVSX0NPTk5DT1VOVCkgJiM0Mzs9IG5mX2Nvbm5jb3VudC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgT2JqZWN0IEZpbGVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4gVGhlIGNsdWUgaXMgaW4gdGhlIGZpbGUgbmFtZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgbmZfZmxvd190YWJsZV9pcC5vYCBhbmQgYW55IG90aGVyIHNpbWlsYXIgb2JqZWN0IGZpbGVzLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmbG93IHRhYmxlIGZvciBJUCB0cmFmZmljLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29kZSBvcmdhbml6YXRpb24sIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBlc3BlY2lhbGx5LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBlcmZvcm1hbmNlIGFuZCBzY2FsYWJpbGl0eSwgc28gSSBuZWVkIGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBzZWN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGxpZXMsIHNvIEkgY2FuIGV4dHJhcG9sYXRlIHdoYXQgZWxzZSBtaWdodCBleGlzdCBpbiB0aGUgbGFyZ2VyIGtlcm5lbCBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX2lwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQyPW9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDQtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjkzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqRXhhbWluaW5nIE5ldGZpbHRlciBDb21wYXRpYmlsaXR5IE1vZHVsZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGEgZmV3IE5ldGZpbHRlciBtb2R1bGVzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBjaGVjayBvbiBgbmZ0X2NvbXBhdC5vYCwgdGhlbiBtb3ZlIG9uIHRvIGBuZnRfY3Qub2AsIGFuZCBmaW5hbGx5LCBJJiMzOTtsbCBleGFtaW5lIGBuZnRfc3lucHJveHkub2AuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBpZGVudGlmeSBhbnl0aGluZyB0aGF0IG5lZWRzIHR3ZWFraW5nIG9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gVGhlc2UgYXJlIGtleSBjb21wb25lbnRzLCBzbyB0aG9yb3VnaG5lc3MgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIGFuZCBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY29tcGF0Lm98bmZ0X2N0Lm98bmZ0X3N5bnByb3h5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTA4PW9iai0kKENPTkZJR19ORl9UQUJMRVMpXHRcdCYjNDM7PSBuZl90YWJsZXMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX05GVF9DT01QQVQpXHQmIzQzOz0gbmZ0X2NvbXBhdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExMC1vYmotJChDT05GSUdfTkZUX0NPTk5MSU1JVClcdCYjNDM7PSBuZnRfY29ubmxpbWl0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ORlRfTlVNR0VOKVx0JiM0Mzs9IG5mdF9udW1nZW4ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzMj1vYmotJChDT05GSUdfTkZUX1hGUk0pXHRcdCYjNDM7PSBuZnRfeGZybS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzMzpvYmotJChDT05GSUdfTkZUX1NZTlBST1hZKVx0JiM0Mzs9IG5mdF9zeW5wcm94eS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBuZl9jb25udHJhY2tfbmV0bGluay5vYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXJnZXQgaXMgYG5mX2Nvbm50cmFja19uZXRsaW5rLm9gLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IG5ldGxpbmsgc29ja2V0cyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBsaWtlbHkgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgYmV0d2VlbiB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRoZSBrZXJuZWwmIzM5O3MgY29ubmVjdGlvbiB0cmFja2luZyBzdWJzeXN0ZW0uIEkgZXhwZWN0IHRvIHNlZSBldmlkZW5jZSBvZiB0aGUgbmV0bGluayBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiBoZXJlIOKAkyB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmVzLCB0aGUgYXR0cmlidXRlIGhhbmRsaW5nLCBhbmQgdGhlIGxpa2VseSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUgaXRzZWxmLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gZXhhbWluZSBob3cgaXQgaGFuZGxlcyBjb25uZWN0aW9uIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG1vZGlmaWNhdGlvbiBldmVudHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCByZWxhdGVkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllczogQXJlIHRoZXJlIGFueSBidWZmZXIgb3ZlcmZsb3dzIGluIGhvdyBpdCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgZGF0YT8gRG9lcyBpdCBjb3JyZWN0bHkgdmFsaWRhdGUgaW5wdXQgYmVmb3JlIHBhc3NpbmcgaXQgdG8ga2VybmVsIGludGVybmFscz8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgd2hlbiBoYW5kbGluZyBjb25jdXJyZW50IG5ldGxpbmsgbWVzc2FnZXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIG1vZHVsZSYjMzk7cyBleHBvcnRlZCBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIG5ldGxpbmsgbWVzc2FnZSBoYW5kbGluZyBhbmQgZGF0YSBwYXJzaW5nLiBJdCYjMzk7bGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCYjMzk7cyBjb25jdXJyZW5jeSBtb2RlbCAoc3BpbmxvY2tzLCBSQ1UsIGV0Yy4pIHRvIGV2YWx1YXRlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfbmV0bGluay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICYjNDM7PSBuZl9jb25udHJhY2sub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LKSAmIzQzOz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjU4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBDb25maWd1cmF0aW9ucyBhbmQgRnVuY3Rpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNldCBvZiBjb25maWd1cmF0aW9uczogYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktgLCBgTkZfRkxPV19UQUJMRWAsIGBORlRfQ09NUEFUYCwgYE5GVF9DVGAsIGFuZCBgTkZUX1NZTlBST1hZYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBpbnRlcmRlcGVuZGVuY2llcyBhbmQgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25uZWN0ZWQgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLgoKTGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoYXQgbGlrZWx5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYy4gSSBzZWU6IGBfX25mX2Nvbm5jb3VudF9hZGRgLCB3aGljaCBwcm9iYWJseSBoYW5kbGVzIGNvbm5lY3Rpb24gY291bnRpbmc7IGBfX25mX2N0X2V4cGVjdF9jaGVja2AsIGludm9sdmVkIGluIGNvbm5lY3Rpb24gdHJhY2tpbmcgZXhwZWN0YXRpb25zOyBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgZGVhbGluZyB3aXRoIGhlbHBlciBtb2R1bGVzOyBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgLCB3aGljaCBsaWtlbHkgdGllcyBpbnRvIG5ldGxpbmsgY29uZmlndXJhdGlvbjsgYGN0bmV0bGlua19hbGxvY19leHBlY3RgIGZvciBhbGxvY2F0aW5nIGV4cGVjdGF0aW9ucyB2aWEgbmV0bGluazsgYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2Agc2VlbXMgc3BlY2lmaWMgdG8gSVB2NCB0dW5uZWwgcHJvdG9jb2xzOyBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgIGZvciBicmlkZ2UgdmFsaWRhdGlvbnMgaW4gbmZ0YWJsZXM7IGFuZCwgdGhlIG5mdGFibGVzIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIHN5bnByb3h5IGZ1bmN0aW9uczogYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAsIGBuZnRfc3lucHJveHlfZXZhbF92NGAsIGFuZCBgbmZ0X3N5bnByb3h5X2V2YWxfdjZgLiBUaGF0IHNldCBnaXZlcyBtZSBhIGdyZWF0IHBpY3R1cmUgb2YgdGhlIHBpZWNlcy4KCk5vdyBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYW5kIGxvb2sgZm9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBsaW5rZWQgdG8gdGhvc2UgcHJpbWFyeSBmdW5jdGlvbnMuIEkgYW0gc2VlaW5nIGBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHBgLCBgbmZfY3RfZXhwZWN0X2luaXRgLCBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCwgYW5kIGBuZnRfdGFyZ2V0X3NlbGVjdF9vcHNgLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgYW55IGNoYW5nZXMgbWFkZSB0byBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYC4gVGhpcyBpcyBnaXZpbmcgbWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGUgcGllY2VzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19pcDRfdHVubmVsX3Byb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MzA5PXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfZmxvd194bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0zMTgtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzozMTk6c3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0zMjAtXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9Mzg3PXN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDE2LVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0MTc6XHRcdHJldCA9IG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhjdHgsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00MTgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY2OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE5ldHdvcmsgRmxvdyBFbmNhcHN1bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBmdW5jdGlvbiwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBzdGF0aWNhbGx5IGNhbGxlZCBieSBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiB0cmFjaW5nIG5ldHdvcmsgZW5jYXBzdWxhdGlvbiBiZWhhdmlvci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggaG93IHRoZSBicmlkZ2UgdGFyZ2V0IGlzIHZhbGlkYXRlZC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz0zNTM9c3RhdGljIGludCBuZnRfdGFyZ2V0X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtMzk5LVxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM6NDAwOnN0YXRpYyBpbnQgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTQwMS1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz05MDM9bmZ0X3RhcmdldF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtOTU0LVx0XHRvcHMtXHUwMDNlZXZhbCA9IG5mdF90YXJnZXRfZXZhbF9icmlkZ2U7XG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzo5NTU6XHRcdG9wcy1cdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlO1xubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtOTU2LVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgKioKCkFscmlnaHQsIHNvIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gYWN0aW5nIGFzIGEgY2FsbGJhY2suIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBmb2N1cyBwb2ludCBmb3IgYW5hbHlzaXMg4oCTIGl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgd2l0aGluIHRoZSBicmlkZ2UmIzM5O3Mgb3BlcmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGl0LCBzZWUgd2hhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdmFsaWRhdGluZy4gTXkgZXhwZWN0YXRpb24gaXMgdGhpcyBmdW5jdGlvbiBpcyB2YWxpZGF0aW5nIHRoYXQgdGhlIGRhdGEgdGhhdCBpcyBiZWluZyBicmlkZ2VkIGlzIGxlZ2l0aW1hdGUuCgpMZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBicmlkZ2Ugb3BlcmF0ZXMsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb25udHJhY2sgY29udGV4dC4gTGV0JiMzOTtzIGxvb2sgYXQgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFzcGVjdHMgYXJlIHNldCB1cC4gSSYjMzk7bSBlYWdlciB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhwZWN0YXRpb25zIGFyZSBpbml0aWFsaXplZCB0byBzZWUgaWYgdGhpcyBleHBsYWlucyB0aGUgYnJpZGdlIGluIGFueSB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEyMTg9c3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIyOC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTIyOTpzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIzMC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM2NC1cdC5ldmFsXHRcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTM2NTpcdC5pbml0XHRcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM2Ni1cdC5kZXN0cm95XHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjU0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzLCBwcmVzZW50ZWQgYXMgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTkZ0YWJsZXMgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpSaWdodCwgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgIGFuZCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAgLSB0aG9zZSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMuIFRoZXkgY2xlYXJseSBkZWZpbmUgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBldmFsdWF0aW9uIHN0ZXBzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGV4cGVjdGF0aW9ucywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIHRvIHJlc2lkZSB3aGVuIGRlYWxpbmcgd2l0aCBleHBlY3RlZCBjb25uZWN0aW9ucy4gTGV0JiMzOTtzIG1ha2UgYSBub3RlIG9mIHRob3NlIGFzIG91ciBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpbnRvIHRoaXMuCgpPa2F5LCBsZXQmIzM5O3Mgbm93IHN3aXRjaCBvdXIgYXR0ZW50aW9uIG92ZXIgdG8gYG5mdF9zeW5wcm94eV9ldmFsX3Y0YCBzaW5jZSB0aGlzIHNlZW1zIGxpa2UgYSByZWxhdGVkIGFuZCBpbnRlcmVzdGluZyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3N5bnByb3h5X2V2YWxfdjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jPTI0PXN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTQzLVxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYzo0NDpzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92NChjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy00NS1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYz0xMDY9c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTE0MC1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYzoxNDE6XHRcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcdTAwMjZfdGNwaCwgXHUwMDI2b3B0cyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTE0Mi1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDEzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRm9jdXNpbmcgb24gS2V5IFN5bWJvbHMqKgoKUmlnaHQsIGBuZnRfc3lucHJveHlfZXZhbF92NGAgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAgc2VlbSBsaWtlIGdvb2QganVtcGluZy1vZmYgcG9pbnRzLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZXhhbWluZSBjbG9zZWx5LCB0aGV5IHByb2JhYmx5IGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVzZSBhcyBzdGFydGluZyBwb2ludHMgdG8gd29yayBmcm9tLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGdlbmVyYWxpemVkLgoKTm93LCBsZXQmIzM5O3MgYWxzbyBoYXZlIGEgbG9vayBhdCB0aGUgYF9fbmZfY29ubmNvdW50X2FkZGAgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25mX2Nvbm5jb3VudF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTEzMD1zdGF0aWMgYm9vbCBnZXRfY3Rfb3JfdHVwbGVfZnJvbV9za2Ioc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTY2LVxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzoxNjc6c3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy0xNjgtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTI3Nj1pbnQgbmZfY29ubmNvdW50X2FkZF9za2Ioc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjg0LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmxpc3QtXHUwMDNlbGlzdF9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6Mjg1Olx0cmV0ID0gX19uZl9jb25uY291bnRfYWRkKG5ldCwgc2tiLCBsM251bSwgbGlzdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTI4Ni1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxpc3QtXHUwMDNlbGlzdF9sb2NrKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jPTUzMT1jb3VudF90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTU4MC1cdC8qIHNhbWUgc291cmNlIG5ldHdvcmsgLVx1MDAzZSBiZSBjb3VudGVkISAqL1xubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYzo1ODE6XHRyZXQgPSBfX25mX2Nvbm5jb3VudF9hZGQobmV0LCBza2IsIGwzbnVtLCBcdTAwMjZyYmNvbm4tXHUwMDNlbGlzdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTU4Mi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJiY29ubi1cdTAwM2VsaXN0Lmxpc3RfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipNeSBMaW5lIG9mIElucXVpcnk6IE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4uIEZvY3VzaW5nIG9uIGBfX25mX2Nvbm5jb3VudF9hZGRgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGZ1bmN0aW9uIGlzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIOKAkyBhIGNyaXRpY2FsIGFyZWEgZm9yIGFuYWx5emluZyBjb25uZWN0aW9uIHN0YXRlIGFuZCBwZXJmb3JtYW5jZS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgcmVsYXRpb24gdGhhdCBpdCBoYXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gTmV4dCB1cCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBfX25mX2N0X2V4cGVjdF9jaGVja2AuIEkmIzM5O20gY3VyaW91cyBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgc29tZWhvdy4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGV4cGVjdGF0aW9uIG1hbmFnZW1lbnQsIHBlcmhhcHMgZGVhbGluZyB3aXRoIHJlbGF0ZWQgY29ubmVjdGlvbnMgb3IgY29ubmVjdGlvbiB0cmFja2luZyBvZiBwcm90b2NvbHMgdGhhdCByZXF1aXJlIG11bHRpcGxlIHN0cmVhbXMgb3IgaW50ZXJhY3Rpb25zLiBFeGFtaW5pbmcgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3Qgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgb3ZlcmFsbCB0cmFja2luZyBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZl9jdF9leHBlY3RfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYz00Mzg9c3RhdGljIHZvaWQgZXZpY3Rfb2xkZXN0X2V4cGVjdChzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy00NTktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzo0NjA6c3RhdGljIGlubGluZSBpbnQgX19uZl9jdF9leHBlY3RfY2hlY2soc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTQ2MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYz01MTk9aW50IG5mX2N0X2V4cGVjdF9yZWxhdGVkX3JlcG9ydChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTUzMS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jOjUzMjpcdHJldCA9IF9fbmZfY3RfZXhwZWN0X2NoZWNrKGV4cGVjdCwgbWFzdGVyX2hlbHAsIGZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTUzMy1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKk15IExpbmUgb2YgSW5xdWlyeTogRXhwZWN0YXRpb24gQ2hlY2tzIGFuZCBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcnMqKgoKUmlnaHQsIHNvIEkgc2VlIGEgcHJvbWlzaW5nIGxlYWQgd2l0aCBgX19uZl9jdF9leHBlY3RfY2hlY2tgLiBUaGF0JiMzOTtzIGEgc29saWQgZnVuY3Rpb24gdG8ga2VlcCBpbiBtaW5kLCBhIGxpa2VseSBrZXkgcGllY2UgaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHV6emxlLiBJdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCkJ1dCBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQuIFdoYXQmIzM5O3MgdGhlIHdpZGVyIGNvbnRleHQ/IEdpdmVuIHRoYXQgZXhwZWN0YXRpb25zIGFyZSBhIHBpZWNlIG9mIHRoZSBsYXJnZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCBob3cgaGVscGVycyBhcmUgcmVnaXN0ZXJlZC4gU28sIGxldCYjMzk7cyBhbHNvIGRlbHZlIGludG8gYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgbmV4dCBzdGVwLCBhcyBpdCBsaWtlbHkgZGVmaW5lcyB0aGUgbWVjaGFuaXNtcyBmb3Igc2V0dGluZyB1cCBhbmQgZW5hYmxpbmcgdGhlc2UgaGVscGVycy4gVW5kZXJzdGFuZGluZyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHdoZXJlIGV4cGVjdGF0aW9ucyBmaXQgaW4sIGFuZCBob3cgdG8gcG90ZW50aWFsbHkgaW5mbHVlbmNlIG9yIHdvcmsgd2l0aCB0aGVtLiBNeSBnb2FsLCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9uIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9MzYyPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9sb2cpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzYzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MzY0OmludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtMzY1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTQtfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDE1OkVYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3Rlcik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz00MTc9aW50IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQzMDpcdGVyciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihuZXdfaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQzMS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTE5PWludCBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTUzNS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjUzNjpcdFx0ZXJyID0gX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKG5ld19oZWxwZXIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTM3LVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0yMjA9bmZubF9jdGhlbHBlcl9jcmVhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODAtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjI4MTpcdHJldCA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihoZWxwZXIpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yODItXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE2MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAgaXMgYSByZWFsbHkgc29saWQgc3RhcnRpbmcgcG9pbnQgaGVyZS4gVGhhdCBmdW5jdGlvbiBpcyB0aGUga2V5IHRvIGhvb2tpbmcgdXAgbmV3IGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc28gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgaXMgZGVmaW5pdGVseSBjcnVjaWFsLgoKRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmAgbmV4dC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgdXNlcnNwYWNlIHdvdWxkIGxpa2VseSB1c2UgdG8gbW9kaWZ5IG9yIHJlZ2lzdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc28gSSBiZXQgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdWx0aW1hdGVseSBnZXRzIGluaXRpYXRlZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdHdvIHBpZWNlcyB3b3JrIGluIHRhbmRlbS4gTGV0JiMzOTtzIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSByZWdpc3RyYXRpb24gcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19jaGFuZ2VfaGVscGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTE5MDQ9Y3RuZXRsaW5rX3NldHVwX25hdChzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMTkyNS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoxOTI2OnN0YXRpYyBpbnQgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5MjctXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTIxNjI9Y3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMTcxLVx0aWYgKGNkYVtDVEFfSEVMUF0pIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyMTcyOlx0XHRlcnIgPSBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihjdCwgY2RhKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yMTczLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yNzkzPWN0bmV0bGlua19nbHVlX3BhcnNlX2N0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI4MDctXHRpZiAoY2RhW0NUQV9IRUxQXSkge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI4MDg6XHRcdGVyciA9IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKGN0LCBjZGEpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI4MDktXHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIGBjdG5ldGxpbmtgIEZvY3VzKioKCk9rYXksIHNvIGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmAgc2VlbXMgbGlrZSBhIHNvbGlkIGVudHJ5IHBvaW50IGZvciBteSBjdXJyZW50IGludmVzdGlnYXRpb24uIFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgZm9jdXMgaW5pdGlhbGx5LiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mLi4uIHdoYXRldmVyIGl0IGlzIGBjdG5ldGxpbmtgIGlzIG1hbmFnaW5nLgoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAsIEkgd2FudCB0byBwaXZvdCBhbmQgZXhwbG9yZSB3aGVyZSBleHBlY3RhdGlvbiBhbGxvY2F0aW9uIGlzIGRvbmUsIHdoaWNoIGlzIHdoeSBJIHdhbnQgdG8gY2hlY2sgYGN0bmV0bGlua19hbGxvY19leHBlY3RgLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgZnVuY3Rpb24gY2FsbHMgYW5kIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcy4gVGhpcyBzZWVtcyBsaWtlIGl0IHdpbGwgYmUgYSBnb29kIHBpZWNlIG9mIHRoZSBwdXp6bGUgdG8gZm9sbG93IG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYzMD1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI2MzE6Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MzItXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqYXNzaWduX2hlbHBlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mjg1Nj1jdG5ldGxpbmtfZ2x1ZV9hdHRhY2hfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODg4Olx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdCgoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICopY2RhLCBjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODg5LVx0XHRcdFx0ICAgICBhc3NpZ25faGVscGVyLCBcdTAwMjZ0dXBsZSwgXHUwMDI2bWFzayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM1MTk9c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNTIwOmN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzUyMS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphc3NpZ25faGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNjAwPWN0bmV0bGlua19jcmVhdGVfZXhwZWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYzMS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjMyOlx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjZGEsIGN0LCBOVUxMLCBcdTAwMjZ0dXBsZSwgXHUwMDI2bWFzayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYzMy1cdGlmIChJU19FUlIoZXhwKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGlzIGtlcm5lbCBuZXRsaW5rIGNvZGUuIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCDigJMgdGhhdCBmZWVscyBsaWtlIGEgZ29vZCwgZm9jdXNlZCBzcG90IHRvIHJlYWxseSBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBleHBlY3RhdGlvbiBtYW5hZ2VtZW50LiBUaGF0IGZ1bmN0aW9uIGNhbGwgc2VlbXMgbGlrZSBhIGtleSBwaWVjZS4KClJpZ2h0LCBzbyB3aGVyZSYjMzk7cyB0aGUgcmVnaXN0cmF0aW9uPyBOb3csIGxldCYjMzk7cyBzZWUsIHRoYXQgYG5mX25hdF9yZWdpc3Rlcl9mbmAgY2FsbC4uLiBsZXQmIzM5O3MgY2hlY2sgdGhhdCByZWdpc3RyYXRpb24gZnVuY3Rpb24uLi4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIHBhdGggZnJvbSB0aGVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiB3b3JrcyB3aXRoIHRoaXMgbmV0bGluayBhbGxvY2F0aW9uIHBpZWNlLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gc2VlIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIE5BVCBhbmQgY29ubmVjdGlvbiB0cmFja2luZy4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9uYXRfcmVnaXN0ZXJfZm4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM9MTE2OT1zdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE3My1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYzoxMTc0OmludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE3NS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3JpZ19uYXRfb3BzLCB1bnNpZ25lZCBpbnQgb3BzX2NvdW50KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM9Nzk3PWludCBuZl9uYXRfaXB2NF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzKVxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy03OTgte1xubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYzo3OTk6XHRyZXR1cm4gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgb3BzLVx1MDAzZXBmLCBvcHMsIG5mX25hdF9pcHY0X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtODAwLVx0XHRcdFx0ICBBUlJBWV9TSVpFKG5mX25hdF9pcHY0X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM9MTA1OD1pbnQgbmZfbmF0X2lwdjZfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcylcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA1OS17XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjEwNjA6XHRyZXR1cm4gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgb3BzLVx1MDAzZXBmLCBvcHMsIG5mX25hdF9pcHY2X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA2MS1cdFx0XHRcdCAgQVJSQVlfU0laRShuZl9uYXRfaXB2Nl9vcHMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jPTEwNzM9aW50IG5mX25hdF9pbmV0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMpXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy0xMDc5LVxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYzoxMDgwOlx0cmV0ID0gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgTkZQUk9UT19JUFY2LCBvcHMsIG5mX25hdF9pcHY2X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA4MS1cdFx0XHRcdCBBUlJBWV9TSVpFKG5mX25hdF9pcHY2X29wcykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA4NC1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM6MTA4NTpcdHJldCA9IG5mX25hdF9yZWdpc3Rlcl9mbihuZXQsIE5GUFJPVE9fSVBWNCwgb3BzLCBuZl9uYXRfaXB2NF9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTEwODYtXHRcdFx0XHQgQVJSQVlfU0laRShuZl9uYXRfaXB2NF9vcHMpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS2VybmVsIE5ldHdvcmsgRnVuY3Rpb24gUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIGBuZl9uYXRfcmVnaXN0ZXJfZm5gIHNlZW1zIGxpa2UgYSBwcmV0dHkgaW1wb3J0YW50IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB0byB6ZXJvIGluIG9uLiBJdCYjMzk7cyBvZnRlbiB0aGUgZW50cnkgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiAoTkFUKSBtb2R1bGVzIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHJpZ2h0PyBBbmQgd2hlbiBJIHRoaW5rIGFib3V0IHRoYXQsIEnigJltIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBleHBlY3RhdGlvbiBzZXR1cCwgd2hpY2ggd2lsbCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIHRoZSBOQVQgaGVscGVyIHdpdGggdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBOQVQgQ29ubmVjdGlvbiBUcmFja2luZyBlbnRyeSwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIGBuZl9jdF9leHBlY3RfaW5pdGAuIFRoYXQmIzM5O2xsIGxpa2VseSBzaG93IGhvdyB0aGUgc3lzdGVtIHByZXBzIGl0c2VsZiB0byBoYW5kbGUgZXhwZWN0ZWQgY29ubmVjdGlvbnMgcmVsYXRlZCB0byB0aGUgTkFUIHJ1bGVzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgTkFUJiMzOTtkIGNvbm5lY3Rpb24gd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2N0X2V4cGVjdF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYz0yMTA9dm9pZCBpcF92c19uZmN0X2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jLTIyMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmM6MjIzOlx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYy0yMjQtXHRcdFx0ZnJvbV9ycyA/IFx1MDAyNmNwLVx1MDAzZWRhZGRyIDogXHUwMDI2Y3AtXHUwMDNlY2FkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9ODM9c3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE0Ni1cdFx0dHVwbGUgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE0NzpcdFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE0OC1cdFx0XHRcdCAgbmZfY3RfbDNudW0oY3QpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTMxOD1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfYWxsb2MpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTMyMy0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jOjMyNDp2b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHVuc2lnbmVkIGludCBjbGFzcyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTMyNS1cdFx0ICAgICAgIHVfaW50OF90IGZhbWlseSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zOTUtfVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6Mzk2OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pbml0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTM5Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYz0zNjY9c3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTE0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmM6NTE1Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgY21kLmwzbnVtLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMtNTE2LVx0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgZGFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MjA5PXN0YXRpYyBpbnQgZXhwZWN0X3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yMzYtXHRcdHJldHVybiAtMTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjIzNzpcdG5mX2N0X2V4cGVjdF9pbml0KHJ0cF9leHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yMzgtXHRcdFx0ICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTI0Ni1cdH1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjI0NzpcdG5mX2N0X2V4cGVjdF9pbml0KHJ0Y3BfZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMjQ4LVx0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51Myxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0yODM9c3RhdGljIGludCBleHBlY3RfdDEyMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTMwNS1cdFx0cmV0dXJuIC0xO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MzA2Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzA3LVx0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51Myxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz02MTg9c3RhdGljIGludCBleHBlY3RfaDI0NShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNjM4LVx0XHRyZXR1cm4gLTE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo2Mzk6XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy02NDAtXHRcdFx0ICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTczNT1zdGF0aWMgaW50IGV4cGVjdF9jYWxsZm9yd2FyZGluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTc2Ni1cdFx0cmV0dXJuIC0xO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NzY3Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNzY4LVx0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgXHUwMDI2YWRkcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xMTgzPXN0YXRpYyBpbnQgZXhwZWN0X3E5MzEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEyMTMtXHRcdHJldHVybiAtMTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEyMTQ6XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjE1LVx0XHRcdCAgZ2tyb3V0ZWRfb25seSA/IC8qIG9ubHkgYWNjZXB0IGNhbGxzIGZyb20gR0s/ICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTI2Mz1zdGF0aWMgaW50IHByb2Nlc3NfZ2NmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjkwLVx0XHRyZXR1cm4gLTE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMjkxOlx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTI5Mi1cdFx0XHQgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIFx1MDAyNmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTQ4Nj1zdGF0aWMgaW50IHByb2Nlc3NfYWNmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTE4LVx0XHRyZXR1cm4gLTE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNTE5Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTUyMC1cdFx0XHQgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIFx1MDAyNmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTU1Mz1zdGF0aWMgaW50IHByb2Nlc3NfbGNmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTcyLVx0XHRyZXR1cm4gLTE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNTczOlx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTU3NC1cdFx0XHQgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIFx1MDAyNmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmM9MTAyPXN0YXRpYyBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yMzEtXHRcdFx0cG9ydCA9IGh0b25zKGRjY19wb3J0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jOjIzMjpcdFx0XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMtMjMzLVx0XHRcdFx0XHQgIHR1cGxlLVx1MDAzZXNyYy5sM251bSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM9MTI4PXN0YXRpYyBpbnQgZXhwX2dyZShzdHJ1Y3QgbmZfY29ubiAqY3QsIF9fYmUxNiBjYWxsaWQsIF9fYmUxNiBwZWVyX2NhbGxpZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtMTQ0LVx0ZGlyID0gSVBfQ1RfRElSX09SSUdJTkFMO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jOjE0NTpcdG5mX2N0X2V4cGVjdF9pbml0KGV4cF9vcmlnLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy0xNDYtXHRcdFx0ICBuZl9jdF9sM251bShjdCksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jLTE1My1cdGRpciA9IElQX0NUX0RJUl9SRVBMWTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYzoxNTQ6XHRuZl9jdF9leHBlY3RfaW5pdChleHBfcmVwbHksIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jLTE1NS1cdFx0XHQgIG5mX2N0X2wzbnVtKGN0KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9NTg9c3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE1NC1cdHR1cGxlID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM6MTU1Olx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jLTE1Ni1cdFx0XHQgIFx1MDAyNnR1cGxlLVx1MDAzZXNyYy51MywgXHUwMDI2dHVwbGUtXHUwMDNlZHN0LnUzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jPTkyOT1zdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xMDQ4LVx0XHRnb3RvIGVycjE7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYzoxMDQ5Olx0bmZfY3RfZXhwZWN0X2luaXQocnRwX2V4cCwgY2xhc3MsIG5mX2N0X2wzbnVtKGN0KSwgc2FkZHIsIGRhZGRyLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA1MC1cdFx0XHQgIElQUFJPVE9fVURQLCBOVUxMLCBcdTAwMjZydHBfcG9ydCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA1NC1cdFx0Z290byBlcnIyO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTA1NTpcdG5mX2N0X2V4cGVjdF9pbml0KHJ0Y3BfZXhwLCBjbGFzcywgbmZfY3RfbDNudW0oY3QpLCBzYWRkciwgZGFkZHIsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xMDU2LVx0XHRcdCAgSVBQUk9UT19VRFAsIE5VTEwsIFx1MDAyNnJ0Y3BfcG9ydCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM9MTMyNj1zdGF0aWMgaW50IHByb2Nlc3NfcmVnaXN0ZXJfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xNDExLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTQxMjpcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgU0lQX0VYUEVDVF9TSUdOQUxMSU5HLCBuZl9jdF9sM251bShjdCksXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xNDEzLVx0XHRcdCAgc2FkZHIsIFx1MDAyNmRhZGRyLCBwcm90bywgTlVMTCwgXHUwMDI2cG9ydCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jPTM4PXN0YXRpYyBpbnQgdGZ0cF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jLTY3LVx0XHR0dXBsZSA9IFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jOjY4Olx0XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jLTY5LVx0XHRcdFx0ICBuZl9jdF9sM251bShjdCksXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzAwPXN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzMzgtXHR9XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEzMzk6XHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBsM251bSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM0MC1cdFx0ICAgICAgICAgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlYWNoYWJpbGl0eSBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uLiBgbmZfY3RfZXhwZWN0X2luaXRgIGlzIGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UsIGJ1dCB0aGUgcmVhbCBtZWF0IGlzIGluIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCBzaW5jZSB0aGF0JiMzOTtzIHRoZSBjYWxsZXIgdGhhdCBnb3QgdGhlIHJlY2VudCBtb2RpZmljYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2Ygc3ltYm9scyBJIG5lZWQgdG8gY2hlY2sgZm9yIHJlYWNoYWJpbGl0eTogYF9fbmZfY29ubmNvdW50X2FkZGAsIGBfX25mX2N0X2V4cGVjdF9jaGVja2AsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgLCBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgLCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAsIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLCBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAsIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCwgYG5mdF9zeW5wcm94eV9ldmFsX3Y0YCwgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAuCgpBbHJpZ2h0LCBmaXJzdCB1cCwgYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2AuICBZZXAsIGl0JiMzOTtzIGNhbGxlZCBieSBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AuICBHb29kLCB0aGF0JiMzOTtzIHJlYWNoYWJsZS4KCk5leHQsIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWAuIExvb2tzIGxpa2UgaXQmIzM5O3MgdXNlZCBpbiBgbmZ0X3RhcmdldF9zZWxlY3Rfb3BzYCB3aGVuIHRoZSBgZmFtaWx5YCBpcyBgTkZQUk9UT19CUklER0VgLiBQZXJmZWN0LgoKTm93LCBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAuICBZZXAsIHRoYXQmIzM5O3MgdXNlZCBpbiBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYC4gIE1ha2VzIHNlbnNlLgoKSG93IGFib3V0IGBuZnRfc3lucHJveHlfZXZhbF92NGA/ICBJdCYjMzk7cyBjYWxsZWQgYnkgYG5mdF9zeW5wcm94eV9kb19ldmFsYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYG5mdF9zeW5wcm94eV9ldmFsYC4gIEdvdCBpdC4KCmBfX25mX2Nvbm5jb3VudF9hZGRgPyAgUmVhY2hhYmxlIC0gY2FsbGVkIGJ5IGBuZl9jb25uY291bnRfYWRkX3NrYmAgYW5kIGBjb3VudF90cmVlYC4KCmBfX25mX2N0X2V4cGVjdF9jaGVja2A/ICBZZXMsIGNhbGxlZCBieSBgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0YC4KCmBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgPyAgQWxzbyByZWFjaGFibGUsIGNhbGxlZCBieSBgbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcmAgYW5kIGBuZm5sX2N0aGVscGVyX2NyZWF0ZWAuCgpNb3Zpbmcgb24gdG8gYGN0bmV0bGlua19jaGFuZ2VfaGVscGVyYC4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBjdG5ldGxpbmtfY2hhbmdlX2Nvbm50cmFja2AgYW5kIGBjdG5ldGxpbmtfZ2x1ZV9wYXJzZV9jdGAuIFRoYXQmIzM5O3MgZ29vZC4KCkFuZCBsYXN0bHksIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YC4gVGhhdCYjMzk7cyBjYWxsZWQgYnkgYGN0bmV0bGlua19nbHVlX2F0dGFjaF9leHBlY3RgIGFuZCBgY3RuZXRsaW5rX2NyZWF0ZV9leHBlY3RgLiBPa2F5LCBhbGwgdGhlIHN5bWJvbHMgYXJlIHJlYWNoYWJsZSEKCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBJJiMzOTt2ZSBnb3QgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktgLCBgTkZfRkxPV19UQUJMRWAsIGBORlRfQ09NUEFUYCwgYE5GVF9DVGAsIGFuZCBgTkZUX1NZTlBST1hZYC4KCkp1c3QgbWFraW5nIHN1cmUsIGZvciBgTkZfQ09OTlRSQUNLYC4uLiBhbSBJIG1pc3NpbmcgYW55dGhpbmc/IE5vLCBqdXN0IGBORl9DT05OVFJBQ0tgIGlzIHN1ZmZpY2llbnQuCgpPa2F5LCBjaGVja2luZyBkZXBlbmRlbmNpZXMuIGBORlRfQ09NUEFUYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfWFRBQkxFU2AuIE1ha2VzIHNlbnNlLiBgTkZUX0NUYCBuZWVkcyBgTkZfQ09OTlRSQUNLYC4gIEFuZCBgTkZUX1NZTlBST1hZYCBuZWVkcyBib3RoIGBORl9DT05OVFJBQ0tgICphbmQqIGBORVRGSUxURVJfU1lOUFJPWFlgLiBSaWdodCwgSSYjMzk7bGwgYWRkIGBORVRGSUxURVJfU1lOUFJPWFlgIHRvIHRoZSBsaXN0LiBUaGF0JiMzOTtzIGFsbCBJIG5lZWQgZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVURklMVEVSX1NZTlBST1hZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ0Nz1jb25maWcgTkZfTkFUX09WU1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDUwOmNvbmZpZyBORVRGSUxURVJfU1lOUFJPWFlcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTEtXHR0cmlzdGF0ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTEtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjUyOlx0c2VsZWN0IE5FVEZJTFRFUl9TWU5QUk9YWVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1My1cdHNlbGVjdCBTWU5fQ09PS0lFU1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NzY9b2JqLSQoQ09ORklHX05GX05BVF9URlRQKSAmIzQzOz0gbmZfbmF0X3RmdHAub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNzgtIyBTWU5QUk9YWVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKSAmIzQzOz0gbmZfc3lucHJveHlfY29yZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jPTMwPXN0YXRpYyBjb25zdCB1OCBuZl9jdF9leHRfdHlwZV9sZW5bTkZfQ1RfRVhUX05VTV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtNDgtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYzo0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtNTAtXHRbTkZfQ1RfRVhUX1NZTlBST1hZXSA9IHNpemVvZihzdHJ1Y3QgbmZfY29ubl9zeW5wcm94eSksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM9NTc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgdG90YWxfZXh0ZW5zaW9uX3NpemUodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy04MC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jOjgxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy04Mi1cdFx0JiM0Mzsgc2l6ZW9mKHN0cnVjdCBuZl9jb25uX3N5bnByb3h5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ5OAoJCQkJCQkJb3V0cHV0OiAyOTkKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTmV0ZmlsdGVyKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYE5FVEZJTFRFUl9TWU5QUk9YWWAgaXMgaW1wbGljaXRseSBzZWxlY3RlZCBieSBgTkZUX1NZTlBST1hZYCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3PigJRubyBuZWVkIHRvIGV4cGxpY2l0bHkgdGFyZ2V0IGl0LiBOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIHRvdWNoaW5nIGNyaXRpY2FsIG5ldGZpbHRlciBjb21wb25lbnRzOiBjb25uZWN0aW9uIHRyYWNraW5nLCBmbG93IHRhYmxlcywgYW5kIG5mdGFibGVzIGludGVncmF0aW9uLiBUaGlzIHRvdWNoZXMgY29yZSBmdW5jdGlvbnMgbGlrZSBjb25uZWN0aW9uIGNvdW50aW5nLCBleHBlY3RhdGlvbiBjaGVja3MsIGhlbHBlciByZWdpc3RyYXRpb24sIGFuZCBuZXRsaW5rIGhhbmRsaW5nLiBJJiMzOTttIGFsc28gc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gYnJpZGdlIHRhcmdldCB2YWxpZGF0aW9uIHdpdGhpbiBgbmZ0X2NvbXBhdGAgYW5kIHNvbWUgYWRqdXN0bWVudHMgdG8gdGltZW91dCBoYW5kbGluZyB3aXRoaW4gYG5mdF9jdGAuIEFsbCBvZiB0aGVzZSBjaGFuZ2VzIGhhdmUgYSBjbGVhciBwYXRoIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBvciBieSBwcm9jZXNzaW5nIGFjdHVhbCBuZXR3b3JrIHBhY2tldHMuIFRoaXMgc2NyZWFtcyBmdXp6aW5nIHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyByZWZpbmUgdGhlIHN5bWJvbCBsaXN0IGZvciB0aGUgZnV6emluZy4gSSBkb24mIzM5O3Qgd2FudCB0byBjaG9vc2UgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBob3QgcGF0aHMuIEkmIzM5O3ZlIGdvdCBhIG11Y2ggbW9yZSBmb2N1c2VkIGxpc3Qgbm93OgoKKiAgIGBfX25mX2Nvbm5jb3VudF9hZGRgCiogICBgX19uZl9jdF9leHBlY3RfY2hlY2tgCiogICBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYAoqICAgYGN0bmV0bGlua19jaGFuZ2VfaGVscGVyYAoqICAgYGN0bmV0bGlua19hbGxvY19leHBlY3RgCiogICBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYAoqICAgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYAoqICAgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgCiogICBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAKKiAgIGBuZnRfc3lucHJveHlfZXZhbF92NGAKKiAgIGBuZnRfc3lucHJveHlfZXZhbF92NmAKClRoZXNlIGFyZSBoaWdobHkgcmVsZXZhbnQgdG8gdGhlIGludHJvZHVjZWQgZmVhdHVyZXMgYW5kIG5vdCBvdmVybHkgZ2VuZXJpYy4gSSB0aGluayB0aGlzIGxpc3QgaXMgc29saWQgYW5kIGZvY3VzZWQgZm9yIGFjaGlldmluZyB0aGUgZnV6emluZyBvYmplY3RpdmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9DT01QQVQmIzM0OywKICAgICYjMzQ7TkZUX0NUJiMzNDssCiAgICAmIzM0O05GVF9TWU5QUk9YWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmZfY29ubmNvdW50X2FkZCYjMzQ7LAogICAgJiMzNDtfX25mX2N0X2V4cGVjdF9jaGVjayYjMzQ7LAogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2NoYW5nZV9oZWxwZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8mIzM0OywKICAgICYjMzQ7bmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y0JiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbmV0ZmlsdGVyLCBpbmNsdWRpbmcgY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBjb21wYXRpYmlsaXR5LiBJdCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvbm5lY3Rpb24gY291bnRpbmcsIGV4cGVjdGF0aW9uIGNoZWNraW5nLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSXQgYWxzbyBhZGRzIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGJyaWRnZSB0YXJnZXRzIGluIG5mdF9jb21wYXQgYW5kIGZpeGVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gbmZ0X2N0LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG9yIGJ5IHByb2Nlc3NpbmcgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX0NPTk5DT1VOVCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9DT01QQVQmIzM0OywKICAgICYjMzQ7TkZUX0NUJiMzNDssCiAgICAmIzM0O05GVF9TWU5QUk9YWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmZfY29ubmNvdW50X2FkZCYjMzQ7LAogICAgJiMzNDtfX25mX2N0X2V4cGVjdF9jaGVjayYjMzQ7LAogICAgJiMzNDtfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2NoYW5nZV9oZWxwZXImIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8mIzM0OywKICAgICYjMzQ7bmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y0JiMzNDssCiAgICAmIzM0O25mdF9zeW5wcm94eV9ldmFsX3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbmV0ZmlsdGVyLCBpbmNsdWRpbmcgY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBjb21wYXRpYmlsaXR5LiBJdCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvbm5lY3Rpb24gY291bnRpbmcsIGV4cGVjdGF0aW9uIGNoZWNraW5nLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSXQgYWxzbyBhZGRzIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGJyaWRnZSB0YXJnZXRzIGluIG5mdF9jb21wYXQgYW5kIGZpeGVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gbmZ0X2N0LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG9yIGJ5IHByb2Nlc3NpbmcgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjE4LjY1MjU1MzAyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjY1MzAxMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9DT05OQ09VTlRcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0NPTVBBVFwiLFxuICAgIFwiTkZUX0NUXCIsXG4gICAgXCJORlRfU1lOUFJPWFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25mX2Nvbm5jb3VudF9hZGRcIixcbiAgICBcIl9fbmZfY3RfZXhwZWN0X2NoZWNrXCIsXG4gICAgXCJfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJcIixcbiAgICBcImN0bmV0bGlua19jaGFuZ2VfaGVscGVyXCIsXG4gICAgXCJjdG5ldGxpbmtfYWxsb2NfZXhwZWN0XCIsXG4gICAgXCJuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9cIixcbiAgICBcIm5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlXCIsXG4gICAgXCJuZnRfY3RfZXhwZWN0X29ial9pbml0XCIsXG4gICAgXCJuZnRfY3RfZXhwZWN0X29ial9ldmFsXCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NFwiLFxuICAgIFwibmZ0X3N5bnByb3h5X2V2YWxfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG5ldGZpbHRlciwgaW5jbHVkaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZsb3cgdGFibGVzLCBhbmQgbmZ0YWJsZXMgY29tcGF0aWJpbGl0eS4gSXQgbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb25uZWN0aW9uIGNvdW50aW5nLCBleHBlY3RhdGlvbiBjaGVja2luZywgaGVscGVyIHJlZ2lzdHJhdGlvbiwgYW5kIG5ldGxpbmsgaGFuZGxpbmcuIEl0IGFsc28gYWRkcyBhIG5ldyB2YWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBicmlkZ2UgdGFyZ2V0cyBpbiBuZnRfY29tcGF0IGFuZCBmaXhlcyB0aW1lb3V0IGhhbmRsaW5nIGluIG5mdF9jdC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayBvciBieSBwcm9jZXNzaW5nIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjE4LjY1MjU2MDY2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMDYxOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDUyMWRkMThmMTJiNjJhYmEyNmYwODZhMzFlNDkwMjAzMWRiOTk2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAyMjo0MToxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxcbmluZGV4IDIwZDcwZGRkYmU1MDk4Li4yNTA2MmY0YTBkZDVmMSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxcbkBAIC0xOCw3ICsxOCw3IEBAXFxuICAqIEBtYXRjaDpcXHR0aGUgbWF0Y2ggZXh0ZW5zaW9uXFxuICAqIEB0YXJnZXQ6XFx0dGhlIHRhcmdldCBleHRlbnNpb25cXG4gICogQG1hdGNoaW5mbzpcXHRwZXItbWF0Y2ggZGF0YVxcbi0gKiBAdGFyZ2V0aW5mbzpcXHRwZXItdGFyZ2V0IGRhdGFcXG4rICogQHRhcmdpbmZvOlxcdHBlci10YXJnZXQgZGF0YVxcbiAgKiBAc3RhdGU6XFx0cG9pbnRlciB0byBob29rIHN0YXRlIHRoaXMgcGFja2V0IGNhbWUgZnJvbVxcbiAgKiBAZnJhZ29mZjpcXHRwYWNrZXQgaXMgYSBmcmFnbWVudCwgdGhpcyBpcyB0aGUgZGF0YSBvZmZzZXRcXG4gICogQHRob2ZmOlxcdHBvc2l0aW9uIG9mIHRyYW5zcG9ydCBoZWFkZXIgcmVsYXRpdmUgdG8gc2tiLVxcdTAwM2VkYXRhXFxuQEAgLTc3LDcgKzc3LDkgQEAgc3RhdGljIGlubGluZSB1X2ludDhfdCB4dF9mYW1pbHkoY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiAgKiBAbWF0Y2g6XFx0c3RydWN0IHh0X21hdGNoIHRocm91Z2ggd2hpY2ggdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZFxcbiAgKiBAbWF0Y2hpbmZvOlxcdHBlci1tYXRjaCBkYXRhXFxuICAqIEBob29rX21hc2s6XFx0dmlhIHdoaWNoIGhvb2tzIHRoZSBuZXcgcnVsZSBpcyByZWFjaGFibGVcXG4tICogT3RoZXIgZmllbGRzIGFzIGFib3ZlLlxcbisgKiBAZmFtaWx5OlxcdGFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZFxcbisgKlxcdFxcdChoZWxwZnVsIHdoZW4gbWF0Y2gtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcXG4rICogQG5mdF9jb21wYXQ6XFx0cnVubmluZyBmcm9tIHRoZSBuZnQgY29tcGF0IGxheWVyIGlmIHRydWVcXG4gICovXFxuIHN0cnVjdCB4dF9tdGNoa19wYXJhbSB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG5AQCAtOTEsOCArOTMsMTMgQEAgc3RydWN0IHh0X210Y2hrX3BhcmFtIHtcXG4gfTtcXG4gXFxuIC8qKlxcbi0gKiBzdHJ1Y3QgeHRfbWR0b3JfcGFyYW0gLSBtYXRjaCBkZXN0cnVjdG9yIHBhcmFtZXRlcnNcXG4tICogRmllbGRzIGFzIGFib3ZlLlxcbisgKiBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIC0gbWF0Y2ggZGVzdHJ1Y3RvciBwYXJhbWV0ZXJzXFxuKyAqXFxuKyAqIEBuZXQ6XFx0bmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCB3aGljaCB0aGUgY2hlY2sgd2FzIGludm9rZWRcXG4rICogQG1hdGNoOlxcdHN0cnVjdCB4dF9tYXRjaCB0aHJvdWdoIHdoaWNoIHRoaXMgZnVuY3Rpb24gd2FzIGludm9rZWRcXG4rICogQG1hdGNoaW5mbzpcXHRwZXItbWF0Y2ggZGF0YVxcbisgKiBAZmFtaWx5OlxcdGFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZFxcbisgKlxcdFxcdChoZWxwZnVsIHdoZW4gbWF0Y2gtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcXG4gICovXFxuIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuQEAgLTEwNSwxMCArMTEyLDE2IEBAIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xcbiAgKiBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gLSBwYXJhbWV0ZXJzIGZvciB0YXJnZXQgZXh0ZW5zaW9ucydcXG4gICogY2hlY2tlbnRyeSBmdW5jdGlvbnNcXG4gICpcXG4rICogQG5ldDpcXHRuZXR3b3JrIG5hbWVzcGFjZSB0aHJvdWdoIHdoaWNoIHRoZSBjaGVjayB3YXMgaW52b2tlZFxcbisgKiBAdGFibGU6XFx0dGFibGUgdGhlIHJ1bGUgaXMgdHJpZWQgdG8gYmUgaW5zZXJ0ZWQgaW50b1xcbiAgKiBAZW50cnlpbmZvOlxcdHRoZSBmYW1pbHktc3BlY2lmaWMgcnVsZSBkYXRhXFxuICAqIFxcdFxcdChzdHJ1Y3QgaXB0X2VudHJ5LCBpcDZ0X2VudHJ5LCBhcnB0X2VudHJ5LCBlYnRfZW50cnkpXFxuLSAqXFxuLSAqIE90aGVyIGZpZWxkcyBzZWUgYWJvdmUuXFxuKyAqIEB0YXJnZXQ6XFx0dGhlIHRhcmdldCBleHRlbnNpb25cXG4rICogQHRhcmdpbmZvOlxcdHBlci10YXJnZXQgZGF0YVxcbisgKiBAaG9va19tYXNrOlxcdHZpYSB3aGljaCBob29rcyB0aGUgbmV3IHJ1bGUgaXMgcmVhY2hhYmxlXFxuKyAqIEBmYW1pbHk6XFx0YWN0dWFsIE5GUFJPVE9fKiB0aHJvdWdoIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkXFxuKyAqXFx0XFx0KGhlbHBmdWwgd2hlbiBtYXRjaC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKVxcbisgKiBAbmZ0X2NvbXBhdDpcXHRydW5uaW5nIGZyb20gdGhlIG5mdCBjb21wYXQgbGF5ZXIgaWYgdHJ1ZVxcbiAgKi9cXG4gc3RydWN0IHh0X3RnY2hrX3BhcmFtIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbkBAIC0zMzYsOSArMzQ5LDkgQEAgc3RydWN0IHh0X3RhYmxlX2luZm8gKnh0X2FsbG9jX3RhYmxlX2luZm8odW5zaWduZWQgaW50IHNpemUpO1xcbiB2b2lkIHh0X2ZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyk7XFxuIFxcbiAvKipcXG4tICogeHRfcmVjc2VxIC0gcmVjdXJzaXZlIHNlcWNvdW50IGZvciBuZXRmaWx0ZXIgdXNlXFxuKyAqIHZhciB4dF9yZWNzZXEgLSByZWN1cnNpdmUgc2VxY291bnQgZm9yIG5ldGZpbHRlciB1c2VcXG4gICpcXG4tICogUGFja2V0IHByb2Nlc3NpbmcgY2hhbmdlcyB0aGUgc2VxY291bnQgb25seSBpZiBubyByZWN1cnNpb24gaGFwcGVuZWRcXG4rICogUGFja2V0IHByb2Nlc3NpbmcgY2hhbmdlcyB0aGUgc2VxY291bnQgb25seSBpZiBubyByZWN1cnNpb24gaGFwcGVuZWQuXFxuICAqIGdldF9jb3VudGVycygpIGNhbiB1c2UgcmVhZF9zZXFjb3VudF9iZWdpbigpL3JlYWRfc2VxY291bnRfcmV0cnkoKSxcXG4gICogYmVjYXVzZSB3ZSB1c2UgdGhlIG5vcm1hbCBzZXFjb3VudCBjb252ZW50aW9uIDpcXG4gICogTG93IG9yZGVyIGJpdCBzZXQgdG8gMSBpZiBhIHdyaXRlciBpcyBhY3RpdmUuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFxuaW5kZXggYmU0YTEyMGQ1NDllYjMuLmMwMjQzNDVjOWJkODYyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFxuQEAgLTI2LDYgKzI2LDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3Qge1xcbiBcXHRwb3NzaWJsZV9uZXRfdCBuZXQ7XFxuIFxcbiBcXHQvKiBXZSBleHBlY3QgdGhpcyB0dXBsZSwgd2l0aCB0aGUgZm9sbG93aW5nIG1hc2sgKi9cXG4rXFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBtYXN0ZXJfdHVwbGU7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcXG5pbmRleCA4MTAyNTEwMWY4NmRhYS4uYzc2MWNkODE1OGIyNTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcXG5AQCAtMTE0LDYgKzExNCwxMCBAQCBpbnQgbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiwgdW5zaWduZWQgaW50LFxcbiB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiosXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50KTtcXG4gXFxuKyNkZWZpbmUgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKG5hbWUpIFxcXFxcXG4rXFx0cHJfd2FybihcXFwiVGhlICVzIGNvbm50cmFjayBoZWxwZXIgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsLlxcXFxuXFxcIlxcdFxcXFxcXG4rXFx0XFx0XFxcIlBsZWFzZSBjb250YWN0IHRoZSBuZXRmaWx0ZXItZGV2ZWwgbWFpbGluZyBsaXN0IGlmIHlvdSBzdGlsbCBuZWVkIHRoaXMuXFxcXG5cXFwiLCBuYW1lKVxcbitcXG4gc3RydWN0IG5mX2Nvbm5faGVscCAqbmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApO1xcbiBcXG4gaW50IF9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCxcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnXFxuaW5kZXggNjY1ZjgwMDhjYzRiMjcuLjRjMDRjZDhkNDBhMjI5IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcbkBAIC0yNTYsOCArMjU2LDcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxuIFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIFxcbiBjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbi1cXHR0cmlzdGF0ZSBcXFwiSVJDIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLVxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbitcXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuIFxcdGhlbHBcXG4gXFx0ICBUaGVyZSBpcyBhIGNvbW1vbmx5LXVzZWQgZXh0ZW5zaW9uIHRvIElSQyBjYWxsZWRcXG4gXFx0ICBEaXJlY3QgQ2xpZW50LXRvLUNsaWVudCBQcm90b2NvbCAoRENDKS4gIFRoaXMgZW5hYmxlcyB1c2VycyB0byBzZW5kXFxuQEAgLTI2Nyw2ICsyNjYsOCBAQCBjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbiBcXHQgIHVzaW5nIE5BVCwgdGhpcyBleHRlbnNpb24gd2lsbCBlbmFibGUgeW91IHRvIHNlbmQgZmlsZXMgYW5kIGluaXRpYXRlXFxuIFxcdCAgY2hhdHMuICBOb3RlIHRoYXQgeW91IGRvIE5PVCBuZWVkIHRoaXMgZXh0ZW5zaW9uIHRvIGdldCBmaWxlcyBvclxcbiBcXHQgIGhhdmUgb3RoZXJzIGluaXRpYXRlIGNoYXRzLCBvciBldmVyeXRoaW5nIGVsc2UgaW4gSVJDLlxcbitcXHQgIERDQyB0cmFja2luZyBiZWhpbmQgTkFUIHJlcXVpcmVzIHBsYWludGV4dCAodW5lbmNyeXB0ZWQpIElSQywgc29cXG4rXFx0ICB0aGlzIGhlbHBlciBpcyBvZiBsaW1pdGVkIHVzZSB0aGVzZSBkYXlzLlxcbiBcXG4gXFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gXFxuQEAgLTMwOCwxNyArMzA5LDE3IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxcbiBcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiBcXG4gY29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXFxuLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuK1xcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbiBcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiBcXHRzZWxlY3QgTkZfQ1RfUFJPVE9fR1JFXFxuIFxcdGhlbHBcXG4gXFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFBQVFAgKFBvaW50IHRvIFBvaW50IFR1bm5lbGxpbmdcXG4gXFx0ICBQcm90b2NvbCwgUkZDMjYzNykgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgTkFULlxcbiBcXG4tXFx0ICBJZiB5b3UgYXJlIHJ1bm5pbmcgUFBUUCBzZXNzaW9ucyBvdmVyIGEgc3RhdGVmdWwgZmlyZXdhbGwgb3IgTkFUXFxuK1xcdCAgSWYgeW91IGFyZSBzdGlsbCBydW5uaW5nIFBQVFAgc2Vzc2lvbnMgb3ZlciBhIHN0YXRlZnVsIGZpcmV3YWxsIG9yIE5BVFxcbiBcXHQgIGJveCwgeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuXFxuIFxcbi1cXHQgIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBQUFRQIG1vZGVzIG9mIG9wZXJhdGlvbiBhcmUgc3VwcG9ydGVkIHlldC5cXG4rXFx0ICBQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgUFBUUCBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIHN1cHBvcnRlZC5cXG4gXFx0ICBTcGVjaWZpY2FsbHkgdGhlc2UgbGltaXRhdGlvbnMgZXhpc3Q6XFxuIFxcdCAgICAtIEJsaW5kbHkgYXNzdW1lcyB0aGF0IGNvbnRyb2wgY29ubmVjdGlvbnMgYXJlIGFsd2F5cyBlc3RhYmxpc2hlZFxcbiBcXHQgICAgICBpbiBQTlMtXFx1MDAzZVBBQyBkaXJlY3Rpb24uIFRoaXMgaXMgYSB2aW9sYXRpb24gb2YgUkZDMjYzNy5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcXG5pbmRleCBkZDY3MDA0YTVjYzA5ZS4uOTE1ODIwNjlmNmQyZWUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmNcXG5AQCAtMTgzLDE3ICsxODMsMTYgQEAgc3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGlmIChjdCBcXHUwMDI2XFx1MDAyNiBuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XFxuLVxcdFxcdC8qIGxvY2FsIGNvbm5lY3Rpb25zIGFyZSBjb25maXJtZWQgaW4gcG9zdHJvdXRpbmcgc28gY29uZmlybWF0aW9uXFxuLVxcdFxcdCAqIG1pZ2h0IGhhdmUgaGFwcGVuZWQgYmVmb3JlIGhpdHRpbmcgY29ubmxpbWl0XFxuK1xcdFxcdC8qIENvbm5lY3Rpb24gaXMgY29uZmlybWVkIGJ1dCBtaWdodCBzdGlsbCBiZSBpbiB0aGUgc2V0dXAgcGhhc2UuXFxuK1xcdFxcdCAqIE9ubHkgc2tpcCB0aGUgdHJhY2tpbmcgaWYgaXQgaXMgZnVsbHkgYXNzdXJlZC4gVGhpcyBndWFyYW50ZWVzXFxuK1xcdFxcdCAqIHRoYXQgc2V0dXAgcGFja2V0cyBvciByZXRyYW5zbWlzc2lvbnMgYXJlIHByb3Blcmx5IGNvdW50ZWQgYW5kXFxuK1xcdFxcdCAqIGRlZHVwbGljYXRlZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChza2ItXFx1MDAzZXNrYl9paWYgIT0gTE9PUEJBQ0tfSUZJTkRFWCkge1xcbitcXHRcXHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4gXFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHQvKiB0aGlzIGlzIGxpa2VseSBhIGxvY2FsIGNvbm5lY3Rpb24sIHNraXAgb3B0aW1pemF0aW9uIHRvIGF2b2lkXFxuLVxcdFxcdCAqIGFkZGluZyBkdXBsaWNhdGVzIGZyb20gYSAncGFja2V0IHRyYWluJ1xcbi1cXHRcXHQgKi9cXG4gXFx0XFx0Z290byBjaGVja19jb25uZWN0aW9ucztcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xcbmluZGV4IDQwMDExOWI2MzIwZTcyLi5iZjc4ODI4Yzc1NDlkNCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXFxuQEAgLTYyLDYgKzYyLDcgQEAgaW50IG5mX2Nvbm50cmFja19icm9hZGNhc3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoZXhwID09IE5VTEwpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0ZXhwLVxcdTAwM2VtYXN0ZXJfdHVwbGVcXHQgID0gY3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xcbiBcXHRleHAtXFx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlO1xcbiBcXG4gXFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGhlbHAtXFx1MDAzZWhlbHBlcik7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG5pbmRleCA0OWUxOGVkYTAzN2VmMS4uMzg2MzBjNWUwMDZmMDggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xcbkBAIC0zNTUsNiArMzU1LDggQEAgdm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB1bnNpZ25lZCBpbnQgY2xhc3MsXFxuIFxcdGV4cC1cXHUwMDNldHVwbGUuc3JjLmwzbnVtID0gZmFtaWx5O1xcbiBcXHRleHAtXFx1MDAzZXR1cGxlLmRzdC5wcm90b251bSA9IHByb3RvO1xcbiBcXG4rXFx0ZXhwLVxcdTAwM2VtYXN0ZXJfdHVwbGUgPSBjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XFxuK1xcbiBcXHRpZiAoc2FkZHIpIHtcXG4gXFx0XFx0bWVtY3B5KFxcdTAwMjZleHAtXFx1MDAzZXR1cGxlLnNyYy51Mywgc2FkZHIsIGxlbik7XFxuIFxcdFxcdGlmIChzaXplb2YoZXhwLVxcdTAwM2V0dXBsZS5zcmMudTMpIFxcdTAwM2UgbGVuKVxcbkBAIC00OTQsOSArNDk2LDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fbmZfY3RfZXhwZWN0X2NoZWNrKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XFxuIFxcdGlmIChoZWxwZXIpIHtcXG4gXFx0XFx0cCA9IFxcdTAwMjZoZWxwZXItXFx1MDAzZWV4cGVjdF9wb2xpY3lbZXhwZWN0LVxcdTAwM2VjbGFzc107XFxuLVxcdFxcdGlmIChwLVxcdTAwM2VtYXhfZXhwZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1hc3Rlcl9oZWxwLVxcdTAwM2VleHBlY3RpbmdbZXhwZWN0LVxcdTAwM2VjbGFzc10gXFx1MDAzZT0gcC1cXHUwMDNlbWF4X2V4cGVjdGVkKVxcbitcXHRcXHRpZiAobWFzdGVyX2hlbHAtXFx1MDAzZWV4cGVjdGluZ1tleHBlY3QtXFx1MDAzZWNsYXNzXSBcXHUwMDNlPSBwLVxcdTAwM2VtYXhfZXhwZWN0ZWQpXFxuIFxcdFxcdFxcdGV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgcCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBkZWZhdWx0X2V4cF9wb2xpY3kgPSB7XFxuK1xcdFxcdFxcdC5tYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVCxcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdGlmIChtYXN0ZXJfaGVscC1cXHUwMDNlZXhwZWN0aW5nW2V4cGVjdC1cXHUwMDNlY2xhc3NdIFxcdTAwM2U9IGRlZmF1bHRfZXhwX3BvbGljeS5tYXhfZXhwZWN0ZWQpXFxuK1xcdFxcdFxcdGV2aWN0X29sZGVzdF9leHBlY3QobWFzdGVyX2hlbHAsIGV4cGVjdCwgXFx1MDAyNmRlZmF1bHRfZXhwX3BvbGljeSk7XFxuIFxcdH1cXG4gXFxuIFxcdGNuZXQgPSBuZl9jdF9wZXJuZXQobmV0KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbmluZGV4IDhiOTQwMDFjMjQzMDY2Li41MDA1MDliMTc2NjNlZCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuQEAgLTM3NCw4ICszNzQsMTMgQEAgaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxuIFxcdGlmICghbmZfY3RfaGVscGVyX2hhc2gpXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4tXFx0aWYgKG1lLVxcdTAwM2VleHBlY3RfcG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQgXFx1MDAzZSBORl9DVF9FWFBFQ1RfTUFYX0NOVClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gbWUtXFx1MDAzZWV4cGVjdF9jbGFzc19tYXg7IGkrKykge1xcbitcXHRcXHRpZiAoIW1lLVxcdTAwM2VleHBlY3RfcG9saWN5W2ldLm1heF9leHBlY3RlZClcXG4rXFx0XFx0XFx0bWUtXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XFxuK1xcbitcXHRcXHRpZiAobWUtXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkIFxcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZfY3RfaGVscGVyX2hzaXplOyBpKyspIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xcbmluZGV4IDBjMTE3Yjg0OTJlOTkyLi4xOTNhYjM0ZGI3OTVmOSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXFxuQEAgLTI2Miw2ICsyNjIsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgaSwgcmV0O1xcbiBcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKEhFTFBFUl9OQU1FKTtcXG4rXFxuIFxcdGlmIChtYXhfZGNjX2NoYW5uZWxzIFxcdTAwM2MgMSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIm1heF9kY2NfY2hhbm5lbHMgbXVzdCBub3QgYmUgemVyb1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG5pbmRleCA0ZTc4ZDI0ODI5ODk1ZS4uNDIxNzcxNWQ0MmRjMjQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuQEAgLTE5NTMsMTkgKzE5NTMsNiBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFzdHJjbXAoaGVscG5hbWUsIFxcXCJcXFwiKSBcXHUwMDI2XFx1MDAyNiBoZWxwKSB7XFxuLVxcdFxcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShoZWxwLVxcdTAwM2VoZWxwZXIpO1xcbi1cXHRcXHRpZiAoaGVscGVyKSB7XFxuLVxcdFxcdFxcdC8qIHdlIGhhZCBhIGhlbHBlciBiZWZvcmUgLi4uICovXFxuLVxcdFxcdFxcdG5mX2N0X3JlbW92ZV9leHBlY3RhdGlvbnMoY3QpO1xcbi1cXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXFx1MDAzZWhlbHBlciwgTlVMTCk7XFxuLVxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmhlbHBlci1cXHUwMDNlY3RfcmVmY250KSlcXG4tXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGhlbHBlciwgcmN1KTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuIFxcdGhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kKGhlbHBuYW1lLCBuZl9jdF9sM251bShjdCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBuZl9jdF9wcm90b251bShjdCkpO1xcbiBcXHRpZiAoaGVscGVyID09IE5VTEwpIHtcXG5AQCAtMzAxNSw3ICszMDAyLDYgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApXFxuIHtcXG4gXFx0X19zMzIgdGltZW91dCA9IChfX3MzMikoUkVBRF9PTkNFKGV4cC1cXHUwMDNldGltZW91dCkgLSBuZmN0X3RpbWVfc3RhbXApIC8gSFo7XFxuLVxcdHN0cnVjdCBuZl9jb25uICptYXN0ZXIgPSBleHAtXFx1MDAzZW1hc3RlcjtcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVClcXG4gXFx0c3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtcztcXG5AQCAtMzAzMCw5ICszMDE2LDcgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFx0aWYgKGN0bmV0bGlua19leHBfZHVtcF9tYXNrKHNrYiwgXFx1MDAyNmV4cC1cXHUwMDNldHVwbGUsIFxcdTAwMjZleHAtXFx1MDAzZW1hc2spIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLVxcdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLFxcbi1cXHRcXHRcXHRcXHQgXFx1MDAyNm1hc3Rlci1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsXFxuLVxcdFxcdFxcdFxcdCBDVEFfRVhQRUNUX01BU1RFUikgXFx1MDAzYyAwKVxcbitcXHRpZiAoY3RuZXRsaW5rX2V4cF9kdW1wX3R1cGxlKHNrYiwgXFx1MDAyNmV4cC1cXHUwMDNlbWFzdGVyX3R1cGxlLCBDVEFfRVhQRUNUX01BU1RFUikgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXFxuQEAgLTMwNDUsOSArMzAyOSw5IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0aWYgKG5sYV9wdXRfYmUzMihza2IsIENUQV9FWFBFQ1RfTkFUX0RJUiwgaHRvbmwoZXhwLVxcdTAwM2VkaXIpKSlcXG4gXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbi1cXHRcXHRuYXRfdHVwbGUuc3JjLmwzbnVtID0gbmZfY3RfbDNudW0obWFzdGVyKTtcXG4rXFx0XFx0bmF0X3R1cGxlLnNyYy5sM251bSA9IGV4cC1cXHUwMDNlbWFzdGVyX3R1cGxlLnNyYy5sM251bTtcXG4gXFx0XFx0bmF0X3R1cGxlLnNyYy51MyA9IGV4cC1cXHUwMDNlc2F2ZWRfYWRkcjtcXG4tXFx0XFx0bmF0X3R1cGxlLmRzdC5wcm90b251bSA9IG5mX2N0X3Byb3RvbnVtKG1hc3Rlcik7XFxuK1xcdFxcdG5hdF90dXBsZS5kc3QucHJvdG9udW0gPSBleHAtXFx1MDAzZW1hc3Rlcl90dXBsZS5kc3QucHJvdG9udW07XFxuIFxcdFxcdG5hdF90dXBsZS5zcmMudSA9IGV4cC1cXHUwMDNlc2F2ZWRfcHJvdG87XFxuIFxcbiBcXHRcXHRpZiAoY3RuZXRsaW5rX2V4cF9kdW1wX3R1cGxlKHNrYiwgXFx1MDAyNm5hdF90dXBsZSxcXG5AQCAtMzU4OSw2ICszNTczLDcgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gI2VuZGlmXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihleHAtXFx1MDAzZWhlbHBlciwgaGVscGVyKTtcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGV4cC1cXHUwMDNlYXNzaWduX2hlbHBlciwgYXNzaWduX2hlbHBlcik7XFxuK1xcdGV4cC1cXHUwMDNlbWFzdGVyX3R1cGxlID0gY3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xcbiBcXHRleHAtXFx1MDAzZXR1cGxlID0gKnR1cGxlO1xcbiBcXHRleHAtXFx1MDAzZW1hc2suc3JjLnUzID0gbWFzay1cXHUwMDNlc3JjLnUzO1xcbiBcXHRleHAtXFx1MDAzZW1hc2suc3JjLnUuYWxsID0gbWFzay1cXHUwMDNlc3JjLnUuYWxsO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcXG5pbmRleCA3NzY1MDVhNzhlNjQ1Ni4uODBmYzE0Yzg3ZGRjNGIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXFxuQEAgLTU0NSw2ICs1NDUsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHB0cF9pbml0KHZvaWQpXFxuIFxcbiBcXHRwcHRwLmRlc3Ryb3kgPSBncmVfcHB0cF9kZXN0cm95X3NpYmxpbmdzO1xcbiBcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKHBwdHAubmFtZSk7XFxuK1xcbiBcXHRyZXR1cm4gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcXHUwMDI2cHB0cCwgXFx1MDAyNnBwdHBfcHRyKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbmluZGV4IGU3YTNmYjJiMmQ5NDY2Li4yOWU5M2FjMWUyZTQwMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuQEAgLTMyNiw4ICszMjYsMTAgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuLVxcdHNpemUgPSBpcGgtXFx1MDAzZWlobCBcXHUwMDNjXFx1MDAzYyAyO1xcbitcXHRpZiAoaXBoLVxcdTAwM2VpaGwgXFx1MDAzYyA1KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRzaXplID0gaXBoLVxcdTAwM2VpaGwgXFx1MDAzY1xcdTAwM2MgMjtcXG4gXFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwaCkgfHwgdW5saWtlbHkoaXBfaGFzX29wdGlvbnMoc2l6ZSkpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbkBAIC0zMzUsOSArMzM3LDkgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBJUCkge1xcbi1cXHRcXHRjdHgtXFx1MDAzZXR1bi5wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0XFx0Y3R4LVxcdTAwM2V0dW4ucHJvdG8gPSBpcGgtXFx1MDAzZXByb3RvY29sO1xcbiBcXHRcXHRjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemU7XFxuLVxcdFxcdGN0eC1cXHUwMDNlb2Zmc2V0ICs9IHNpemU7XFxuK1xcdFxcdGN0eC1cXHUwMDNlb2Zmc2V0ICs9IGN0eC1cXHUwMDNldHVuLmhkcl9zaXplO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXFxuaW5kZXggMmJiZjUxNjNjMGUyNzMuLjYzZmY2YjRkNWQyMTRhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xcbkBAIC0xMTgxLDYgKzExODEsMTYgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4gXFx0c3RydWN0IG5mX2hvb2tfb3BzICpuYXRfb3BzO1xcbiBcXHRpbnQgaSwgcmV0O1xcbiBcXG4rI2lmbmRlZiBNT0RVTEVcXG4rXFx0LyogSWYgbmZfbmF0X2NvcmUgaXMgYnVpbHQtaW4gYW5kIG5mX25hdF9pbml0KCkgZmFpbHMsIGRlcGVuZGVudFxcbitcXHQgKiBtb2R1bGVzIGxpa2UgbmZ0X2NoYWluX25hdC5rbyBtYXkgc3RpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLlxcbitcXHQgKiBIb3dldmVyLCBuYXRfbmV0IHdvdWxkIGJlIGludmFsaWQsIGxpa2VseSBwb2ludGluZyB0byBzb21lIG90aGVyXFxuK1xcdCAqIHBlci1uZXQgc3RydWN0dXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbmZfbmF0X2hvb2spKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuKyNlbmRpZlxcbitcXG4gXFx0aWYgKFdBUk5fT05fT05DRShwZiBcXHUwMDNlPSBBUlJBWV9TSVpFKG5hdF9uZXQtXFx1MDAzZW5hdF9wcm90b19uZXQpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jXFxuaW5kZXggMGNhYTkzMDRkMmQwMzAuLjYzODY0YjkyODI1OTA5IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmNcXG5AQCAtMzk3LDYgKzM5NywyMiBAQCBzdGF0aWMgaW50IG5mdF90YXJnZXRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxcbit7XFxuK1xcdHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCA9IGV4cHItXFx1MDAzZW9wcy1cXHUwMDNlZGF0YTtcXG4rXFxuK1xcdC8qIERvIG5vdCBhbGxvdyBVTlNQRUMgdG8gc3RhbmQtaW4gZm9yIE5GUFJPVE9fQlJJREdFXFxuK1xcdCAqIHRhcmdldHM6IHRoZXkgYXJlIGluY29tcGF0aWJsZS4gIGVidGFibGVzIHRhcmdldHMgcmV0dXJuXFxuK1xcdCAqIEVCVF9BQ0NFUFQsIERST1AgYW5kIHNvIG9uIHdoaWNoIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoXFxuK1xcdCAqIE5GX0FDQ0VQVCwgTkZfRFJPUCBhbmQgc28gb24uXFxuK1xcdCAqL1xcbitcXHRpZiAodGFyZ2V0LVxcdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19CUklER0UpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0cmV0dXJuIG5mdF90YXJnZXRfdmFsaWRhdGUoY3R4LCBleHByKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgX19uZnRfbWF0Y2hfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbiBcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbkBAIC05MzIsMTMgKzk0OCwxNSBAQCBuZnRfdGFyZ2V0X3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0b3BzLVxcdTAwM2Vpbml0ID0gbmZ0X3RhcmdldF9pbml0O1xcbiBcXHRvcHMtXFx1MDAzZWRlc3Ryb3kgPSBuZnRfdGFyZ2V0X2Rlc3Ryb3k7XFxuIFxcdG9wcy1cXHUwMDNlZHVtcCA9IG5mdF90YXJnZXRfZHVtcDtcXG4tXFx0b3BzLVxcdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfdmFsaWRhdGU7XFxuIFxcdG9wcy1cXHUwMDNlZGF0YSA9IHRhcmdldDtcXG4gXFxuLVxcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19CUklER0UpXFxuK1xcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19CUklER0UpIHtcXG4gXFx0XFx0b3BzLVxcdTAwM2VldmFsID0gbmZ0X3RhcmdldF9ldmFsX2JyaWRnZTtcXG4tXFx0ZWxzZVxcbitcXHRcXHRvcHMtXFx1MDAzZXZhbGlkYXRlID0gbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGU7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdG9wcy1cXHUwMDNlZXZhbCA9IG5mdF90YXJnZXRfZXZhbF94dDtcXG4rXFx0XFx0b3BzLVxcdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfdmFsaWRhdGU7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiBvcHM7XFxuIGVycjpcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5pbmRleCA5NTgwNTRkZDJlMmVjYy4uMDNhODhjNzdlMGYwMjggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5AQCAtMTIxNSwxMSArMTIxNSwyMyBAQCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmoge1xcbiBcXHR1MzJcXHRcXHR0aW1lb3V0O1xcbiB9O1xcbiBcXG4rc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgamlmZmllc192YWwgPSBtc2Vjc190b19qaWZmaWVzKG5sYV9nZXRfdTMyKGF0dHIpKTtcXG4rXFxuK1xcdGlmIChqaWZmaWVzX3ZhbCBcXHUwMDNlIFVJTlRfTUFYKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdCp2YWwgPSBqaWZmaWVzX3ZhbDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoIXRiW05GVEFfQ1RfRVhQRUNUX0w0UFJPVE9dIHx8XFxuIFxcdCAgICAhdGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdIHx8XFxuQEAgLTEyNTQsOCArMTI2NiwxMSBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuIFxcbitcXHRlcnIgPSBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdLCBcXHUwMDI2cHJpdi1cXHUwMDNldGltZW91dCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRwcml2LVxcdTAwM2VkcG9ydCA9IG5sYV9nZXRfYmUxNih0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0pO1xcbi1cXHRwcml2LVxcdTAwM2V0aW1lb3V0ID0gbmxhX2dldF91MzIodGJbTkZUQV9DVF9FWFBFQ1RfVElNRU9VVF0pO1xcbiBcXHRwcml2LVxcdTAwM2VzaXplID0gbmxhX2dldF91OCh0YltORlRBX0NUX0VYUEVDVF9TSVpFXSk7XFxuIFxcbiBcXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cXHUwMDNlbmV0LCBjdHgtXFx1MDAzZWZhbWlseSk7XFxuQEAgLTEyNzUsNyArMTI5MCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAobmxhX3B1dF9iZTE2KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDNQUk9UTywgaHRvbnMocHJpdi1cXHUwMDNlbDNudW0pKSB8fFxcbiBcXHQgICAgbmxhX3B1dF91OChza2IsIE5GVEFfQ1RfRVhQRUNUX0w0UFJPVE8sIHByaXYtXFx1MDAzZWw0cHJvdG8pIHx8XFxuIFxcdCAgICBubGFfcHV0X2JlMTYoc2tiLCBORlRBX0NUX0VYUEVDVF9EUE9SVCwgcHJpdi1cXHUwMDNlZHBvcnQpIHx8XFxuLVxcdCAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIHByaXYtXFx1MDAzZXRpbWVvdXQpIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIE5GVEFfQ1RfRVhQRUNUX1RJTUVPVVQsIGppZmZpZXNfdG9fbXNlY3MocHJpdi1cXHUwMDNldGltZW91dCkpIHx8XFxuIFxcdCAgICBubGFfcHV0X3U4KHNrYiwgTkZUQV9DVF9FWFBFQ1RfU0laRSwgcHJpdi1cXHUwMDNlc2l6ZSkpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuQEAgLTEzMjUsNyArMTM0MCw3IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4gXFx0XFx0ICAgICAgICAgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MyxcXG4gXFx0XFx0ICAgICAgICAgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MyxcXG4gXFx0XFx0ICAgICAgICAgIHByaXYtXFx1MDAzZWw0cHJvdG8sIE5VTEwsIFxcdTAwMjZwcml2LVxcdTAwM2VkcG9ydCk7XFxuLVxcdGV4cC1cXHUwMDNldGltZW91dCArPSBwcml2LVxcdTAwM2V0aW1lb3V0ICogSFo7XFxuK1xcdGV4cC1cXHUwMDNldGltZW91dCArPSBwcml2LVxcdTAwM2V0aW1lb3V0O1xcbiBcXG4gXFx0aWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMClcXG4gXFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcXG5pbmRleCA3NjQxZjI0OTYxNGM5Ny4uOWVkMjg4YzlkMTY4ODAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcXG5AQCAtMjQsMTQgKzI0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICsgMV0gPSB7XFxuIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhzdHJ1Y3Qgc3lucHJveHlfb3B0aW9ucyAqb3B0cyxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3AsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZfc3lucHJveHlfaW5mbyAqaW5mbyxcXG4tXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2KVxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHRoaXNfY3B1X2luYyhzbmV0LVxcdTAwM2VzdGF0cy1cXHUwMDNlc3luX3JlY2VpdmVkKTtcXG4gXFx0aWYgKHRjcC1cXHUwMDNlZWNlIFxcdTAwMjZcXHUwMDI2IHRjcC1cXHUwMDNlY3dyKVxcbiBcXHRcXHRvcHRzLVxcdTAwM2VvcHRpb25zIHw9IE5GX1NZTlBST1hZX09QVF9FQ047XFxuIFxcbi1cXHRvcHRzLVxcdTAwM2VvcHRpb25zIFxcdTAwMjY9IHByaXYtXFx1MDAzZWluZm8ub3B0aW9ucztcXG4rXFx0b3B0cy1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2PSBpbmZvLVxcdTAwM2VvcHRpb25zO1xcbiBcXHRvcHRzLVxcdTAwM2Vtc3NfZW5jb2RlID0gb3B0cy1cXHUwMDNlbXNzX29wdGlvbjtcXG4gXFx0b3B0cy1cXHUwMDNlbXNzX29wdGlvbiA9IGluZm8tXFx1MDAzZW1zcztcXG4gXFx0aWYgKG9wdHMtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNiBORl9TWU5QUk9YWV9PUFRfVElNRVNUQU1QKVxcbkBAIC01Niw3ICs1NSw3IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIFxcbiBcXHRpZiAodGNwLVxcdTAwM2VzeW4pIHtcXG4gXFx0XFx0LyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi9cXG4tXFx0XFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXFx1MDAyNmluZm8sIHByaXYpO1xcbitcXHRcXHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcXHUwMDI2aW5mbyk7XFxuIFxcdFxcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFjayhuZXQsIHNrYiwgdGNwLCBvcHRzKTtcXG4gXFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfU1RPTEVOO1xcbkBAIC04Nyw3ICs4Niw3IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y2KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxuIFxcbiBcXHRpZiAodGNwLVxcdTAwM2VzeW4pIHtcXG4gXFx0XFx0LyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi9cXG4tXFx0XFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXFx1MDAyNmluZm8sIHByaXYpO1xcbitcXHRcXHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcXHUwMDI2aW5mbyk7XFxuIFxcdFxcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFja19pcHY2KG5ldCwgc2tiLCB0Y3AsIG9wdHMpO1xcbiBcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiBcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2hcXG5pbmRleCBkODYwZjdkOTc0NGJmOC4uNzI2MTk3NTk1N2VmMTggMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaFxcbkBAIC0yLDE4ICsyLDMyIEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gI1xcbiAjIFRlc3RpbmcgRm9yIFNDVFAgQ09MTElTSU9OIFNDRU5BUklPIGFzIEJlbG93Olxcbi0jXFxuKyMgMS4gU3RhbGUgSU5JVF9BQ0sgY2FwdHVyZTpcXG4gIyAgIDE0OjM1OjQ3LjY1NTI3OSBJUCBDTElFTlRfSVAuUE9SVCBcXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAyMDE3ODM3MzU5XVxcbiAjICAgMTQ6MzU6NDguMzUzMjUwIElQIFNFUlZFUl9JUC5QT1JUIFxcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUXSBbaW5pdCB0YWc6IDExODcyMDYxODddXFxuICMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgXFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDIwMTc4MzczNTldXFxuICMgICAxNDozNTo0OC4zNTMyODMgSVAgU0VSVkVSX0lQLlBPUlQgXFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBFQ0hPXVxcbiAjICAgMTQ6MzU6NDguMzUzOTc3IElQIENMSUVOVF9JUC5QT1JUIFxcdTAwM2UgU0VSVkVSX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgQUNLXVxcbiAjICAgMTQ6MzU6NDguODU1MzM1IElQIFNFUlZFUl9JUC5QT1JUIFxcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAxNjQ1Nzk5NzBdXFxuKyMgICAoRGVsYXllZClcXG4rI1xcbisjIDIuIFN0YWxlIElOSVQgY2FwdHVyZTpcXG4rIyAgIDE0OjM1OjQ4LjM1MzI1MCBJUCBTRVJWRVJfSVAuUE9SVCBcXHUwMDNlIENMSUVOVF9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAxMTg3MjA2MTg3XVxcbisjICAgMTQ6MzU6NDguMzUzMjc1IElQIENMSUVOVF9JUC5QT1JUIFxcdTAwM2UgU0VSVkVSX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAyMDE3ODM3MzU5XVxcbisjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUIFxcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtDT09LSUUgRUNIT11cXG4rIyAgIDE0OjM1OjQ4LjM1Mzk3NyBJUCBDTElFTlRfSVAuUE9SVCBcXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbQ09PS0lFIEFDS11cXG4rIyAgIDE0OjM1OjQ3LjY1NTI3OSBJUCBDTElFTlRfSVAuUE9SVCBcXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAyMDE3ODM3MzU5XVxcbisjICAgKERlbGF5ZWQpXFxuKyMgICAxNDozNTo0OC44NTUzMzUgSVAgU0VSVkVSX0lQLlBPUlQgXFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDE2NDU3OTk3MF1cXG4gI1xcbiAjIFRPUE86IFNFUlZFUl9OUyAobGluazApXFx1MDAzYy0tLVxcdTAwM2UobGluazEpIFJPVVRFUl9OUyAobGluazIpXFx1MDAzYy0tLVxcdTAwM2UobGluazMpIENMSUVOVF9OU1xcbiBcXG4gc291cmNlIGxpYi5zaFxcbiBcXG4rY2hlY2t0b29sIFxcXCJuZnQgLS12ZXJzaW9uXFxcIiBcXFwicnVuIHRlc3Qgd2l0aG91dCBuZnRcXFwiXFxuK2NoZWNrdG9vbCBcXFwidGMgLWhcXFwiIFxcXCJydW4gdGVzdCB3aXRob3V0IHRjXFxcIlxcbitjaGVja3Rvb2wgXFxcIm1vZHByb2JlIC1xIHNjdHBcXFwiIFxcXCJsb2FkIHNjdHAgbW9kdWxlXFxcIlxcbitcXG4gQ0xJRU5UX0lQPVxcXCIxOTguNTEuMjAwLjFcXFwiXFxuIENMSUVOVF9QT1JUPTEyMzRcXG4gXFxuQEAgLTI0LDcgKzM4LDggQEAgQ0xJRU5UX0dXPVxcXCIxOTguNTEuMjAwLjJcXFwiXFxuIFNFUlZFUl9HVz1cXFwiMTk4LjUxLjEwMC4yXFxcIlxcbiBcXG4gIyBzZXR1cCB0aGUgdG9wb1xcbi1zZXR1cCgpIHtcXG4rdG9wb19zZXR1cCgpIHtcXG4rXFx0IyBzZXR1cF9ucyBjbGVhbnMgdXAgZXhpc3RpbmcgbmV0IG5hbWVzcGFjZXMgZmlyc3QuXFxuIFxcdHNldHVwX25zIENMSUVOVF9OUyBTRVJWRVJfTlMgUk9VVEVSX05TXFxuIFxcdGlwIC1uIFxcXCIkU0VSVkVSX05TXFxcIiBsaW5rIGFkZCBsaW5rMCB0eXBlIHZldGggcGVlciBuYW1lIGxpbmsxIG5ldG5zIFxcXCIkUk9VVEVSX05TXFxcIlxcbiBcXHRpcCAtbiBcXFwiJENMSUVOVF9OU1xcXCIgbGluayBhZGQgbGluazMgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsaW5rMiBuZXRucyBcXFwiJFJPVVRFUl9OU1xcXCJcXG5AQCAtMzgsMzUgKzUzLDUzIEBAIHNldHVwKCkge1xcbiBcXHRpcCAtbiBcXFwiJFJPVVRFUl9OU1xcXCIgYWRkciBhZGQgJFNFUlZFUl9HVy8yNCBkZXYgbGluazFcXG4gXFx0aXAgLW4gXFxcIiRST1VURVJfTlNcXFwiIGFkZHIgYWRkICRDTElFTlRfR1cvMjQgZGV2IGxpbmsyXFxuIFxcdGlwIG5ldCBleGVjIFxcXCIkUk9VVEVSX05TXFxcIiBzeXNjdGwgLXdxIG5ldC5pcHY0LmlwX2ZvcndhcmQ9MVxcbitcXHRzeXNjdGwgLXdxIG5ldC5uZXRmaWx0ZXIubmZfbG9nX2FsbF9uZXRucz0xXFxuIFxcbiBcXHRpcCAtbiBcXFwiJENMSUVOVF9OU1xcXCIgbGluayBzZXQgbGluazMgdXBcXG4gXFx0aXAgLW4gXFxcIiRDTElFTlRfTlNcXFwiIGFkZHIgYWRkICRDTElFTlRfSVAvMjQgZGV2IGxpbmszXFxuIFxcdGlwIC1uIFxcXCIkQ0xJRU5UX05TXFxcIiByb3V0ZSBhZGQgJFNFUlZFUl9JUCBkZXYgbGluazMgdmlhICRDTElFTlRfR1dcXG4rfVxcbitcXG4rY29uZl9kZWxheSgpXFxuK3tcXG4rXFx0IyBzaW11bGF0ZSB0aGUgZGVsYXkgb24gT1ZTIHVwY2FsbCBieSBzZXR0aW5nIHVwIGEgZGVsYXkgZm9yIElOSVRfQUNLL0lOSVQgd2l0aFxcbitcXHRsb2NhbCBucz0kMVxcbitcXHRsb2NhbCBsaW5rPSQyXFxuK1xcdGxvY2FsIGNodW5rX3R5cGU9JDNcXG4gXFxuLVxcdCMgc2ltdWxhdGUgdGhlIGRlbGF5IG9uIE9WUyB1cGNhbGwgYnkgc2V0dGluZyB1cCBhIGRlbGF5IGZvciBJTklUX0FDSyB3aXRoXFxuLVxcdCMgdGMgb24gJFNFUlZFUl9OUyBzaWRlXFxuLVxcdHRjIC1uIFxcXCIkU0VSVkVSX05TXFxcIiBxZGlzYyBhZGQgZGV2IGxpbmswIHJvb3QgaGFuZGxlIDE6IGh0YiByMnEgNjRcXG4tXFx0dGMgLW4gXFxcIiRTRVJWRVJfTlNcXFwiIGNsYXNzIGFkZCBkZXYgbGluazAgcGFyZW50IDE6IGNsYXNzaWQgMToxIGh0YiByYXRlIDEwMG1iaXRcXG4tXFx0dGMgLW4gXFxcIiRTRVJWRVJfTlNcXFwiIGZpbHRlciBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBwcm90b2NvbCBpcCB1MzIgbWF0Y2ggaXAgcHJvdG9jb2wgMTMyIFxcXFxcXG4tXFx0XFx0MHhmZiBtYXRjaCB1OCAyIDB4ZmYgYXQgMzIgZmxvd2lkIDE6MVxcbi1cXHRpZiAhIHRjIC1uIFxcXCIkU0VSVkVSX05TXFxcIiBxZGlzYyBhZGQgZGV2IGxpbmswIHBhcmVudCAxOjEgaGFuZGxlIDEwOiBuZXRlbSBkZWxheSAxMjAwbXM7IHRoZW5cXG4rXFx0IyB1c2UgYSBzbWFsbGVyIG51bWJlciBmb3IgYXNzb2MncyBtYXhfcmV0cmFucyB0byByZXByb2R1Y2UgdGhlIGlzc3VlXFxuK1xcdGlwIG5ldCBleGVjIFxcXCIkQ0xJRU5UX05TXFxcIiBzeXNjdGwgLXdxIG5ldC5zY3RwLmFzc29jaWF0aW9uX21heF9yZXRyYW5zPTNcXG4rXFxuK1xcdHRjIC1uIFxcXCIkbnNcXFwiIHFkaXNjIGFkZCBkZXYgXFxcIiRsaW5rXFxcIiByb290IGhhbmRsZSAxOiBodGIgcjJxIDY0XFxuK1xcdHRjIC1uIFxcXCIkbnNcXFwiIGNsYXNzIGFkZCBkZXYgXFxcIiRsaW5rXFxcIiBwYXJlbnQgMTogY2xhc3NpZCAxOjEgaHRiIHJhdGUgMTAwbWJpdFxcbitcXHR0YyAtbiBcXFwiJG5zXFxcIiBmaWx0ZXIgYWRkIGRldiBcXFwiJGxpbmtcXFwiIHBhcmVudCAxOiBwcm90b2NvbCBpcCBcXFxcXFxuK1xcdFxcdHUzMiBtYXRjaCBpcCBwcm90b2NvbCAxMzIgMHhmZiBtYXRjaCB1OCBcXFwiJGNodW5rX3R5cGVcXFwiIDB4ZmYgYXQgMzIgZmxvd2lkIDE6MVxcbitcXHRpZiAhIHRjIC1uIFxcXCIkbnNcXFwiIHFkaXNjIGFkZCBkZXYgXFxcIiRsaW5rXFxcIiBwYXJlbnQgMToxIGhhbmRsZSAxMDogbmV0ZW0gZGVsYXkgMTIwMG1zOyB0aGVuXFxuIFxcdFxcdGVjaG8gXFxcIlNLSVA6IENhbm5vdCBhZGQgbmV0ZW0gcWRpc2NcXFwiXFxuLVxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbiBcXHRmaVxcbiBcXG4gXFx0IyBzaW11bGF0ZSB0aGUgY3RzdGF0ZSBjaGVjayBvbiBPVlMgbmZfY29ubnRyYWNrXFxuLVxcdGlwIG5ldCBleGVjIFxcXCIkUk9VVEVSX05TXFxcIiBpcHRhYmxlcyAtQSBGT1JXQVJEIC1tIHN0YXRlIC0tc3RhdGUgSU5WQUxJRCxVTlRSQUNLRUQgLWogRFJPUFxcbi1cXHRpcCBuZXQgZXhlYyBcXFwiJFJPVVRFUl9OU1xcXCIgaXB0YWJsZXMgLUEgSU5QVVQgLXAgc2N0cCAtaiBEUk9QXFxuLVxcbi1cXHQjIHVzZSBhIHNtYWxsZXIgbnVtYmVyIGZvciBhc3NvYydzIG1heF9yZXRyYW5zIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWVcXG4tXFx0bW9kcHJvYmUgLXEgc2N0cFxcbi1cXHRpcCBuZXQgZXhlYyBcXFwiJENMSUVOVF9OU1xcXCIgc3lzY3RsIC13cSBuZXQuc2N0cC5hc3NvY2lhdGlvbl9tYXhfcmV0cmFucz0zXFxuK1xcdGlwIG5ldCBleGVjIFxcXCIkUk9VVEVSX05TXFxcIiBuZnQgLWYgLSBcXHUwMDNjXFx1MDAzYy1FT0ZcXG4rXFx0dGFibGUgaXAgdCB7XFxuK1xcdFxcdGNoYWluIGZvcndhcmQge1xcbitcXHRcXHRcXHR0eXBlIGZpbHRlciBob29rIGZvcndhcmQgcHJpb3JpdHkgZmlsdGVyOyBwb2xpY3kgYWNjZXB0O1xcbitcXHRcXHRcXHRtZXRhIGw0cHJvdG8gaWNtcCBjb3VudGVyIGFjY2VwdFxcbitcXHRcXHRcXHRjdCBzdGF0ZSBuZXcgY291bnRlciBhY2NlcHRcXG4rXFx0XFx0XFx0Y3Qgc3RhdGUgZXN0YWJsaXNoZWQscmVsYXRlZCBjb3VudGVyIGFjY2VwdFxcbitcXHRcXHRcXHRjdCBzdGF0ZSBpbnZhbGlkIGxvZyBmbGFncyBhbGwgY291bnRlciBkcm9wIGNvbW1lbnQgXFxcXFxcbitcXHRcXHRcXHRcXFwiRXhwZWN0IHRvIGRyb3Agc3RhbGUgSU5JVC9JTklUX0FDSyBjaHVua3NcXFwiXFxuK1xcdFxcdFxcdGNvdW50ZXJcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdEVPRlxcbitcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbiBjbGVhbnVwKCkge1xcbi1cXHRpcCBuZXQgZXhlYyBcXFwiJENMSUVOVF9OU1xcXCIgcGtpbGwgc2N0cF9jb2xsaXNpb24gXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxXFxuLVxcdGlwIG5ldCBleGVjIFxcXCIkU0VSVkVSX05TXFxcIiBwa2lsbCBzY3RwX2NvbGxpc2lvbiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0IyBjbGVhbnVwX2FsbF9ucyB0ZXJtaW5hdGVzIHJ1bm5pbmcgcHJvY2Vzc2VzIGluIHRoZSBuYW1lc3BhY2VzLlxcbiBcXHRjbGVhbnVwX2FsbF9uc1xcbitcXHRzeXNjdGwgLXdxIG5ldC5uZXRmaWx0ZXIubmZfbG9nX2FsbF9uZXRucz0wXFxuIH1cXG4gXFxuIGRvX3Rlc3QoKSB7XFxuQEAgLTgxLDcgKzExNCwxOSBAQCBkb190ZXN0KCkge1xcbiBcXG4gIyBydW4gdGhlIHRlc3QgY2FzZVxcbiB0cmFwIGNsZWFudXAgRVhJVFxcbi1zZXR1cCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLWVjaG8gXFxcIlRlc3QgZm9yIFNDVFAgQ29sbGlzaW9uIGluIG5mX2Nvbm50cmFjazpcXFwiIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4tZG9fdGVzdCBcXHUwMDI2XFx1MDAyNiBlY2hvIFxcXCJQQVNTIVxcXCJcXG4tZXhpdCAkP1xcbitcXG4rZWNobyBcXFwiVGVzdCBmb3IgU0NUUCBJTklUX0FDSyBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlxcXCJcXG4rdG9wb19zZXR1cCB8fCBleGl0ICQ/XFxuK2NvbmZfZGVsYXkgJFNFUlZFUl9OUyBsaW5rMCAyIHx8IGV4aXQgJD9cXG4rXFxuK2lmICEgZG9fdGVzdDsgdGhlblxcbitcXHRleGl0ICRrc2Z0X2ZhaWxcXG4rZmlcXG4rXFxuK2VjaG8gXFxcIlRlc3QgZm9yIFNDVFAgSU5JVCBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlxcXCJcXG4rdG9wb19zZXR1cCB8fCBleGl0ICQ/XFxuK2NvbmZfZGVsYXkgJENMSUVOVF9OUyBsaW5rMyAxIHx8IGV4aXQgJD9cXG4rXFxuK2lmICEgZG9fdGVzdDsgdGhlblxcbitcXHRleGl0ICRrc2Z0X2ZhaWxcXG4rZmlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaFxcbmluZGV4IGQ4MDM5MDg0OGU4NTA5Li43Yzg1N2EyZTBmMzQ5NCAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLnNoXFxuQEAgLTg1LDExICs4NSwxMiBAQCBpcCAtbmV0IFxcXCIkbnMzXFxcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTAuMC4zLjFcXG4gaXAgLW5ldCBcXFwiJG5zM1xcXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIGRlYWQ6Mzo6MVxcbiBcXG4gbG9hZF9ydWxlc2V0KCkge1xcbi1cXHRsb2NhbCBuYW1lPSQxXFxuLVxcdGxvY2FsIHByaW89JDJcXG4rXFx0bG9jYWwgZmFtaWx5PSQxXFxuK1xcdGxvY2FsIG5hbWU9JDJcXG4rXFx0bG9jYWwgcHJpbz0kM1xcbiBcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcm91dGVyXFxcIiBuZnQgLWYgL2Rldi9zdGRpbiBcXHUwMDNjXFx1MDAzY0VPRlxcbi10YWJsZSBpbmV0ICRuYW1lIHtcXG4rdGFibGUgJGZhbWlseSAkbmFtZSB7XFxuIFxcdGNoYWluIG5mcSB7XFxuIFxcdFxcdGlwIHByb3RvY29sIGljbXAgcXVldWUgYnlwYXNzXFxuIFxcdFxcdGljbXB2NiB0eXBlIHsgXFxcImVjaG8tcmVxdWVzdFxcXCIsIFxcXCJlY2hvLXJlcGx5XFxcIiB9IHF1ZXVlIG51bSAxIGJ5cGFzc1xcbkBAIC0yMjgsNiArMjI5LDcgQEAgbmZfcXVldWVfd2FpdCgpXFxuIHRlc3RfcXVldWUoKVxcbiB7XFxuIFxcdGxvY2FsIGV4cGVjdGVkPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgZmFtaWx5PVxcXCIkMlxcXCJcXG4gXFx0bG9jYWwgbGFzdD1cXFwiXFxcIlxcbiBcXG4gXFx0IyBzcGF3biBuZl9xdWV1ZSBsaXN0ZW5lcnNcXG5AQCAtMjU1LDExICsyNTcsMTMgQEAgdGVzdF9xdWV1ZSgpXFxuIFxcdFxcdGlmIFsgeFxcXCIkbGFzdFxcXCIgIT0geFxcXCIkZXhwZWN0ZWQgcGFja2V0cyB0b3RhbFxcXCIgXTsgdGhlblxcbiBcXHRcXHRcXHRlY2hvIFxcXCJGQUlMOiBFeHBlY3RlZCAkZXhwZWN0ZWQgcGFja2V0cyB0b3RhbCwgYnV0IGdvdCAkbGFzdFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbiBcXHRcXHRcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyb3V0ZXJcXFwiIG5mdCBsaXN0IHJ1bGVzZXRcXG4rXFx0XFx0XFx0ZWNobyAtbiBcXFwiJFRNUEZJTEUwOiBcXFwiO2NhdCBcXFwiJFRNUEZJTEUwXFxcIlxcbitcXHRcXHRcXHRlY2hvIC1uIFxcXCIkVE1QRklMRTE6IFxcXCI7Y2F0IFxcXCIkVE1QRklMRTFcXFwiXFxuIFxcdFxcdFxcdGV4aXQgMVxcbiBcXHRcXHRmaVxcbiBcXHRkb25lXFxuIFxcbi1cXHRlY2hvIFxcXCJQQVNTOiBFeHBlY3RlZCBhbmQgcmVjZWl2ZWQgJGxhc3RcXFwiXFxuK1xcdGVjaG8gXFxcIlBBU1M6IEV4cGVjdGVkIGFuZCByZWNlaXZlZCAkbGFzdCAoJGZhbWlseSlcXFwiXFxuIH1cXG4gXFxuIGxpc3RlbmVyX3JlYWR5KClcXG5AQCAtNDAwLDYgKzQwNCw4IEBAIEVPRlxcbiBcXG4gXFx0a2lsbCBcXFwiJG5mcXBpZFxcXCJcXG4gXFx0ZWNobyBcXFwiUEFTUzogaWNtcCtuZnF1ZXVlIHZpYSB2cmZcXFwiXFxuK1xcdGlwIC1uZXQgXFxcIiRuczFcXFwiIGxpbmsgZGVsIHR2cmZcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zMVxcXCIgbmZ0IGZsdXNoIHJ1bGVzZXRcXG4gfVxcbiBcXG4gc2N0cF9saXN0ZW5lcl9yZWFkeSgpXFxuQEAgLTgxNCwxMiArODIwLDUzIEBAIEVPRlxcbiBcXHRjaGVja190YWludGVkIFxcXCJxdWV1ZSBwcm9ncmFtIGV4aXRpbmcgd2hpbGUgcGFja2V0cyBxdWV1ZWRcXFwiXFxuIH1cXG4gXFxuK3Rlc3RfcXVldWVfYnJpZGdlKClcXG4re1xcbitcXHRpcCAtbmV0IFxcXCIkbnNyb3V0ZXJcXFwiIGFkZHIgZmx1c2ggZGV2IHZldGgwXFxuK1xcdGlwIC1uZXQgXFxcIiRuc3JvdXRlclxcXCIgYWRkciBmbHVzaCBkZXYgdmV0aDFcXG4rXFxuK1xcdGlwIC1uZXQgXFxcIiRuc3JvdXRlclxcXCIgbGluayBhZGQgYnIwIHR5cGUgYnJpZGdlXFxuK1xcdGlwIC1uZXQgXFxcIiRuc3JvdXRlclxcXCIgbGluayBzZXQgdmV0aDAgbWFzdGVyIGJyMFxcbitcXHRpcCAtbmV0IFxcXCIkbnNyb3V0ZXJcXFwiIGxpbmsgc2V0IHZldGgxIG1hc3RlciBicjBcXG4rXFxuK1xcdGlwIC1uZXQgXFxcIiRuc3JvdXRlclxcXCIgbGluayBzZXQgYnIwIHVwXFxuK1xcbitcXHRpcCAtbmV0IFxcXCIkbnNyb3V0ZXJcXFwiIGFkZHIgYWRkIDEwLjAuMi4xLzE2IGRldiBicjBcXG4rXFx0aXAgLW5ldCBcXFwiJG5zcm91dGVyXFxcIiBhZGRyIGFkZCBkZWFkOjI6OjEvNjQgZGV2IGJyMCBub2RhZFxcbitcXG4rXFx0aXAgLW5ldCBcXFwiJG5zMVxcXCIgYWRkciBmbHVzaCBkZXYgZXRoMFxcbitcXHRpcCAtbmV0IFxcXCIkbnMyXFxcIiBhZGRyIGZsdXNoIGRldiBldGgwXFxuK1xcbitcXHRpcCAtbmV0IFxcXCIkbnMxXFxcIiBhZGRyIGFkZCAxMC4wLjEuMS8xNiBkZXYgZXRoMFxcbitcXHRpcCAtbmV0IFxcXCIkbnMxXFxcIiBhZGRyIGFkZCBkZWFkOjI6OjIvNjQgZGV2IGV0aDAgbm9kYWRcXG4rXFxuK1xcdGlwIC1uZXQgXFxcIiRuczJcXFwiIGFkZHIgYWRkIDEwLjAuMi45OS8xNiBkZXYgZXRoMFxcbitcXHRpcCAtbmV0IFxcXCIkbnMyXFxcIiBhZGRyIGFkZCBkZWFkOjI6Ojk5LzY0IGRldiBldGgwIG5vZGFkXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyb3V0ZXJcXFwiIG5mdCBmbHVzaCBydWxlc2V0XFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyb3V0ZXJcXFwiIHN5c2N0bCBuZXQuaXB2Ni5jb25mLmFsbC5mb3J3YXJkaW5nPTAgXFx1MDAzZSAvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcm91dGVyXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMC5mb3J3YXJkaW5nPTAgXFx1MDAzZSAvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcm91dGVyXFxcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS5mb3J3YXJkaW5nPTAgXFx1MDAzZSAvZGV2L251bGxcXG4rXFxuK1xcdGlmICEgdGVzdF9waW5nO3RoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogbmV0bnMgYnJpZGdlIGNvbm5lY3Rpdml0eVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRleGl0ICRyZXRcXG4rXFx0ZmlcXG4rXFxuK1xcdGxvYWRfcnVsZXNldCBcXFwiYnJpZGdlXFxcIiBcXFwiZmlsdGVyXFxcIiAxMFxcbitcXHR0ZXN0X3F1ZXVlIDEwIFxcXCJicmlkZ2VcXFwiXFxuK1xcbitcXHRsb2FkX3J1bGVzZXQgXFxcImJyaWRnZVxcXCIgXFxcImZpbHRlcjJcXFwiIDIwXFxuK1xcdHRlc3RfcXVldWUgMjAgXFxcImJyaWRnZVxcXCJcXG4rfVxcbitcXG4gaXAgbmV0bnMgZXhlYyBcXFwiJG5zcm91dGVyXFxcIiBzeXNjdGwgbmV0LmlwdjYuY29uZi5hbGwuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3JvdXRlclxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDAuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3JvdXRlclxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDEuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3JvdXRlclxcXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDIuZm9yd2FyZGluZz0xIFxcdTAwM2UgL2Rldi9udWxsXFxuIFxcbi1sb2FkX3J1bGVzZXQgXFxcImZpbHRlclxcXCIgMFxcbitsb2FkX3J1bGVzZXQgXFxcImluZXRcXFwiIFxcXCJmaWx0ZXJcXFwiIDBcXG4gXFxuIGlmIHRlc3RfcGluZzsgdGhlblxcbiBcXHQjIHF1ZXVlIGJ5cGFzcyB3b3JrcyAocnVsZXMgd2VyZSBza2lwcGVkLCBubyBsaXN0ZW5lcilcXG5AQCAtODQyLDExICs4ODksMTEgQEAgbG9hZF9jb3VudGVyX3J1bGVzZXQgMTBcXG4gIyAxeCBpY21wIHByZXJvdXRpbmcsZm9yd2FyZCxwb3N0cm91dGluZyAtXFx1MDAzZSAzIHF1ZXVlIGV2ZW50cyAoNiBpbmNsLiByZXBseSkuXFxuICMgMXggaWNtcCBwcmVyb3V0aW5nLGlucHV0LG91dHB1dCBwb3N0cm91dGluZyAtXFx1MDAzZSA0IHF1ZXVlIGV2ZW50cyBpbmNsLiByZXBseS5cXG4gIyBzbyB3ZSBleHBlY3QgdGhhdCB1c2Vyc3BhY2UgcHJvZ3JhbSByZWNlaXZlcyAxMCBwYWNrZXRzLlxcbi10ZXN0X3F1ZXVlIDEwXFxuK3Rlc3RfcXVldWUgMTAgXFxcImluZXRcXFwiXFxuIFxcbiAjIHNhbWUuICBXZSBxdWV1ZSB0byBhIHNlY29uZCBwcm9ncmFtIGFzIHdlbGwuXFxuLWxvYWRfcnVsZXNldCBcXFwiZmlsdGVyMlxcXCIgMjBcXG4tdGVzdF9xdWV1ZSAyMFxcbitsb2FkX3J1bGVzZXQgXFxcImluZXRcXFwiIFxcXCJmaWx0ZXIyXFxcIiAyMFxcbit0ZXN0X3F1ZXVlIDIwIFxcXCJpbmV0XFxcIlxcbiBpcCBuZXRucyBleGVjIFxcXCIkbnMxXFxcIiBuZnQgZmx1c2ggcnVsZXNldFxcbiBcXG4gdGVzdF90Y3BfZm9yd2FyZFxcbkBAIC04NjMsNCArOTEwLDcgQEAgdGVzdF9xdWV1ZV9zdHJlc3NcXG4gdGVzdF9pY21wX3ZyZlxcbiB0ZXN0X3F1ZXVlX3JlbW92YWxcXG4gXFxuKyMgdHVybnMgcm91dGVyIGludG8gYSBicmlkZ2VcXG4rdGVzdF9xdWV1ZV9icmlkZ2VcXG4rXFxuIGV4aXQgJHJldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MToxOS4yMzU3MzkxM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA2ODIxMDQ4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfQ09NUEFUXCIsXG4gICAgXCJORlRfQ1RcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbmZfY29ubmNvdW50X2FkZFwiLFxuICAgIFwiX19uZl9jdF9leHBlY3RfY2hlY2tcIixcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlclwiLFxuICAgIFwiY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19leHBlY3RcIixcbiAgICBcIm5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b1wiLFxuICAgIFwibmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y0XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbmV0ZmlsdGVyLCBpbmNsdWRpbmcgY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBjb21wYXRpYmlsaXR5LiBJdCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvbm5lY3Rpb24gY291bnRpbmcsIGV4cGVjdGF0aW9uIGNoZWNraW5nLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSXQgYWxzbyBhZGRzIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGJyaWRnZSB0YXJnZXRzIGluIG5mdF9jb21wYXQgYW5kIGZpeGVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gbmZ0X2N0LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG9yIGJ5IHByb2Nlc3NpbmcgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNTIxZGQxOGYxMmI2MmFiYTI2ZjA4NmEzMWU0OTAyMDMxZGI5OTYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMjI6NDE6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxuaW5kZXggMjBkNzBkZGRiZTUwOTguLjI1MDYyZjRhMGRkNWYxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaFxuQEAgLTE4LDcgKzE4LDcgQEBcbiAgKiBAbWF0Y2g6XHR0aGUgbWF0Y2ggZXh0ZW5zaW9uXG4gICogQHRhcmdldDpcdHRoZSB0YXJnZXQgZXh0ZW5zaW9uXG4gICogQG1hdGNoaW5mbzpcdHBlci1tYXRjaCBkYXRhXG4tICogQHRhcmdldGluZm86XHRwZXItdGFyZ2V0IGRhdGFcbisgKiBAdGFyZ2luZm86XHRwZXItdGFyZ2V0IGRhdGFcbiAgKiBAc3RhdGU6XHRwb2ludGVyIHRvIGhvb2sgc3RhdGUgdGhpcyBwYWNrZXQgY2FtZSBmcm9tXG4gICogQGZyYWdvZmY6XHRwYWNrZXQgaXMgYSBmcmFnbWVudCwgdGhpcyBpcyB0aGUgZGF0YSBvZmZzZXRcbiAgKiBAdGhvZmY6XHRwb3NpdGlvbiBvZiB0cmFuc3BvcnQgaGVhZGVyIHJlbGF0aXZlIHRvIHNrYi1cdTAwM2VkYXRhXG5AQCAtNzcsNyArNzcsOSBAQCBzdGF0aWMgaW5saW5lIHVfaW50OF90IHh0X2ZhbWlseShjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gICogQG1hdGNoOlx0c3RydWN0IHh0X21hdGNoIHRocm91Z2ggd2hpY2ggdGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZFxuICAqIEBtYXRjaGluZm86XHRwZXItbWF0Y2ggZGF0YVxuICAqIEBob29rX21hc2s6XHR2aWEgd2hpY2ggaG9va3MgdGhlIG5ldyBydWxlIGlzIHJlYWNoYWJsZVxuLSAqIE90aGVyIGZpZWxkcyBhcyBhYm92ZS5cbisgKiBAZmFtaWx5Olx0YWN0dWFsIE5GUFJPVE9fKiB0aHJvdWdoIHdoaWNoIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkXG4rICpcdFx0KGhlbHBmdWwgd2hlbiBtYXRjaC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19VTlNQRUMpXG4rICogQG5mdF9jb21wYXQ6XHRydW5uaW5nIGZyb20gdGhlIG5mdCBjb21wYXQgbGF5ZXIgaWYgdHJ1ZVxuICAqL1xuIHN0cnVjdCB4dF9tdGNoa19wYXJhbSB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG5AQCAtOTEsOCArOTMsMTMgQEAgc3RydWN0IHh0X210Y2hrX3BhcmFtIHtcbiB9O1xuIFxuIC8qKlxuLSAqIHN0cnVjdCB4dF9tZHRvcl9wYXJhbSAtIG1hdGNoIGRlc3RydWN0b3IgcGFyYW1ldGVyc1xuLSAqIEZpZWxkcyBhcyBhYm92ZS5cbisgKiBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIC0gbWF0Y2ggZGVzdHJ1Y3RvciBwYXJhbWV0ZXJzXG4rICpcbisgKiBAbmV0Olx0bmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCB3aGljaCB0aGUgY2hlY2sgd2FzIGludm9rZWRcbisgKiBAbWF0Y2g6XHRzdHJ1Y3QgeHRfbWF0Y2ggdGhyb3VnaCB3aGljaCB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkXG4rICogQG1hdGNoaW5mbzpcdHBlci1tYXRjaCBkYXRhXG4rICogQGZhbWlseTpcdGFjdHVhbCBORlBST1RPXyogdGhyb3VnaCB3aGljaCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZFxuKyAqXHRcdChoZWxwZnVsIHdoZW4gbWF0Y2gtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fVU5TUEVDKVxuICAqL1xuIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuQEAgLTEwNSwxMCArMTEyLDE2IEBAIHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0ge1xuICAqIHN0cnVjdCB4dF90Z2Noa19wYXJhbSAtIHBhcmFtZXRlcnMgZm9yIHRhcmdldCBleHRlbnNpb25zJ1xuICAqIGNoZWNrZW50cnkgZnVuY3Rpb25zXG4gICpcbisgKiBAbmV0Olx0bmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCB3aGljaCB0aGUgY2hlY2sgd2FzIGludm9rZWRcbisgKiBAdGFibGU6XHR0YWJsZSB0aGUgcnVsZSBpcyB0cmllZCB0byBiZSBpbnNlcnRlZCBpbnRvXG4gICogQGVudHJ5aW5mbzpcdHRoZSBmYW1pbHktc3BlY2lmaWMgcnVsZSBkYXRhXG4gICogXHRcdChzdHJ1Y3QgaXB0X2VudHJ5LCBpcDZ0X2VudHJ5LCBhcnB0X2VudHJ5LCBlYnRfZW50cnkpXG4tICpcbi0gKiBPdGhlciBmaWVsZHMgc2VlIGFib3ZlLlxuKyAqIEB0YXJnZXQ6XHR0aGUgdGFyZ2V0IGV4dGVuc2lvblxuKyAqIEB0YXJnaW5mbzpcdHBlci10YXJnZXQgZGF0YVxuKyAqIEBob29rX21hc2s6XHR2aWEgd2hpY2ggaG9va3MgdGhlIG5ldyBydWxlIGlzIHJlYWNoYWJsZVxuKyAqIEBmYW1pbHk6XHRhY3R1YWwgTkZQUk9UT18qIHRocm91Z2ggd2hpY2ggdGhlIGZ1bmN0aW9uIGlzIGludm9rZWRcbisgKlx0XHQoaGVscGZ1bCB3aGVuIG1hdGNoLVx1MDAzZWZhbWlseSA9PSBORlBST1RPX1VOU1BFQylcbisgKiBAbmZ0X2NvbXBhdDpcdHJ1bm5pbmcgZnJvbSB0aGUgbmZ0IGNvbXBhdCBsYXllciBpZiB0cnVlXG4gICovXG4gc3RydWN0IHh0X3RnY2hrX3BhcmFtIHtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbkBAIC0zMzYsOSArMzQ5LDkgQEAgc3RydWN0IHh0X3RhYmxlX2luZm8gKnh0X2FsbG9jX3RhYmxlX2luZm8odW5zaWduZWQgaW50IHNpemUpO1xuIHZvaWQgeHRfZnJlZV90YWJsZV9pbmZvKHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKTtcbiBcbiAvKipcbi0gKiB4dF9yZWNzZXEgLSByZWN1cnNpdmUgc2VxY291bnQgZm9yIG5ldGZpbHRlciB1c2VcbisgKiB2YXIgeHRfcmVjc2VxIC0gcmVjdXJzaXZlIHNlcWNvdW50IGZvciBuZXRmaWx0ZXIgdXNlXG4gICpcbi0gKiBQYWNrZXQgcHJvY2Vzc2luZyBjaGFuZ2VzIHRoZSBzZXFjb3VudCBvbmx5IGlmIG5vIHJlY3Vyc2lvbiBoYXBwZW5lZFxuKyAqIFBhY2tldCBwcm9jZXNzaW5nIGNoYW5nZXMgdGhlIHNlcWNvdW50IG9ubHkgaWYgbm8gcmVjdXJzaW9uIGhhcHBlbmVkLlxuICAqIGdldF9jb3VudGVycygpIGNhbiB1c2UgcmVhZF9zZXFjb3VudF9iZWdpbigpL3JlYWRfc2VxY291bnRfcmV0cnkoKSxcbiAgKiBiZWNhdXNlIHdlIHVzZSB0aGUgbm9ybWFsIHNlcWNvdW50IGNvbnZlbnRpb24gOlxuICAqIExvdyBvcmRlciBiaXQgc2V0IHRvIDEgaWYgYSB3cml0ZXIgaXMgYWN0aXZlLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXG5pbmRleCBiZTRhMTIwZDU0OWViMy4uYzAyNDM0NWM5YmQ4NjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXG5AQCAtMjYsNiArMjYsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCB7XG4gXHRwb3NzaWJsZV9uZXRfdCBuZXQ7XG4gXG4gXHQvKiBXZSBleHBlY3QgdGhpcyB0dXBsZSwgd2l0aCB0aGUgZm9sbG93aW5nIG1hc2sgKi9cbitcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyX3R1cGxlO1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfbWFzayBtYXNrO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5pbmRleCA4MTAyNTEwMWY4NmRhYS4uYzc2MWNkODE1OGIyNTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5AQCAtMTE0LDYgKzExNCwxMCBAQCBpbnQgbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiwgdW5zaWduZWQgaW50LFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50KTtcbiBcbisjZGVmaW5lIG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChuYW1lKSBcXFxuK1x0cHJfd2FybihcIlRoZSAlcyBjb25udHJhY2sgaGVscGVyIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbC5cXG5cIlx0XFxcbitcdFx0XCJQbGVhc2UgY29udGFjdCB0aGUgbmV0ZmlsdGVyLWRldmVsIG1haWxpbmcgbGlzdCBpZiB5b3Ugc3RpbGwgbmVlZCB0aGlzLlxcblwiLCBuYW1lKVxuK1xuIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKTtcbiBcbiBpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xuaW5kZXggNjY1ZjgwMDhjYzRiMjcuLjRjMDRjZDhkNDBhMjI5IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnXG4rKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWdcbkBAIC0yNTYsOCArMjU2LDcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG4gXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIFxuIGNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG4tXHR0cmlzdGF0ZSBcIklSQyBwcm90b2NvbCBzdXBwb3J0XCJcbi1cdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuK1x0dHJpc3RhdGUgXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwiXG4gXHRoZWxwXG4gXHQgIFRoZXJlIGlzIGEgY29tbW9ubHktdXNlZCBleHRlbnNpb24gdG8gSVJDIGNhbGxlZFxuIFx0ICBEaXJlY3QgQ2xpZW50LXRvLUNsaWVudCBQcm90b2NvbCAoRENDKS4gIFRoaXMgZW5hYmxlcyB1c2VycyB0byBzZW5kXG5AQCAtMjY3LDYgKzI2Niw4IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG4gXHQgIHVzaW5nIE5BVCwgdGhpcyBleHRlbnNpb24gd2lsbCBlbmFibGUgeW91IHRvIHNlbmQgZmlsZXMgYW5kIGluaXRpYXRlXG4gXHQgIGNoYXRzLiAgTm90ZSB0aGF0IHlvdSBkbyBOT1QgbmVlZCB0aGlzIGV4dGVuc2lvbiB0byBnZXQgZmlsZXMgb3JcbiBcdCAgaGF2ZSBvdGhlcnMgaW5pdGlhdGUgY2hhdHMsIG9yIGV2ZXJ5dGhpbmcgZWxzZSBpbiBJUkMuXG4rXHQgIERDQyB0cmFja2luZyBiZWhpbmQgTkFUIHJlcXVpcmVzIHBsYWludGV4dCAodW5lbmNyeXB0ZWQpIElSQywgc29cbitcdCAgdGhpcyBoZWxwZXIgaXMgb2YgbGltaXRlZCB1c2UgdGhlc2UgZGF5cy5cbiBcbiBcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gXG5AQCAtMzA4LDE3ICszMDksMTcgQEAgY29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG4gXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxuIFxuIGNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxuLVx0dHJpc3RhdGUgXCJQUHRQIHByb3RvY29sIHN1cHBvcnRcIlxuK1x0dHJpc3RhdGUgXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCJcbiBcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gXHRzZWxlY3QgTkZfQ1RfUFJPVE9fR1JFXG4gXHRoZWxwXG4gXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgUFBUUCAoUG9pbnQgdG8gUG9pbnQgVHVubmVsbGluZ1xuIFx0ICBQcm90b2NvbCwgUkZDMjYzNykgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgTkFULlxuIFxuLVx0ICBJZiB5b3UgYXJlIHJ1bm5pbmcgUFBUUCBzZXNzaW9ucyBvdmVyIGEgc3RhdGVmdWwgZmlyZXdhbGwgb3IgTkFUXG4rXHQgIElmIHlvdSBhcmUgc3RpbGwgcnVubmluZyBQUFRQIHNlc3Npb25zIG92ZXIgYSBzdGF0ZWZ1bCBmaXJld2FsbCBvciBOQVRcbiBcdCAgYm94LCB5b3UgbWF5IHdhbnQgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS5cbiBcbi1cdCAgUGxlYXNlIG5vdGUgdGhhdCBub3QgYWxsIFBQVFAgbW9kZXMgb2Ygb3BlcmF0aW9uIGFyZSBzdXBwb3J0ZWQgeWV0LlxuK1x0ICBQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgUFBUUCBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIHN1cHBvcnRlZC5cbiBcdCAgU3BlY2lmaWNhbGx5IHRoZXNlIGxpbWl0YXRpb25zIGV4aXN0OlxuIFx0ICAgIC0gQmxpbmRseSBhc3N1bWVzIHRoYXQgY29udHJvbCBjb25uZWN0aW9ucyBhcmUgYWx3YXlzIGVzdGFibGlzaGVkXG4gXHQgICAgICBpbiBQTlMtXHUwMDNlUEFDIGRpcmVjdGlvbi4gVGhpcyBpcyBhIHZpb2xhdGlvbiBvZiBSRkMyNjM3LlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5pbmRleCBkZDY3MDA0YTVjYzA5ZS4uOTE1ODIwNjlmNmQyZWUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jXG5AQCAtMTgzLDE3ICsxODMsMTYgQEAgc3RhdGljIGludCBfX25mX2Nvbm5jb3VudF9hZGQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGlmIChjdCBcdTAwMjZcdTAwMjYgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xuLVx0XHQvKiBsb2NhbCBjb25uZWN0aW9ucyBhcmUgY29uZmlybWVkIGluIHBvc3Ryb3V0aW5nIHNvIGNvbmZpcm1hdGlvblxuLVx0XHQgKiBtaWdodCBoYXZlIGhhcHBlbmVkIGJlZm9yZSBoaXR0aW5nIGNvbm5saW1pdFxuK1x0XHQvKiBDb25uZWN0aW9uIGlzIGNvbmZpcm1lZCBidXQgbWlnaHQgc3RpbGwgYmUgaW4gdGhlIHNldHVwIHBoYXNlLlxuK1x0XHQgKiBPbmx5IHNraXAgdGhlIHRyYWNraW5nIGlmIGl0IGlzIGZ1bGx5IGFzc3VyZWQuIFRoaXMgZ3VhcmFudGVlc1xuK1x0XHQgKiB0aGF0IHNldHVwIHBhY2tldHMgb3IgcmV0cmFuc21pc3Npb25zIGFyZSBwcm9wZXJseSBjb3VudGVkIGFuZFxuK1x0XHQgKiBkZWR1cGxpY2F0ZWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoc2tiLVx1MDAzZXNrYl9paWYgIT0gTE9PUEJBQ0tfSUZJTkRFWCkge1xuK1x0XHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKSB7XG4gXHRcdFx0ZXJyID0gLUVFWElTVDtcbiBcdFx0XHRnb3RvIG91dF9wdXQ7XG4gXHRcdH1cbiBcbi1cdFx0LyogdGhpcyBpcyBsaWtlbHkgYSBsb2NhbCBjb25uZWN0aW9uLCBza2lwIG9wdGltaXphdGlvbiB0byBhdm9pZFxuLVx0XHQgKiBhZGRpbmcgZHVwbGljYXRlcyBmcm9tIGEgJ3BhY2tldCB0cmFpbidcbi1cdFx0ICovXG4gXHRcdGdvdG8gY2hlY2tfY29ubmVjdGlvbnM7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icm9hZGNhc3QuY1xuaW5kZXggNDAwMTE5YjYzMjBlNzIuLmJmNzg4MjhjNzU0OWQ0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJvYWRjYXN0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Jyb2FkY2FzdC5jXG5AQCAtNjIsNiArNjIsNyBAQCBpbnQgbmZfY29ubnRyYWNrX2Jyb2FkY2FzdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoZXhwID09IE5VTEwpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0ZXhwLVx1MDAzZW1hc3Rlcl90dXBsZVx0ICA9IGN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuIFx0ZXhwLVx1MDAzZXR1cGxlICAgICAgICAgICAgICAgID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XG4gXG4gXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cdTAwM2VoZWxwZXIpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbmluZGV4IDQ5ZTE4ZWRhMDM3ZWYxLi4zODYzMGM1ZTAwNmYwOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuQEAgLTM1NSw2ICszNTUsOCBAQCB2b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHVuc2lnbmVkIGludCBjbGFzcyxcbiBcdGV4cC1cdTAwM2V0dXBsZS5zcmMubDNudW0gPSBmYW1pbHk7XG4gXHRleHAtXHUwMDNldHVwbGUuZHN0LnByb3RvbnVtID0gcHJvdG87XG4gXG4rXHRleHAtXHUwMDNlbWFzdGVyX3R1cGxlID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4rXG4gXHRpZiAoc2FkZHIpIHtcbiBcdFx0bWVtY3B5KFx1MDAyNmV4cC1cdTAwM2V0dXBsZS5zcmMudTMsIHNhZGRyLCBsZW4pO1xuIFx0XHRpZiAoc2l6ZW9mKGV4cC1cdTAwM2V0dXBsZS5zcmMudTMpIFx1MDAzZSBsZW4pXG5AQCAtNDk0LDkgKzQ5NiwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBfX25mX2N0X2V4cGVjdF9jaGVjayhzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0LFxuIFx0XHRcdFx0XHQgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XG4gXHRpZiAoaGVscGVyKSB7XG4gXHRcdHAgPSBcdTAwMjZoZWxwZXItXHUwMDNlZXhwZWN0X3BvbGljeVtleHBlY3QtXHUwMDNlY2xhc3NdO1xuLVx0XHRpZiAocC1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0LVx1MDAzZWNsYXNzXSBcdTAwM2U9IHAtXHUwMDNlbWF4X2V4cGVjdGVkKVxuK1x0XHRpZiAobWFzdGVyX2hlbHAtXHUwMDNlZXhwZWN0aW5nW2V4cGVjdC1cdTAwM2VjbGFzc10gXHUwMDNlPSBwLVx1MDAzZW1heF9leHBlY3RlZClcbiBcdFx0XHRldmljdF9vbGRlc3RfZXhwZWN0KG1hc3Rlcl9oZWxwLCBleHBlY3QsIHApO1xuK1x0fSBlbHNlIHtcbitcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGRlZmF1bHRfZXhwX3BvbGljeSA9IHtcbitcdFx0XHQubWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQsXG4rXHRcdH07XG4rXG4rXHRcdGlmIChtYXN0ZXJfaGVscC1cdTAwM2VleHBlY3RpbmdbZXhwZWN0LVx1MDAzZWNsYXNzXSBcdTAwM2U9IGRlZmF1bHRfZXhwX3BvbGljeS5tYXhfZXhwZWN0ZWQpXG4rXHRcdFx0ZXZpY3Rfb2xkZXN0X2V4cGVjdChtYXN0ZXJfaGVscCwgZXhwZWN0LCBcdTAwMjZkZWZhdWx0X2V4cF9wb2xpY3kpO1xuIFx0fVxuIFxuIFx0Y25ldCA9IG5mX2N0X3Blcm5ldChuZXQpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbmluZGV4IDhiOTQwMDFjMjQzMDY2Li41MDA1MDliMTc2NjNlZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTM3NCw4ICszNzQsMTMgQEAgaW50IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4gXHRpZiAoIW5mX2N0X2hlbHBlcl9oYXNoKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdGlmIChtZS1cdTAwM2VleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCBcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2M9IG1lLVx1MDAzZWV4cGVjdF9jbGFzc19tYXg7IGkrKykge1xuK1x0XHRpZiAoIW1lLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkKVxuK1x0XHRcdG1lLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0ubWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XG4rXG4rXHRcdGlmIChtZS1cdTAwM2VleHBlY3RfcG9saWN5W2ldLm1heF9leHBlY3RlZCBcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZl9jdF9oZWxwZXJfaHNpemU7IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmNcbmluZGV4IDBjMTE3Yjg0OTJlOTkyLi4xOTNhYjM0ZGI3OTVmOSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuY1xuQEAgLTI2Miw2ICsyNjIsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXJjX2luaXQodm9pZClcbiB7XG4gXHRpbnQgaSwgcmV0O1xuIFxuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKEhFTFBFUl9OQU1FKTtcbitcbiBcdGlmIChtYXhfZGNjX2NoYW5uZWxzIFx1MDAzYyAxKSB7XG4gXHRcdHByX2VycihcIm1heF9kY2NfY2hhbm5lbHMgbXVzdCBub3QgYmUgemVyb1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA0ZTc4ZDI0ODI5ODk1ZS4uNDIxNzcxNWQ0MmRjMjQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTE5NTMsMTkgKzE5NTMsNiBAQCBzdGF0aWMgaW50IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGlmICghc3RyY21wKGhlbHBuYW1lLCBcIlwiKSBcdTAwMjZcdTAwMjYgaGVscCkge1xuLVx0XHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoaGVscC1cdTAwM2VoZWxwZXIpO1xuLVx0XHRpZiAoaGVscGVyKSB7XG4tXHRcdFx0Lyogd2UgaGFkIGEgaGVscGVyIGJlZm9yZSAuLi4gKi9cbi1cdFx0XHRuZl9jdF9yZW1vdmVfZXhwZWN0YXRpb25zKGN0KTtcbi1cdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlbHAtXHUwMDNlaGVscGVyLCBOVUxMKTtcbi1cdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmhlbHBlci1cdTAwM2VjdF9yZWZjbnQpKVxuLVx0XHRcdFx0a2ZyZWVfcmN1KGhlbHBlciwgcmN1KTtcbi1cdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4gXHRoZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChoZWxwbmFtZSwgbmZfY3RfbDNudW0oY3QpLFxuIFx0XHRcdFx0XHQgICAgbmZfY3RfcHJvdG9udW0oY3QpKTtcbiBcdGlmIChoZWxwZXIgPT0gTlVMTCkge1xuQEAgLTMwMTUsNyArMzAwMiw2IEBAIGN0bmV0bGlua19leHBfZHVtcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApXG4ge1xuIFx0X19zMzIgdGltZW91dCA9IChfX3MzMikoUkVBRF9PTkNFKGV4cC1cdTAwM2V0aW1lb3V0KSAtIG5mY3RfdGltZV9zdGFtcCkgLyBIWjtcbi1cdHN0cnVjdCBuZl9jb25uICptYXN0ZXIgPSBleHAtXHUwMDNlbWFzdGVyO1xuIFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuIFx0c3RydWN0IG5sYXR0ciAqbmVzdF9wYXJtcztcbkBAIC0zMDMwLDkgKzMwMTYsNyBAQCBjdG5ldGxpbmtfZXhwX2R1bXBfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFx0aWYgKGN0bmV0bGlua19leHBfZHVtcF9tYXNrKHNrYiwgXHUwMDI2ZXhwLVx1MDAzZXR1cGxlLCBcdTAwMjZleHAtXHUwMDNlbWFzaykgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLVx0aWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsXG4tXHRcdFx0XHQgXHUwMDI2bWFzdGVyLVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLFxuLVx0XHRcdFx0IENUQV9FWFBFQ1RfTUFTVEVSKSBcdTAwM2MgMClcbitcdGlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLCBcdTAwMjZleHAtXHUwMDNlbWFzdGVyX3R1cGxlLCBDVEFfRVhQRUNUX01BU1RFUikgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG5AQCAtMzA0NSw5ICszMDI5LDkgQEAgY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgQ1RBX0VYUEVDVF9OQVRfRElSLCBodG9ubChleHAtXHUwMDNlZGlyKSkpXG4gXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRcdG5hdF90dXBsZS5zcmMubDNudW0gPSBuZl9jdF9sM251bShtYXN0ZXIpO1xuK1x0XHRuYXRfdHVwbGUuc3JjLmwzbnVtID0gZXhwLVx1MDAzZW1hc3Rlcl90dXBsZS5zcmMubDNudW07XG4gXHRcdG5hdF90dXBsZS5zcmMudTMgPSBleHAtXHUwMDNlc2F2ZWRfYWRkcjtcbi1cdFx0bmF0X3R1cGxlLmRzdC5wcm90b251bSA9IG5mX2N0X3Byb3RvbnVtKG1hc3Rlcik7XG4rXHRcdG5hdF90dXBsZS5kc3QucHJvdG9udW0gPSBleHAtXHUwMDNlbWFzdGVyX3R1cGxlLmRzdC5wcm90b251bTtcbiBcdFx0bmF0X3R1cGxlLnNyYy51ID0gZXhwLVx1MDAzZXNhdmVkX3Byb3RvO1xuIFxuIFx0XHRpZiAoY3RuZXRsaW5rX2V4cF9kdW1wX3R1cGxlKHNrYiwgXHUwMDI2bmF0X3R1cGxlLFxuQEAgLTM1ODksNiArMzU3Myw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gI2VuZGlmXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoZXhwLVx1MDAzZWhlbHBlciwgaGVscGVyKTtcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihleHAtXHUwMDNlYXNzaWduX2hlbHBlciwgYXNzaWduX2hlbHBlcik7XG4rXHRleHAtXHUwMDNlbWFzdGVyX3R1cGxlID0gY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4gXHRleHAtXHUwMDNldHVwbGUgPSAqdHVwbGU7XG4gXHRleHAtXHUwMDNlbWFzay5zcmMudTMgPSBtYXNrLVx1MDAzZXNyYy51MztcbiBcdGV4cC1cdTAwM2VtYXNrLnNyYy51LmFsbCA9IG1hc2stXHUwMDNlc3JjLnUuYWxsO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuY1xuaW5kZXggNzc2NTA1YTc4ZTY0NTYuLjgwZmMxNGM4N2RkYzRiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmNcbkBAIC01NDUsNiArNTQ1LDggQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKVxuIFxuIFx0cHB0cC5kZXN0cm95ID0gZ3JlX3BwdHBfZGVzdHJveV9zaWJsaW5ncztcbiBcbitcdG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChwcHRwLm5hbWUpO1xuK1xuIFx0cmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXHUwMDI2cHB0cCwgXHUwMDI2cHB0cF9wdHIpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCBlN2EzZmIyYjJkOTQ2Ni4uMjllOTNhYzFlMmU0MDAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbkBAIC0zMjYsOCArMzI2LDEwIEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgY3R4LVx1MDAzZW9mZnNldCk7XG4tXHRzaXplID0gaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMjtcbitcdGlmIChpcGgtXHUwMDNlaWhsIFx1MDAzYyA1KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHRzaXplID0gaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMjtcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcGgpIHx8IHVubGlrZWx5KGlwX2hhc19vcHRpb25zKHNpemUpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTMzNSw5ICszMzcsOSBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVApIHtcbi1cdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IElQUFJPVE9fSVBJUDtcbitcdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemU7XG4tXHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gc2l6ZTtcbitcdFx0Y3R4LVx1MDAzZW9mZnNldCArPSBjdHgtXHUwMDNldHVuLmhkcl9zaXplO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5pbmRleCAyYmJmNTE2M2MwZTI3My4uNjNmZjZiNGQ1ZDIxNGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuQEAgLTExODEsNiArMTE4MSwxNiBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0c3RydWN0IG5mX2hvb2tfb3BzICpuYXRfb3BzO1xuIFx0aW50IGksIHJldDtcbiBcbisjaWZuZGVmIE1PRFVMRVxuK1x0LyogSWYgbmZfbmF0X2NvcmUgaXMgYnVpbHQtaW4gYW5kIG5mX25hdF9pbml0KCkgZmFpbHMsIGRlcGVuZGVudFxuK1x0ICogbW9kdWxlcyBsaWtlIG5mdF9jaGFpbl9uYXQua28gbWF5IHN0aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi5cbitcdCAqIEhvd2V2ZXIsIG5hdF9uZXQgd291bGQgYmUgaW52YWxpZCwgbGlrZWx5IHBvaW50aW5nIHRvIHNvbWUgb3RoZXJcbitcdCAqIHBlci1uZXQgc3RydWN0dXJlLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFuZl9uYXRfaG9vaykpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbisjZW5kaWZcbitcbiBcdGlmIChXQVJOX09OX09OQ0UocGYgXHUwMDNlPSBBUlJBWV9TSVpFKG5hdF9uZXQtXHUwMDNlbmF0X3Byb3RvX25ldCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jXG5pbmRleCAwY2FhOTMwNGQyZDAzMC4uNjM4NjRiOTI4MjU5MDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmNcbkBAIC0zOTcsNiArMzk3LDIyIEBAIHN0YXRpYyBpbnQgbmZ0X3RhcmdldF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbit7XG4rXHRzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQgPSBleHByLVx1MDAzZW9wcy1cdTAwM2VkYXRhO1xuK1xuK1x0LyogRG8gbm90IGFsbG93IFVOU1BFQyB0byBzdGFuZC1pbiBmb3IgTkZQUk9UT19CUklER0VcbitcdCAqIHRhcmdldHM6IHRoZXkgYXJlIGluY29tcGF0aWJsZS4gIGVidGFibGVzIHRhcmdldHMgcmV0dXJuXG4rXHQgKiBFQlRfQUNDRVBULCBEUk9QIGFuZCBzbyBvbiB3aGljaCBhcmUgbm90IGNvbXBhdGlibGUgd2l0aFxuK1x0ICogTkZfQUNDRVBULCBORl9EUk9QIGFuZCBzbyBvbi5cbitcdCAqL1xuK1x0aWYgKHRhcmdldC1cdTAwM2VmYW1pbHkgIT0gTkZQUk9UT19CUklER0UpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0cmV0dXJuIG5mdF90YXJnZXRfdmFsaWRhdGUoY3R4LCBleHByKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgX19uZnRfbWF0Y2hfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbkBAIC05MzIsMTMgKzk0OCwxNSBAQCBuZnRfdGFyZ2V0X3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdG9wcy1cdTAwM2Vpbml0ID0gbmZ0X3RhcmdldF9pbml0O1xuIFx0b3BzLVx1MDAzZWRlc3Ryb3kgPSBuZnRfdGFyZ2V0X2Rlc3Ryb3k7XG4gXHRvcHMtXHUwMDNlZHVtcCA9IG5mdF90YXJnZXRfZHVtcDtcbi1cdG9wcy1cdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfdmFsaWRhdGU7XG4gXHRvcHMtXHUwMDNlZGF0YSA9IHRhcmdldDtcbiBcbi1cdGlmIChmYW1pbHkgPT0gTkZQUk9UT19CUklER0UpXG4rXHRpZiAoZmFtaWx5ID09IE5GUFJPVE9fQlJJREdFKSB7XG4gXHRcdG9wcy1cdTAwM2VldmFsID0gbmZ0X3RhcmdldF9ldmFsX2JyaWRnZTtcbi1cdGVsc2VcbitcdFx0b3BzLVx1MDAzZXZhbGlkYXRlID0gbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGU7XG4rXHR9IGVsc2Uge1xuIFx0XHRvcHMtXHUwMDNlZXZhbCA9IG5mdF90YXJnZXRfZXZhbF94dDtcbitcdFx0b3BzLVx1MDAzZXZhbGlkYXRlID0gbmZ0X3RhcmdldF92YWxpZGF0ZTtcbitcdH1cbiBcbiBcdHJldHVybiBvcHM7XG4gZXJyOlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCA5NTgwNTRkZDJlMmVjYy4uMDNhODhjNzdlMGYwMjggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5AQCAtMTIxNSwxMSArMTIxNSwyMyBAQCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmoge1xuIFx0dTMyXHRcdHRpbWVvdXQ7XG4gfTtcbiBcbitzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBqaWZmaWVzX3ZhbCA9IG1zZWNzX3RvX2ppZmZpZXMobmxhX2dldF91MzIoYXR0cikpO1xuK1xuK1x0aWYgKGppZmZpZXNfdmFsIFx1MDAzZSBVSU5UX01BWClcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHQqdmFsID0gamlmZmllc192YWw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuK1x0aW50IGVycjtcbiBcbiBcdGlmICghdGJbTkZUQV9DVF9FWFBFQ1RfTDRQUk9UT10gfHxcbiBcdCAgICAhdGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdIHx8XG5AQCAtMTI1NCw4ICsxMjY2LDExIEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG4rXHRlcnIgPSBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdLCBcdTAwMjZwcml2LVx1MDAzZXRpbWVvdXQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdHByaXYtXHUwMDNlZHBvcnQgPSBubGFfZ2V0X2JlMTYodGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdKTtcbi1cdHByaXYtXHUwMDNldGltZW91dCA9IG5sYV9nZXRfdTMyKHRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdKTtcbiBcdHByaXYtXHUwMDNlc2l6ZSA9IG5sYV9nZXRfdTgodGJbTkZUQV9DVF9FWFBFQ1RfU0laRV0pO1xuIFxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChjdHgtXHUwMDNlbmV0LCBjdHgtXHUwMDNlZmFtaWx5KTtcbkBAIC0xMjc1LDcgKzEyOTAsNyBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBORlRBX0NUX0VYUEVDVF9MM1BST1RPLCBodG9ucyhwcml2LVx1MDAzZWwzbnVtKSkgfHxcbiBcdCAgICBubGFfcHV0X3U4KHNrYiwgTkZUQV9DVF9FWFBFQ1RfTDRQUk9UTywgcHJpdi1cdTAwM2VsNHByb3RvKSB8fFxuIFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIE5GVEFfQ1RfRVhQRUNUX0RQT1JULCBwcml2LVx1MDAzZWRwb3J0KSB8fFxuLVx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkZUQV9DVF9FWFBFQ1RfVElNRU9VVCwgcHJpdi1cdTAwM2V0aW1lb3V0KSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkZUQV9DVF9FWFBFQ1RfVElNRU9VVCwgamlmZmllc190b19tc2Vjcyhwcml2LVx1MDAzZXRpbWVvdXQpKSB8fFxuIFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBORlRBX0NUX0VYUEVDVF9TSVpFLCBwcml2LVx1MDAzZXNpemUpKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTMyNSw3ICsxMzQwLDcgQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxuIFx0XHQgICAgICAgICAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MyxcbiBcdFx0ICAgICAgICAgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsXG4gXHRcdCAgICAgICAgICBwcml2LVx1MDAzZWw0cHJvdG8sIE5VTEwsIFx1MDAyNnByaXYtXHUwMDNlZHBvcnQpO1xuLVx0ZXhwLVx1MDAzZXRpbWVvdXQgKz0gcHJpdi1cdTAwM2V0aW1lb3V0ICogSFo7XG4rXHRleHAtXHUwMDNldGltZW91dCArPSBwcml2LVx1MDAzZXRpbWVvdXQ7XG4gXG4gXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbmluZGV4IDc2NDFmMjQ5NjE0Yzk3Li45ZWQyODhjOWQxNjg4MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmNcbkBAIC0yNCwxNCArMjQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zeW5wcm94eV9wb2xpY3lbTkZUQV9TWU5QUk9YWV9NQVggKyAxXSA9IHtcbiBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfdGNwX29wdGlvbnMoc3RydWN0IHN5bnByb3h5X29wdGlvbnMgKm9wdHMsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHN5bnByb3h5X25ldCAqc25ldCxcbi1cdFx0XHRcdCAgICAgc3RydWN0IG5mX3N5bnByb3h5X2luZm8gKmluZm8sXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYpXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZl9zeW5wcm94eV9pbmZvICppbmZvKVxuIHtcbiBcdHRoaXNfY3B1X2luYyhzbmV0LVx1MDAzZXN0YXRzLVx1MDAzZXN5bl9yZWNlaXZlZCk7XG4gXHRpZiAodGNwLVx1MDAzZWVjZSBcdTAwMjZcdTAwMjYgdGNwLVx1MDAzZWN3cilcbiBcdFx0b3B0cy1cdTAwM2VvcHRpb25zIHw9IE5GX1NZTlBST1hZX09QVF9FQ047XG4gXG4tXHRvcHRzLVx1MDAzZW9wdGlvbnMgXHUwMDI2PSBwcml2LVx1MDAzZWluZm8ub3B0aW9ucztcbitcdG9wdHMtXHUwMDNlb3B0aW9ucyBcdTAwMjY9IGluZm8tXHUwMDNlb3B0aW9ucztcbiBcdG9wdHMtXHUwMDNlbXNzX2VuY29kZSA9IG9wdHMtXHUwMDNlbXNzX29wdGlvbjtcbiBcdG9wdHMtXHUwMDNlbXNzX29wdGlvbiA9IGluZm8tXHUwMDNlbXNzO1xuIFx0aWYgKG9wdHMtXHUwMDNlb3B0aW9ucyBcdTAwMjYgTkZfU1lOUFJPWFlfT1BUX1RJTUVTVEFNUClcbkBAIC01Niw3ICs1NSw3IEBAIHN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXG4gXG4gXHRpZiAodGNwLVx1MDAzZXN5bikge1xuIFx0XHQvKiBJbml0aWFsIFNZTiBmcm9tIGNsaWVudCAqL1xuLVx0XHRuZnRfc3lucHJveHlfdGNwX29wdGlvbnMob3B0cywgdGNwLCBzbmV0LCBcdTAwMjZpbmZvLCBwcml2KTtcbitcdFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXHUwMDI2aW5mbyk7XG4gXHRcdHN5bnByb3h5X3NlbmRfY2xpZW50X3N5bmFjayhuZXQsIHNrYiwgdGNwLCBvcHRzKTtcbiBcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG5AQCAtODcsNyArODYsNyBAQCBzdGF0aWMgdm9pZCBuZnRfc3lucHJveHlfZXZhbF92Nihjb25zdCBzdHJ1Y3QgbmZ0X3N5bnByb3h5ICpwcml2LFxuIFxuIFx0aWYgKHRjcC1cdTAwM2VzeW4pIHtcbiBcdFx0LyogSW5pdGlhbCBTWU4gZnJvbSBjbGllbnQgKi9cbi1cdFx0bmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKG9wdHMsIHRjcCwgc25ldCwgXHUwMDI2aW5mbywgcHJpdik7XG4rXHRcdG5mdF9zeW5wcm94eV90Y3Bfb3B0aW9ucyhvcHRzLCB0Y3AsIHNuZXQsIFx1MDAyNmluZm8pO1xuIFx0XHRzeW5wcm94eV9zZW5kX2NsaWVudF9zeW5hY2tfaXB2NihuZXQsIHNrYiwgdGNwLCBvcHRzKTtcbiBcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9TVE9MRU47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2Nvbm50cmFja19zY3RwX2NvbGxpc2lvbi5zaFxuaW5kZXggZDg2MGY3ZDk3NDRiZjguLjcyNjE5NzU5NTdlZjE4IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25udHJhY2tfc2N0cF9jb2xsaXNpb24uc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoXG5AQCAtMiwxOCArMiwzMiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjXG4gIyBUZXN0aW5nIEZvciBTQ1RQIENPTExJU0lPTiBTQ0VOQVJJTyBhcyBCZWxvdzpcbi0jXG4rIyAxLiBTdGFsZSBJTklUX0FDSyBjYXB0dXJlOlxuICMgICAxNDozNTo0Ny42NTUyNzkgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAyMDE3ODM3MzU5XVxuICMgICAxNDozNTo0OC4zNTMyNTAgSVAgU0VSVkVSX0lQLlBPUlQgXHUwMDNlIENMSUVOVF9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAxMTg3MjA2MTg3XVxuICMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbiAjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBFQ0hPXVxuICMgICAxNDozNTo0OC4zNTM5NzcgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbQ09PS0lFIEFDS11cbiAjICAgMTQ6MzU6NDguODU1MzM1IElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVQgQUNLXSBbaW5pdCB0YWc6IDE2NDU3OTk3MF1cbisjICAgKERlbGF5ZWQpXG4rI1xuKyMgMi4gU3RhbGUgSU5JVCBjYXB0dXJlOlxuKyMgICAxNDozNTo0OC4zNTMyNTAgSVAgU0VSVkVSX0lQLlBPUlQgXHUwMDNlIENMSUVOVF9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVF0gW2luaXQgdGFnOiAxMTg3MjA2MTg3XVxuKyMgICAxNDozNTo0OC4zNTMyNzUgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbSU5JVCBBQ0tdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbisjICAgMTQ6MzU6NDguMzUzMjgzIElQIFNFUlZFUl9JUC5QT1JUIFx1MDAzZSBDTElFTlRfSVAuUE9SVDogc2N0cCAoMSkgW0NPT0tJRSBFQ0hPXVxuKyMgICAxNDozNTo0OC4zNTM5NzcgSVAgQ0xJRU5UX0lQLlBPUlQgXHUwMDNlIFNFUlZFUl9JUC5QT1JUOiBzY3RwICgxKSBbQ09PS0lFIEFDS11cbisjICAgMTQ6MzU6NDcuNjU1Mjc5IElQIENMSUVOVF9JUC5QT1JUIFx1MDAzZSBTRVJWRVJfSVAuUE9SVDogc2N0cCAoMSkgW0lOSVRdIFtpbml0IHRhZzogMjAxNzgzNzM1OV1cbisjICAgKERlbGF5ZWQpXG4rIyAgIDE0OjM1OjQ4Ljg1NTMzNSBJUCBTRVJWRVJfSVAuUE9SVCBcdTAwM2UgQ0xJRU5UX0lQLlBPUlQ6IHNjdHAgKDEpIFtJTklUIEFDS10gW2luaXQgdGFnOiAxNjQ1Nzk5NzBdXG4gI1xuICMgVE9QTzogU0VSVkVSX05TIChsaW5rMClcdTAwM2MtLS1cdTAwM2UobGluazEpIFJPVVRFUl9OUyAobGluazIpXHUwMDNjLS0tXHUwMDNlKGxpbmszKSBDTElFTlRfTlNcbiBcbiBzb3VyY2UgbGliLnNoXG4gXG4rY2hlY2t0b29sIFwibmZ0IC0tdmVyc2lvblwiIFwicnVuIHRlc3Qgd2l0aG91dCBuZnRcIlxuK2NoZWNrdG9vbCBcInRjIC1oXCIgXCJydW4gdGVzdCB3aXRob3V0IHRjXCJcbitjaGVja3Rvb2wgXCJtb2Rwcm9iZSAtcSBzY3RwXCIgXCJsb2FkIHNjdHAgbW9kdWxlXCJcbitcbiBDTElFTlRfSVA9XCIxOTguNTEuMjAwLjFcIlxuIENMSUVOVF9QT1JUPTEyMzRcbiBcbkBAIC0yNCw3ICszOCw4IEBAIENMSUVOVF9HVz1cIjE5OC41MS4yMDAuMlwiXG4gU0VSVkVSX0dXPVwiMTk4LjUxLjEwMC4yXCJcbiBcbiAjIHNldHVwIHRoZSB0b3BvXG4tc2V0dXAoKSB7XG4rdG9wb19zZXR1cCgpIHtcbitcdCMgc2V0dXBfbnMgY2xlYW5zIHVwIGV4aXN0aW5nIG5ldCBuYW1lc3BhY2VzIGZpcnN0LlxuIFx0c2V0dXBfbnMgQ0xJRU5UX05TIFNFUlZFUl9OUyBST1VURVJfTlNcbiBcdGlwIC1uIFwiJFNFUlZFUl9OU1wiIGxpbmsgYWRkIGxpbmswIHR5cGUgdmV0aCBwZWVyIG5hbWUgbGluazEgbmV0bnMgXCIkUk9VVEVSX05TXCJcbiBcdGlwIC1uIFwiJENMSUVOVF9OU1wiIGxpbmsgYWRkIGxpbmszIHR5cGUgdmV0aCBwZWVyIG5hbWUgbGluazIgbmV0bnMgXCIkUk9VVEVSX05TXCJcbkBAIC0zOCwzNSArNTMsNTMgQEAgc2V0dXAoKSB7XG4gXHRpcCAtbiBcIiRST1VURVJfTlNcIiBhZGRyIGFkZCAkU0VSVkVSX0dXLzI0IGRldiBsaW5rMVxuIFx0aXAgLW4gXCIkUk9VVEVSX05TXCIgYWRkciBhZGQgJENMSUVOVF9HVy8yNCBkZXYgbGluazJcbiBcdGlwIG5ldCBleGVjIFwiJFJPVVRFUl9OU1wiIHN5c2N0bCAtd3EgbmV0LmlwdjQuaXBfZm9yd2FyZD0xXG4rXHRzeXNjdGwgLXdxIG5ldC5uZXRmaWx0ZXIubmZfbG9nX2FsbF9uZXRucz0xXG4gXG4gXHRpcCAtbiBcIiRDTElFTlRfTlNcIiBsaW5rIHNldCBsaW5rMyB1cFxuIFx0aXAgLW4gXCIkQ0xJRU5UX05TXCIgYWRkciBhZGQgJENMSUVOVF9JUC8yNCBkZXYgbGluazNcbiBcdGlwIC1uIFwiJENMSUVOVF9OU1wiIHJvdXRlIGFkZCAkU0VSVkVSX0lQIGRldiBsaW5rMyB2aWEgJENMSUVOVF9HV1xuK31cbitcbitjb25mX2RlbGF5KClcbit7XG4rXHQjIHNpbXVsYXRlIHRoZSBkZWxheSBvbiBPVlMgdXBjYWxsIGJ5IHNldHRpbmcgdXAgYSBkZWxheSBmb3IgSU5JVF9BQ0svSU5JVCB3aXRoXG4rXHRsb2NhbCBucz0kMVxuK1x0bG9jYWwgbGluaz0kMlxuK1x0bG9jYWwgY2h1bmtfdHlwZT0kM1xuIFxuLVx0IyBzaW11bGF0ZSB0aGUgZGVsYXkgb24gT1ZTIHVwY2FsbCBieSBzZXR0aW5nIHVwIGEgZGVsYXkgZm9yIElOSVRfQUNLIHdpdGhcbi1cdCMgdGMgb24gJFNFUlZFUl9OUyBzaWRlXG4tXHR0YyAtbiBcIiRTRVJWRVJfTlNcIiBxZGlzYyBhZGQgZGV2IGxpbmswIHJvb3QgaGFuZGxlIDE6IGh0YiByMnEgNjRcbi1cdHRjIC1uIFwiJFNFUlZFUl9OU1wiIGNsYXNzIGFkZCBkZXYgbGluazAgcGFyZW50IDE6IGNsYXNzaWQgMToxIGh0YiByYXRlIDEwMG1iaXRcbi1cdHRjIC1uIFwiJFNFUlZFUl9OU1wiIGZpbHRlciBhZGQgZGV2IGxpbmswIHBhcmVudCAxOiBwcm90b2NvbCBpcCB1MzIgbWF0Y2ggaXAgcHJvdG9jb2wgMTMyIFxcXG4tXHRcdDB4ZmYgbWF0Y2ggdTggMiAweGZmIGF0IDMyIGZsb3dpZCAxOjFcbi1cdGlmICEgdGMgLW4gXCIkU0VSVkVSX05TXCIgcWRpc2MgYWRkIGRldiBsaW5rMCBwYXJlbnQgMToxIGhhbmRsZSAxMDogbmV0ZW0gZGVsYXkgMTIwMG1zOyB0aGVuXG4rXHQjIHVzZSBhIHNtYWxsZXIgbnVtYmVyIGZvciBhc3NvYydzIG1heF9yZXRyYW5zIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWVcbitcdGlwIG5ldCBleGVjIFwiJENMSUVOVF9OU1wiIHN5c2N0bCAtd3EgbmV0LnNjdHAuYXNzb2NpYXRpb25fbWF4X3JldHJhbnM9M1xuK1xuK1x0dGMgLW4gXCIkbnNcIiBxZGlzYyBhZGQgZGV2IFwiJGxpbmtcIiByb290IGhhbmRsZSAxOiBodGIgcjJxIDY0XG4rXHR0YyAtbiBcIiRuc1wiIGNsYXNzIGFkZCBkZXYgXCIkbGlua1wiIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxMDBtYml0XG4rXHR0YyAtbiBcIiRuc1wiIGZpbHRlciBhZGQgZGV2IFwiJGxpbmtcIiBwYXJlbnQgMTogcHJvdG9jb2wgaXAgXFxcbitcdFx0dTMyIG1hdGNoIGlwIHByb3RvY29sIDEzMiAweGZmIG1hdGNoIHU4IFwiJGNodW5rX3R5cGVcIiAweGZmIGF0IDMyIGZsb3dpZCAxOjFcbitcdGlmICEgdGMgLW4gXCIkbnNcIiBxZGlzYyBhZGQgZGV2IFwiJGxpbmtcIiBwYXJlbnQgMToxIGhhbmRsZSAxMDogbmV0ZW0gZGVsYXkgMTIwMG1zOyB0aGVuXG4gXHRcdGVjaG8gXCJTS0lQOiBDYW5ub3QgYWRkIG5ldGVtIHFkaXNjXCJcbi1cdFx0ZXhpdCAka3NmdF9za2lwXG4rXHRcdHJldHVybiAka3NmdF9za2lwXG4gXHRmaVxuIFxuIFx0IyBzaW11bGF0ZSB0aGUgY3RzdGF0ZSBjaGVjayBvbiBPVlMgbmZfY29ubnRyYWNrXG4tXHRpcCBuZXQgZXhlYyBcIiRST1VURVJfTlNcIiBpcHRhYmxlcyAtQSBGT1JXQVJEIC1tIHN0YXRlIC0tc3RhdGUgSU5WQUxJRCxVTlRSQUNLRUQgLWogRFJPUFxuLVx0aXAgbmV0IGV4ZWMgXCIkUk9VVEVSX05TXCIgaXB0YWJsZXMgLUEgSU5QVVQgLXAgc2N0cCAtaiBEUk9QXG4tXG4tXHQjIHVzZSBhIHNtYWxsZXIgbnVtYmVyIGZvciBhc3NvYydzIG1heF9yZXRyYW5zIHRvIHJlcHJvZHVjZSB0aGUgaXNzdWVcbi1cdG1vZHByb2JlIC1xIHNjdHBcbi1cdGlwIG5ldCBleGVjIFwiJENMSUVOVF9OU1wiIHN5c2N0bCAtd3EgbmV0LnNjdHAuYXNzb2NpYXRpb25fbWF4X3JldHJhbnM9M1xuK1x0aXAgbmV0IGV4ZWMgXCIkUk9VVEVSX05TXCIgbmZ0IC1mIC0gXHUwMDNjXHUwMDNjLUVPRlxuK1x0dGFibGUgaXAgdCB7XG4rXHRcdGNoYWluIGZvcndhcmQge1xuK1x0XHRcdHR5cGUgZmlsdGVyIGhvb2sgZm9yd2FyZCBwcmlvcml0eSBmaWx0ZXI7IHBvbGljeSBhY2NlcHQ7XG4rXHRcdFx0bWV0YSBsNHByb3RvIGljbXAgY291bnRlciBhY2NlcHRcbitcdFx0XHRjdCBzdGF0ZSBuZXcgY291bnRlciBhY2NlcHRcbitcdFx0XHRjdCBzdGF0ZSBlc3RhYmxpc2hlZCxyZWxhdGVkIGNvdW50ZXIgYWNjZXB0XG4rXHRcdFx0Y3Qgc3RhdGUgaW52YWxpZCBsb2cgZmxhZ3MgYWxsIGNvdW50ZXIgZHJvcCBjb21tZW50IFxcXG4rXHRcdFx0XCJFeHBlY3QgdG8gZHJvcCBzdGFsZSBJTklUL0lOSVRfQUNLIGNodW5rc1wiXG4rXHRcdFx0Y291bnRlclxuK1x0XHR9XG4rXHR9XG4rXHRFT0ZcbitcdHJldHVybiAwXG4gfVxuIFxuIGNsZWFudXAoKSB7XG4tXHRpcCBuZXQgZXhlYyBcIiRDTElFTlRfTlNcIiBwa2lsbCBzY3RwX2NvbGxpc2lvbiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbi1cdGlwIG5ldCBleGVjIFwiJFNFUlZFUl9OU1wiIHBraWxsIHNjdHBfY29sbGlzaW9uIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MVxuK1x0IyBjbGVhbnVwX2FsbF9ucyB0ZXJtaW5hdGVzIHJ1bm5pbmcgcHJvY2Vzc2VzIGluIHRoZSBuYW1lc3BhY2VzLlxuIFx0Y2xlYW51cF9hbGxfbnNcbitcdHN5c2N0bCAtd3EgbmV0Lm5ldGZpbHRlci5uZl9sb2dfYWxsX25ldG5zPTBcbiB9XG4gXG4gZG9fdGVzdCgpIHtcbkBAIC04MSw3ICsxMTQsMTkgQEAgZG9fdGVzdCgpIHtcbiBcbiAjIHJ1biB0aGUgdGVzdCBjYXNlXG4gdHJhcCBjbGVhbnVwIEVYSVRcbi1zZXR1cCBcdTAwMjZcdTAwMjYgXFxcbi1lY2hvIFwiVGVzdCBmb3IgU0NUUCBDb2xsaXNpb24gaW4gbmZfY29ubnRyYWNrOlwiIFx1MDAyNlx1MDAyNiBcXFxuLWRvX3Rlc3QgXHUwMDI2XHUwMDI2IGVjaG8gXCJQQVNTIVwiXG4tZXhpdCAkP1xuK1xuK2VjaG8gXCJUZXN0IGZvciBTQ1RQIElOSVRfQUNLIENvbGxpc2lvbiBpbiBuZl9jb25udHJhY2s6XCJcbit0b3BvX3NldHVwIHx8IGV4aXQgJD9cbitjb25mX2RlbGF5ICRTRVJWRVJfTlMgbGluazAgMiB8fCBleGl0ICQ/XG4rXG4raWYgISBkb190ZXN0OyB0aGVuXG4rXHRleGl0ICRrc2Z0X2ZhaWxcbitmaVxuK1xuK2VjaG8gXCJUZXN0IGZvciBTQ1RQIElOSVQgQ29sbGlzaW9uIGluIG5mX2Nvbm50cmFjazpcIlxuK3RvcG9fc2V0dXAgfHwgZXhpdCAkP1xuK2NvbmZfZGVsYXkgJENMSUVOVF9OUyBsaW5rMyAxIHx8IGV4aXQgJD9cbitcbitpZiAhIGRvX3Rlc3Q7IHRoZW5cbitcdGV4aXQgJGtzZnRfZmFpbFxuK2ZpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5zaFxuaW5kZXggZDgwMzkwODQ4ZTg1MDkuLjdjODU3YTJlMGYzNDk0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfcXVldWUuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLnNoXG5AQCAtODUsMTEgKzg1LDEyIEBAIGlwIC1uZXQgXCIkbnMzXCIgcm91dGUgYWRkIGRlZmF1bHQgdmlhIDEwLjAuMy4xXG4gaXAgLW5ldCBcIiRuczNcIiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZGVhZDozOjoxXG4gXG4gbG9hZF9ydWxlc2V0KCkge1xuLVx0bG9jYWwgbmFtZT0kMVxuLVx0bG9jYWwgcHJpbz0kMlxuK1x0bG9jYWwgZmFtaWx5PSQxXG4rXHRsb2NhbCBuYW1lPSQyXG4rXHRsb2NhbCBwcmlvPSQzXG4gXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIG5mdCAtZiAvZGV2L3N0ZGluIFx1MDAzY1x1MDAzY0VPRlxuLXRhYmxlIGluZXQgJG5hbWUge1xuK3RhYmxlICRmYW1pbHkgJG5hbWUge1xuIFx0Y2hhaW4gbmZxIHtcbiBcdFx0aXAgcHJvdG9jb2wgaWNtcCBxdWV1ZSBieXBhc3NcbiBcdFx0aWNtcHY2IHR5cGUgeyBcImVjaG8tcmVxdWVzdFwiLCBcImVjaG8tcmVwbHlcIiB9IHF1ZXVlIG51bSAxIGJ5cGFzc1xuQEAgLTIyOCw2ICsyMjksNyBAQCBuZl9xdWV1ZV93YWl0KClcbiB0ZXN0X3F1ZXVlKClcbiB7XG4gXHRsb2NhbCBleHBlY3RlZD1cIiQxXCJcbitcdGxvY2FsIGZhbWlseT1cIiQyXCJcbiBcdGxvY2FsIGxhc3Q9XCJcIlxuIFxuIFx0IyBzcGF3biBuZl9xdWV1ZSBsaXN0ZW5lcnNcbkBAIC0yNTUsMTEgKzI1NywxMyBAQCB0ZXN0X3F1ZXVlKClcbiBcdFx0aWYgWyB4XCIkbGFzdFwiICE9IHhcIiRleHBlY3RlZCBwYWNrZXRzIHRvdGFsXCIgXTsgdGhlblxuIFx0XHRcdGVjaG8gXCJGQUlMOiBFeHBlY3RlZCAkZXhwZWN0ZWQgcGFja2V0cyB0b3RhbCwgYnV0IGdvdCAkbGFzdFwiIDFcdTAwM2VcdTAwMjYyXG4gXHRcdFx0aXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIG5mdCBsaXN0IHJ1bGVzZXRcbitcdFx0XHRlY2hvIC1uIFwiJFRNUEZJTEUwOiBcIjtjYXQgXCIkVE1QRklMRTBcIlxuK1x0XHRcdGVjaG8gLW4gXCIkVE1QRklMRTE6IFwiO2NhdCBcIiRUTVBGSUxFMVwiXG4gXHRcdFx0ZXhpdCAxXG4gXHRcdGZpXG4gXHRkb25lXG4gXG4tXHRlY2hvIFwiUEFTUzogRXhwZWN0ZWQgYW5kIHJlY2VpdmVkICRsYXN0XCJcbitcdGVjaG8gXCJQQVNTOiBFeHBlY3RlZCBhbmQgcmVjZWl2ZWQgJGxhc3QgKCRmYW1pbHkpXCJcbiB9XG4gXG4gbGlzdGVuZXJfcmVhZHkoKVxuQEAgLTQwMCw2ICs0MDQsOCBAQCBFT0ZcbiBcbiBcdGtpbGwgXCIkbmZxcGlkXCJcbiBcdGVjaG8gXCJQQVNTOiBpY21wK25mcXVldWUgdmlhIHZyZlwiXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGxpbmsgZGVsIHR2cmZcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnMxXCIgbmZ0IGZsdXNoIHJ1bGVzZXRcbiB9XG4gXG4gc2N0cF9saXN0ZW5lcl9yZWFkeSgpXG5AQCAtODE0LDEyICs4MjAsNTMgQEAgRU9GXG4gXHRjaGVja190YWludGVkIFwicXVldWUgcHJvZ3JhbSBleGl0aW5nIHdoaWxlIHBhY2tldHMgcXVldWVkXCJcbiB9XG4gXG4rdGVzdF9xdWV1ZV9icmlkZ2UoKVxuK3tcbitcdGlwIC1uZXQgXCIkbnNyb3V0ZXJcIiBhZGRyIGZsdXNoIGRldiB2ZXRoMFxuK1x0aXAgLW5ldCBcIiRuc3JvdXRlclwiIGFkZHIgZmx1c2ggZGV2IHZldGgxXG4rXG4rXHRpcCAtbmV0IFwiJG5zcm91dGVyXCIgbGluayBhZGQgYnIwIHR5cGUgYnJpZGdlXG4rXHRpcCAtbmV0IFwiJG5zcm91dGVyXCIgbGluayBzZXQgdmV0aDAgbWFzdGVyIGJyMFxuK1x0aXAgLW5ldCBcIiRuc3JvdXRlclwiIGxpbmsgc2V0IHZldGgxIG1hc3RlciBicjBcbitcbitcdGlwIC1uZXQgXCIkbnNyb3V0ZXJcIiBsaW5rIHNldCBicjAgdXBcbitcbitcdGlwIC1uZXQgXCIkbnNyb3V0ZXJcIiBhZGRyIGFkZCAxMC4wLjIuMS8xNiBkZXYgYnIwXG4rXHRpcCAtbmV0IFwiJG5zcm91dGVyXCIgYWRkciBhZGQgZGVhZDoyOjoxLzY0IGRldiBicjAgbm9kYWRcbitcbitcdGlwIC1uZXQgXCIkbnMxXCIgYWRkciBmbHVzaCBkZXYgZXRoMFxuK1x0aXAgLW5ldCBcIiRuczJcIiBhZGRyIGZsdXNoIGRldiBldGgwXG4rXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGFkZHIgYWRkIDEwLjAuMS4xLzE2IGRldiBldGgwXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGFkZHIgYWRkIGRlYWQ6Mjo6Mi82NCBkZXYgZXRoMCBub2RhZFxuK1xuK1x0aXAgLW5ldCBcIiRuczJcIiBhZGRyIGFkZCAxMC4wLjIuOTkvMTYgZGV2IGV0aDBcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgZGVhZDoyOjo5OS82NCBkZXYgZXRoMCBub2RhZFxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIG5mdCBmbHVzaCBydWxlc2V0XG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcm91dGVyXCIgc3lzY3RsIG5ldC5pcHY2LmNvbmYuYWxsLmZvcndhcmRpbmc9MCBcdTAwM2UgL2Rldi9udWxsXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcm91dGVyXCIgc3lzY3RsIG5ldC5pcHY0LmNvbmYudmV0aDAuZm9yd2FyZGluZz0wIFx1MDAzZSAvZGV2L251bGxcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyb3V0ZXJcIiBzeXNjdGwgbmV0LmlwdjQuY29uZi52ZXRoMS5mb3J3YXJkaW5nPTAgXHUwMDNlIC9kZXYvbnVsbFxuK1xuK1x0aWYgISB0ZXN0X3Bpbmc7dGhlblxuK1x0XHRlY2hvIFwiRkFJTDogbmV0bnMgYnJpZGdlIGNvbm5lY3Rpdml0eVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgJHJldFxuK1x0ZmlcbitcbitcdGxvYWRfcnVsZXNldCBcImJyaWRnZVwiIFwiZmlsdGVyXCIgMTBcbitcdHRlc3RfcXVldWUgMTAgXCJicmlkZ2VcIlxuK1xuK1x0bG9hZF9ydWxlc2V0IFwiYnJpZGdlXCIgXCJmaWx0ZXIyXCIgMjBcbitcdHRlc3RfcXVldWUgMjAgXCJicmlkZ2VcIlxuK31cbitcbiBpcCBuZXRucyBleGVjIFwiJG5zcm91dGVyXCIgc3lzY3RsIG5ldC5pcHY2LmNvbmYuYWxsLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgwLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgxLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gaXAgbmV0bnMgZXhlYyBcIiRuc3JvdXRlclwiIHN5c2N0bCBuZXQuaXB2NC5jb25mLnZldGgyLmZvcndhcmRpbmc9MSBcdTAwM2UgL2Rldi9udWxsXG4gXG4tbG9hZF9ydWxlc2V0IFwiZmlsdGVyXCIgMFxuK2xvYWRfcnVsZXNldCBcImluZXRcIiBcImZpbHRlclwiIDBcbiBcbiBpZiB0ZXN0X3Bpbmc7IHRoZW5cbiBcdCMgcXVldWUgYnlwYXNzIHdvcmtzIChydWxlcyB3ZXJlIHNraXBwZWQsIG5vIGxpc3RlbmVyKVxuQEAgLTg0MiwxMSArODg5LDExIEBAIGxvYWRfY291bnRlcl9ydWxlc2V0IDEwXG4gIyAxeCBpY21wIHByZXJvdXRpbmcsZm9yd2FyZCxwb3N0cm91dGluZyAtXHUwMDNlIDMgcXVldWUgZXZlbnRzICg2IGluY2wuIHJlcGx5KS5cbiAjIDF4IGljbXAgcHJlcm91dGluZyxpbnB1dCxvdXRwdXQgcG9zdHJvdXRpbmcgLVx1MDAzZSA0IHF1ZXVlIGV2ZW50cyBpbmNsLiByZXBseS5cbiAjIHNvIHdlIGV4cGVjdCB0aGF0IHVzZXJzcGFjZSBwcm9ncmFtIHJlY2VpdmVzIDEwIHBhY2tldHMuXG4tdGVzdF9xdWV1ZSAxMFxuK3Rlc3RfcXVldWUgMTAgXCJpbmV0XCJcbiBcbiAjIHNhbWUuICBXZSBxdWV1ZSB0byBhIHNlY29uZCBwcm9ncmFtIGFzIHdlbGwuXG4tbG9hZF9ydWxlc2V0IFwiZmlsdGVyMlwiIDIwXG4tdGVzdF9xdWV1ZSAyMFxuK2xvYWRfcnVsZXNldCBcImluZXRcIiBcImZpbHRlcjJcIiAyMFxuK3Rlc3RfcXVldWUgMjAgXCJpbmV0XCJcbiBpcCBuZXRucyBleGVjIFwiJG5zMVwiIG5mdCBmbHVzaCBydWxlc2V0XG4gXG4gdGVzdF90Y3BfZm9yd2FyZFxuQEAgLTg2Myw0ICs5MTAsNyBAQCB0ZXN0X3F1ZXVlX3N0cmVzc1xuIHRlc3RfaWNtcF92cmZcbiB0ZXN0X3F1ZXVlX3JlbW92YWxcbiBcbisjIHR1cm5zIHJvdXRlciBpbnRvIGEgYnJpZGdlXG4rdGVzdF9xdWV1ZV9icmlkZ2VcbitcbiBleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjE5LjIzNTc0MTI3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MDU3NjUyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5ldGZpbHRlciBQYXRjaCBTZXJpZXMgUmV2aWV3KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIG5ldGZpbHRlciBwYXRjaCBzZXJpZXMuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHN1YnN0YW50aWFsIHNldCBvZiBjaGFuZ2VzIGFjcm9zcyB2YXJpb3VzIGNvbXBvbmVudHMsIHRvdWNoaW5nIGJvdGggY29yZSBjb25udHJhY2sgYW5kIHRoZSBuZXdlciBuZnRhYmxlcyBpbmZyYXN0cnVjdHVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIG1pbm9yIHR3ZWFrLCBzbyB3ZSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIGltcGFjdC5cblxuRmlyc3QsIEkgc2VlIHNldmVyYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHh0YWJsZXNgIGluZnJhc3RydWN0dXJlLCBwcmltYXJpbHkgaW4gdGhlIGB4dF9tdGNoa19wYXJhbWAsIGB4dF9tdGR0b3JfcGFyYW1gLCBgeHRfdGdjaGtfcGFyYW1gLCBhbmQgYHh0X2FjdGlvbl9wYXJhbWAgc3RydWN0dXJlcy4gIFRoZSBhZGRpdGlvbiBvZiBgZmFtaWx5YCwgYG5mdF9jb21wYXRgLCBgbmV0YCwgYG1hdGNoYCwgYW5kIG90aGVyIGZpZWxkcyBpbmRpY2F0ZXMgYSBkZWVwZXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgbmV0d29yayBuYW1lc3BhY2UgYW5kIG5mdGFibGVzIGNvbXBhdGliaWxpdHkuIEl0J3MgY2xlYXIgdGhhdCB0aGlzIHNlcmllcyBpcyBmYWNpbGl0YXRpbmcgYSBjbG9zZXIgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBsZWdhY3kgYHh0YWJsZXNgIGFuZCB0aGUgbmV3ZXIgbmZ0YWJsZXMgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEknbSB3YXRjaGluZyB0aGUgYG5mdF9jb21wYXRgIGZsYWdzIGNsb3NlbHksIGFzIHRob3NlIGFyZSBvZnRlbiBpbmRpY2F0b3JzIG9mIGxlZ2FjeSBjb2RlIHRoYXQgc3RpbGwgbmVlZHMgc3VwcG9ydCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cblRoZSBtb2RpZmljYXRpb25zIHRvIGBuZl9jb25udHJhY2tfZXhwZWN0LmhgLCBgbmZfY29ubnRyYWNrX2hlbHBlci5oYCwgYW5kIHJlbGF0ZWQgZmlsZXMgYXJlIGFsc28gc2lnbmlmaWNhbnQuIEFkZGluZyB0aGUgYG1hc3Rlcl90dXBsZWAgZmllbGQgdG8gYG5mX2Nvbm50cmFja19leHBlY3RgIGFuZCBpbmNvcnBvcmF0aW5nIHRoZSBgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkYCBtYWNybyBzdWdnZXN0cyByZWZhY3RvcmluZyBhbmQgYSBtb3ZlIHRvd2FyZHMgbW9yZSBleHBsaWNpdCBoYW5kbGluZyBvZiBjb25uZWN0aW9uIGV4cGVjdGF0aW9ucyBhbmQgaGVscGVyIGRlcHJlY2F0aW9uLCBsaWtlbHkgaW4gcHJlcGFyYXRpb24gZm9yIHJlbW92aW5nIHNvbWUgbGVnYWN5IGZ1bmN0aW9uYWxpdHkuIFRoZSBjaGFuZ2VzIGluIGBuZl9jdF9leHBlY3RfaW5pdGAgYW5kIGBfX25mX2N0X2V4cGVjdF9jaGVja2AgZGVzZXJ2ZSBhdHRlbnRpb24sIGFzIHRoZSB1c2Ugb2YgYGRlZmF1bHRfZXhwX3BvbGljeWAgaWYgYGhlbHBlcmAgaXMgTlVMTCBoYXMgc3VidGxlIGJ1dCBpbXBvcnRhbnQgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZXNlIGNoYW5nZXMgdGhvcm91Z2hseS5cblxuVGhlIGNoYW5nZXMgaW4gYG5mX2Nvbm5jb3VudC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBzaGlmdCBmcm9tIGBza2ItXHUwMDNlc2tiX2lpZiAhPSBMT09QQkFDS19JRklOREVYYCB0byBgdGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpYCBpbiBgX19uZl9jb25uY291bnRfYWRkYCwgbG9va3MgbGlrZSBhIHBlcmZvcm1hbmNlL2FjY3VyYWN5IG9wdGltaXphdGlvbi4gVGhpcyBkZXNlcnZlcyBhIGNsb3NlciBsb29rIHRvIHNlZSBob3cgaXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIHVuZGVyIGxvYWQuIExpa2V3aXNlLCBjaGFuZ2VzIHRvIGBuZl9jb25udHJhY2tfYnJvYWRjYXN0LmNgIGFuZCBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHdoaWNoIG5vdyB1c2UgYGV4cC1cdTAwM2VtYXN0ZXJfdHVwbGVgIGhlYXZpbHksIHdhcnJhbnQgdGVzdGluZywgYXMgd2VsbCBhcyB0aGUgYWRkaXRpb24gdG8gYG5mX2Nvbm50cmFja19wcHRwLmNgIGFuZCBgbmZfY29ubnRyYWNrX2lyYy5jYCB0aGF0IGRlcHJlY2F0ZSB0aGUgaGVscGVyLlxuXG5UaGUgYG5mX2Zsb3dfdGFibGVfaXAuY2AgY2hhbmdlLCB3aXRoIHRoZSBhZGRlZCBgaXBoLVx1MDAzZWlobCBcdTAwM2MgNWAgY2hlY2sgaW4gYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2AsIGxvb2tzIGxpa2UgYSBwYWNrZXQgc2FuaXR5IGNoZWNrLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgYSBjcmFzaCBvciBzb21lIG90aGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3IuICBJIGFsc28gc2VlIHNvbWUgYWRkZWQgY2hlY2tzIGluIGBuZl9uYXRfY29yZS5jYCBmb3IgYCFuZl9uYXRfaG9va2AgaW4gYG5mX25hdF9yZWdpc3Rlcl9mbmAuIFRoZXNlIGFyZSBiYXNpYyBzYW5pdHkgY2hlY2tzIHRoYXQgc2hvdWxkIGJlIHRlc3RlZCwgYnV0IHRoZXkgc2hvdWxkIGJlIGVhc2lseSBmdXp6YWJsZS5cblxuVGhlIG5mdGFibGVzIGNoYW5nZXMsIGVzcGVjaWFsbHkgaW4gYG5mdF9jb21wYXQuY2Agd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWAgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIGBORlBST1RPX0JSSURHRWAsIHN0cm9uZ2x5IGluZGljYXRlIGZ1cnRoZXIgYnJpZGdlIHN1cHBvcnQgYW5kIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IHVwZ3JhZGVzLiAgSSdtIGFsc28gc2VlaW5nIGFuIGV4dGVuc2lvbiBvbiB0aGUgdGltZW91dCBoYW5kbGluZyBpbiBgbmZ0X2N0LmNgIHdpdGggYG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXRgIGJlaW5nIGFkZGVkLCBhbmQgY2hhbmdlcyB0byBob3cgdGhlIHRpbWVvdXQgaXMgdXNlZCBpbiBzZXZlcmFsIGxvY2F0aW9ucy4gQ2hhbmdlcyBpbiBgbmZ0X3N5bnByb3h5LmNgIHNpbXBsaWZ5aW5nIGBuZnRfc3lucHJveHlfdGNwX29wdGlvbnNgIHdpdGggcmVtb3ZhbCBvZiB0aGUgYHByaXZgIGFyZ3VtZW50IHNlZW0gZmFpcmx5IG1pbm9yLlxuXG5GaW5hbGx5LCB0aGUgdXBkYXRlcyB0byB0aGUgc2VsZi10ZXN0cyBpbiBgY29ubnRyYWNrX3NjdHBfY29sbGlzaW9uLnNoYCBhbmQgYG5mdF9xdWV1ZS5zaGAgYXJlIHBvc2l0aXZlIHNpZ25zLiBHb29kIHRlc3RzIGFyZSBjcml0aWNhbCB0byB2ZXJpZnkgYWxsIHRoaXMsIHNvIHRoZXkgc2hvdWxkIGJlIGludGVncmF0ZWQgaW50byBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZS5cblxuKipGdW5jdGlvbmFsIENoYW5nZXMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Gcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2hhbmdlcyBhcmU6XG5cbiogICBgbmZfY29ubmNvdW50LmNgOiAgQWx0ZXJlZCBsb2dpYyBpbiBgX19uZl9jb25uY291bnRfYWRkYC5cbiogICBgbmZfY29ubnRyYWNrX2V4cGVjdC5jYDogTW9kaWZpY2F0aW9uIHRvIGBfX25mX2N0X2V4cGVjdF9jaGVja2BcbiogICBgbmZfY29ubnRyYWNrX2hlbHBlci5jYDogQ2hhbmdlcyBpbiBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYC5cbiogICBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2A6ICBDaGFuZ2VzIGFyb3VuZCBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgIGFuZCBgZXhwLVx1MDAzZW1hc3Rlcl90dXBsZWAuXG4qICAgYG5mX2Zsb3dfdGFibGVfaXAuY2A6ICBUaGUgbmV3IGNoZWNrIGluIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLlxuKiAgIGBuZnRfY29tcGF0LmNgOiBUaGUgYWRkaXRpb24gb2YgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYC5cbiogICBgbmZ0X2N0LmNgOiBUaGUgYWRkZWRcblxuIiwiSW5wdXRUb2tlbnMiOjEzNTYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjM2LjI5MzM5NjQ5NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc4NjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25uY291bnQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Nzk9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSkgKz0gbmZfc3lucHJveHlfY29yZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04MC1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSArPSBuZl9jb25uY291bnQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjM2LjM1NzE5NTk2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjQ5MTkyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgT2JqZWN0IEZpbGVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUuIFRoZSBjbHVlIGlzIGluIHRoZSBmaWxlIG5hbWVzLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgYG5mX2Zsb3dfdGFibGVfaXAub2AgYW5kIGFueSBvdGhlciBzaW1pbGFyIG9iamVjdCBmaWxlcy4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZmxvdyB0YWJsZSBmb3IgSVAgdHJhZmZpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUgb3JnYW5pemF0aW9uLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgZXNwZWNpYWxseSwgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIGFib3V0IHBlcmZvcm1hbmNlIGFuZCBzY2FsYWJpbGl0eSwgc28gSSBuZWVkIGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBzZWN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGxpZXMsIHNvIEkgY2FuIGV4dHJhcG9sYXRlIHdoYXQgZWxzZSBtaWdodCBleGlzdCBpbiB0aGUgbGFyZ2VyIGtlcm5lbCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo0Mi43MjIxMTc2NjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0Nzc4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9pcC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjQyLjc3ODYwODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcxOTU2MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkV4YW1pbmluZyBOZXRmaWx0ZXIgQ29tcGF0aWJpbGl0eSBNb2R1bGVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGEgZmV3IE5ldGZpbHRlciBtb2R1bGVzLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNoZWNrIG9uIGBuZnRfY29tcGF0Lm9gLCB0aGVuIG1vdmUgb24gdG8gYG5mdF9jdC5vYCwgYW5kIGZpbmFsbHksIEknbGwgZXhhbWluZSBgbmZ0X3N5bnByb3h5Lm9gLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBpZGVudGlmeSBhbnl0aGluZyB0aGF0IG5lZWRzIHR3ZWFraW5nIG9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gVGhlc2UgYXJlIGtleSBjb21wb25lbnRzLCBzbyB0aG9yb3VnaG5lc3MgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIGFuZCBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLiBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIG9mIGNvdXJzZSwgYW55IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY5MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjQ1LjY1MDU3MTkxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjI2Nzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY29tcGF0Lm98bmZ0X2N0Lm98bmZ0X3N5bnByb3h5Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEwOD1vYmotJChDT05GSUdfTkZfVEFCTEVTKVxcdFxcdCs9IG5mX3RhYmxlcy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX05GVF9DT01QQVQpXFx0Kz0gbmZ0X2NvbXBhdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTAtb2JqLSQoQ09ORklHX05GVF9DT05OTElNSVQpXFx0Kz0gbmZ0X2Nvbm5saW1pdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX05GVF9OVU1HRU4pXFx0Kz0gbmZ0X251bWdlbi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX05GVF9DVClcXHRcXHQrPSBuZnRfY3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVxcdCs9IG5mdF9mbG93X29mZmxvYWQub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzI9b2JqLSQoQ09ORklHX05GVF9YRlJNKVxcdFxcdCs9IG5mdF94ZnJtLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzMzpvYmotJChDT05GSUdfTkZUX1NZTlBST1hZKVxcdCs9IG5mdF9zeW5wcm94eS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQxOjQ1LjczMjg0ODQxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTg2NzU1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGBuZl9jb25udHJhY2tfbmV0bGluay5vYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgdGFyZ2V0IGlzIGBuZl9jb25udHJhY2tfbmV0bGluay5vYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IG5ldGxpbmsgc29ja2V0cyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBsaWtlbHkgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UgYmV0d2VlbiB1c2Vyc3BhY2UgdG9vbHMgYW5kIHRoZSBrZXJuZWwncyBjb25uZWN0aW9uIHRyYWNraW5nIHN1YnN5c3RlbS4gSSBleHBlY3QgdG8gc2VlIGV2aWRlbmNlIG9mIHRoZSBuZXRsaW5rIHByb3RvY29sIGltcGxlbWVudGF0aW9uIGhlcmUg4oCTIHRoZSBtZXNzYWdlIHN0cnVjdHVyZXMsIHRoZSBhdHRyaWJ1dGUgaGFuZGxpbmcsIGFuZCB0aGUgbGlrZWx5IGludGVyYWN0aW9uIHdpdGggdGhlIGNvbm50cmFjayB0YWJsZSBpdHNlbGYuIEknbSBnb2luZyB0byB3YW50IHRvIGV4YW1pbmUgaG93IGl0IGhhbmRsZXMgY29ubmVjdGlvbiBjcmVhdGlvbiwgZGVsZXRpb24sIGFuZCBtb2RpZmljYXRpb24gZXZlbnRzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCByZWxhdGVkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllczogQXJlIHRoZXJlIGFueSBidWZmZXIgb3ZlcmZsb3dzIGluIGhvdyBpdCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgZGF0YT8gRG9lcyBpdCBjb3JyZWN0bHkgdmFsaWRhdGUgaW5wdXQgYmVmb3JlIHBhc3NpbmcgaXQgdG8ga2VybmVsIGludGVybmFscz8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgd2hlbiBoYW5kbGluZyBjb25jdXJyZW50IG5ldGxpbmsgbWVzc2FnZXM/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgbW9kdWxlJ3MgZXhwb3J0ZWQgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byBuZXRsaW5rIG1lc3NhZ2UgaGFuZGxpbmcgYW5kIGRhdGEgcGFyc2luZy4gSXQnbGwgYmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCdzIGNvbmN1cnJlbmN5IG1vZGVsIChzcGlubG9ja3MsIFJDVSwgZXRjLikgdG8gZXZhbHVhdGUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxODgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo0OS44MzE1Mjg2NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTk3MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19uZXRsaW5rLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICs9IG5mX2Nvbm50cmFjay5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM2LSMgbmV0bGluayBpbnRlcmZhY2UgZm9yIG5mX2Nvbm50cmFja1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTkspICs9IG5mX2Nvbm50cmFja19uZXRsaW5rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo0OS44OTE3NDY3NTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI4MzUwNzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbnMgYW5kIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgc2V0IG9mIGNvbmZpZ3VyYXRpb25zOiBgTkVURklMVEVSX0NPTk5DT1VOVGAsIGBORl9DT05OVFJBQ0tgLCBgTkZfQ1RfTkVUTElOS2AsIGBORl9GTE9XX1RBQkxFYCwgYE5GVF9DT01QQVRgLCBgTkZUX0NUYCwgYW5kIGBORlRfU1lOUFJPWFlgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyZGVwZW5kZW5jaWVzIGFuZCB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbm5lY3RlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuXG5cbkxldCBtZSB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGF0IGxpa2VseSByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMuIEkgc2VlOiBgX19uZl9jb25uY291bnRfYWRkYCwgd2hpY2ggcHJvYmFibHkgaGFuZGxlcyBjb25uZWN0aW9uIGNvdW50aW5nOyBgX19uZl9jdF9leHBlY3RfY2hlY2tgLCBpbnZvbHZlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nIGV4cGVjdGF0aW9uczsgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGRlYWxpbmcgd2l0aCBoZWxwZXIgbW9kdWxlczsgYGN0bmV0bGlua19jaGFuZ2VfaGVscGVyYCwgd2hpY2ggbGlrZWx5IHRpZXMgaW50byBuZXRsaW5rIGNvbmZpZ3VyYXRpb247IGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCBmb3IgYWxsb2NhdGluZyBleHBlY3RhdGlvbnMgdmlhIG5ldGxpbms7IGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gIHNlZW1zIHNwZWNpZmljIHRvIElQdjQgdHVubmVsIHByb3RvY29sczsgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYCBmb3IgYnJpZGdlIHZhbGlkYXRpb25zIGluIG5mdGFibGVzOyBhbmQsIHRoZSBuZnRhYmxlcyBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBzeW5wcm94eSBmdW5jdGlvbnM6IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X3N5bnByb3h5X2V2YWxfdjRgLCBhbmQgYG5mdF9zeW5wcm94eV9ldmFsX3Y2YC4gVGhhdCBzZXQgZ2l2ZXMgbWUgYSBncmVhdCBwaWN0dXJlIG9mIHRoZSBwaWVjZXMuXG5cbk5vdyBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYW5kIGxvb2sgZm9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBsaW5rZWQgdG8gdGhvc2UgcHJpbWFyeSBmdW5jdGlvbnMuIEkgYW0gc2VlaW5nIGBuZl9jb25udHJhY2tfYnJvYWRjYXN0X2hlbHBgLCBgbmZfY3RfZXhwZWN0X2luaXRgLCBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCwgYW5kIGBuZnRfdGFyZ2V0X3NlbGVjdF9vcHNgLiBJJ2xsIHdhbnQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBhbnkgY2hhbmdlcyBtYWRlIHRvIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLiBUaGlzIGlzIGdpdmluZyBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZSBwaWVjZXMgZml0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo1Ni4xNzUyNTY5MzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NTc1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0zMDk9c3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMzE4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjMxOTpzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0zMjAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9Mzg3PXN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00MTYtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDE3OlxcdFxcdHJldCA9IG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhjdHgsIHNrYik7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDE4LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo1Ni4yNDI4NDI1NDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1MzY4MDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTmV0d29yayBGbG93IEVuY2Fwc3VsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IGltcG9ydGFudCBmdW5jdGlvbiwgZXNwZWNpYWxseSBzaW5jZSBpdCdzIHN0YXRpY2FsbHkgY2FsbGVkIGJ5IGBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbGAuIFRoYXQgbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIHRyYWNpbmcgbmV0d29yayBlbmNhcHN1bGF0aW9uIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIGhvdyB0aGUgYnJpZGdlIHRhcmdldCBpcyB2YWxpZGF0ZWQuIEknbGwgdGFrZSBhIGxvb2sgYXQgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo1OC45OTY1MjU1NjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTc1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jPTM1Mz1zdGF0aWMgaW50IG5mdF90YXJnZXRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTM5OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzo0MDA6c3RhdGljIGludCBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTQwMS1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz05MDM9bmZ0X3RhcmdldF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy05NTQtXFx0XFx0b3BzLVxcdTAwM2VldmFsID0gbmZ0X3RhcmdldF9ldmFsX2JyaWRnZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzo5NTU6XFx0XFx0b3BzLVxcdTAwM2V2YWxpZGF0ZSA9IG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTk1Ni1cXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MTo1OS4wNTc3MjUzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA5ODI3NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgKipcblxuQWxyaWdodCwgc28gYG5mdF90YXJnZXRfYnJpZGdlX3ZhbGlkYXRlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBhY3RpbmcgYXMgYSBjYWxsYmFjay4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGZvY3VzIHBvaW50IGZvciBhbmFseXNpcyDigJMgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIHdpdGhpbiB0aGUgYnJpZGdlJ3Mgb3BlcmF0aW9uLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gaXQsIHNlZSB3aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yIHZhbGlkYXRpbmcuIE15IGV4cGVjdGF0aW9uIGlzIHRoaXMgZnVuY3Rpb24gaXMgdmFsaWRhdGluZyB0aGF0IHRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgYnJpZGdlZCBpcyBsZWdpdGltYXRlLlxuXG5MZXQncyBzaGlmdCBnZWFycyBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGJyaWRnZSBvcGVyYXRlcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbm50cmFjayBjb250ZXh0LiBMZXQncyBsb29rIGF0IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhc3BlY3RzIGFyZSBzZXQgdXAuIEknbSBlYWdlciB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhwZWN0YXRpb25zIGFyZSBpbml0aWFsaXplZCB0byBzZWUgaWYgdGhpcyBleHBsYWlucyB0aGUgYnJpZGdlIGluIGFueSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTExLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MDMuMDY3NTU2MzUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ0NTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY3RfZXhwZWN0X29ial9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTIxOD1zdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyMjgtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjI5OnN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIzMC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzY0LVxcdC5ldmFsXFx0XFx0PSBuZnRfY3RfZXhwZWN0X29ial9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTM2NTpcXHQuaW5pdFxcdFxcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzNjYtXFx0LmRlc3Ryb3lcXHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjAzLjEyOTAwODc1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM2MDMyMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzLCBwcmVzZW50ZWQgYXMgbXkgb3duIGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBORnRhYmxlcyBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuUmlnaHQsIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIC0gdGhvc2UgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IGNsZWFybHkgZGVmaW5lIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZXZhbHVhdGlvbiBzdGVwcyBmb3IgY29ubmVjdGlvbiB0cmFja2luZyBleHBlY3RhdGlvbnMsIHdoaWNoIGlzIHByZWNpc2VseSB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIHRvIHJlc2lkZSB3aGVuIGRlYWxpbmcgd2l0aCBleHBlY3RlZCBjb25uZWN0aW9ucy4gTGV0J3MgbWFrZSBhIG5vdGUgb2YgdGhvc2UgYXMgb3VyIHByaW1hcnkgdGFyZ2V0cyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhpcy5cblxuT2theSwgbGV0J3Mgbm93IHN3aXRjaCBvdXIgYXR0ZW50aW9uIG92ZXIgdG8gYG5mdF9zeW5wcm94eV9ldmFsX3Y0YCBzaW5jZSB0aGlzIHNlZW1zIGxpa2UgYSByZWxhdGVkIGFuZCBpbnRlcmVzdGluZyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjowNS45NjUwNDQyMThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTEwNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9zeW5wcm94eV9ldmFsX3Y0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmM9MjQ9c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X3RjcF9vcHRpb25zKHN0cnVjdCBzeW5wcm94eV9vcHRpb25zICpvcHRzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy00My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jOjQ0OnN0YXRpYyB2b2lkIG5mdF9zeW5wcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfc3lucHJveHkgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy00NS1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYz0xMDY9c3RhdGljIHZvaWQgbmZ0X3N5bnByb3h5X2RvX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9zeW5wcm94eSAqcHJpdixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMtMTQwLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmM6MTQxOlxcdFxcdG5mdF9zeW5wcm94eV9ldmFsX3Y0KHByaXYsIHJlZ3MsIHBrdCwgdGNwLCBcXHUwMDI2X3RjcGgsIFxcdTAwMjZvcHRzKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTE0Mi1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjA2LjAyODE2MzI0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA4MTIxMTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEZvY3VzaW5nIG9uIEtleSBTeW1ib2xzKipcblxuUmlnaHQsIGBuZnRfc3lucHJveHlfZXZhbF92NGAgYW5kIGBuZnRfc3lucHJveHlfZXZhbF92NmAgc2VlbSBsaWtlIGdvb2QganVtcGluZy1vZmYgcG9pbnRzLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZXhhbWluZSBjbG9zZWx5LCB0aGV5IHByb2JhYmx5IGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBzeW5wcm94eSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoZXNlIGFzIHN0YXJ0aW5nIHBvaW50cyB0byB3b3JrIGZyb20uIExldCdzIHNlZSBpZiB0aGUgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBnZW5lcmFsaXplZC5cblxuTm93LCBsZXQncyBhbHNvIGhhdmUgYSBsb29rIGF0IHRoZSBgX19uZl9jb25uY291bnRfYWRkYCBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MDguOTM2Mjg3MTAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTkyOTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25mX2Nvbm5jb3VudF9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0xMzA9c3RhdGljIGJvb2wgZ2V0X2N0X29yX3R1cGxlX2Zyb21fc2tiKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMTY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6MTY3OnN0YXRpYyBpbnQgX19uZl9jb25uY291bnRfYWRkKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTE2OC1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYz0yNzY9aW50IG5mX2Nvbm5jb3VudF9hZGRfc2tiKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtMjg0LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bGlzdC1cXHUwMDNlbGlzdF9sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jOjI4NTpcXHRyZXQgPSBfX25mX2Nvbm5jb3VudF9hZGQobmV0LCBza2IsIGwzbnVtLCBsaXN0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm5jb3VudC5jLTI4Ni1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2bGlzdC1cXHUwMDNlbGlzdF9sb2NrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM9NTMxPWNvdW50X3RyZWUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25uY291bnQuYy01ODAtXFx0Lyogc2FtZSBzb3VyY2UgbmV0d29yayAtXFx1MDAzZSBiZSBjb3VudGVkISAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmM6NTgxOlxcdHJldCA9IF9fbmZfY29ubmNvdW50X2FkZChuZXQsIHNrYiwgbDNudW0sIFxcdTAwMjZyYmNvbm4tXFx1MDAzZWxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubmNvdW50LmMtNTgyLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyYmNvbm4tXFx1MDAzZWxpc3QubGlzdF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MDkuMDAyMjIyMDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0MTk4Nzc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipNeSBMaW5lIG9mIElucXVpcnk6IE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluLiBGb2N1c2luZyBvbiBgX19uZl9jb25uY291bnRfYWRkYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhhdCBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBtZWNoYW5pc21zIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayDigJMgYSBjcml0aWNhbCBhcmVhIGZvciBhbmFseXppbmcgY29ubmVjdGlvbiBzdGF0ZSBhbmQgcGVyZm9ybWFuY2UuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHJlbGF0aW9uIHRoYXQgaXQgaGFzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIE5leHQgdXAsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgX19uZl9jdF9leHBlY3RfY2hlY2tgLiBJJ20gY3VyaW91cyBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgc29tZWhvdy4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gZXhwZWN0YXRpb24gbWFuYWdlbWVudCwgcGVyaGFwcyBkZWFsaW5nIHdpdGggcmVsYXRlZCBjb25uZWN0aW9ucyBvciBjb25uZWN0aW9uIHRyYWNraW5nIG9mIHByb3RvY29scyB0aGF0IHJlcXVpcmUgbXVsdGlwbGUgc3RyZWFtcyBvciBpbnRlcmFjdGlvbnMuIEV4YW1pbmluZyBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIHRyYWNraW5nIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IHJldmVhbCBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDczOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjE0LjQ0NDIxMzA5NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2ODUwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZl9jdF9leHBlY3RfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9NDM4PXN0YXRpYyB2b2lkIGV2aWN0X29sZGVzdF9leHBlY3Qoc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy00NTktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NDYwOnN0YXRpYyBpbmxpbmUgaW50IF9fbmZfY3RfZXhwZWN0X2NoZWNrKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNDYxLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTUxOT1pbnQgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy01MzEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NTMyOlxcdHJldCA9IF9fbmZfY3RfZXhwZWN0X2NoZWNrKGV4cGVjdCwgbWFzdGVyX2hlbHAsIGZsYWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy01MzMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjE0LjUwNDkwNDYwNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ5ODYyOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgTGluZSBvZiBJbnF1aXJ5OiBFeHBlY3RhdGlvbiBDaGVja3MgYW5kIENvbm5lY3Rpb24gVHJhY2tpbmcgSGVscGVycyoqXG5cblJpZ2h0LCBzbyBJIHNlZSBhIHByb21pc2luZyBsZWFkIHdpdGggYF9fbmZfY3RfZXhwZWN0X2NoZWNrYC4gVGhhdCdzIGEgc29saWQgZnVuY3Rpb24gdG8ga2VlcCBpbiBtaW5kLCBhIGxpa2VseSBrZXkgcGllY2UgaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHV6emxlLiBJdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5CdXQgSSBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBXaGF0J3MgdGhlIHdpZGVyIGNvbnRleHQ/IEdpdmVuIHRoYXQgZXhwZWN0YXRpb25zIGFyZSBhIHBpZWNlIG9mIHRoZSBsYXJnZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgdW5kZXJzdGFuZCBob3cgaGVscGVycyBhcmUgcmVnaXN0ZXJlZC4gU28sIGxldCdzIGFsc28gZGVsdmUgaW50byBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBuZXh0IHN0ZXAsIGFzIGl0IGxpa2VseSBkZWZpbmVzIHRoZSBtZWNoYW5pc21zIGZvciBzZXR0aW5nIHVwIGFuZCBlbmFibGluZyB0aGVzZSBoZWxwZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2Ygd2hlcmUgZXhwZWN0YXRpb25zIGZpdCBpbiwgYW5kIGhvdyB0byBwb3RlbnRpYWxseSBpbmZsdWVuY2Ugb3Igd29yayB3aXRoIHRoZW0uIE15IGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjE3Ljg1NDc3MDcwMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4NDg5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jPTM2Mj1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfbG9nKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy0zNjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6MzY0OmludCBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTM2NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00MTQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQxNTpFWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQxNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYz00MTc9aW50IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDI5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQzMDpcXHRlcnIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIobmV3X2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDMxLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NTE5PWludCBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTM1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjUzNjpcXHRcXHRlcnIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIobmV3X2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNTM3LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTIyMD1uZm5sX2N0aGVscGVyX2NyZWF0ZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjgxOlxcdHJldCA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihoZWxwZXIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMjgyLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjoxNy45Mjk2MzYyNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM0MzE3OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGBfX25mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXJgIGlzIGEgcmVhbGx5IHNvbGlkIHN0YXJ0aW5nIHBvaW50IGhlcmUuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGtleSB0byBob29raW5nIHVwIG5ldyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIHVzZWQgaXMgZGVmaW5pdGVseSBjcnVjaWFsLlxuXG5Gcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCBgY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJgIG5leHQuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIHRoYXQgdXNlcnNwYWNlIHdvdWxkIGxpa2VseSB1c2UgdG8gbW9kaWZ5IG9yIHJlZ2lzdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycywgc28gSSBiZXQgdGhhdCdzIHdoZXJlIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyB1bHRpbWF0ZWx5IGdldHMgaW5pdGlhdGVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIHdvcmsgaW4gdGFuZGVtLiBMZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgcmVnaXN0cmF0aW9uIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE2MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjIxLjA2Mzk1NzIzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYxMjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdG5ldGxpbmtfY2hhbmdlX2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MTkwND1jdG5ldGxpbmtfc2V0dXBfbmF0KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5MjUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjE5MjY6c3RhdGljIGludCBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTE5MjctXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTIxNjI9Y3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTIxNzEtXFx0aWYgKGNkYVtDVEFfSEVMUF0pIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjE3MjpcXHRcXHRlcnIgPSBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihjdCwgY2RhKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjE3My1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yNzkzPWN0bmV0bGlua19nbHVlX3BhcnNlX2N0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjgwNy1cXHRpZiAoY2RhW0NUQV9IRUxQXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODA4OlxcdFxcdGVyciA9IGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKGN0LCBjZGEpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODA5LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjoyMS4xMzQ1NzU5MThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MjM3MjUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBjdG5ldGxpbmtgIEZvY3VzKipcblxuT2theSwgc28gYGN0bmV0bGlua19jaGFuZ2VfaGVscGVyYCBzZWVtcyBsaWtlIGEgc29saWQgZW50cnkgcG9pbnQgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gVGhhdCdzIHdoZXJlIEkgc2hvdWxkIGZvY3VzIGluaXRpYWxseS4gTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mLi4uIHdoYXRldmVyIGl0IGlzIGBjdG5ldGxpbmtgIGlzIG1hbmFnaW5nLlxuXG5UbyBnZXQgYSBiZXR0ZXIgZ3JpcCwgSSB3YW50IHRvIHBpdm90IGFuZCBleHBsb3JlIHdoZXJlIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gaXMgZG9uZSwgd2hpY2ggaXMgd2h5IEkgd2FudCB0byBjaGVjayBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGZ1bmN0aW9uIGNhbGxzIGFuZCByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgc2VlbXMgbGlrZSBpdCB3aWxsIGJlIGEgZ29vZCBwaWVjZSBvZiB0aGUgcHV6emxlIHRvIGZvbGxvdyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjIzLjkwNjk1MjE0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzMDY4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3RuZXRsaW5rX2FsbG9jX2V4cGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYzMD1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyNjMxOmN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjYzMi1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmFzc2lnbl9oZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mjg1Nj1jdG5ldGxpbmtfZ2x1ZV9hdHRhY2hfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODg4OlxcdGV4cCA9IGN0bmV0bGlua19hbGxvY19leHBlY3QoKGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqKWNkYSwgY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI4ODktXFx0XFx0XFx0XFx0ICAgICBhc3NpZ25faGVscGVyLCBcXHUwMDI2dHVwbGUsIFxcdTAwMjZtYXNrKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNTE5PXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM1MjA6Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzUyMS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmFzc2lnbl9oZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzYwMD1jdG5ldGxpbmtfY3JlYXRlX2V4cGVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYzMS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM2MzI6XFx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjZGEsIGN0LCBOVUxMLCBcXHUwMDI2dHVwbGUsIFxcdTAwMjZtYXNrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYzMy1cXHRpZiAoSVNfRVJSKGV4cCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MjMuOTc2MjY4MjY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDQxNzgyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhpcyBrZXJuZWwgbmV0bGluayBjb2RlLiBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAg4oCTIHRoYXQgZmVlbHMgbGlrZSBhIGdvb2QsIGZvY3VzZWQgc3BvdCB0byByZWFsbHkgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZXhwZWN0YXRpb24gbWFuYWdlbWVudC4gVGhhdCBmdW5jdGlvbiBjYWxsIHNlZW1zIGxpa2UgYSBrZXkgcGllY2UuXG5cblJpZ2h0LCBzbyB3aGVyZSdzIHRoZSByZWdpc3RyYXRpb24/IE5vdywgbGV0J3Mgc2VlLCB0aGF0IGBuZl9uYXRfcmVnaXN0ZXJfZm5gIGNhbGwuLi4gbGV0J3MgY2hlY2sgdGhhdCByZWdpc3RyYXRpb24gZnVuY3Rpb24uLi4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgcGF0aCBmcm9tIHRoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIHdpdGggdGhpcyBuZXRsaW5rIGFsbG9jYXRpb24gcGllY2UuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBzZWUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gTkFUIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nLiBIb3BlZnVsbHkgdGhpcyB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6MjguMTgwNDQ5NDA0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI3NDE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9uYXRfcmVnaXN0ZXJfZm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jPTExNjk9c3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gZm9sbG93X21hc3Rlcl9uYXQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTE3My1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTE3NDppbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xMTc1LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9yaWdfbmF0X29wcywgdW5zaWduZWQgaW50IG9wc19jb3VudClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM9Nzk3PWludCBuZl9uYXRfaXB2NF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtNzk4LXtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjc5OTpcXHRyZXR1cm4gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgb3BzLVxcdTAwM2VwZiwgb3BzLCBuZl9uYXRfaXB2NF9vcHMsXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy04MDAtXFx0XFx0XFx0XFx0ICBBUlJBWV9TSVpFKG5mX25hdF9pcHY0X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYz0xMDU4PWludCBuZl9uYXRfaXB2Nl9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA1OS17XFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYzoxMDYwOlxcdHJldHVybiBuZl9uYXRfcmVnaXN0ZXJfZm4obmV0LCBvcHMtXFx1MDAzZXBmLCBvcHMsIG5mX25hdF9pcHY2X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTEwNjEtXFx0XFx0XFx0XFx0ICBBUlJBWV9TSVpFKG5mX25hdF9pcHY2X29wcykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYz0xMDczPWludCBuZl9uYXRfaW5ldF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG8uYy0xMDc5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmM6MTA4MDpcXHRyZXQgPSBuZl9uYXRfcmVnaXN0ZXJfZm4obmV0LCBORlBST1RPX0lQVjYsIG9wcywgbmZfbmF0X2lwdjZfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA4MS1cXHRcXHRcXHRcXHQgQVJSQVlfU0laRShuZl9uYXRfaXB2Nl9vcHMpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvLmMtMTA4NC1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jOjEwODU6XFx0cmV0ID0gbmZfbmF0X3JlZ2lzdGVyX2ZuKG5ldCwgTkZQUk9UT19JUFY0LCBvcHMsIG5mX25hdF9pcHY0X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90by5jLTEwODYtXFx0XFx0XFx0XFx0IEFSUkFZX1NJWkUobmZfbmF0X2lwdjRfb3BzKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDIyOjQyOjI4LjI0OTczMDg1M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE4ODg3NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIE5ldHdvcmsgRnVuY3Rpb24gUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYG5mX25hdF9yZWdpc3Rlcl9mbmAgc2VlbXMgbGlrZSBhIHByZXR0eSBpbXBvcnRhbnQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHRvIHplcm8gaW4gb24uIEl0J3Mgb2Z0ZW4gdGhlIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gKE5BVCkgbW9kdWxlcyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCByaWdodD8gQW5kIHdoZW4gSSB0aGluayBhYm91dCB0aGF0LCBJ4oCZbSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgZXhwZWN0YXRpb24gc2V0dXAsIHdoaWNoIHdpbGwgcHJvYmFibHkgYmUgaGFuZGxlZCBpbiB0aGUgTkFUIGhlbHBlciB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgTkFUIENvbm5lY3Rpb24gVHJhY2tpbmcgZW50cnksIHNvIGxldCdzIGRpZyBpbnRvIGBuZl9jdF9leHBlY3RfaW5pdGAuIFRoYXQnbGwgbGlrZWx5IHNob3cgaG93IHRoZSBzeXN0ZW0gcHJlcHMgaXRzZWxmIHRvIGhhbmRsZSBleHBlY3RlZCBjb25uZWN0aW9ucyByZWxhdGVkIHRvIHRoZSBOQVQgcnVsZXMuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGEgTkFUJ2QgY29ubmVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1NDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjozMS4zNjg2Mjk0MjNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDkxNTkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jdF9leHBlY3RfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbmZjdC5jPTIxMD12b2lkIGlwX3ZzX25mY3RfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYy0yMjItXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25mY3QuYzoyMjM6XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19uZmN0LmMtMjI0LVxcdFxcdFxcdGZyb21fcnMgPyBcXHUwMDI2Y3AtXFx1MDAzZWRhZGRyIDogXFx1MDAyNmNwLVxcdTAwM2VjYWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jPTgzPXN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE0Ni1cXHRcXHR0dXBsZSA9IFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTQ3OlxcdFxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMTQ4LVxcdFxcdFxcdFxcdCAgbmZfY3RfbDNudW0oY3QpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9MzE4PUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9hbGxvYyk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy0zMjMtICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6MzI0OnZvaWQgbmZfY3RfZXhwZWN0X2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdW5zaWduZWQgaW50IGNsYXNzLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTMyNS1cXHRcXHQgICAgICAgdV9pbnQ4X3QgZmFtaWx5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtMzk1LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzozOTY6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2luaXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTM5Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jPTM2Nj1zdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jLTUxNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYzo1MTU6XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgY21kLmwzbnVtLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jLTUxNi1cXHRcXHRcXHQgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgZGFkZHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0yMDk9c3RhdGljIGludCBleHBlY3RfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMjM2LVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoyMzc6XFx0bmZfY3RfZXhwZWN0X2luaXQocnRwX2V4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yMzgtXFx0XFx0XFx0ICBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yNDYtXFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjI0NzpcXHRuZl9jdF9leHBlY3RfaW5pdChydGNwX2V4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0yNDgtXFx0XFx0XFx0ICBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0yODM9c3RhdGljIGludCBleHBlY3RfdDEyMChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzA1LVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzozMDY6XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTMwNy1cXHRcXHRcXHQgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTYxOD1zdGF0aWMgaW50IGV4cGVjdF9oMjQ1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYzOC1cXHRcXHRyZXR1cm4gLTE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NjM5OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy02NDAtXFx0XFx0XFx0ICBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz03MzU9c3RhdGljIGludCBleHBlY3RfY2FsbGZvcndhcmRpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTc2Ni1cXHRcXHRyZXR1cm4gLTE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NzY3OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy03NjgtXFx0XFx0XFx0ICBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsIFxcdTAwMjZhZGRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTE4Mz1zdGF0aWMgaW50IGV4cGVjdF9xOTMxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEyMTMtXFx0XFx0cmV0dXJuIC0xO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEyMTQ6XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEyMTUtXFx0XFx0XFx0ICBna3JvdXRlZF9vbmx5ID8gLyogb25seSBhY2NlcHQgY2FsbHMgZnJvbSBHSz8gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEyNjM9c3RhdGljIGludCBwcm9jZXNzX2djZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjkwLVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMjkxOlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjkyLVxcdFxcdFxcdCAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCBcXHUwMDI2YWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE0ODY9c3RhdGljIGludCBwcm9jZXNzX2FjZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTE4LVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNTE5OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTIwLVxcdFxcdFxcdCAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCBcXHUwMDI2YWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE1NTM9c3RhdGljIGludCBwcm9jZXNzX2xjZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTcyLVxcdFxcdHJldHVybiAtMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNTczOlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNTc0LVxcdFxcdFxcdCAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCBcXHUwMDI2YWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jPTEwMj1zdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yMzEtXFx0XFx0XFx0cG9ydCA9IGh0b25zKGRjY19wb3J0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYzoyMzI6XFx0XFx0XFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYy0yMzMtXFx0XFx0XFx0XFx0XFx0ICB0dXBsZS1cXHUwMDNlc3JjLmwzbnVtLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jPTEyOD1zdGF0aWMgaW50IGV4cF9ncmUoc3RydWN0IG5mX2Nvbm4gKmN0LCBfX2JlMTYgY2FsbGlkLCBfX2JlMTYgcGVlcl9jYWxsaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtMTQ0LVxcdGRpciA9IElQX0NUX0RJUl9PUklHSU5BTDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmM6MTQ1OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cF9vcmlnLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMtMTQ2LVxcdFxcdFxcdCAgbmZfY3RfbDNudW0oY3QpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jLTE1My1cXHRkaXIgPSBJUF9DVF9ESVJfUkVQTFk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jOjE1NDpcXHRuZl9jdF9leHBlY3RfaW5pdChleHBfcmVwbHksIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYy0xNTUtXFx0XFx0XFx0ICBuZl9jdF9sM251bShjdCksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM9NTg9c3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMtMTU0LVxcdHR1cGxlID0gXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmM6MTU1OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIG5mX2N0X2wzbnVtKGN0KSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMtMTU2LVxcdFxcdFxcdCAgXFx1MDAyNnR1cGxlLVxcdTAwM2VzcmMudTMsIFxcdTAwMjZ0dXBsZS1cXHUwMDNlZHN0LnUzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM9OTI5PXN0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA0OC1cXHRcXHRnb3RvIGVycjE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTA0OTpcXHRuZl9jdF9leHBlY3RfaW5pdChydHBfZXhwLCBjbGFzcywgbmZfY3RfbDNudW0oY3QpLCBzYWRkciwgZGFkZHIsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA1MC1cXHRcXHRcXHQgIElQUFJPVE9fVURQLCBOVUxMLCBcXHUwMDI2cnRwX3BvcnQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTA1NC1cXHRcXHRnb3RvIGVycjI7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTA1NTpcXHRuZl9jdF9leHBlY3RfaW5pdChydGNwX2V4cCwgY2xhc3MsIG5mX2N0X2wzbnVtKGN0KSwgc2FkZHIsIGRhZGRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTEwNTYtXFx0XFx0XFx0ICBJUFBST1RPX1VEUCwgTlVMTCwgXFx1MDAyNnJ0Y3BfcG9ydCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYz0xMzI2PXN0YXRpYyBpbnQgcHJvY2Vzc19yZWdpc3Rlcl9yZXF1ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTQxMS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYzoxNDEyOlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgU0lQX0VYUEVDVF9TSUdOQUxMSU5HLCBuZl9jdF9sM251bShjdCksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTQxMy1cXHRcXHRcXHQgIHNhZGRyLCBcXHUwMDI2ZGFkZHIsIHByb3RvLCBOVUxMLCBcXHUwMDI2cG9ydCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmM9Mzg9c3RhdGljIGludCB0ZnRwX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuYy02Ny1cXHRcXHR0dXBsZSA9IFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jOjY4OlxcdFxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jLTY5LVxcdFxcdFxcdFxcdCAgbmZfY3RfbDNudW0oY3QpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMzAwPXN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTMzOC1cXHR9XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMzM5OlxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIGwzbnVtLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM0MC1cXHRcXHQgICAgICAgICAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0MjozMS41NDk1NTM4NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDIwNTg2NDAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBSZWFjaGFiaWxpdHkgYW5kIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24uIGBuZl9jdF9leHBlY3RfaW5pdGAgaXMgY2FsbGVkIGFsbCBvdmVyIHRoZSBwbGFjZSwgYnV0IHRoZSByZWFsIG1lYXQgaXMgaW4gYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIHNpbmNlIHRoYXQncyB0aGUgY2FsbGVyIHRoYXQgZ290IHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGEgbGlzdCBvZiBzeW1ib2xzIEkgbmVlZCB0byBjaGVjayBmb3IgcmVhY2hhYmlsaXR5OiBgX19uZl9jb25uY291bnRfYWRkYCwgYF9fbmZfY3RfZXhwZWN0X2NoZWNrYCwgYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmAsIGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmAsIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCwgYG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b2AsIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWAsIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X3N5bnByb3h5X2V2YWxfdjRgLCBhbmQgYG5mdF9zeW5wcm94eV9ldmFsX3Y2YC5cblxuQWxyaWdodCwgZmlyc3QgdXAsIGBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG9gLiAgWWVwLCBpdCdzIGNhbGxlZCBieSBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AuICBHb29kLCB0aGF0J3MgcmVhY2hhYmxlLlxuXG5OZXh0LCBgbmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVgLiBMb29rcyBsaWtlIGl0J3MgdXNlZCBpbiBgbmZ0X3RhcmdldF9zZWxlY3Rfb3BzYCB3aGVuIHRoZSBgZmFtaWx5YCBpcyBgTkZQUk9UT19CUklER0VgLiBQZXJmZWN0LlxuXG5Ob3csIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YC4gIFllcCwgdGhhdCdzIHVzZWQgaW4gYG5mdF9jdF9leHBlY3Rfb2JqX29wc2AuICBNYWtlcyBzZW5zZS5cblxuSG93IGFib3V0IGBuZnRfc3lucHJveHlfZXZhbF92NGA/ICBJdCdzIGNhbGxlZCBieSBgbmZ0X3N5bnByb3h5X2RvX2V2YWxgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgbmZ0X3N5bnByb3h5X2V2YWxgLiAgR290IGl0LlxuXG5gX19uZl9jb25uY291bnRfYWRkYD8gIFJlYWNoYWJsZSAtIGNhbGxlZCBieSBgbmZfY29ubmNvdW50X2FkZF9za2JgIGFuZCBgY291bnRfdHJlZWAuXG5cbmBfX25mX2N0X2V4cGVjdF9jaGVja2A/ICBZZXMsIGNhbGxlZCBieSBgbmZfY3RfZXhwZWN0X3JlbGF0ZWRfcmVwb3J0YC5cblxuYF9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcmA/ICBBbHNvIHJlYWNoYWJsZSwgY2FsbGVkIGJ5IGBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYCwgYG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyYCBhbmQgYG5mbmxfY3RoZWxwZXJfY3JlYXRlYC5cblxuTW92aW5nIG9uIHRvIGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmAuIEl0J3MgY2FsbGVkIGJ5IGBjdG5ldGxpbmtfY2hhbmdlX2Nvbm50cmFja2AgYW5kIGBjdG5ldGxpbmtfZ2x1ZV9wYXJzZV9jdGAuIFRoYXQncyBnb29kLlxuXG5BbmQgbGFzdGx5LCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAuIFRoYXQncyBjYWxsZWQgYnkgYGN0bmV0bGlua19nbHVlX2F0dGFjaF9leHBlY3RgIGFuZCBgY3RuZXRsaW5rX2NyZWF0ZV9leHBlY3RgLiBPa2F5LCBhbGwgdGhlIHN5bWJvbHMgYXJlIHJlYWNoYWJsZSFcblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gSSd2ZSBnb3QgYE5FVEZJTFRFUl9DT05OQ09VTlRgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX0NUX05FVExJTktgLCBgTkZfRkxPV19UQUJMRWAsIGBORlRfQ09NUEFUYCwgYE5GVF9DVGAsIGFuZCBgTkZUX1NZTlBST1hZYC5cblxuSnVzdCBtYWtpbmcgc3VyZSwgZm9yIGBORl9DT05OVFJBQ0tgLi4uIGFtIEkgbWlzc2luZyBhbnl0aGluZz8gTm8sIGp1c3QgYE5GX0NPTk5UUkFDS2AgaXMgc3VmZmljaWVudC5cblxuT2theSwgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLiBgTkZUX0NPTVBBVGAgZGVwZW5kcyBvbiBgTkVURklMVEVSX1hUQUJMRVNgLiBNYWtlcyBzZW5zZS4gYE5GVF9DVGAgbmVlZHMgYE5GX0NPTk5UUkFDS2AuICBBbmQgYE5GVF9TWU5QUk9YWWAgbmVlZHMgYm90aCBgTkZfQ09OTlRSQUNLYCAqYW5kKiBgTkVURklMVEVSX1NZTlBST1hZYC4gUmlnaHQsIEknbGwgYWRkIGBORVRGSUxURVJfU1lOUFJPWFlgIHRvIHRoZSBsaXN0LiBUaGF0J3MgYWxsIEkgbmVlZCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM1NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0Mjo0MS43NTU0MTk5MDVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjcwODY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRGSUxURVJfU1lOUFJPWFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ0Nz1jb25maWcgTkZfTkFUX09WU1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDUwOmNvbmZpZyBORVRGSUxURVJfU1lOUFJPWFlcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDUxLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTEtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY1MjpcXHRzZWxlY3QgTkVURklMVEVSX1NZTlBST1hZXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1My1cXHRzZWxlY3QgU1lOX0NPT0tJRVNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NzY9b2JqLSQoQ09ORklHX05GX05BVF9URlRQKSArPSBuZl9uYXRfdGZ0cC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTc4LSMgU1lOUFJPWFlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpICs9IG5mX3N5bnByb3h5X2NvcmUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODAtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYz0zMD1zdGF0aWMgY29uc3QgdTggbmZfY3RfZXh0X3R5cGVfbGVuW05GX0NUX0VYVF9OVU1dID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtNDgtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM6NDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy01MC1cXHRbTkZfQ1RfRVhUX1NZTlBST1hZXSA9IHNpemVvZihzdHJ1Y3QgbmZfY29ubl9zeW5wcm94eSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYz01Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludCB0b3RhbF9leHRlbnNpb25fc2l6ZSh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODAtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM6ODE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYy04Mi1cXHRcXHQrIHNpemVvZihzdHJ1Y3QgbmZfY29ubl9zeW5wcm94eSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMjI6NDI6NDEuOTMyMTY3NjYxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4OTk4NTE3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTmV0ZmlsdGVyKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTkVURklMVEVSX1NZTlBST1hZYCBpcyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBORlRfU1lOUFJPWFlgLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5nc+KAlG5vIG5lZWQgdG8gZXhwbGljaXRseSB0YXJnZXQgaXQuIE5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zLiBUaGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyBjcml0aWNhbCBuZXRmaWx0ZXIgY29tcG9uZW50czogY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBpbnRlZ3JhdGlvbi4gVGhpcyB0b3VjaGVzIGNvcmUgZnVuY3Rpb25zIGxpa2UgY29ubmVjdGlvbiBjb3VudGluZywgZXhwZWN0YXRpb24gY2hlY2tzLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSSdtIGFsc28gc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gYnJpZGdlIHRhcmdldCB2YWxpZGF0aW9uIHdpdGhpbiBgbmZ0X2NvbXBhdGAgYW5kIHNvbWUgYWRqdXN0bWVudHMgdG8gdGltZW91dCBoYW5kbGluZyB3aXRoaW4gYG5mdF9jdGAuIEFsbCBvZiB0aGVzZSBjaGFuZ2VzIGhhdmUgYSBjbGVhciBwYXRoIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBvciBieSBwcm9jZXNzaW5nIGFjdHVhbCBuZXR3b3JrIHBhY2tldHMuIFRoaXMgc2NyZWFtcyBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoZSBzeW1ib2wgbGlzdCBmb3IgdGhlIGZ1enppbmcuIEkgZG9uJ3Qgd2FudCB0byBjaG9vc2UgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyBob3QgcGF0aHMuIEkndmUgZ290IGEgbXVjaCBtb3JlIGZvY3VzZWQgbGlzdCBub3c6XG5cbiogICBgX19uZl9jb25uY291bnRfYWRkYFxuKiAgIGBfX25mX2N0X2V4cGVjdF9jaGVja2BcbiogICBgX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyYFxuKiAgIGBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcmBcbiogICBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGBcbiogICBgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvYFxuKiAgIGBuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZWBcbiogICBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGBcbiogICBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGBcbiogICBgbmZ0X3N5bnByb3h5X2V2YWxfdjRgXG4qICAgYG5mdF9zeW5wcm94eV9ldmFsX3Y2YFxuXG5UaGVzZSBhcmUgaGlnaGx5IHJlbGV2YW50IHRvIHRoZSBpbnRyb2R1Y2VkIGZlYXR1cmVzIGFuZCBub3Qgb3Zlcmx5IGdlbmVyaWMuIEkgdGhpbmsgdGhpcyBsaXN0IGlzIHNvbGlkIGFuZCBmb2N1c2VkIGZvciBhY2hpZXZpbmcgdGhlIGZ1enppbmcgb2JqZWN0aXZlLlxuXG5BbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDk4LCJPdXRwdXRUb2tlbnMiOjI5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QyMjo0Mjo0OS44MzIwMjM0MDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTgxNDg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX0NPTk5DT1VOVFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfQ09NUEFUXCIsXG4gICAgXCJORlRfQ1RcIixcbiAgICBcIk5GVF9TWU5QUk9YWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbmZfY29ubmNvdW50X2FkZFwiLFxuICAgIFwiX19uZl9jdF9leHBlY3RfY2hlY2tcIixcbiAgICBcIl9fbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlclwiLFxuICAgIFwiY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXJcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19leHBlY3RcIixcbiAgICBcIm5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90b1wiLFxuICAgIFwibmZ0X3RhcmdldF9icmlkZ2VfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y0XCIsXG4gICAgXCJuZnRfc3lucHJveHlfZXZhbF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbmV0ZmlsdGVyLCBpbmNsdWRpbmcgY29ubmVjdGlvbiB0cmFja2luZywgZmxvdyB0YWJsZXMsIGFuZCBuZnRhYmxlcyBjb21wYXRpYmlsaXR5LiBJdCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvbm5lY3Rpb24gY291bnRpbmcsIGV4cGVjdGF0aW9uIGNoZWNraW5nLCBoZWxwZXIgcmVnaXN0cmF0aW9uLCBhbmQgbmV0bGluayBoYW5kbGluZy4gSXQgYWxzbyBhZGRzIGEgbmV3IHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGJyaWRnZSB0YXJnZXRzIGluIG5mdF9jb21wYXQgYW5kIGZpeGVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gbmZ0X2N0LiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIG9yIGJ5IHByb2Nlc3NpbmcgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfQ09OTkNPVU5UXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9DT01QQVRcIixcbiAgICBcIk5GVF9DVFwiLFxuICAgIFwiTkZUX1NZTlBST1hZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZl9jb25uY291bnRfYWRkXCIsXG4gICAgXCJfX25mX2N0X2V4cGVjdF9jaGVja1wiLFxuICAgIFwiX19uZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gICAgXCJjdG5ldGxpbmtfY2hhbmdlX2hlbHBlclwiLFxuICAgIFwiY3RuZXRsaW5rX2FsbG9jX2V4cGVjdFwiLFxuICAgIFwibmZfZmxvd19pcDRfdHVubmVsX3Byb3RvXCIsXG4gICAgXCJuZnRfdGFyZ2V0X2JyaWRnZV92YWxpZGF0ZVwiLFxuICAgIFwibmZ0X2N0X2V4cGVjdF9vYmpfaW5pdFwiLFxuICAgIFwibmZ0X2N0X2V4cGVjdF9vYmpfZXZhbFwiLFxuICAgIFwibmZ0X3N5bnByb3h5X2V2YWxfdjRcIixcbiAgICBcIm5mdF9zeW5wcm94eV9ldmFsX3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBuZXRmaWx0ZXIsIGluY2x1ZGluZyBjb25uZWN0aW9uIHRyYWNraW5nLCBmbG93IHRhYmxlcywgYW5kIG5mdGFibGVzIGNvbXBhdGliaWxpdHkuIEl0IG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY29ubmVjdGlvbiBjb3VudGluZywgZXhwZWN0YXRpb24gY2hlY2tpbmcsIGhlbHBlciByZWdpc3RyYXRpb24sIGFuZCBuZXRsaW5rIGhhbmRsaW5nLiBJdCBhbHNvIGFkZHMgYSBuZXcgdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYnJpZGdlIHRhcmdldHMgaW4gbmZ0X2NvbXBhdCBhbmQgZml4ZXMgdGltZW91dCBoYW5kbGluZyBpbiBuZnRfY3QuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0ZmlsdGVyIGZ1bmN0aW9uYWxpdHkgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgb3IgYnkgcHJvY2Vzc2luZyBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdwp66[1] Phase: Succeeded StartedAt: 2026-06-23 22:43:00 +0000 UTC FinishedAt: 2026-06-23 22:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 22:43:00 +0000 UTC FinishedAt: 2026-06-23 22:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2] Phase: Succeeded StartedAt: 2026-06-23 22:43:00 +0000 UTC FinishedAt: 2026-06-24 02:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-23 22:43:00 +0000 UTC FinishedAt: 2026-06-24 02:33:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-23 22:43:00 +0000 UTC FinishedAt: 2026-06-23 22:43:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-23 22:43:00 +0000 UTC FinishedAt: 2026-06-23 22:43:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowdwp66/series-workflowdwp66-convert-artifact-3467282617/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-23 22:43:10 +0000 UTC FinishedAt: 2026-06-23 23:05:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-23 22:43:10 +0000 UTC FinishedAt: 2026-06-23 23:05:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*27a97294-10dd-4dd6-8a99-fa22f3a407c8,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-workflowdwp66/series-workflowdwp66-convert-artifact-3467282617/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": "4ea6ce1e-e1ff-4b4e-9d51-8dec06da28ac", "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-workflowdwp66/series-workflowdwp66-build-action-753858007/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-23 22:43:10 +0000 UTC FinishedAt: 2026-06-23 23:04:54 +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:*27a97294-10dd-4dd6-8a99-fa22f3a407c8,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-workflowdwp66/series-workflowdwp66-convert-artifact-3467282617/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": "4ea6ce1e-e1ff-4b4e-9d51-8dec06da28ac", "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-workflowdwp66/series-workflowdwp66-build-action-753858007/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 23:05:04 +0000 UTC FinishedAt: 2026-06-23 23:05:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-23 23:05:04 +0000 UTC FinishedAt: 2026-06-23 23:05:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 23:05:04 +0000 UTC FinishedAt: 2026-06-23 23:05:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 23:05:04 +0000 UTC FinishedAt: 2026-06-23 23:05:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowdwp66/series-workflowdwp66-convert-artifact-2181945484/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 23:05:14 +0000 UTC FinishedAt: 2026-06-23 23:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 23:05:14 +0000 UTC FinishedAt: 2026-06-23 23:07:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4ea6ce1e-e1ff-4b4e-9d51-8dec06da28ac,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-workflowdwp66/series-workflowdwp66-build-action-753858007/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-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 23:07:44 +0000 UTC FinishedAt: 2026-06-23 23:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 23:07:44 +0000 UTC FinishedAt: 2026-06-23 23:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 23:07:44 +0000 UTC FinishedAt: 2026-06-23 23:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 23:07:44 +0000 UTC FinishedAt: 2026-06-23 23:29:31 +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:*27a97294-10dd-4dd6-8a99-fa22f3a407c8,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-workflowdwp66/series-workflowdwp66-convert-artifact-2181945484/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": "c63e791e-5998-407d-b030-a7f9479e4b43", "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-workflowdwp66/series-workflowdwp66-build-action-3623369896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 23:07:44 +0000 UTC FinishedAt: 2026-06-23 23:29:21 +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:*27a97294-10dd-4dd6-8a99-fa22f3a407c8,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-workflowdwp66/series-workflowdwp66-convert-artifact-2181945484/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": "c63e791e-5998-407d-b030-a7f9479e4b43", "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-workflowdwp66/series-workflowdwp66-build-action-3623369896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 23:29:31 +0000 UTC FinishedAt: 2026-06-23 23:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 23:29:31 +0000 UTC FinishedAt: 2026-06-23 23:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 23:29:31 +0000 UTC FinishedAt: 2026-06-23 23:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 23:29:31 +0000 UTC FinishedAt: 2026-06-23 23:31:19 +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:*c63e791e-5998-407d-b030-a7f9479e4b43,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-workflowdwp66/series-workflowdwp66-build-action-3623369896/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-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-23 23:31:22 +0000 UTC FinishedAt: 2026-06-24 02:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 23:31:22 +0000 UTC FinishedAt: 2026-06-24 02:33:29 +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":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"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:*4ea6ce1e-e1ff-4b4e-9d51-8dec06da28ac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c63e791e-5998-407d-b030-a7f9479e4b43,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-workflowdwp66/series-workflowdwp66-build-action-753858007/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-workflowdwp66/series-workflowdwp66-build-action-3623369896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 23:31:22 +0000 UTC FinishedAt: 2026-06-23 23:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 23:31:22 +0000 UTC FinishedAt: 2026-06-23 23:31:27 +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":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"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-workflowdwp66/series-workflowdwp66-convert-artifact-335452661/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-23 23:31:22 +0000 UTC FinishedAt: 2026-06-23 23:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 23:31:22 +0000 UTC FinishedAt: 2026-06-23 23:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 23:31:22 +0000 UTC FinishedAt: 2026-06-23 23:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 23:31:32 +0000 UTC FinishedAt: 2026-06-24 02:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwp66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__nf_conncount_add","__nf_ct_expect_check","__nf_conntrack_helper_register","ctnetlink_change_helper","ctnetlink_alloc_expect","nf_flow_ip4_tunnel_proto","nft_target_bridge_validate","nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_synproxy_eval_v4","nft_synproxy_eval_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a986fde914d88af47eb78fd29c5d1af7952c3500","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_CONNCOUNT","NF_CONNTRACK","NF_CT_NETLINK","NF_FLOW_TABLE","NFT_COMPAT","NFT_CT","NFT_SYNPROXY"],"series_id":"f3cd7cfa-3541-4291-b98a-2fd0edf60d44","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 23:31:32 +0000 UTC FinishedAt: 2026-06-24 02:33:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4ea6ce1e-e1ff-4b4e-9d51-8dec06da28ac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c63e791e-5998-407d-b030-a7f9479e4b43,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-workflowdwp66/series-workflowdwp66-build-action-753858007/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-workflowdwp66/series-workflowdwp66-build-action-3623369896/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-workflowdwp66/series-workflowdwp66-convert-artifact-335452661/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,}