Name: series-workflowmf49f Phase: Succeeded StartedAt: 2026-07-29 15:13:37 +0000 UTC FinishedAt: 2026-07-29 16:33:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[0] Phase: Succeeded StartedAt: 2026-07-29 15:13:37 +0000 UTC FinishedAt: 2026-07-29 15:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 15:13:37 +0000 UTC FinishedAt: 2026-07-29 15:19:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a5a162fe1ae130e3d2ceefef3f43afe3773c1d56", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_PAGEALLOC", "DEBUG_PAGEALLOC_ENABLE_DEFAULT", "PTDUMP_DEBUGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a5a162fe1ae130e3d2ceefef3f43afe3773c1d56", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_PAGEALLOC", "DEBUG_PAGEALLOC_ENABLE_DEFAULT", "PTDUMP_DEBUGFS" ], "series_id": "2bfc0803-688c-4f51-9f10-b8cc0b769543" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "set_memory_ro", "set_memory_rw", "set_memory_nx", "set_memory_x", "set_memory_4k", "set_memory_np", "set_memory_p", "ptdump_walk_pgd_level_debugfs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX1BBR0VBTExPQyYjMzQ7LAogICAgJiMzNDtERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFQmIzM0OywKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZXRfbWVtb3J5X3JvJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcncmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ueCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV80ayYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X25wJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcCYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB4ODYgcGFnZSBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uIGNvZGUgKENQQSkuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgc2VtYW50aWNzIHVzaW5nIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIHB0ZHVtcCBhbmQgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBsb2NraW5nIGJlaGF2aW9yIHdoZW4gZGVidWdfcGFnZWFsbG9jIGlzIGVuYWJsZWQgYW5kIG1vZGlmaWVzIGhvdyBsYXJnZSBwYWdlcyBhcmUgc3BsaXQgYW5kIGNvbGxhcHNlZC4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMjhiNzQ3OTQ0MmEwZTZlZWY0NTFkNWJmOGVkZDY2YjMzNWJlZWMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTU6MTg6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGIxZTc4MGE0NjViNTkuLjdkNjU2NTIwODg3Y2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC00OSw3ICYjNDM7NTAsOCBAQCBzdHJ1Y3QgY3BhX2RhdGEge1xuIFx0dW5zaWduZWQgaW50XHRmbGFncztcbiBcdHVuc2lnbmVkIGludFx0Zm9yY2Vfc3BsaXRcdFx0OiAxLFxuIFx0XHRcdGZvcmNlX3N0YXRpY19wcm90XHQ6IDEsXG4tXHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMTtcbiYjNDM7XHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMSxcbiYjNDM7XHRcdFx0aW5pdF9tbV9yZWFkX2xvY2tlZFx0OiAxO1xuIFx0c3RydWN0IHBhZ2VcdCoqcGFnZXM7XG4gfTtcbiBcbkBAIC02NSw4ICYjNDM7NjcsMjUgQEAgc3RhdGljIGNvbnN0IGludCBjcGFfd2Fybl9sZXZlbCA9IENQQV9QUk9URUNUO1xuICAqIFNlcmlhbGl6ZSBjcGEoKSB1c2luZyBjcGFfbG9jayBzbyB0aGF0IHdlIGRvbiYjMzk7dCBhbGxvdyBhbnkgb3RoZXIgY3B1LCB3aXRoXG4gICogc3RhbGUgbGFyZ2UgdGxiIGVudHJpZXMsIHRvIGNoYW5nZSB0aGUgcGFnZSBhdHRyaWJ1dGUgaW4gcGFyYWxsZWwgdG8gc29tZVxuICAqIG90aGVyIGNwdSBzcGxpdHRpbmcgYSBsYXJnZSBwYWdlIGVudHJ5IGFsb25nIHdpdGggY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZS5cbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpLCBwYWdlIGF0dHJpYnV0ZXMgY291bGQgYmUgY2hhbmdlZCBpbiBhdG9taWNcbiYjNDM7ICogY29udGV4dCB0aGF0IHdvdWxkIHdhcnJhbnQgZGlzYWJsaW5nIElSUXMuIEJ1dCBzaW5jZSBkZWJ1Z19wYWdlYWxsb2MgYWx3YXlzXG4mIzQzOyAqIHVzZXMgNGsgcGFnZXMgaW4gdGhlIGRpcmVjdCBtYXAgdGhlcmUgYXJlIG5vIHJhY2VzIGZvciBzcGxpdHMgYW5kIGNvbGxhcHNlc1xuJiM0MzsgKiBhbmQgbG9ja2luZyBjYW4gYmUganVzdCBza2lwcGVkIGFsdG9nZXRoZXIuXG4gICovXG4tc3RhdGljIERFRklORV9TUElOTE9DSyhjcGFfbG9jayk7XG4mIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soX2NwYV9sb2NrKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjcGFfbG9jayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpKVxuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNl9jcGFfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjcGFfdW5sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCkpXG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZfY3BhX2xvY2spO1xuJiM0Mzt9XG4gXG4gI2RlZmluZSBDUEFfRkxVU0hUTEIgMVxuICNkZWZpbmUgQ1BBX0FSUkFZIDJcbkBAIC00MDksNyAmIzQzOzQyOCw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxuIFxuIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG4gXG4tc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuJiM0MztzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7XG4gXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XG5AQCAtNDE3LDggJiM0Mzs0MzYsNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXHRpbnQgY29sbGFwc2VkID0gMDtcbiBcdGludCBpO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cbiBcdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IChDUEFfUEFHRVNfQVJSQVkgfCBDUEFfQVJSQVkpKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNwYS1cdTAwM2VudW1wYWdlczsgaSYjNDM7JiM0MzspXG4gXHRcdFx0Y29sbGFwc2VkICYjNDM7PSBjb2xsYXBzZV9sYXJnZV9wYWdlcyhfX2NwYV9hZGRyKGNwYSwgaSksXG5AQCAtNDMyLDE5ICYjNDM7NDQ5LDM1IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcdFx0XHRjb2xsYXBzZWQgJiM0Mzs9IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKGFkZHIsIFx1MDAyNnBndGFibGVzKTtcbiBcdH1cbiBcbi1cdGlmICghY29sbGFwc2VkKSB7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbiYjNDM7XHRpZiAoIWNvbGxhcHNlZClcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0Zmx1c2hfdGxiX2FsbCgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT25seSBlYXJseSBhbGxvYyYjMzk7ZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxuJiM0MztcdFx0ICogaGVyZSBhbmQgdGhvc2Ugc2hvdWxkbiYjMzk7dCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseVxuJiM0MztcdFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpXG4mIzQzO1x0XHRcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbiBcdH1cbiYjNDM7fVxuIFxuLVx0c3Bpbl91bmxvY2soXHUwMDI2Y3BhX2xvY2spO1xuJiM0MztzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxuJiM0MztcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cbiYjNDM7XHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXG4mIzQzO1x0ICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXG5AQCAtNzM2LDcgJiM0Mzs3NjksNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNTEyRztcbiBcdCpueCB8PSBwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVztcbiYjNDM7XHQqcncgXHUwMDI2PSAhIShwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTtcbiBcdGlmIChwNGRfbm9uZSgqcDRkKSlcbkBAIC03NDcsNyAmIzQzOzc4MCw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF8xRztcbiBcdCpueCB8PSBwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9SVztcbiYjNDM7XHQqcncgXHUwMDI2PSAhIShwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyZXNzKTtcbiBcdGlmIChwdWRfbm9uZSgqcHVkKSlcbkBAIC03NTgsNyAmIzQzOzc5MSw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF8yTTtcbiBcdCpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVztcbiYjNDM7XHQqcncgXHUwMDI2PSAhIShwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTtcbiBcdGlmIChwbWRfbm9uZSgqcG1kKSlcbkBAIC03NjksNyAmIzQzOzgwMiw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF80SztcbiBcdCpueCB8PSBwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9SVztcbiYjNDM7XHQqcncgXHUwMDI2PSAhIShwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpO1xuIH1cbkBAIC0xMTI5LDExICYjNDM7MTE2MiwxMCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9zZXRfcHRlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcbiBzdGF0aWMgaW50XG4gX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICBzdHJ1Y3QgcHRkZXNjICpwdGRlc2MpXG4mIzQzO1x0XHQgICBwdGVfdCAqcGJhc2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBscGFkZHIsIGxwaW5jLCByZWZfcGZuLCBwZm4sIHBmbmluYyA9IDE7XG4tXHRzdHJ1Y3QgcGFnZSAqYmFzZSA9IHB0ZGVzY19wYWdlKHB0ZGVzYyk7XG4tXHRwdGVfdCAqcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpO1xuIFx0dW5zaWduZWQgaW50IGksIGxldmVsO1xuIFx0cGdwcm90X3QgcmVmX3Byb3Q7XG4gXHRib29sIG54LCBydztcbkBAIC0xMjM3LDE2ICYjNDM7MTI2OSwyMSBAQCBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gc3RhdGljIGludCBzcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcbiYjNDM7XHRwdGVfdCAqcHRlO1xuJiM0MztcbiYjNDM7XHRjcGFfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGNwYS1cdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxuJiM0MztcdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbiYjNDM7XHRwdGUgPSBwdGVfYWxsb2Nfb25lX2tlcm5lbChcdTAwMjZpbml0X21tKTtcbiYjNDM7XHRpZiAoY3BhLVx1MDAzZWluaXRfbW1fcmVhZF9sb2NrZWQpXG4mIzQzO1x0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbiYjNDM7XHRjcGFfbG9jaygpO1xuIFxuLVx0c3Bpbl91bmxvY2soXHUwMDI2Y3BhX2xvY2spO1xuLVx0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwsIDApO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdGlmICghcHRkZXNjKVxuJiM0MztcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGRlc2MpKVxuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuJiM0MztcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKVxuJiM0MztcdFx0cHRlX2ZyZWVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHB0ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjAyNSw5ICYjNDM7MjA2Miw5IEBAIHN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxuIFx0XHRpZiAoY3BhLVx1MDAzZWZsYWdzIFx1MDAyNiAoQ1BBX0FSUkFZIHwgQ1BBX1BBR0VTX0FSUkFZKSlcbiBcdFx0XHRjcGEtXHUwMDNlbnVtcGFnZXMgPSAxO1xuIFxuLVx0XHRzcGluX2xvY2soXHUwMDI2Y3BhX2xvY2spO1xuJiM0MztcdFx0Y3BhX2xvY2soKTtcbiBcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyKGNwYSwgcHJpbWFyeSk7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbiYjNDM7XHRcdGNwYV91bmxvY2soKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbiBcbkBAIC0yMTA5LDcgJiM0MzsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbiBcdGNwYS5jdXJwYWdlID0gMDtcbiBcdGNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0O1xuIFxuLVx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbiYjNDM7XHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXG4mIzQzO1x0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSB0cnVlO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbiYjNDM7XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4mIzQzO1x0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB3aGV0aGVyIHdlIHJlYWxseSBjaGFuZ2VkIHNvbWV0aGluZzpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggMDRiOGY2MWVjZTVkOC4uZjRjZWI5NjhhZWIzZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiAmIzQzOzYyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuIFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxuJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4mIzQzO1x0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfUEFHRUFMTE9DJiMzNDssCiAgICAmIzM0O0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVCYjMzQ7LAogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ydyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5XzRrJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfbnAmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9wJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHg4NiBwYWdlIGF0dHJpYnV0ZSBtYW5pcHVsYXRpb24gY29kZSAoQ1BBKS4gSXQgaW50cm9kdWNlcyBuZXcgbG9ja2luZyBzZW1hbnRpY3MgdXNpbmcgbW1hcF9yZWFkX2xvY2sgYW5kIG1tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdpdGggcHRkdW1wIGFuZCBjb25jdXJyZW50IENQQSB3YWxrZXJzLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGxvY2tpbmcgYmVoYXZpb3Igd2hlbiBkZWJ1Z19wYWdlYWxsb2MgaXMgZW5hYmxlZCBhbmQgbW9kaWZpZXMgaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCBhbmQgY29sbGFwc2VkLiBUaGVzZSBhcmUgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyOGI3NDc5NDQyYTBlNmVlZjQ1MWQ1YmY4ZWRkNjZiMzM1YmVlYzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxNToxODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGIxZTc4MGE0NjViNTkuLjdkNjU2NTIwODg3Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jY19wbGF0Zm9ybS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NldF9tZW1vcnkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1yZWdpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL2U4MjAvYXBpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3Byb2Nlc3Nvci5oJmd0OwpAQCAtNDksNyAmIzQzOzUwLDggQEAgc3RydWN0IGNwYV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQJZmxhZ3M7CiAJdW5zaWduZWQgaW50CWZvcmNlX3NwbGl0CQk6IDEsCiAJCQlmb3JjZV9zdGF0aWNfcHJvdAk6IDEsCi0JCQlmb3JjZV9mbHVzaF9hbGwJCTogMTsKJiM0MzsJCQlmb3JjZV9mbHVzaF9hbGwJCTogMSwKJiM0MzsJCQlpbml0X21tX3JlYWRfbG9ja2VkCTogMTsKIAlzdHJ1Y3QgcGFnZQkqKnBhZ2VzOwogfTsKIApAQCAtNjUsOCAmIzQzOzY3LDI1IEBAIHN0YXRpYyBjb25zdCBpbnQgY3BhX3dhcm5fbGV2ZWwgPSBDUEFfUFJPVEVDVDsKICAqIFNlcmlhbGl6ZSBjcGEoKSB1c2luZyBjcGFfbG9jayBzbyB0aGF0IHdlIGRvbiYjMzk7dCBhbGxvdyBhbnkgb3RoZXIgY3B1LCB3aXRoCiAgKiBzdGFsZSBsYXJnZSB0bGIgZW50cmllcywgdG8gY2hhbmdlIHRoZSBwYWdlIGF0dHJpYnV0ZSBpbiBwYXJhbGxlbCB0byBzb21lCiAgKiBvdGhlciBjcHUgc3BsaXR0aW5nIGEgbGFyZ2UgcGFnZSBlbnRyeSBhbG9uZyB3aXRoIGNoYW5naW5nIHRoZSBhdHRyaWJ1dGUuCiYjNDM7ICoKJiM0MzsgKiBXaGVuIGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCksIHBhZ2UgYXR0cmlidXRlcyBjb3VsZCBiZSBjaGFuZ2VkIGluIGF0b21pYwomIzQzOyAqIGNvbnRleHQgdGhhdCB3b3VsZCB3YXJyYW50IGRpc2FibGluZyBJUlFzLiBCdXQgc2luY2UgZGVidWdfcGFnZWFsbG9jIGFsd2F5cwomIzQzOyAqIHVzZXMgNGsgcGFnZXMgaW4gdGhlIGRpcmVjdCBtYXAgdGhlcmUgYXJlIG5vIHJhY2VzIGZvciBzcGxpdHMgYW5kIGNvbGxhcHNlcwomIzQzOyAqIGFuZCBsb2NraW5nIGNhbiBiZSBqdXN0IHNraXBwZWQgYWx0b2dldGhlci4KICAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhjcGFfbG9jayk7CiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhfY3BhX2xvY2spOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjcGFfbG9jayh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKCFkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpKQomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7X2NwYV9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGNwYV91bmxvY2sodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKSkKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7X2NwYV9sb2NrKTsKJiM0Mzt9CiAKICNkZWZpbmUgQ1BBX0ZMVVNIVExCIDEKICNkZWZpbmUgQ1BBX0FSUkFZIDIKQEAgLTQwOSw3ICYjNDM7NDI4LDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpCiAKIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7CiAKLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKJiM0MztzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7CiAJc3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wOwpAQCAtNDE3LDggJiM0Mzs0MzYsNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiAJaW50IGNvbGxhcHNlZCA9IDA7CiAJaW50IGk7CiAKLQlzcGluX2xvY2soJmFtcDtjcGFfbG9jayk7Ci0KIAlpZiAoY3BhLSZndDtmbGFncyAmYW1wOyAoQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKSkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgY3BhLSZndDtudW1wYWdlczsgaSYjNDM7JiM0MzspCiAJCQljb2xsYXBzZWQgJiM0Mzs9IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKF9fY3BhX2FkZHIoY3BhLCBpKSwKQEAgLTQzMiwxOSAmIzQzOzQ0OSwzNSBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiAJCQljb2xsYXBzZWQgJiM0Mzs9IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKGFkZHIsICZhbXA7cGd0YWJsZXMpOwogCX0KIAotCWlmICghY29sbGFwc2VkKSB7Ci0JCXNwaW5fdW5sb2NrKCZhbXA7Y3BhX2xvY2spOwomIzQzOwlpZiAoIWNvbGxhcHNlZCkKIAkJcmV0dXJuOwotCX0KIAogCWZsdXNoX3RsYl9hbGwoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgJmFtcDtwZ3RhYmxlcywgcHRfbGlzdCkgewogCQlsaXN0X2RlbCgmYW1wO3B0ZGVzYy0mZ3Q7cHRfbGlzdCk7Ci0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CQkvKgomIzQzOwkJICogT25seSBlYXJseSBhbGxvYyYjMzk7ZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZQomIzQzOwkJICogaGVyZSBhbmQgdGhvc2Ugc2hvdWxkbiYjMzk7dCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseQomIzQzOwkJICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLgomIzQzOwkJICovCiYjNDM7CQlpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpCiYjNDM7CQkJcGFnZXRhYmxlX2R0b3JfZnJlZShwdGRlc2MpOwomIzQzOwkJZWxzZQomIzQzOwkJCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiAJfQomIzQzO30KIAotCXNwaW5fdW5sb2NrKCZhbXA7Y3BhX2xvY2spOwomIzQzO3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOgomIzQzOwkgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duCiYjNDM7CSAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS4KJiM0MzsJICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4KJiM0MzsJICovCiYjNDM7CXNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssICZhbXA7aW5pdF9tbSkKJiM0MzsJCV9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKQpAQCAtNzM2LDcgJiM0Mzs3NjksNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCiAJKmxldmVsID0gUEdfTEVWRUxfNTEyRzsKIAkqbnggfD0gcGdkX2ZsYWdzKCpwZ2QpICZhbXA7IF9QQUdFX05YOwotCSpydyAmYW1wOz0gcGdkX2ZsYWdzKCpwZ2QpICZhbXA7IF9QQUdFX1JXOwomIzQzOwkqcncgJmFtcDs9ICEhKHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVyk7CiAKIAlwNGQgPSBwNGRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CiAJaWYgKHA0ZF9ub25lKCpwNGQpKQpAQCAtNzQ3LDcgJiM0Mzs3ODAsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCiAJKmxldmVsID0gUEdfTEVWRUxfMUc7CiAJKm54IHw9IHA0ZF9mbGFncygqcDRkKSAmYW1wOyBfUEFHRV9OWDsKLQkqcncgJmFtcDs9IHA0ZF9mbGFncygqcDRkKSAmYW1wOyBfUEFHRV9SVzsKJiM0MzsJKnJ3ICZhbXA7PSAhIShwNGRfZmxhZ3MoKnA0ZCkgJmFtcDsgX1BBR0VfUlcpOwogCiAJcHVkID0gcHVkX29mZnNldChwNGQsIGFkZHJlc3MpOwogCWlmIChwdWRfbm9uZSgqcHVkKSkKQEAgLTc1OCw3ICYjNDM7NzkxLDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAogCSpsZXZlbCA9IFBHX0xFVkVMXzJNOwogCSpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgJmFtcDsgX1BBR0VfTlg7Ci0JKnJ3ICZhbXA7PSBwdWRfZmxhZ3MoKnB1ZCkgJmFtcDsgX1BBR0VfUlc7CiYjNDM7CSpydyAmYW1wOz0gISEocHVkX2ZsYWdzKCpwdWQpICZhbXA7IF9QQUdFX1JXKTsKIAogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlpZiAocG1kX25vbmUoKnBtZCkpCkBAIC03NjksNyAmIzQzOzgwMiw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAkqbGV2ZWwgPSBQR19MRVZFTF80SzsKIAkqbnggfD0gcG1kX2ZsYWdzKCpwbWQpICZhbXA7IF9QQUdFX05YOwotCSpydyAmYW1wOz0gcG1kX2ZsYWdzKCpwbWQpICZhbXA7IF9QQUdFX1JXOwomIzQzOwkqcncgJmFtcDs9ICEhKHBtZF9mbGFncygqcG1kKSAmYW1wOyBfUEFHRV9SVyk7CiAKIAlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKIH0KQEAgLTExMjksMTEgJiM0MzsxMTYyLDEwIEBAIHN0YXRpYyB2b2lkIHNwbGl0X3NldF9wdGUoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgcGZuLAogCiBzdGF0aWMgaW50CiBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCSAgIHN0cnVjdCBwdGRlc2MgKnB0ZGVzYykKJiM0MzsJCSAgIHB0ZV90ICpwYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIGxwYWRkciwgbHBpbmMsIHJlZl9wZm4sIHBmbiwgcGZuaW5jID0gMTsKLQlzdHJ1Y3QgcGFnZSAqYmFzZSA9IHB0ZGVzY19wYWdlKHB0ZGVzYyk7Ci0JcHRlX3QgKnBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpOwomIzQzOwlzdHJ1Y3QgcGFnZSAqYmFzZSA9IHZpcnRfdG9fcGFnZShwYmFzZSk7CiAJdW5zaWduZWQgaW50IGksIGxldmVsOwogCXBncHJvdF90IHJlZl9wcm90OwogCWJvb2wgbngsIHJ3OwpAQCAtMTIzNywxNiAmIzQzOzEyNjksMjEgQEAgX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogc3RhdGljIGludCBzcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0Jc3RydWN0IHB0ZGVzYyAqcHRkZXNjOwomIzQzOwlwdGVfdCAqcHRlOwomIzQzOwomIzQzOwljcGFfdW5sb2NrKCk7CiYjNDM7CWlmIChjcGEtJmd0O2luaXRfbW1fcmVhZF9sb2NrZWQpCiYjNDM7CQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7CiYjNDM7CXB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKCZhbXA7aW5pdF9tbSk7CiYjNDM7CWlmIChjcGEtJmd0O2luaXRfbW1fcmVhZF9sb2NrZWQpCiYjNDM7CQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwomIzQzOwljcGFfbG9jaygpOwogCi0Jc3Bpbl91bmxvY2soJmFtcDtjcGFfbG9jayk7Ci0JcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwsIDApOwotCXNwaW5fbG9jaygmYW1wO2NwYV9sb2NrKTsKLQlpZiAoIXB0ZGVzYykKJiM0MzsJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZGVzYykpCi0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CWlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKQomIzQzOwkJcHRlX2ZyZWVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcHRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjAyNSw5ICYjNDM7MjA2Miw5IEBAIHN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KQogCQlpZiAoY3BhLSZndDtmbGFncyAmYW1wOyAoQ1BBX0FSUkFZIHwgQ1BBX1BBR0VTX0FSUkFZKSkKIAkJCWNwYS0mZ3Q7bnVtcGFnZXMgPSAxOwogCi0JCXNwaW5fbG9jaygmYW1wO2NwYV9sb2NrKTsKJiM0MzsJCWNwYV9sb2NrKCk7CiAJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cihjcGEsIHByaW1hcnkpOwotCQlzcGluX3VubG9jaygmYW1wO2NwYV9sb2NrKTsKJiM0MzsJCWNwYV91bmxvY2soKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCkBAIC0yMTA5LDcgJiM0MzsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcywKIAljcGEuY3VycGFnZSA9IDA7CiAJY3BhLmZvcmNlX3NwbGl0ID0gZm9yY2Vfc3BsaXQ7CiAKLQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7CS8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi8KJiM0MzsJY3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSB0cnVlOwomIzQzOwlzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssICZhbXA7aW5pdF9tbSkKJiM0MzsJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbXA7Y3BhLCAxKTsKJiM0MzsJY3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTsKIAogCS8qCiAJICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAppbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosCiYjNDM7CSAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NzcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gWDg2IE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBnb2luZyB0byBiZSBoaWdoLWltcGFjdCwgcG90ZW50aWFsbHkgdG91Y2hpbmcgZnJlcXVlbnRseSB1c2VkIHBhdGhzLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBob3cgd2UgaGFuZGxlIHBhZ2UgYXR0cmlidXRlIGNoYW5nZXMg4oCTIHRoaW5ncyBsaWtlIHJlYWQtb25seSwgcmVhZC13cml0ZSwgbm8tZXhlY3V0ZSwgZXhlY3V0ZSwgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbWVtb3J5IHByb3RlY3Rpb24gYW5kIGFjY2VzcyBjb250cm9sIG9uIHg4Ni4KClRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIGludHJvZHVjaW5nIGFuIGBtbWFwX3dyaXRlX2xvY2tgIGd1YXJkIGluIGBtbWFwX2xvY2suaGAuIEkgc2VlIGNoYW5nZXMgdG8gdGhlIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIGBjcGFfbG9ja2AgZGVwZW5kaW5nIG9uIGBkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpYC4gVGhhdCBzZWVtcyBhIHJlYXNvbmFibGUgcHJlY2F1dGlvbiBmb3IgZGVidWdnaW5nIGJ1aWxkcywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGRpc2FibGluZyB0aGUgbG9jayB1bmRlciB0aG9zZSBjaXJjdW1zdGFuY2VzLiBUaGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24gaXMgYmVpbmcgdXBkYXRlZCB0byBhY3F1aXJlIGBtbWFwX3dyaXRlX2xvY2tgIG9uIGBpbml0X21tYCwgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIHRha2luZyBgbW1hcF9yZWFkX2xvY2tgIG9uIGBpbml0X21tYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGxvY2tpbmcgaGllcmFyY2h5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlc2UgbG9jayBjaGFuZ2VzIGFyZSBuZWNlc3NhcnkgYW5kIHdoYXQgc2NlbmFyaW9zIHRoZXkgYXJlIGRlc2lnbmVkIHRvIHByb3RlY3QgYWdhaW5zdC4gVGhlcmUgaXMgYWxzbyBhIGNoYW5nZSB0byBob3cgbGFyZ2UgcGFnZXMgYXJlIHNwbGl0LCB1c2luZyBgcHRlX2FsbG9jX29uZV9rZXJuZWxgIGFuZCBgcHRlX2ZyZWVfa2VybmVsYCBpbnN0ZWFkIG9mIHRoZSBvbGRlciBgcGFnZXRhYmxlX2FsbG9jYCBhbmQgYHBhZ2V0YWJsZV9mcmVlYC4gSSBrbm93IHRob3NlIGZ1bmN0aW9ucywgc28gdGhpcyBpcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgZm9yIGxhcmdlIHBhZ2UgbWFuYWdlbWVudC4gRmluYWxseSwgSSBzZWUgYSBmaXggdG8gYSBiaXRtYXNraW5nIG9wZXJhdGlvbiBpbiBgbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHJgIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGNsb3NlbHkuCgpOb3cgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYXJlYXMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgaW5saW5lZCBgY3BhX2xvY2tgIGFuZCBgY3BhX3VubG9ja2AsIGFuZCB0aGUgd3JhcHBlciBmb3IgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AuIEFsc28gb24gbXkgbGlzdCBhcmUgYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYCwgYF9fc3BsaXRfbGFyZ2VfcGFnZWAgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gV2hpbGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGFyZSBzdGF0aWMsIEkgbmVlZCB0byB0cmFjZSB0aGVtIGJhY2sgdG8gdGhlaXIgcHVibGljIEFQSXMgdG8gc2VlIGlmIHRoZWlyIGZ1bmN0aW9ucyBjaGFuZ2VkLiBUaGUgcHVibGljIEFQSXMgSSBhbSBpbnRlcmVzdGVkIGluIGFyZSB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgKGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgKS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc2VhcmNoIGZvciBjYWxscyB0byBgc2V0X21lbW9yeV9yb2AgYW5kIGBzZXRfbWVtb3J5X3J3YCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkgc2V0X21lbW9yeV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIwOD1pbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIwLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjIxOmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNDY9aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI2MjppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2My17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjg1PWludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyOTI6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM0Mz1FWFBPUlRfU1lNQk9MX0dQTChjbGVhcl9tY2Vfbm9zcGVjKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDY6aW50IHNldF9tZW1vcnlfeCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0Ny17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzUzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzU0OmludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzU1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjI6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NzppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjgte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3ODppbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgzOmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg0LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODctXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODg6aW50IHNldF9tZW1vcnlfbnBfbm9hbGlhcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzk1OmludCBzZXRfbWVtb3J5X3AodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5OS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwMDppbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwMS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwOC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDEzOmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxNC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTA5PXN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyNTppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUyOT1FWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MzE6aW50IHNldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTMyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njg4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IG9uIE1lbW9yeSBBdHRyaWJ1dGUgQ29udHJvbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgbWVtb3J5IGF0dHJpYnV0ZSBtYW5hZ2VtZW50IOKAkyBpdCYjMzk7cyB0b3VjaGluZyBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsOyBpdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgd2UgYWN0dWFsbHkgKnNldCogYW5kICpjbGVhciogYXR0cmlidXRlcy4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gYmUgbW9kaWZ5aW5nLCBpZiB0aGlzIHBhdGNoIHJlYWxseSBuZWVkcyB0byBiZSBtYWRlLgoKQW5kLCBpdCYjMzk7cyBub3QganVzdCB0aGF0IGNvcmUgZnVuY3Rpb24sIGJ1dCBhbHNvIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgc3BsaXRfbGFyZ2VfcGFnZWAuIFRoZXNlIGJvdGggZGlyZWN0bHkgaW50ZXJmYWNlIHdpdGggYXR0cmlidXRlIGNoYW5nZXMuIEl0JiMzOTtzIGFsbCBjb25uZWN0ZWQuCgpOb3csIGJlY2F1c2UgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgYSBgc3RhdGljYCBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGZpbGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqZXhwb3J0ZWQqIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgbGV2ZXJhZ2UgaXQuIExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGxpc3QgdGhlbSBvZmYuLi4gVGhhdCB3aWxsIGluY2x1ZGUgdGhlIG1ham9yIG9uZXM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3diYCwgYHNldF9tZW1vcnlfd2NgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBhbmQgYHNldF9tZW1vcnlfNGtgLiBUaG9zZSBhcmUgYWxsIGdvaW5nIHRvIGJlIGFmZmVjdGVkIGJ5IHRoaXMuIFRoYXQmIzM5O3MgYSBicm9hZCByYW5nZSB0byBjb25zaWRlci4KCldhaXQsIGp1c3QgYSBzZWNvbmQuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcy4uLiBJcyBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBhY3R1YWxseSBzdGF0aWMsIG9yIGhhcyBpdCBiZWVuIGV4cG9ydGVkIHNvbWVob3c/IExldCBtZSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgaXMgYWZmZWN0aW5nIHVzLCBhbmQgd2hhdCB0aGUgc2NvcGUgb2YgdGhpcyBpcywgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTg4Nz1zdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTY0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTY1OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk2Ni1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5NzA9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMDE6XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFsaWFzX2NwYSwgMCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDItXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDM0LVx0XHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjAzNTpcdFx0X19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWxpYXNfY3BhLCAwKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAzNi1cdH1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNDEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwNDI6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNDMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA5Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjA5MzpzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwOTQtXHRcdFx0XHQgICAgcGdwcm90X3QgbWFza19zZXQsIHBncHJvdF90IG1hc2tfY2xyLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1MS1cdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE1MjpcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1My1cdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTgwPXN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0KHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxODIte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTgzOlx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgbWFzaywgX19wZ3Byb3QoMCksIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxODQtXHRcdChhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxODc9c3RhdGljIGlubGluZSBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9jbGVhcih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTg5LXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE5MDpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoYWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTkxLVx0XHQoYXJyYXkgPyBDUEFfQVJSQVkgOiAwKSwgTlVMTCk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTk0PXN0YXRpYyBpbmxpbmUgaW50IGNwYV9zZXRfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5Ni17XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxOTc6XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKE5VTEwsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5OC1cdFx0Q1BBX1BBR0VTX0FSUkFZLCBwYWdlcyk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjAxPXN0YXRpYyBpbmxpbmUgaW50IGNwYV9jbGVhcl9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjAzLXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIwNDpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA1LVx0XHRDUEFfUEFHRVNfQVJSQVksIHBhZ2VzKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNDY9aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI1My1cdGlmICghcmV0KSB7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNTQ6XHRcdHJldCA9IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZhZGRyLCBudW1wYWdlcyxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI1NS1cdFx0XHRcdFx0ICAgICAgIGNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9XQyksXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzY3PWludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzMtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNzQ6XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc1LVx0XHRcdFx0XHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM4OD1pbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg5LXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM5MDpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzkxLVx0XHRcdFx0XHRfX3BncHJvdChfUEFHRV9QUkVTRU5UKSwgMCxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI0MDA9aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDEte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDAyOlx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZhZGRyLCBudW1wYWdlcyxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwMy1cdFx0XHRcdFx0X19wZ3Byb3QoX1BBR0VfS0VSTkVMXzRLKSxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI0MjM9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ1Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQ1MzpcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0NTQtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTQ1PXN0YXRpYyBpbnQgX3NldF9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTcwLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IG5ld190eXBlID09IF9QQUdFX0NBQ0hFX01PREVfV0MpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1NzE6XHRcdHJldCA9IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcyxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU3Mi1cdFx0XHRcdFx0ICAgICAgIGNhY2hlbW9kZTJwZ3Byb3QoXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjUwPXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfcChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY2NS1cdCAqL1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjY2Olx0cmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjctfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjY2OT1zdGF0aWMgaW50IF9fc2V0X3BhZ2VzX25wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjg0LVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2ODU6XHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY4Ni19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNzUyPWludCBfX2luaXQga2VybmVsX21hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdTY0IHBmbiwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc3Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mjc3NzpcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3NzgtXHRfX2ZsdXNoX3RsYl9hbGwoKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3ODk9aW50IF9faW5pdCBrZXJuZWxfdW5tYXBfcGFnZXNfaW5fcGdkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4MTEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI4MTI6XHRyZXR2YWwgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yODEzLVx0X19mbHVzaF90bGJfYWxsKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5OTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlc2UgYHNldF9tZW1vcnlfKmAgZnVuY3Rpb25zIGFyZSBhbGwgZXhwb3J0ZWQgZnJvbSB0aGUga2VybmVsLiBUaGF0IHNjcmVhbXMgJiMzNDtmdXp6IG1lJiMzNDsgdG8gbWUuIEFueSBleHBvcnRlZCBmdW5jdGlvbiBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLCBhbmQgdGhlc2Ugc2VlbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3Rpbmcgd2l0aCBhbGwgdGhlaXIgYXR0cmlidXRlcy4gSSYjMzk7bSB0aGlua2luZyBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCwgYW5kIGBzZXRfbWVtb3J5XzRrYCBhcyBzdGFydGluZyB0YXJnZXRzLiBJJiMzOTttIGFsc28gc2VlaW5nIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgc3BsaXRfbGFyZ2VfcGFnZWAuIFRob3NlIGFyZSBpbnRlcm5hbCBidXQgYXJlIGNhbGxlZCBkdXJpbmcgcGFnZSBhdHRyaWJ1dGUgY2hhbmdlcywgc28gdGhleSBtaWdodCBiZSBpbnRlcmVzdGluZyBkb3duIHRoZSBsaW5lLCBidXQgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBleHBvcnRlZCBvbmVzIGZvciBub3cuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGF5IGhlcmU/IEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gUmlnaHQsIGl0JiMzOTtzIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gU28gdGhpcyBpcyB4ODYgc3BlY2lmaWMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBmb3IgYHg4Ni9tbWAuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIG1ha2VmaWxlcyBmb3IgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYGFyY2gveDg2L21tL3BhdC9NYWtlZmlsZWAgb3IgYGFyY2gveDg2L21tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub1xuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBxdWljayBhc3Nlc3NtZW50IG9mIHRoaXMgY2hhbmdlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoaXMgZGVlcGx5OgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFdvcnRoIGEgRGVlcCBEaXZlKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgeDg2IGNvbXBpbGF0aW9uLiBObyBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHRoZSBjb3JlIHBhZ2UgYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGludHJpY2F0ZSBkYW5jZSBvZiBsYXJnZSBwYWdlIHNwbGl0dGluZywgY29sbGFwc2luZywgYW5kIHRoZSBjcml0aWNhbCBsb2NraW5nIGFyb3VuZCBgaW5pdF9tbWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIG15IGV5ZWJyb3dzIOKAkyBhbnkgY29kZSB0b3VjaGluZyBsYXJnZSBwYWdlcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O2QgYWRkIHRoaXMgdG8gdGhlIGxpc3Qgb2YgYXJlYXMgZm9yIGhlYXZ5IGZ1enppbmcgaW1tZWRpYXRlbHkuCgpJJiMzOTttIGFsc28gc2VlaW5nIGEgY2FsbCB0byBgZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKWAsIHdoaWNoIG1lYW5zIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBtaWdodCBiZSBpbiBwbGF5IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhhdCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgY2hhbmdlcywgYW5kIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHN1cmZhY2UgYXJlYSB0aGF0IGlzIHN1c2NlcHRpYmxlIHRvIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19QQUdFQUxMT0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0yPWNvbmZpZyBQQUdFX0VYVEVOU0lPTlxuLS1cbm1tL0tjb25maWcuZGVidWctMTAtXG5tbS9LY29uZmlnLmRlYnVnOjExOmNvbmZpZyBERUJVR19QQUdFQUxMT0Ncbm1tL0tjb25maWcuZGVidWctMTItXHRib29sIFwmIzM0O0RlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy00MC1cbm1tL0tjb25maWcuZGVidWc6NDE6Y29uZmlnIERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFxubW0vS2NvbmZpZy5kZWJ1Zy00Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIGJ5IGRlZmF1bHQ/XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIERlYnVnIFBhZ2UgQWxsb2NhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB0aGF0IGVuYWJsaW5nIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIGluaXRpYWxseS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBpbnRyb2R1Y2VzIGEgYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgIGNoZWNrIHRvIGF2b2lkIGxvY2tpbmcsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKV2FpdCBhIHNlY29uZCwgbGV0IG1lIGNsYXJpZnkgdGhhdCBsb2dpYyBpbiBteSBtaW5kLiBJZiBgZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKWAgKmlzKiB0cnVlLCB3ZSBza2lwIHRoZSBsb2NrOyBpZiBpdCYjMzk7cyAqZmFsc2UqLCB3ZSB0YWtlIHRoZSBsb2NrLiBUbyBnZXQgY29tcHJlaGVuc2l2ZSB0ZXN0IGNvdmVyYWdlLCB3ZSByZWFsbHkgbmVlZCB0byBldmFsdWF0ZSBib3RoIHNjZW5hcmlvcy4gQW5kIGBERUJVR19QQUdFQUxMT0NgIGlzIHByb2JhYmx5IGdvb2QgdG8gaGF2ZS4KCkFoLCBidXQgYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgIGlzIGEgcnVudGltZSBjb25kaXRpb24sIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgZW5hYmxlZCB0aHJvdWdoIHRoZSBgZGVidWdfcGFnZWFsbG9jPW9uYCBrZXJuZWwgY29tbWFuZC1saW5lIG9wdGlvbiBvciwgY3J1Y2lhbGx5LCBgQ09ORklHX0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAuIFNvLCBmb3IgbWF4aW11bSBjb250cm9sIG92ZXIgdGhlIHRlc3RpbmcgSSYjMzk7bSBnb2luZyB0byBkbywgaW5jbHVkaW5nIGJvdGggYENPTkZJR19ERUJVR19QQUdFQUxMT0NgIGFuZCBgQ09ORklHX0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIHByb2JhYmx5IHRoZSBiZXN0IGFwcHJvYWNoLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYWRkcmVzcyB3aXRoIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ1xubW0vS2NvbmZpZy5kZWJ1Zy0xMi1cdGJvb2wgXCYjMzQ7RGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnNcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MTM6XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxubW0vS2NvbmZpZy5kZWJ1ZzoxNDpcdGRlcGVuZHMgb24gIUhJQkVSTkFUSU9OIHx8IEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DIFx1MDAyNlx1MDAyNiAhUFBDIFx1MDAyNlx1MDAyNiAhU1BBUkNcbm1tL0tjb25maWcuZGVidWctMTUtXHRzZWxlY3QgUEFHRV9QT0lTT05JTkcgaWYgIUFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz00MT1jb25maWcgREVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUXG5tbS9LY29uZmlnLmRlYnVnLTQyLVx0Ym9vbCBcJiMzNDtFbmFibGUgZGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgZGVmYXVsdD9cJiMzNDtcbm1tL0tjb25maWcuZGVidWc6NDM6XHRkZXBlbmRzIG9uIERFQlVHX1BBR0VBTExPQ1xubW0vS2NvbmZpZy5kZWJ1Zy00NC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTQ4PWNvbmZpZyBTTFVCX0RFQlVHXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy01MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIFNMVUIgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG5tbS9LY29uZmlnLmRlYnVnOjUxOlx0ZGVwZW5kcyBvbiBTWVNGUyBcdTAwMjZcdTAwMjYgIVNMVUJfVElOWVxubW0vS2NvbmZpZy5kZWJ1Zy01Mi1cdHNlbGVjdCBTVEFDS0RFUE9UIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbm1tL0tjb25maWcuZGVidWc9NTk9Y29uZmlnIFNMVUJfREVCVUdfT05cbm1tL0tjb25maWcuZGVidWctNjAtXHRib29sIFwmIzM0O1NMVUIgZGVidWdnaW5nIG9uIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6NjE6XHRkZXBlbmRzIG9uIFNMVUJfREVCVUdcbm1tL0tjb25maWcuZGVidWctNjItXHRzZWxlY3QgU1RBQ0tERVBPVF9BTFdBWVNfSU5JVCBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIFVBRiBkZXRlY3Rpb24gaW4gVFlQRVNBRkVfQllfUkNVIGNhY2hlcyAoZm9yIEtBU0FOKVwmIzM0O1xubW0vS2NvbmZpZy5kZWJ1Zzo3NTpcdGRlcGVuZHMgb24gU0xVQl9ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy03Ni1cdCMgU0xVQl9SQ1VfREVCVUcgc2hvdWxkIGJ1aWxkIGZpbmUgd2l0aG91dCBLQVNBTiwgYnV0IGlzIGN1cnJlbnRseSB1c2VsZXNzXG5tbS9LY29uZmlnLmRlYnVnLTc3LVx0IyB3aXRob3V0IEtBU0FOLCBzbyBtYXJrIGl0IGFzIGEgZGVwZW5kZW5jeSBvZiBLQVNBTiBmb3Igbm93LlxubW0vS2NvbmZpZy5kZWJ1Zzo3ODpcdGRlcGVuZHMgb24gS0FTQU5cbm1tL0tjb25maWcuZGVidWctNzktXHRkZWZhdWx0IEtBU0FOX0dFTkVSSUMgfHwgS0FTQU5fU1dfVEFHU1xuLS1cbm1tL0tjb25maWcuZGVidWc9MTA1PWNvbmZpZyBQQUdFX09XTkVSXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xubW0vS2NvbmZpZy5kZWJ1ZzoxMDc6XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUXG5tbS9LY29uZmlnLmRlYnVnLTEwOC1cdHNlbGVjdCBERUJVR19GU1xuLS1cbm1tL0tjb25maWcuZGVidWc9MTIyPWNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXG5tbS9LY29uZmlnLmRlYnVnLTEyMy1cdGJvb2wgXCYjMzQ7Q2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlc1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1ZzoxMjQ6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1xubW0vS2NvbmZpZy5kZWJ1ZzoxMjU6XHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG5tbS9LY29uZmlnLmRlYnVnLTEyNi1cdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuLS1cbm1tL0tjb25maWcuZGVidWc9MTM2PWNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXG5tbS9LY29uZmlnLmRlYnVnLTEzNy1cdGJvb2wgXCYjMzQ7RW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XCYjMzQ7XG5tbS9LY29uZmlnLmRlYnVnOjEzODpcdGRlcGVuZHMgb24gUEFHRV9UQUJMRV9DSEVDS1xubW0vS2NvbmZpZy5kZWJ1Zy0xMzktXHRoZWxwXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xNjU9Y29uZmlnIERFQlVHX1BBR0VfUkVGXG5tbS9LY29uZmlnLmRlYnVnLTE2Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRyYWNlcG9pbnQgdG8gdHJhY2sgZG93biBwYWdlIHJlZmVyZW5jZSBtYW5pcHVsYXRpb25cJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MTY3Olx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbm1tL0tjb25maWcuZGVidWc6MTY4Olx0ZGVwZW5kcyBvbiBUUkFDRVBPSU5UU1xubW0vS2NvbmZpZy5kZWJ1Zy0xNjktXHRoZWxwXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xNzc9Y29uZmlnIERFQlVHX1JPREFUQV9URVNUXG5tbS9LY29uZmlnLmRlYnVnLTE3OC1cdGJvb2wgXCYjMzQ7VGVzdGNhc2UgZm9yIHRoZSBtYXJraW5nIHJvZGF0YSByZWFkLW9ubHlcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MTc5Olx0ZGVwZW5kcyBvbiBTVFJJQ1RfS0VSTkVMX1JXWFxubW0vS2NvbmZpZy5kZWJ1Zy0xODAtXHRoZWxwXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xODY9Y29uZmlnIERFQlVHX1dYXG5tbS9LY29uZmlnLmRlYnVnLTE4Ny1cdGJvb2wgXCYjMzQ7V2FybiBvbiBXJiM0MztYIG1hcHBpbmdzIGF0IGJvb3RcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MTg4Olx0ZGVwZW5kcyBvbiBBUkNIX0hBU19ERUJVR19XWFxubW0vS2NvbmZpZy5kZWJ1ZzoxODk6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxubW0vS2NvbmZpZy5kZWJ1ZzoxOTA6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy5kZWJ1Zy0xOTEtXHRzZWxlY3QgUFREVU1QXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yMjI9Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1ZzoyMjQ6XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjU6XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG5tbS9LY29uZmlnLmRlYnVnOjIyNjpcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXG5tbS9LY29uZmlnLmRlYnVnLTIyNy1cdHNlbGVjdCBQVERVTVBcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTI0MD1jb25maWcgREVCVUdfS01FTUxFQUtcbm1tL0tjb25maWcuZGVidWctMjQxLVx0Ym9vbCBcJiMzNDtLZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3JcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MjQyOlx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IEhBVkVfREVCVUdfS01FTUxFQUtcbm1tL0tjb25maWcuZGVidWctMjQzLVx0c2VsZWN0IERFQlVHX0ZTXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yNjU9Y29uZmlnIERFQlVHX0tNRU1MRUFLX01FTV9QT09MX1NJWkVcbm1tL0tjb25maWcuZGVidWctMjY2LVx0aW50IFwmIzM0O0ttZW1sZWFrIG1lbW9yeSBwb29sIHNpemVcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MjY3Olx0ZGVwZW5kcyBvbiBERUJVR19LTUVNTEVBS1xubW0vS2NvbmZpZy5kZWJ1Zy0yNjgtXHRyYW5nZSAyMDAgMTAwMDAwMFxuLS1cbm1tL0tjb25maWcuZGVidWc9Mjc4PWNvbmZpZyBERUJVR19LTUVNTEVBS19ERUZBVUxUX09GRlxubW0vS2NvbmZpZy5kZWJ1Zy0yNzktXHRib29sIFwmIzM0O0RlZmF1bHQga21lbWxlYWsgdG8gb2ZmXCYjMzQ7XG5tbS9LY29uZmlnLmRlYnVnOjI4MDpcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtcbm1tL0tjb25maWcuZGVidWctMjgxLVx0aGVscFxuLS1cbm1tL0tjb25maWcuZGVidWc9Mjg1PWNvbmZpZyBERUJVR19LTUVNTEVBS19BVVRPX1NDQU5cbi0tXG5tbS9LY29uZmlnLmRlYnVnLTI4Ny1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZy5kZWJ1ZzoyODg6XHRkZXBlbmRzIG9uIERFQlVHX0tNRU1MRUFLXG5tbS9LY29uZmlnLmRlYnVnLTI4OS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTMwMD1jb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxubW0vS2NvbmZpZy5kZWJ1Zy0zMDEtXHRib29sIFwmIzM0O0RlZmF1bHQga21lbWxlYWsgdG8gdmVyYm9zZSBtb2RlXCYjMzQ7XG5tbS9LY29uZmlnLmRlYnVnOjMwMjpcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtfQVVUT19TQ0FOXG5tbS9LY29uZmlnLmRlYnVnLTMwMy1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTMxMT1jb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG5tbS9LY29uZmlnLmRlYnVnLTMxMi1cdGJvb2wgXCYjMzQ7U3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1ZzozMTM6XHRkZXBlbmRzIG9uIFBFUl9WTUFfTE9DS1xubW0vS2NvbmZpZy5kZWJ1Zy0zMTQtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gVHdlYWtzIGFuZCBTeW1ib2wgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBidWlsZC4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgYERFQlVHX1BBR0VBTExPQ2AgZGVwZW5kcyBvbiBgREVCVUdfS0VSTkVMYCBhbmQgYSBmZXcgb3RoZXIgY29uZGl0aW9ucyByZWxhdGVkIHRvIGhpYmVybmF0aW9uIGFuZCBhcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiBHaXZlbiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBlbmFibGUgYm90aCBgREVCVUdfUEFHRUFMTE9DYCBhbmQgYERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgc29tZSBoZWxwZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KCk5leHQsIEkmIzM5O20gc3BvdHRpbmcgcmVmZXJlbmNlcyB0byBgUFREVU1QYCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgbG9ja2luZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gVGhlIGNvbW1pdCBtZXNzYWdlcyBtZW50aW9uIGBQVERVTVBgIHJhY2luZyB3aXRoIGBpbml0X21tYCwgYW5kIHRoYXQmIzM5O3MgY29uY2VybmluZy4gVG8gdGVzdCB0aGlzIHJhY2UgY29uZGl0aW9uIG1vcmUgZWZmZWN0aXZlbHksIEkgc2hvdWxkIGRlZmluaXRlbHkgZW5hYmxlIGBQVERVTVBfREVCVUdGU2AuIEl0IHJlcXVpcmVzIGBERUJVR19LRVJORUxgLCBgREVCVUdfRlNgLCBhbmQgYEFSQ0hfSEFTX1BURFVNUGAsIGFsbCBvZiB3aGljaCBzaG91bGQgYmUgcmVhc29uYWJsZSB0byBlbmFibGUgYXMgd2VsbC4KCk5vdywgZm9yIGRlZXBlciBkaXZlcywgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBtZW1vcnkgbWFuaXB1bGF0aW9uIHN5bWJvbHM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X25wYCwgYW5kIGBzZXRfbWVtb3J5X3BgLiBUaGV5IGFyZSBjcnVjaWFsIGZvciBzZXR0aW5nIG1lbW9yeSBwZXJtaXNzaW9ucyBhbmQgYXJlIGV4dHJlbWVseSBjb21tb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm90IGlubGluZWQgYmVjYXVzZSBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZXNlIGNhbGxzLiBZZXMsIGdvb2QsIHRoZXkmIzM5O3JlIGV4cG9ydGVkLiBOb3cgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHB0ZHVtcF9zaG93YCBvciBhbnl0aGluZyBzaW1pbGFyIHRvIHNlZSBob3cgaXQgd29ya3MgaW50ZXJuYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy03LVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjg6c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZpbml0X21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTMtXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTQ6REVGSU5FX1NIT1dfQVRUUklCVVRFKHB0ZHVtcCk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTUtXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTY6c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE3LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIyLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjIzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3Vya25sKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yNC1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yNS0jaWZkZWYgQ09ORklHX01JVElHQVRJT05fUEFHRV9UQUJMRV9JU09MQVRJT05cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyNjpzdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjcte1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI4LVx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5Olx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVx1MDAzZW1tLCB0cnVlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zMC1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zMi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzozMzpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wX2N1cnVzcik7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzQtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM2LSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6Mzc6c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM4LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cdGlmIChlZmlfbW0ucGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZlZmlfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00My1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0NDpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wX2VmaSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDUtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IHB0X2R1bXBfZGVidWdfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Mi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1MzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7a2VybmVsXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01NC1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y3VycmVudF9rZXJuZWxcJiMzNDssIDA0MDAsIGRpciwgTlVMTCxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1NTpcdFx0XHQgICAgXHUwMDI2cHRkdW1wX2N1cmtubF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Ni1cbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTgtXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2N1cnJlbnRfdXNlclwmIzM0OywgMDQwMCwgZGlyLCBOVUxMLFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjU5Olx0XHRcdCAgICBcdTAwMjZwdGR1bXBfY3VydXNyX2ZvcHMpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYwLSNlbmRpZlxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYxLSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NjI6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2VmaVwmIzM0OywgMDQwMCwgZGlyLCBOVUxMLCBcdTAwMjZwdGR1bXBfZWZpX2ZvcHMpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYzLSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoxOTojaW5jbHVkZSBcdTAwM2NsaW51eC9wdGR1bXAuaFx1MDAzZVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjAtXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9Mjg9c3RydWN0IHBnX3N0YXRlIHtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI5Olx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zMC1cdGludCBsZXZlbDtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0yMjc9c3RhdGljIHZvaWQgbm90ZV93eChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUwLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUxOnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90KHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCBpbnQgbGV2ZWwsIHU2NCB2YWwpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTIte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUzOlx0c3RydWN0IHBnX3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZihwdF9zdCwgc3RydWN0IHBnX3N0YXRlLCBwdGR1bXApO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjU0LVx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcdTAwMjYgUFRFX0ZMQUdTX01BU0s7XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjY4LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjY5OnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90X3B0ZShzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgcHRlX3QgcHRlKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjcwLXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzMtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNzQ6c3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3RfcG1kKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBwbWRfdCBwbWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzUte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI3OC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB1ZF90IHB1ZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI4MC17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjgzLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mjg0OnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90X3A0ZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgcDRkX3QgcDRkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjg1LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyODk6c3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3RfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBwZ2RfdCBwZ2QpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yOTAte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI5OS0gKi9cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMDpzdGF0aWMgdm9pZCBub3RlX3BhZ2Uoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxldmVsLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAxLVx0XHQgICAgICB1NjQgdmFsKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAyLXtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMzpcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwNC1cdHBncHJvdHZhbF90IG5ld19wcm90LCBuZXdfZWZmO1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5MC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjM5MTpzdGF0aWMgdm9pZCBub3RlX3BhZ2VfcHRlKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Mi17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzk1LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mzk2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzk3LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDAtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MDE6c3RhdGljIHZvaWQgbm90ZV9wYWdlX3B1ZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDIte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQwNjpzdGF0aWMgdm9pZCBub3RlX3BhZ2VfcDRkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHA0ZF90IHA0ZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNy17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDEwLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDExOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdkX3QgcGdkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDEyLXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTUtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MTY6c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDE3LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjItXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MjM6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjQtXHRcdFx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjYte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDI3Olx0Y29uc3Qgc3RydWN0IHB0ZHVtcF9yYW5nZSBwdGR1bXBfcmFuZ2VzW10gPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjgtI2lmZGVmIENPTkZJR19YODZfNjRcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MzctXHRzdHJ1Y3QgcGdfc3RhdGUgc3QgPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Mzg6XHRcdC5wdGR1bXAgPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MzktXHRcdFx0Lm5vdGVfcGFnZV9wdGUgPSBub3RlX3BhZ2VfcHRlLFxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ0OS1cdFx0XHQuZWZmZWN0aXZlX3Byb3RfcGdkID0gZWZmZWN0aXZlX3Byb3RfcGdkLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDUwOlx0XHRcdC5yYW5nZVx0XHQ9IHB0ZHVtcF9yYW5nZXNcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1MS1cdFx0fSxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTctXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTg6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBtbSwgcGdkKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1OS1cbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzMtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzQ6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3NS17XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzY6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgbW0tXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzctfVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4MC1cdFx0XHRcdCAgIGJvb2wgdXNlcilcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODYtI2VuZGlmXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0ODc6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg4LX1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ5MDp2b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ5MS17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAwLVx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTAxOlx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDItI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNi17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA5LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTEwOlx0cmV0dXJuIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MTEtfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDcxPXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ3NC1cdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NzU6XHQgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ3Ni1cdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgIENvZGUgYW5kIFJlbGF0ZWQgU3ltYm9scyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXMgdXNlZCB3aXRoaW4gYSBmZXcgZGVidWdmcyBmaWxlczogYHB0ZHVtcF9zaG93YCwgYHB0ZHVtcF9jdXJrbmxfc2hvd2AsIGBwdGR1bXBfY3VydXNyX3Nob3dgLCBhbmQgYHB0ZHVtcF9lZmlfc2hvd2AuIEdpdmVuIHRoYXQgaXQmIzM5O3MgdGllZCB0byBkZWJ1Z2ZzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgaW4gbXkgY3VycmVudCBlbnZpcm9ubWVudC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpOb3csIGxldCBtZSB6b29tIGluIG9uIHRoZSBjb3JlIHN5bWJvbHMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSB1c2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBtZW1vcnkgcGVybWlzc2lvbnM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X25wYCwgYHNldF9tZW1vcnlfcGAsIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAsIGFuZCBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgLiBUaGlzIHN1Z2dlc3RzIGEgZm9jdXMgb24gdGhlIHBhZ2UgdGFibGUgZW50cmllcywgd2hpY2ggaXNuJiMzOTt0IHVudXN1YWwuCgpUaGUgbmV4dCB0aGluZyBJJiMzOTtsbCBuZWVkIHRvIGtub3cgaXMgaWYgYHNldF9tZW1vcnlfZW5jcnlwdGVkYCBhbmQgYHNldF9tZW1vcnlfZGVjcnlwdGVkYCBhcmUgYWx3YXlzIGF2YWlsYWJsZSwgb3IgaWYgdGhleSYjMzk7cmUgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlndXJhdGlvbi4gSSBrbm93IHRob3NlIGFyZSBsZXNzIGNvbW1vbmx5IGVuYWJsZWQsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCBhbnkgbWVhbmluZ2Z1bCBhbmFseXNpcyBvciBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnlfZW5jcnlwdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MDk9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX2RlYyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI1OmludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNi17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI4LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyOTpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTI1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IFBlcm1pc3Npb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgYmVpbmcgJiMzNDtleHBvcnRlZCwmIzM0OyBhbmQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhhdCBleHBvcnQgaXMgaGFwcGVuaW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUga2VybmVsLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIGJlaW5nIG1hZGUgYWNjZXNzaWJsZSwgcHJvYmFibHkgZnJvbSB1c2VyIHNwYWNlLgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuIExldCBtZSBqdW1wIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaGAgLSBJJiMzOTttIGFsbW9zdCBjZXJ0YWluIGBzZXRfbWVtb3J5X3JvYCBhbmQgYHNldF9tZW1vcnlfcndgIGFyZSBnb2luZyB0byBiZSBrZXkgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlc2UgcHJpbWl0aXZlcyBhcmUgdXNlZCB0byBjaGFuZ2UgbWVtb3J5IHByb3RlY3Rpb24gYXR0cmlidXRlcy4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGhvdyB0aG9zZSBmdW5jdGlvbnMgbWFwIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG1lY2hhbmlzbXMsIGxpa2UgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgY29udHJvbCByZWdpc3RlciBtb2RpZmljYXRpb25zIChDUjAsIENSMyksIGFuZCBwb3RlbnRpYWxseSB0aGUgTVNScyByZWxhdGVkIHRvIG1lbW9yeSBwcm90ZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIGNyZWF0aW5nIG9yIG1vZGlmeWluZyB0aGUgJiMzOTtleHBvcnQmIzM5OyBvZiB0aGlzIG1lbW9yeS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSAmIzM5O2V4cG9ydGVkJiMzOTsgbWVtb3J5IG1lYW5zIGl0JiMzOTtzIG5vdyBhY2Nlc3NpYmxlIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIGFuZCBgc2V0X21lbW9yeV9yb2AgYW5kIGBzZXRfbWVtb3J5X3J3YCBnaXZlIGEgY2x1ZSB0byB3aGF0IHRoZSAqY2hhbmdlKiBpbiBjb250ZXh0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5X3JvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC04LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjk6I2RlZmluZSBzZXRfbWVtb3J5X3JveCBzZXRfbWVtb3J5X3JveFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjEwOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIExhYnlyaW50aGluZSBIZWFkZXIgRmlsZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYHNldF9tZW1vcnlfcm9gIGlzIGRlY2xhcmVkLiBOb3QgYSBiaWcgZGVhbCwgSSBrbm93IHRoaXMgdGVycml0b3J5LiBMZXQgbWUgY2hlY2sgdGhlIHN0YW5kYXJkIHBsYWNlc+KApiBBaCwgdGhlcmUgaXQgaXMhIEkganVzdCBjaGVja2VkIGFuZCBjb25maXJtZWQgdGhhdCBgc2V0X21lbW9yeV9yb2AgaXMgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oYC4gR29vZCwgZ29vZC4gVGhhdCYjMzk7cyBleGFjdGx5IHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgaXQuIE5vdyBJIGNhbiBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5X3JvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTAtI2Vsc2VcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjExOnN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC0xMi1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oPTE0PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKSB7IHJldHVybiAwOyB9XG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTYtXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxNzojaWZuZGVmIHNldF9tZW1vcnlfcm94XG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxODpzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE5LXtcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjIwOlx0aW50IHJldCA9IHNldF9tZW1vcnlfcm8oYWRkciwgbnVtcGFnZXMpO1xuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMjEtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFNldHRpbmcgRnVuY3Rpb25zIGFuZCBSZWxhdGVkIERlYnVnZ2luZyBUb29scyoqCgpPa2F5LCBzbyBgc2V0X21lbW9yeV9yb2AsIHRoYXQga2V5IGZ1bmN0aW9uLCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaGAgdW5kZXIgdGhhdCBgI2lmZGVmIENPTkZJR19BUkNIX0hBU19TRVRfTUVNT1JZYCBjb25kaXRpb25hbC4gR29vZCwgc2luY2Ugd2UgYXJlIG9uIHg4NiwgaXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhdmFpbGFibGUuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kOiBgREVCVUdfUEFHRUFMTE9DYCwgYERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAsIGFuZCBhbHNvIGBQVERVTVBfREVCVUdGU2AuIFRoZXNlIG9mdGVuIHJlbGF0ZSB0byBkZWJ1Z2dpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBhZ2UgdGFibGUgc3RydWN0dXJlcywgc28gdGhleSBjb3VsZCBiZSByZWxldmFudC4KCk5leHQsIEkgbmVlZCB0byBsaXN0IG91dCB0aGUga2V5IHN5bWJvbHMuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X25wYCwgYHNldF9tZW1vcnlfcGAsIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAsIGBzZXRfbWVtb3J5X2RlY3J5cHRlZGAuCgpBaCEgQW5kLCBsZXQmIzM5O3Mgbm90IGZvcmdldCBhYm91dCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLiBJdCYjMzk7cyB0aGF0IGxpdHRsZSBnZW0gdGhhdCBtaWdodCBoZWxwIHRyaWdnZXIgdGhlIHB0ZHVtcCByYWNlLiBJIHJlbWVtYmVyIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gZGVidWdmcy4gV2FpdCwgaXMgdGhhdCBmdW5jdGlvbiBleHBvcnRlZD8gTm9wZS4gQnV0LCBpdCBpcyByZWFjaGFibGUgdmlhIGRlYnVnZnMsIHNvIGl0JiMzOTtzIGZhaXIgZ2FtZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXNuJiMzOTt0IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTg9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZpbml0X21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MTY9c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTI2PXN0YXRpYyBpbnQgcHRkdW1wX2N1cnVzcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXHRpZiAoY3VycmVudC1cdTAwM2VtbS1cdTAwM2VwZ2QpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6Mjk6XHRcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXHUwMDNlbW0sIHRydWUpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTMwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTM3PXN0YXRpYyBpbnQgcHRkdW1wX2VmaV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzktXHRpZiAoZWZpX21tLnBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0MDpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXHUwMDI2ZWZpX21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00NzQ9dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Nzk6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVx0XHRcdFx0ICAgYm9vbCB1c2VyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ4NgoJCQkJCQkJb3V0cHV0OiAyNDAKCQkJCQkJCXRob3VnaHRzOiA5NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IGl0JiMzOTtzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBzaGlmdCB3aXRoaW4gdGhlIHg4NiBwYWdlIGF0dHJpYnV0ZSBjb2RlLCBzbyBJIG5lZWQgdG8gdGhvcm91Z2hseSBldmFsdWF0ZSBpdHMgaW1wbGljYXRpb25zLiBXaGlsZSB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGlzbiYjMzk7dCBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGFjY2Vzc2libGUgdGhyb3VnaCBgdm1saW51eGAsIHdoaWNoIGlzIGdyZWF0IGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKTXkgaW1tZWRpYXRlIGZvY3VzLCBnaXZlbiB0aGUgY2hhbmdlcywgaXMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2FsbGVkIGZyb20gZGVidWdmcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCBpdCB0byB0aGUgZm9jdXMgc3ltYm9scy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCwgYENPTkZJR19ERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRgLCBhbmQgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgd2UgY2FuIHRlc3QgdGhlIG5ldyBsb2dpYyBwcm9wZXJseS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgY2xvc2VseSBhdCB0aGUgY29kZSBpdHNlbGYuIEkgc2VlIGEgY29uZGl0aW9uYWwgbG9jayBjaGFuZ2Ugd2l0aCBgZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKWAuIFRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcgaW4gdGVybXMgb2YgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgdGhhdCBnZXRzIGVuYWJsZWQvZGlzYWJsZWQuIFRoZSByZWFsIGNvcmUgaXMgdGhlIGxvY2tpbmcgYW5kIHVubG9ja2luZyBhcm91bmQgYGluaXRfbW1gLCBhbmQgdGhvc2UgY2hhbmdlcyBhcmUgaW1wb3J0YW50LiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgYG1tYXBfd3JpdGVfbG9ja2AgaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGFkZGluZyBgbW1hcF9yZWFkX2xvY2tgIGluIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLiBBbHNvLCB0aGUgbWFuaXB1bGF0aW9uIG9mIGxvY2tzIGFyb3VuZCBgcHRlX2FsbG9jX29uZV9rZXJuZWxgLCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBsb2NraW5nIHN0cmF0ZWd5IHVzaW5nIGBtbWFwX3JlYWRfbG9ja2AgYW5kIGBtbWFwX3dyaXRlX2xvY2tgIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBpbnZvbHZpbmcgYHB0ZHVtcGAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCBhbmQgY29sbGFwc2VkLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiB0aGF0IGlzIHZlcnkgbGlrZWx5IHRvIGJlIGV4ZXJjaXNlZCwgYW5kIGFzIHN1Y2ggaXMgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IGNyaXRpY2FsIGFuZCBoaWdobHkgcmVhY2hhYmxlLiBUaGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbG9ja2luZyBhbmQgaG93IGxhcmdlIHBhZ2VzIGFyZSBoYW5kbGVkIHJlcXVpcmUgZXh0ZW5zaXZlIGZ1enppbmcgdG8gZW5zdXJlIHdlIGRvbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG1lbW9yeSBsZWFrcy4KClNvLCBJJiMzOTttIGdvaW5nIHRvIGFkZCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgdG8gdGhlIGZvY3VzIGxpc3Q6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X25wYCwgYW5kIGBzZXRfbWVtb3J5X3BgLiBBbmQgb2YgY291cnNlLCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLgoKRmluYWxseSwgSSB3aWxsIG5vdyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19QQUdFQUxMT0MmIzM0OywKICAgICYjMzQ7REVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUJiMzNDssCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfbngmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV94JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfNGsmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ucCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3AmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgeDg2IHBhZ2UgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiBjb2RlIChDUEEpLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHNlbWFudGljcyB1c2luZyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBwdGR1bXAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuIEl0IGFsc28gY2hhbmdlcyB0aGUgbG9ja2luZyBiZWhhdmlvciB3aGVuIGRlYnVnX3BhZ2VhbGxvYyBpcyBlbmFibGVkIGFuZCBtb2RpZmllcyBob3cgbGFyZ2UgcGFnZXMgYXJlIHNwbGl0IGFuZCBjb2xsYXBzZWQuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19QQUdFQUxMT0MmIzM0OywKICAgICYjMzQ7REVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUJiMzNDssCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfbngmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV94JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfNGsmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ucCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3AmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgeDg2IHBhZ2UgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiBjb2RlIChDUEEpLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHNlbWFudGljcyB1c2luZyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBwdGR1bXAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuIEl0IGFsc28gY2hhbmdlcyB0aGUgbG9ja2luZyBiZWhhdmlvciB3aGVuIGRlYnVnX3BhZ2VhbGxvYyBpcyBlbmFibGVkIGFuZCBtb2RpZmllcyBob3cgbGFyZ2UgcGFnZXMgYXJlIHNwbGl0IGFuZCBjb2xsYXBzZWQuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MDIuNjU1OTA4MDc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwOTc1MTIwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfUEFHRUFMTE9DXCIsXG4gICAgXCJERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRcIixcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V0X21lbW9yeV9yb1wiLFxuICAgIFwic2V0X21lbW9yeV9yd1wiLFxuICAgIFwic2V0X21lbW9yeV9ueFwiLFxuICAgIFwic2V0X21lbW9yeV94XCIsXG4gICAgXCJzZXRfbWVtb3J5XzRrXCIsXG4gICAgXCJzZXRfbWVtb3J5X25wXCIsXG4gICAgXCJzZXRfbWVtb3J5X3BcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgeDg2IHBhZ2UgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiBjb2RlIChDUEEpLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHNlbWFudGljcyB1c2luZyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBwdGR1bXAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuIEl0IGFsc28gY2hhbmdlcyB0aGUgbG9ja2luZyBiZWhhdmlvciB3aGVuIGRlYnVnX3BhZ2VhbGxvYyBpcyBlbmFibGVkIGFuZCBtb2RpZmllcyBob3cgbGFyZ2UgcGFnZXMgYXJlIHNwbGl0IGFuZCBjb2xsYXBzZWQuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODowMi42NTU5MTc1MDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzA1OTIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyOGI3NDc5NDQyYTBlNmVlZjQ1MWQ1YmY4ZWRkNjZiMzM1YmVlYzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTU6MTg6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5pbmRleCBiMWU3ODBhNDY1YjU5Li43ZDY1NjUyMDg4N2NmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZWdpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZTgyMC9hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG5AQCAtNDksNyArNTAsOCBAQCBzdHJ1Y3QgY3BhX2RhdGEge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRmbGFncztcXG4gXFx0dW5zaWduZWQgaW50XFx0Zm9yY2Vfc3BsaXRcXHRcXHQ6IDEsXFxuIFxcdFxcdFxcdGZvcmNlX3N0YXRpY19wcm90XFx0OiAxLFxcbi1cXHRcXHRcXHRmb3JjZV9mbHVzaF9hbGxcXHRcXHQ6IDE7XFxuK1xcdFxcdFxcdGZvcmNlX2ZsdXNoX2FsbFxcdFxcdDogMSxcXG4rXFx0XFx0XFx0aW5pdF9tbV9yZWFkX2xvY2tlZFxcdDogMTtcXG4gXFx0c3RydWN0IHBhZ2VcXHQqKnBhZ2VzO1xcbiB9O1xcbiBcXG5AQCAtNjUsOCArNjcsMjUgQEAgc3RhdGljIGNvbnN0IGludCBjcGFfd2Fybl9sZXZlbCA9IENQQV9QUk9URUNUO1xcbiAgKiBTZXJpYWxpemUgY3BhKCkgdXNpbmcgY3BhX2xvY2sgc28gdGhhdCB3ZSBkb24ndCBhbGxvdyBhbnkgb3RoZXIgY3B1LCB3aXRoXFxuICAqIHN0YWxlIGxhcmdlIHRsYiBlbnRyaWVzLCB0byBjaGFuZ2UgdGhlIHBhZ2UgYXR0cmlidXRlIGluIHBhcmFsbGVsIHRvIHNvbWVcXG4gICogb3RoZXIgY3B1IHNwbGl0dGluZyBhIGxhcmdlIHBhZ2UgZW50cnkgYWxvbmcgd2l0aCBjaGFuZ2luZyB0aGUgYXR0cmlidXRlLlxcbisgKlxcbisgKiBXaGVuIGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCksIHBhZ2UgYXR0cmlidXRlcyBjb3VsZCBiZSBjaGFuZ2VkIGluIGF0b21pY1xcbisgKiBjb250ZXh0IHRoYXQgd291bGQgd2FycmFudCBkaXNhYmxpbmcgSVJRcy4gQnV0IHNpbmNlIGRlYnVnX3BhZ2VhbGxvYyBhbHdheXNcXG4rICogdXNlcyA0ayBwYWdlcyBpbiB0aGUgZGlyZWN0IG1hcCB0aGVyZSBhcmUgbm8gcmFjZXMgZm9yIHNwbGl0cyBhbmQgY29sbGFwc2VzXFxuKyAqIGFuZCBsb2NraW5nIGNhbiBiZSBqdXN0IHNraXBwZWQgYWx0b2dldGhlci5cXG4gICovXFxuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3BhX2xvY2spO1xcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKF9jcGFfbG9jayk7XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgY3BhX2xvY2sodm9pZClcXG4re1xcbitcXHRpZiAoIWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCkpXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2X2NwYV9sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGNwYV91bmxvY2sodm9pZClcXG4re1xcbitcXHRpZiAoIWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCkpXFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZfY3BhX2xvY2spO1xcbit9XFxuIFxcbiAjZGVmaW5lIENQQV9GTFVTSFRMQiAxXFxuICNkZWZpbmUgQ1BBX0FSUkFZIDJcXG5AQCAtNDA5LDcgKzQyOCw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxcbiBcXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcXG4gXFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xcbiBcXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XFxuQEAgLTQxNyw4ICs0MzYsNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIFxcdGludCBjb2xsYXBzZWQgPSAwO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2Y3BhX2xvY2spO1xcbi1cXG4gXFx0aWYgKGNwYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKSkge1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY3BhLVxcdTAwM2VudW1wYWdlczsgaSsrKVxcbiBcXHRcXHRcXHRjb2xsYXBzZWQgKz0gY29sbGFwc2VfbGFyZ2VfcGFnZXMoX19jcGFfYWRkcihjcGEsIGkpLFxcbkBAIC00MzIsMTkgKzQ0OSwzNSBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIFxcdFxcdFxcdGNvbGxhcHNlZCArPSBjb2xsYXBzZV9sYXJnZV9wYWdlcyhhZGRyLCBcXHUwMDI2cGd0YWJsZXMpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWNvbGxhcHNlZCkge1xcbi1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3BhX2xvY2spO1xcbitcXHRpZiAoIWNvbGxhcHNlZClcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuIFxcbiBcXHRmbHVzaF90bGJfYWxsKCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFxcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xcbiBcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRkZXNjLVxcdTAwM2VwdF9saXN0KTtcXG4tXFx0XFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25seSBlYXJseSBhbGxvYydkIGRpcmVjdCBtYXAgc2hvdWxkIG5vdCBiZSBmbGFnZ2VkIFBHX3RhYmxlXFxuK1xcdFxcdCAqIGhlcmUgYW5kIHRob3NlIHNob3VsZG4ndCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseVxcbitcXHRcXHQgKiBjYXV0aW91cyBhbmQgaGFuZGxlIHRoZSAhUEdfdGFibGUgY2FzZSB0b28uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpXFxuK1xcdFxcdFxcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xcbiBcXHR9XFxuK31cXG4gXFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjcGFfbG9jayk7XFxuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcXG4rXFx0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxcbitcXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXFxuK1xcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuQEAgLTczNiw3ICs3NjksNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0KmxldmVsID0gUEdfTEVWRUxfNTEyRztcXG4gXFx0Km54IHw9IHBnZF9mbGFncygqcGdkKSBcXHUwMDI2IF9QQUdFX05YO1xcbi1cXHQqcncgXFx1MDAyNj0gcGdkX2ZsYWdzKCpwZ2QpIFxcdTAwMjYgX1BBR0VfUlc7XFxuK1xcdCpydyBcXHUwMDI2PSAhIShwZ2RfZmxhZ3MoKnBnZCkgXFx1MDAyNiBfUEFHRV9SVyk7XFxuIFxcbiBcXHRwNGQgPSBwNGRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7XFxuIFxcdGlmIChwNGRfbm9uZSgqcDRkKSlcXG5AQCAtNzQ3LDcgKzc4MCw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcbiBcXHQqbGV2ZWwgPSBQR19MRVZFTF8xRztcXG4gXFx0Km54IHw9IHA0ZF9mbGFncygqcDRkKSBcXHUwMDI2IF9QQUdFX05YO1xcbi1cXHQqcncgXFx1MDAyNj0gcDRkX2ZsYWdzKCpwNGQpIFxcdTAwMjYgX1BBR0VfUlc7XFxuK1xcdCpydyBcXHUwMDI2PSAhIShwNGRfZmxhZ3MoKnA0ZCkgXFx1MDAyNiBfUEFHRV9SVyk7XFxuIFxcbiBcXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7XFxuIFxcdGlmIChwdWRfbm9uZSgqcHVkKSlcXG5AQCAtNzU4LDcgKzc5MSw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcbiBcXHQqbGV2ZWwgPSBQR19MRVZFTF8yTTtcXG4gXFx0Km54IHw9IHB1ZF9mbGFncygqcHVkKSBcXHUwMDI2IF9QQUdFX05YO1xcbi1cXHQqcncgXFx1MDAyNj0gcHVkX2ZsYWdzKCpwdWQpIFxcdTAwMjYgX1BBR0VfUlc7XFxuK1xcdCpydyBcXHUwMDI2PSAhIShwdWRfZmxhZ3MoKnB1ZCkgXFx1MDAyNiBfUEFHRV9SVyk7XFxuIFxcbiBcXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7XFxuIFxcdGlmIChwbWRfbm9uZSgqcG1kKSlcXG5AQCAtNzY5LDcgKzgwMiw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcbiBcXHQqbGV2ZWwgPSBQR19MRVZFTF80SztcXG4gXFx0Km54IHw9IHBtZF9mbGFncygqcG1kKSBcXHUwMDI2IF9QQUdFX05YO1xcbi1cXHQqcncgXFx1MDAyNj0gcG1kX2ZsYWdzKCpwbWQpIFxcdTAwMjYgX1BBR0VfUlc7XFxuK1xcdCpydyBcXHUwMDI2PSAhIShwbWRfZmxhZ3MoKnBtZCkgXFx1MDAyNiBfUEFHRV9SVyk7XFxuIFxcbiBcXHRyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTtcXG4gfVxcbkBAIC0xMTI5LDExICsxMTYyLDEwIEBAIHN0YXRpYyB2b2lkIHNwbGl0X3NldF9wdGUoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXG4gc3RhdGljIGludFxcbiBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLVxcdFxcdCAgIHN0cnVjdCBwdGRlc2MgKnB0ZGVzYylcXG4rXFx0XFx0ICAgcHRlX3QgKnBiYXNlKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqYmFzZSA9IHB0ZGVzY19wYWdlKHB0ZGVzYyk7XFxuLVxcdHB0ZV90ICpwYmFzZSA9IChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhiYXNlKTtcXG4rXFx0c3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpO1xcbiBcXHR1bnNpZ25lZCBpbnQgaSwgbGV2ZWw7XFxuIFxcdHBncHJvdF90IHJlZl9wcm90O1xcbiBcXHRib29sIG54LCBydztcXG5AQCAtMTIzNywxNiArMTI2OSwyMSBAQCBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIHN0YXRpYyBpbnQgc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHtcXG4tXFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xcbitcXHRwdGVfdCAqcHRlO1xcbitcXG4rXFx0Y3BhX3VubG9jaygpO1xcbitcXHRpZiAoY3BhLVxcdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxcbitcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4rXFx0cHRlID0gcHRlX2FsbG9jX29uZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0pO1xcbitcXHRpZiAoY3BhLVxcdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxcbitcXHRcXHRtbWFwX3JlYWRfbG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuK1xcdGNwYV9sb2NrKCk7XFxuIFxcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2Y3BhX2xvY2spO1xcbi1cXHRwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCwgMCk7XFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2Y3BhX2xvY2spO1xcbi1cXHRpZiAoIXB0ZGVzYylcXG4rXFx0aWYgKCFwdGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0aWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZGVzYykpXFxuLVxcdFxcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XFxuK1xcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKVxcbitcXHRcXHRwdGVfZnJlZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHB0ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0yMDI1LDkgKzIwNjIsOSBAQCBzdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgcHJpbWFyeSlcXG4gXFx0XFx0aWYgKGNwYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoQ1BBX0FSUkFZIHwgQ1BBX1BBR0VTX0FSUkFZKSlcXG4gXFx0XFx0XFx0Y3BhLVxcdTAwM2VudW1wYWdlcyA9IDE7XFxuIFxcbi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmNwYV9sb2NrKTtcXG4rXFx0XFx0Y3BhX2xvY2soKTtcXG4gXFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyKGNwYSwgcHJpbWFyeSk7XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjcGFfbG9jayk7XFxuK1xcdFxcdGNwYV91bmxvY2soKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC0yMTA5LDcgKzIxNDYsMTEgQEAgc3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbiBcXHRjcGEuY3VycGFnZSA9IDA7XFxuIFxcdGNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0O1xcbiBcXG4tXFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmNwYSwgMSk7XFxuK1xcdC8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi9cXG4rXFx0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSB0cnVlO1xcbitcXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG4rXFx0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbmluZGV4IDA0YjhmNjFlY2U1ZDguLmY0Y2ViOTY4YWViM2QgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG5AQCAtNjIxLDYgKzYyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gREVGSU5FX0dVQVJEKG1tYXBfcmVhZF9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXFxuIFxcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcXG4rREVGSU5FX0dVQVJEKG1tYXBfd3JpdGVfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxcbitcXHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODowMy4xNDk3NDIzMDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MzYwMzY3MDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19QQUdFQUxMT0NcIixcbiAgICBcIkRFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFwiLFxuICAgIFwiUFREVU1QX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X254XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIixcbiAgICBcInNldF9tZW1vcnlfNGtcIixcbiAgICBcInNldF9tZW1vcnlfbnBcIixcbiAgICBcInNldF9tZW1vcnlfcFwiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB4ODYgcGFnZSBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uIGNvZGUgKENQQSkuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgc2VtYW50aWNzIHVzaW5nIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIHB0ZHVtcCBhbmQgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBsb2NraW5nIGJlaGF2aW9yIHdoZW4gZGVidWdfcGFnZWFsbG9jIGlzIGVuYWJsZWQgYW5kIG1vZGlmaWVzIGhvdyBsYXJnZSBwYWdlcyBhcmUgc3BsaXQgYW5kIGNvbGxhcHNlZC4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyOGI3NDc5NDQyYTBlNmVlZjQ1MWQ1YmY4ZWRkNjZiMzM1YmVlYzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNToxODowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBiMWU3ODBhNDY1YjU5Li43ZDY1NjUyMDg4N2NmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQ5LDcgKzUwLDggQEAgc3RydWN0IGNwYV9kYXRhIHtcbiBcdHVuc2lnbmVkIGludFx0ZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnRcdGZvcmNlX3NwbGl0XHRcdDogMSxcbiBcdFx0XHRmb3JjZV9zdGF0aWNfcHJvdFx0OiAxLFxuLVx0XHRcdGZvcmNlX2ZsdXNoX2FsbFx0XHQ6IDE7XG4rXHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMSxcbitcdFx0XHRpbml0X21tX3JlYWRfbG9ja2VkXHQ6IDE7XG4gXHRzdHJ1Y3QgcGFnZVx0KipwYWdlcztcbiB9O1xuIFxuQEAgLTY1LDggKzY3LDI1IEBAIHN0YXRpYyBjb25zdCBpbnQgY3BhX3dhcm5fbGV2ZWwgPSBDUEFfUFJPVEVDVDtcbiAgKiBTZXJpYWxpemUgY3BhKCkgdXNpbmcgY3BhX2xvY2sgc28gdGhhdCB3ZSBkb24ndCBhbGxvdyBhbnkgb3RoZXIgY3B1LCB3aXRoXG4gICogc3RhbGUgbGFyZ2UgdGxiIGVudHJpZXMsIHRvIGNoYW5nZSB0aGUgcGFnZSBhdHRyaWJ1dGUgaW4gcGFyYWxsZWwgdG8gc29tZVxuICAqIG90aGVyIGNwdSBzcGxpdHRpbmcgYSBsYXJnZSBwYWdlIGVudHJ5IGFsb25nIHdpdGggY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZS5cbisgKlxuKyAqIFdoZW4gZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKSwgcGFnZSBhdHRyaWJ1dGVzIGNvdWxkIGJlIGNoYW5nZWQgaW4gYXRvbWljXG4rICogY29udGV4dCB0aGF0IHdvdWxkIHdhcnJhbnQgZGlzYWJsaW5nIElSUXMuIEJ1dCBzaW5jZSBkZWJ1Z19wYWdlYWxsb2MgYWx3YXlzXG4rICogdXNlcyA0ayBwYWdlcyBpbiB0aGUgZGlyZWN0IG1hcCB0aGVyZSBhcmUgbm8gcmFjZXMgZm9yIHNwbGl0cyBhbmQgY29sbGFwc2VzXG4rICogYW5kIGxvY2tpbmcgY2FuIGJlIGp1c3Qgc2tpcHBlZCBhbHRvZ2V0aGVyLlxuICAqL1xuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3BhX2xvY2spO1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soX2NwYV9sb2NrKTtcbitcbitzdGF0aWMgaW5saW5lIHZvaWQgY3BhX2xvY2sodm9pZClcbit7XG4rXHRpZiAoIWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCkpXG4rXHRcdHNwaW5fbG9jayhcdTAwMjZfY3BhX2xvY2spO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgY3BhX3VubG9jayh2b2lkKVxuK3tcbitcdGlmICghZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKSlcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2X2NwYV9sb2NrKTtcbit9XG4gXG4gI2RlZmluZSBDUEFfRkxVU0hUTEIgMVxuICNkZWZpbmUgQ1BBX0FSUkFZIDJcbkBAIC00MDksNyArNDI4LDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbiBcbi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xuIFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wO1xuQEAgLTQxNyw4ICs0MzYsNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXHRpbnQgY29sbGFwc2VkID0gMDtcbiBcdGludCBpO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cbiBcdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IChDUEFfUEFHRVNfQVJSQVkgfCBDUEFfQVJSQVkpKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNwYS1cdTAwM2VudW1wYWdlczsgaSsrKVxuIFx0XHRcdGNvbGxhcHNlZCArPSBjb2xsYXBzZV9sYXJnZV9wYWdlcyhfX2NwYV9hZGRyKGNwYSwgaSksXG5AQCAtNDMyLDE5ICs0NDksMzUgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIFx0XHRcdGNvbGxhcHNlZCArPSBjb2xsYXBzZV9sYXJnZV9wYWdlcyhhZGRyLCBcdTAwMjZwZ3RhYmxlcyk7XG4gXHR9XG4gXG4tXHRpZiAoIWNvbGxhcHNlZCkge1xuLVx0XHRzcGluX3VubG9jayhcdTAwMjZjcGFfbG9jayk7XG4rXHRpZiAoIWNvbGxhcHNlZClcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0Zmx1c2hfdGxiX2FsbCgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHRcdC8qXG4rXHRcdCAqIE9ubHkgZWFybHkgYWxsb2MnZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxuK1x0XHQgKiBoZXJlIGFuZCB0aG9zZSBzaG91bGRuJ3QgYmUgY29sbGFwc2VkLiBIb3dldmVyIGJlIGFidW5kYW50bHlcbitcdFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxuK1x0XHQgKi9cbitcdFx0aWYgKFBhZ2VUYWJsZSgocHRkZXNjX3BhZ2UocHRkZXNjKSkpKVxuK1x0XHRcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4gXHR9XG4rfVxuIFxuLVx0c3Bpbl91bmxvY2soXHUwMDI2Y3BhX2xvY2spO1xuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbit7XG4rXHQvKlxuK1x0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XG4rXHQgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duXG4rXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXG4rXHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxuK1x0ICovXG4rXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcdTAwMjZpbml0X21tKVxuK1x0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbkBAIC03MzYsNyArNzY5LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7XG4gXHQqbnggfD0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBnZF9mbGFncygqcGdkKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTtcbiBcdGlmIChwNGRfbm9uZSgqcDRkKSlcbkBAIC03NDcsNyArNzgwLDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzFHO1xuIFx0Km54IHw9IHA0ZF9mbGFncygqcDRkKSBcdTAwMjYgX1BBR0VfTlg7XG4tXHQqcncgXHUwMDI2PSBwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX1JXO1xuK1x0KnJ3IFx1MDAyNj0gISEocDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7XG4gXHRpZiAocHVkX25vbmUoKnB1ZCkpXG5AQCAtNzU4LDcgKzc5MSw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF8yTTtcbiBcdCpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVztcbitcdCpydyBcdTAwMjY9ICEhKHB1ZF9mbGFncygqcHVkKSBcdTAwMjYgX1BBR0VfUlcpO1xuIFxuIFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpO1xuIFx0aWYgKHBtZF9ub25lKCpwbWQpKVxuQEAgLTc2OSw3ICs4MDIsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNEs7XG4gXHQqbnggfD0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBtZF9mbGFncygqcG1kKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpO1xuIH1cbkBAIC0xMTI5LDExICsxMTYyLDEwIEBAIHN0YXRpYyB2b2lkIHNwbGl0X3NldF9wdGUoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFxuIHN0YXRpYyBpbnRcbiBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgIHN0cnVjdCBwdGRlc2MgKnB0ZGVzYylcbitcdFx0ICAgcHRlX3QgKnBiYXNlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxO1xuLVx0c3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpO1xuLVx0cHRlX3QgKnBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpO1xuK1x0c3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpO1xuIFx0dW5zaWduZWQgaW50IGksIGxldmVsO1xuIFx0cGdwcm90X3QgcmVmX3Byb3Q7XG4gXHRib29sIG54LCBydztcbkBAIC0xMjM3LDE2ICsxMjY5LDIxIEBAIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBzdGF0aWMgaW50IHNwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xuK1x0cHRlX3QgKnB0ZTtcbitcbitcdGNwYV91bmxvY2soKTtcbitcdGlmIChjcGEtXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcbitcdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbitcdHB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKFx1MDAyNmluaXRfbW0pO1xuK1x0aWYgKGNwYS1cdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxuK1x0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbitcdGNwYV9sb2NrKCk7XG4gXG4tXHRzcGluX3VubG9jayhcdTAwMjZjcGFfbG9jayk7XG4tXHRwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCwgMCk7XG4tXHRzcGluX2xvY2soXHUwMDI2Y3BhX2xvY2spO1xuLVx0aWYgKCFwdGRlc2MpXG4rXHRpZiAoIXB0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRpZiAoX19zcGxpdF9sYXJnZV9wYWdlKGNwYSwga3B0ZSwgYWRkcmVzcywgcHRkZXNjKSlcbi1cdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbitcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKVxuK1x0XHRwdGVfZnJlZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcHRlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yMDI1LDkgKzIwNjIsOSBAQCBzdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgcHJpbWFyeSlcbiBcdFx0aWYgKGNwYS1cdTAwM2VmbGFncyBcdTAwMjYgKENQQV9BUlJBWSB8IENQQV9QQUdFU19BUlJBWSkpXG4gXHRcdFx0Y3BhLVx1MDAzZW51bXBhZ2VzID0gMTtcbiBcbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbitcdFx0Y3BhX2xvY2soKTtcbiBcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyKGNwYSwgcHJpbWFyeSk7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbitcdFx0Y3BhX3VubG9jaygpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuQEAgLTIxMDksNyArMjE0NiwxMSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRjcGEuY3VycGFnZSA9IDA7XG4gXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcbiBcbi1cdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rXHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXG4rXHRjcGEuaW5pdF9tbV9yZWFkX2xvY2tlZCA9IHRydWU7XG4rXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4rXHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rXHRjcGEuaW5pdF9tbV9yZWFkX2xvY2tlZCA9IGZhbHNlO1xuIFxuIFx0LypcbiBcdCAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5pbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICs2MjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4rXHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MDMuMTQ5NzQ0MTczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg3NzA1MjA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBYODYgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBnb2luZyB0byBiZSBoaWdoLWltcGFjdCwgcG90ZW50aWFsbHkgdG91Y2hpbmcgZnJlcXVlbnRseSB1c2VkIHBhdGhzLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBob3cgd2UgaGFuZGxlIHBhZ2UgYXR0cmlidXRlIGNoYW5nZXMg4oCTIHRoaW5ncyBsaWtlIHJlYWQtb25seSwgcmVhZC13cml0ZSwgbm8tZXhlY3V0ZSwgZXhlY3V0ZSwgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbWVtb3J5IHByb3RlY3Rpb24gYW5kIGFjY2VzcyBjb250cm9sIG9uIHg4Ni5cblxuVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgaW50cm9kdWNpbmcgYW4gYG1tYXBfd3JpdGVfbG9ja2AgZ3VhcmQgaW4gYG1tYXBfbG9jay5oYC4gSSBzZWUgY2hhbmdlcyB0byB0aGUgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgYGNwYV9sb2NrYCBkZXBlbmRpbmcgb24gYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgLiBUaGF0IHNlZW1zIGEgcmVhc29uYWJsZSBwcmVjYXV0aW9uIGZvciBkZWJ1Z2dpbmcgYnVpbGRzLCBhbmQgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaXNhYmxpbmcgdGhlIGxvY2sgdW5kZXIgdGhvc2UgY2lyY3Vtc3RhbmNlcy4gVGhlIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGZ1bmN0aW9uIGlzIGJlaW5nIHVwZGF0ZWQgdG8gYWNxdWlyZSBgbW1hcF93cml0ZV9sb2NrYCBvbiBgaW5pdF9tbWAsIGFuZCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0YWtpbmcgYG1tYXBfcmVhZF9sb2NrYCBvbiBgaW5pdF9tbWAuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBsb2NraW5nIGhpZXJhcmNoeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIGxvY2sgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5IGFuZCB3aGF0IHNjZW5hcmlvcyB0aGV5IGFyZSBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QuIFRoZXJlIGlzIGFsc28gYSBjaGFuZ2UgdG8gaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCwgdXNpbmcgYHB0ZV9hbGxvY19vbmVfa2VybmVsYCBhbmQgYHB0ZV9mcmVlX2tlcm5lbGAgaW5zdGVhZCBvZiB0aGUgb2xkZXIgYHBhZ2V0YWJsZV9hbGxvY2AgYW5kIGBwYWdldGFibGVfZnJlZWAuIEkga25vdyB0aG9zZSBmdW5jdGlvbnMsIHNvIHRoaXMgaXMgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGZvciBsYXJnZSBwYWdlIG1hbmFnZW1lbnQuIEZpbmFsbHksIEkgc2VlIGEgZml4IHRvIGEgYml0bWFza2luZyBvcGVyYXRpb24gaW4gYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYCB0aGF0IEknbGwgbmVlZCB0byBleGFtaW5lIGNsb3NlbHkuXG5cbk5vdyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSBhcmVhcy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGlubGluZWQgYGNwYV9sb2NrYCBhbmQgYGNwYV91bmxvY2tgLCBhbmQgdGhlIHdyYXBwZXIgZm9yIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBBbHNvIG9uIG15IGxpc3QgYXJlIGBsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cmAsIGBfX3NwbGl0X2xhcmdlX3BhZ2VgIGFuZCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMuIFdoaWxlIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBhcmUgc3RhdGljLCBJIG5lZWQgdG8gdHJhY2UgdGhlbSBiYWNrIHRvIHRoZWlyIHB1YmxpYyBBUElzIHRvIHNlZSBpZiB0aGVpciBmdW5jdGlvbnMgY2hhbmdlZC4gVGhlIHB1YmxpYyBBUElzIEkgYW0gaW50ZXJlc3RlZCBpbiBhcmUgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIChgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCkuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyBJJ2xsIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGNhbGxzIHRvIGBzZXRfbWVtb3J5X3JvYCBhbmQgYHNldF9tZW1vcnlfcndgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjEyLjAyNjc5ODY0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYxMzc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKSBzZXRfbWVtb3J5X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIwOD1pbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjIxOmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIyMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNDY9aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjYxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI2MjppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNjMte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjg1PWludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI5MS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyOTI6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjkzLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM0Mz1FWFBPUlRfU1lNQk9MX0dQTChjbGVhcl9tY2Vfbm9zcGVjKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0NS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDY6aW50IHNldF9tZW1vcnlfeCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDcte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzUzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM1NDppbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2MjppbnQgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NzppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY4LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3Ny1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNzg6aW50IHNldF9tZW1vcnlfcncodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc5LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4Mi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODM6aW50IHNldF9tZW1vcnlfbnAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg0LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4Ny1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODg6aW50IHNldF9tZW1vcnlfbnBfbm9hbGlhcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODkte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk0LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM5NTppbnQgc2V0X21lbW9yeV9wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5Ni17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTktXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDAwOmludCBzZXRfbWVtb3J5XzRrKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwMS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDYtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDgte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEyLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQxMzppbnQgc2V0X21lbW9yeV9nbG9iYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDE0LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUwOT1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfZGVjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MjU6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1Mjk9RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9lbmNyeXB0ZWQpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUzMC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MzE6aW50IHNldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUzMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjEyLjA3NzQxODA3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTQ2OTEyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiBNZW1vcnkgQXR0cmlidXRlIENvbnRyb2wqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgbWVtb3J5IGF0dHJpYnV0ZSBtYW5hZ2VtZW50IOKAkyBpdCdzIHRvdWNoaW5nIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWw7IGl0J3MgdGhlIGNvcmUgb2YgaG93IHdlIGFjdHVhbGx5ICpzZXQqIGFuZCAqY2xlYXIqIGF0dHJpYnV0ZXMuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gYmUgbW9kaWZ5aW5nLCBpZiB0aGlzIHBhdGNoIHJlYWxseSBuZWVkcyB0byBiZSBtYWRlLlxuXG5BbmQsIGl0J3Mgbm90IGp1c3QgdGhhdCBjb3JlIGZ1bmN0aW9uLCBidXQgYWxzbyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYHNwbGl0X2xhcmdlX3BhZ2VgLiBUaGVzZSBib3RoIGRpcmVjdGx5IGludGVyZmFjZSB3aXRoIGF0dHJpYnV0ZSBjaGFuZ2VzLiBJdCdzIGFsbCBjb25uZWN0ZWQuXG5cbk5vdywgYmVjYXVzZSBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBmaWxlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmV4cG9ydGVkKiBmdW5jdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IGxldmVyYWdlIGl0LiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGxpc3QgdGhlbSBvZmYuLi4gVGhhdCB3aWxsIGluY2x1ZGUgdGhlIG1ham9yIG9uZXM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3diYCwgYHNldF9tZW1vcnlfd2NgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBhbmQgYHNldF9tZW1vcnlfNGtgLiBUaG9zZSBhcmUgYWxsIGdvaW5nIHRvIGJlIGFmZmVjdGVkIGJ5IHRoaXMuIFRoYXQncyBhIGJyb2FkIHJhbmdlIHRvIGNvbnNpZGVyLlxuXG5XYWl0LCBqdXN0IGEgc2Vjb25kLi4uIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoaXMuLi4gSXMgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYWN0dWFsbHkgc3RhdGljLCBvciBoYXMgaXQgYmVlbiBleHBvcnRlZCBzb21laG93PyBMZXQgbWUgZG91YmxlLWNoZWNrLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGlzIGFmZmVjdGluZyB1cywgYW5kIHdoYXQgdGhlIHNjb3BlIG9mIHRoaXMgaXMsIGJlZm9yZSBJIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MTcuMTcyMTExNTY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDU4NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5nZV9wYWdlX2F0dHJfc2V0X2NsclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTg4Nz1zdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjQtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTY1OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjYtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5NzA9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAwMC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMDE6XFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFsaWFzX2NwYSwgMCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDAyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMzQtXFx0XFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDM1OlxcdFxcdF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhbGlhc19jcGEsIDApO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAzNi1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNDEtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDQyOnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA0My17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwOTItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDkzOnN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwOTQtXFx0XFx0XFx0XFx0ICAgIHBncHJvdF90IG1hc2tfc2V0LCBwZ3Byb3RfdCBtYXNrX2NscixcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1MS1cXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFxcdTAwMjZpbml0X21tKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE1MjpcXHRcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNTMtXFx0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjE4MD1zdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldCh1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxODIte1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE4MzpcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxODQtXFx0XFx0KGFycmF5ID8gQ1BBX0FSUkFZIDogMCksIE5VTEwpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTg3PXN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9wYWdlX2F0dHJfY2xlYXIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTg5LXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxOTA6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDAsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTkxLVxcdFxcdChhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjE5ND1zdGF0aWMgaW5saW5lIGludCBjcGFfc2V0X3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5Ni17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTk3OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsIG1hc2ssIF9fcGdwcm90KDApLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5OC1cXHRcXHRDUEFfUEFHRVNfQVJSQVksIHBhZ2VzKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIwMT1zdGF0aWMgaW5saW5lIGludCBjcGFfY2xlYXJfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjAzLXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMDQ6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDAsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA1LVxcdFxcdENQQV9QQUdFU19BUlJBWSwgcGFnZXMpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjQ2PWludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI1My1cXHRpZiAoIXJldCkge1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI1NDpcXHRcXHRyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFkZHIsIG51bXBhZ2VzLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI1NS1cXHRcXHRcXHRcXHRcXHQgICAgICAgY2FjaGVtb2RlMnBncHJvdChfUEFHRV9DQUNIRV9NT0RFX1dDKSxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM2Nz1pbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzMtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzc0OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3NS1cXHRcXHRcXHRcXHRcXHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzg4PWludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg5LXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTA6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5MS1cXHRcXHRcXHRcXHRcXHRfX3BncHJvdChfUEFHRV9QUkVTRU5UKSwgMCxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjQwMD1pbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDEte1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwMjpcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhZGRyLCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDMtXFx0XFx0XFx0XFx0XFx0X19wZ3Byb3QoX1BBR0VfS0VSTkVMXzRLKSxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjQyMz1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0NTItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDUzOlxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ1NC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjU0NT1zdGF0aWMgaW50IF9zZXRfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTcwLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IG5ld190eXBlID09IF9QQUdFX0NBQ0hFX01PREVfV0MpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTcxOlxcdFxcdHJldCA9IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1NzItXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNhY2hlbW9kZTJwZ3Byb3QoXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2NTA9c3RhdGljIGludCBfX3NldF9wYWdlc19wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjUtXFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjY2OlxcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjctfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjY5PXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfbnAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY4NC1cXHQgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2ODU6XFx0cmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY4Ni19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3NTI9aW50IF9faW5pdCBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZChwZ2RfdCAqcGdkLCB1NjQgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3NzYtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNzc3OlxcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc3OC1cXHRfX2ZsdXNoX3RsYl9hbGwoKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc4OT1pbnQgX19pbml0IGtlcm5lbF91bm1hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yODExLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjgxMjpcXHRyZXR2YWwgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4MTMtXFx0X19mbHVzaF90bGJfYWxsKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjE3LjIyMTU3NjM3N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTE1MTA2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZXNlIGBzZXRfbWVtb3J5XypgIGZ1bmN0aW9ucyBhcmUgYWxsIGV4cG9ydGVkIGZyb20gdGhlIGtlcm5lbC4gVGhhdCBzY3JlYW1zIFwiZnV6eiBtZVwiIHRvIG1lLiBBbnkgZXhwb3J0ZWQgZnVuY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZywgYW5kIHRoZXNlIHNlZW0gcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHdpdGggYWxsIHRoZWlyIGF0dHJpYnV0ZXMuIEknbSB0aGlua2luZyBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCwgYW5kIGBzZXRfbWVtb3J5XzRrYCBhcyBzdGFydGluZyB0YXJnZXRzLiBJJ20gYWxzbyBzZWVpbmcgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGBzcGxpdF9sYXJnZV9wYWdlYC4gVGhvc2UgYXJlIGludGVybmFsIGJ1dCBhcmUgY2FsbGVkIGR1cmluZyBwYWdlIGF0dHJpYnV0ZSBjaGFuZ2VzLCBzbyB0aGV5IG1pZ2h0IGJlIGludGVyZXN0aW5nIGRvd24gdGhlIGxpbmUsIGJ1dCBsZXQncyBmb2N1cyBvbiB0aGUgZXhwb3J0ZWQgb25lcyBmb3Igbm93LlxuXG5MZXQncyBzZWUsIHdoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYXkgaGVyZT8gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiBSaWdodCwgaXQncyBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIFNvIHRoaXMgaXMgeDg2IHNwZWNpZmljLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgZm9yIGB4ODYvbW1gLiBJJ2xsIGxvb2sgYXQgdGhlIG1ha2VmaWxlcyBmb3IgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYGFyY2gveDg2L21tL3BhdC9NYWtlZmlsZWAgb3IgYGFyY2gveDg2L21tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGluIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTk1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjIyLjgxMzA4OTQ3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUzNjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtMi1cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVxcdFxcdFxcdFxcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MjIuODYyNjM0Mzk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MDY0OTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIGFzc2Vzc21lbnQgb2YgdGhpcyBjaGFuZ2UsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhpcyBkZWVwbHk6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBXb3J0aCBhIERlZXAgRGl2ZSoqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgeDg2IGNvbXBpbGF0aW9uLiBObyBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHRoZSBjb3JlIHBhZ2UgYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGludHJpY2F0ZSBkYW5jZSBvZiBsYXJnZSBwYWdlIHNwbGl0dGluZywgY29sbGFwc2luZywgYW5kIHRoZSBjcml0aWNhbCBsb2NraW5nIGFyb3VuZCBgaW5pdF9tbWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIG15IGV5ZWJyb3dzIOKAkyBhbnkgY29kZSB0b3VjaGluZyBsYXJnZSBwYWdlcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEknZCBhZGQgdGhpcyB0byB0aGUgbGlzdCBvZiBhcmVhcyBmb3IgaGVhdnkgZnV6emluZyBpbW1lZGlhdGVseS5cblxuSSdtIGFsc28gc2VlaW5nIGEgY2FsbCB0byBgZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKWAsIHdoaWNoIG1lYW5zIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBtaWdodCBiZSBpbiBwbGF5IGhlcmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBjaGFuZ2VzLCBhbmQgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgc3VyZmFjZSBhcmVhIHRoYXQgaXMgc3VzY2VwdGlibGUgdG8gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODoyNy45MDMyODg2NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzQ5OTQ1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFQlVHX1BBR0VBTExPQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0yPWNvbmZpZyBQQUdFX0VYVEVOU0lPTlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMC1cXG5tbS9LY29uZmlnLmRlYnVnOjExOmNvbmZpZyBERUJVR19QQUdFQUxMT0NcXG5tbS9LY29uZmlnLmRlYnVnLTEyLVxcdGJvb2wgXFxcIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy00MC1cXG5tbS9LY29uZmlnLmRlYnVnOjQxOmNvbmZpZyBERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRcXG5tbS9LY29uZmlnLmRlYnVnLTQyLVxcdGJvb2wgXFxcIkVuYWJsZSBkZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyBieSBkZWZhdWx0P1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MjkuODc4MjkxNzY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDk0NDE3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgRGVidWcgUGFnZSBBbGxvY2F0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB0aGF0IGVuYWJsaW5nIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIGluaXRpYWxseS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBpbnRyb2R1Y2VzIGEgYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgIGNoZWNrIHRvIGF2b2lkIGxvY2tpbmcsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2xhcmlmeSB0aGF0IGxvZ2ljIGluIG15IG1pbmQuIElmIGBkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpYCAqaXMqIHRydWUsIHdlIHNraXAgdGhlIGxvY2s7IGlmIGl0J3MgKmZhbHNlKiwgd2UgdGFrZSB0aGUgbG9jay4gVG8gZ2V0IGNvbXByZWhlbnNpdmUgdGVzdCBjb3ZlcmFnZSwgd2UgcmVhbGx5IG5lZWQgdG8gZXZhbHVhdGUgYm90aCBzY2VuYXJpb3MuIEFuZCBgREVCVUdfUEFHRUFMTE9DYCBpcyBwcm9iYWJseSBnb29kIHRvIGhhdmUuXG5cbkFoLCBidXQgYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgIGlzIGEgcnVudGltZSBjb25kaXRpb24sIGlzbid0IGl0PyBJdCdzIGVuYWJsZWQgdGhyb3VnaCB0aGUgYGRlYnVnX3BhZ2VhbGxvYz1vbmAga2VybmVsIGNvbW1hbmQtbGluZSBvcHRpb24gb3IsIGNydWNpYWxseSwgYENPTkZJR19ERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRgLiBTbywgZm9yIG1heGltdW0gY29udHJvbCBvdmVyIHRoZSB0ZXN0aW5nIEknbSBnb2luZyB0byBkbywgaW5jbHVkaW5nIGJvdGggYENPTkZJR19ERUJVR19QQUdFQUxMT0NgIGFuZCBgQ09ORklHX0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIHByb2JhYmx5IHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYWRkcmVzcyB3aXRoIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTA1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjM1LjE4NzczNzA1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4Mzc5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MTE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ1xcbm1tL0tjb25maWcuZGVidWctMTItXFx0Ym9vbCBcXFwiRGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnNcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMzpcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxcbm1tL0tjb25maWcuZGVidWc6MTQ6XFx0ZGVwZW5kcyBvbiAhSElCRVJOQVRJT04gfHwgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MgXFx1MDAyNlxcdTAwMjYgIVBQQyBcXHUwMDI2XFx1MDAyNiAhU1BBUkNcXG5tbS9LY29uZmlnLmRlYnVnLTE1LVxcdHNlbGVjdCBQQUdFX1BPSVNPTklORyBpZiAhQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NDE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFxcbm1tL0tjb25maWcuZGVidWctNDItXFx0Ym9vbCBcXFwiRW5hYmxlIGRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIGJ5IGRlZmF1bHQ/XFxcIlxcbm1tL0tjb25maWcuZGVidWc6NDM6XFx0ZGVwZW5kcyBvbiBERUJVR19QQUdFQUxMT0NcXG5tbS9LY29uZmlnLmRlYnVnLTQ0LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NDg9Y29uZmlnIFNMVUJfREVCVUdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctNTAtXFx0Ym9vbCBcXFwiRW5hYmxlIFNMVUIgZGVidWdnaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbm1tL0tjb25maWcuZGVidWc6NTE6XFx0ZGVwZW5kcyBvbiBTWVNGUyBcXHUwMDI2XFx1MDAyNiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy5kZWJ1Zy01Mi1cXHRzZWxlY3QgU1RBQ0tERVBPVCBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NTk9Y29uZmlnIFNMVUJfREVCVUdfT05cXG5tbS9LY29uZmlnLmRlYnVnLTYwLVxcdGJvb2wgXFxcIlNMVUIgZGVidWdnaW5nIG9uIGJ5IGRlZmF1bHRcXFwiXFxubW0vS2NvbmZpZy5kZWJ1Zzo2MTpcXHRkZXBlbmRzIG9uIFNMVUJfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTYyLVxcdHNlbGVjdCBTVEFDS0RFUE9UX0FMV0FZU19JTklUIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTc0LVxcdGJvb2wgXFxcIkVuYWJsZSBVQUYgZGV0ZWN0aW9uIGluIFRZUEVTQUZFX0JZX1JDVSBjYWNoZXMgKGZvciBLQVNBTilcXFwiXFxubW0vS2NvbmZpZy5kZWJ1Zzo3NTpcXHRkZXBlbmRzIG9uIFNMVUJfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTc2LVxcdCMgU0xVQl9SQ1VfREVCVUcgc2hvdWxkIGJ1aWxkIGZpbmUgd2l0aG91dCBLQVNBTiwgYnV0IGlzIGN1cnJlbnRseSB1c2VsZXNzXFxubW0vS2NvbmZpZy5kZWJ1Zy03Ny1cXHQjIHdpdGhvdXQgS0FTQU4sIHNvIG1hcmsgaXQgYXMgYSBkZXBlbmRlbmN5IG9mIEtBU0FOIGZvciBub3cuXFxubW0vS2NvbmZpZy5kZWJ1Zzo3ODpcXHRkZXBlbmRzIG9uIEtBU0FOXFxubW0vS2NvbmZpZy5kZWJ1Zy03OS1cXHRkZWZhdWx0IEtBU0FOX0dFTkVSSUMgfHwgS0FTQU5fU1dfVEFHU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MTA3OlxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVFxcbm1tL0tjb25maWcuZGVidWctMTA4LVxcdHNlbGVjdCBERUJVR19GU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xMjI9Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcXG5tbS9LY29uZmlnLmRlYnVnLTEyMy1cXHRib29sIFxcXCJDaGVjayBmb3IgaW52YWxpZCBtYXBwaW5ncyBpbiB1c2VyIHBhZ2UgdGFibGVzXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MTI0OlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMjU6XFx0ZGVwZW5kcyBvbiBFWENMVVNJVkVfU1lTVEVNX1JBTVxcbm1tL0tjb25maWcuZGVidWctMTI2LVxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xMzY9Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcXG5tbS9LY29uZmlnLmRlYnVnLTEzNy1cXHRib29sIFxcXCJFbmZvcmNlIHRoZSBwYWdlIHRhYmxlIGNoZWNraW5nIGJ5IGRlZmF1bHRcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMzg6XFx0ZGVwZW5kcyBvbiBQQUdFX1RBQkxFX0NIRUNLXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMzktXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xNjU9Y29uZmlnIERFQlVHX1BBR0VfUkVGXFxubW0vS2NvbmZpZy5kZWJ1Zy0xNjYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRyYWNlcG9pbnQgdG8gdHJhY2sgZG93biBwYWdlIHJlZmVyZW5jZSBtYW5pcHVsYXRpb25cXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxNjc6XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG5tbS9LY29uZmlnLmRlYnVnOjE2ODpcXHRkZXBlbmRzIG9uIFRSQUNFUE9JTlRTXFxubW0vS2NvbmZpZy5kZWJ1Zy0xNjktXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xNzc9Y29uZmlnIERFQlVHX1JPREFUQV9URVNUXFxubW0vS2NvbmZpZy5kZWJ1Zy0xNzgtXFx0Ym9vbCBcXFwiVGVzdGNhc2UgZm9yIHRoZSBtYXJraW5nIHJvZGF0YSByZWFkLW9ubHlcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxNzk6XFx0ZGVwZW5kcyBvbiBTVFJJQ1RfS0VSTkVMX1JXWFxcbm1tL0tjb25maWcuZGVidWctMTgwLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MTg2PWNvbmZpZyBERUJVR19XWFxcbm1tL0tjb25maWcuZGVidWctMTg3LVxcdGJvb2wgXFxcIldhcm4gb24gVytYIG1hcHBpbmdzIGF0IGJvb3RcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxODg6XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19ERUJVR19XWFxcbm1tL0tjb25maWcuZGVidWc6MTg5OlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1ZzoxOTA6XFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnLmRlYnVnLTE5MS1cXHRzZWxlY3QgUFREVU1QXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTIyMj1jb25maWcgUFREVU1QX0RFQlVHRlNcXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MjI0OlxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjU6XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbm1tL0tjb25maWcuZGVidWc6MjI2OlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjctXFx0c2VsZWN0IFBURFVNUFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0yNDA9Y29uZmlnIERFQlVHX0tNRU1MRUFLXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNDEtXFx0Ym9vbCBcXFwiS2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MjQyOlxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IEhBVkVfREVCVUdfS01FTUxFQUtcXG5tbS9LY29uZmlnLmRlYnVnLTI0My1cXHRzZWxlY3QgREVCVUdfRlNcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MjY1PWNvbmZpZyBERUJVR19LTUVNTEVBS19NRU1fUE9PTF9TSVpFXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNjYtXFx0aW50IFxcXCJLbWVtbGVhayBtZW1vcnkgcG9vbCBzaXplXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MjY3OlxcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtcXG5tbS9LY29uZmlnLmRlYnVnLTI2OC1cXHRyYW5nZSAyMDAgMTAwMDAwMFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0yNzg9Y29uZmlnIERFQlVHX0tNRU1MRUFLX0RFRkFVTFRfT0ZGXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNzktXFx0Ym9vbCBcXFwiRGVmYXVsdCBrbWVtbGVhayB0byBvZmZcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoyODA6XFx0ZGVwZW5kcyBvbiBERUJVR19LTUVNTEVBS1xcbm1tL0tjb25maWcuZGVidWctMjgxLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9Mjg1PWNvbmZpZyBERUJVR19LTUVNTEVBS19BVVRPX1NDQU5cXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjg3LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWcuZGVidWc6Mjg4OlxcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtcXG5tbS9LY29uZmlnLmRlYnVnLTI4OS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTMwMD1jb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbm1tL0tjb25maWcuZGVidWctMzAxLVxcdGJvb2wgXFxcIkRlZmF1bHQga21lbWxlYWsgdG8gdmVyYm9zZSBtb2RlXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MzAyOlxcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtfQVVUT19TQ0FOXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMDMtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbm1tL0tjb25maWcuZGVidWctMzEyLVxcdGJvb2wgXFxcIlN0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzozMTM6XFx0ZGVwZW5kcyBvbiBQRVJfVk1BX0xPQ0tcXG5tbS9LY29uZmlnLmRlYnVnLTMxNC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjM1LjI0MDU4MTAwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTY3NzExODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ3VyYXRpb24gVHdlYWtzIGFuZCBTeW1ib2wgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgYnVpbGQuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBERUJVR19QQUdFQUxMT0NgIGRlcGVuZHMgb24gYERFQlVHX0tFUk5FTGAgYW5kIGEgZmV3IG90aGVyIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBoaWJlcm5hdGlvbiBhbmQgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gR2l2ZW4gdGhhdCwgSSBjYW4gY29uZmlkZW50bHkgZW5hYmxlIGJvdGggYERFQlVHX1BBR0VBTExPQ2AgYW5kIGBERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRgLiBUaGF0IHNob3VsZCBwcm92aWRlIHNvbWUgaGVscGZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uXG5cbk5leHQsIEknbSBzcG90dGluZyByZWZlcmVuY2VzIHRvIGBQVERVTVBgIGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBsb2NraW5nIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBUaGUgY29tbWl0IG1lc3NhZ2VzIG1lbnRpb24gYFBURFVNUGAgcmFjaW5nIHdpdGggYGluaXRfbW1gLCBhbmQgdGhhdCdzIGNvbmNlcm5pbmcuIFRvIHRlc3QgdGhpcyByYWNlIGNvbmRpdGlvbiBtb3JlIGVmZmVjdGl2ZWx5LCBJIHNob3VsZCBkZWZpbml0ZWx5IGVuYWJsZSBgUFREVU1QX0RFQlVHRlNgLiBJdCByZXF1aXJlcyBgREVCVUdfS0VSTkVMYCwgYERFQlVHX0ZTYCwgYW5kIGBBUkNIX0hBU19QVERVTVBgLCBhbGwgb2Ygd2hpY2ggc2hvdWxkIGJlIHJlYXNvbmFibGUgdG8gZW5hYmxlIGFzIHdlbGwuXG5cbk5vdywgZm9yIGRlZXBlciBkaXZlcywgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIG1lbW9yeSBtYW5pcHVsYXRpb24gc3ltYm9sczogYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X254YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5XzRrYCwgYHNldF9tZW1vcnlfbnBgLCBhbmQgYHNldF9tZW1vcnlfcGAuIFRoZXkgYXJlIGNydWNpYWwgZm9yIHNldHRpbmcgbWVtb3J5IHBlcm1pc3Npb25zIGFuZCBhcmUgZXh0cmVtZWx5IGNvbW1vbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGV4cG9ydGVkIHN5bWJvbHMgYW5kIG5vdCBpbmxpbmVkIGJlY2F1c2UgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZXNlIGNhbGxzLiBZZXMsIGdvb2QsIHRoZXkncmUgZXhwb3J0ZWQuIE5vdyBJJ20gZ29pbmcgdG8gbG9vayBhdCByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBwdGR1bXBfc2hvd2Agb3IgYW55dGhpbmcgc2ltaWxhciB0byBzZWUgaG93IGl0IHdvcmtzIGludGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjQxLjgwODI5NTg4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMjg0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNy1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6ODpzdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjEwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZpbml0X21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTExLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTEzLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxNDpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTUtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjE2OnN0YXRpYyBpbnQgcHRkdW1wX2N1cmtubF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTcte1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTk6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cXHUwMDNlbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjIzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3Vya25sKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjQtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI1LSNpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9QQUdFX1RBQkxFX0lTT0xBVElPTlxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyNjpzdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI3LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5OlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXFx1MDAzZW1tLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjMzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3VydXNyKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzQtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzYtI2lmIGRlZmluZWQoQ09ORklHX0VGSSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfWDg2XzY0KVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzozNzpzdGF0aWMgaW50IHB0ZHVtcF9lZmlfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM4LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzktXFx0aWYgKGVmaV9tbS5wZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZlZmlfbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDEtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDMtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQ0OkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfZWZpKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDUtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9NDk9c3RhdGljIGludCBfX2luaXQgcHRfZHVtcF9kZWJ1Z19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjUzOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImtlcm5lbFxcXCIsIDA0MDAsIGRpciwgTlVMTCwgXFx1MDAyNnB0ZHVtcF9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTQtXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY3VycmVudF9rZXJuZWxcXFwiLCAwNDAwLCBkaXIsIE5VTEwsXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjU1OlxcdFxcdFxcdCAgICBcXHUwMDI2cHRkdW1wX2N1cmtubF9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTYtXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTgtXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY3VycmVudF91c2VyXFxcIiwgMDQwMCwgZGlyLCBOVUxMLFxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1OTpcXHRcXHRcXHQgICAgXFx1MDAyNnB0ZHVtcF9jdXJ1c3JfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYwLSNlbmRpZlxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy02MS0jaWYgZGVmaW5lZChDT05GSUdfRUZJKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjYyOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImVmaVxcXCIsIDA0MDAsIGRpciwgTlVMTCwgXFx1MDAyNnB0ZHVtcF9lZmlfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYzLSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjE5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdGR1bXAuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMC1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTI4PXN0cnVjdCBwZ19zdGF0ZSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mjk6XFx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAtXFx0aW50IGxldmVsO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI3PXN0YXRpYyB2b2lkIG5vdGVfd3goc3RydWN0IHBnX3N0YXRlICpzdCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUwLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI1MTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgaW50IGxldmVsLCB1NjQgdmFsKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1Mi17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUzOlxcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTQtXFx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcXHUwMDI2IFBURV9GTEFHU19NQVNLO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjY4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI2OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdGUoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB0ZV90IHB0ZSlcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjczLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3NDpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHBtZF90IHBtZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzUte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB1ZF90IHB1ZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjgzLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI4NDpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wNGQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHA0ZF90IHA0ZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODUte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjg4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI4OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHBnZF90IHBnZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yOTAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjk5LSAqL1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMDpzdGF0aWMgdm9pZCBub3RlX3BhZ2Uoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxldmVsLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwMS1cXHRcXHQgICAgICB1NjQgdmFsKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwMi17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MzAzOlxcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zMDQtXFx0cGdwcm90dmFsX3QgbmV3X3Byb3QsIG5ld19lZmY7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zOTAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MzkxOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wdGUoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Mi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zOTUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mzk2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Ny17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDAxOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDA2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wNGQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcDRkX3QgcDRkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDExOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdkX3QgcGdkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQxMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDE2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTcte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDIyLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyMzpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjQtXFx0XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjYte1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyNzpcXHRjb25zdCBzdHJ1Y3QgcHRkdW1wX3JhbmdlIHB0ZHVtcF9yYW5nZXNbXSA9IHtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjgtI2lmZGVmIENPTkZJR19YODZfNjRcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQzNy1cXHRzdHJ1Y3QgcGdfc3RhdGUgc3QgPSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDM4OlxcdFxcdC5wdGR1bXAgPSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDM5LVxcdFxcdFxcdC5ub3RlX3BhZ2VfcHRlID0gbm90ZV9wYWdlX3B0ZSxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ0OS1cXHRcXHRcXHQuZWZmZWN0aXZlX3Byb3RfcGdkID0gZWZmZWN0aXZlX3Byb3RfcGdkLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1MDpcXHRcXHRcXHQucmFuZ2VcXHRcXHQ9IHB0ZHVtcF9yYW5nZXNcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTEtXFx0XFx0fSxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1Ny1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTg6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1OS1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3My1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzQ6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzUte1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NjpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgbW0tXFx1MDAzZXBnZCwgZmFsc2UsIHRydWUpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3Ny19XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcilcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4Ni0jZW5kaWZcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0ODc6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUobSwgbW0sIHBnZCwgZmFsc2UsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODgtfVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0OTA6dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDkxLXtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMC1cXHRwZ2QgPSBrZXJuZWxfdG9fdXNlcl9wZ2RwKHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTAxOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBwZ2QsIHRydWUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDItI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDQtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDYte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA5LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUxMDpcXHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTExLX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDcxPXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDc0LVxcdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDc1OlxcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ3Ni1cXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjQxLjg2MjMzMTUwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQ1Mzc2OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBDb2RlIGFuZCBSZWxhdGVkIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXMgdXNlZCB3aXRoaW4gYSBmZXcgZGVidWdmcyBmaWxlczogYHB0ZHVtcF9zaG93YCwgYHB0ZHVtcF9jdXJrbmxfc2hvd2AsIGBwdGR1bXBfY3VydXNyX3Nob3dgLCBhbmQgYHB0ZHVtcF9lZmlfc2hvd2AuIEdpdmVuIHRoYXQgaXQncyB0aWVkIHRvIGRlYnVnZnMsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYFBURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGluIG15IGN1cnJlbnQgZW52aXJvbm1lbnQuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5Ob3csIGxldCBtZSB6b29tIGluIG9uIHRoZSBjb3JlIHN5bWJvbHMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSB1c2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSdyZSB3b3JraW5nIHdpdGggbWVtb3J5IHBlcm1pc3Npb25zOiBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfNGtgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBgc2V0X21lbW9yeV9lbmNyeXB0ZWRgLCBhbmQgYHNldF9tZW1vcnlfZGVjcnlwdGVkYC4gVGhpcyBzdWdnZXN0cyBhIGZvY3VzIG9uIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIHdoaWNoIGlzbid0IHVudXN1YWwuXG5cblRoZSBuZXh0IHRoaW5nIEknbGwgbmVlZCB0byBrbm93IGlzIGlmIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAgYW5kIGBzZXRfbWVtb3J5X2RlY3J5cHRlZGAgYXJlIGFsd2F5cyBhdmFpbGFibGUsIG9yIGlmIHRoZXkncmUgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlndXJhdGlvbi4gSSBrbm93IHRob3NlIGFyZSBsZXNzIGNvbW1vbmx5IGVuYWJsZWQsIHNvIHRoYXQncyBzb21ldGhpbmcgdGhhdCBJJ2xsIG5lZWQgdG8gdmVyaWZ5IGJlZm9yZSBJIGNhbiBwcm9jZWVkIHdpdGggYW55IG1lYW5pbmdmdWwgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM0NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODo0Ny42MDc3MTEzOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODQ1MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlfZW5jcnlwdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTA5PXN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI0LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyNTppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyOC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI5OkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZW5jcnlwdGVkKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjQ3LjY1NjU2MTYyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE1NzM1MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBQZXJtaXNzaW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBiZWluZyBcImV4cG9ydGVkLFwiIGFuZCB0aGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMuIExldCdzIGRpZyBpbnRvIHRoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoYXQgZXhwb3J0IGlzIGhhcHBlbmluZyBpbiB0aGUgY29udGV4dCBvZiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0J3MgcmVsYXRlZCB0byBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIGJlaW5nIG1hZGUgYWNjZXNzaWJsZSwgcHJvYmFibHkgZnJvbSB1c2VyIHNwYWNlLlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhgIC0gSSdtIGFsbW9zdCBjZXJ0YWluIGBzZXRfbWVtb3J5X3JvYCBhbmQgYHNldF9tZW1vcnlfcndgIGFyZSBnb2luZyB0byBiZSBrZXkgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlc2UgcHJpbWl0aXZlcyBhcmUgdXNlZCB0byBjaGFuZ2UgbWVtb3J5IHByb3RlY3Rpb24gYXR0cmlidXRlcy4gSSdsbCBuZWVkIHRvIGFuYWx5emUgaG93IHRob3NlIGZ1bmN0aW9ucyBtYXAgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgbWVjaGFuaXNtcywgbGlrZSB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBjb250cm9sIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnMgKENSMCwgQ1IzKSwgYW5kIHBvdGVudGlhbGx5IHRoZSBNU1JzIHJlbGF0ZWQgdG8gbWVtb3J5IHByb3RlY3Rpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBpbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgdGhlICdleHBvcnQnIG9mIHRoaXMgbWVtb3J5LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgJ2V4cG9ydGVkJyBtZW1vcnkgbWVhbnMgaXQncyBub3cgYWNjZXNzaWJsZSBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBhbmQgYHNldF9tZW1vcnlfcm9gIGFuZCBgc2V0X21lbW9yeV9yd2AgZ2l2ZSBhIGNsdWUgdG8gd2hhdCB0aGUgKmNoYW5nZSogaW4gY29udGV4dCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMjUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODo1Mi40NzIyOTk4OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjcyNDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5X3JvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTojZGVmaW5lIHNldF9tZW1vcnlfcm94IHNldF9tZW1vcnlfcm94XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjEwOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODo1Mi44NzkwMzI4NDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MDU0MTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExhYnlyaW50aGluZSBIZWFkZXIgRmlsZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgc2V0X21lbW9yeV9yb2AgaXMgZGVjbGFyZWQuIE5vdCBhIGJpZyBkZWFsLCBJIGtub3cgdGhpcyB0ZXJyaXRvcnkuIExldCBtZSBjaGVjayB0aGUgc3RhbmRhcmQgcGxhY2Vz4oCmIEFoLCB0aGVyZSBpdCBpcyEgSSBqdXN0IGNoZWNrZWQgYW5kIGNvbmZpcm1lZCB0aGF0IGBzZXRfbWVtb3J5X3JvYCBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhgLiBHb29kLCBnb29kLiBUaGF0J3MgZXhhY3RseSB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGl0LiBOb3cgSSBjYW4gbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODo1Ni41Mjk1Nzc3MjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTc5NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlfcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTAtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxMTpzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTEyLXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD0xND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTYtXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6MTc6I2lmbmRlZiBzZXRfbWVtb3J5X3JveFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjE4OnN0YXRpYyBpbmxpbmUgaW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE5LXtcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoyMDpcXHRpbnQgcmV0ID0gc2V0X21lbW9yeV9ybyhhZGRyLCBudW1wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMjEtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6NTYuNTc2MTg2NTkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzQwMDQ1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBTZXR0aW5nIEZ1bmN0aW9ucyBhbmQgUmVsYXRlZCBEZWJ1Z2dpbmcgVG9vbHMqKlxuXG5Pa2F5LCBzbyBgc2V0X21lbW9yeV9yb2AsIHRoYXQga2V5IGZ1bmN0aW9uLCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaGAgdW5kZXIgdGhhdCBgI2lmZGVmIENPTkZJR19BUkNIX0hBU19TRVRfTUVNT1JZYCBjb25kaXRpb25hbC4gR29vZCwgc2luY2Ugd2UgYXJlIG9uIHg4NiwgaXQncyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGF2YWlsYWJsZS4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBrZWVwIHRoZXNlIGluIG1pbmQ6IGBERUJVR19QQUdFQUxMT0NgLCBgREVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUYCwgYW5kIGFsc28gYFBURFVNUF9ERUJVR0ZTYC4gVGhlc2Ugb2Z0ZW4gcmVsYXRlIHRvIGRlYnVnZ2luZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBzbyB0aGV5IGNvdWxkIGJlIHJlbGV2YW50LlxuXG5OZXh0LCBJIG5lZWQgdG8gbGlzdCBvdXQgdGhlIGtleSBzeW1ib2xzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfNGtgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBgc2V0X21lbW9yeV9lbmNyeXB0ZWRgLCBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgLlxuXG5BaCEgQW5kLCBsZXQncyBub3QgZm9yZ2V0IGFib3V0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AuIEl0J3MgdGhhdCBsaXR0bGUgZ2VtIHRoYXQgbWlnaHQgaGVscCB0cmlnZ2VyIHRoZSBwdGR1bXAgcmFjZS4gSSByZW1lbWJlciB0aGF0J3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBkZWJ1Z2ZzLiBXYWl0LCBpcyB0aGF0IGZ1bmN0aW9uIGV4cG9ydGVkPyBOb3BlLiBCdXQsIGl0IGlzIHJlYWNoYWJsZSB2aWEgZGVidWdmcywgc28gaXQncyBmYWlyIGdhbWUuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXNuJ3Qgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA4OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxOTowMi42NTAxOTM1NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODAyMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9OD1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjEwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZpbml0X21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTExLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTE2PXN0YXRpYyBpbnQgcHRkdW1wX2N1cmtubF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTk6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cXHUwMDNlbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MjY9c3RhdGljIGludCBwdGR1bXBfY3VydXNyX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI4LVxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyOTpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVxcdTAwM2VtbSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTMwLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTM3PXN0YXRpYyBpbnQgcHRkdW1wX2VmaV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cXHRpZiAoZWZpX21tLnBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NDA6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXFx1MDAyNmVmaV9tbSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ3ND12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTk6MDIuNzM3MDAwMTk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTMyODk2MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzbid0IGp1c3QgYSBtaW5vciB0d2VhazsgaXQncyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQgd2l0aGluIHRoZSB4ODYgcGFnZSBhdHRyaWJ1dGUgY29kZSwgc28gSSBuZWVkIHRvIHRob3JvdWdobHkgZXZhbHVhdGUgaXRzIGltcGxpY2F0aW9ucy4gV2hpbGUgdGhlIHRhcmdldCBmdW5jdGlvbiBpc24ndCBzdGF0aWMsIGl0J3Mgc3RpbGwgYWNjZXNzaWJsZSB0aHJvdWdoIGB2bWxpbnV4YCwgd2hpY2ggaXMgZ3JlYXQgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbk15IGltbWVkaWF0ZSBmb2N1cywgZ2l2ZW4gdGhlIGNoYW5nZXMsIGlzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2Agc2luY2UgdGhhdCdzIHdoYXQncyBhY3R1YWxseSBjYWxsZWQgZnJvbSBkZWJ1Z2ZzLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIHN5bWJvbHMuXG5cbkkndmUgY29uZmlybWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYENPTkZJR19ERUJVR19QQUdFQUxMT0NgLCBgQ09ORklHX0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAsIGFuZCBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiB0ZXN0IHRoZSBuZXcgbG9naWMgcHJvcGVybHkuXG5cbk5vdywgbGV0J3MgbG9vayBjbG9zZWx5IGF0IHRoZSBjb2RlIGl0c2VsZi4gSSBzZWUgYSBjb25kaXRpb25hbCBsb2NrIGNoYW5nZSB3aXRoIGBkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpYC4gVGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyBpbiB0ZXJtcyBvZiByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpZiB0aGF0IGdldHMgZW5hYmxlZC9kaXNhYmxlZC4gVGhlIHJlYWwgY29yZSBpcyB0aGUgbG9ja2luZyBhbmQgdW5sb2NraW5nIGFyb3VuZCBgaW5pdF9tbWAsIGFuZCB0aG9zZSBjaGFuZ2VzIGFyZSBpbXBvcnRhbnQuIFdlJ3JlIGludHJvZHVjaW5nIGBtbWFwX3dyaXRlX2xvY2tgIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBhZGRpbmcgYG1tYXBfcmVhZF9sb2NrYCBpbiBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYC4gQWxzbywgdGhlIG1hbmlwdWxhdGlvbiBvZiBsb2NrcyBhcm91bmQgYHB0ZV9hbGxvY19vbmVfa2VybmVsYCwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBsb2NraW5nIHN0cmF0ZWd5IHVzaW5nIGBtbWFwX3JlYWRfbG9ja2AgYW5kIGBtbWFwX3dyaXRlX2xvY2tgIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBpbnZvbHZpbmcgYHB0ZHVtcGAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCBhbmQgY29sbGFwc2VkLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiB0aGF0IGlzIHZlcnkgbGlrZWx5IHRvIGJlIGV4ZXJjaXNlZCwgYW5kIGFzIHN1Y2ggaXMgYSBrZXkgYXJlYSBmb3IgZnV6emluZy5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgY3JpdGljYWwgYW5kIGhpZ2hseSByZWFjaGFibGUuIFRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBsb2NraW5nIGFuZCBob3cgbGFyZ2UgcGFnZXMgYXJlIGhhbmRsZWQgcmVxdWlyZSBleHRlbnNpdmUgZnV6emluZyB0byBlbnN1cmUgd2UgZG9uJ3QgaW50cm9kdWNlIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuXG5cblNvLCBJJ20gZ29pbmcgdG8gYWRkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyB0byB0aGUgZm9jdXMgbGlzdDogYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X254YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5XzRrYCwgYHNldF9tZW1vcnlfbnBgLCBhbmQgYHNldF9tZW1vcnlfcGAuIEFuZCBvZiBjb3Vyc2UsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AuXG5cbkZpbmFsbHksIEkgd2lsbCBub3cgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ4NiwiT3V0cHV0VG9rZW5zIjoyNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTk6MTYuNjY5ODk4NjE1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1MTA5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX1BBR0VBTExPQ1wiLFxuICAgIFwiREVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUXCIsXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfbnhcIixcbiAgICBcInNldF9tZW1vcnlfeFwiLFxuICAgIFwic2V0X21lbW9yeV80a1wiLFxuICAgIFwic2V0X21lbW9yeV9ucFwiLFxuICAgIFwic2V0X21lbW9yeV9wXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHg4NiBwYWdlIGF0dHJpYnV0ZSBtYW5pcHVsYXRpb24gY29kZSAoQ1BBKS4gSXQgaW50cm9kdWNlcyBuZXcgbG9ja2luZyBzZW1hbnRpY3MgdXNpbmcgbW1hcF9yZWFkX2xvY2sgYW5kIG1tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdpdGggcHRkdW1wIGFuZCBjb25jdXJyZW50IENQQSB3YWxrZXJzLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGxvY2tpbmcgYmVoYXZpb3Igd2hlbiBkZWJ1Z19wYWdlYWxsb2MgaXMgZW5hYmxlZCBhbmQgbW9kaWZpZXMgaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCBhbmQgY29sbGFwc2VkLiBUaGVzZSBhcmUgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19QQUdFQUxMT0NcIixcbiAgICBcIkRFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFwiLFxuICAgIFwiUFREVU1QX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X254XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIixcbiAgICBcInNldF9tZW1vcnlfNGtcIixcbiAgICBcInNldF9tZW1vcnlfbnBcIixcbiAgICBcInNldF9tZW1vcnlfcFwiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB4ODYgcGFnZSBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uIGNvZGUgKENQQSkuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgc2VtYW50aWNzIHVzaW5nIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIHB0ZHVtcCBhbmQgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBsb2NraW5nIGJlaGF2aW9yIHdoZW4gZGVidWdfcGFnZWFsbG9jIGlzIGVuYWJsZWQgYW5kIG1vZGlmaWVzIGhvdyBsYXJnZSBwYWdlcyBhcmUgc3BsaXQgYW5kIGNvbGxhcHNlZC4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf49f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 15:13:37 +0000 UTC FinishedAt: 2026-07-29 15:19:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a5a162fe1ae130e3d2ceefef3f43afe3773c1d56", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_PAGEALLOC", "DEBUG_PAGEALLOC_ENABLE_DEFAULT", "PTDUMP_DEBUGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a5a162fe1ae130e3d2ceefef3f43afe3773c1d56", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_PAGEALLOC", "DEBUG_PAGEALLOC_ENABLE_DEFAULT", "PTDUMP_DEBUGFS" ], "series_id": "2bfc0803-688c-4f51-9f10-b8cc0b769543" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "set_memory_ro", "set_memory_rw", "set_memory_nx", "set_memory_x", "set_memory_4k", "set_memory_np", "set_memory_p", "ptdump_walk_pgd_level_debugfs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX1BBR0VBTExPQyYjMzQ7LAogICAgJiMzNDtERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFQmIzM0OywKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZXRfbWVtb3J5X3JvJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcncmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ueCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV80ayYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X25wJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcCYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB4ODYgcGFnZSBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uIGNvZGUgKENQQSkuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgc2VtYW50aWNzIHVzaW5nIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIHB0ZHVtcCBhbmQgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBsb2NraW5nIGJlaGF2aW9yIHdoZW4gZGVidWdfcGFnZWFsbG9jIGlzIGVuYWJsZWQgYW5kIG1vZGlmaWVzIGhvdyBsYXJnZSBwYWdlcyBhcmUgc3BsaXQgYW5kIGNvbGxhcHNlZC4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMjhiNzQ3OTQ0MmEwZTZlZWY0NTFkNWJmOGVkZDY2YjMzNWJlZWMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTU6MTg6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGIxZTc4MGE0NjViNTkuLjdkNjU2NTIwODg3Y2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcHJvY2Vzc29yLmhcdTAwM2VcbkBAIC00OSw3ICYjNDM7NTAsOCBAQCBzdHJ1Y3QgY3BhX2RhdGEge1xuIFx0dW5zaWduZWQgaW50XHRmbGFncztcbiBcdHVuc2lnbmVkIGludFx0Zm9yY2Vfc3BsaXRcdFx0OiAxLFxuIFx0XHRcdGZvcmNlX3N0YXRpY19wcm90XHQ6IDEsXG4tXHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMTtcbiYjNDM7XHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMSxcbiYjNDM7XHRcdFx0aW5pdF9tbV9yZWFkX2xvY2tlZFx0OiAxO1xuIFx0c3RydWN0IHBhZ2VcdCoqcGFnZXM7XG4gfTtcbiBcbkBAIC02NSw4ICYjNDM7NjcsMjUgQEAgc3RhdGljIGNvbnN0IGludCBjcGFfd2Fybl9sZXZlbCA9IENQQV9QUk9URUNUO1xuICAqIFNlcmlhbGl6ZSBjcGEoKSB1c2luZyBjcGFfbG9jayBzbyB0aGF0IHdlIGRvbiYjMzk7dCBhbGxvdyBhbnkgb3RoZXIgY3B1LCB3aXRoXG4gICogc3RhbGUgbGFyZ2UgdGxiIGVudHJpZXMsIHRvIGNoYW5nZSB0aGUgcGFnZSBhdHRyaWJ1dGUgaW4gcGFyYWxsZWwgdG8gc29tZVxuICAqIG90aGVyIGNwdSBzcGxpdHRpbmcgYSBsYXJnZSBwYWdlIGVudHJ5IGFsb25nIHdpdGggY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZS5cbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpLCBwYWdlIGF0dHJpYnV0ZXMgY291bGQgYmUgY2hhbmdlZCBpbiBhdG9taWNcbiYjNDM7ICogY29udGV4dCB0aGF0IHdvdWxkIHdhcnJhbnQgZGlzYWJsaW5nIElSUXMuIEJ1dCBzaW5jZSBkZWJ1Z19wYWdlYWxsb2MgYWx3YXlzXG4mIzQzOyAqIHVzZXMgNGsgcGFnZXMgaW4gdGhlIGRpcmVjdCBtYXAgdGhlcmUgYXJlIG5vIHJhY2VzIGZvciBzcGxpdHMgYW5kIGNvbGxhcHNlc1xuJiM0MzsgKiBhbmQgbG9ja2luZyBjYW4gYmUganVzdCBza2lwcGVkIGFsdG9nZXRoZXIuXG4gICovXG4tc3RhdGljIERFRklORV9TUElOTE9DSyhjcGFfbG9jayk7XG4mIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soX2NwYV9sb2NrKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjcGFfbG9jayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpKVxuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNl9jcGFfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjcGFfdW5sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCkpXG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZfY3BhX2xvY2spO1xuJiM0Mzt9XG4gXG4gI2RlZmluZSBDUEFfRkxVU0hUTEIgMVxuICNkZWZpbmUgQ1BBX0FSUkFZIDJcbkBAIC00MDksNyAmIzQzOzQyOCw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxuIFxuIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG4gXG4tc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuJiM0MztzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7XG4gXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XG5AQCAtNDE3LDggJiM0Mzs0MzYsNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXHRpbnQgY29sbGFwc2VkID0gMDtcbiBcdGludCBpO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cbiBcdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IChDUEFfUEFHRVNfQVJSQVkgfCBDUEFfQVJSQVkpKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNwYS1cdTAwM2VudW1wYWdlczsgaSYjNDM7JiM0MzspXG4gXHRcdFx0Y29sbGFwc2VkICYjNDM7PSBjb2xsYXBzZV9sYXJnZV9wYWdlcyhfX2NwYV9hZGRyKGNwYSwgaSksXG5AQCAtNDMyLDE5ICYjNDM7NDQ5LDM1IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcdFx0XHRjb2xsYXBzZWQgJiM0Mzs9IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKGFkZHIsIFx1MDAyNnBndGFibGVzKTtcbiBcdH1cbiBcbi1cdGlmICghY29sbGFwc2VkKSB7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbiYjNDM7XHRpZiAoIWNvbGxhcHNlZClcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0Zmx1c2hfdGxiX2FsbCgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT25seSBlYXJseSBhbGxvYyYjMzk7ZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxuJiM0MztcdFx0ICogaGVyZSBhbmQgdGhvc2Ugc2hvdWxkbiYjMzk7dCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseVxuJiM0MztcdFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpXG4mIzQzO1x0XHRcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbiBcdH1cbiYjNDM7fVxuIFxuLVx0c3Bpbl91bmxvY2soXHUwMDI2Y3BhX2xvY2spO1xuJiM0MztzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxuJiM0MztcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cbiYjNDM7XHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXG4mIzQzO1x0ICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXG5AQCAtNzM2LDcgJiM0Mzs3NjksNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNTEyRztcbiBcdCpueCB8PSBwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVztcbiYjNDM7XHQqcncgXHUwMDI2PSAhIShwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTtcbiBcdGlmIChwNGRfbm9uZSgqcDRkKSlcbkBAIC03NDcsNyAmIzQzOzc4MCw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF8xRztcbiBcdCpueCB8PSBwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9SVztcbiYjNDM7XHQqcncgXHUwMDI2PSAhIShwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyZXNzKTtcbiBcdGlmIChwdWRfbm9uZSgqcHVkKSlcbkBAIC03NTgsNyAmIzQzOzc5MSw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF8yTTtcbiBcdCpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVztcbiYjNDM7XHQqcncgXHUwMDI2PSAhIShwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTtcbiBcdGlmIChwbWRfbm9uZSgqcG1kKSlcbkBAIC03NjksNyAmIzQzOzgwMiw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF80SztcbiBcdCpueCB8PSBwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9SVztcbiYjNDM7XHQqcncgXHUwMDI2PSAhIShwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpO1xuIH1cbkBAIC0xMTI5LDExICYjNDM7MTE2MiwxMCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9zZXRfcHRlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcbiBzdGF0aWMgaW50XG4gX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICBzdHJ1Y3QgcHRkZXNjICpwdGRlc2MpXG4mIzQzO1x0XHQgICBwdGVfdCAqcGJhc2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBscGFkZHIsIGxwaW5jLCByZWZfcGZuLCBwZm4sIHBmbmluYyA9IDE7XG4tXHRzdHJ1Y3QgcGFnZSAqYmFzZSA9IHB0ZGVzY19wYWdlKHB0ZGVzYyk7XG4tXHRwdGVfdCAqcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpO1xuIFx0dW5zaWduZWQgaW50IGksIGxldmVsO1xuIFx0cGdwcm90X3QgcmVmX3Byb3Q7XG4gXHRib29sIG54LCBydztcbkBAIC0xMjM3LDE2ICYjNDM7MTI2OSwyMSBAQCBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gc3RhdGljIGludCBzcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcbiYjNDM7XHRwdGVfdCAqcHRlO1xuJiM0MztcbiYjNDM7XHRjcGFfdW5sb2NrKCk7XG4mIzQzO1x0aWYgKGNwYS1cdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxuJiM0MztcdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbiYjNDM7XHRwdGUgPSBwdGVfYWxsb2Nfb25lX2tlcm5lbChcdTAwMjZpbml0X21tKTtcbiYjNDM7XHRpZiAoY3BhLVx1MDAzZWluaXRfbW1fcmVhZF9sb2NrZWQpXG4mIzQzO1x0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbiYjNDM7XHRjcGFfbG9jaygpO1xuIFxuLVx0c3Bpbl91bmxvY2soXHUwMDI2Y3BhX2xvY2spO1xuLVx0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwsIDApO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdGlmICghcHRkZXNjKVxuJiM0MztcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGRlc2MpKVxuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuJiM0MztcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKVxuJiM0MztcdFx0cHRlX2ZyZWVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHB0ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjAyNSw5ICYjNDM7MjA2Miw5IEBAIHN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxuIFx0XHRpZiAoY3BhLVx1MDAzZWZsYWdzIFx1MDAyNiAoQ1BBX0FSUkFZIHwgQ1BBX1BBR0VTX0FSUkFZKSlcbiBcdFx0XHRjcGEtXHUwMDNlbnVtcGFnZXMgPSAxO1xuIFxuLVx0XHRzcGluX2xvY2soXHUwMDI2Y3BhX2xvY2spO1xuJiM0MztcdFx0Y3BhX2xvY2soKTtcbiBcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyKGNwYSwgcHJpbWFyeSk7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbiYjNDM7XHRcdGNwYV91bmxvY2soKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbiBcbkBAIC0yMTA5LDcgJiM0MzsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbiBcdGNwYS5jdXJwYWdlID0gMDtcbiBcdGNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0O1xuIFxuLVx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbiYjNDM7XHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXG4mIzQzO1x0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSB0cnVlO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbiYjNDM7XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4mIzQzO1x0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB3aGV0aGVyIHdlIHJlYWxseSBjaGFuZ2VkIHNvbWV0aGluZzpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggMDRiOGY2MWVjZTVkOC4uZjRjZWI5NjhhZWIzZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiAmIzQzOzYyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuIFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxuJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4mIzQzO1x0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfUEFHRUFMTE9DJiMzNDssCiAgICAmIzM0O0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVCYjMzQ7LAogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ydyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5XzRrJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfbnAmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9wJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHg4NiBwYWdlIGF0dHJpYnV0ZSBtYW5pcHVsYXRpb24gY29kZSAoQ1BBKS4gSXQgaW50cm9kdWNlcyBuZXcgbG9ja2luZyBzZW1hbnRpY3MgdXNpbmcgbW1hcF9yZWFkX2xvY2sgYW5kIG1tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdpdGggcHRkdW1wIGFuZCBjb25jdXJyZW50IENQQSB3YWxrZXJzLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGxvY2tpbmcgYmVoYXZpb3Igd2hlbiBkZWJ1Z19wYWdlYWxsb2MgaXMgZW5hYmxlZCBhbmQgbW9kaWZpZXMgaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCBhbmQgY29sbGFwc2VkLiBUaGVzZSBhcmUgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyOGI3NDc5NDQyYTBlNmVlZjQ1MWQ1YmY4ZWRkNjZiMzM1YmVlYzEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxNToxODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGIxZTc4MGE0NjViNTkuLjdkNjU2NTIwODg3Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9jY19wbGF0Zm9ybS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NldF9tZW1vcnkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1yZWdpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL2U4MjAvYXBpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3Byb2Nlc3Nvci5oJmd0OwpAQCAtNDksNyAmIzQzOzUwLDggQEAgc3RydWN0IGNwYV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQJZmxhZ3M7CiAJdW5zaWduZWQgaW50CWZvcmNlX3NwbGl0CQk6IDEsCiAJCQlmb3JjZV9zdGF0aWNfcHJvdAk6IDEsCi0JCQlmb3JjZV9mbHVzaF9hbGwJCTogMTsKJiM0MzsJCQlmb3JjZV9mbHVzaF9hbGwJCTogMSwKJiM0MzsJCQlpbml0X21tX3JlYWRfbG9ja2VkCTogMTsKIAlzdHJ1Y3QgcGFnZQkqKnBhZ2VzOwogfTsKIApAQCAtNjUsOCAmIzQzOzY3LDI1IEBAIHN0YXRpYyBjb25zdCBpbnQgY3BhX3dhcm5fbGV2ZWwgPSBDUEFfUFJPVEVDVDsKICAqIFNlcmlhbGl6ZSBjcGEoKSB1c2luZyBjcGFfbG9jayBzbyB0aGF0IHdlIGRvbiYjMzk7dCBhbGxvdyBhbnkgb3RoZXIgY3B1LCB3aXRoCiAgKiBzdGFsZSBsYXJnZSB0bGIgZW50cmllcywgdG8gY2hhbmdlIHRoZSBwYWdlIGF0dHJpYnV0ZSBpbiBwYXJhbGxlbCB0byBzb21lCiAgKiBvdGhlciBjcHUgc3BsaXR0aW5nIGEgbGFyZ2UgcGFnZSBlbnRyeSBhbG9uZyB3aXRoIGNoYW5naW5nIHRoZSBhdHRyaWJ1dGUuCiYjNDM7ICoKJiM0MzsgKiBXaGVuIGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCksIHBhZ2UgYXR0cmlidXRlcyBjb3VsZCBiZSBjaGFuZ2VkIGluIGF0b21pYwomIzQzOyAqIGNvbnRleHQgdGhhdCB3b3VsZCB3YXJyYW50IGRpc2FibGluZyBJUlFzLiBCdXQgc2luY2UgZGVidWdfcGFnZWFsbG9jIGFsd2F5cwomIzQzOyAqIHVzZXMgNGsgcGFnZXMgaW4gdGhlIGRpcmVjdCBtYXAgdGhlcmUgYXJlIG5vIHJhY2VzIGZvciBzcGxpdHMgYW5kIGNvbGxhcHNlcwomIzQzOyAqIGFuZCBsb2NraW5nIGNhbiBiZSBqdXN0IHNraXBwZWQgYWx0b2dldGhlci4KICAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhjcGFfbG9jayk7CiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhfY3BhX2xvY2spOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjcGFfbG9jayh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKCFkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpKQomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7X2NwYV9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGNwYV91bmxvY2sodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKSkKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7X2NwYV9sb2NrKTsKJiM0Mzt9CiAKICNkZWZpbmUgQ1BBX0ZMVVNIVExCIDEKICNkZWZpbmUgQ1BBX0FSUkFZIDIKQEAgLTQwOSw3ICYjNDM7NDI4LDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpCiAKIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7CiAKLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKJiM0MztzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7CiAJc3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wOwpAQCAtNDE3LDggJiM0Mzs0MzYsNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiAJaW50IGNvbGxhcHNlZCA9IDA7CiAJaW50IGk7CiAKLQlzcGluX2xvY2soJmFtcDtjcGFfbG9jayk7Ci0KIAlpZiAoY3BhLSZndDtmbGFncyAmYW1wOyAoQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKSkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgY3BhLSZndDtudW1wYWdlczsgaSYjNDM7JiM0MzspCiAJCQljb2xsYXBzZWQgJiM0Mzs9IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKF9fY3BhX2FkZHIoY3BhLCBpKSwKQEAgLTQzMiwxOSAmIzQzOzQ0OSwzNSBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiAJCQljb2xsYXBzZWQgJiM0Mzs9IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKGFkZHIsICZhbXA7cGd0YWJsZXMpOwogCX0KIAotCWlmICghY29sbGFwc2VkKSB7Ci0JCXNwaW5fdW5sb2NrKCZhbXA7Y3BhX2xvY2spOwomIzQzOwlpZiAoIWNvbGxhcHNlZCkKIAkJcmV0dXJuOwotCX0KIAogCWZsdXNoX3RsYl9hbGwoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgJmFtcDtwZ3RhYmxlcywgcHRfbGlzdCkgewogCQlsaXN0X2RlbCgmYW1wO3B0ZGVzYy0mZ3Q7cHRfbGlzdCk7Ci0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CQkvKgomIzQzOwkJICogT25seSBlYXJseSBhbGxvYyYjMzk7ZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZQomIzQzOwkJICogaGVyZSBhbmQgdGhvc2Ugc2hvdWxkbiYjMzk7dCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseQomIzQzOwkJICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLgomIzQzOwkJICovCiYjNDM7CQlpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpCiYjNDM7CQkJcGFnZXRhYmxlX2R0b3JfZnJlZShwdGRlc2MpOwomIzQzOwkJZWxzZQomIzQzOwkJCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiAJfQomIzQzO30KIAotCXNwaW5fdW5sb2NrKCZhbXA7Y3BhX2xvY2spOwomIzQzO3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOgomIzQzOwkgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duCiYjNDM7CSAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS4KJiM0MzsJICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4KJiM0MzsJICovCiYjNDM7CXNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssICZhbXA7aW5pdF9tbSkKJiM0MzsJCV9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKQpAQCAtNzM2LDcgJiM0Mzs3NjksNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCiAJKmxldmVsID0gUEdfTEVWRUxfNTEyRzsKIAkqbnggfD0gcGdkX2ZsYWdzKCpwZ2QpICZhbXA7IF9QQUdFX05YOwotCSpydyAmYW1wOz0gcGdkX2ZsYWdzKCpwZ2QpICZhbXA7IF9QQUdFX1JXOwomIzQzOwkqcncgJmFtcDs9ICEhKHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVyk7CiAKIAlwNGQgPSBwNGRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CiAJaWYgKHA0ZF9ub25lKCpwNGQpKQpAQCAtNzQ3LDcgJiM0Mzs3ODAsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCiAJKmxldmVsID0gUEdfTEVWRUxfMUc7CiAJKm54IHw9IHA0ZF9mbGFncygqcDRkKSAmYW1wOyBfUEFHRV9OWDsKLQkqcncgJmFtcDs9IHA0ZF9mbGFncygqcDRkKSAmYW1wOyBfUEFHRV9SVzsKJiM0MzsJKnJ3ICZhbXA7PSAhIShwNGRfZmxhZ3MoKnA0ZCkgJmFtcDsgX1BBR0VfUlcpOwogCiAJcHVkID0gcHVkX29mZnNldChwNGQsIGFkZHJlc3MpOwogCWlmIChwdWRfbm9uZSgqcHVkKSkKQEAgLTc1OCw3ICYjNDM7NzkxLDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAogCSpsZXZlbCA9IFBHX0xFVkVMXzJNOwogCSpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgJmFtcDsgX1BBR0VfTlg7Ci0JKnJ3ICZhbXA7PSBwdWRfZmxhZ3MoKnB1ZCkgJmFtcDsgX1BBR0VfUlc7CiYjNDM7CSpydyAmYW1wOz0gISEocHVkX2ZsYWdzKCpwdWQpICZhbXA7IF9QQUdFX1JXKTsKIAogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlpZiAocG1kX25vbmUoKnBtZCkpCkBAIC03NjksNyAmIzQzOzgwMiw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAkqbGV2ZWwgPSBQR19MRVZFTF80SzsKIAkqbnggfD0gcG1kX2ZsYWdzKCpwbWQpICZhbXA7IF9QQUdFX05YOwotCSpydyAmYW1wOz0gcG1kX2ZsYWdzKCpwbWQpICZhbXA7IF9QQUdFX1JXOwomIzQzOwkqcncgJmFtcDs9ICEhKHBtZF9mbGFncygqcG1kKSAmYW1wOyBfUEFHRV9SVyk7CiAKIAlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKIH0KQEAgLTExMjksMTEgJiM0MzsxMTYyLDEwIEBAIHN0YXRpYyB2b2lkIHNwbGl0X3NldF9wdGUoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgcGZuLAogCiBzdGF0aWMgaW50CiBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCSAgIHN0cnVjdCBwdGRlc2MgKnB0ZGVzYykKJiM0MzsJCSAgIHB0ZV90ICpwYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIGxwYWRkciwgbHBpbmMsIHJlZl9wZm4sIHBmbiwgcGZuaW5jID0gMTsKLQlzdHJ1Y3QgcGFnZSAqYmFzZSA9IHB0ZGVzY19wYWdlKHB0ZGVzYyk7Ci0JcHRlX3QgKnBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpOwomIzQzOwlzdHJ1Y3QgcGFnZSAqYmFzZSA9IHZpcnRfdG9fcGFnZShwYmFzZSk7CiAJdW5zaWduZWQgaW50IGksIGxldmVsOwogCXBncHJvdF90IHJlZl9wcm90OwogCWJvb2wgbngsIHJ3OwpAQCAtMTIzNywxNiAmIzQzOzEyNjksMjEgQEAgX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogc3RhdGljIGludCBzcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0Jc3RydWN0IHB0ZGVzYyAqcHRkZXNjOwomIzQzOwlwdGVfdCAqcHRlOwomIzQzOwomIzQzOwljcGFfdW5sb2NrKCk7CiYjNDM7CWlmIChjcGEtJmd0O2luaXRfbW1fcmVhZF9sb2NrZWQpCiYjNDM7CQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7CiYjNDM7CXB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKCZhbXA7aW5pdF9tbSk7CiYjNDM7CWlmIChjcGEtJmd0O2luaXRfbW1fcmVhZF9sb2NrZWQpCiYjNDM7CQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwomIzQzOwljcGFfbG9jaygpOwogCi0Jc3Bpbl91bmxvY2soJmFtcDtjcGFfbG9jayk7Ci0JcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwsIDApOwotCXNwaW5fbG9jaygmYW1wO2NwYV9sb2NrKTsKLQlpZiAoIXB0ZGVzYykKJiM0MzsJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZGVzYykpCi0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CWlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKQomIzQzOwkJcHRlX2ZyZWVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcHRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjAyNSw5ICYjNDM7MjA2Miw5IEBAIHN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KQogCQlpZiAoY3BhLSZndDtmbGFncyAmYW1wOyAoQ1BBX0FSUkFZIHwgQ1BBX1BBR0VTX0FSUkFZKSkKIAkJCWNwYS0mZ3Q7bnVtcGFnZXMgPSAxOwogCi0JCXNwaW5fbG9jaygmYW1wO2NwYV9sb2NrKTsKJiM0MzsJCWNwYV9sb2NrKCk7CiAJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cihjcGEsIHByaW1hcnkpOwotCQlzcGluX3VubG9jaygmYW1wO2NwYV9sb2NrKTsKJiM0MzsJCWNwYV91bmxvY2soKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCkBAIC0yMTA5LDcgJiM0MzsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcywKIAljcGEuY3VycGFnZSA9IDA7CiAJY3BhLmZvcmNlX3NwbGl0ID0gZm9yY2Vfc3BsaXQ7CiAKLQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7CS8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi8KJiM0MzsJY3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSB0cnVlOwomIzQzOwlzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssICZhbXA7aW5pdF9tbSkKJiM0MzsJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbXA7Y3BhLCAxKTsKJiM0MzsJY3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTsKIAogCS8qCiAJICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAppbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosCiYjNDM7CSAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NzcKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1NjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gWDg2IE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBnb2luZyB0byBiZSBoaWdoLWltcGFjdCwgcG90ZW50aWFsbHkgdG91Y2hpbmcgZnJlcXVlbnRseSB1c2VkIHBhdGhzLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBob3cgd2UgaGFuZGxlIHBhZ2UgYXR0cmlidXRlIGNoYW5nZXMg4oCTIHRoaW5ncyBsaWtlIHJlYWQtb25seSwgcmVhZC13cml0ZSwgbm8tZXhlY3V0ZSwgZXhlY3V0ZSwgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbWVtb3J5IHByb3RlY3Rpb24gYW5kIGFjY2VzcyBjb250cm9sIG9uIHg4Ni4KClRoZSBtYWluIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIGludHJvZHVjaW5nIGFuIGBtbWFwX3dyaXRlX2xvY2tgIGd1YXJkIGluIGBtbWFwX2xvY2suaGAuIEkgc2VlIGNoYW5nZXMgdG8gdGhlIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIGBjcGFfbG9ja2AgZGVwZW5kaW5nIG9uIGBkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpYC4gVGhhdCBzZWVtcyBhIHJlYXNvbmFibGUgcHJlY2F1dGlvbiBmb3IgZGVidWdnaW5nIGJ1aWxkcywgYW5kIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGRpc2FibGluZyB0aGUgbG9jayB1bmRlciB0aG9zZSBjaXJjdW1zdGFuY2VzLiBUaGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgZnVuY3Rpb24gaXMgYmVpbmcgdXBkYXRlZCB0byBhY3F1aXJlIGBtbWFwX3dyaXRlX2xvY2tgIG9uIGBpbml0X21tYCwgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIHRha2luZyBgbW1hcF9yZWFkX2xvY2tgIG9uIGBpbml0X21tYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGxvY2tpbmcgaGllcmFyY2h5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlc2UgbG9jayBjaGFuZ2VzIGFyZSBuZWNlc3NhcnkgYW5kIHdoYXQgc2NlbmFyaW9zIHRoZXkgYXJlIGRlc2lnbmVkIHRvIHByb3RlY3QgYWdhaW5zdC4gVGhlcmUgaXMgYWxzbyBhIGNoYW5nZSB0byBob3cgbGFyZ2UgcGFnZXMgYXJlIHNwbGl0LCB1c2luZyBgcHRlX2FsbG9jX29uZV9rZXJuZWxgIGFuZCBgcHRlX2ZyZWVfa2VybmVsYCBpbnN0ZWFkIG9mIHRoZSBvbGRlciBgcGFnZXRhYmxlX2FsbG9jYCBhbmQgYHBhZ2V0YWJsZV9mcmVlYC4gSSBrbm93IHRob3NlIGZ1bmN0aW9ucywgc28gdGhpcyBpcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgZm9yIGxhcmdlIHBhZ2UgbWFuYWdlbWVudC4gRmluYWxseSwgSSBzZWUgYSBmaXggdG8gYSBiaXRtYXNraW5nIG9wZXJhdGlvbiBpbiBgbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHJgIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGNsb3NlbHkuCgpOb3cgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYXJlYXMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgaW5saW5lZCBgY3BhX2xvY2tgIGFuZCBgY3BhX3VubG9ja2AsIGFuZCB0aGUgd3JhcHBlciBmb3IgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AuIEFsc28gb24gbXkgbGlzdCBhcmUgYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYCwgYF9fc3BsaXRfbGFyZ2VfcGFnZWAgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gV2hpbGUgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGFyZSBzdGF0aWMsIEkgbmVlZCB0byB0cmFjZSB0aGVtIGJhY2sgdG8gdGhlaXIgcHVibGljIEFQSXMgdG8gc2VlIGlmIHRoZWlyIGZ1bmN0aW9ucyBjaGFuZ2VkLiBUaGUgcHVibGljIEFQSXMgSSBhbSBpbnRlcmVzdGVkIGluIGFyZSB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgKGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgKS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc2VhcmNoIGZvciBjYWxscyB0byBgc2V0X21lbW9yeV9yb2AgYW5kIGBzZXRfbWVtb3J5X3J3YCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkgc2V0X21lbW9yeV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIwOD1pbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIwLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjIxOmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNDY9aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI2MjppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2My17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjg1PWludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyOTI6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM0Mz1FWFBPUlRfU1lNQk9MX0dQTChjbGVhcl9tY2Vfbm9zcGVjKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDY6aW50IHNldF9tZW1vcnlfeCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0Ny17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzUzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzU0OmludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzU1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjI6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NzppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjgte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3ODppbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgzOmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg0LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODctXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODg6aW50IHNldF9tZW1vcnlfbnBfbm9hbGlhcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzk1OmludCBzZXRfbWVtb3J5X3AodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5OS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwMDppbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwMS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwOC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDEzOmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxNC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTA5PXN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyNTppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUyOT1FWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MzE6aW50IHNldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTMyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njg4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IG9uIE1lbW9yeSBBdHRyaWJ1dGUgQ29udHJvbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgbWVtb3J5IGF0dHJpYnV0ZSBtYW5hZ2VtZW50IOKAkyBpdCYjMzk7cyB0b3VjaGluZyBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsOyBpdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgd2UgYWN0dWFsbHkgKnNldCogYW5kICpjbGVhciogYXR0cmlidXRlcy4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gYmUgbW9kaWZ5aW5nLCBpZiB0aGlzIHBhdGNoIHJlYWxseSBuZWVkcyB0byBiZSBtYWRlLgoKQW5kLCBpdCYjMzk7cyBub3QganVzdCB0aGF0IGNvcmUgZnVuY3Rpb24sIGJ1dCBhbHNvIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgc3BsaXRfbGFyZ2VfcGFnZWAuIFRoZXNlIGJvdGggZGlyZWN0bHkgaW50ZXJmYWNlIHdpdGggYXR0cmlidXRlIGNoYW5nZXMuIEl0JiMzOTtzIGFsbCBjb25uZWN0ZWQuCgpOb3csIGJlY2F1c2UgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgYSBgc3RhdGljYCBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGZpbGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqZXhwb3J0ZWQqIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgbGV2ZXJhZ2UgaXQuIExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGxpc3QgdGhlbSBvZmYuLi4gVGhhdCB3aWxsIGluY2x1ZGUgdGhlIG1ham9yIG9uZXM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3diYCwgYHNldF9tZW1vcnlfd2NgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBhbmQgYHNldF9tZW1vcnlfNGtgLiBUaG9zZSBhcmUgYWxsIGdvaW5nIHRvIGJlIGFmZmVjdGVkIGJ5IHRoaXMuIFRoYXQmIzM5O3MgYSBicm9hZCByYW5nZSB0byBjb25zaWRlci4KCldhaXQsIGp1c3QgYSBzZWNvbmQuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhpcy4uLiBJcyBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBhY3R1YWxseSBzdGF0aWMsIG9yIGhhcyBpdCBiZWVuIGV4cG9ydGVkIHNvbWVob3c/IExldCBtZSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgaXMgYWZmZWN0aW5nIHVzLCBhbmQgd2hhdCB0aGUgc2NvcGUgb2YgdGhpcyBpcywgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTg4Nz1zdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTY0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTY1OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk2Ni1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5NzA9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMDE6XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFsaWFzX2NwYSwgMCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDItXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDM0LVx0XHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjAzNTpcdFx0X19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWxpYXNfY3BhLCAwKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAzNi1cdH1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNDEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwNDI6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNDMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA5Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjA5MzpzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwOTQtXHRcdFx0XHQgICAgcGdwcm90X3QgbWFza19zZXQsIHBncHJvdF90IG1hc2tfY2xyLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1MS1cdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE1MjpcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1My1cdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTgwPXN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0KHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxODIte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTgzOlx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgbWFzaywgX19wZ3Byb3QoMCksIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxODQtXHRcdChhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxODc9c3RhdGljIGlubGluZSBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9jbGVhcih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTg5LXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE5MDpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoYWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTkxLVx0XHQoYXJyYXkgPyBDUEFfQVJSQVkgOiAwKSwgTlVMTCk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTk0PXN0YXRpYyBpbmxpbmUgaW50IGNwYV9zZXRfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5Ni17XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxOTc6XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKE5VTEwsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5OC1cdFx0Q1BBX1BBR0VTX0FSUkFZLCBwYWdlcyk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjAxPXN0YXRpYyBpbmxpbmUgaW50IGNwYV9jbGVhcl9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjAzLXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIwNDpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA1LVx0XHRDUEFfUEFHRVNfQVJSQVksIHBhZ2VzKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNDY9aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI1My1cdGlmICghcmV0KSB7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNTQ6XHRcdHJldCA9IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZhZGRyLCBudW1wYWdlcyxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI1NS1cdFx0XHRcdFx0ICAgICAgIGNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9XQyksXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzY3PWludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzMtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNzQ6XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc1LVx0XHRcdFx0XHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM4OD1pbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg5LXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM5MDpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzkxLVx0XHRcdFx0XHRfX3BncHJvdChfUEFHRV9QUkVTRU5UKSwgMCxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI0MDA9aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDEte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDAyOlx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZhZGRyLCBudW1wYWdlcyxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwMy1cdFx0XHRcdFx0X19wZ3Byb3QoX1BBR0VfS0VSTkVMXzRLKSxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI0MjM9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ1Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQ1MzpcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0NTQtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTQ1PXN0YXRpYyBpbnQgX3NldF9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTcwLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IG5ld190eXBlID09IF9QQUdFX0NBQ0hFX01PREVfV0MpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1NzE6XHRcdHJldCA9IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcyxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU3Mi1cdFx0XHRcdFx0ICAgICAgIGNhY2hlbW9kZTJwZ3Byb3QoXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjUwPXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfcChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY2NS1cdCAqL1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjY2Olx0cmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjctfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjY2OT1zdGF0aWMgaW50IF9fc2V0X3BhZ2VzX25wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjg0LVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2ODU6XHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY4Ni19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNzUyPWludCBfX2luaXQga2VybmVsX21hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdTY0IHBmbiwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc3Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mjc3NzpcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3NzgtXHRfX2ZsdXNoX3RsYl9hbGwoKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3ODk9aW50IF9faW5pdCBrZXJuZWxfdW5tYXBfcGFnZXNfaW5fcGdkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4MTEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI4MTI6XHRyZXR2YWwgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yODEzLVx0X19mbHVzaF90bGJfYWxsKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5OTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlc2UgYHNldF9tZW1vcnlfKmAgZnVuY3Rpb25zIGFyZSBhbGwgZXhwb3J0ZWQgZnJvbSB0aGUga2VybmVsLiBUaGF0IHNjcmVhbXMgJiMzNDtmdXp6IG1lJiMzNDsgdG8gbWUuIEFueSBleHBvcnRlZCBmdW5jdGlvbiBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLCBhbmQgdGhlc2Ugc2VlbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3Rpbmcgd2l0aCBhbGwgdGhlaXIgYXR0cmlidXRlcy4gSSYjMzk7bSB0aGlua2luZyBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCwgYW5kIGBzZXRfbWVtb3J5XzRrYCBhcyBzdGFydGluZyB0YXJnZXRzLiBJJiMzOTttIGFsc28gc2VlaW5nIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgc3BsaXRfbGFyZ2VfcGFnZWAuIFRob3NlIGFyZSBpbnRlcm5hbCBidXQgYXJlIGNhbGxlZCBkdXJpbmcgcGFnZSBhdHRyaWJ1dGUgY2hhbmdlcywgc28gdGhleSBtaWdodCBiZSBpbnRlcmVzdGluZyBkb3duIHRoZSBsaW5lLCBidXQgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBleHBvcnRlZCBvbmVzIGZvciBub3cuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGF5IGhlcmU/IEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gUmlnaHQsIGl0JiMzOTtzIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gU28gdGhpcyBpcyB4ODYgc3BlY2lmaWMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBmb3IgYHg4Ni9tbWAuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIG1ha2VmaWxlcyBmb3IgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYGFyY2gveDg2L21tL3BhdC9NYWtlZmlsZWAgb3IgYGFyY2gveDg2L21tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub1xuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBxdWljayBhc3Nlc3NtZW50IG9mIHRoaXMgY2hhbmdlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoaXMgZGVlcGx5OgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFdvcnRoIGEgRGVlcCBEaXZlKioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgeDg2IGNvbXBpbGF0aW9uLiBObyBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHRoZSBjb3JlIHBhZ2UgYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGludHJpY2F0ZSBkYW5jZSBvZiBsYXJnZSBwYWdlIHNwbGl0dGluZywgY29sbGFwc2luZywgYW5kIHRoZSBjcml0aWNhbCBsb2NraW5nIGFyb3VuZCBgaW5pdF9tbWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIG15IGV5ZWJyb3dzIOKAkyBhbnkgY29kZSB0b3VjaGluZyBsYXJnZSBwYWdlcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O2QgYWRkIHRoaXMgdG8gdGhlIGxpc3Qgb2YgYXJlYXMgZm9yIGhlYXZ5IGZ1enppbmcgaW1tZWRpYXRlbHkuCgpJJiMzOTttIGFsc28gc2VlaW5nIGEgY2FsbCB0byBgZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKWAsIHdoaWNoIG1lYW5zIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBtaWdodCBiZSBpbiBwbGF5IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhhdCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUgY2hhbmdlcywgYW5kIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHN1cmZhY2UgYXJlYSB0aGF0IGlzIHN1c2NlcHRpYmxlIHRvIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19QQUdFQUxMT0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0yPWNvbmZpZyBQQUdFX0VYVEVOU0lPTlxuLS1cbm1tL0tjb25maWcuZGVidWctMTAtXG5tbS9LY29uZmlnLmRlYnVnOjExOmNvbmZpZyBERUJVR19QQUdFQUxMT0Ncbm1tL0tjb25maWcuZGVidWctMTItXHRib29sIFwmIzM0O0RlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy00MC1cbm1tL0tjb25maWcuZGVidWc6NDE6Y29uZmlnIERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFxubW0vS2NvbmZpZy5kZWJ1Zy00Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIGJ5IGRlZmF1bHQ/XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIERlYnVnIFBhZ2UgQWxsb2NhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB0aGF0IGVuYWJsaW5nIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIGluaXRpYWxseS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBpbnRyb2R1Y2VzIGEgYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgIGNoZWNrIHRvIGF2b2lkIGxvY2tpbmcsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKV2FpdCBhIHNlY29uZCwgbGV0IG1lIGNsYXJpZnkgdGhhdCBsb2dpYyBpbiBteSBtaW5kLiBJZiBgZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKWAgKmlzKiB0cnVlLCB3ZSBza2lwIHRoZSBsb2NrOyBpZiBpdCYjMzk7cyAqZmFsc2UqLCB3ZSB0YWtlIHRoZSBsb2NrLiBUbyBnZXQgY29tcHJlaGVuc2l2ZSB0ZXN0IGNvdmVyYWdlLCB3ZSByZWFsbHkgbmVlZCB0byBldmFsdWF0ZSBib3RoIHNjZW5hcmlvcy4gQW5kIGBERUJVR19QQUdFQUxMT0NgIGlzIHByb2JhYmx5IGdvb2QgdG8gaGF2ZS4KCkFoLCBidXQgYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgIGlzIGEgcnVudGltZSBjb25kaXRpb24sIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgZW5hYmxlZCB0aHJvdWdoIHRoZSBgZGVidWdfcGFnZWFsbG9jPW9uYCBrZXJuZWwgY29tbWFuZC1saW5lIG9wdGlvbiBvciwgY3J1Y2lhbGx5LCBgQ09ORklHX0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAuIFNvLCBmb3IgbWF4aW11bSBjb250cm9sIG92ZXIgdGhlIHRlc3RpbmcgSSYjMzk7bSBnb2luZyB0byBkbywgaW5jbHVkaW5nIGJvdGggYENPTkZJR19ERUJVR19QQUdFQUxMT0NgIGFuZCBgQ09ORklHX0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIHByb2JhYmx5IHRoZSBiZXN0IGFwcHJvYWNoLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYWRkcmVzcyB3aXRoIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ1xubW0vS2NvbmZpZy5kZWJ1Zy0xMi1cdGJvb2wgXCYjMzQ7RGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnNcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MTM6XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxubW0vS2NvbmZpZy5kZWJ1ZzoxNDpcdGRlcGVuZHMgb24gIUhJQkVSTkFUSU9OIHx8IEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DIFx1MDAyNlx1MDAyNiAhUFBDIFx1MDAyNlx1MDAyNiAhU1BBUkNcbm1tL0tjb25maWcuZGVidWctMTUtXHRzZWxlY3QgUEFHRV9QT0lTT05JTkcgaWYgIUFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz00MT1jb25maWcgREVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUXG5tbS9LY29uZmlnLmRlYnVnLTQyLVx0Ym9vbCBcJiMzNDtFbmFibGUgZGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnMgYnkgZGVmYXVsdD9cJiMzNDtcbm1tL0tjb25maWcuZGVidWc6NDM6XHRkZXBlbmRzIG9uIERFQlVHX1BBR0VBTExPQ1xubW0vS2NvbmZpZy5kZWJ1Zy00NC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTQ4PWNvbmZpZyBTTFVCX0RFQlVHXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy01MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIFNMVUIgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG5tbS9LY29uZmlnLmRlYnVnOjUxOlx0ZGVwZW5kcyBvbiBTWVNGUyBcdTAwMjZcdTAwMjYgIVNMVUJfVElOWVxubW0vS2NvbmZpZy5kZWJ1Zy01Mi1cdHNlbGVjdCBTVEFDS0RFUE9UIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbm1tL0tjb25maWcuZGVidWc9NTk9Y29uZmlnIFNMVUJfREVCVUdfT05cbm1tL0tjb25maWcuZGVidWctNjAtXHRib29sIFwmIzM0O1NMVUIgZGVidWdnaW5nIG9uIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6NjE6XHRkZXBlbmRzIG9uIFNMVUJfREVCVUdcbm1tL0tjb25maWcuZGVidWctNjItXHRzZWxlY3QgU1RBQ0tERVBPVF9BTFdBWVNfSU5JVCBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIFVBRiBkZXRlY3Rpb24gaW4gVFlQRVNBRkVfQllfUkNVIGNhY2hlcyAoZm9yIEtBU0FOKVwmIzM0O1xubW0vS2NvbmZpZy5kZWJ1Zzo3NTpcdGRlcGVuZHMgb24gU0xVQl9ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy03Ni1cdCMgU0xVQl9SQ1VfREVCVUcgc2hvdWxkIGJ1aWxkIGZpbmUgd2l0aG91dCBLQVNBTiwgYnV0IGlzIGN1cnJlbnRseSB1c2VsZXNzXG5tbS9LY29uZmlnLmRlYnVnLTc3LVx0IyB3aXRob3V0IEtBU0FOLCBzbyBtYXJrIGl0IGFzIGEgZGVwZW5kZW5jeSBvZiBLQVNBTiBmb3Igbm93LlxubW0vS2NvbmZpZy5kZWJ1Zzo3ODpcdGRlcGVuZHMgb24gS0FTQU5cbm1tL0tjb25maWcuZGVidWctNzktXHRkZWZhdWx0IEtBU0FOX0dFTkVSSUMgfHwgS0FTQU5fU1dfVEFHU1xuLS1cbm1tL0tjb25maWcuZGVidWc9MTA1PWNvbmZpZyBQQUdFX09XTkVSXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cdGJvb2wgXCYjMzQ7VHJhY2sgcGFnZSBvd25lclwmIzM0O1xubW0vS2NvbmZpZy5kZWJ1ZzoxMDc6XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUXG5tbS9LY29uZmlnLmRlYnVnLTEwOC1cdHNlbGVjdCBERUJVR19GU1xuLS1cbm1tL0tjb25maWcuZGVidWc9MTIyPWNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXG5tbS9LY29uZmlnLmRlYnVnLTEyMy1cdGJvb2wgXCYjMzQ7Q2hlY2sgZm9yIGludmFsaWQgbWFwcGluZ3MgaW4gdXNlciBwYWdlIHRhYmxlc1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1ZzoxMjQ6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1xubW0vS2NvbmZpZy5kZWJ1ZzoxMjU6XHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG5tbS9LY29uZmlnLmRlYnVnLTEyNi1cdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuLS1cbm1tL0tjb25maWcuZGVidWc9MTM2PWNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLX0VORk9SQ0VEXG5tbS9LY29uZmlnLmRlYnVnLTEzNy1cdGJvb2wgXCYjMzQ7RW5mb3JjZSB0aGUgcGFnZSB0YWJsZSBjaGVja2luZyBieSBkZWZhdWx0XCYjMzQ7XG5tbS9LY29uZmlnLmRlYnVnOjEzODpcdGRlcGVuZHMgb24gUEFHRV9UQUJMRV9DSEVDS1xubW0vS2NvbmZpZy5kZWJ1Zy0xMzktXHRoZWxwXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xNjU9Y29uZmlnIERFQlVHX1BBR0VfUkVGXG5tbS9LY29uZmlnLmRlYnVnLTE2Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRyYWNlcG9pbnQgdG8gdHJhY2sgZG93biBwYWdlIHJlZmVyZW5jZSBtYW5pcHVsYXRpb25cJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MTY3Olx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbm1tL0tjb25maWcuZGVidWc6MTY4Olx0ZGVwZW5kcyBvbiBUUkFDRVBPSU5UU1xubW0vS2NvbmZpZy5kZWJ1Zy0xNjktXHRoZWxwXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xNzc9Y29uZmlnIERFQlVHX1JPREFUQV9URVNUXG5tbS9LY29uZmlnLmRlYnVnLTE3OC1cdGJvb2wgXCYjMzQ7VGVzdGNhc2UgZm9yIHRoZSBtYXJraW5nIHJvZGF0YSByZWFkLW9ubHlcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MTc5Olx0ZGVwZW5kcyBvbiBTVFJJQ1RfS0VSTkVMX1JXWFxubW0vS2NvbmZpZy5kZWJ1Zy0xODAtXHRoZWxwXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xODY9Y29uZmlnIERFQlVHX1dYXG5tbS9LY29uZmlnLmRlYnVnLTE4Ny1cdGJvb2wgXCYjMzQ7V2FybiBvbiBXJiM0MztYIG1hcHBpbmdzIGF0IGJvb3RcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MTg4Olx0ZGVwZW5kcyBvbiBBUkNIX0hBU19ERUJVR19XWFxubW0vS2NvbmZpZy5kZWJ1ZzoxODk6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxubW0vS2NvbmZpZy5kZWJ1ZzoxOTA6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy5kZWJ1Zy0xOTEtXHRzZWxlY3QgUFREVU1QXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yMjI9Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1ZzoyMjQ6XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjU6XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG5tbS9LY29uZmlnLmRlYnVnOjIyNjpcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXG5tbS9LY29uZmlnLmRlYnVnLTIyNy1cdHNlbGVjdCBQVERVTVBcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTI0MD1jb25maWcgREVCVUdfS01FTUxFQUtcbm1tL0tjb25maWcuZGVidWctMjQxLVx0Ym9vbCBcJiMzNDtLZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3JcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MjQyOlx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IEhBVkVfREVCVUdfS01FTUxFQUtcbm1tL0tjb25maWcuZGVidWctMjQzLVx0c2VsZWN0IERFQlVHX0ZTXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yNjU9Y29uZmlnIERFQlVHX0tNRU1MRUFLX01FTV9QT09MX1NJWkVcbm1tL0tjb25maWcuZGVidWctMjY2LVx0aW50IFwmIzM0O0ttZW1sZWFrIG1lbW9yeSBwb29sIHNpemVcJiMzNDtcbm1tL0tjb25maWcuZGVidWc6MjY3Olx0ZGVwZW5kcyBvbiBERUJVR19LTUVNTEVBS1xubW0vS2NvbmZpZy5kZWJ1Zy0yNjgtXHRyYW5nZSAyMDAgMTAwMDAwMFxuLS1cbm1tL0tjb25maWcuZGVidWc9Mjc4PWNvbmZpZyBERUJVR19LTUVNTEVBS19ERUZBVUxUX09GRlxubW0vS2NvbmZpZy5kZWJ1Zy0yNzktXHRib29sIFwmIzM0O0RlZmF1bHQga21lbWxlYWsgdG8gb2ZmXCYjMzQ7XG5tbS9LY29uZmlnLmRlYnVnOjI4MDpcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtcbm1tL0tjb25maWcuZGVidWctMjgxLVx0aGVscFxuLS1cbm1tL0tjb25maWcuZGVidWc9Mjg1PWNvbmZpZyBERUJVR19LTUVNTEVBS19BVVRPX1NDQU5cbi0tXG5tbS9LY29uZmlnLmRlYnVnLTI4Ny1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZy5kZWJ1ZzoyODg6XHRkZXBlbmRzIG9uIERFQlVHX0tNRU1MRUFLXG5tbS9LY29uZmlnLmRlYnVnLTI4OS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTMwMD1jb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxubW0vS2NvbmZpZy5kZWJ1Zy0zMDEtXHRib29sIFwmIzM0O0RlZmF1bHQga21lbWxlYWsgdG8gdmVyYm9zZSBtb2RlXCYjMzQ7XG5tbS9LY29uZmlnLmRlYnVnOjMwMjpcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtfQVVUT19TQ0FOXG5tbS9LY29uZmlnLmRlYnVnLTMwMy1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLmRlYnVnPTMxMT1jb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG5tbS9LY29uZmlnLmRlYnVnLTMxMi1cdGJvb2wgXCYjMzQ7U3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1ZzozMTM6XHRkZXBlbmRzIG9uIFBFUl9WTUFfTE9DS1xubW0vS2NvbmZpZy5kZWJ1Zy0zMTQtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gVHdlYWtzIGFuZCBTeW1ib2wgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBidWlsZC4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgYERFQlVHX1BBR0VBTExPQ2AgZGVwZW5kcyBvbiBgREVCVUdfS0VSTkVMYCBhbmQgYSBmZXcgb3RoZXIgY29uZGl0aW9ucyByZWxhdGVkIHRvIGhpYmVybmF0aW9uIGFuZCBhcmNoaXRlY3R1cmUgc3BlY2lmaWNzLiBHaXZlbiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBlbmFibGUgYm90aCBgREVCVUdfUEFHRUFMTE9DYCBhbmQgYERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgc29tZSBoZWxwZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KCk5leHQsIEkmIzM5O20gc3BvdHRpbmcgcmVmZXJlbmNlcyB0byBgUFREVU1QYCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgbG9ja2luZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gVGhlIGNvbW1pdCBtZXNzYWdlcyBtZW50aW9uIGBQVERVTVBgIHJhY2luZyB3aXRoIGBpbml0X21tYCwgYW5kIHRoYXQmIzM5O3MgY29uY2VybmluZy4gVG8gdGVzdCB0aGlzIHJhY2UgY29uZGl0aW9uIG1vcmUgZWZmZWN0aXZlbHksIEkgc2hvdWxkIGRlZmluaXRlbHkgZW5hYmxlIGBQVERVTVBfREVCVUdGU2AuIEl0IHJlcXVpcmVzIGBERUJVR19LRVJORUxgLCBgREVCVUdfRlNgLCBhbmQgYEFSQ0hfSEFTX1BURFVNUGAsIGFsbCBvZiB3aGljaCBzaG91bGQgYmUgcmVhc29uYWJsZSB0byBlbmFibGUgYXMgd2VsbC4KCk5vdywgZm9yIGRlZXBlciBkaXZlcywgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBtZW1vcnkgbWFuaXB1bGF0aW9uIHN5bWJvbHM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X25wYCwgYW5kIGBzZXRfbWVtb3J5X3BgLiBUaGV5IGFyZSBjcnVjaWFsIGZvciBzZXR0aW5nIG1lbW9yeSBwZXJtaXNzaW9ucyBhbmQgYXJlIGV4dHJlbWVseSBjb21tb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm90IGlubGluZWQgYmVjYXVzZSBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZXNlIGNhbGxzLiBZZXMsIGdvb2QsIHRoZXkmIzM5O3JlIGV4cG9ydGVkLiBOb3cgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHB0ZHVtcF9zaG93YCBvciBhbnl0aGluZyBzaW1pbGFyIHRvIHNlZSBob3cgaXQgd29ya3MgaW50ZXJuYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy03LVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjg6c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZpbml0X21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTMtXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTQ6REVGSU5FX1NIT1dfQVRUUklCVVRFKHB0ZHVtcCk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTUtXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTY6c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE3LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIyLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjIzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3Vya25sKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yNC1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yNS0jaWZkZWYgQ09ORklHX01JVElHQVRJT05fUEFHRV9UQUJMRV9JU09MQVRJT05cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyNjpzdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjcte1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI4LVx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5Olx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVx1MDAzZW1tLCB0cnVlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zMC1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zMi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzozMzpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wX2N1cnVzcik7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzQtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM2LSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6Mzc6c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM4LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cdGlmIChlZmlfbW0ucGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZlZmlfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00My1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0NDpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wX2VmaSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDUtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTQ5PXN0YXRpYyBpbnQgX19pbml0IHB0X2R1bXBfZGVidWdfaW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Mi1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1MzpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7a2VybmVsXCYjMzQ7LCAwNDAwLCBkaXIsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01NC1cdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7Y3VycmVudF9rZXJuZWxcJiMzNDssIDA0MDAsIGRpciwgTlVMTCxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1NTpcdFx0XHQgICAgXHUwMDI2cHRkdW1wX2N1cmtubF9mb3BzKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy01Ni1cbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTgtXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2N1cnJlbnRfdXNlclwmIzM0OywgMDQwMCwgZGlyLCBOVUxMLFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjU5Olx0XHRcdCAgICBcdTAwMjZwdGR1bXBfY3VydXNyX2ZvcHMpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYwLSNlbmRpZlxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYxLSNpZiBkZWZpbmVkKENPTkZJR19FRkkpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NjI6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2VmaVwmIzM0OywgMDQwMCwgZGlyLCBOVUxMLCBcdTAwMjZwdGR1bXBfZWZpX2ZvcHMpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYzLSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoxOTojaW5jbHVkZSBcdTAwM2NsaW51eC9wdGR1bXAuaFx1MDAzZVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjAtXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9Mjg9c3RydWN0IHBnX3N0YXRlIHtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI5Olx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zMC1cdGludCBsZXZlbDtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0yMjc9c3RhdGljIHZvaWQgbm90ZV93eChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUwLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUxOnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90KHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCBpbnQgbGV2ZWwsIHU2NCB2YWwpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTIte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUzOlx0c3RydWN0IHBnX3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZihwdF9zdCwgc3RydWN0IHBnX3N0YXRlLCBwdGR1bXApO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjU0LVx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcdTAwMjYgUFRFX0ZMQUdTX01BU0s7XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjY4LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjY5OnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90X3B0ZShzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgcHRlX3QgcHRlKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjcwLXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzMtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNzQ6c3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3RfcG1kKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBwbWRfdCBwbWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzUte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI3OC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB1ZF90IHB1ZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI4MC17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjgzLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mjg0OnN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90X3A0ZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgcDRkX3QgcDRkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjg1LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyODk6c3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3RfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBwZ2RfdCBwZ2QpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yOTAte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI5OS0gKi9cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMDpzdGF0aWMgdm9pZCBub3RlX3BhZ2Uoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxldmVsLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAxLVx0XHQgICAgICB1NjQgdmFsKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAyLXtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMzpcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwNC1cdHBncHJvdHZhbF90IG5ld19wcm90LCBuZXdfZWZmO1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5MC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjM5MTpzdGF0aWMgdm9pZCBub3RlX3BhZ2VfcHRlKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Mi17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzk1LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mzk2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzk3LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDAtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MDE6c3RhdGljIHZvaWQgbm90ZV9wYWdlX3B1ZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCBwdWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDIte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQwNjpzdGF0aWMgdm9pZCBub3RlX3BhZ2VfcDRkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCB1bnNpZ25lZCBsb25nIGFkZHIsIHA0ZF90IHA0ZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNy17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDEwLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDExOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdkX3QgcGdkKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDEyLXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTUtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MTY6c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDE3LXtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjItXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MjM6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjQtXHRcdFx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjYte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDI3Olx0Y29uc3Qgc3RydWN0IHB0ZHVtcF9yYW5nZSBwdGR1bXBfcmFuZ2VzW10gPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjgtI2lmZGVmIENPTkZJR19YODZfNjRcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MzctXHRzdHJ1Y3QgcGdfc3RhdGUgc3QgPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Mzg6XHRcdC5wdGR1bXAgPSB7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MzktXHRcdFx0Lm5vdGVfcGFnZV9wdGUgPSBub3RlX3BhZ2VfcHRlLFxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ0OS1cdFx0XHQuZWZmZWN0aXZlX3Byb3RfcGdkID0gZWZmZWN0aXZlX3Byb3RfcGdkLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDUwOlx0XHRcdC5yYW5nZVx0XHQ9IHB0ZHVtcF9yYW5nZXNcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1MS1cdFx0fSxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTctXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTg6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBtbSwgcGdkKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1OS1cbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzMtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzQ6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3NS17XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzY6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgbW0tXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzctfVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4MC1cdFx0XHRcdCAgIGJvb2wgdXNlcilcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODYtI2VuZGlmXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0ODc6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg4LX1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ5MDp2b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ5MS17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAwLVx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTAxOlx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDItI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNi17XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA5LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTEwOlx0cmV0dXJuIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MTEtfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDcxPXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ3NC1cdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NzU6XHQgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ3Ni1cdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgIENvZGUgYW5kIFJlbGF0ZWQgU3ltYm9scyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXMgdXNlZCB3aXRoaW4gYSBmZXcgZGVidWdmcyBmaWxlczogYHB0ZHVtcF9zaG93YCwgYHB0ZHVtcF9jdXJrbmxfc2hvd2AsIGBwdGR1bXBfY3VydXNyX3Nob3dgLCBhbmQgYHB0ZHVtcF9lZmlfc2hvd2AuIEdpdmVuIHRoYXQgaXQmIzM5O3MgdGllZCB0byBkZWJ1Z2ZzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgaW4gbXkgY3VycmVudCBlbnZpcm9ubWVudC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpOb3csIGxldCBtZSB6b29tIGluIG9uIHRoZSBjb3JlIHN5bWJvbHMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSB1c2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBtZW1vcnkgcGVybWlzc2lvbnM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X25wYCwgYHNldF9tZW1vcnlfcGAsIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAsIGFuZCBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgLiBUaGlzIHN1Z2dlc3RzIGEgZm9jdXMgb24gdGhlIHBhZ2UgdGFibGUgZW50cmllcywgd2hpY2ggaXNuJiMzOTt0IHVudXN1YWwuCgpUaGUgbmV4dCB0aGluZyBJJiMzOTtsbCBuZWVkIHRvIGtub3cgaXMgaWYgYHNldF9tZW1vcnlfZW5jcnlwdGVkYCBhbmQgYHNldF9tZW1vcnlfZGVjcnlwdGVkYCBhcmUgYWx3YXlzIGF2YWlsYWJsZSwgb3IgaWYgdGhleSYjMzk7cmUgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlndXJhdGlvbi4gSSBrbm93IHRob3NlIGFyZSBsZXNzIGNvbW1vbmx5IGVuYWJsZWQsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCBhbnkgbWVhbmluZ2Z1bCBhbmFseXNpcyBvciBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnlfZW5jcnlwdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MDk9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX2RlYyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI1OmludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNi17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI4LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyOTpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTI1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IFBlcm1pc3Npb25zKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgYmVpbmcgJiMzNDtleHBvcnRlZCwmIzM0OyBhbmQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhhdCBleHBvcnQgaXMgaGFwcGVuaW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUga2VybmVsLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIGJlaW5nIG1hZGUgYWNjZXNzaWJsZSwgcHJvYmFibHkgZnJvbSB1c2VyIHNwYWNlLgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBuaXR0eS1ncml0dHkuIExldCBtZSBqdW1wIGludG8gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaGAgLSBJJiMzOTttIGFsbW9zdCBjZXJ0YWluIGBzZXRfbWVtb3J5X3JvYCBhbmQgYHNldF9tZW1vcnlfcndgIGFyZSBnb2luZyB0byBiZSBrZXkgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlc2UgcHJpbWl0aXZlcyBhcmUgdXNlZCB0byBjaGFuZ2UgbWVtb3J5IHByb3RlY3Rpb24gYXR0cmlidXRlcy4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGhvdyB0aG9zZSBmdW5jdGlvbnMgbWFwIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG1lY2hhbmlzbXMsIGxpa2UgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgY29udHJvbCByZWdpc3RlciBtb2RpZmljYXRpb25zIChDUjAsIENSMyksIGFuZCBwb3RlbnRpYWxseSB0aGUgTVNScyByZWxhdGVkIHRvIG1lbW9yeSBwcm90ZWN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIGNyZWF0aW5nIG9yIG1vZGlmeWluZyB0aGUgJiMzOTtleHBvcnQmIzM5OyBvZiB0aGlzIG1lbW9yeS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSAmIzM5O2V4cG9ydGVkJiMzOTsgbWVtb3J5IG1lYW5zIGl0JiMzOTtzIG5vdyBhY2Nlc3NpYmxlIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIGFuZCBgc2V0X21lbW9yeV9yb2AgYW5kIGBzZXRfbWVtb3J5X3J3YCBnaXZlIGEgY2x1ZSB0byB3aGF0IHRoZSAqY2hhbmdlKiBpbiBjb250ZXh0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5X3JvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC04LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjk6I2RlZmluZSBzZXRfbWVtb3J5X3JveCBzZXRfbWVtb3J5X3JveFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjEwOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIExhYnlyaW50aGluZSBIZWFkZXIgRmlsZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYHNldF9tZW1vcnlfcm9gIGlzIGRlY2xhcmVkLiBOb3QgYSBiaWcgZGVhbCwgSSBrbm93IHRoaXMgdGVycml0b3J5LiBMZXQgbWUgY2hlY2sgdGhlIHN0YW5kYXJkIHBsYWNlc+KApiBBaCwgdGhlcmUgaXQgaXMhIEkganVzdCBjaGVja2VkIGFuZCBjb25maXJtZWQgdGhhdCBgc2V0X21lbW9yeV9yb2AgaXMgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oYC4gR29vZCwgZ29vZC4gVGhhdCYjMzk7cyBleGFjdGx5IHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgaXQuIE5vdyBJIGNhbiBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5X3JvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTAtI2Vsc2VcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjExOnN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC0xMi1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oPTE0PXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKSB7IHJldHVybiAwOyB9XG4tLVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTYtXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxNzojaWZuZGVmIHNldF9tZW1vcnlfcm94XG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxODpzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE5LXtcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjIwOlx0aW50IHJldCA9IHNldF9tZW1vcnlfcm8oYWRkciwgbnVtcGFnZXMpO1xuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMjEtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA4OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IFNldHRpbmcgRnVuY3Rpb25zIGFuZCBSZWxhdGVkIERlYnVnZ2luZyBUb29scyoqCgpPa2F5LCBzbyBgc2V0X21lbW9yeV9yb2AsIHRoYXQga2V5IGZ1bmN0aW9uLCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaGAgdW5kZXIgdGhhdCBgI2lmZGVmIENPTkZJR19BUkNIX0hBU19TRVRfTUVNT1JZYCBjb25kaXRpb25hbC4gR29vZCwgc2luY2Ugd2UgYXJlIG9uIHg4NiwgaXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhdmFpbGFibGUuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kOiBgREVCVUdfUEFHRUFMTE9DYCwgYERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAsIGFuZCBhbHNvIGBQVERVTVBfREVCVUdGU2AuIFRoZXNlIG9mdGVuIHJlbGF0ZSB0byBkZWJ1Z2dpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBhZ2UgdGFibGUgc3RydWN0dXJlcywgc28gdGhleSBjb3VsZCBiZSByZWxldmFudC4KCk5leHQsIEkgbmVlZCB0byBsaXN0IG91dCB0aGUga2V5IHN5bWJvbHMuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X25wYCwgYHNldF9tZW1vcnlfcGAsIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAsIGBzZXRfbWVtb3J5X2RlY3J5cHRlZGAuCgpBaCEgQW5kLCBsZXQmIzM5O3Mgbm90IGZvcmdldCBhYm91dCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLiBJdCYjMzk7cyB0aGF0IGxpdHRsZSBnZW0gdGhhdCBtaWdodCBoZWxwIHRyaWdnZXIgdGhlIHB0ZHVtcCByYWNlLiBJIHJlbWVtYmVyIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gZGVidWdmcy4gV2FpdCwgaXMgdGhhdCBmdW5jdGlvbiBleHBvcnRlZD8gTm9wZS4gQnV0LCBpdCBpcyByZWFjaGFibGUgdmlhIGRlYnVnZnMsIHNvIGl0JiMzOTtzIGZhaXIgZ2FtZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXNuJiMzOTt0IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTg9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZpbml0X21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MTY9c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTIwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTI2PXN0YXRpYyBpbnQgcHRkdW1wX2N1cnVzcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXHRpZiAoY3VycmVudC1cdTAwM2VtbS1cdTAwM2VwZ2QpXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6Mjk6XHRcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXHUwMDNlbW0sIHRydWUpO1xuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTMwLVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTM3PXN0YXRpYyBpbnQgcHRkdW1wX2VmaV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzktXHRpZiAoZWZpX21tLnBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0MDpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXHUwMDI2ZWZpX21tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDEtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00NzQ9dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0Nzk6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVx0XHRcdFx0ICAgYm9vbCB1c2VyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ4NgoJCQkJCQkJb3V0cHV0OiAyNDAKCQkJCQkJCXRob3VnaHRzOiA5NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IGl0JiMzOTtzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBzaGlmdCB3aXRoaW4gdGhlIHg4NiBwYWdlIGF0dHJpYnV0ZSBjb2RlLCBzbyBJIG5lZWQgdG8gdGhvcm91Z2hseSBldmFsdWF0ZSBpdHMgaW1wbGljYXRpb25zLiBXaGlsZSB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGlzbiYjMzk7dCBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGFjY2Vzc2libGUgdGhyb3VnaCBgdm1saW51eGAsIHdoaWNoIGlzIGdyZWF0IGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKTXkgaW1tZWRpYXRlIGZvY3VzLCBnaXZlbiB0aGUgY2hhbmdlcywgaXMgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2FsbGVkIGZyb20gZGVidWdmcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCBpdCB0byB0aGUgZm9jdXMgc3ltYm9scy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCwgYENPTkZJR19ERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRgLCBhbmQgYENPTkZJR19QVERVTVBfREVCVUdGU2AuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgd2UgY2FuIHRlc3QgdGhlIG5ldyBsb2dpYyBwcm9wZXJseS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgY2xvc2VseSBhdCB0aGUgY29kZSBpdHNlbGYuIEkgc2VlIGEgY29uZGl0aW9uYWwgbG9jayBjaGFuZ2Ugd2l0aCBgZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKWAuIFRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcgaW4gdGVybXMgb2YgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgdGhhdCBnZXRzIGVuYWJsZWQvZGlzYWJsZWQuIFRoZSByZWFsIGNvcmUgaXMgdGhlIGxvY2tpbmcgYW5kIHVubG9ja2luZyBhcm91bmQgYGluaXRfbW1gLCBhbmQgdGhvc2UgY2hhbmdlcyBhcmUgaW1wb3J0YW50LiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgYG1tYXBfd3JpdGVfbG9ja2AgaW4gYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGFkZGluZyBgbW1hcF9yZWFkX2xvY2tgIGluIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLiBBbHNvLCB0aGUgbWFuaXB1bGF0aW9uIG9mIGxvY2tzIGFyb3VuZCBgcHRlX2FsbG9jX29uZV9rZXJuZWxgLCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBsb2NraW5nIHN0cmF0ZWd5IHVzaW5nIGBtbWFwX3JlYWRfbG9ja2AgYW5kIGBtbWFwX3dyaXRlX2xvY2tgIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBpbnZvbHZpbmcgYHB0ZHVtcGAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCBhbmQgY29sbGFwc2VkLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiB0aGF0IGlzIHZlcnkgbGlrZWx5IHRvIGJlIGV4ZXJjaXNlZCwgYW5kIGFzIHN1Y2ggaXMgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IGNyaXRpY2FsIGFuZCBoaWdobHkgcmVhY2hhYmxlLiBUaGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbG9ja2luZyBhbmQgaG93IGxhcmdlIHBhZ2VzIGFyZSBoYW5kbGVkIHJlcXVpcmUgZXh0ZW5zaXZlIGZ1enppbmcgdG8gZW5zdXJlIHdlIGRvbiYjMzk7dCBpbnRyb2R1Y2UgZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG1lbW9yeSBsZWFrcy4KClNvLCBJJiMzOTttIGdvaW5nIHRvIGFkZCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgdG8gdGhlIGZvY3VzIGxpc3Q6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X25wYCwgYW5kIGBzZXRfbWVtb3J5X3BgLiBBbmQgb2YgY291cnNlLCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNgLgoKRmluYWxseSwgSSB3aWxsIG5vdyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19QQUdFQUxMT0MmIzM0OywKICAgICYjMzQ7REVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUJiMzNDssCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfbngmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV94JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfNGsmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ucCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3AmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgeDg2IHBhZ2UgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiBjb2RlIChDUEEpLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHNlbWFudGljcyB1c2luZyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBwdGR1bXAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuIEl0IGFsc28gY2hhbmdlcyB0aGUgbG9ja2luZyBiZWhhdmlvciB3aGVuIGRlYnVnX3BhZ2VhbGxvYyBpcyBlbmFibGVkIGFuZCBtb2RpZmllcyBob3cgbGFyZ2UgcGFnZXMgYXJlIHNwbGl0IGFuZCBjb2xsYXBzZWQuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERUJVR19QQUdFQUxMT0MmIzM0OywKICAgICYjMzQ7REVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUJiMzNDssCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfbngmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV94JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfNGsmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ucCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3AmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgeDg2IHBhZ2UgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiBjb2RlIChDUEEpLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHNlbWFudGljcyB1c2luZyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBwdGR1bXAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuIEl0IGFsc28gY2hhbmdlcyB0aGUgbG9ja2luZyBiZWhhdmlvciB3aGVuIGRlYnVnX3BhZ2VhbGxvYyBpcyBlbmFibGVkIGFuZCBtb2RpZmllcyBob3cgbGFyZ2UgcGFnZXMgYXJlIHNwbGl0IGFuZCBjb2xsYXBzZWQuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MDIuNjU1OTA4MDc2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwOTc1MTIwNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfUEFHRUFMTE9DXCIsXG4gICAgXCJERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRcIixcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V0X21lbW9yeV9yb1wiLFxuICAgIFwic2V0X21lbW9yeV9yd1wiLFxuICAgIFwic2V0X21lbW9yeV9ueFwiLFxuICAgIFwic2V0X21lbW9yeV94XCIsXG4gICAgXCJzZXRfbWVtb3J5XzRrXCIsXG4gICAgXCJzZXRfbWVtb3J5X25wXCIsXG4gICAgXCJzZXRfbWVtb3J5X3BcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgeDg2IHBhZ2UgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiBjb2RlIChDUEEpLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIHNlbWFudGljcyB1c2luZyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBwdGR1bXAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuIEl0IGFsc28gY2hhbmdlcyB0aGUgbG9ja2luZyBiZWhhdmlvciB3aGVuIGRlYnVnX3BhZ2VhbGxvYyBpcyBlbmFibGVkIGFuZCBtb2RpZmllcyBob3cgbGFyZ2UgcGFnZXMgYXJlIHNwbGl0IGFuZCBjb2xsYXBzZWQuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODowMi42NTU5MTc1MDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzA1OTIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyOGI3NDc5NDQyYTBlNmVlZjQ1MWQ1YmY4ZWRkNjZiMzM1YmVlYzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMTU6MTg6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5pbmRleCBiMWU3ODBhNDY1YjU5Li43ZDY1NjUyMDg4N2NmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZWdpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZTgyMC9hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG5AQCAtNDksNyArNTAsOCBAQCBzdHJ1Y3QgY3BhX2RhdGEge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRmbGFncztcXG4gXFx0dW5zaWduZWQgaW50XFx0Zm9yY2Vfc3BsaXRcXHRcXHQ6IDEsXFxuIFxcdFxcdFxcdGZvcmNlX3N0YXRpY19wcm90XFx0OiAxLFxcbi1cXHRcXHRcXHRmb3JjZV9mbHVzaF9hbGxcXHRcXHQ6IDE7XFxuK1xcdFxcdFxcdGZvcmNlX2ZsdXNoX2FsbFxcdFxcdDogMSxcXG4rXFx0XFx0XFx0aW5pdF9tbV9yZWFkX2xvY2tlZFxcdDogMTtcXG4gXFx0c3RydWN0IHBhZ2VcXHQqKnBhZ2VzO1xcbiB9O1xcbiBcXG5AQCAtNjUsOCArNjcsMjUgQEAgc3RhdGljIGNvbnN0IGludCBjcGFfd2Fybl9sZXZlbCA9IENQQV9QUk9URUNUO1xcbiAgKiBTZXJpYWxpemUgY3BhKCkgdXNpbmcgY3BhX2xvY2sgc28gdGhhdCB3ZSBkb24ndCBhbGxvdyBhbnkgb3RoZXIgY3B1LCB3aXRoXFxuICAqIHN0YWxlIGxhcmdlIHRsYiBlbnRyaWVzLCB0byBjaGFuZ2UgdGhlIHBhZ2UgYXR0cmlidXRlIGluIHBhcmFsbGVsIHRvIHNvbWVcXG4gICogb3RoZXIgY3B1IHNwbGl0dGluZyBhIGxhcmdlIHBhZ2UgZW50cnkgYWxvbmcgd2l0aCBjaGFuZ2luZyB0aGUgYXR0cmlidXRlLlxcbisgKlxcbisgKiBXaGVuIGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCksIHBhZ2UgYXR0cmlidXRlcyBjb3VsZCBiZSBjaGFuZ2VkIGluIGF0b21pY1xcbisgKiBjb250ZXh0IHRoYXQgd291bGQgd2FycmFudCBkaXNhYmxpbmcgSVJRcy4gQnV0IHNpbmNlIGRlYnVnX3BhZ2VhbGxvYyBhbHdheXNcXG4rICogdXNlcyA0ayBwYWdlcyBpbiB0aGUgZGlyZWN0IG1hcCB0aGVyZSBhcmUgbm8gcmFjZXMgZm9yIHNwbGl0cyBhbmQgY29sbGFwc2VzXFxuKyAqIGFuZCBsb2NraW5nIGNhbiBiZSBqdXN0IHNraXBwZWQgYWx0b2dldGhlci5cXG4gICovXFxuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3BhX2xvY2spO1xcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKF9jcGFfbG9jayk7XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgY3BhX2xvY2sodm9pZClcXG4re1xcbitcXHRpZiAoIWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCkpXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2X2NwYV9sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGNwYV91bmxvY2sodm9pZClcXG4re1xcbitcXHRpZiAoIWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCkpXFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZfY3BhX2xvY2spO1xcbit9XFxuIFxcbiAjZGVmaW5lIENQQV9GTFVTSFRMQiAxXFxuICNkZWZpbmUgQ1BBX0FSUkFZIDJcXG5AQCAtNDA5LDcgKzQyOCw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxcbiBcXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcXG4gXFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xcbiBcXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XFxuQEAgLTQxNyw4ICs0MzYsNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIFxcdGludCBjb2xsYXBzZWQgPSAwO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2Y3BhX2xvY2spO1xcbi1cXG4gXFx0aWYgKGNwYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKSkge1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY3BhLVxcdTAwM2VudW1wYWdlczsgaSsrKVxcbiBcXHRcXHRcXHRjb2xsYXBzZWQgKz0gY29sbGFwc2VfbGFyZ2VfcGFnZXMoX19jcGFfYWRkcihjcGEsIGkpLFxcbkBAIC00MzIsMTkgKzQ0OSwzNSBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIFxcdFxcdFxcdGNvbGxhcHNlZCArPSBjb2xsYXBzZV9sYXJnZV9wYWdlcyhhZGRyLCBcXHUwMDI2cGd0YWJsZXMpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWNvbGxhcHNlZCkge1xcbi1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3BhX2xvY2spO1xcbitcXHRpZiAoIWNvbGxhcHNlZClcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuIFxcbiBcXHRmbHVzaF90bGJfYWxsKCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFxcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xcbiBcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRkZXNjLVxcdTAwM2VwdF9saXN0KTtcXG4tXFx0XFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogT25seSBlYXJseSBhbGxvYydkIGRpcmVjdCBtYXAgc2hvdWxkIG5vdCBiZSBmbGFnZ2VkIFBHX3RhYmxlXFxuK1xcdFxcdCAqIGhlcmUgYW5kIHRob3NlIHNob3VsZG4ndCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseVxcbitcXHRcXHQgKiBjYXV0aW91cyBhbmQgaGFuZGxlIHRoZSAhUEdfdGFibGUgY2FzZSB0b28uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpXFxuK1xcdFxcdFxcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xcbiBcXHR9XFxuK31cXG4gXFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjcGFfbG9jayk7XFxuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcXG4rXFx0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxcbitcXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXFxuK1xcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuQEAgLTczNiw3ICs3NjksNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0KmxldmVsID0gUEdfTEVWRUxfNTEyRztcXG4gXFx0Km54IHw9IHBnZF9mbGFncygqcGdkKSBcXHUwMDI2IF9QQUdFX05YO1xcbi1cXHQqcncgXFx1MDAyNj0gcGdkX2ZsYWdzKCpwZ2QpIFxcdTAwMjYgX1BBR0VfUlc7XFxuK1xcdCpydyBcXHUwMDI2PSAhIShwZ2RfZmxhZ3MoKnBnZCkgXFx1MDAyNiBfUEFHRV9SVyk7XFxuIFxcbiBcXHRwNGQgPSBwNGRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7XFxuIFxcdGlmIChwNGRfbm9uZSgqcDRkKSlcXG5AQCAtNzQ3LDcgKzc4MCw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcbiBcXHQqbGV2ZWwgPSBQR19MRVZFTF8xRztcXG4gXFx0Km54IHw9IHA0ZF9mbGFncygqcDRkKSBcXHUwMDI2IF9QQUdFX05YO1xcbi1cXHQqcncgXFx1MDAyNj0gcDRkX2ZsYWdzKCpwNGQpIFxcdTAwMjYgX1BBR0VfUlc7XFxuK1xcdCpydyBcXHUwMDI2PSAhIShwNGRfZmxhZ3MoKnA0ZCkgXFx1MDAyNiBfUEFHRV9SVyk7XFxuIFxcbiBcXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7XFxuIFxcdGlmIChwdWRfbm9uZSgqcHVkKSlcXG5AQCAtNzU4LDcgKzc5MSw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcbiBcXHQqbGV2ZWwgPSBQR19MRVZFTF8yTTtcXG4gXFx0Km54IHw9IHB1ZF9mbGFncygqcHVkKSBcXHUwMDI2IF9QQUdFX05YO1xcbi1cXHQqcncgXFx1MDAyNj0gcHVkX2ZsYWdzKCpwdWQpIFxcdTAwMjYgX1BBR0VfUlc7XFxuK1xcdCpydyBcXHUwMDI2PSAhIShwdWRfZmxhZ3MoKnB1ZCkgXFx1MDAyNiBfUEFHRV9SVyk7XFxuIFxcbiBcXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7XFxuIFxcdGlmIChwbWRfbm9uZSgqcG1kKSlcXG5AQCAtNzY5LDcgKzgwMiw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcbiBcXHQqbGV2ZWwgPSBQR19MRVZFTF80SztcXG4gXFx0Km54IHw9IHBtZF9mbGFncygqcG1kKSBcXHUwMDI2IF9QQUdFX05YO1xcbi1cXHQqcncgXFx1MDAyNj0gcG1kX2ZsYWdzKCpwbWQpIFxcdTAwMjYgX1BBR0VfUlc7XFxuK1xcdCpydyBcXHUwMDI2PSAhIShwbWRfZmxhZ3MoKnBtZCkgXFx1MDAyNiBfUEFHRV9SVyk7XFxuIFxcbiBcXHRyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTtcXG4gfVxcbkBAIC0xMTI5LDExICsxMTYyLDEwIEBAIHN0YXRpYyB2b2lkIHNwbGl0X3NldF9wdGUoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXG4gc3RhdGljIGludFxcbiBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLVxcdFxcdCAgIHN0cnVjdCBwdGRlc2MgKnB0ZGVzYylcXG4rXFx0XFx0ICAgcHRlX3QgKnBiYXNlKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqYmFzZSA9IHB0ZGVzY19wYWdlKHB0ZGVzYyk7XFxuLVxcdHB0ZV90ICpwYmFzZSA9IChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhiYXNlKTtcXG4rXFx0c3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpO1xcbiBcXHR1bnNpZ25lZCBpbnQgaSwgbGV2ZWw7XFxuIFxcdHBncHJvdF90IHJlZl9wcm90O1xcbiBcXHRib29sIG54LCBydztcXG5AQCAtMTIzNywxNiArMTI2OSwyMSBAQCBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIHN0YXRpYyBpbnQgc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHtcXG4tXFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xcbitcXHRwdGVfdCAqcHRlO1xcbitcXG4rXFx0Y3BhX3VubG9jaygpO1xcbitcXHRpZiAoY3BhLVxcdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxcbitcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4rXFx0cHRlID0gcHRlX2FsbG9jX29uZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0pO1xcbitcXHRpZiAoY3BhLVxcdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxcbitcXHRcXHRtbWFwX3JlYWRfbG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuK1xcdGNwYV9sb2NrKCk7XFxuIFxcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2Y3BhX2xvY2spO1xcbi1cXHRwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCwgMCk7XFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2Y3BhX2xvY2spO1xcbi1cXHRpZiAoIXB0ZGVzYylcXG4rXFx0aWYgKCFwdGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0aWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZGVzYykpXFxuLVxcdFxcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XFxuK1xcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKVxcbitcXHRcXHRwdGVfZnJlZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHB0ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0yMDI1LDkgKzIwNjIsOSBAQCBzdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgcHJpbWFyeSlcXG4gXFx0XFx0aWYgKGNwYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoQ1BBX0FSUkFZIHwgQ1BBX1BBR0VTX0FSUkFZKSlcXG4gXFx0XFx0XFx0Y3BhLVxcdTAwM2VudW1wYWdlcyA9IDE7XFxuIFxcbi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmNwYV9sb2NrKTtcXG4rXFx0XFx0Y3BhX2xvY2soKTtcXG4gXFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyKGNwYSwgcHJpbWFyeSk7XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjcGFfbG9jayk7XFxuK1xcdFxcdGNwYV91bmxvY2soKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC0yMTA5LDcgKzIxNDYsMTEgQEAgc3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbiBcXHRjcGEuY3VycGFnZSA9IDA7XFxuIFxcdGNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0O1xcbiBcXG4tXFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmNwYSwgMSk7XFxuK1xcdC8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi9cXG4rXFx0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSB0cnVlO1xcbitcXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG4rXFx0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbmluZGV4IDA0YjhmNjFlY2U1ZDguLmY0Y2ViOTY4YWViM2QgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG5AQCAtNjIxLDYgKzYyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gREVGSU5FX0dVQVJEKG1tYXBfcmVhZF9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXFxuIFxcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcXG4rREVGSU5FX0dVQVJEKG1tYXBfd3JpdGVfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxcbitcXHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODowMy4xNDk3NDIzMDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MzYwMzY3MDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19QQUdFQUxMT0NcIixcbiAgICBcIkRFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFwiLFxuICAgIFwiUFREVU1QX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X254XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIixcbiAgICBcInNldF9tZW1vcnlfNGtcIixcbiAgICBcInNldF9tZW1vcnlfbnBcIixcbiAgICBcInNldF9tZW1vcnlfcFwiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB4ODYgcGFnZSBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uIGNvZGUgKENQQSkuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgc2VtYW50aWNzIHVzaW5nIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIHB0ZHVtcCBhbmQgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBsb2NraW5nIGJlaGF2aW9yIHdoZW4gZGVidWdfcGFnZWFsbG9jIGlzIGVuYWJsZWQgYW5kIG1vZGlmaWVzIGhvdyBsYXJnZSBwYWdlcyBhcmUgc3BsaXQgYW5kIGNvbGxhcHNlZC4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyOGI3NDc5NDQyYTBlNmVlZjQ1MWQ1YmY4ZWRkNjZiMzM1YmVlYzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNToxODowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBiMWU3ODBhNDY1YjU5Li43ZDY1NjUyMDg4N2NmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQ5LDcgKzUwLDggQEAgc3RydWN0IGNwYV9kYXRhIHtcbiBcdHVuc2lnbmVkIGludFx0ZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnRcdGZvcmNlX3NwbGl0XHRcdDogMSxcbiBcdFx0XHRmb3JjZV9zdGF0aWNfcHJvdFx0OiAxLFxuLVx0XHRcdGZvcmNlX2ZsdXNoX2FsbFx0XHQ6IDE7XG4rXHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMSxcbitcdFx0XHRpbml0X21tX3JlYWRfbG9ja2VkXHQ6IDE7XG4gXHRzdHJ1Y3QgcGFnZVx0KipwYWdlcztcbiB9O1xuIFxuQEAgLTY1LDggKzY3LDI1IEBAIHN0YXRpYyBjb25zdCBpbnQgY3BhX3dhcm5fbGV2ZWwgPSBDUEFfUFJPVEVDVDtcbiAgKiBTZXJpYWxpemUgY3BhKCkgdXNpbmcgY3BhX2xvY2sgc28gdGhhdCB3ZSBkb24ndCBhbGxvdyBhbnkgb3RoZXIgY3B1LCB3aXRoXG4gICogc3RhbGUgbGFyZ2UgdGxiIGVudHJpZXMsIHRvIGNoYW5nZSB0aGUgcGFnZSBhdHRyaWJ1dGUgaW4gcGFyYWxsZWwgdG8gc29tZVxuICAqIG90aGVyIGNwdSBzcGxpdHRpbmcgYSBsYXJnZSBwYWdlIGVudHJ5IGFsb25nIHdpdGggY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZS5cbisgKlxuKyAqIFdoZW4gZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKSwgcGFnZSBhdHRyaWJ1dGVzIGNvdWxkIGJlIGNoYW5nZWQgaW4gYXRvbWljXG4rICogY29udGV4dCB0aGF0IHdvdWxkIHdhcnJhbnQgZGlzYWJsaW5nIElSUXMuIEJ1dCBzaW5jZSBkZWJ1Z19wYWdlYWxsb2MgYWx3YXlzXG4rICogdXNlcyA0ayBwYWdlcyBpbiB0aGUgZGlyZWN0IG1hcCB0aGVyZSBhcmUgbm8gcmFjZXMgZm9yIHNwbGl0cyBhbmQgY29sbGFwc2VzXG4rICogYW5kIGxvY2tpbmcgY2FuIGJlIGp1c3Qgc2tpcHBlZCBhbHRvZ2V0aGVyLlxuICAqL1xuLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3BhX2xvY2spO1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soX2NwYV9sb2NrKTtcbitcbitzdGF0aWMgaW5saW5lIHZvaWQgY3BhX2xvY2sodm9pZClcbit7XG4rXHRpZiAoIWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKCkpXG4rXHRcdHNwaW5fbG9jayhcdTAwMjZfY3BhX2xvY2spO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgY3BhX3VubG9jayh2b2lkKVxuK3tcbitcdGlmICghZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKSlcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2X2NwYV9sb2NrKTtcbit9XG4gXG4gI2RlZmluZSBDUEFfRkxVU0hUTEIgMVxuICNkZWZpbmUgQ1BBX0FSUkFZIDJcbkBAIC00MDksNyArNDI4LDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbiBcbi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xuIFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wO1xuQEAgLTQxNyw4ICs0MzYsNiBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXHRpbnQgY29sbGFwc2VkID0gMDtcbiBcdGludCBpO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cbiBcdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IChDUEFfUEFHRVNfQVJSQVkgfCBDUEFfQVJSQVkpKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNwYS1cdTAwM2VudW1wYWdlczsgaSsrKVxuIFx0XHRcdGNvbGxhcHNlZCArPSBjb2xsYXBzZV9sYXJnZV9wYWdlcyhfX2NwYV9hZGRyKGNwYSwgaSksXG5AQCAtNDMyLDE5ICs0NDksMzUgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIFx0XHRcdGNvbGxhcHNlZCArPSBjb2xsYXBzZV9sYXJnZV9wYWdlcyhhZGRyLCBcdTAwMjZwZ3RhYmxlcyk7XG4gXHR9XG4gXG4tXHRpZiAoIWNvbGxhcHNlZCkge1xuLVx0XHRzcGluX3VubG9jayhcdTAwMjZjcGFfbG9jayk7XG4rXHRpZiAoIWNvbGxhcHNlZClcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0Zmx1c2hfdGxiX2FsbCgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHRcdC8qXG4rXHRcdCAqIE9ubHkgZWFybHkgYWxsb2MnZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxuK1x0XHQgKiBoZXJlIGFuZCB0aG9zZSBzaG91bGRuJ3QgYmUgY29sbGFwc2VkLiBIb3dldmVyIGJlIGFidW5kYW50bHlcbitcdFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxuK1x0XHQgKi9cbitcdFx0aWYgKFBhZ2VUYWJsZSgocHRkZXNjX3BhZ2UocHRkZXNjKSkpKVxuK1x0XHRcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4gXHR9XG4rfVxuIFxuLVx0c3Bpbl91bmxvY2soXHUwMDI2Y3BhX2xvY2spO1xuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbit7XG4rXHQvKlxuK1x0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XG4rXHQgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duXG4rXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXG4rXHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxuK1x0ICovXG4rXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcdTAwMjZpbml0X21tKVxuK1x0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbkBAIC03MzYsNyArNzY5LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7XG4gXHQqbnggfD0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBnZF9mbGFncygqcGdkKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTtcbiBcdGlmIChwNGRfbm9uZSgqcDRkKSlcbkBAIC03NDcsNyArNzgwLDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzFHO1xuIFx0Km54IHw9IHA0ZF9mbGFncygqcDRkKSBcdTAwMjYgX1BBR0VfTlg7XG4tXHQqcncgXHUwMDI2PSBwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX1JXO1xuK1x0KnJ3IFx1MDAyNj0gISEocDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7XG4gXHRpZiAocHVkX25vbmUoKnB1ZCkpXG5AQCAtNzU4LDcgKzc5MSw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF8yTTtcbiBcdCpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVztcbitcdCpydyBcdTAwMjY9ICEhKHB1ZF9mbGFncygqcHVkKSBcdTAwMjYgX1BBR0VfUlcpO1xuIFxuIFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpO1xuIFx0aWYgKHBtZF9ub25lKCpwbWQpKVxuQEAgLTc2OSw3ICs4MDIsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNEs7XG4gXHQqbnggfD0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBtZF9mbGFncygqcG1kKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpO1xuIH1cbkBAIC0xMTI5LDExICsxMTYyLDEwIEBAIHN0YXRpYyB2b2lkIHNwbGl0X3NldF9wdGUoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFxuIHN0YXRpYyBpbnRcbiBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgIHN0cnVjdCBwdGRlc2MgKnB0ZGVzYylcbitcdFx0ICAgcHRlX3QgKnBiYXNlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxO1xuLVx0c3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpO1xuLVx0cHRlX3QgKnBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpO1xuK1x0c3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpO1xuIFx0dW5zaWduZWQgaW50IGksIGxldmVsO1xuIFx0cGdwcm90X3QgcmVmX3Byb3Q7XG4gXHRib29sIG54LCBydztcbkBAIC0xMjM3LDE2ICsxMjY5LDIxIEBAIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBzdGF0aWMgaW50IHNwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xuK1x0cHRlX3QgKnB0ZTtcbitcbitcdGNwYV91bmxvY2soKTtcbitcdGlmIChjcGEtXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcbitcdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbitcdHB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKFx1MDAyNmluaXRfbW0pO1xuK1x0aWYgKGNwYS1cdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxuK1x0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbitcdGNwYV9sb2NrKCk7XG4gXG4tXHRzcGluX3VubG9jayhcdTAwMjZjcGFfbG9jayk7XG4tXHRwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCwgMCk7XG4tXHRzcGluX2xvY2soXHUwMDI2Y3BhX2xvY2spO1xuLVx0aWYgKCFwdGRlc2MpXG4rXHRpZiAoIXB0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRpZiAoX19zcGxpdF9sYXJnZV9wYWdlKGNwYSwga3B0ZSwgYWRkcmVzcywgcHRkZXNjKSlcbi1cdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbitcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKVxuK1x0XHRwdGVfZnJlZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcHRlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yMDI1LDkgKzIwNjIsOSBAQCBzdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgcHJpbWFyeSlcbiBcdFx0aWYgKGNwYS1cdTAwM2VmbGFncyBcdTAwMjYgKENQQV9BUlJBWSB8IENQQV9QQUdFU19BUlJBWSkpXG4gXHRcdFx0Y3BhLVx1MDAzZW51bXBhZ2VzID0gMTtcbiBcbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbitcdFx0Y3BhX2xvY2soKTtcbiBcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyKGNwYSwgcHJpbWFyeSk7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbitcdFx0Y3BhX3VubG9jaygpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuQEAgLTIxMDksNyArMjE0NiwxMSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRjcGEuY3VycGFnZSA9IDA7XG4gXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcbiBcbi1cdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rXHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXG4rXHRjcGEuaW5pdF9tbV9yZWFkX2xvY2tlZCA9IHRydWU7XG4rXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4rXHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rXHRjcGEuaW5pdF9tbV9yZWFkX2xvY2tlZCA9IGZhbHNlO1xuIFxuIFx0LypcbiBcdCAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5pbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICs2MjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4rXHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MDMuMTQ5NzQ0MTczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg3NzA1MjA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBYODYgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBnb2luZyB0byBiZSBoaWdoLWltcGFjdCwgcG90ZW50aWFsbHkgdG91Y2hpbmcgZnJlcXVlbnRseSB1c2VkIHBhdGhzLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBob3cgd2UgaGFuZGxlIHBhZ2UgYXR0cmlidXRlIGNoYW5nZXMg4oCTIHRoaW5ncyBsaWtlIHJlYWQtb25seSwgcmVhZC13cml0ZSwgbm8tZXhlY3V0ZSwgZXhlY3V0ZSwgdGhlIGJyZWFkIGFuZCBidXR0ZXIgb2YgbWVtb3J5IHByb3RlY3Rpb24gYW5kIGFjY2VzcyBjb250cm9sIG9uIHg4Ni5cblxuVGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgaW50cm9kdWNpbmcgYW4gYG1tYXBfd3JpdGVfbG9ja2AgZ3VhcmQgaW4gYG1tYXBfbG9jay5oYC4gSSBzZWUgY2hhbmdlcyB0byB0aGUgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgYGNwYV9sb2NrYCBkZXBlbmRpbmcgb24gYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgLiBUaGF0IHNlZW1zIGEgcmVhc29uYWJsZSBwcmVjYXV0aW9uIGZvciBkZWJ1Z2dpbmcgYnVpbGRzLCBhbmQgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaXNhYmxpbmcgdGhlIGxvY2sgdW5kZXIgdGhvc2UgY2lyY3Vtc3RhbmNlcy4gVGhlIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGZ1bmN0aW9uIGlzIGJlaW5nIHVwZGF0ZWQgdG8gYWNxdWlyZSBgbW1hcF93cml0ZV9sb2NrYCBvbiBgaW5pdF9tbWAsIGFuZCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0YWtpbmcgYG1tYXBfcmVhZF9sb2NrYCBvbiBgaW5pdF9tbWAuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBsb2NraW5nIGhpZXJhcmNoeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIGxvY2sgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5IGFuZCB3aGF0IHNjZW5hcmlvcyB0aGV5IGFyZSBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QuIFRoZXJlIGlzIGFsc28gYSBjaGFuZ2UgdG8gaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCwgdXNpbmcgYHB0ZV9hbGxvY19vbmVfa2VybmVsYCBhbmQgYHB0ZV9mcmVlX2tlcm5lbGAgaW5zdGVhZCBvZiB0aGUgb2xkZXIgYHBhZ2V0YWJsZV9hbGxvY2AgYW5kIGBwYWdldGFibGVfZnJlZWAuIEkga25vdyB0aG9zZSBmdW5jdGlvbnMsIHNvIHRoaXMgaXMgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGZvciBsYXJnZSBwYWdlIG1hbmFnZW1lbnQuIEZpbmFsbHksIEkgc2VlIGEgZml4IHRvIGEgYml0bWFza2luZyBvcGVyYXRpb24gaW4gYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYCB0aGF0IEknbGwgbmVlZCB0byBleGFtaW5lIGNsb3NlbHkuXG5cbk5vdyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZSBhcmVhcy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGlubGluZWQgYGNwYV9sb2NrYCBhbmQgYGNwYV91bmxvY2tgLCBhbmQgdGhlIHdyYXBwZXIgZm9yIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBBbHNvIG9uIG15IGxpc3QgYXJlIGBsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cmAsIGBfX3NwbGl0X2xhcmdlX3BhZ2VgIGFuZCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMuIFdoaWxlIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBhcmUgc3RhdGljLCBJIG5lZWQgdG8gdHJhY2UgdGhlbSBiYWNrIHRvIHRoZWlyIHB1YmxpYyBBUElzIHRvIHNlZSBpZiB0aGVpciBmdW5jdGlvbnMgY2hhbmdlZC4gVGhlIHB1YmxpYyBBUElzIEkgYW0gaW50ZXJlc3RlZCBpbiBhcmUgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIChgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCkuIFRoYXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyBJJ2xsIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGNhbGxzIHRvIGBzZXRfbWVtb3J5X3JvYCBhbmQgYHNldF9tZW1vcnlfcndgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg3NywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjEyLjAyNjc5ODY0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYxMzc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKSBzZXRfbWVtb3J5X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIwOD1pbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjIxOmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIyMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNDY9aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjYxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI2MjppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNjMte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjg1PWludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI5MS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyOTI6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjkzLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM0Mz1FWFBPUlRfU1lNQk9MX0dQTChjbGVhcl9tY2Vfbm9zcGVjKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0NS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDY6aW50IHNldF9tZW1vcnlfeCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDcte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzUzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM1NDppbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2MjppbnQgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NzppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY4LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3Ny1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNzg6aW50IHNldF9tZW1vcnlfcncodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc5LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4Mi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODM6aW50IHNldF9tZW1vcnlfbnAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg0LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4Ny1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODg6aW50IHNldF9tZW1vcnlfbnBfbm9hbGlhcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODkte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk0LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM5NTppbnQgc2V0X21lbW9yeV9wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5Ni17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTktXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDAwOmludCBzZXRfbWVtb3J5XzRrKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwMS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDYtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDgte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEyLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQxMzppbnQgc2V0X21lbW9yeV9nbG9iYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDE0LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUwOT1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfZGVjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MjU6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1Mjk9RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9lbmNyeXB0ZWQpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUzMC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MzE6aW50IHNldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUzMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjEyLjA3NzQxODA3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTQ2OTEyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiBNZW1vcnkgQXR0cmlidXRlIENvbnRyb2wqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgcmlnaHQgaW50byB0aGUgaGVhcnQgb2YgbWVtb3J5IGF0dHJpYnV0ZSBtYW5hZ2VtZW50IOKAkyBpdCdzIHRvdWNoaW5nIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWw7IGl0J3MgdGhlIGNvcmUgb2YgaG93IHdlIGFjdHVhbGx5ICpzZXQqIGFuZCAqY2xlYXIqIGF0dHJpYnV0ZXMuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gYmUgbW9kaWZ5aW5nLCBpZiB0aGlzIHBhdGNoIHJlYWxseSBuZWVkcyB0byBiZSBtYWRlLlxuXG5BbmQsIGl0J3Mgbm90IGp1c3QgdGhhdCBjb3JlIGZ1bmN0aW9uLCBidXQgYWxzbyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYHNwbGl0X2xhcmdlX3BhZ2VgLiBUaGVzZSBib3RoIGRpcmVjdGx5IGludGVyZmFjZSB3aXRoIGF0dHJpYnV0ZSBjaGFuZ2VzLiBJdCdzIGFsbCBjb25uZWN0ZWQuXG5cbk5vdywgYmVjYXVzZSBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBmaWxlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmV4cG9ydGVkKiBmdW5jdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IGxldmVyYWdlIGl0LiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGxpc3QgdGhlbSBvZmYuLi4gVGhhdCB3aWxsIGluY2x1ZGUgdGhlIG1ham9yIG9uZXM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV9ueGAsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3diYCwgYHNldF9tZW1vcnlfd2NgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBhbmQgYHNldF9tZW1vcnlfNGtgLiBUaG9zZSBhcmUgYWxsIGdvaW5nIHRvIGJlIGFmZmVjdGVkIGJ5IHRoaXMuIFRoYXQncyBhIGJyb2FkIHJhbmdlIHRvIGNvbnNpZGVyLlxuXG5XYWl0LCBqdXN0IGEgc2Vjb25kLi4uIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoaXMuLi4gSXMgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYWN0dWFsbHkgc3RhdGljLCBvciBoYXMgaXQgYmVlbiBleHBvcnRlZCBzb21laG93PyBMZXQgbWUgZG91YmxlLWNoZWNrLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGlzIGFmZmVjdGluZyB1cywgYW5kIHdoYXQgdGhlIHNjb3BlIG9mIHRoaXMgaXMsIGJlZm9yZSBJIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MTcuMTcyMTExNTY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDU4NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYW5nZV9wYWdlX2F0dHJfc2V0X2NsclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTg4Nz1zdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjQtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTY1OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjYtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5NzA9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAwMC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMDE6XFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFsaWFzX2NwYSwgMCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDAyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMzQtXFx0XFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDM1OlxcdFxcdF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhbGlhc19jcGEsIDApO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAzNi1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNDEtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDQyOnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA0My17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwOTItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDkzOnN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwOTQtXFx0XFx0XFx0XFx0ICAgIHBncHJvdF90IG1hc2tfc2V0LCBwZ3Byb3RfdCBtYXNrX2NscixcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1MS1cXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFxcdTAwMjZpbml0X21tKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE1MjpcXHRcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNTMtXFx0Y3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjE4MD1zdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldCh1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxODIte1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE4MzpcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxODQtXFx0XFx0KGFycmF5ID8gQ1BBX0FSUkFZIDogMCksIE5VTEwpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTg3PXN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9wYWdlX2F0dHJfY2xlYXIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTg5LXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxOTA6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDAsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTkxLVxcdFxcdChhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjE5ND1zdGF0aWMgaW5saW5lIGludCBjcGFfc2V0X3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5Ni17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTk3OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsIG1hc2ssIF9fcGdwcm90KDApLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5OC1cXHRcXHRDUEFfUEFHRVNfQVJSQVksIHBhZ2VzKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIwMT1zdGF0aWMgaW5saW5lIGludCBjcGFfY2xlYXJfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjAzLXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMDQ6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDAsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA1LVxcdFxcdENQQV9QQUdFU19BUlJBWSwgcGFnZXMpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjQ2PWludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI1My1cXHRpZiAoIXJldCkge1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI1NDpcXHRcXHRyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFkZHIsIG51bXBhZ2VzLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI1NS1cXHRcXHRcXHRcXHRcXHQgICAgICAgY2FjaGVtb2RlMnBncHJvdChfUEFHRV9DQUNIRV9NT0RFX1dDKSxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM2Nz1pbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzMtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzc0OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgY2xyLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3NS1cXHRcXHRcXHRcXHRcXHRDUEFfQ09MTEFQU0UsIE5VTEwpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzg4PWludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg5LXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTA6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5MS1cXHRcXHRcXHRcXHRcXHRfX3BncHJvdChfUEFHRV9QUkVTRU5UKSwgMCxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjQwMD1pbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDEte1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwMjpcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhZGRyLCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDMtXFx0XFx0XFx0XFx0XFx0X19wZ3Byb3QoX1BBR0VfS0VSTkVMXzRLKSxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjQyMz1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0NTItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDUzOlxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ1NC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjU0NT1zdGF0aWMgaW50IF9zZXRfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTcwLVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IG5ld190eXBlID09IF9QQUdFX0NBQ0hFX01PREVfV0MpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTcxOlxcdFxcdHJldCA9IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1NzItXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNhY2hlbW9kZTJwZ3Byb3QoXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2NTA9c3RhdGljIGludCBfX3NldF9wYWdlc19wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjUtXFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjY2OlxcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjctfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjY5PXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfbnAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY4NC1cXHQgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2ODU6XFx0cmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY4Ni19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3NTI9aW50IF9faW5pdCBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZChwZ2RfdCAqcGdkLCB1NjQgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3NzYtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNzc3OlxcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc3OC1cXHRfX2ZsdXNoX3RsYl9hbGwoKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc4OT1pbnQgX19pbml0IGtlcm5lbF91bm1hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yODExLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjgxMjpcXHRyZXR2YWwgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4MTMtXFx0X19mbHVzaF90bGJfYWxsKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjE3LjIyMTU3NjM3N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTE1MTA2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZXNlIGBzZXRfbWVtb3J5XypgIGZ1bmN0aW9ucyBhcmUgYWxsIGV4cG9ydGVkIGZyb20gdGhlIGtlcm5lbC4gVGhhdCBzY3JlYW1zIFwiZnV6eiBtZVwiIHRvIG1lLiBBbnkgZXhwb3J0ZWQgZnVuY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZywgYW5kIHRoZXNlIHNlZW0gcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHdpdGggYWxsIHRoZWlyIGF0dHJpYnV0ZXMuIEknbSB0aGlua2luZyBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCwgYW5kIGBzZXRfbWVtb3J5XzRrYCBhcyBzdGFydGluZyB0YXJnZXRzLiBJJ20gYWxzbyBzZWVpbmcgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGBzcGxpdF9sYXJnZV9wYWdlYC4gVGhvc2UgYXJlIGludGVybmFsIGJ1dCBhcmUgY2FsbGVkIGR1cmluZyBwYWdlIGF0dHJpYnV0ZSBjaGFuZ2VzLCBzbyB0aGV5IG1pZ2h0IGJlIGludGVyZXN0aW5nIGRvd24gdGhlIGxpbmUsIGJ1dCBsZXQncyBmb2N1cyBvbiB0aGUgZXhwb3J0ZWQgb25lcyBmb3Igbm93LlxuXG5MZXQncyBzZWUsIHdoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYXkgaGVyZT8gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiBSaWdodCwgaXQncyBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIFNvIHRoaXMgaXMgeDg2IHNwZWNpZmljLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMgZm9yIGB4ODYvbW1gLiBJJ2xsIGxvb2sgYXQgdGhlIG1ha2VmaWxlcyBmb3IgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYGFyY2gveDg2L21tL3BhdC9NYWtlZmlsZWAgb3IgYGFyY2gveDg2L21tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIGluIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTk1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjIyLjgxMzA4OTQ3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUzNjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtMi1cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVxcdFxcdFxcdFxcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MjIuODYyNjM0Mzk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MDY0OTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIGFzc2Vzc21lbnQgb2YgdGhpcyBjaGFuZ2UsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhpcyBkZWVwbHk6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBXb3J0aCBhIERlZXAgRGl2ZSoqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgeDg2IGNvbXBpbGF0aW9uLiBObyBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHRoZSBjb3JlIHBhZ2UgYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGludHJpY2F0ZSBkYW5jZSBvZiBsYXJnZSBwYWdlIHNwbGl0dGluZywgY29sbGFwc2luZywgYW5kIHRoZSBjcml0aWNhbCBsb2NraW5nIGFyb3VuZCBgaW5pdF9tbWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIG15IGV5ZWJyb3dzIOKAkyBhbnkgY29kZSB0b3VjaGluZyBsYXJnZSBwYWdlcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEknZCBhZGQgdGhpcyB0byB0aGUgbGlzdCBvZiBhcmVhcyBmb3IgaGVhdnkgZnV6emluZyBpbW1lZGlhdGVseS5cblxuSSdtIGFsc28gc2VlaW5nIGEgY2FsbCB0byBgZGVidWdfcGFnZWFsbG9jX2VuYWJsZWQoKWAsIHdoaWNoIG1lYW5zIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBtaWdodCBiZSBpbiBwbGF5IGhlcmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGF0IGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY29kZSBjaGFuZ2VzLCBhbmQgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgc3VyZmFjZSBhcmVhIHRoYXQgaXMgc3VzY2VwdGlibGUgdG8gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODoyNy45MDMyODg2NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzQ5OTQ1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFQlVHX1BBR0VBTExPQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0yPWNvbmZpZyBQQUdFX0VYVEVOU0lPTlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMC1cXG5tbS9LY29uZmlnLmRlYnVnOjExOmNvbmZpZyBERUJVR19QQUdFQUxMT0NcXG5tbS9LY29uZmlnLmRlYnVnLTEyLVxcdGJvb2wgXFxcIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy00MC1cXG5tbS9LY29uZmlnLmRlYnVnOjQxOmNvbmZpZyBERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRcXG5tbS9LY29uZmlnLmRlYnVnLTQyLVxcdGJvb2wgXFxcIkVuYWJsZSBkZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyBieSBkZWZhdWx0P1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6MjkuODc4MjkxNzY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDk0NDE3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgRGVidWcgUGFnZSBBbGxvY2F0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyB0aGF0IGVuYWJsaW5nIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIGluaXRpYWxseS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBpbnRyb2R1Y2VzIGEgYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgIGNoZWNrIHRvIGF2b2lkIGxvY2tpbmcsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2xhcmlmeSB0aGF0IGxvZ2ljIGluIG15IG1pbmQuIElmIGBkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpYCAqaXMqIHRydWUsIHdlIHNraXAgdGhlIGxvY2s7IGlmIGl0J3MgKmZhbHNlKiwgd2UgdGFrZSB0aGUgbG9jay4gVG8gZ2V0IGNvbXByZWhlbnNpdmUgdGVzdCBjb3ZlcmFnZSwgd2UgcmVhbGx5IG5lZWQgdG8gZXZhbHVhdGUgYm90aCBzY2VuYXJpb3MuIEFuZCBgREVCVUdfUEFHRUFMTE9DYCBpcyBwcm9iYWJseSBnb29kIHRvIGhhdmUuXG5cbkFoLCBidXQgYGRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKClgIGlzIGEgcnVudGltZSBjb25kaXRpb24sIGlzbid0IGl0PyBJdCdzIGVuYWJsZWQgdGhyb3VnaCB0aGUgYGRlYnVnX3BhZ2VhbGxvYz1vbmAga2VybmVsIGNvbW1hbmQtbGluZSBvcHRpb24gb3IsIGNydWNpYWxseSwgYENPTkZJR19ERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRgLiBTbywgZm9yIG1heGltdW0gY29udHJvbCBvdmVyIHRoZSB0ZXN0aW5nIEknbSBnb2luZyB0byBkbywgaW5jbHVkaW5nIGJvdGggYENPTkZJR19ERUJVR19QQUdFQUxMT0NgIGFuZCBgQ09ORklHX0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGlzIHByb2JhYmx5IHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc25lYWt5IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYWRkcmVzcyB3aXRoIGBDT05GSUdfREVCVUdfUEFHRUFMTE9DYCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTA1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjM1LjE4NzczNzA1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4Mzc5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MTE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ1xcbm1tL0tjb25maWcuZGVidWctMTItXFx0Ym9vbCBcXFwiRGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnNcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMzpcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxcbm1tL0tjb25maWcuZGVidWc6MTQ6XFx0ZGVwZW5kcyBvbiAhSElCRVJOQVRJT04gfHwgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MgXFx1MDAyNlxcdTAwMjYgIVBQQyBcXHUwMDI2XFx1MDAyNiAhU1BBUkNcXG5tbS9LY29uZmlnLmRlYnVnLTE1LVxcdHNlbGVjdCBQQUdFX1BPSVNPTklORyBpZiAhQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NDE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFxcbm1tL0tjb25maWcuZGVidWctNDItXFx0Ym9vbCBcXFwiRW5hYmxlIGRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIGJ5IGRlZmF1bHQ/XFxcIlxcbm1tL0tjb25maWcuZGVidWc6NDM6XFx0ZGVwZW5kcyBvbiBERUJVR19QQUdFQUxMT0NcXG5tbS9LY29uZmlnLmRlYnVnLTQ0LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NDg9Y29uZmlnIFNMVUJfREVCVUdcXG4tLVxcbm1tL0tjb25maWcuZGVidWctNTAtXFx0Ym9vbCBcXFwiRW5hYmxlIFNMVUIgZGVidWdnaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbm1tL0tjb25maWcuZGVidWc6NTE6XFx0ZGVwZW5kcyBvbiBTWVNGUyBcXHUwMDI2XFx1MDAyNiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy5kZWJ1Zy01Mi1cXHRzZWxlY3QgU1RBQ0tERVBPVCBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NTk9Y29uZmlnIFNMVUJfREVCVUdfT05cXG5tbS9LY29uZmlnLmRlYnVnLTYwLVxcdGJvb2wgXFxcIlNMVUIgZGVidWdnaW5nIG9uIGJ5IGRlZmF1bHRcXFwiXFxubW0vS2NvbmZpZy5kZWJ1Zzo2MTpcXHRkZXBlbmRzIG9uIFNMVUJfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTYyLVxcdHNlbGVjdCBTVEFDS0RFUE9UX0FMV0FZU19JTklUIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz03Mz1jb25maWcgU0xVQl9SQ1VfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTc0LVxcdGJvb2wgXFxcIkVuYWJsZSBVQUYgZGV0ZWN0aW9uIGluIFRZUEVTQUZFX0JZX1JDVSBjYWNoZXMgKGZvciBLQVNBTilcXFwiXFxubW0vS2NvbmZpZy5kZWJ1Zzo3NTpcXHRkZXBlbmRzIG9uIFNMVUJfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTc2LVxcdCMgU0xVQl9SQ1VfREVCVUcgc2hvdWxkIGJ1aWxkIGZpbmUgd2l0aG91dCBLQVNBTiwgYnV0IGlzIGN1cnJlbnRseSB1c2VsZXNzXFxubW0vS2NvbmZpZy5kZWJ1Zy03Ny1cXHQjIHdpdGhvdXQgS0FTQU4sIHNvIG1hcmsgaXQgYXMgYSBkZXBlbmRlbmN5IG9mIEtBU0FOIGZvciBub3cuXFxubW0vS2NvbmZpZy5kZWJ1Zzo3ODpcXHRkZXBlbmRzIG9uIEtBU0FOXFxubW0vS2NvbmZpZy5kZWJ1Zy03OS1cXHRkZWZhdWx0IEtBU0FOX0dFTkVSSUMgfHwgS0FTQU5fU1dfVEFHU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xMDU9Y29uZmlnIFBBR0VfT1dORVJcXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MTA3OlxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVFxcbm1tL0tjb25maWcuZGVidWctMTA4LVxcdHNlbGVjdCBERUJVR19GU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xMjI9Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tcXG5tbS9LY29uZmlnLmRlYnVnLTEyMy1cXHRib29sIFxcXCJDaGVjayBmb3IgaW52YWxpZCBtYXBwaW5ncyBpbiB1c2VyIHBhZ2UgdGFibGVzXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MTI0OlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMjU6XFx0ZGVwZW5kcyBvbiBFWENMVVNJVkVfU1lTVEVNX1JBTVxcbm1tL0tjb25maWcuZGVidWctMTI2LVxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xMzY9Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcXG5tbS9LY29uZmlnLmRlYnVnLTEzNy1cXHRib29sIFxcXCJFbmZvcmNlIHRoZSBwYWdlIHRhYmxlIGNoZWNraW5nIGJ5IGRlZmF1bHRcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMzg6XFx0ZGVwZW5kcyBvbiBQQUdFX1RBQkxFX0NIRUNLXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMzktXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xNjU9Y29uZmlnIERFQlVHX1BBR0VfUkVGXFxubW0vS2NvbmZpZy5kZWJ1Zy0xNjYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRyYWNlcG9pbnQgdG8gdHJhY2sgZG93biBwYWdlIHJlZmVyZW5jZSBtYW5pcHVsYXRpb25cXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxNjc6XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG5tbS9LY29uZmlnLmRlYnVnOjE2ODpcXHRkZXBlbmRzIG9uIFRSQUNFUE9JTlRTXFxubW0vS2NvbmZpZy5kZWJ1Zy0xNjktXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xNzc9Y29uZmlnIERFQlVHX1JPREFUQV9URVNUXFxubW0vS2NvbmZpZy5kZWJ1Zy0xNzgtXFx0Ym9vbCBcXFwiVGVzdGNhc2UgZm9yIHRoZSBtYXJraW5nIHJvZGF0YSByZWFkLW9ubHlcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxNzk6XFx0ZGVwZW5kcyBvbiBTVFJJQ1RfS0VSTkVMX1JXWFxcbm1tL0tjb25maWcuZGVidWctMTgwLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MTg2PWNvbmZpZyBERUJVR19XWFxcbm1tL0tjb25maWcuZGVidWctMTg3LVxcdGJvb2wgXFxcIldhcm4gb24gVytYIG1hcHBpbmdzIGF0IGJvb3RcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoxODg6XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19ERUJVR19XWFxcbm1tL0tjb25maWcuZGVidWc6MTg5OlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1ZzoxOTA6XFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnLmRlYnVnLTE5MS1cXHRzZWxlY3QgUFREVU1QXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTIyMj1jb25maWcgUFREVU1QX0RFQlVHRlNcXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MjI0OlxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjU6XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbm1tL0tjb25maWcuZGVidWc6MjI2OlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjctXFx0c2VsZWN0IFBURFVNUFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0yNDA9Y29uZmlnIERFQlVHX0tNRU1MRUFLXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNDEtXFx0Ym9vbCBcXFwiS2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MjQyOlxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IEhBVkVfREVCVUdfS01FTUxFQUtcXG5tbS9LY29uZmlnLmRlYnVnLTI0My1cXHRzZWxlY3QgREVCVUdfRlNcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MjY1PWNvbmZpZyBERUJVR19LTUVNTEVBS19NRU1fUE9PTF9TSVpFXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNjYtXFx0aW50IFxcXCJLbWVtbGVhayBtZW1vcnkgcG9vbCBzaXplXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MjY3OlxcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtcXG5tbS9LY29uZmlnLmRlYnVnLTI2OC1cXHRyYW5nZSAyMDAgMTAwMDAwMFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0yNzg9Y29uZmlnIERFQlVHX0tNRU1MRUFLX0RFRkFVTFRfT0ZGXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNzktXFx0Ym9vbCBcXFwiRGVmYXVsdCBrbWVtbGVhayB0byBvZmZcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzoyODA6XFx0ZGVwZW5kcyBvbiBERUJVR19LTUVNTEVBS1xcbm1tL0tjb25maWcuZGVidWctMjgxLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9Mjg1PWNvbmZpZyBERUJVR19LTUVNTEVBS19BVVRPX1NDQU5cXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjg3LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWcuZGVidWc6Mjg4OlxcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtcXG5tbS9LY29uZmlnLmRlYnVnLTI4OS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTMwMD1jb25maWcgREVCVUdfS01FTUxFQUtfVkVSQk9TRVxcbm1tL0tjb25maWcuZGVidWctMzAxLVxcdGJvb2wgXFxcIkRlZmF1bHQga21lbWxlYWsgdG8gdmVyYm9zZSBtb2RlXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MzAyOlxcdGRlcGVuZHMgb24gREVCVUdfS01FTUxFQUtfQVVUT19TQ0FOXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMDMtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbm1tL0tjb25maWcuZGVidWctMzEyLVxcdGJvb2wgXFxcIlN0YXRpc3RpY3MgZm9yIHBlci12bWEgbG9ja3NcXFwiXFxubW0vS2NvbmZpZy5kZWJ1ZzozMTM6XFx0ZGVwZW5kcyBvbiBQRVJfVk1BX0xPQ0tcXG5tbS9LY29uZmlnLmRlYnVnLTMxNC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjM1LjI0MDU4MTAwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTY3NzExODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ3VyYXRpb24gVHdlYWtzIGFuZCBTeW1ib2wgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgYnVpbGQuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGBERUJVR19QQUdFQUxMT0NgIGRlcGVuZHMgb24gYERFQlVHX0tFUk5FTGAgYW5kIGEgZmV3IG90aGVyIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBoaWJlcm5hdGlvbiBhbmQgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcy4gR2l2ZW4gdGhhdCwgSSBjYW4gY29uZmlkZW50bHkgZW5hYmxlIGJvdGggYERFQlVHX1BBR0VBTExPQ2AgYW5kIGBERUJVR19QQUdFQUxMT0NfRU5BQkxFX0RFRkFVTFRgLiBUaGF0IHNob3VsZCBwcm92aWRlIHNvbWUgaGVscGZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uXG5cbk5leHQsIEknbSBzcG90dGluZyByZWZlcmVuY2VzIHRvIGBQVERVTVBgIGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBsb2NraW5nIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBUaGUgY29tbWl0IG1lc3NhZ2VzIG1lbnRpb24gYFBURFVNUGAgcmFjaW5nIHdpdGggYGluaXRfbW1gLCBhbmQgdGhhdCdzIGNvbmNlcm5pbmcuIFRvIHRlc3QgdGhpcyByYWNlIGNvbmRpdGlvbiBtb3JlIGVmZmVjdGl2ZWx5LCBJIHNob3VsZCBkZWZpbml0ZWx5IGVuYWJsZSBgUFREVU1QX0RFQlVHRlNgLiBJdCByZXF1aXJlcyBgREVCVUdfS0VSTkVMYCwgYERFQlVHX0ZTYCwgYW5kIGBBUkNIX0hBU19QVERVTVBgLCBhbGwgb2Ygd2hpY2ggc2hvdWxkIGJlIHJlYXNvbmFibGUgdG8gZW5hYmxlIGFzIHdlbGwuXG5cbk5vdywgZm9yIGRlZXBlciBkaXZlcywgSSdtIGZvY3VzaW5nIG9uIHRoZXNlIG1lbW9yeSBtYW5pcHVsYXRpb24gc3ltYm9sczogYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X254YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5XzRrYCwgYHNldF9tZW1vcnlfbnBgLCBhbmQgYHNldF9tZW1vcnlfcGAuIFRoZXkgYXJlIGNydWNpYWwgZm9yIHNldHRpbmcgbWVtb3J5IHBlcm1pc3Npb25zIGFuZCBhcmUgZXh0cmVtZWx5IGNvbW1vbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGV4cG9ydGVkIHN5bWJvbHMgYW5kIG5vdCBpbmxpbmVkIGJlY2F1c2UgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZXNlIGNhbGxzLiBZZXMsIGdvb2QsIHRoZXkncmUgZXhwb3J0ZWQuIE5vdyBJJ20gZ29pbmcgdG8gbG9vayBhdCByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBwdGR1bXBfc2hvd2Agb3IgYW55dGhpbmcgc2ltaWxhciB0byBzZWUgaG93IGl0IHdvcmtzIGludGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjQxLjgwODI5NTg4N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMjg0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNy1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6ODpzdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjEwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZpbml0X21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTExLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTEzLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxNDpERUZJTkVfU0hPV19BVFRSSUJVVEUocHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTUtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjE2OnN0YXRpYyBpbnQgcHRkdW1wX2N1cmtubF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTcte1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTk6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cXHUwMDNlbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjIzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3Vya25sKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjQtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI1LSNpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9QQUdFX1RBQkxFX0lTT0xBVElPTlxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyNjpzdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI3LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5OlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXFx1MDAzZW1tLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjMzOkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfY3VydXNyKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzQtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzYtI2lmIGRlZmluZWQoQ09ORklHX0VGSSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfWDg2XzY0KVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzozNzpzdGF0aWMgaW50IHB0ZHVtcF9lZmlfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM4LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzktXFx0aWYgKGVmaV9tbS5wZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZlZmlfbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDEtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDMtXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQ0OkRFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXBfZWZpKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNDUtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9NDk9c3RhdGljIGludCBfX2luaXQgcHRfZHVtcF9kZWJ1Z19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTItXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjUzOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImtlcm5lbFxcXCIsIDA0MDAsIGRpciwgTlVMTCwgXFx1MDAyNnB0ZHVtcF9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTQtXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY3VycmVudF9rZXJuZWxcXFwiLCAwNDAwLCBkaXIsIE5VTEwsXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjU1OlxcdFxcdFxcdCAgICBcXHUwMDI2cHRkdW1wX2N1cmtubF9mb3BzKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTYtXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtNTgtXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY3VycmVudF91c2VyXFxcIiwgMDQwMCwgZGlyLCBOVUxMLFxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo1OTpcXHRcXHRcXHQgICAgXFx1MDAyNnB0ZHVtcF9jdXJ1c3JfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYwLSNlbmRpZlxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy02MS0jaWYgZGVmaW5lZChDT05GSUdfRUZJKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19YODZfNjQpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjYyOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcImVmaVxcXCIsIDA0MDAsIGRpciwgTlVMTCwgXFx1MDAyNnB0ZHVtcF9lZmlfZm9wcyk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTYzLSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjE5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdGR1bXAuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMC1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTI4PXN0cnVjdCBwZ19zdGF0ZSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mjk6XFx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMzAtXFx0aW50IGxldmVsO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI3PXN0YXRpYyB2b2lkIG5vdGVfd3goc3RydWN0IHBnX3N0YXRlICpzdCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUwLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI1MTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgaW50IGxldmVsLCB1NjQgdmFsKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1Mi17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MjUzOlxcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTQtXFx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcXHUwMDI2IFBURV9GTEFHU19NQVNLO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjY4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI2OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdGUoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB0ZV90IHB0ZSlcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjczLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3NDpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHBtZF90IHBtZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNzUte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI3OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHB1ZF90IHB1ZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjgzLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI4NDpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wNGQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHA0ZF90IHA0ZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yODUte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjg4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjI4OTpzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdF9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHBnZF90IHBnZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yOTAte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtMjk5LSAqL1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjMwMDpzdGF0aWMgdm9pZCBub3RlX3BhZ2Uoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGxldmVsLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwMS1cXHRcXHQgICAgICB1NjQgdmFsKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTMwMi17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MzAzOlxcdHN0cnVjdCBwZ19zdGF0ZSAqc3QgPSBjb250YWluZXJfb2YocHRfc3QsIHN0cnVjdCBwZ19zdGF0ZSwgcHRkdW1wKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zMDQtXFx0cGdwcm90dmFsX3QgbmV3X3Byb3QsIG5ld19lZmY7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zOTAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6MzkxOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wdGUoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Mi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zOTUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6Mzk2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wbWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTM5Ny17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDAxOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wdWQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgcHVkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MDUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDA2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wNGQoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcDRkX3QgcDRkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQwNy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTAtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDExOnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdkX3QgcGdkKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQxMi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTUtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDE2OnN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MTcte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDIyLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyMzpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjQtXFx0XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjYte1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyNzpcXHRjb25zdCBzdHJ1Y3QgcHRkdW1wX3JhbmdlIHB0ZHVtcF9yYW5nZXNbXSA9IHtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjgtI2lmZGVmIENPTkZJR19YODZfNjRcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQzNy1cXHRzdHJ1Y3QgcGdfc3RhdGUgc3QgPSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDM4OlxcdFxcdC5wdGR1bXAgPSB7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDM5LVxcdFxcdFxcdC5ub3RlX3BhZ2VfcHRlID0gbm90ZV9wYWdlX3B0ZSxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ0OS1cXHRcXHRcXHQuZWZmZWN0aXZlX3Byb3RfcGdkID0gZWZmZWN0aXZlX3Byb3RfcGdkLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1MDpcXHRcXHRcXHQucmFuZ2VcXHRcXHQ9IHB0ZHVtcF9yYW5nZXNcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTEtXFx0XFx0fSxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1Ny1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTg6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ1OS1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3My1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NzQ6dm9pZCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzUte1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NjpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgbW0tXFx1MDAzZXBnZCwgZmFsc2UsIHRydWUpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3Ny19XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcilcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4Ni0jZW5kaWZcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0ODc6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUobSwgbW0sIHBnZCwgZmFsc2UsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODgtfVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0OTA6dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDkxLXtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMC1cXHRwZ2QgPSBrZXJuZWxfdG9fdXNlcl9wZ2RwKHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTAxOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBwZ2QsIHRydWUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDItI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDQtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA1OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDYte1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA5LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUxMDpcXHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTExLX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDcxPXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDc0LVxcdCAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDc1OlxcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ3Ni1cXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjQxLjg2MjMzMTUwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQ1Mzc2OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzYCBDb2RlIGFuZCBSZWxhdGVkIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXMgdXNlZCB3aXRoaW4gYSBmZXcgZGVidWdmcyBmaWxlczogYHB0ZHVtcF9zaG93YCwgYHB0ZHVtcF9jdXJrbmxfc2hvd2AsIGBwdGR1bXBfY3VydXNyX3Nob3dgLCBhbmQgYHB0ZHVtcF9lZmlfc2hvd2AuIEdpdmVuIHRoYXQgaXQncyB0aWVkIHRvIGRlYnVnZnMsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYFBURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIGluIG15IGN1cnJlbnQgZW52aXJvbm1lbnQuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5Ob3csIGxldCBtZSB6b29tIGluIG9uIHRoZSBjb3JlIHN5bWJvbHMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSB1c2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSdyZSB3b3JraW5nIHdpdGggbWVtb3J5IHBlcm1pc3Npb25zOiBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfNGtgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBgc2V0X21lbW9yeV9lbmNyeXB0ZWRgLCBhbmQgYHNldF9tZW1vcnlfZGVjcnlwdGVkYC4gVGhpcyBzdWdnZXN0cyBhIGZvY3VzIG9uIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIHdoaWNoIGlzbid0IHVudXN1YWwuXG5cblRoZSBuZXh0IHRoaW5nIEknbGwgbmVlZCB0byBrbm93IGlzIGlmIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAgYW5kIGBzZXRfbWVtb3J5X2RlY3J5cHRlZGAgYXJlIGFsd2F5cyBhdmFpbGFibGUsIG9yIGlmIHRoZXkncmUgZGVwZW5kZW50IG9uIHNvbWUgY29uZmlndXJhdGlvbi4gSSBrbm93IHRob3NlIGFyZSBsZXNzIGNvbW1vbmx5IGVuYWJsZWQsIHNvIHRoYXQncyBzb21ldGhpbmcgdGhhdCBJJ2xsIG5lZWQgdG8gdmVyaWZ5IGJlZm9yZSBJIGNhbiBwcm9jZWVkIHdpdGggYW55IG1lYW5pbmdmdWwgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM0NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODo0Ny42MDc3MTEzOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODQ1MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlfZW5jcnlwdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTA5PXN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI0LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyNTppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyOC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI5OkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZW5jcnlwdGVkKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE1OjE4OjQ3LjY1NjU2MTYyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE1NzM1MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBQZXJtaXNzaW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBiZWluZyBcImV4cG9ydGVkLFwiIGFuZCB0aGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMuIExldCdzIGRpZyBpbnRvIHRoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoYXQgZXhwb3J0IGlzIGhhcHBlbmluZyBpbiB0aGUgY29udGV4dCBvZiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0J3MgcmVsYXRlZCB0byBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIGJlaW5nIG1hZGUgYWNjZXNzaWJsZSwgcHJvYmFibHkgZnJvbSB1c2VyIHNwYWNlLlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhgIC0gSSdtIGFsbW9zdCBjZXJ0YWluIGBzZXRfbWVtb3J5X3JvYCBhbmQgYHNldF9tZW1vcnlfcndgIGFyZSBnb2luZyB0byBiZSBrZXkgZnVuY3Rpb25zIGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlc2UgcHJpbWl0aXZlcyBhcmUgdXNlZCB0byBjaGFuZ2UgbWVtb3J5IHByb3RlY3Rpb24gYXR0cmlidXRlcy4gSSdsbCBuZWVkIHRvIGFuYWx5emUgaG93IHRob3NlIGZ1bmN0aW9ucyBtYXAgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgbWVjaGFuaXNtcywgbGlrZSB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBjb250cm9sIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnMgKENSMCwgQ1IzKSwgYW5kIHBvdGVudGlhbGx5IHRoZSBNU1JzIHJlbGF0ZWQgdG8gbWVtb3J5IHByb3RlY3Rpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBpbiBjcmVhdGluZyBvciBtb2RpZnlpbmcgdGhlICdleHBvcnQnIG9mIHRoaXMgbWVtb3J5LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgJ2V4cG9ydGVkJyBtZW1vcnkgbWVhbnMgaXQncyBub3cgYWNjZXNzaWJsZSBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBhbmQgYHNldF9tZW1vcnlfcm9gIGFuZCBgc2V0X21lbW9yeV9yd2AgZ2l2ZSBhIGNsdWUgdG8gd2hhdCB0aGUgKmNoYW5nZSogaW4gY29udGV4dCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMjUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODo1Mi40NzIyOTk4OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjcyNDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5X3JvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOC1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTojZGVmaW5lIHNldF9tZW1vcnlfcm94IHNldF9tZW1vcnlfcm94XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjEwOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODo1Mi44NzkwMzI4NDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MDU0MTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExhYnlyaW50aGluZSBIZWFkZXIgRmlsZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgc2V0X21lbW9yeV9yb2AgaXMgZGVjbGFyZWQuIE5vdCBhIGJpZyBkZWFsLCBJIGtub3cgdGhpcyB0ZXJyaXRvcnkuIExldCBtZSBjaGVjayB0aGUgc3RhbmRhcmQgcGxhY2Vz4oCmIEFoLCB0aGVyZSBpdCBpcyEgSSBqdXN0IGNoZWNrZWQgYW5kIGNvbmZpcm1lZCB0aGF0IGBzZXRfbWVtb3J5X3JvYCBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhgLiBHb29kLCBnb29kLiBUaGF0J3MgZXhhY3RseSB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGl0LiBOb3cgSSBjYW4gbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxODo1Ni41Mjk1Nzc3MjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTc5NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlfcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTAtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxMTpzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTEyLXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD0xND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMTYtXFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6MTc6I2lmbmRlZiBzZXRfbWVtb3J5X3JveFxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjE4OnN0YXRpYyBpbmxpbmUgaW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE5LXtcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoyMDpcXHRpbnQgcmV0ID0gc2V0X21lbW9yeV9ybyhhZGRyLCBudW1wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmgtMjEtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTg6NTYuNTc2MTg2NTkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzQwMDQ1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBTZXR0aW5nIEZ1bmN0aW9ucyBhbmQgUmVsYXRlZCBEZWJ1Z2dpbmcgVG9vbHMqKlxuXG5Pa2F5LCBzbyBgc2V0X21lbW9yeV9yb2AsIHRoYXQga2V5IGZ1bmN0aW9uLCBpcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaGAgdW5kZXIgdGhhdCBgI2lmZGVmIENPTkZJR19BUkNIX0hBU19TRVRfTUVNT1JZYCBjb25kaXRpb25hbC4gR29vZCwgc2luY2Ugd2UgYXJlIG9uIHg4NiwgaXQncyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGF2YWlsYWJsZS4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBrZWVwIHRoZXNlIGluIG1pbmQ6IGBERUJVR19QQUdFQUxMT0NgLCBgREVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUYCwgYW5kIGFsc28gYFBURFVNUF9ERUJVR0ZTYC4gVGhlc2Ugb2Z0ZW4gcmVsYXRlIHRvIGRlYnVnZ2luZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBzbyB0aGV5IGNvdWxkIGJlIHJlbGV2YW50LlxuXG5OZXh0LCBJIG5lZWQgdG8gbGlzdCBvdXQgdGhlIGtleSBzeW1ib2xzLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfNGtgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBgc2V0X21lbW9yeV9lbmNyeXB0ZWRgLCBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgLlxuXG5BaCEgQW5kLCBsZXQncyBub3QgZm9yZ2V0IGFib3V0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AuIEl0J3MgdGhhdCBsaXR0bGUgZ2VtIHRoYXQgbWlnaHQgaGVscCB0cmlnZ2VyIHRoZSBwdGR1bXAgcmFjZS4gSSByZW1lbWJlciB0aGF0J3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBkZWJ1Z2ZzLiBXYWl0LCBpcyB0aGF0IGZ1bmN0aW9uIGV4cG9ydGVkPyBOb3BlLiBCdXQsIGl0IGlzIHJlYWNoYWJsZSB2aWEgZGVidWdmcywgc28gaXQncyBmYWlyIGdhbWUuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AgaXNuJ3Qgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA4OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNToxOTowMi42NTAxOTM1NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODAyMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9OD1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtOS17XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjEwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFxcdTAwMjZpbml0X21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTExLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTE2PXN0YXRpYyBpbnQgcHRkdW1wX2N1cmtubF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xOC1cXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTk6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cXHUwMDNlbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MjY9c3RhdGljIGludCBwdGR1bXBfY3VydXNyX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTI4LVxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyOTpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVxcdTAwM2VtbSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTMwLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jPTM3PXN0YXRpYyBpbnQgcHRkdW1wX2VmaV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cXHRpZiAoZWZpX21tLnBnZClcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6NDA6XFx0XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXFx1MDAyNmVmaV9tbSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ3ND12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTk6MDIuNzM3MDAwMTk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTMyODk2MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzbid0IGp1c3QgYSBtaW5vciB0d2VhazsgaXQncyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQgd2l0aGluIHRoZSB4ODYgcGFnZSBhdHRyaWJ1dGUgY29kZSwgc28gSSBuZWVkIHRvIHRob3JvdWdobHkgZXZhbHVhdGUgaXRzIGltcGxpY2F0aW9ucy4gV2hpbGUgdGhlIHRhcmdldCBmdW5jdGlvbiBpc24ndCBzdGF0aWMsIGl0J3Mgc3RpbGwgYWNjZXNzaWJsZSB0aHJvdWdoIGB2bWxpbnV4YCwgd2hpY2ggaXMgZ3JlYXQgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbk15IGltbWVkaWF0ZSBmb2N1cywgZ2l2ZW4gdGhlIGNoYW5nZXMsIGlzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2Agc2luY2UgdGhhdCdzIHdoYXQncyBhY3R1YWxseSBjYWxsZWQgZnJvbSBkZWJ1Z2ZzLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIHN5bWJvbHMuXG5cbkkndmUgY29uZmlybWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYENPTkZJR19ERUJVR19QQUdFQUxMT0NgLCBgQ09ORklHX0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVGAsIGFuZCBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiB0ZXN0IHRoZSBuZXcgbG9naWMgcHJvcGVybHkuXG5cbk5vdywgbGV0J3MgbG9vayBjbG9zZWx5IGF0IHRoZSBjb2RlIGl0c2VsZi4gSSBzZWUgYSBjb25kaXRpb25hbCBsb2NrIGNoYW5nZSB3aXRoIGBkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCgpYC4gVGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZyBpbiB0ZXJtcyBvZiByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpZiB0aGF0IGdldHMgZW5hYmxlZC9kaXNhYmxlZC4gVGhlIHJlYWwgY29yZSBpcyB0aGUgbG9ja2luZyBhbmQgdW5sb2NraW5nIGFyb3VuZCBgaW5pdF9tbWAsIGFuZCB0aG9zZSBjaGFuZ2VzIGFyZSBpbXBvcnRhbnQuIFdlJ3JlIGludHJvZHVjaW5nIGBtbWFwX3dyaXRlX2xvY2tgIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGFuZCBhZGRpbmcgYG1tYXBfcmVhZF9sb2NrYCBpbiBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYC4gQWxzbywgdGhlIG1hbmlwdWxhdGlvbiBvZiBsb2NrcyBhcm91bmQgYHB0ZV9hbGxvY19vbmVfa2VybmVsYCwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBsb2NraW5nIHN0cmF0ZWd5IHVzaW5nIGBtbWFwX3JlYWRfbG9ja2AgYW5kIGBtbWFwX3dyaXRlX2xvY2tgIG9uIGBpbml0X21tYCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBpbnZvbHZpbmcgYHB0ZHVtcGAgYW5kIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCBhbmQgY29sbGFwc2VkLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiB0aGF0IGlzIHZlcnkgbGlrZWx5IHRvIGJlIGV4ZXJjaXNlZCwgYW5kIGFzIHN1Y2ggaXMgYSBrZXkgYXJlYSBmb3IgZnV6emluZy5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgY3JpdGljYWwgYW5kIGhpZ2hseSByZWFjaGFibGUuIFRoZSBtb2RpZmljYXRpb25zIHRvIHRoZSBsb2NraW5nIGFuZCBob3cgbGFyZ2UgcGFnZXMgYXJlIGhhbmRsZWQgcmVxdWlyZSBleHRlbnNpdmUgZnV6emluZyB0byBlbnN1cmUgd2UgZG9uJ3QgaW50cm9kdWNlIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuXG5cblNvLCBJJ20gZ29pbmcgdG8gYWRkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyB0byB0aGUgZm9jdXMgbGlzdDogYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X254YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5XzRrYCwgYHNldF9tZW1vcnlfbnBgLCBhbmQgYHNldF9tZW1vcnlfcGAuIEFuZCBvZiBjb3Vyc2UsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc2AuXG5cbkZpbmFsbHksIEkgd2lsbCBub3cgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ4NiwiT3V0cHV0VG9rZW5zIjoyNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTU6MTk6MTYuNjY5ODk4NjE1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1MTA5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX1BBR0VBTExPQ1wiLFxuICAgIFwiREVCVUdfUEFHRUFMTE9DX0VOQUJMRV9ERUZBVUxUXCIsXG4gICAgXCJQVERVTVBfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfbnhcIixcbiAgICBcInNldF9tZW1vcnlfeFwiLFxuICAgIFwic2V0X21lbW9yeV80a1wiLFxuICAgIFwic2V0X21lbW9yeV9ucFwiLFxuICAgIFwic2V0X21lbW9yeV9wXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHg4NiBwYWdlIGF0dHJpYnV0ZSBtYW5pcHVsYXRpb24gY29kZSAoQ1BBKS4gSXQgaW50cm9kdWNlcyBuZXcgbG9ja2luZyBzZW1hbnRpY3MgdXNpbmcgbW1hcF9yZWFkX2xvY2sgYW5kIG1tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdpdGggcHRkdW1wIGFuZCBjb25jdXJyZW50IENQQSB3YWxrZXJzLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGxvY2tpbmcgYmVoYXZpb3Igd2hlbiBkZWJ1Z19wYWdlYWxsb2MgaXMgZW5hYmxlZCBhbmQgbW9kaWZpZXMgaG93IGxhcmdlIHBhZ2VzIGFyZSBzcGxpdCBhbmQgY29sbGFwc2VkLiBUaGVzZSBhcmUgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG1lbW9yeSBsZWFrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19QQUdFQUxMT0NcIixcbiAgICBcIkRFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVFwiLFxuICAgIFwiUFREVU1QX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X254XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIixcbiAgICBcInNldF9tZW1vcnlfNGtcIixcbiAgICBcInNldF9tZW1vcnlfbnBcIixcbiAgICBcInNldF9tZW1vcnlfcFwiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB4ODYgcGFnZSBhdHRyaWJ1dGUgbWFuaXB1bGF0aW9uIGNvZGUgKENQQSkuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgc2VtYW50aWNzIHVzaW5nIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIHB0ZHVtcCBhbmQgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBsb2NraW5nIGJlaGF2aW9yIHdoZW4gZGVidWdfcGFnZWFsbG9jIGlzIGVuYWJsZWQgYW5kIG1vZGlmaWVzIGhvdyBsYXJnZSBwYWdlcyBhcmUgc3BsaXQgYW5kIGNvbGxhcHNlZC4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf49f[1] Phase: Succeeded StartedAt: 2026-07-29 15:19:28 +0000 UTC FinishedAt: 2026-07-29 15:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 15:19:28 +0000 UTC FinishedAt: 2026-07-29 15:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[2] Phase: Succeeded StartedAt: 2026-07-29 15:19:28 +0000 UTC FinishedAt: 2026-07-29 16:33:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-29 15:19:28 +0000 UTC FinishedAt: 2026-07-29 16:33:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 15:19:28 +0000 UTC FinishedAt: 2026-07-29 15:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 15:19:28 +0000 UTC FinishedAt: 2026-07-29 15:19:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmf49f/series-workflowmf49f-convert-artifact-4022605238/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 15:19:38 +0000 UTC FinishedAt: 2026-07-29 15:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 15:19:38 +0000 UTC FinishedAt: 2026-07-29 15:42:24 +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:*a13ce600-be14-46f1-882d-3a7bfd33c343,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-workflowmf49f/series-workflowmf49f-convert-artifact-4022605238/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": "eb3a42a0-1f3a-43cf-9de8-673f71423d2a", "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-workflowmf49f/series-workflowmf49f-build-action-3944037580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 15:19:38 +0000 UTC FinishedAt: 2026-07-29 15:42:13 +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:*a13ce600-be14-46f1-882d-3a7bfd33c343,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-workflowmf49f/series-workflowmf49f-convert-artifact-4022605238/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": "eb3a42a0-1f3a-43cf-9de8-673f71423d2a", "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-workflowmf49f/series-workflowmf49f-build-action-3944037580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 15:42:24 +0000 UTC FinishedAt: 2026-07-29 15:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 15:42:24 +0000 UTC FinishedAt: 2026-07-29 15:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 15:42:24 +0000 UTC FinishedAt: 2026-07-29 15:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 15:42:24 +0000 UTC FinishedAt: 2026-07-29 15:42:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmf49f/series-workflowmf49f-convert-artifact-2747199305/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 15:42:35 +0000 UTC FinishedAt: 2026-07-29 16:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 15:42:35 +0000 UTC FinishedAt: 2026-07-29 16:33:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eb3a42a0-1f3a-43cf-9de8-673f71423d2a,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-workflowmf49f/series-workflowmf49f-build-action-3944037580/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": false },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-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-07-29 16:33:40 +0000 UTC FinishedAt: 2026-07-29 16:33:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmf49f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_ro","set_memory_rw","set_memory_nx","set_memory_x","set_memory_4k","set_memory_np","set_memory_p","ptdump_walk_pgd_level_debugfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a5a162fe1ae130e3d2ceefef3f43afe3773c1d56","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_PAGEALLOC","DEBUG_PAGEALLOC_ENABLE_DEFAULT","PTDUMP_DEBUGFS"],"series_id":"2bfc0803-688c-4f51-9f10-b8cc0b769543","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-07-29 16:33:40 +0000 UTC FinishedAt: 2026-07-29 16:33:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}