Name: series-workflow6h2wl Phase: Succeeded StartedAt: 2026-08-29 17:09:17 +0000 UTC FinishedAt: 2026-08-29 21:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[0] Phase: Succeeded StartedAt: 2026-08-29 17:09:17 +0000 UTC FinishedAt: 2026-08-29 17:40:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 17:09:17 +0000 UTC FinishedAt: 2026-08-29 17:40:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_PSP", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_PSP", "INET" ], "series_id": "274b1530-52de-430c-b5e9-dcf2bf0bf1af" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sk_clone", "psp_sock_assoc_set_rx", "psp_sock_assoc_set_tx", "psp_sk_assoc_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfY2xvbmUmIzM0OywKICAgICYjMzQ7cHNwX3NvY2tfYXNzb2Nfc2V0X3J4JiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF90eCYjMzQ7LAogICAgJiMzNDtwc3Bfc2tfYXNzb2NfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza19jbG9uZSgpYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIHZpYSBgUkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpYC4gXG5cbldoZW4gYSBzb2NrZXQgaXMgY2xvbmVkLCBgc29ja19jb3B5KClgIHBlcmZvcm1zIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzb2NrZXQgc3RydWN0dXJlIGZyb20gcGFyZW50IHRvIGNoaWxkLiBXaXRob3V0IGNsZWFyaW5nIGBuZXdzay1cdTAwM2Vwc3BfYXNzb2NgLCB0aGUgY2xvbmVkIHNvY2tldCBpbmhlcml0ZWQgdGhlIHBhcmVudCYjMzk7cyBwb2ludGVyIHRvIGBzdHJ1Y3QgcHNwX2Fzc29jYCB3aXRob3V0IHRha2luZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudC4gVXBvbiBkZXN0cnVjdGlvbiBvZiB0aGUgY2xvbmVkIHNvY2tldCAoYHBzcF9za19hc3NvY19mcmVlYCksIGBwc3BfYXNzb2NfcHV0KClgIHdvdWxkIGJlIGNhbGxlZCwgbGVhZGluZyB0byByZWZlcmVuY2UgdW5kZXJmbG93LCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgZXJyb3JzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWRkcmVzc2luZyBvYmplY3QgbGlmZWN5Y2xlLCBwb2ludGVyIGFsaWFzaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyAod2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgc29ja2V0JiMzOTtzIHBzcF9hc3NvYyBwb2ludGVyIGlzIGNsZWFyZWQgZHVyaW5nIHNrX2Nsb25lKCkgd2hlbiBJTkVUX1BTUCBpcyBlbmFibGVkLCBwcmV2ZW50aW5nIHRoZSBuZXdseSBjbG9uZWQgc29ja2V0IGZyb20gaW5oZXJpdGluZyB0aGUgcGFyZW50IHNvY2tldCYjMzk7cyBQU1AgYXNzb2NpYXRpb24gcG9pbnRlciB3aXRob3V0IGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50LiBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1mcmVlIGNvbmRpdGlvbnMgdXBvbiBzb2NrZXQgZGVzdHJ1Y3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYTVhODVlYmJhYzY5NzUyZTBhZmFmNmNhODg4YjUzYWE1NmYwNDlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTc6MjM6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCAxYWQ0MTkwNGRiMjViLi5mYTYwYjc0OTRjNTg2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0yNDk0LDYgJiM0MzsyNDk0LDkgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vza19icGZfc3RvcmFnZSwgTlVMTCk7XG4gI2VuZGlmXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbiYjNDM7XHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG4mIzQzOyNlbmRpZlxuIFxuIFx0LyogU0FOSVRZICovXG4gXHRpZiAobGlrZWx5KG5ld3NrLVx1MDAzZXNrX25ldF9yZWZjbnQpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2Nsb25lJiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF9yeCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfdHgmIzM0OywKICAgICYjMzQ7cHNwX3NrX2Fzc29jX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQmIzM5O3MgcHNwX2Fzc29jIHBvaW50ZXIgaXMgY2xlYXJlZCBkdXJpbmcgc2tfY2xvbmUoKSB3aGVuIElORVRfUFNQIGlzIGVuYWJsZWQsIHByZXZlbnRpbmcgdGhlIG5ld2x5IGNsb25lZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQgc29ja2V0JiMzOTtzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNhNWE4NWViYmFjNjk3NTJlMGFmYWY2Y2E4ODhiNTNhYTU2ZjA0OWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxNzoyMzoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCAxYWQ0MTkwNGRiMjViLi5mYTYwYjc0OTRjNTg2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jCkBAIC0yNDk0LDYgJiM0MzsyNDk0LDkgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksCiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiAJUkNVX0lOSVRfUE9JTlRFUihuZXdzay0mZ3Q7c2tfYnBmX3N0b3JhZ2UsIE5VTEwpOwogI2VuZGlmCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKQomIzQzOwlSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtwc3BfYXNzb2MsIE5VTEwpOwomIzQzOyNlbmRpZgogCiAJLyogU0FOSVRZICovCiAJaWYgKGxpa2VseShuZXdzay0mZ3Q7c2tfbmV0X3JlZmNudCkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MgoJCQkJCQkJb3V0cHV0OiA3MAoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbW1pdC4gVGhlIGluaXRpYWwgZm9jdXMgaXMgdGhlIGNoYW5nZSB3aXRoaW4gYG5ldC9jb3JlL3NvY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYHNrX2Nsb25lYCBmdW5jdGlvbi4gVGhlIHBhdGNoIGl0c2VsZiBpcyBzaW1wbGUsIGEgY29uZGl0aW9uYWwgaW5pdGlhbGl6YXRpb246CgpgYGBjCiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUCkKCVJDVV9JTklUX1BPSU5URVIobmV3c2stJmd0O3BzcF9hc3NvYywgTlVMTCk7CiNlbmRpZgpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCB1c2UgYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY29tbWFuZCB0byBwdWxsIHVwIGBuZXQvY29yZS9zb2NrLmNgIGFyb3VuZCBsaW5lIDI0OTQgdG8gc2VlIHdoYXQgc3Vycm91bmRzIHRoaXMgY29kZS4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGxpa2VseSBnaXZlIGluc2lnaHRzIGludG8gd2h5IHRoaXMgbGluZSBvZiBjb2RlIGV4aXN0cy4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYENPTkZJR19JTkVUX1BTUGAgYW5kIGBwc3BfYXNzb2NgLiBJIHdpbGwgc2VhcmNoIHRoZSBlbnRpcmUgdHJlZSBmb3IgYm90aCBvZiB0aGVzZSwgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIHVzaW5nIGBncmVwcGVyYCBvciBhIHNpbWlsYXIgdG9vbC4gVGhpcyBzaG91bGQgcGFpbnQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ4MDpcdFx0XHQgICAgICBib29sIGxvY2spXG4yNDgxOlx0e1xuMjQ4MjpcdFx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuMjQ4MzpcdFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xuMjQ4NDpcdFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcbjI0ODU6XHRcdHN0cnVjdCBzb2NrICpuZXdzaztcbjI0ODY6XHRcbjI0ODc6XHRcdG5ld3NrID0gc2tfcHJvdF9hbGxvYyhwcm90LCBwcmlvcml0eSwgc2stXHUwMDNlc2tfZmFtaWx5KTtcbjI0ODg6XHRcdGlmICghbmV3c2spXG4yNDg5Olx0XHRcdGdvdG8gb3V0O1xuMjQ5MDpcdFxuMjQ5MTpcdFx0c29ja19jb3B5KG5ld3NrLCBzayk7XG4yNDkyOlx0XG4yNDkzOlx0XHRuZXdzay1cdTAwM2Vza19wcm90X2NyZWF0b3IgPSBwcm90O1xuMjQ5NDpcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbjI0OTU6XHRcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xuMjQ5NjpcdCNlbmRpZlxuMjQ5NzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbjI0OTg6XHRcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbjI0OTk6XHQjZW5kaWZcbjI1MDA6XHRcbjI1MDE6XHRcdC8qIFNBTklUWSAqL1xuMjUwMjpcdFx0aWYgKGxpa2VseShuZXdzay1cdTAwM2Vza19uZXRfcmVmY250KSkge1xuMjUwMzpcdFx0XHRnZXRfbmV0X3RyYWNrKHNvY2tfbmV0KG5ld3NrKSwgXHUwMDI2bmV3c2stXHUwMDNlbnNfdHJhY2tlciwgcHJpb3JpdHkpO1xuMjUwNDpcdFx0XHRzb2NrX2ludXNlX2FkZChzb2NrX25ldChuZXdzayksIDEpO1xuMjUwNTpcdFx0fSBlbHNlIHtcbjI1MDY6XHRcdFx0LyogS2VybmVsIHNvY2tldHMgYXJlIG5vdCBlbGV2YXRpbmcgdGhlIHN0cnVjdCBuZXQgcmVmY291bnQuXG4yNTA3Olx0XHRcdCAqIEluc3RlYWQsIHVzZSBhIHRyYWNrZXIgdG8gbW9yZSBlYXNpbHkgZGV0ZWN0IGlmIGEgbGF5ZXJcbjI1MDg6XHRcdFx0ICogaXMgbm90IHByb3Blcmx5IGRpc21hbnRsaW5nIGl0cyBrZXJuZWwgc29ja2V0cyBhdCBuZXRuc1xuMjUwOTpcdFx0XHQgKiBkZXN0cm95IHRpbWUuXG4yNTEwOlx0XHRcdCAqL1xuMjUxMTpcdFx0XHRuZXRfcGFzc2l2ZV9pbmMoc29ja19uZXQobmV3c2spKTtcbjI1MTI6XHRcdFx0X19uZXRuc190cmFja2VyX2FsbG9jKHNvY2tfbmV0KG5ld3NrKSwgXHUwMDI2bmV3c2stXHUwMDNlbnNfdHJhY2tlcixcbjI1MTM6XHRcdFx0XHRcdCAgICAgIGZhbHNlLCBwcmlvcml0eSk7XG4yNTE0Olx0XHR9XG4yNTE1Olx0XG4yNTE2Olx0XHRza19ub2RlX2luaXQoXHUwMDI2bmV3c2stXHUwMDNlc2tfbm9kZSk7XG4yNTE3Olx0XHRzb2NrX2xvY2tfaW5pdChuZXdzayk7XG4yNTE4Olx0XG4yNTE5Olx0XHRpZiAobG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTkVUX1BTUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yMTA9Y29uZmlnIE1MWDVfRU5fUFNQXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMTEtXHRib29sIFwmIzM0O01lbGxhbm94IFRlY2hub2xvZ2llcyBzdXBwb3J0IGZvciBQU1AgY3J5cHRvZ3JhcGh5LW9mZmxvYWQgYWNjZWxlcmF0aW9uXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzoyMTI6XHRkZXBlbmRzIG9uIElORVRfUFNQXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMTMtXHRkZXBlbmRzIG9uIE1MWDVfQ09SRV9FTlxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZT0xOT1lbmRpZlxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTIwLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlOjIxOmlmbmVxICgkKENPTkZJR19JTkVUX1BTUCksKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTIyLW5ldGRldnNpbS1vYmpzICYjNDM7PSBwc3Aub1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NDktXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTEtaW50IG5zaW1fcHNwX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzg4LSNlbmRpZlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM5MC1cdHN0cnVjdCBwc3BfZGV2IF9fcmN1XHQqcHNwX2Rldjtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwNDM9ZW51bSBza2JfZXh0X2lkIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTgtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDYwLVx0U0tCX0VYVF9QU1AsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODQtXHRzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXRcdCp0d190YjI7XG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaDo4NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ni1cdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcdCAgKnBzcF9hc3NvYztcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mjc9c3RhdGljIGlubGluZSB2b2lkICpwc3BfYXNzb2NfZHJ2X2RhdGEoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zMS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzMtdW5zaWduZWQgaW50IHBzcF9rZXlfc2l6ZSh1MzIgdmVyc2lvbik7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTQ2Ni0jZW5kaWZcbmluY2x1ZGUvbmV0L3NvY2suaDo0Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvc29jay5oLTQ2OC1cdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcdCpwc3BfYXNzb2M7XG4tLVxubmV0L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19VTklYKVx0XHQmIzQzOz0gdW5peC9cbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXHRcdCYjNDM7PSBwc3AvXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcdFx0XHRcdCYjNDM7PSBpcHY2L1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTUxNTA9c3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MTY1LSNlbmRpZlxubmV0L2NvcmUvc2tidWZmLmM6NTE2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5uZXQvY29yZS9za2J1ZmYuYy01MTY3LVx0W1NLQl9FWFRfUFNQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHBzcF9za2JfZXh0KSxcbi0tXG5uZXQvY29yZS9zb2NrLmM9MjQ3OT1zdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjQ5Ni0jZW5kaWZcbm5ldC9jb3JlL3NvY2suYzoyNDk3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbm5ldC9jb3JlL3NvY2suYy0yNDk4LVx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xuLS1cbm5ldC9wc3AvS2NvbmZpZy00LSNcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxubmV0L3BzcC9LY29uZmlnLTYtXHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3BzcC9NYWtlZmlsZS0yLVxubmV0L3BzcC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19JTkVUX1BTUCkgJiM0Mzs9IHBzcC5vXG5uZXQvcHNwL01ha2VmaWxlLTQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnPTM9Q09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVM9blxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnOjQ6Q09ORklHX0lORVRfUFNQPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZy01LUNPTkZJR19JUFY2PXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc3BfYXNzb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jPTkzMT1zdHJ1Y3QgcHNwX2tleSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTkzNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYzo5MzU6c3RhdGljIGludCBtbHg1ZV9wc3BfYXNzb2NfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05MzYtXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtOTYwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjk2MTpzdGF0aWMgdm9pZCBtbHg1ZV9wc3BfYXNzb2NfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05NjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz0xMDExPXN0YXRpYyBzdHJ1Y3QgcHNwX2Rldl9vcHMgbWx4NV9wc3Bfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy0xMDEzLVx0LnJ4X3NwaV9hbGxvYyA9IG1seDVlX3BzcF9yeF9zcGlfYWxsb2MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6MTAxNDpcdC50eF9rZXlfYWRkICAgPSBtbHg1ZV9wc3BfYXNzb2NfYWRkLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjEwMTU6XHQudHhfa2V5X2RlbCAgID0gbWx4NWVfcHNwX2Fzc29jX2RlbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy0xMDE2LVx0LmtleV9yb3RhdGUgICA9IG1seDVlX3BzcF9rZXlfcm90YXRlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jPTkzPXN0YXRpYyBib29sIG1seDVlX3BzcF9zZXRfc3RhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMtOTYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmM6OTc6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYy05OC1cdGJvb2wgcmV0ID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTE4PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMi1cdHN0cnVjdCBwc3BfZGV2ICpwZWVyX3BzZDtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMzpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNC1cdHN0cnVjdCBuZXQgKm5ldDtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMzktXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6NDA6XHRwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy00MS1cdGlmICgqcHRyICE9IG5zKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTEzMT1uc2ltX3J4X3NwaV9hbGxvYyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1MzIgdmVyc2lvbixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE1MjpzdGF0aWMgaW50IG5zaW1fYXNzb2NfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTMtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1NS1cdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gcHNkLVx1MDAzZWRydl9wcml2O1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE1NjpcdHZvaWQgKipwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTctXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTE2NT1zdGF0aWMgaW50IG5zaW1fa2V5X3JvdGF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE3OS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxODA6c3RhdGljIHZvaWQgbnNpbV9hc3NvY19kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4MS17XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTgyLVx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBwc2QtXHUwMDNlZHJ2X3ByaXY7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTgzOlx0dm9pZCAqKnB0ciA9IHBzcF9hc3NvY19kcnZfZGF0YShwYXMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4NC1cbi0tXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD0zMz1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrIHtcbi0tXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04NS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaDo4NjpcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcdCAgKnBzcF9hc3NvYztcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg3LSNlbmRpZlxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0yMj1pbnQgcHNwX2Rldl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGRldl9pZCwgdTggZ2VuZXJhdGlvbiwgYm9vbCBzdHJpcF9pY3YpO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yNC0vKiBLZXJuZWwtZmFjaW5nIEFQSSAqL1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjI1OnZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTI2LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjI3OnN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2Fzc29jX2Rydl9kYXRhKHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yOC17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTM3PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zOC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDAte1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQxOlx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhzay1cdTAwM2Vwc3BfYXNzb2MsIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDItfVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD00NT1wc3BfZW5xdWV1ZV9zZXRfZGVjcnlwdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00Ni17XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6NDc6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDgtXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTY5PXN0YXRpYyBpbmxpbmUgYm9vbFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjcwOnBzcF9pc19hbGxvd2VkX25vbmRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTcxLXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9ODI9c3RhdGljIGlubGluZSBib29sXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6ODM6cHNwX3BzZV9tYXRjaGVzX3BhcyhzdHJ1Y3QgcHNwX3NrYl9leHQgKnBzZSwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTg0LXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9OTE9c3RhdGljIGlubGluZSBlbnVtIHNrYl9kcm9wX3JlYXNvblxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjkyOl9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtOTMte1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMjI9cHNwX3R3c2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyMy17XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTI0Olx0cmV0dXJuIF9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhza2IsIHJjdV9kZXJlZmVyZW5jZSh0dy1cdTAwM2Vwc3BfYXNzb2MpKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjUtfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyNi1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjc6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfZ2V0X2Fzc29jX3JjdShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTI4LXtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjk6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTMwLVx0aW50IHN0YXRlO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMzYtXHRwYXMgPSBzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUID9cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMzc6XHRcdCAgICAgIHJjdV9kZXJlZmVyZW5jZShpbmV0X3R3c2soc2spLVx1MDAzZXBzcF9hc3NvYykgOlxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjEzODpcdFx0ICAgICAgcmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXBzcF9hc3NvYyk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTM5LVx0cmV0dXJuIHBhcztcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTQxLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE0MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za2JfZ2V0X2Fzc29jX3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE0My17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE1MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwc3Bfc2tfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTItXHRpbnQgcHNwX2VuY2FwID0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7IFBTUF9IRFJfU0laRSAmIzQzOyBQU1BfVFJMX1NJWkU7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTUzOlx0Ym9vbCBoYXNfcHNwID0gcmN1X2FjY2Vzc19wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYyk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU0LVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNjM9cHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7IH1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjQtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTY1OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjYte1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xODc9cHNwX3R3c2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xOTEtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTkyOnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrYl9nZXRfYXNzb2NfcmN1KHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTkzLXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaD00Mz1zdHJ1Y3QgcHNwX2Rldl9jb25maWcge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTUzLS8qKlxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NTQ6ICogc3RydWN0IHBzcF9hc3NvY19kZXYgLSB3cmFwcGVyIGZvciBhc3NvY2lhdGVkIG5ldF9kZXZpY2VcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTU1LSAqIEBkZXZfbGlzdDogbGlzdCBub2RlIGZvciBwc3BfZGV2Ojphc3NvY19kZXZfbGlzdFxuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTU4LSAqL1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NTk6c3RydWN0IHBzcF9hc3NvY19kZXYge1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjAtXHRzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0O1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTY3LSAqIEBtYWluX25ldGRldjogb3JpZ2luYWwgbmV0ZGV2aWNlIG9mIHRoaXMgUFNQIGRldmljZVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6Njg6ICogQGFzc29jX2Rldl9saXN0OiBsaXN0IG9mIHBzcF9hc3NvY19kZXYgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQU1AgZGV2aWNlXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC02OS0gKiBAYXNzb2NfZGV2X2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGFzc29jX2Rldl9saXN0XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTI0PXN0cnVjdCBwc3BfZGV2X2NhcHMge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEzMi1cdCAqIEBhc3NvY19kcnZfc3BjOiBzaXplIG9mIGRyaXZlci1zcGVjaWZpYyBzdGF0ZSBpbiBUeCBhc3NvY1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MTMzOlx0ICogRGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiBzdHJ1Y3QgcHNwX2Fzc29jOjpkcnZfZGF0YVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTM0LVx0ICovXG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTUwPXN0cnVjdCBwc3Bfa2V5X3BhcnNlZCB7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTU0LVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MTU1OnN0cnVjdCBwc3BfYXNzb2Mge1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTU2LVx0c3RydWN0IHBzcF9kZXYgKnBzZDtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaD0xOTU9c3RydWN0IHBzcF9kZXZfb3BzIHtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMjItXHQgKi9cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjIyMzpcdGludCAoKnR4X2tleV9hZGQpKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIyNC1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjI4LVx0ICovXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoyMjk6XHR2b2lkICgqdHhfa2V5X2RlbCkoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIzMC1cbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MjQyPXN0cnVjdCBza19maWx0ZXI7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI1OC0gICpcdEBza19wb2xpY3k6IGZsb3cgcG9saWN5XG5pbmNsdWRlL25ldC9zb2NrLmg6MjU5OiAgKlx0QHBzcF9hc3NvYzogUFNQIGFzc29jaWF0aW9uLCBpZiBzb2NrZXQgaXMgUFNQLXNlY3VyZWRcbmluY2x1ZGUvbmV0L3NvY2suaC0yNjAtICAqXHRAc2tfcmVjZWl2ZV9xdWV1ZTogaW5jb21pbmcgcGFja2V0c1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC00NjctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvc29jay5oOjQ2ODpcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcdCpwc3BfYXNzb2M7XG5pbmNsdWRlL25ldC9zb2NrLmgtNDY5LSNlbmRpZlxuLS1cbm5ldC9jb3JlL3NvY2suYz0yNDc5PXN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNDk3LSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbm5ldC9jb3JlL3NvY2suYzoyNDk4Olx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xubmV0L2NvcmUvc29jay5jLTI0OTktI2VuZGlmXG4tLVxubmV0L3BzcC9wc3AtbmwtZ2VuLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBwc3Bfbmxfb3BzW10gPSB7XG4tLVxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTA1LVx0XHQuY21kXHRcdD0gUFNQX0NNRF9SWF9BU1NPQyxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jOjEwNjpcdFx0LnByZV9kb2l0XHQ9IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZCxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTEwNy1cdFx0LmRvaXRcdFx0PSBwc3BfbmxfcnhfYXNzb2NfZG9pdCxcbi0tXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy0xMTQtXHRcdC5jbWRcdFx0PSBQU1BfQ01EX1RYX0FTU09DLFxubmV0L3BzcC9wc3AtbmwtZ2VuLmM6MTE1Olx0XHQucHJlX2RvaXRcdD0gcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkLFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTE2LVx0XHQuZG9pdFx0XHQ9IHBzcF9ubF90eF9hc3NvY19kb2l0LFxuLS1cbm5ldC9wc3AvcHNwLW5sLWdlbi5oPTIwPWludCBwc3BfZGV2aWNlX2dldF9sb2NrZWRfYWRtaW4oY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXG5uZXQvcHNwL3BzcC1ubC1nZW4uaC0yMS1cdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L3BzcC9wc3AtbmwtZ2VuLmg6MjI6aW50IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcyxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oLTIzLVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4tLVxubmV0L3BzcC9wc3AuaD0yMT12b2lkIHBzcF9ubF9ub3RpZnlfZGV2KHN0cnVjdCBwc3BfZGV2ICpwc2QsIHUzMiBjbWQpO1xubmV0L3BzcC9wc3AuaC0yMi1cbm5ldC9wc3AvcHNwLmg6MjM6c3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2NyZWF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkKTtcbm5ldC9wc3AvcHNwLmgtMjQtc3RydWN0IHBzcF9kZXYgKnBzcF9kZXZfZ2V0X2Zvcl9zb2NrKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvcHNwL3BzcC5oOjI1OnZvaWQgcHNwX2Rldl90eF9rZXlfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XG5uZXQvcHNwL3BzcC5oOjI2OmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5uZXQvcHNwL3BzcC5oLTI3LVx0XHRcdCAgc3RydWN0IHBzcF9rZXlfcGFyc2VkICprZXksXG4tLVxubmV0L3BzcC9wc3AuaD0yOT1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbi0tXG5uZXQvcHNwL3BzcC5oLTMxLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9wc3AvcHNwLmg6MzI6dm9pZCBwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHN0cnVjdCBwc3BfZGV2ICpwc2QpO1xubmV0L3BzcC9wc3AuaC0zMy1cbi0tXG5uZXQvcHNwL3BzcF9tYWluLmM9MTMxPXZvaWQgcHNwX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBwc3BfZGV2ICpwc2QpXG5uZXQvcHNwL3BzcF9tYWluLmMtMTMyLXtcbm5ldC9wc3AvcHNwX21haW4uYzoxMzM6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnksICplbnRyeV90bXA7XG5uZXQvcHNwL3BzcF9tYWluLmM6MTM0Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqbmV4dDtcbm5ldC9wc3AvcHNwX21haW4uYy0xMzUtXG4tLVxubmV0L3BzcC9wc3BfbWFpbi5jPTQwOD1zdGF0aWMgdm9pZCBwc3BfZGV2X2Rpc2Fzc29jX29uZShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L3BzcC9wc3BfbWFpbi5jLTQwOS17XG5uZXQvcHNwL3BzcF9tYWluLmM6NDEwOlx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xubmV0L3BzcC9wc3BfbWFpbi5jLTQxMS1cbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTU0PXBzcF9ubF9tdWx0aWNhc3RfcGVyX25zKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHVuc2lnbmVkIGludCBncm91cCxcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTU5LXtcbm5ldC9wc3AvcHNwX25sLmM6NjA6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XG5uZXQvcHNwL3BzcF9ubC5jLTYxLVx0c3RydWN0IHhhcnJheSBzZW50X25ldHM7XG4tLVxubmV0L3BzcC9wc3BfbmwuYz0yMzA9Ym9vbCBwc3BfaGFzX2Fzc29jX2Rldl9pbl9ucyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvcHNwL3BzcF9ubC5jLTIzMS17XG5uZXQvcHNwL3BzcF9ubC5jOjIzMjpcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeTtcbm5ldC9wc3AvcHNwX25sLmMtMjMzLVxuLS1cbm5ldC9wc3AvcHNwX25sLmM9MjQyPXN0YXRpYyBpbnQgcHNwX25sX2ZpbGxfYXNzb2NfZGV2X2xpc3Qoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHNrX2J1ZmYgKnJzcCxcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTI0NS17XG5uZXQvcHNwL3BzcF9ubC5jOjI0NjpcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeTtcbm5ldC9wc3AvcHNwX25sLmMtMjQ3LVx0c3RydWN0IG5ldCAqZGV2X25ldF9ucztcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTQ0Nz1pbnQgcHNwX25sX2tleV9yb3RhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtNDgyLVxubmV0L3BzcC9wc3BfbmwuYzo0ODM6XHRwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHBzZCk7XG5uZXQvcHNwL3BzcF9ubC5jLTQ4NC1cdHBzZC1cdTAwM2VzdGF0cy5yb3RhdGlvbnMmIzQzOyYjNDM7O1xuLS1cbm5ldC9wc3AvcHNwX25sLmM9NDk5PWludCBwc3BfbmxfZGV2X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTUwMS1cdHN0cnVjdCBwc3BfZGV2ICpwc2QgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xubmV0L3BzcC9wc3BfbmwuYzo1MDI6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqcHNwX2Fzc29jX2Rldjtcbm5ldC9wc3AvcHNwX25sLmMtNTAzLVx0c3RydWN0IG5ldF9kZXZpY2UgKmFzc29jX2Rldjtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTUxOC1cbm5ldC9wc3AvcHNwX25sLmM6NTE5Olx0cHNwX2Fzc29jX2RldiA9IGt6YWxsb2Nfb2JqKCpwc3BfYXNzb2NfZGV2KTtcbm5ldC9wc3AvcHNwX25sLmM6NTIwOlx0aWYgKCFwc3BfYXNzb2NfZGV2KSB7XG5uZXQvcHNwL3BzcF9ubC5jLTUyMS1cdFx0ZXJyID0gLUVOT01FTTtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTUyNi1cdGFzc29jX2RldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgobmV0LCBhc3NvY19pZmluZGV4LFxubmV0L3BzcC9wc3BfbmwuYzo1Mjc6XHRcdFx0XHRcdFx1MDAyNnBzcF9hc3NvY19kZXYtXHUwMDNlZGV2X3RyYWNrZXIsXG5uZXQvcHNwL3BzcF9ubC5jLTUyOC1cdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4tLVxubmV0L3BzcC9wc3BfbmwuYy01NDMtXG5uZXQvcHNwL3BzcF9ubC5jOjU0NDpcdHBzcF9hc3NvY19kZXYtXHUwMDNlYXNzb2NfZGV2ID0gYXNzb2NfZGV2O1xubmV0L3BzcC9wc3BfbmwuYy01NDUtXG4tLVxubmV0L3BzcC9wc3BfbmwuYy01NjMtXG5uZXQvcHNwL3BzcF9ubC5jOjU2NDpcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHNwX2Fzc29jX2Rldi1cdTAwM2VkZXZfbGlzdCwgXHUwMDI2cHNkLVx1MDAzZWFzc29jX2Rldl9saXN0KTtcbm5ldC9wc3AvcHNwX25sLmMtNTY1LVx0cHNkLVx1MDAzZWFzc29jX2Rldl9jbnQmIzQzOyYjNDM7O1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtNTc1LWVycl9wdXRfZGV2OlxubmV0L3BzcC9wc3BfbmwuYzo1NzY6XHRuZXRkZXZfcHV0KGFzc29jX2RldiwgXHUwMDI2cHNwX2Fzc29jX2Rldi1cdTAwM2VkZXZfdHJhY2tlcik7XG5uZXQvcHNwL3BzcF9ubC5jLTU3Ny1lcnJfZnJlZV9hc3NvYzpcbm5ldC9wc3AvcHNwX25sLmM6NTc4Olx0a2ZyZWUocHNwX2Fzc29jX2Rldik7XG5uZXQvcHNwL3BzcF9ubC5jLTU3OS1lcnJfcHV0X25ldDpcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTU4NT1pbnQgcHNwX25sX2Rldl9kaXNhc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvcHNwL3BzcF9ubC5jLTU4Ni17XG5uZXQvcHNwL3BzcF9ubC5jOjU4NzpcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeSwgKmZvdW5kID0gTlVMTDtcbm5ldC9wc3AvcHNwX25sLmMtNTg4LVx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4tLVxubmV0L3BzcC9wc3BfbmwuYy02MzgtXG5uZXQvcHNwL3BzcF9ubC5jOjYzOTppbnQgcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkKGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxubmV0L3BzcC9wc3BfbmwuYy02NDAtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtNzc0LVx0c3RydWN0IHBzcF9rZXlfcGFyc2VkIGtleTtcbm5ldC9wc3AvcHNwX25sLmM6Nzc1Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xubmV0L3BzcC9wc3BfbmwuYy03NzYtXHRzdHJ1Y3Qgc2tfYnVmZiAqcnNwO1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtNzkyLVxubmV0L3BzcC9wc3BfbmwuYzo3OTM6XHRwYXMgPSBwc3BfYXNzb2NfY3JlYXRlKHBzZCk7XG5uZXQvcHNwL3BzcF9ubC5jLTc5NC1cdGlmICghcGFzKSB7XG4tLVxubmV0L3BzcC9wc3BfbmwuYy04MTQtXHR9XG5uZXQvcHNwL3BzcF9ubC5jOjgxNTpcdHBzcF9hc3NvY19wdXQocGFzKTtcbm5ldC9wc3AvcHNwX25sLmMtODE2LVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtODE5LWVycl9mcmVlX3Bhczpcbm5ldC9wc3AvcHNwX25sLmM6ODIwOlx0cHNwX2Fzc29jX3B1dChwYXMpO1xubmV0L3BzcC9wc3BfbmwuYy04MjEtZXJyX2ZyZWVfcnNwOlxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0zMD1wc3BfdmFsaWRhdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvcHNwL3BzcF9zb2NrLmMtMzEte1xubmV0L3BzcC9wc3Bfc29jay5jOjMyOlx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xubmV0L3BzcC9wc3Bfc29jay5jLTMzLVx0Ym9vbCBnb29kO1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy00Ni1cbm5ldC9wc3AvcHNwX3NvY2suYzo0NzpzdHJ1Y3QgcHNwX2Fzc29jICpwc3BfYXNzb2NfY3JlYXRlKHN0cnVjdCBwc3BfZGV2ICpwc2QpXG5uZXQvcHNwL3BzcF9zb2NrLmMtNDgte1xubmV0L3BzcC9wc3Bfc29jay5jOjQ5Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xubmV0L3BzcC9wc3Bfc29jay5jLTUwLVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy02OC1cbm5ldC9wc3AvcHNwX3NvY2suYzo2OTpzdGF0aWMgc3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2R1bW15KHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbm5ldC9wc3AvcHNwX3NvY2suYy03MC17XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTc5LVxubmV0L3BzcC9wc3Bfc29jay5jOjgwOnN0YXRpYyBpbnQgcHNwX2Rldl90eF9rZXlfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbm5ldC9wc3AvcHNwX3NvY2suYy04MS1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTg1LVxubmV0L3BzcC9wc3Bfc29jay5jOjg2OnZvaWQgcHNwX2Rldl90eF9rZXlfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbm5ldC9wc3AvcHNwX3NvY2suYy04Ny17XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTkyLVxubmV0L3BzcC9wc3Bfc29jay5jOjkzOnN0YXRpYyB2b2lkIHBzcF9hc3NvY19mcmVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9wc3AvcHNwX3NvY2suYy05NC17XG5uZXQvcHNwL3BzcF9zb2NrLmM6OTU6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBzcF9hc3NvYywgd29yayk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtOTYtXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gcGFzLVx1MDAzZXBzZDtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA1LVxubmV0L3BzcC9wc3Bfc29jay5jOjEwNjpzdGF0aWMgdm9pZCBwc3BfYXNzb2NfZnJlZV9xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA3LXtcbm5ldC9wc3AvcHNwX3NvY2suYzoxMDg6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHBzcF9hc3NvYywgcmN1KTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xMDktXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTEwOlx0SU5JVF9XT1JLKFx1MDAyNnBhcy1cdTAwM2V3b3JrLCBwc3BfYXNzb2NfZnJlZSk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTExLVx0c2NoZWR1bGVfd29yayhcdTAwMjZwYXMtXHUwMDNld29yayk7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTExNC0vKipcbm5ldC9wc3AvcHNwX3NvY2suYzoxMTU6ICogcHNwX2Fzc29jX3B1dCgpIC0gcmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBhIFBTUCBhc3NvY2lhdGlvblxubmV0L3BzcC9wc3Bfc29jay5jLTExNi0gKiBAcGFzOiBhc3NvY2lhdGlvbiB0byByZWxlYXNlXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTE3LSAqL1xubmV0L3BzcC9wc3Bfc29jay5jOjExODp2b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxubmV0L3BzcC9wc3Bfc29jay5jLTExOS17XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTIwLVx0aWYgKHBhcyBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpKVxubmV0L3BzcC9wc3Bfc29jay5jOjEyMTpcdFx0Y2FsbF9yY3UoXHUwMDI2cGFzLVx1MDAzZXJjdSwgcHNwX2Fzc29jX2ZyZWVfcXVldWUpO1xubmV0L3BzcC9wc3Bfc29jay5jLTEyMi19XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEyND12b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjUte1xubmV0L3BzcC9wc3Bfc29jay5jOjEyNjpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXHUwMDNlcHNwX2Fzc29jLCAxKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjctXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI4Olx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI5Olx0cHNwX2Fzc29jX3B1dChwYXMpO1xubmV0L3BzcC9wc3Bfc29jay5jLTEzMC19XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMxLVxubmV0L3BzcC9wc3Bfc29jay5jOjEzMjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNDgtXHRyZWZjb3VudF9pbmMoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCk7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MTQ5Olx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYywgcGFzKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xNTAtXHRlcnIgPSAwO1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNTctXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTU4OnN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbm5ldC9wc3AvcHNwX3NvY2suYy0xNTkte1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0xNzc9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTE4MS1cdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzaztcbm5ldC9wc3AvcHNwX3NvY2suYzoxODI6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpkdW1teTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xODMtXHRpbnQgZXJyO1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0yMTktXHQgKi9cbm5ldC9wc3AvcHNwX3NvY2suYzoyMjA6XHRkdW1teSA9IHBzcF9hc3NvY19kdW1teShwYXMpO1xubmV0L3BzcC9wc3Bfc29jay5jLTIyMS1cdGlmICghZHVtbXkpIHtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjQ4LVxubmV0L3BzcC9wc3Bfc29jay5jOjI0OTp2b2lkIHBzcF9hc3NvY3Nfa2V5X3JvdGF0ZWQoc3RydWN0IHBzcF9kZXYgKnBzZClcbm5ldC9wc3AvcHNwX3NvY2suYy0yNTAte1xubmV0L3BzcC9wc3Bfc29jay5jOjI1MTpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcywgKm5leHQ7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMjUyLVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0yNjY9dm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjY3LXtcbm5ldC9wc3AvcHNwX3NvY2suYzoyNjg6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xubmV0L3BzcC9wc3Bfc29jay5jLTI2OS1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjcxLVx0XHRyZWZjb3VudF9pbmMoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCk7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlx0cmN1X2Fzc2lnbl9wb2ludGVyKHR3LVx1MDAzZXBzcF9hc3NvYywgcGFzKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzMtXHR0dy1cdTAwM2V0d192YWxpZGF0ZV94bWl0X3NrYiA9IHBzcF92YWxpZGF0ZV94bWl0O1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0yNzY9dm9pZCBwc3BfdHdza19hc3NvY19mcmVlKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KVxubmV0L3BzcC9wc3Bfc29jay5jLTI3Ny17XG5uZXQvcHNwL3BzcF9zb2NrLmM6Mjc4Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh0dy1cdTAwM2Vwc3BfYXNzb2MsIDEpO1xubmV0L3BzcC9wc3Bfc29jay5jLTI3OS1cbm5ldC9wc3AvcHNwX3NvY2suYzoyODA6XHRyY3VfYXNzaWduX3BvaW50ZXIodHctXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbm5ldC9wc3AvcHNwX3NvY2suYzoyODE6XHRwc3BfYXNzb2NfcHV0KHBhcyk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMjgyLX1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9Mjg0PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3BzcC9wc3Bfc29jay5jLTI4NS17XG5uZXQvcHNwL3BzcF9zb2NrLmM6Mjg2Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xubmV0L3BzcC9wc3Bfc29jay5jLTI4Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NjA2PWRlZiBfY2hlY2tfYXNzb2NfbGlzdChjZmcsIHBzcF9kZXZfaWQsIGlmaW5kZXgsIG5zaWQ9Tm9uZSk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTYyMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2MjQ6ZGVmIF9kYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02MjUtICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02NTk9ZGVmIF9nZXRfcHNwX3Zlcl9pcDZfdmFyaWFudHMoKTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjY0LUBrc2Z0X3ZhcmlhbnRzKF9nZXRfcHNwX3Zlcl9pcDZfdmFyaWFudHMoKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2NjU6ZGVmIGRhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jKGNmZywgdmVyc2lvbiwgaXB2ZXIpOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2Ni0gICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBQU1AgZGF0YSBzZW5kIHZpYSBuZXRraXQgd2l0aCBkZXYtYXNzb2MuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjY3LSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2Njg6ICAgIF9kYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9Njk4PWRlZiBfZGV2X2NoYW5nZV9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0KGNmZyk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTcyNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo3MjY6ZGVmIF9wc3BfZGV2X2dldF9jaGVja19uZXRraXRfcHNwX2Fzc29jKGNmZyk6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNzI3LSAgICBcJiMzNDtcJiMzNDtcJiMzNDsgQ2hlY2sgcHNwIGRldi1nZXQgb3V0cHV0IHdpdGggbmV0a2l0IGludGVyZmFjZSBhc3NvY2lhdGVkIHdpdGggUFNQIGRldiBcJiMzNDtcJiMzNDtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9OTQxPWRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODAtICAgICAgICAgICAgICAgICAgICAgICAgX2Fzc29jX2NoZWNrX2xpc3QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6OTgxOiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTk4Mi0gICAgICAgICAgICAgICAgICAgICAgICBfa2V5X3JvdGF0aW9uX25vdGlmeV9tdWx0aV9uc19uZXRraXQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTgzLSAgICAgICAgICAgICAgICAgICAgICAgIF9kZXZfY2hhbmdlX25vdGlmeV9tdWx0aV9uc19uZXRraXQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6OTg0OiAgICAgICAgICAgICAgICAgICAgICAgIF9wc3BfZGV2X2dldF9jaGVja19uZXRraXRfcHNwX2Fzc29jLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTk4NS0gICAgICAgICAgICAgICAgICAgICAgICBfZGV2X2Fzc29jX25vX25zaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnIG9mIG5ldC9wc3AqKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgYG5ldC9wc3BgIHN1YnN5c3RlbS4gTXkgdXN1YWwgYXBwcm9hY2gg4oCTIHN0YXJ0IHdpdGggdGhlIEtjb25maWcuIFRoYXQgZmlsZSBpcyB0aGUgZm91bmRhdGlvbiwgcmlnaHQ/IEl0JiMzOTtsbCBsYXkgb3V0IHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCB0aGVpciBkZWZhdWx0IHZhbHVlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYXJlIGF0IHBsYXkgaGVyZS4gRmlndXJlIG91dCB3aGF0IGZlYXR1cmVzIGFyZSBjb25maWd1cmFibGUsIGhvdyB0aGV5IGludGVycmVsYXRlLCBhbmQgd2hhdCB0aGUgYmFzZWxpbmUgc2V0dXAgbG9va3MgbGlrZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlIGNvcmUgZGVzaWduIGRlY2lzaW9ucyBtYWRlIGJ5IHRoZSBvcmlnaW5hbCBhdXRob3JzLCBhbmQgc3RhcnQgdG8gZm9ybXVsYXRlIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjay4gU28sIGxldCYjMzk7cyBjcmFjayBvcGVuIGBuZXQvcHNwL0tjb25maWdgIGFuZCBzZWUgd2hhdCBnZW1zIGl0IGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BzcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFNQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIElORVRfUFNQXG4gICA2Olx0XHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBTS0JfREVDUllQVEVEXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIFBTUCBTZWN1cml0eSBQcm90b2NvbCAoUFNQKS5cbiAgMTM6XHRcdEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiAgMTQ6XHRcdCAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2dvb2dsZS9wc3AvbWFpbi9kb2MvUFNQX0FyY2hfU3BlYy5wZGZcbiAgMTU6XHRcbiAgMTY6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNzUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29tbWl0JiMzOTtzIENvbnRleHQqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byByZWFjaCBmb3IgYGdpdCBsb2dgLiBJIG5lZWQgdG8gc2VlIHRoZSBjb21taXQgaGlzdG9yeSBkaXJlY3RseS4gRm9yZ2V0IHRyeWluZyB0byBkZWNpcGhlciB0aGUgZGlmZiBhbG9uZTsgSSB3YW50IHRoZSBicm9hZGVyIGNvbnRleHQuIFdoYXQgbGVkIHRvIHRoaXMgY2hhbmdlPyBXaGF0JiMzOTtzIHRoZSBuYXJyYXRpdmUgYXJvdW5kIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHdhcyBkb25lLCBub3QganVzdCAqd2hhdCogd2FzIGNoYW5nZWQuIFRoZSBjb21taXQgbWVzc2FnZSBpdHNlbGYgaXMgYSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLCBidXQgb2Z0ZW4gaXQgb25seSB0ZWxscyBwYXJ0IG9mIHRoZSBzdG9yeS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDtzbyB3aGF0PyYjMzQ7IGJlaGluZCB0aGUgJiMzNDt3aGF0LiYjMzQ7IEdpdmUgbWUgdGhlIGNvbW1pdCBsb2cgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19jbG9uZS4qcHNwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyODUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNrX2Nsb25lYCBhbmQgaG93IHRoZSBgcHNwX2Fzc29jYCBpcyBoYW5kbGVkLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBzb2NrZXQgYWxsb2NhdGlvbiBhbmQgY2xvbmluZy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHdoZXJlIHRoZXNlIGludGVyYWN0aW9ucyBvY2N1ciBpbiB0aGUgc29ja2V0IGNyZWF0aW9uIGFuZCBkdXBsaWNhdGlvbiBwcm9jZXNzLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIGBza19jbG9uZWAgYW5kIHBpbnBvaW50IGl0cyBjYWxsZXJzLiBUaGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgZXhhY3Qgc2VxdWVuY2Ugb2YgZXZlbnRzIGFuZCBob3cgdGhlIGFzc29jaWF0aW9uLCBvciBsYWNrIHRoZXJlb2YsIHdpdGggdGhlIGBwc3BfYXNzb2NgIHZhcmlhYmxlIGlzIG1hbmFnZWQgd2hlbiBzb2NrZXRzIGFyZSBjcmVhdGVkIGFuZCBzdWJzZXF1ZW50bHkgY2xvbmVkLiBUaGlzIGludmVzdGlnYXRpb24gd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYXNzb2NpYXRpb24gYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgaW4gdGhlIHNvY2tldCBkdXBsaWNhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRyYWNpbmcgdGhpcyBgcHNwX2Fzc29jYCB0aHJvdWdoIHRoZSBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19jbG9uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTEzPUZvciBzZWN1cml0eSBtb2R1bGUgc3VwcG9ydCwgdGhyZWUgU0NUUCBzcGVjaWZpYyBob29rcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQ6OlxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMTYtICAgIHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTc6ICAgIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xOC0gICAgc2VjdXJpdHlfc2N0cF9hc3NvY19lc3RhYmxpc2hlZCgpXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0xMDI9QVNDT05GIGNodW5rIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYGBAb3B0bmFtZWBgJiMzOTtzIGFyZSBwcmVzZW50Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTEwOS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTEwOnNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xMTEtfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0xMzY9ZXN0YWJsaXNoaW5nIGFuIGFzc29jaWF0aW9uLlxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMTc2LSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIFNDVFBfU09DS0VUX1RDUCBvciBwZWVsZWQgb2ZmXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0OjE3NzogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpIGlzXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE3OC0gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgdG8gY2xvbmUgdGhlIG5ldyBzb2NrZXQuXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0xOTQ9aG9va3Mgd2l0aCB0aGUgU0VMaW51eCBzcGVjaWZpY3MgZXhwYW5kZWQgYmVsb3c6OlxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMTk3LSAgICBzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdCgpXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0OjE5ODogICAgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE5OS0gICAgc2VjdXJpdHlfc2N0cF9hc3NvY19lc3RhYmxpc2hlZCgpXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0yNTU9UmVjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0yNTctXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0OjI1ODpzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMjU5LX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q9MjYxPXNvY2tldCkgb3Igd2hlbiBhIHNvY2tldCBpcyAmIzM5O3BlZWxlZCBvZmYmIzM5OyBlLmcgdXNlcnNwYWNlIGNhbGxzXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0OjI2MjoqKnNjdHBfcGVlbG9mZioqXFwoMykuIGBgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpYGAgd2lsbCBzZXQgdGhlIG5ld1xuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0yNjMtc29ja2V0cyBzaWQgYW5kIHBlZXIgc2lkIHRvIHRoYXQgY29udGFpbmVkIGluIHRoZSBgYEBhc29jIHNpZGBgIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0PTEzPVNDVFDnmoRMU03mlK/mjIFcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yMi1cdHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjIzOlx0c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNC1cdHNlY3VyaXR5X3NjdHBfYXNzb2NfZXN0YWJsaXNoZWQoKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0PTM5PXNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xMDYtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdDoxMDc6c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xMDgtfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q9MTE4PXNlY3VyaXR5X3NjdHBfYXNzb2NfZXN0YWJsaXNoZWQoKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTE2Ni0gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlpoLmnpzmmK9TQ1RQX1NPQ0tFVF9UQ1DmiJbmmK/liaXnprvnmoTlpZfmjqVcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjE2NzogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlrZfvvIzkvJrosIPnlKggc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xNjgtICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5p2l5YWL6ZqG5paw55qE5aWX5o6l5a2X44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q9MTc3PVNDVFDnmoRTRUxpbnV45pSv5oyBXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMTg3LVx0c2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q6MTg4Olx0c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xODktXHRzZWN1cml0eV9zY3RwX2Fzc29jX2VzdGFibGlzaGVkKClcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdD0yMTY9c2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTI0My1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjI0NDpzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTI0NS1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNDct5b2T5LiA5Liq5aWX5o6l5a2X6KKr4oCc5Yml56a74oCd5aaC55So5oi356m66Ze06LCD55SoICoqc2N0cF9wZWVsb2ZmKipcXCgzKeaXtu+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q6MjQ4OmBgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpYGAg5bCG5Lya5YiG5Yir5bCG5paw5aWX5o6l5a2X55qEc2lk5ZKM5a+556uvc2lk6K6+572u5Li6XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNDktYGBAYXNvYyBzaWRgYCDlkowgYGBAYXNvYyBwZWVyIHNpZGBgIOS4reWMheWQq+eahOWAvOOAglxuLS1cbmNyeXB0by9hZl9hbGcuYz00NjQ9aW50IGFmX2FsZ19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuLS1cbmNyeXB0by9hZl9hbGcuYy00ODYtXHRzZWN1cml0eV9zb2NrX2dyYWZ0KHNrMiwgbmV3c29jayk7XG5jcnlwdG8vYWZfYWxnLmM6NDg3Olx0c2VjdXJpdHlfc2tfY2xvbmUoc2ssIHNrMik7XG5jcnlwdG8vYWZfYWxnLmMtNDg4LVxuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwLmg9OTA5PXZvaWQgY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKTtcbmluY2x1ZGUvbGludXgvY2dyb3VwLmg6OTEwOnZvaWQgY2dyb3VwX3NrX2Nsb25lKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKTtcbmluY2x1ZGUvbGludXgvY2dyb3VwLmgtOTExLXZvaWQgY2dyb3VwX3NrX2ZyZWUoc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpO1xuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwLmg9OTIwPXN0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpIHt9XG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oOjkyMTpzdGF0aWMgaW5saW5lIHZvaWQgY2dyb3VwX3NrX2Nsb25lKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKSB7fVxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaC05MjItc3RhdGljIGlubGluZSB2b2lkIGNncm91cF9za19mcmVlKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKSB7fVxuLS1cbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTM1OT1MU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIHNrX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjM2MDpMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIHNrX2Nsb25lX3NlY3VyaXR5LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zNjEtXHQgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTM2ND1MU01fSE9PSyhpbnQsIDAsIGluZXRfY29ubl9yZXF1ZXN0LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zNjUtXHQgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg6MzY2OkxTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5ldF9jc2tfY2xvbmUsIHN0cnVjdCBzb2NrICpuZXdzayxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTM2Ny1cdCBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg9MzgyPUxTTV9IT09LKGludCwgMCwgc2N0cF9iaW5kX2Nvbm5lY3QsIHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zODMtXHQgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbilcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjM4NDpMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIHNjdHBfc2tfY2xvbmUsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMzg1LVx0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xNjg5PXZvaWQgc2VjdXJpdHlfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE2OTA6dm9pZCBzZWN1cml0eV9za19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzayk7XG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTY5MS12b2lkIHNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xNjk2PWludCBzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTY5Ny1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE2OTg6dm9pZCBzZWN1cml0eV9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqbmV3c2ssXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTY5OS1cdFx0XHRjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xNzEyPWludCBzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE3MTMtXHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFkZHJsZW4pO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE3MTQ6dm9pZCBzZWN1cml0eV9zY3RwX3NrX2Nsb25lKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTcxNS1cdFx0XHQgICAgc3RydWN0IHNvY2sgKm5ld3NrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTg0Nz1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE4NTAtXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTg1MTpzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTg1Mi17XG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE4Njk9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5ldF9jb25uX3JlcXVlc3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xODc0LVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE4NzU6c3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpuZXdzayxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xODc2LVx0XHRcdGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTkzMz1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xOTM5LVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE5NDA6c3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTk0MS1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD0xNTM9c3RhdGljIGlubGluZSB2b2lkICppbmV0X2Nza19jYShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC0xNTctXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oOjE1ODpzdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY2xvbmVfbG9jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTE1OS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmg9MTU0Nz1zdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiB7XG4tLVxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMjA3OS1cdCAqIFNDVFAgVENQIHR5cGUgc29ja2V0cyBhbmQgcGVlbGVkIG9mZiBjb25uZWN0aW9ucyBhcyB0aGV5XG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaDoyMDgwOlx0ICogY2F1c2UgYSBuZXcgc29ja2V0IHRvIGJlIGdlbmVyYXRlZC4gc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaC0yMDgxLVx0ICogd2lsbCB0aGVuIHBsdWcgdGhlc2UgaW50byB0aGUgbmV3IHNvY2tldC5cbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MTg0Mz12b2lkIHNrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC9zb2NrLmg6MTg0NDpzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSwgYm9vbCBsb2NrKTtcbmluY2x1ZGUvbmV0L3NvY2suaC0xODQ1LVxuaW5jbHVkZS9uZXQvc29jay5oOjE4NDY6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqc2tfY2xvbmVfbG9jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5KVxuaW5jbHVkZS9uZXQvc29jay5oLTE4NDcte1xuaW5jbHVkZS9uZXQvc29jay5oOjE4NDg6XHRyZXR1cm4gc2tfY2xvbmUoc2ssIHByaW9yaXR5LCB0cnVlKTtcbmluY2x1ZGUvbmV0L3NvY2suaC0xODQ5LX1cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTM4Nj1zdGF0aWMgaW5saW5lIGludCB4ZnJtNl9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTAtXG5pbmNsdWRlL25ldC94ZnJtLmg6MTM5MTppbnQgX194ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spO1xuaW5jbHVkZS9uZXQveGZybS5oLTEzOTItXG5pbmNsdWRlL25ldC94ZnJtLmg6MTM5MzpzdGF0aWMgaW5saW5lIGludCB4ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spXG5pbmNsdWRlL25ldC94ZnJtLmgtMTM5NC17XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTktXHRpZiAodW5saWtlbHkob3NrLVx1MDAzZXNrX3BvbGljeVswXSB8fCBvc2stXHUwMDNlc2tfcG9saWN5WzFdKSlcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNDAwOlx0XHRyZXR1cm4gX194ZnJtX3NrX2Nsb25lX3BvbGljeShzaywgb3NrKTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNDAxLVx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTE0MjQ9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fc2tfZnJlZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrKSB7fVxuaW5jbHVkZS9uZXQveGZybS5oOjE0MjU6c3RhdGljIGlubGluZSBpbnQgeGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL25ldC94ZnJtLmgtMTQyNi1zdGF0aWMgaW5saW5lIGludCB4ZnJtNl9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpIHsgcmV0dXJuIDE7IH1cbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYz03Nj1CVEZfSUQoZnVuYywgYnBmX2xzbV9zb2NrX2dyYWZ0KVxua2VybmVsL2JwZi9icGZfbHNtLmM6Nzc6QlRGX0lEKGZ1bmMsIGJwZl9sc21faW5ldF9jc2tfY2xvbmUpXG5rZXJuZWwvYnBmL2JwZl9sc20uYy03OC1CVEZfSUQoZnVuYywgYnBmX2xzbV9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQpXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYz03NDkzPXZvaWQgY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNzUyMC1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6NzUyMTp2b2lkIGNncm91cF9za19jbG9uZShzdHJ1Y3Qgc29ja19jZ3JvdXBfZGF0YSAqc2tjZClcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNzUyMi17XG4tLVxubmV0L2JsdWV0b290aC9pc28uYz05NTU9c3RhdGljIHZvaWQgaXNvX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG4tLVxubmV0L2JsdWV0b290aC9pc28uYy05NjEtXHRcdGJ0X3NrKHNrKS1cdTAwM2VmbGFncyA9IGJ0X3NrKHBhcmVudCktXHUwMDNlZmxhZ3M7XG5uZXQvYmx1ZXRvb3RoL2lzby5jOjk2MjpcdFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XG5uZXQvYmx1ZXRvb3RoL2lzby5jLTk2My1cdH1cbi0tXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX3NvY2suYz0xOTY3PXN0YXRpYyB2b2lkIGwyY2FwX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG4tLVxubmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMtMTk3OS1cdFx0ICovXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX3NvY2suYzoxOTgwOlx0XHRzZWN1cml0eV9za19jbG9uZShwYXJlbnQsIHNrKTtcbm5ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jLTE5ODEtXHR9IGVsc2Uge1xuLS1cbm5ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYz0yNTA9c3RhdGljIHZvaWQgcmZjb21tX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG4tLVxubmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jLTI2My1cbm5ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYzoyNjQ6XHRcdHNlY3VyaXR5X3NrX2Nsb25lKHBhcmVudCwgc2spO1xubmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jLTI2NS1cdH0gZWxzZSB7XG4tLVxubmV0L2JsdWV0b290aC9zY28uYz01OTY9c3RhdGljIHZvaWQgc2NvX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG4tLVxubmV0L2JsdWV0b290aC9zY28uYy02MDItXHRcdGJ0X3NrKHNrKS1cdTAwM2VmbGFncyA9IGJ0X3NrKHBhcmVudCktXHUwMDNlZmxhZ3M7XG5uZXQvYmx1ZXRvb3RoL3Njby5jOjYwMzpcdFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XG5uZXQvYmx1ZXRvb3RoL3Njby5jLTYwNC1cdH1cbi0tXG5uZXQvY29yZS9zb2NrLmM9MjIwOT1zdGF0aWMgdm9pZCBzb2NrX2NvcHkoc3RydWN0IHNvY2sgKm5zaywgY29uc3Qgc3RydWN0IHNvY2sgKm9zaylcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjIxNy1cdCAqIHdlIG11c3QgY2hlY2sgaWYgc2tfdHhfcXVldWVfY2xlYXIoKSBpcyBjYWxsZWQgYWZ0ZXJcbm5ldC9jb3JlL3NvY2suYzoyMjE4Olx0ICogc29ja19jb3B5KCkgaW4gc2tfY2xvbmVfbG9jaygpLlxubmV0L2NvcmUvc29jay5jLTIyMTktXHQgKi9cbi0tXG5uZXQvY29yZS9zb2NrLmMtMjIzMi1cdG5zay1cdTAwM2Vza19zZWN1cml0eSA9IHNwdHI7XG5uZXQvY29yZS9zb2NrLmM6MjIzMzpcdHNlY3VyaXR5X3NrX2Nsb25lKG9zaywgbnNrKTtcbm5ldC9jb3JlL3NvY2suYy0yMjM0LSNlbmRpZlxuLS1cbm5ldC9jb3JlL3NvY2suYz0yNDQ0PXN0YXRpYyB2b2lkIHNrX2luaXRfY29tbW9uKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjQ3MC0vKipcbm5ldC9jb3JlL3NvY2suYzoyNDcxOiAqIHNrX2Nsb25lIC0gY2xvbmUgYSBzb2NrZXRcbm5ldC9jb3JlL3NvY2suYy0yNDcyLSAqIEBzazogdGhlIHNvY2tldCB0byBjbG9uZVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNDc4LSAqL1xubmV0L2NvcmUvc29jay5jOjI0Nzk6c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXG5uZXQvY29yZS9zb2NrLmMtMjQ4MC1cdFx0ICAgICAgYm9vbCBsb2NrKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNTQ5LVxubmV0L2NvcmUvc29jay5jOjI1NTA6XHRjZ3JvdXBfc2tfY2xvbmUoXHUwMDI2bmV3c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbm5ldC9jb3JlL3NvY2suYy0yNTUxLVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNTY3LVxubmV0L2NvcmUvc29jay5jOjI1Njg6XHRpZiAodW5saWtlbHkoIWlzX2NoYXJnZWQgfHwgeGZybV9za19jbG9uZV9wb2xpY3kobmV3c2ssIHNrKSkpIHtcbm5ldC9jb3JlL3NvY2suYy0yNTY5LVx0XHQvKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbiYjMzk7dCB1bmNoYXJnZSB0aGUgbmV3XG4tLVxubmV0L2NvcmUvc29jay5jLTI2MTgtfVxubmV0L2NvcmUvc29jay5jOjI2MTk6RVhQT1JUX1NZTUJPTF9HUEwoc2tfY2xvbmUpO1xubmV0L2NvcmUvc29jay5jLTI2MjAtXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05MDQ9dm9pZCBfX3JlcXNrX2ZyZWUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTEyLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5MTM6c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTQtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA0OS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA1MDpcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDUxLVx0XHRpZiAoIW5yZXEpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMTg1PXN0YXRpYyB2b2lkIGluZXRfY2xvbmVfdWxwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHNvY2sgKm5ld3NrLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5Ni0vKipcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTE5NzogKlx0aW5ldF9jc2tfY2xvbmVfbG9jayAtIGNsb25lIGFuIGluZXQgc29ja2V0LCBhbmQgbG9jayBpdHMgY2xvbmVcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5OC0gKlx0QHNrOiB0aGUgc29ja2V0IHRvIGNsb25lXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjAzLSAqL1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMjA0OnN0cnVjdCBzb2NrICppbmV0X2Nza19jbG9uZV9sb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIwNS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjA3LXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTIwODpcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrX2Nsb25lX2xvY2soc2ssIHByaW9yaXR5KTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIwOS1cdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzaztcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEyNTktXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEyNjA6XHRzZWN1cml0eV9pbmV0X2Nza19jbG9uZShuZXdzaywgcmVxKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI2MS1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzMDQ9dm9pZCBpbmV0X2Nza19wcmVwYXJlX2ZvcmNlZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA2LXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTMwNzpcdC8qIHNrX2Nsb25lX2xvY2sgbG9ja2VkIHRoZSBzb2NrZXQgYW5kIHNldCByZWZjbnQgdG8gMiAqL1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA4LVx0YmhfdW5sb2NrX3NvY2soc2spO1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQxNz1zdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY29tcGxldGVfaGFzaGRhbmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKmNoaWxkLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzMC1cdFx0XHQvKiBob2xkIGEgcmVmY250IGZvciB0aGUgbnJlcS1cdTAwM2Vyc2tfbGlzdGVuZXJcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQzMTpcdFx0XHQgKiB3aGljaCBpcyBhc3NpZ25lZCBpbiBpbmV0X3JlcXNrX2Nsb25lKClcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzMi1cdFx0XHQgKi9cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzMy1cdFx0XHRzb2NrX2hvbGQoc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM0Olx0XHRcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM1LVx0XHRcdGlmICghbnJlcSkge1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQ2Nj12b2lkIGluZXRfY3NrX2xpc3Rlbl9zdG9wKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0OTAtXHRcdGlmIChuc2spIHtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQ5MTpcdFx0XHRucmVxID0gaW5ldF9yZXFza19jbG9uZShyZXEsIG5zayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0OTItXHRcdFx0aWYgKG5yZXEpIHtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI1PWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzQ0LVx0XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfd3JpdGVfc3BhY2UsIHBzb2NrLVx1MDAzZXNhdmVkX3dyaXRlX3NwYWNlKTtcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDU6XHRcdFx0LyogUGFpcnMgd2l0aCBsb2NrbGVzcyByZWFkIGluIHNrX2Nsb25lX2xvY2soKSAqL1xubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ni1cdFx0XHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIHBzb2NrLVx1MDAzZXNrX3Byb3RvKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjc1ODpcdC8qIFBhaXJzIHdpdGggbG9ja2xlc3MgcmVhZCBpbiBza19jbG9uZV9sb2NrKCkgKi9cbm5ldC9pcHY0L3RjcF9icGYuYy03NTktXHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIFx1MDAyNnRjcF9icGZfcHJvdHNbZmFtaWx5XVtjb25maWddKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTcxNz1zdGF0aWMgdm9pZCB0Y3BfdjRfc2VuZF9yZXNldChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy04NzgtXHRcdHRyYW5zbWl0X3RpbWUgPSB0Y3BfdHJhbnNtaXRfdGltZShzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjg3OTpcdFx0eGZybV9za19jbG9uZV9wb2xpY3koY3RsX3NrLCBzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTg4MC1cdFx0dHhoYXNoID0gKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01NDkte1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjU1MDpcdHN0cnVjdCBzb2NrICpuZXdzayA9IGluZXRfY3NrX2Nsb25lX2xvY2soc2ssIHJlcSwgR0ZQX0FUT01JQyk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTUxLVx0Y29uc3Qgc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxID0gaW5ldF9yc2socmVxKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDU4PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnBhcmVudClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDYxLVx0XHRzay1cdTAwM2Vza190eXBlID0gcGFyZW50LVx1MDAzZXNrX3R5cGU7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDYyOlx0XHRzZWN1cml0eV9za19jbG9uZShwYXJlbnQsIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NjMtXHR9XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzY3NT1zdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzY5NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM2OTU6c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzY5Ni1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MDAtXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM3MDE6XHRzdHJ1Y3Qgc29jayAqbnNrID0gc2tfY2xvbmVfbG9jayhzaywgR0ZQX0FUT01JQyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzAyLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzQwLVx0c29ja19yZXNldF9mbGFnKG5zaywgU09DS19SQ1VfRlJFRSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzQxOlx0c2VjdXJpdHlfaW5ldF9jc2tfY2xvbmUobnNrLCByZXEpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzc0Mi1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD05MjA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkyMi1cbm5ldC9tcHRjcC9wcm90b2NvbC5oOjkyMzpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05MjQtXHRcdFx0XHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgwND1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy04ODYtXHRcdGlmIChjdHgtXHUwMDNlbXBfY2FwYWJsZSkge1xubmV0L21wdGNwL3N1YmZsb3cuYzo4ODc6XHRcdFx0Y3R4LVx1MDAzZWNvbm4gPSBtcHRjcF9za19jbG9uZV9pbml0KGxpc3RlbmVyLVx1MDAzZWNvbm4sIFx1MDAyNm1wX29wdCwgY2hpbGQsIHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg4OC1cdFx0XHRpZiAoIWN0eC1cdTAwM2Vjb25uKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTczOD12b2lkIF9fbXB0Y3BfaW5oZXJpdF9jZ3JwX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc0OC1cdFx0KnNza19jZCA9ICpza19jZDtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc0OTpcdFx0Y2dyb3VwX3NrX2Nsb25lKHNrX2NkKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc1MC1cdH1cbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz00ODU2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF9jbG9uZV9zb2NrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy00ODU5LXtcbm5ldC9zY3RwL3NvY2tldC5jOjQ4NjA6XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19jbG9uZShzaywgR0ZQX0tFUk5FTCwgZmFsc2UpO1xubmV0L3NjdHAvc29ja2V0LmMtNDg2MS1cdHN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQ7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDg2Ny1cbm5ldC9zY3RwL3NvY2tldC5jOjQ4Njg6XHQvKiBza19jbG9uZSgpIHNldHMgcmVmY250IHRvIDIgYW5kIGluY3JlbWVudHMgc29ja2V0c19hbGxvY2F0ZWQgKi9cbm5ldC9zY3RwL3NvY2tldC5jLTQ4NjktXHRzb2NrX3B1dChuZXdzayk7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDkxNy1cdCAqL1xubmV0L3NjdHAvc29ja2V0LmM6NDkxODpcdHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoYXNvYywgc2ssIG5ld3NrKTtcbm5ldC9zY3RwL3NvY2tldC5jLTQ5MTktXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjcyMT1zdGF0aWMgaW50IHRpcGNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI3NDctXHRcdGdvdG8gZXhpdDtcbm5ldC90aXBjL3NvY2tldC5jOjI3NDg6XHRzZWN1cml0eV9za19jbG9uZShzb2NrLVx1MDAzZXNrLCBuZXdfc29jay1cdTAwM2Vzayk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNzQ5LVxuLS1cbm5ldC90bHMvdGxzX21haW4uYz0xMDcxPXN0YXRpYyB2b2lkIHRsc191cGRhdGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG8gKnAsXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTEwODItXHR9IGVsc2Uge1xubmV0L3Rscy90bHNfbWFpbi5jOjEwODM6XHRcdC8qIFBhaXJzIHdpdGggbG9ja2xlc3MgcmVhZCBpbiBza19jbG9uZV9sb2NrKCkuICovXG5uZXQvdGxzL3Rsc19tYWluLmMtMTA4NC1cdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19wcm90LCBwKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05NTQtXHRcdHZzay1cdTAwM2VidWZmZXJfbWF4X3NpemUgPSBwc2stXHUwMDNlYnVmZmVyX21heF9zaXplO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjk1NTpcdFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTU2LVx0fSBlbHNlIHtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTI0MDk9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqY2xvbmVfcG9saWN5KGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBpbnQgZGlyKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjQ0MC1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjQ0MTppbnQgX194ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI0NDIte1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jPTEwODc9c3RhdGljIHZvaWQgYXBwYXJtb3Jfc2tfZnJlZV9zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2spXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTA5Ny0vKipcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjEwOTg6ICogYXBwYXJtb3Jfc2tfY2xvbmVfc2VjdXJpdHkgLSBjbG9uZSB0aGUgc2tfc2VjdXJpdHkgZmllbGRcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTEwOTktICogQHNrOiBzb2NrIHRvIGhhdmUgc2VjdXJpdHkgY2xvbmVkXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTEwMS0gKi9cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjExMDI6c3RhdGljIHZvaWQgYXBwYXJtb3Jfc2tfY2xvbmVfc2VjdXJpdHkoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTEwMy1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTc2Nz1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBhcHBhcm1vcl9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xODA2LVx0TFNNX0hPT0tfSU5JVChza19mcmVlX3NlY3VyaXR5LCBhcHBhcm1vcl9za19mcmVlX3NlY3VyaXR5KSxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjE4MDc6XHRMU01fSE9PS19JTklUKHNrX2Nsb25lX3NlY3VyaXR5LCBhcHBhcm1vcl9za19jbG9uZV9zZWN1cml0eSksXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xODA4LVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9NDUwOT12b2lkIHNlY3VyaXR5X3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDUxNi0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDUxNzogKiBzZWN1cml0eV9za19jbG9uZSgpIC0gQ2xvbmUgYSBzb2NrJiMzOTtzIExTTSBzdGF0ZVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTE4LSAqIEBzazogb3JpZ2luYWwgc29ja1xuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDUyMi0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDUyMzp2b2lkIHNlY3VyaXR5X3NrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI0LXtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDUyNTpcdGNhbGxfdm9pZF9ob29rKHNrX2Nsb25lX3NlY3VyaXR5LCBzaywgbmV3c2spO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI2LX1cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDUyNzpFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X3NrX2Nsb25lKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDUyOC1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTQ1ODU9RVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdCk7XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTg3LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NTg4OiAqIHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKCkgLSBTZXQgbmV3IHNvY2sgTFNNIHN0YXRlIGJhc2VkIG9uIHJlcXVlc3Rfc29ja1xuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTg5LSAqIEBuZXdzazogbmV3IHNvY2tcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1OTMtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ1OTQ6dm9pZCBzZWN1cml0eV9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqbmV3c2ssXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1OTUtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1OTYte1xuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NTk3Olx0Y2FsbF92b2lkX2hvb2soaW5ldF9jc2tfY2xvbmUsIG5ld3NrLCByZXEpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTk4LX1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTQ3ODE9RVhQT1JUX1NZTUJPTChzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdCk7XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NzgzLS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0Nzg0OiAqIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKSAtIENsb25lIGEgU0NUUCBzb2NrJiMzOTtzIExTTSBzdGF0ZVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00Nzg1LSAqIEBhc29jOiBTQ1RQIGFzc29jaWF0aW9uXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NzkyLSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NzkzOnZvaWQgc2VjdXJpdHlfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00Nzk0LVx0XHRcdCAgICBzdHJ1Y3Qgc29jayAqbmV3c2spXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ3OTUte1xuc2VjdXJpdHkvc2VjdXJpdHkuYzo0Nzk2Olx0Y2FsbF92b2lkX2hvb2soc2N0cF9za19jbG9uZSwgYXNvYywgc2ssIG5ld3NrKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDc5Ny19XG5zZWN1cml0eS9zZWN1cml0eS5jOjQ3OTg6RVhQT1JUX1NZTUJPTChzZWN1cml0eV9zY3RwX3NrX2Nsb25lKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDc5OS1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTU3ND1zdGF0aWMgdm9pZCBzZWxpbnV4X3NrX2ZyZWVfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01NTgwLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU1ODE6c3RhdGljIHZvaWQgc2VsaW51eF9za19jbG9uZV9zZWN1cml0eShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01NTgyLXtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTY3Nz1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9hc3NvY19yZXF1ZXN0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01NjkzLVx0ICogc29ja2V0cyBhbmQgcGVlbGVkIG9mZiBjb25uZWN0aW9ucyBhcyB0aGV5IGNhdXNlIGEgbmV3XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTY5NDpcdCAqIHNvY2tldCB0byBiZSBnZW5lcmF0ZWQuIHNlbGludXhfc2N0cF9za19jbG9uZSgpIHdpbGwgdGhlblxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU2OTUtXHQgKiBwbHVnIHRoaXMgaW50byB0aGUgbmV3IHNvY2tldC5cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTcxMD1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9hc3NvY19lc3RhYmxpc2hlZChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTcxOC1cdC8qIEluaGVyaXQgc2VjaWQgZnJvbSB0aGUgcGFyZW50IHNvY2tldCAtIHRoaXMgd2lsbCBiZSBwaWNrZWQgdXBcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1NzE5Olx0ICogYnkgc2VsaW51eF9zY3RwX3NrX2Nsb25lKCkgaWYgdGhlIGFzc29jaWF0aW9uIGdldHMgcGVlbGVkIG9mZlxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU3MjAtXHQgKiBpbnRvIGEgbmV3IHNvY2tldC5cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTczMD1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9iaW5kX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTgwNi0vKiBDYWxsZWQgd2hlbmV2ZXIgYSBuZXcgc29ja2V0IGlzIGNyZWF0ZWQgYnkgYWNjZXB0KDIpIG9yIHNjdHBfcGVlbG9mZigzKS4gKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1ODA3OnN0YXRpYyB2b2lkIHNlbGludXhfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4MDgtXHRcdFx0XHQgIHN0cnVjdCBzb2NrICpuZXdzaylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTgxNi1cdGlmICghc2VsaW51eF9wb2xpY3ljYXBfZXh0c29ja2NsYXNzKCkpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTgxNzpcdFx0cmV0dXJuIHNlbGludXhfc2tfY2xvbmVfc2VjdXJpdHkoc2ssIG5ld3NrKTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODE4LVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODIxLVx0bmV3c2tzZWMtXHUwMDNlc2NsYXNzID0gc2tzZWMtXHUwMDNlc2NsYXNzO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU4MjI6XHRzZWxpbnV4X25ldGxibF9zY3RwX3NrX2Nsb25lKHNrLCBuZXdzayk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTgyMy19XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTU4NDA9c3RhdGljIGludCBzZWxpbnV4X2luZXRfY29ubl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg2MC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1ODYxOnN0YXRpYyB2b2lkIHNlbGludXhfaW5ldF9jc2tfY2xvbmUoc3RydWN0IHNvY2sgKm5ld3NrLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4NjItXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4NzQtXHQgKiB0aHJlYWQgd2l0aCBhY2Nlc3MgdG8gbmV3c2tzZWMgKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1ODc1Olx0c2VsaW51eF9uZXRsYmxfaW5ldF9jc2tfY2xvbmUobmV3c2ssIHJlcS1cdTAwM2Vyc2tfb3BzLVx1MDAzZWZhbWlseSk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg3Ni19XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1NjA9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczMC1cdExTTV9IT09LX0lOSVQoc2tfZnJlZV9zZWN1cml0eSwgc2VsaW51eF9za19mcmVlX3NlY3VyaXR5KSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NzMxOlx0TFNNX0hPT0tfSU5JVChza19jbG9uZV9zZWN1cml0eSwgc2VsaW51eF9za19jbG9uZV9zZWN1cml0eSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczMi1cdExTTV9IT09LX0lOSVQoc2tfZ2V0c2VjaWQsIHNlbGludXhfc2tfZ2V0c2VjaWQpLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NzM0LVx0TFNNX0hPT0tfSU5JVChzY3RwX2Fzc29jX3JlcXVlc3QsIHNlbGludXhfc2N0cF9hc3NvY19yZXF1ZXN0KSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NzM1Olx0TFNNX0hPT0tfSU5JVChzY3RwX3NrX2Nsb25lLCBzZWxpbnV4X3NjdHBfc2tfY2xvbmUpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc3MzYtXHRMU01fSE9PS19JTklUKHNjdHBfYmluZF9jb25uZWN0LCBzZWxpbnV4X3NjdHBfYmluZF9jb25uZWN0KSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczOS1cdExTTV9IT09LX0lOSVQoaW5ldF9jb25uX3JlcXVlc3QsIHNlbGludXhfaW5ldF9jb25uX3JlcXVlc3QpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc3NDA6XHRMU01fSE9PS19JTklUKGluZXRfY3NrX2Nsb25lLCBzZWxpbnV4X2luZXRfY3NrX2Nsb25lKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NzQxLVx0TFNNX0hPT0tfSU5JVChpbmV0X2Nvbm5fZXN0YWJsaXNoZWQsIHNlbGludXhfaW5ldF9jb25uX2VzdGFibGlzaGVkKSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaD00MD1pbnQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1MTYgZmFtaWx5KTtcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRsYWJlbC5oOjQxOnZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jc2tfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCB1MTYgZmFtaWx5KTtcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRsYWJlbC5oOjQyOnZvaWQgc2VsaW51eF9uZXRsYmxfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzayk7XG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaC00My1pbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmg9OTY9c3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkzMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTb2NrZXQgQ2xvbmluZyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBzb2NrZXQgY2xvbmluZyBtZWNoYW5pc20gKGBza19jbG9uZWApLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCDigJMgdGhpcyBzb3VuZHMgbGlrZSBhIGNvcmUgbmV0d29ya2luZyBpc3N1ZS4KCkVzc2VudGlhbGx5LCBgc29ja19jb3B5YCBpbiBgc2tfY2xvbmVgIGRvZXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGBzb2NrYCBzdHJ1Y3R1cmUuIFRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGBzay0mZ3Q7cHNwX2Fzc29jYCBwb2ludGVyLiBJZiB0aGUgb3JpZ2luYWwgc29ja2V0IChgc2tgKSBoYXMgdGhpcyBgcHNwX2Fzc29jYCBwb2ludGVyIHNldCwgdGhlIGNsb25lZCBzb2NrZXQgKGBuZXdza2ApIGdldHMgYSAqZGlyZWN0KiBjb3B5IG9mIHRoYXQgcG9pbnRlcjogYG5ld3NrLSZndDtwc3BfYXNzb2MgPSBzay0mZ3Q7cHNwX2Fzc29jYC4gTm8gcmVmZXJlbmNlIGNvdW50aW5nLCBubyBzYWZlZ3VhcmRzLCBqdXN0IGEgc3RyYWlnaHQgcG9pbnRlciBhc3NpZ25tZW50LgoKVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGRpY2V5LiBJZiB0aGUgcGFyZW50IHNvY2tldCAoYHNrYCkgYW5kIHRoZSBjaGlsZCBzb2NrZXQgKGBuZXdza2ApIG5vdyBib3RoIGJlbGlldmUgdGhleSBvd24gYHBzcF9hc3NvY2AsIHdlIGhhdmUgYSBjb2xsaXNpb24uIERlc3Ryb3lpbmcgZWl0aGVyIHNvY2tldCBvciBleHBsaWNpdGx5IGNhbGxpbmcgYHBzcF9za19hc3NvY19mcmVlKG5ld3NrKWAgb24gdGhlIGNsb25lIHdvdWxkIGNhdXNlIGBwc3BfYXNzb2NgIHRvIGJlIGZyZWVkLCBwb3RlbnRpYWxseSBsZWF2aW5nIGEgZGFuZ2xpbmcgcG9pbnRlciBmb3IgdGhlIG90aGVyIHNvY2tldCBvciBhbnkgb3RoZXIgc3Vic2VxdWVudCB1c2UuIEFuZCB0aGlzIGNvdWxkIGxlYWQgdG8gdGhlIGNsYXNzaWMgJiMzNDt1c2UtYWZ0ZXItZnJlZSYjMzQ7IG9yICYjMzQ7ZG91YmxlIGZyZWUmIzM0OyBzY2VuYXJpb3MuCgpUaGUgcHJvcG9zZWQgcGF0Y2ggaXMgc21hcnQuIFRoZXkmIzM5O3JlIGluaXRpYWxpemluZyBgbmV3c2stJmd0O3BzcF9hc3NvY2AgdG8gYE5VTExgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5IHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtwc3BfYXNzb2MsIE5VTEwpO2AuIFRoaXMgZWZmZWN0aXZlbHkgcHJldmVudHMgdGhlIGRhbmdsaW5nIHBvaW50ZXIgaXNzdWUgYnkgZW5zdXJpbmcgdGhlIGNsb25lIGRvZXNuJiMzOTt0IHBvaW50IHRvIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzb2NrZXRzIHVzZSBgcHNwX2Fzc29jYCBhbmQgd2hlcmUgYHBzcF9za19hc3NvY19mcmVlYCBpcyBjYWxsZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdCBhbmQgdGhlIG5lZWQgZm9yIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoIGZvciBib3RoIHNvY2tldCBkZXN0cnVjdGlvbiBhbmQgZXhwbGljaXQgYHBzcF9za19hc3NvY19mcmVlYCBjYWxscyB0byBzb2xpZGlmeSB0aGlzIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzcF9za19hc3NvY19mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zMz11bnNpZ25lZCBpbnQgcHNwX2tleV9zaXplKHUzMiB2ZXJzaW9uKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzUtdm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU3LSNlbHNlXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spIHsgfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1OS1zdGF0aWMgaW5saW5lIHZvaWRcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTQwPXZvaWQgaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY2LVx0ZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cdTAwM2Vza19yeF9kc3QsIDEpKTtcbm5ldC9pcHY0L2FmX2luZXQuYzoxNjc6XHRwc3Bfc2tfYXNzb2NfZnJlZShzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY4LX1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTE4PXZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTEyMy1cbm5ldC9wc3AvcHNwX3NvY2suYzoxMjQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5OTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgc2lnbmlmaWNhbmNlIGZvciBmdXp6aW5nIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIHJlZmNvdW50aW5nIHByb2JsZW0gcmVsYXRlZCB0byBob3cgYHBzcF9za19hc3NvY2AgaXMgaGFuZGxlZCBkdXJpbmcgc29ja2V0IGNsb25pbmcuIFNwZWNpZmljYWxseSwgYGluZXRfc29ja19kZXN0cnVjdGAgY2FsbHMgYHBzcF9za19hc3NvY19mcmVlYCwgd2hpY2ggaW4gdHVybiBpbnZvbHZlcyBgcHNwX2Fzc29jX3B1dGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGEgbGlzdGVuaW5nIFRDUCBzb2NrZXQsIG9yIGEgY2xvbmVkIHNvY2tldCBkZXJpdmVkIGZyb20gaXQsIGlzIGNsb25lZCB2aWEgYHNrX2Nsb25lX2xvY2tgIGFuZCBgc2tfY2xvbmVgLiBgc29ja19jb3B5YCBkdXBsaWNhdGVzIHRoZSBzb2NrZXQgc3RydWN0dXJlIChgc2tgKSB0byBgbmV3c2tgLiBJZiB0aGUgYHNrLSZndDtwc3BfYXNzb2NgIHBvaW50ZXIgd2FzIHNldCwgYG5ld3NrLSZndDtwc3BfYXNzb2NgIHdvdWxkIGluaXRpYWxseSBwb2ludCB0byB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24gKGBwYXNgKSB3aXRob3V0IGEgcmVmY291bnQgaW5jcmVhc2UuIFRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIHRoZW4gbGVhZCB0byBhIGRvdWJsZSBkZWNyZW1lbnQgb2YgdGhlIHJlZmVyZW5jZSBjb3VudCB3aGVuIGJvdGggc29ja2V0cyBhcmUgZXZlbnR1YWxseSBkZXN0cm95ZWQsIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBjb25kaXRpb24uCgpUaGUgZml4LCBieSBzZXR0aW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtwc3BfYXNzb2MsIE5VTEwpO2AsIGluaXRpYWxpemVzIHRoZSBgbmV3c2stJmd0O3BzcF9hc3NvY2AgdG8gYE5VTExgLCBwcmV2ZW50aW5nIHRoZSBkdXBsaWNhdGUgcmVmZXJlbmNlLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4KCjEuICAqKklzIHRoaXMgYSBtb2RpZmljYXRpb24gdG8gcmVhY2hhYmxlIGtlcm5lbCBsb2dpYz8qKiBBYnNvbHV0ZWx5LCBgc2tfY2xvbmUoKWAgaW4gYG5ldC9jb3JlL3NvY2suY2AgaXMgdGhlIHNvY2tldCBjbG9uaW5nIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyB1c2VkIGFjcm9zcyBhIHZhcmlldHkgb2YgbmV0d29ya2luZyBwcm90b2NvbHMgKFRDUCwgU0NUUCwgTVBUQ1ApIHdoZW5ldmVyIGEgbmV3IGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQgZnJvbSBhIGxpc3RlbmluZyBzb2NrZXQuIFRoaXMgZml4IG1vZGlmaWVzIHRoYXQgY29yZSBjbG9uaW5nIGxvZ2ljIHdoZW4gYElORVRfUFNQYCBpcyBlbmFibGVkLgoyLiAgKipDYW4gdGhpcyBiZSBmdXp6ZWQgaW4gY29tbW9uIGVudmlyb25tZW50cz8qKiBZZXMsIHRoaXMgaXMgYSBwdXJlIHNvZnR3YXJlLWJhc2VkIG9wZXJhdGlvbiwgaW52b2x2aW5nIG5ldHdvcmsgcHJvdG9jb2xzLiBJdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIExpbnV4IGVudmlyb25tZW50cywgUUVNVSwgb3IgZXZlbiB3aXRoIG5ldGRldnNpbS92ZXRoL2xvb3BiYWNrIHNldHVwcy4KMy4gICoqSXMgaXQgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyoqIERlZmluaXRlbHkuIFRoaXMgZml4ZXMgYSByZWZjb3VudGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgcmVsYXRlZCB0byBQU1Agd2l0aGluIHRoZSBjcml0aWNhbCBwcm9jZXNzIG9mIHNvY2tldCBjbG9uaW5nLiBQU1AgaXMgYSBuZXR3b3JraW5nIGZlYXR1cmUgZW5hYmxlZCBieSBgQ09ORklHX0lORVRfUFNQYC4gSXQmIzM5O3MgdGVzdGFibGUgd2l0aCBmdXp6aW5nIHVzaW5nIHRoZSBzb2NrZXQgb3BlcmF0aW9ucywgbGlrZSBUQ1AgYWNjZXB0LCBsaXN0ZW4sIGNvbm5lY3QsIGFuZCBwb3RlbnRpYWxseSBuZXRsaW5rIGNvbW1hbmRzIHJlbGF0ZWQgdG8gUFNQLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGxvb2sgYXQgYG5ldC9wc3AvS2NvbmZpZ2AgYW5kIGlmIGl0IGhhcyBhbnkgZnVydGhlciBkZXBlbmRlbmNpZXMuIFdlJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgSU5FVF9QU1BgIGRlcGVuZHMgb24gYElORVRgLCBidXQgYXJlIHRoZXJlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIGluIGBuZXQvcHNwL0tjb25maWdgIGl0c2VsZiwgb3IgcGVyaGFwcyBgbmV0L0tjb25maWdgIG9yIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ2A/IEl0JiMzOTtzIGFsd2F5cyBpbXBvcnRhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZS4qbmV0L3BzcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz04ND1zb3VyY2UgXCYjMzQ7bmV0L3BhY2tldC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo4NTpzb3VyY2UgXCYjMzQ7bmV0L3BzcC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy04Ni1zb3VyY2UgXCYjMzQ7bmV0L3VuaXgvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzIzOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgUFNQIFNlY3VyaXR5IFByb3RvY29sIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBnaXZlbiB0aGlzIEtjb25maWcgZW50cnkgZm9yIHRoZSBQU1AgU2VjdXJpdHkgUHJvdG9jb2wuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBuZXQvcHNwL0tjb25maWdgIGZpbGUgZGlyZWN0bHkgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJJiMzOTttIG5vdGluZyB0aGUgYm9vbGVhbiBuYXR1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGUgZGVwZW5kZW5jeSBvbiBgSU5FVGAsIGFuZCB0aGUgc2VsZWN0IHN0YXRlbWVudHMgY2hvb3NpbmcgYFNLQl9ERUNSWVBURURgLCBgU0tCX0VYVEVOU0lPTlNgLCBhbmQgYFNPQ0tfVkFMSURBVEVfWE1JVGAuIFRoZXNlIGRlcGVuZGVuY2llcyBnaXZlIG1lIGltbWVkaWF0ZSBjbHVlcyBhYm91dCB0aGUgdW5kZXJseWluZyBrZXJuZWwgYXJjaGl0ZWN0dXJlIGFuZCBob3cgdGhpcyBwcm90b2NvbCBpbnRlZ3JhdGVzLiBUaGUgZG9jdW1lbnRhdGlvbiBsaW5rIHBvaW50cyB0byB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY2F0aW9uLCB3aGljaCBJJiMzOTtsbCBhYnNvbHV0ZWx5IHJldmlldywgbGlrZWx5IG11bHRpcGxlIHRpbWVzLiBUaGUgJiMzNDtJZiB1bnN1cmUsIHNheSBOJiMzNDsgaGVscCB0ZXh0IGlzIHN0YW5kYXJkLCBidXQgSSB3aWxsIGJlIHN1cmUgdG8gYXZvaWQgdGhhdC4KCk5vdywgSSB3YW50IGEgbW9yZSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiBhY3Jvc3MgYWxsIEtjb25maWcgZmlsZXMgYW5kIGhlYWRlciBmaWxlcyBpbiB0aGUgcmVsZXZhbnQgYXJlYXMgdG8gY2hlY2sgZXZlcnkgcGxhY2UgYElORVRfUFNQYCBpcyByZWZlcmVuY2VkLiBDcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBpcyBpbXBvcnRhbnQuIE5leHQsIEkgbmVlZCB0byBrbm93IHRoZSBydW50aW1lIGNvbmZpZ3VyYXRpb24uIEhvdyBpcyBQU1AgYWN0dWFsbHkgKmFzc29jaWF0ZWQqIHdpdGggYSBzb2NrZXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gZm9yIGRvaW5nIHRoaXMuIFRoYXQgd2lsbCBwcm9iYWJseSByZXF1aXJlIG1vcmUgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBidXQgaWRlYWxseSwgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCBtYW5pcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBuZXRsaW5rIGludGVyZmFjZXMgb3IgYHNldHNvY2tvcHRgIG9wdGlvbnMgcmVsYXRlZCB0byAmIzM0O1BTUCYjMzQ7LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgdXNlZCB3aWxsIGNvbWUgZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNwX3NvY2tfYXNzb2Nfc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wc3AvcHNwLmg9MjU9dm9pZCBwc3BfZGV2X3R4X2tleV9kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcbm5ldC9wc3AvcHNwLmg6MjY6aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbm5ldC9wc3AvcHNwLmgtMjctXHRcdFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbm5ldC9wc3AvcHNwLmgtMjgtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L3BzcC9wc3AuaDoyOTppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbm5ldC9wc3AvcHNwLmgtMzAtXHRcdFx0ICB1MzIgdmVyc2lvbiwgc3RydWN0IHBzcF9rZXlfcGFyc2VkICprZXksXG4tLVxubmV0L3BzcC9wc3BfbmwuYz03NzA9aW50IHBzcF9ubF9yeF9hc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3BzcC9wc3BfbmwuYy04MDktXG5uZXQvcHNwL3BzcF9ubC5jOjgxMDpcdGVyciA9IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzb2NrZXQtXHUwMDNlc2ssIHBhcywgXHUwMDI2a2V5LCBpbmZvLVx1MDAzZWV4dGFjayk7XG5uZXQvcHNwL3BzcF9ubC5jLTgxMS1cdGlmIChlcnIpIHtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTgyNj1pbnQgcHNwX25sX3R4X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTg1Ny1cbm5ldC9wc3AvcHNwX25sLmM6ODU4Olx0ZXJyID0gcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHNvY2tldC1cdTAwM2VzaywgcHNkLCB2ZXJzaW9uLCBcdTAwMjZrZXksXG5uZXQvcHNwL3BzcF9ubC5jLTg1OS1cdFx0XHRcdCAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEyND12b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMxLVxubmV0L3BzcC9wc3Bfc29jay5jOjEzMjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0xNTg9c3RhdGljIGludCBwc3Bfc29ja19yZWN2X3F1ZXVlX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNzYtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTc3OmludCBwc3Bfc29ja19hc3NvY19zZXRfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2RldiAqcHNkLFxubmV0L3BzcC9wc3Bfc29jay5jLTE3OC1cdFx0XHQgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgc25pcHBldCBvZiBjb2RlLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIGFuIGV4cGVydCB3b3VsZDoKCioqRGl2aW5nIGludG8gYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAgYW5kIGBwc3Bfc29ja19hc3NvY19zZXRfdHhgKioKClJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggc29ja2V0IGFzc29jaWF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXQvcHNwL3BzcF9zb2NrLmNgIGZpbGUuIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBhbmQgYHBzcF9zb2NrX2Fzc29jX3NldF90eGAuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgY29udHJvbCB0aGUgc2V0dXAgb2YgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgYXNzb2NpYXRpb25zIGZvciB0aGVzZSBwYXJ0aWN1bGFyIFBTUCBzb2NrZXRzLiBJJiMzOTttIGFzc3VtaW5nICYjMzQ7UFNQJiMzNDsgaXMgc29tZXRoaW5nIHByb3ByaWV0YXJ5IG9yIHNwZWNpZmljIHRvIHRoaXMgbmV0d29yayBzdGFjazsga25vd2luZyB0aGlzLCBJIGNhbiBpbmZlciB0aGF0IHRoZSBhc3NvY2lhdGlvbnMgYmVpbmcgc2V0IGhlcmUgYXJlIGxpa2VseSB0aWVkIHRvIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgb3IgbWVjaGFuaXNtIGZvciBlZmZpY2llbnRseSBoYW5kbGluZyB0aGVzZSBzb2NrZXRzLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAmIzM0O2Fzc29jaWF0aW9uJiMzNDsgbWVhbnMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhYm91dCBsaW5raW5nIGEgc29ja2V0IHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2UsIGZsb3cgSUQsIHF1ZXVlLCBvciBldmVuIGEgcGFydGljdWxhciBidWZmZXI/IElzIHRoaXMgYWJvdXQgc2V0dGluZyB1cCBhIGNvbnRleHQgZm9yIHBhY2tldCBwcm9jZXNzaW5nIG9yIGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uPyBUaGUgJiMzNDtzZXRcX3J4JiMzNDsgYW5kICYjMzQ7c2V0XF90eCYjMzQ7IGRpc3RpbmN0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgY29ubmVjdGlvbiBpcyByZWxldmFudC4KCk15IGZpcnN0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgcHNwX3NvY2suY2AgdG8gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgb2YgdGhlIFBTUCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBhc3NvY2lhdGlvbnMgYXJlIHVzZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgcmVsYXRlIHRvIChlc3BlY2lhbGx5IGFueXRoaW5nIHdpdGggJiMzNDthc3NvYywmIzM0OyAmIzM0O3J4LCYjMzQ7IG9yICYjMzQ7dHgmIzM0OyBpbiB0aGUgbmFtZSksIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCB0aGVzZSBmdW5jdGlvbnMsIGlkZW50aWZ5aW5nIGFueSBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMuIENvbnRleHQgaXMga2V5LCBhbmQgSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgKndoeSogb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGUgKmhvdyogdGhleSYjMzk7cmUgZGVzaWduZWQuIFRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiAqd2hhdCogaXMgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wc3AvcHNwX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRpZiAocGFzIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCkpXG4gMTIxOlx0XHRcdGNhbGxfcmN1KFx1MDAyNnBhcy1cdTAwM2VyY3UsIHBzcF9hc3NvY19mcmVlX3F1ZXVlKTtcbiAxMjI6XHR9XG4gMTIzOlx0XG4gMTI0Olx0dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4gMTI1Olx0e1xuIDEyNjpcdFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cdTAwM2Vwc3BfYXNzb2MsIDEpO1xuIDEyNzpcdFxuIDEyODpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG4gMTI5Olx0XHRwc3BfYXNzb2NfcHV0KHBhcyk7XG4gMTMwOlx0fVxuIDEzMTpcdFxuIDEzMjpcdGludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG4gMTMzOlx0XHRcdFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbiAxMzQ6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxMzU6XHR7XG4gMTM2Olx0XHRpbnQgZXJyO1xuIDEzNzpcdFxuIDEzODpcdFx0bWVtY3B5KFx1MDAyNnBhcy1cdTAwM2VyeCwga2V5LCBzaXplb2YoKmtleSkpO1xuIDEzOTpcdFxuIDE0MDpcdFx0bG9ja19zb2NrKHNrKTtcbiAxNDE6XHRcbiAxNDI6XHRcdGlmIChwc3Bfc2tfYXNzb2Moc2spKSB7XG4gMTQzOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVwmIzM0Oyk7XG4gMTQ0Olx0XHRcdGVyciA9IC1FQlVTWTtcbiAxNDU6XHRcdFx0Z290byBleGl0X3VubG9jaztcbiAxNDY6XHRcdH1cbiAxNDc6XHRcbiAxNDg6XHRcdHJlZmNvdW50X2luYyhcdTAwMjZwYXMtXHUwMDNlcmVmY250KTtcbiAxNDk6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihzay1cdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XG4gMTUwOlx0XHRlcnIgPSAwO1xuIDE1MTpcdFxuIDE1MjpcdGV4aXRfdW5sb2NrOlxuIDE1MzpcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiAxNTQ6XHRcbiAxNTU6XHRcdHJldHVybiBlcnI7XG4gMTU2Olx0fVxuIDE1NzpcdFxuIDE1ODpcdHN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbiAxNTk6XHR7XG4gMTYwOlx0XHRzdHJ1Y3QgcHNwX3NrYl9leHQgKnBzZTtcbiAxNjE6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMTYyOlx0XG4gMTYzOlx0XHRza2JfcmJ0cmVlX3dhbGsoc2tiLCBcdTAwMjZ0Y3Bfc2soc2spLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkge1xuIDE2NDpcdFx0XHRwc2UgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX1BTUCk7XG4gMTY1Olx0XHRcdGlmICghcHNwX3BzZV9tYXRjaGVzX3Bhcyhwc2UsIHBhcykpXG4gMTY2Olx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiAxNjc6XHRcdH1cbiAxNjg6XHRcbiAxNjk6XHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYikge1xuIDE3MDpcdFx0XHRwc2UgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX1BTUCk7XG4gMTcxOlx0XHRcdGlmICghcHNwX3BzZV9tYXRjaGVzX3Bhcyhwc2UsIHBhcykpXG4gMTcyOlx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiAxNzM6XHRcdH1cbiAxNzQ6XHRcdHJldHVybiAwO1xuIDE3NTpcdH1cbiAxNzY6XHRcbiAxNzc6XHRpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbiAxNzg6XHRcdFx0XHQgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbiAxNzk6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxODA6XHR7XG4gMTgxOlx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7XG4gMTgyOlx0XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpkdW1teTtcbiAxODM6XHRcdGludCBlcnI7XG4gMTg0Olx0XG4gMTg1Olx0XHRsb2NrX3NvY2soc2spO1xuIDE4NjpcdFxuIDE4NzpcdFx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbiAxODg6XHRcdGlmICghcGFzKSB7XG4gMTg5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGhhcyBubyBSeCBrZXlcJiMzNDspO1xuIDE5MDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE5MTpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDE5MjpcdFx0fVxuIDE5MzpcdFx0aWYgKHBhcy1cdTAwM2Vwc2QgIT0gcHNkKSB7XG4gMTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Ungga2V5IGZyb20gZGlmZmVyZW50IGRldmljZVwmIzM0Oyk7XG4gMTk1Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTk2Olx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gMTk3Olx0XHR9XG4gMTk4Olx0XHRpZiAocGFzLVx1MDAzZXZlcnNpb24gIT0gdmVyc2lvbikge1xuIDE5OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4gMjAwOlx0XHRcdFx0ICAgICAgIFwmIzM0O1BTUCB2ZXJzaW9uIG1pc21hdGNoIHdpdGggZXhpc3Rpbmcgc3RhdGVcJiMzNDspO1xuIDIwMTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDIwMjpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDIwMzpcdFx0fVxuIDIwNDpcdFx0aWYgKHBhcy1cdTAwM2V0eC5zcGkpIHtcbiAyMDU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtUeCBrZXkgYWxyZWFkeSBzZXRcJiMzNDspO1xuIDIwNjpcdFx0XHRlcnIgPSAtRUJVU1k7XG4gMjA3Olx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gMjA4Olx0XHR9XG4gMjA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjczCgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDYwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYHNrX2Nsb25lKClgIGluIGBuZXQvY29yZS9zb2NrLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgYWxsIHJlbGV2YW50IHN5bWJvbHMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgdGhlIG1vc3QgZWZmZWN0aXZlIHBhcmFtZXRlcnMgZm9yIGZ1enppbmcuCgpNeSBhbmFseXNpcyB3ZW50IGxpa2UgdGhpczoKMS4gICoqTW9kaWZpZWQgRnVuY3Rpb246KiogRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYHNrX2Nsb25lYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuCjIuICAqKkhvdCBQYXRoIEFuYWx5c2lzOioqIEkgY29uc2lkZXJlZCB3aGV0aGVyIGBza19jbG9uZWAgaXMgYSBmcmVxdWVudGx5IGV4ZWN1dGVkIGhvdC1wYXRoIGZ1bmN0aW9uIG9yIGxlc3MgY3JpdGljYWwgYW5kIGNvbmZpcm1lZCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIFRDUC9TQ1RQIGNvbm5lY3Rpb24gc2V0dXAgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGJ1dCBub3QgYWx3YXlzIGhvdCBwYXRoLiBUaGlzIGluZm9ybXMgbXkgZnV6emluZyBzdHJhdGVneS4KMy4gICoqSW5zdHJ1Y3Rpb24gQWxpZ25tZW50OioqIEkgdGhlbiBjYXJlZnVsbHkgcmUtcmVhZCB0aGUgcmVsZXZhbnQgZnV6emluZyBpbnN0cnVjdGlvbiB3aGljaCBlbXBoYXNpemVzIGZvY3VzaW5nIG9uIHNwZWNpZmljLCBub24tZ2VuZXJpYyBlbnRyeXBvaW50cy4gVGhlIGluc3RydWN0aW9uIGFsc28gaGlnaGxpZ2h0ZWQgdGhlIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyB0byBlbnN1cmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZy4KNC4gICoqSWRlbnRpZnlpbmcgRm9jdXMgU3ltYm9sczoqKiBCYXNlZCBvbiB0aGUgcGF0Y2gsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlICpgc2tfY2xvbmVgKiBmdW5jdGlvbiBhbmQgKm5ldGxpbmsgZW50cnlwb2ludHMgZm9yIFBTUCo6IGBwc3BfbmxfcnhfYXNzb2NfZG9pdGAsIGBwc3BfbmxfdHhfYXNzb2NfZG9pdGAsIGFuZCB0aGUgc29ja2V0IGFzc29jaWF0aW9uIGZ1bmN0aW9uczogYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAsIGBwc3Bfc29ja19hc3NvY19zZXRfdHhgLCBgcHNwX3NrX2Fzc29jX2ZyZWVgIGFzIHRoZSBtYWluIGZvY3VzIHN5bWJvbHMuCjUuICAqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOioqIEkgY2hlY2tlZCBmb3IgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYW5kIGRlcGVuZGVuY2llcyBsaWtlIGBDT05GSUdfSU5FVF9QU1BgLiBJIGNvbmZpcm1lZCB0aGF0IGBJTkVUX1BTUGAgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgTkVUYAo2LiAgKipWZXJpZnlpbmcgRnV6emluZyBTdWl0YWJpbGl0eToqKiBJIHZlcmlmaWVkIHRoZSBwYXRjaCBmaXhlcyBhIHJlZmNvdW50aW5nL3NvY2tldCBpbml0aWFsaXphdGlvbiBpc3N1ZSB3aGVuIGNsb25pbmcgc29ja2V0cyB3aXRoIFBTUCBzdXBwb3J0IGVuYWJsZWQgKGBDT05GSUdfSU5FVF9QU1BgKSwgY29uZmlybWluZyBpdHMgc3VpdGFiaWxpdHkgZm9yIGZ1enppbmcuCjcuICAqKmBGb2N1c1N5bWJvbHNgIFJlZmluZW1lbnQ6KiogV2l0aCB0aGF0IGluIG1pbmQsIEkgcmV2aWV3ZWQgdGhlIGtleSBmdXp6aW5nIHBhcmFtZXRlcnM6CiAgICAqICAgKipgV29ydGhGdXp6aW5nYDoqKiBDb25maXJtZWQgdGhhdCB0aGUgZml4IGlzIHdvcnRoIGZ1enppbmcgZHVlIHRvIHRoZSByZWZjb3VudGluZy9zb2NrZXQgaW5pdGlhbGl6YXRpb24gaXNzdWUuCiAgICAqICAgKipgRm9jdXNTeW1ib2xzYDoqKiBNeSBmaW5hbCBzZWxlY3Rpb24gZm9yIEZvY3VzU3ltYm9scyBpbmNsdWRlczoKICAgICAgICAqICAgYHNrX2Nsb25lYAogICAgICAgICogICBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YAogICAgICAgICogICBgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4YAogICAgICAgICogICBgcHNwX3NrX2Fzc29jX2ZyZWVgCiAgICAqICAgKipgRW5hYmxlQ29uZmlnc2A6KiogVGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBhcmU6CiAgICAgICAgKiAgIGBJTkVUX1BTUGAKICAgICAgICAqICAgYElORVRgCjguICAqKkZpbmFsIFZlcmlmaWNhdGlvbjoqKiBJIGRvdWJsZS1jaGVja2VkIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMsIGZpbmRpbmcgdGhhdCBgc2tfY2xvbmVgIGlzIGBFWFBPUlRfU1lNQk9MX0dQTGAgYW5kIHRoZSBvdGhlcnMgYXJlIGFsc28gbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIHRhcmdldHMgYW5kIGNvbmZpZ3VyYXRpb25zLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCBhbmQgdGhlIHN5c3RlbSByZXF1aXJlbWVudHMgaXMgbm93IHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2Nsb25lJiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF9yeCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfdHgmIzM0OywKICAgICYjMzQ7cHNwX3NrX2Fzc29jX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQmIzM5O3MgcHNwX2Fzc29jIHBvaW50ZXIgaXMgY2xlYXJlZCBkdXJpbmcgc2tfY2xvbmUoKSB3aGVuIElORVRfUFNQIGlzIGVuYWJsZWQsIHByZXZlbnRpbmcgdGhlIG5ld2x5IGNsb25lZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQgc29ja2V0JiMzOTtzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2Nsb25lJiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF9yeCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfdHgmIzM0OywKICAgICYjMzQ7cHNwX3NrX2Fzc29jX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQmIzM5O3MgcHNwX2Fzc29jIHBvaW50ZXIgaXMgY2xlYXJlZCBkdXJpbmcgc2tfY2xvbmUoKSB3aGVuIElORVRfUFNQIGlzIGVuYWJsZWQsIHByZXZlbnRpbmcgdGhlIG5ld2x5IGNsb25lZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQgc29ja2V0JiMzOTtzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX2Nsb25lKClgIGluIGBuZXQvY29yZS9zb2NrLmNgIHRvIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCB0byBgTlVMTGAgdmlhIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTClgLiBcblxuV2hlbiBhIHNvY2tldCBpcyBjbG9uZWQsIGBzb2NrX2NvcHkoKWAgcGVyZm9ybXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgZnJvbSBwYXJlbnQgdG8gY2hpbGQuIFdpdGhvdXQgY2xlYXJpbmcgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AsIHRoZSBjbG9uZWQgc29ja2V0IGluaGVyaXRlZCB0aGUgcGFyZW50JiMzOTtzIHBvaW50ZXIgdG8gYHN0cnVjdCBwc3BfYXNzb2NgIHdpdGhvdXQgdGFraW5nIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGNvdW50LiBVcG9uIGRlc3RydWN0aW9uIG9mIHRoZSBjbG9uZWQgc29ja2V0IChgcHNwX3NrX2Fzc29jX2ZyZWVgKSwgYHBzcF9hc3NvY19wdXQoKWAgd291bGQgYmUgY2FsbGVkLCBsZWFkaW5nIHRvIHJlZmVyZW5jZSB1bmRlcmZsb3csIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBlcnJvcnMuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhZGRyZXNzaW5nIG9iamVjdCBsaWZlY3ljbGUsIHBvaW50ZXIgYWxpYXNpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzICh3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4pLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2E1YTg1ZWJiYWM2OTc1MmUwYWZhZjZjYTg4OGI1M2FhNTZmMDQ5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE3OjIzOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDFhZDQxOTA0ZGIyNWIuLmZhNjBiNzQ5NGM1ODYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTI0OTQsNiAmIzQzOzI0OTQsOSBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSwKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKIAlSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtza19icGZfc3RvcmFnZSwgTlVMTCk7CiAjZW5kaWYKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApCiYjNDM7CVJDVV9JTklUX1BPSU5URVIobmV3c2stJmd0O3BzcF9hc3NvYywgTlVMTCk7CiYjNDM7I2VuZGlmCiAKIAkvKiBTQU5JVFkgKi8KIAlpZiAobGlrZWx5KG5ld3NrLSZndDtza19uZXRfcmVmY250KSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3OQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2NvcmUvc29jay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc2tfY2xvbmVgIChvciBwb3RlbnRpYWxseSBgc2tfY2xvbmVfbG9ja2ApIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHNwb3QgZm9yIHNvY2tldCBjbG9uaW5nLCBhbmQgYW55IG1vZGlmaWNhdGlvbiB0aGVyZSB3YXJyYW50cyBhIGNsb3NlIGxvb2suIFRoZSBzbmlwcGV0IGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBhZGRpbmcgYSBjb25kaXRpb25hbCBibG9jayBiYXNlZCBvbiBgQ09ORklHX0lORVRfUFNQYC4gSW5zaWRlIHRoYXQgY29uZGl0aW9uYWwsIGl0JiMzOTtzIGluaXRpYWxpemluZyBgbmV3c2stJmd0O3BzcF9hc3NvY2AgdG8gYE5VTExgIHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBhc3NvY2lhdGluZyBzb21lIHNvcnQgb2YgcG9pbnRlciB3aXRoIHRoZSBuZXcgc29ja2V0IGNsb25lIGlmIHRoaXMgYENPTkZJR19JTkVUX1BTUGAgZmVhdHVyZSBpcyBlbmFibGVkLgoKUmlnaHQsIHNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYHBzcF9hc3NvY2AgKmlzKiBhbmQgd2hhdCB0aGlzIGBDT05GSUdfSU5FVF9QU1BgIGZsYWcgY29udHJvbHMuIFRpbWUgdG8gZ28gaHVudGluZyB0aHJvdWdoIHRoZSBjb2RlYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSBoZXJlIHRvIHNlZSBpZiBhbnkgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IGNvbmNlcm5zIGNvbWUgdG8gbWluZCBhcyBhIHJlc3VsdCBvZiB0aGF0IGFzc29jaWF0aW9uIGFuZCB0aGUgY2xvbmluZyBwcm9jZXNzLiBBbHNvLCBnaXZlbiBpdOKAmXMgUkNVIGluaXQsIHRoZXJlIGFyZSBpbXBsaWNhdGlvbnMgaW4gdGVybXMgb2YgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IHNhZmV0eSB3aXRoIHJlc3BlY3QgdG8gdGhhdCByZWFkIGFuZCB3cml0ZS4gTGV0JiMzOTtzIHNlZSB3aGF04oCZcyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNwX2Fzc29jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz05MzE9c3RydWN0IHBzcF9rZXkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05MzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6OTM1OnN0YXRpYyBpbnQgbWx4NWVfcHNwX2Fzc29jX2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtOTM2LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTk2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYzo5NjE6c3RhdGljIHZvaWQgbWx4NWVfcHNwX2Fzc29jX2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtOTYyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM9MTAxMT1zdGF0aWMgc3RydWN0IHBzcF9kZXZfb3BzIG1seDVfcHNwX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtMTAxMy1cdC5yeF9zcGlfYWxsb2MgPSBtbHg1ZV9wc3Bfcnhfc3BpX2FsbG9jLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjEwMTQ6XHQudHhfa2V5X2FkZCAgID0gbWx4NWVfcHNwX2Fzc29jX2FkZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYzoxMDE1Olx0LnR4X2tleV9kZWwgICA9IG1seDVlX3BzcF9hc3NvY19kZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtMTAxNi1cdC5rZXlfcm90YXRlICAgPSBtbHg1ZV9wc3Bfa2V5X3JvdGF0ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYz05Mz1zdGF0aWMgYm9vbCBtbHg1ZV9wc3Bfc2V0X3N0YXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jLTk2LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jOjk3Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMtOTgtXHRib29sIHJldCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xOD1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjItXHRzdHJ1Y3QgcHNwX2RldiAqcGVlcl9wc2Q7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjM6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjQtXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTM5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjQwOlx0cHRyID0gcHNwX2Fzc29jX2Rydl9kYXRhKHBhcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtNDEtXHRpZiAoKnB0ciAhPSBucykge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xMzE9bnNpbV9yeF9zcGlfYWxsb2Moc3RydWN0IHBzcF9kZXYgKnBzZCwgdTMyIHZlcnNpb24sXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1MS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxNTI6c3RhdGljIGludCBuc2ltX2Fzc29jX2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUzLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTUtXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IHBzZC1cdTAwM2VkcnZfcHJpdjtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxNTY6XHR2b2lkICoqcHRyID0gcHNwX2Fzc29jX2Rydl9kYXRhKHBhcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTU3LVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xNjU9c3RhdGljIGludCBuc2ltX2tleV9yb3RhdGUoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNzktXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTgwOnN0YXRpYyB2b2lkIG5zaW1fYXNzb2NfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xODEte1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4Mi1cdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gcHNkLVx1MDAzZWRydl9wcml2O1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE4MzpcdHZvaWQgKipwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xODQtXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6ODY6XHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XHQgICpwc3BfYXNzb2M7XG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ny0jZW5kaWZcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MjI9aW50IHBzcF9kZXZfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHUxNiBkZXZfaWQsIHU4IGdlbmVyYXRpb24sIGJvb2wgc3RyaXBfaWN2KTtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMjQtLyogS2VybmVsLWZhY2luZyBBUEkgKi9cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoyNTp2b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yNi1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoyNzpzdGF0aWMgaW5saW5lIHZvaWQgKnBzcF9hc3NvY19kcnZfZGF0YShzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMjgte1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zNz12b2lkIHBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzgtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQwLXtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0MTpcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfY2hlY2soc2stXHUwMDNlcHNwX2Fzc29jLCBsb2NrZGVwX3NvY2tfaXNfaGVsZChzaykpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQyLX1cbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9NDU9cHNwX2VucXVldWVfc2V0X2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDYte1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQ3Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQ4LVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD02OT1zdGF0aWMgaW5saW5lIGJvb2xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo3MDpwc3BfaXNfYWxsb3dlZF9ub25kYXRhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC03MS17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjgzOnBzcF9wc2VfbWF0Y2hlc19wYXMoc3RydWN0IHBzcF9za2JfZXh0ICpwc2UsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC04NC17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTkxPXN0YXRpYyBpbmxpbmUgZW51bSBza2JfZHJvcF9yZWFzb25cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo5MjpfX3BzcF9za19yeF9wb2xpY3lfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTkzLXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTIyPXBzcF90d3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjMte1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjEyNDpcdHJldHVybiBfX3BzcF9za19yeF9wb2xpY3lfY2hlY2soc2tiLCByY3VfZGVyZWZlcmVuY2UodHctXHUwMDNlcHNwX2Fzc29jKSk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTI1LX1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjYtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTI3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2dldF9hc3NvY19yY3UoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyOC17XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTI5Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEzMC1cdGludCBzdGF0ZTtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTM2LVx0cGFzID0gc3RhdGUgPT0gVENQX1RJTUVfV0FJVCA/XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTM3Olx0XHQgICAgICByY3VfZGVyZWZlcmVuY2UoaW5ldF90d3NrKHNrKS1cdTAwM2Vwc3BfYXNzb2MpIDpcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMzg6XHRcdCAgICAgIHJjdV9kZXJlZmVyZW5jZShzay1cdTAwM2Vwc3BfYXNzb2MpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEzOS1cdHJldHVybiBwYXM7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE0MS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tiX2dldF9hc3NvY19yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNDMte1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTUyLVx0aW50IHBzcF9lbmNhcCA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBQU1BfSERSX1NJWkUgJiM0MzsgUFNQX1RSTF9TSVpFO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE1MzpcdGJvb2wgaGFzX3BzcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzay1cdTAwM2Vwc3BfYXNzb2MpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1NC1cbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTYzPXBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikgeyB9XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY0LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY2LXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTg3PXBzcF90d3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTkxLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za2JfZ2V0X2Fzc29jX3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE5My17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9NDM9c3RydWN0IHBzcF9kZXZfY29uZmlnIHtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01My0vKipcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjU0OiAqIHN0cnVjdCBwc3BfYXNzb2NfZGV2IC0gd3JhcHBlciBmb3IgYXNzb2NpYXRlZCBuZXRfZGV2aWNlXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01NS0gKiBAZGV2X2xpc3Q6IGxpc3Qgbm9kZSBmb3IgcHNwX2Rldjo6YXNzb2NfZGV2X2xpc3Rcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01OC0gKi9cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjU5OnN0cnVjdCBwc3BfYXNzb2NfZGV2IHtcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTYwLVx0c3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC02Ny0gKiBAbWFpbl9uZXRkZXY6IG9yaWdpbmFsIG5ldGRldmljZSBvZiB0aGlzIFBTUCBkZXZpY2VcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjY4OiAqIEBhc3NvY19kZXZfbGlzdDogbGlzdCBvZiBwc3BfYXNzb2NfZGV2IGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUFNQIGRldmljZVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjktICogQGFzc29jX2Rldl9jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBhc3NvY19kZXZfbGlzdFxuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTEyND1zdHJ1Y3QgcHNwX2Rldl9jYXBzIHtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0xMzItXHQgKiBAYXNzb2NfZHJ2X3NwYzogc2l6ZSBvZiBkcml2ZXItc3BlY2lmaWMgc3RhdGUgaW4gVHggYXNzb2NcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjEzMzpcdCAqIERldGVybWluZXMgdGhlIHNpemUgb2Ygc3RydWN0IHBzcF9hc3NvYzo6ZHJ2X2RhdGFcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEzNC1cdCAqL1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE1MD1zdHJ1Y3QgcHNwX2tleV9wYXJzZWQge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTE1NC1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjE1NTpzdHJ1Y3QgcHNwX2Fzc29jIHtcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTE1Ni1cdHN0cnVjdCBwc3BfZGV2ICpwc2Q7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTk1PXN0cnVjdCBwc3BfZGV2X29wcyB7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjIyLVx0ICovXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoyMjM6XHRpbnQgKCp0eF9rZXlfYWRkKShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMjQtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIyOC1cdCAqL1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MjI5Olx0dm9pZCAoKnR4X2tleV9kZWwpKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMzAtXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTI0Mj1zdHJ1Y3Qgc2tfZmlsdGVyO1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0yNTgtICAqXHRAc2tfcG9saWN5OiBmbG93IHBvbGljeVxuaW5jbHVkZS9uZXQvc29jay5oOjI1OTogICpcdEBwc3BfYXNzb2M6IFBTUCBhc3NvY2lhdGlvbiwgaWYgc29ja2V0IGlzIFBTUC1zZWN1cmVkXG5pbmNsdWRlL25ldC9zb2NrLmgtMjYwLSAgKlx0QHNrX3JlY2VpdmVfcXVldWU6IGluY29taW5nIHBhY2tldHNcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MzY1PXN0cnVjdCBzb2NrIHtcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtNDY3LSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmluY2x1ZGUvbmV0L3NvY2suaDo0Njg6XHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XHQqcHNwX2Fzc29jO1xuaW5jbHVkZS9uZXQvc29jay5oLTQ2OS0jZW5kaWZcbi0tXG5uZXQvY29yZS9zb2NrLmM9MjQ3OT1zdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjQ5Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5uZXQvY29yZS9zb2NrLmM6MjQ5ODpcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbm5ldC9jb3JlL3NvY2suYy0yNDk5LSNlbmRpZlxuLS1cbm5ldC9wc3AvcHNwLW5sLWdlbi5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgcHNwX25sX29wc1tdID0ge1xuLS1cbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTEwNS1cdFx0LmNtZFx0XHQ9IFBTUF9DTURfUlhfQVNTT0MsXG5uZXQvcHNwL3BzcC1ubC1nZW4uYzoxMDY6XHRcdC5wcmVfZG9pdFx0PSBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQsXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy0xMDctXHRcdC5kb2l0XHRcdD0gcHNwX25sX3J4X2Fzc29jX2RvaXQsXG4tLVxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTE0LVx0XHQuY21kXHRcdD0gUFNQX0NNRF9UWF9BU1NPQyxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jOjExNTpcdFx0LnByZV9kb2l0XHQ9IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZCxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTExNi1cdFx0LmRvaXRcdFx0PSBwc3BfbmxfdHhfYXNzb2NfZG9pdCxcbi0tXG5uZXQvcHNwL3BzcC1ubC1nZW4uaD0yMD1pbnQgcHNwX2RldmljZV9nZXRfbG9ja2VkX2FkbWluKGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMjEtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9wc3AvcHNwLW5sLWdlbi5oOjIyOmludCBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXG5uZXQvcHNwL3BzcC1ubC1nZW4uaC0yMy1cdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuLS1cbm5ldC9wc3AvcHNwLmg9MjE9dm9pZCBwc3Bfbmxfbm90aWZ5X2RldihzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1MzIgY21kKTtcbm5ldC9wc3AvcHNwLmgtMjItXG5uZXQvcHNwL3BzcC5oOjIzOnN0cnVjdCBwc3BfYXNzb2MgKnBzcF9hc3NvY19jcmVhdGUoc3RydWN0IHBzcF9kZXYgKnBzZCk7XG5uZXQvcHNwL3BzcC5oLTI0LXN0cnVjdCBwc3BfZGV2ICpwc3BfZGV2X2dldF9mb3Jfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3BzcC9wc3AuaDoyNTp2b2lkIHBzcF9kZXZfdHhfa2V5X2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpO1xubmV0L3BzcC9wc3AuaDoyNjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3AuaC0yNy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuLS1cbm5ldC9wc3AvcHNwLmg9Mjk9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXG4tLVxubmV0L3BzcC9wc3AuaC0zMS1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvcHNwL3BzcC5oOjMyOnZvaWQgcHNwX2Fzc29jc19rZXlfcm90YXRlZChzdHJ1Y3QgcHNwX2RldiAqcHNkKTtcbm5ldC9wc3AvcHNwLmgtMzMtXG4tLVxubmV0L3BzcC9wc3BfbWFpbi5jPTEzMT12b2lkIHBzcF9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgcHNwX2RldiAqcHNkKVxubmV0L3BzcC9wc3BfbWFpbi5jLTEzMi17XG5uZXQvcHNwL3BzcF9tYWluLmM6MTMzOlx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5LCAqZW50cnlfdG1wO1xubmV0L3BzcC9wc3BfbWFpbi5jOjEzNDpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcywgKm5leHQ7XG5uZXQvcHNwL3BzcF9tYWluLmMtMTM1LVxuLS1cbm5ldC9wc3AvcHNwX21haW4uYz00MDg9c3RhdGljIHZvaWQgcHNwX2Rldl9kaXNhc3NvY19vbmUoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9wc3AvcHNwX21haW4uYy00MDkte1xubmV0L3BzcC9wc3BfbWFpbi5jOjQxMDpcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeTtcbm5ldC9wc3AvcHNwX21haW4uYy00MTEtXG4tLVxubmV0L3BzcC9wc3BfbmwuYz01ND1wc3BfbmxfbXVsdGljYXN0X3Blcl9ucyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1bnNpZ25lZCBpbnQgZ3JvdXAsXG4tLVxubmV0L3BzcC9wc3BfbmwuYy01OS17XG5uZXQvcHNwL3BzcF9ubC5jOjYwOlx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xubmV0L3BzcC9wc3BfbmwuYy02MS1cdHN0cnVjdCB4YXJyYXkgc2VudF9uZXRzO1xuLS1cbm5ldC9wc3AvcHNwX25sLmM9MjMwPWJvb2wgcHNwX2hhc19hc3NvY19kZXZfaW5fbnMoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldCAqbmV0KVxubmV0L3BzcC9wc3BfbmwuYy0yMzEte1xubmV0L3BzcC9wc3BfbmwuYzoyMzI6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XG5uZXQvcHNwL3BzcF9ubC5jLTIzMy1cbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTI0Mj1zdGF0aWMgaW50IHBzcF9ubF9maWxsX2Fzc29jX2Rldl9saXN0KHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBza19idWZmICpyc3AsXG4tLVxubmV0L3BzcC9wc3BfbmwuYy0yNDUte1xubmV0L3BzcC9wc3BfbmwuYzoyNDY6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XG5uZXQvcHNwL3BzcF9ubC5jLTI0Ny1cdHN0cnVjdCBuZXQgKmRldl9uZXRfbnM7XG4tLVxubmV0L3BzcC9wc3BfbmwuYz00NDc9aW50IHBzcF9ubF9rZXlfcm90YXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTQ4Mi1cbm5ldC9wc3AvcHNwX25sLmM6NDgzOlx0cHNwX2Fzc29jc19rZXlfcm90YXRlZChwc2QpO1xubmV0L3BzcC9wc3BfbmwuYy00ODQtXHRwc2QtXHUwMDNlc3RhdHMucm90YXRpb25zJiM0MzsmIzQzOztcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTQ5OT1pbnQgcHNwX25sX2Rldl9hc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3BzcC9wc3BfbmwuYy01MDEtXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbm5ldC9wc3AvcHNwX25sLmM6NTAyOlx0c3RydWN0IHBzcF9hc3NvY19kZXYgKnBzcF9hc3NvY19kZXY7XG5uZXQvcHNwL3BzcF9ubC5jLTUwMy1cdHN0cnVjdCBuZXRfZGV2aWNlICphc3NvY19kZXY7XG4tLVxubmV0L3BzcC9wc3BfbmwuYy01MTgtXG5uZXQvcHNwL3BzcF9ubC5jOjUxOTpcdHBzcF9hc3NvY19kZXYgPSBremFsbG9jX29iaigqcHNwX2Fzc29jX2Rldik7XG5uZXQvcHNwL3BzcF9ubC5jOjUyMDpcdGlmICghcHNwX2Fzc29jX2Rldikge1xubmV0L3BzcC9wc3BfbmwuYy01MjEtXHRcdGVyciA9IC1FTk9NRU07XG4tLVxubmV0L3BzcC9wc3BfbmwuYy01MjYtXHRhc3NvY19kZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KG5ldCwgYXNzb2NfaWZpbmRleCxcbm5ldC9wc3AvcHNwX25sLmM6NTI3Olx0XHRcdFx0XHRcdTAwMjZwc3BfYXNzb2NfZGV2LVx1MDAzZWRldl90cmFja2VyLFxubmV0L3BzcC9wc3BfbmwuYy01MjgtXHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtNTQzLVxubmV0L3BzcC9wc3BfbmwuYzo1NDQ6XHRwc3BfYXNzb2NfZGV2LVx1MDAzZWFzc29jX2RldiA9IGFzc29jX2Rldjtcbm5ldC9wc3AvcHNwX25sLmMtNTQ1LVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtNTYzLVxubmV0L3BzcC9wc3BfbmwuYzo1NjQ6XHRsaXN0X2FkZF90YWlsKFx1MDAyNnBzcF9hc3NvY19kZXYtXHUwMDNlZGV2X2xpc3QsIFx1MDAyNnBzZC1cdTAwM2Vhc3NvY19kZXZfbGlzdCk7XG5uZXQvcHNwL3BzcF9ubC5jLTU2NS1cdHBzZC1cdTAwM2Vhc3NvY19kZXZfY250JiM0MzsmIzQzOztcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTU3NS1lcnJfcHV0X2Rldjpcbm5ldC9wc3AvcHNwX25sLmM6NTc2Olx0bmV0ZGV2X3B1dChhc3NvY19kZXYsIFx1MDAyNnBzcF9hc3NvY19kZXYtXHUwMDNlZGV2X3RyYWNrZXIpO1xubmV0L3BzcC9wc3BfbmwuYy01NzctZXJyX2ZyZWVfYXNzb2M6XG5uZXQvcHNwL3BzcF9ubC5jOjU3ODpcdGtmcmVlKHBzcF9hc3NvY19kZXYpO1xubmV0L3BzcC9wc3BfbmwuYy01NzktZXJyX3B1dF9uZXQ6XG4tLVxubmV0L3BzcC9wc3BfbmwuYz01ODU9aW50IHBzcF9ubF9kZXZfZGlzYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3BzcC9wc3BfbmwuYy01ODYte1xubmV0L3BzcC9wc3BfbmwuYzo1ODc6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnksICpmb3VuZCA9IE5VTEw7XG5uZXQvcHNwL3BzcF9ubC5jLTU4OC1cdHN0cnVjdCBwc3BfZGV2ICpwc2QgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtNjM4LVxubmV0L3BzcC9wc3BfbmwuYzo2Mzk6aW50IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcyxcbm5ldC9wc3AvcHNwX25sLmMtNjQwLVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTc3MD1pbnQgcHNwX25sX3J4X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTc3NC1cdHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCBrZXk7XG5uZXQvcHNwL3BzcF9ubC5jOjc3NTpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbm5ldC9wc3AvcHNwX25sLmMtNzc2LVx0c3RydWN0IHNrX2J1ZmYgKnJzcDtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTc5Mi1cbm5ldC9wc3AvcHNwX25sLmM6NzkzOlx0cGFzID0gcHNwX2Fzc29jX2NyZWF0ZShwc2QpO1xubmV0L3BzcC9wc3BfbmwuYy03OTQtXHRpZiAoIXBhcykge1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtODE0LVx0fVxubmV0L3BzcC9wc3BfbmwuYzo4MTU6XHRwc3BfYXNzb2NfcHV0KHBhcyk7XG5uZXQvcHNwL3BzcF9ubC5jLTgxNi1cbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTgxOS1lcnJfZnJlZV9wYXM6XG5uZXQvcHNwL3BzcF9ubC5jOjgyMDpcdHBzcF9hc3NvY19wdXQocGFzKTtcbm5ldC9wc3AvcHNwX25sLmMtODIxLWVycl9mcmVlX3JzcDpcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MzA9cHNwX3ZhbGlkYXRlX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3BzcC9wc3Bfc29jay5jLTMxLXtcbm5ldC9wc3AvcHNwX3NvY2suYzozMjpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbm5ldC9wc3AvcHNwX3NvY2suYy0zMy1cdGJvb2wgZ29vZDtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtNDYtXG5uZXQvcHNwL3BzcF9zb2NrLmM6NDc6c3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2NyZWF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkKVxubmV0L3BzcC9wc3Bfc29jay5jLTQ4LXtcbm5ldC9wc3AvcHNwX3NvY2suYzo0OTpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbm5ldC9wc3AvcHNwX3NvY2suYy01MC1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtNjgtXG5uZXQvcHNwL3BzcF9zb2NrLmM6Njk6c3RhdGljIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9hc3NvY19kdW1teShzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5uZXQvcHNwL3BzcF9zb2NrLmMtNzAte1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy03OS1cbm5ldC9wc3AvcHNwX3NvY2suYzo4MDpzdGF0aWMgaW50IHBzcF9kZXZfdHhfa2V5X2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5uZXQvcHNwL3BzcF9zb2NrLmMtODEtXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy04NS1cbm5ldC9wc3AvcHNwX3NvY2suYzo4Njp2b2lkIHBzcF9kZXZfdHhfa2V5X2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5uZXQvcHNwL3BzcF9zb2NrLmMtODcte1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy05Mi1cbm5ldC9wc3AvcHNwX3NvY2suYzo5MzpzdGF0aWMgdm9pZCBwc3BfYXNzb2NfZnJlZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvcHNwL3BzcF9zb2NrLmMtOTQte1xubmV0L3BzcC9wc3Bfc29jay5jOjk1Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwc3BfYXNzb2MsIHdvcmspO1xubmV0L3BzcC9wc3Bfc29jay5jLTk2LVx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IHBhcy1cdTAwM2Vwc2Q7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTEwNS1cbm5ldC9wc3AvcHNwX3NvY2suYzoxMDY6c3RhdGljIHZvaWQgcHNwX2Fzc29jX2ZyZWVfcXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxubmV0L3BzcC9wc3Bfc29jay5jLTEwNy17XG5uZXQvcHNwL3BzcF9zb2NrLmM6MTA4Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwc3BfYXNzb2MsIHJjdSk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA5LVxubmV0L3BzcC9wc3Bfc29jay5jOjExMDpcdElOSVRfV09SSyhcdTAwMjZwYXMtXHUwMDNld29yaywgcHNwX2Fzc29jX2ZyZWUpO1xubmV0L3BzcC9wc3Bfc29jay5jLTExMS1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2cGFzLVx1MDAzZXdvcmspO1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xMTQtLyoqXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTE1OiAqIHBzcF9hc3NvY19wdXQoKSAtIHJlbGVhc2UgYSByZWZlcmVuY2Ugb24gYSBQU1AgYXNzb2NpYXRpb25cbm5ldC9wc3AvcHNwX3NvY2suYy0xMTYtICogQHBhczogYXNzb2NpYXRpb24gdG8gcmVsZWFzZVxubmV0L3BzcC9wc3Bfc29jay5jLTExNy0gKi9cbm5ldC9wc3AvcHNwX3NvY2suYzoxMTg6dm9pZCBwc3BfYXNzb2NfcHV0KHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTkte1xubmV0L3BzcC9wc3Bfc29jay5jLTEyMC1cdGlmIChwYXMgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZwYXMtXHUwMDNlcmVmY250KSlcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjE6XHRcdGNhbGxfcmN1KFx1MDAyNnBhcy1cdTAwM2VyY3UsIHBzcF9hc3NvY19mcmVlX3F1ZXVlKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjItfVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0xMjQ9dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjY6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrLVx1MDAzZXBzcF9hc3NvYywgMSk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI3LVxubmV0L3BzcC9wc3Bfc29jay5jOjEyODpcdHJjdV9hc3NpZ25fcG9pbnRlcihzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xubmV0L3BzcC9wc3Bfc29jay5jOjEyOTpcdHBzcF9hc3NvY19wdXQocGFzKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzAtfVxubmV0L3BzcC9wc3Bfc29jay5jLTEzMS1cbm5ldC9wc3AvcHNwX3NvY2suYzoxMzI6aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzMtXHRcdFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTQ4LVx0cmVmY291bnRfaW5jKFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpO1xubmV0L3BzcC9wc3Bfc29jay5jOjE0OTpcdHJjdV9hc3NpZ25fcG9pbnRlcihzay1cdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTUwLVx0ZXJyID0gMDtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTU3LVxubmV0L3BzcC9wc3Bfc29jay5jOjE1ODpzdGF0aWMgaW50IHBzcF9zb2NrX3JlY3ZfcXVldWVfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTU5LXtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTc3PWludCBwc3Bfc29ja19hc3NvY19zZXRfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2RldiAqcHNkLFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xODEtXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MTgyOlx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqZHVtbXk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTgzLVx0aW50IGVycjtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjE5LVx0ICovXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjIwOlx0ZHVtbXkgPSBwc3BfYXNzb2NfZHVtbXkocGFzKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yMjEtXHRpZiAoIWR1bW15KSB7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTI0OC1cbm5ldC9wc3AvcHNwX3NvY2suYzoyNDk6dm9pZCBwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHN0cnVjdCBwc3BfZGV2ICpwc2QpXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjUwLXtcbm5ldC9wc3AvcHNwX3NvY2suYzoyNTE6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpuZXh0O1xubmV0L3BzcC9wc3Bfc29jay5jLTI1Mi1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjY2PXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTI2Ny17XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjY4Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNjktXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTI3MS1cdFx0cmVmY291bnRfaW5jKFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpO1xubmV0L3BzcC9wc3Bfc29jay5jOjI3MjpcdHJjdV9hc3NpZ25fcG9pbnRlcih0dy1cdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMjczLVx0dHctXHUwMDNldHdfdmFsaWRhdGVfeG1pdF9za2IgPSBwc3BfdmFsaWRhdGVfeG1pdDtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9Mjc2PXZvaWQgcHNwX3R3c2tfYXNzb2NfZnJlZShzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dylcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzcte1xubmV0L3BzcC9wc3Bfc29jay5jOjI3ODpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodHctXHUwMDNlcHNwX2Fzc29jLCAxKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzktXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjgwOlx0cmN1X2Fzc2lnbl9wb2ludGVyKHR3LVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjgxOlx0cHNwX2Fzc29jX3B1dChwYXMpO1xubmV0L3BzcC9wc3Bfc29jay5jLTI4Mi19XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTI4ND12b2lkIHBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9wc3AvcHNwX3NvY2suYy0yODUte1xubmV0L3BzcC9wc3Bfc29jay5jOjI4NjpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbm5ldC9wc3AvcHNwX3NvY2suYy0yODctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTYwNj1kZWYgX2NoZWNrX2Fzc29jX2xpc3QoY2ZnLCBwc3BfZGV2X2lkLCBpZmluZGV4LCBuc2lkPU5vbmUpOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02MjMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjI0OmRlZiBfZGF0YV9iYXNpY19zZW5kX25ldGtpdF9wc3BfYXNzb2MoY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjI1LSAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NjU5PWRlZiBfZ2V0X3BzcF92ZXJfaXA2X3ZhcmlhbnRzKCk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2NC1Aa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXA2X3ZhcmlhbnRzKCkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjY1OmRlZiBkYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjYtICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgUFNQIGRhdGEgc2VuZCB2aWEgbmV0a2l0IHdpdGggZGV2LWFzc29jLlwmIzM0O1wmIzM0O1wmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2Ny0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjY4OiAgICBfZGF0YV9iYXNpY19zZW5kX25ldGtpdF9wc3BfYXNzb2MoY2ZnLCB2ZXJzaW9uLCBpcHZlcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTY5OD1kZWYgX2Rldl9jaGFuZ2Vfbm90aWZ5X211bHRpX25zX25ldGtpdChjZmcpOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS03MjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NzI2OmRlZiBfcHNwX2Rldl9nZXRfY2hlY2tfbmV0a2l0X3BzcF9hc3NvYyhjZmcpOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTcyNy0gICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7IENoZWNrIHBzcCBkZXYtZ2V0IG91dHB1dCB3aXRoIG5ldGtpdCBpbnRlcmZhY2UgYXNzb2NpYXRlZCB3aXRoIFBTUCBkZXYgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTk0MT1kZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTgwLSAgICAgICAgICAgICAgICAgICAgICAgIF9hc3NvY19jaGVja19saXN0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5Ojk4MTogICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODItICAgICAgICAgICAgICAgICAgICAgICAgX2tleV9yb3RhdGlvbl9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTk4My0gICAgICAgICAgICAgICAgICAgICAgICBfZGV2X2NoYW5nZV9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5Ojk4NDogICAgICAgICAgICAgICAgICAgICAgICBfcHNwX2Rldl9nZXRfY2hlY2tfbmV0a2l0X3BzcF9hc3NvYyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODUtICAgICAgICAgICAgICAgICAgICAgICAgX2Rldl9hc3NvY19ub19uc2lkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGBza19jbG9uZV9sb2NrYCBpbiBgbmV0L2NvcmUvc29jay5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgYHNrX2Nsb25lX2xvY2tgIG9wZXJhdGVzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgd2l0aGluIGBuZXQvY29yZS9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI0OTAgdG8gMjUyMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIHNvY2tldCBjbG9uaW5nIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcy4gSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaGVyZSwgdGhlIGNvbnRlbnRpb24gcG9pbnRzLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgYWRkcmVzc2VkIG9yIGludHJvZHVjZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IG5ldHdvcmsgc29ja2V0cyBhcmUgZHVwbGljYXRlZCBhbmQgaG93IGNvbmN1cnJlbnQgYWNjZXNzIGlzIG1hbmFnZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NrIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgbWlnaHQgYXJpc2UgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcy4gSSBiZXQgdGhlIGNvbW1lbnRzIGFyb3VuZCB0aGF0IHNlY3Rpb24gYXJlIHZlcnkgZW5saWdodGVuaW5nLCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIGhhcyB0byBvZmZlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NjA6XHRcdGlmIChzay1cdTAwM2Vza19rZXJuX3NvY2spXG4yNDYxOlx0XHRcdGxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKFx1MDAyNnNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2ssXG4yNDYyOlx0XHRcdFx0YWZfa2Vybl9jYWxsYmFja19rZXlzICYjNDM7IHNrLVx1MDAzZXNrX2ZhbWlseSxcbjI0NjM6XHRcdFx0XHRhZl9mYW1pbHlfa2Vybl9jbG9ja19rZXlfc3RyaW5nc1tzay1cdTAwM2Vza19mYW1pbHldKTtcbjI0NjQ6XHRcdGVsc2VcbjI0NjU6XHRcdFx0bG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUoXHUwMDI2c2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayxcbjI0NjY6XHRcdFx0XHRhZl9jYWxsYmFja19rZXlzICYjNDM7IHNrLVx1MDAzZXNrX2ZhbWlseSxcbjI0Njc6XHRcdFx0XHRhZl9mYW1pbHlfY2xvY2tfa2V5X3N0cmluZ3Nbc2stXHUwMDNlc2tfZmFtaWx5XSk7XG4yNDY4Olx0fVxuMjQ2OTpcdFxuMjQ3MDpcdC8qKlxuMjQ3MTpcdCAqIHNrX2Nsb25lIC0gY2xvbmUgYSBzb2NrZXRcbjI0NzI6XHQgKiBAc2s6IHRoZSBzb2NrZXQgdG8gY2xvbmVcbjI0NzM6XHQgKiBAcHJpb3JpdHk6IGZvciBhbGxvY2F0aW9uICglR0ZQX0tFUk5FTCwgJUdGUF9BVE9NSUMsIGV0YylcbjI0NzQ6XHQgKiBAbG9jazogaWYgdHJ1ZSwgbG9jayB0aGUgY2xvbmVkIHNrXG4yNDc1Olx0ICpcbjI0NzY6XHQgKiBJZiBAbG9jayBpcyB0cnVlLCB0aGUgY2xvbmUgaXMgbG9ja2VkIGJ5IGJoX2xvY2tfc29jaygpLCBhbmRcbjI0Nzc6XHQgKiBjYWxsZXIgbXVzdCB1bmxvY2sgc29ja2V0IGV2ZW4gaW4gZXJyb3IgcGF0aCBieSBiaF91bmxvY2tfc29jaygpLlxuMjQ3ODpcdCAqL1xuMjQ3OTpcdHN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuMjQ4MDpcdFx0XHQgICAgICBib29sIGxvY2spXG4yNDgxOlx0e1xuMjQ4MjpcdFx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuMjQ4MzpcdFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xuMjQ4NDpcdFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcbjI0ODU6XHRcdHN0cnVjdCBzb2NrICpuZXdzaztcbjI0ODY6XHRcbjI0ODc6XHRcdG5ld3NrID0gc2tfcHJvdF9hbGxvYyhwcm90LCBwcmlvcml0eSwgc2stXHUwMDNlc2tfZmFtaWx5KTtcbjI0ODg6XHRcdGlmICghbmV3c2spXG4yNDg5Olx0XHRcdGdvdG8gb3V0O1xuMjQ5MDpcdFxuMjQ5MTpcdFx0c29ja19jb3B5KG5ld3NrLCBzayk7XG4yNDkyOlx0XG4yNDkzOlx0XHRuZXdzay1cdTAwM2Vza19wcm90X2NyZWF0b3IgPSBwcm90O1xuMjQ5NDpcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbjI0OTU6XHRcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xuMjQ5NjpcdCNlbmRpZlxuMjQ5NzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbjI0OTg6XHRcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbjI0OTk6XHQjZW5kaWZcbjI1MDA6XHRcbjI1MDE6XHRcdC8qIFNBTklUWSAqL1xuMjUwMjpcdFx0aWYgKGxpa2VseShuZXdzay1cdTAwM2Vza19uZXRfcmVmY250KSkge1xuMjUwMzpcdFx0XHRnZXRfbmV0X3RyYWNrKHNvY2tfbmV0KG5ld3NrKSwgXHUwMDI2bmV3c2stXHUwMDNlbnNfdHJhY2tlciwgcHJpb3JpdHkpO1xuMjUwNDpcdFx0XHRzb2NrX2ludXNlX2FkZChzb2NrX25ldChuZXdzayksIDEpO1xuMjUwNTpcdFx0fSBlbHNlIHtcbjI1MDY6XHRcdFx0LyogS2VybmVsIHNvY2tldHMgYXJlIG5vdCBlbGV2YXRpbmcgdGhlIHN0cnVjdCBuZXQgcmVmY291bnQuXG4yNTA3Olx0XHRcdCAqIEluc3RlYWQsIHVzZSBhIHRyYWNrZXIgdG8gbW9yZSBlYXNpbHkgZGV0ZWN0IGlmIGEgbGF5ZXJcbjI1MDg6XHRcdFx0ICogaXMgbm90IHByb3Blcmx5IGRpc21hbnRsaW5nIGl0cyBrZXJuZWwgc29ja2V0cyBhdCBuZXRuc1xuMjUwOTpcdFx0XHQgKiBkZXN0cm95IHRpbWUuXG4yNTEwOlx0XHRcdCAqL1xuMjUxMTpcdFx0XHRuZXRfcGFzc2l2ZV9pbmMoc29ja19uZXQobmV3c2spKTtcbjI1MTI6XHRcdFx0X19uZXRuc190cmFja2VyX2FsbG9jKHNvY2tfbmV0KG5ld3NrKSwgXHUwMDI2bmV3c2stXHUwMDNlbnNfdHJhY2tlcixcbjI1MTM6XHRcdFx0XHRcdCAgICAgIGZhbHNlLCBwcmlvcml0eSk7XG4yNTE0Olx0XHR9XG4yNTE1Olx0XG4yNTE2Olx0XHRza19ub2RlX2luaXQoXHUwMDI2bmV3c2stXHUwMDNlc2tfbm9kZSk7XG4yNTE3Olx0XHRzb2NrX2xvY2tfaW5pdChuZXdzayk7XG4yNTE4Olx0XG4yNTE5Olx0XHRpZiAobG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc2tfY2xvbmVgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHNrX2Nsb25lYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgc29ja2V0IHN0cnVjdHVyZXMgYXJlIGNvcGllZCBkdXJpbmcgY2xvbmluZy4gU3BlY2lmaWNhbGx5LCBgc29ja19jb3B5KG5ld3NrLCBzaylgIGlzIGp1c3QgYSBgbWVtY3B5YC4gVGhpcyBtZWFucyB3aGVuIHdlIGNsb25lIGEgc29ja2V0LCBgbmV3c2stJmd0O3BzcF9hc3NvY2Agc2ltcGx5IGdldHMgYSBkaXJlY3QgY29weSBvZiBgc2stJmd0O3BzcF9hc3NvY2AsIHdpdGhvdXQgYW55IHByb3BlciByZWZlcmVuY2UgY291bnRpbmcuIFRoaXMgaXMgYSByZWQgZmxhZy4gVGhpbmsgYWJvdXQgaXQ6IHdoZW4gY2xvbmluZyBhIGxpc3RlbmluZyBzb2NrZXQgdG8gYSBjaGlsZCBzb2NrZXQsIGBuZXdzay0mZ3Q7cHNwX2Fzc29jYCBpcyBwb2ludGluZyB0byB0aGUgc2FtZSBtZW1vcnkgYXMgdGhlIHBhcmVudCYjMzk7cyEgVGhpcyBzaGFyZWQgb3duZXJzaGlwLCB3aXRob3V0IHByb3BlciB0cmFja2luZywgaXMgc2NyZWFtaW5nIHBvdGVudGlhbCBmb3IgY2hhb3MuCgpUaGUgcHJvYmxlbT8gRWl0aGVyIHNvY2tldCwgdGhlIHBhcmVudCBvciB0aGUgY2hpbGQsIGNvdWxkIGZyZWUgdGhlIGBwc3BfYXNzb2NgIG9yIGRlc3Ryb3kgaXQuIElmIGVpdGhlciBvbmUgZG9lcyBhIGBwc3Bfc2tfYXNzb2NfZnJlZShzaylgIG9yIGRlcmVmZXJlbmNlcyBpdCwgaXQgY291bGQgbGVhZCB0byBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIGEgZG91YmxlLWZyZWUsIG9yIGV2ZW4gYW4gdW5kZXJmbG93IG9mIHRoZSByZWZlcmVuY2UgY291bnQuIE5pZ2h0bWFyZSBzY2VuYXJpbyEKClRoZSBmaXgsIGhvd2V2ZXIsIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFNldHRpbmcgYFJDVV9JTklUX1BPSU5URVIobmV3c2stJmd0O3BzcF9hc3NvYywgTlVMTCk7YCBleHBsaWNpdGx5IGNsZWFycyB0aGUgcG9pbnRlciBpbiBgbmV3c2tgLiBUaGlzIGlzIHRoZSB2aXRhbCBzdGVwOiBpdCBicmVha3MgdGhlIGxpbmssIGVuc3VyaW5nIHRoZSBjaGlsZCBzb2NrZXQgZG9lc24mIzM5O3QgaW5oZXJpdCB0aGUgcGFyZW50JiMzOTtzIGBwc3BfYXNzb2NgIHdpdGhvdXQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBvciBhbnkgc2hhcmVkIG1lbW9yeS4gTm93LCB0aGF0IGlzIGEgY2xlYW4gc2VwYXJhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHBpdm90IHRvIG1lbW9yeSBzYWZldHk6IEkgbmVlZCB0byBydWxlIG91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBvciBpbmZvcm1hdGlvbiBsZWFrcy4KCkluIGBza19jbG9uZWAgd2UgaGF2ZSBgc29ja19jb3B5KG5ld3NrLCBzaylgIGZvbGxvd2VkIGJ5IGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtwc3BfYXNzb2MsIE5VTEwpYC4gSSBkb24mIzM5O3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEluaXRpYWxseSwgYG5ld3NrLSZndDtwc3BfYXNzb2NgIGlzIGNvcGllZCBmcm9tIHRoZSBzb3VyY2UsIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZC4gVGhlbiwgd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gYE5VTExgLiBUaGlzIGlzIGEgc2FmZSBzZXF1ZW5jZS4gVGhlIHJvb3QgY2F1c2UgaXMgZGVmaW5pdGVseSB0aGUgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgYnVnLCB3aGVyZSB0aGUgc29ja2V0IGNsb25pbmcgY29waWVkIGEgcG9pbnRlciB3aXRob3V0IGluY3JlbWVudGluZyB0aGUgcmVmY291bnQgb3IgY2xlYXJpbmcgaXQuIFRoaXMgaXMgd2h5IEtBU0FOIGNhdGNoZXMgdGhlc2UgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1mcmVlIGJ1Z3MuCgpCdXQsIEkgYW0gbm90IHJlYWR5IHRvIGJlIGNvbXBsZXRlbHkgc2F0aXNmaWVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgbGVha3MuIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8gbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgaW52b2x2ZWQ/IExldCYjMzk7cyBnaXZlIGBwc3BfYXNzb2NgIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiB3aXRoIGEgS01TQU4tbGlrZSBhcHByb2FjaC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UgdG8gYmUgc3VyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNwX3NrX2Fzc29jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zMz11bnNpZ25lZCBpbnQgcHNwX2tleV9zaXplKHUzMiB2ZXJzaW9uKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzUtdm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zNz12b2lkIHBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzgtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQwLXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9NDU9cHNwX2VucXVldWVfc2V0X2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQ4LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQ5Olx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC01MC1cdGlmIChwYXMgXHUwMDI2XHUwMDI2IHBhcy1cdTAwM2V0eC5zcGkpXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTExNj1wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMTcte1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjExODpcdHJldHVybiBfX3BzcF9za19yeF9wb2xpY3lfY2hlY2soc2tiLCBwc3Bfc2tfYXNzb2Moc2spKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMTktfVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU3LSNlbHNlXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spIHsgfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1OS1zdGF0aWMgaW5saW5lIHZvaWRcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTYzPXBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikgeyB9XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY0LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY2LXtcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTQwPXZvaWQgaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY2LVx0ZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cdTAwM2Vza19yeF9kc3QsIDEpKTtcbm5ldC9pcHY0L2FmX2luZXQuYzoxNjc6XHRwc3Bfc2tfYXNzb2NfZnJlZShzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY4LX1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTE4PXZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTEyMy1cbm5ldC9wc3AvcHNwX3NvY2suYzoxMjQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTMyPWludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTE0MS1cbm5ldC9wc3AvcHNwX3NvY2suYzoxNDI6XHRpZiAocHNwX3NrX2Fzc29jKHNrKSkge1xubmV0L3BzcC9wc3Bfc29jay5jLTE0My1cdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXCYjMzQ7KTtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTc3PWludCBwc3Bfc29ja19hc3NvY19zZXRfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2RldiAqcHNkLFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xODYtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTg3Olx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xODgtXHRpZiAoIXBhcykge1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0yNjY9dm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjY3LXtcbm5ldC9wc3AvcHNwX3NvY2suYzoyNjg6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xubmV0L3BzcC9wc3Bfc29jay5jLTI2OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjEKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNvY2tldCBDbG9uaW5nIEJ1ZyBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290LiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgc29ja2V0IGNsb25pbmcgbWVjaGFuaXNtLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIGhvdyBgcHNwX2Fzc29jYCAoYSBzZWN1cml0eSBhc3NvY2lhdGlvbiByZWxhdGVkIHN0cnVjdHVyZSkgaXMgaGFuZGxlZCB3aGVuIGEgc29ja2V0IChgc2tgKSBpcyBjbG9uZWQgdG8gY3JlYXRlIGEgbmV3IHNvY2tldCAoYG5ld3NrYCkuCgpFc3NlbnRpYWxseSwgYHNvY2tfY29weWAgd2FzIGNvcHlpbmcgdGhlIGBzay0mZ3Q7cHNwX2Fzc29jYCBwb2ludGVyIHRvIGBuZXdzay0mZ3Q7cHNwX2Fzc29jYCB3aXRob3V0IGNvcnJlY3RseSBtYW5hZ2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB1bmRlcmx5aW5nIGBwc3BfYXNzb2NgIHN0cnVjdHVyZS4gVGhpcyBtZWFudCBib3RoIGBza2AgYW5kIGBuZXdza2Agd2VyZSBwb2ludGluZyB0byB0aGUgc2FtZSBgcHNwX2Fzc29jYCB3aXRob3V0IHByb3Blcmx5IGluZGljYXRpbmcgc2hhcmVkIG93bmVyc2hpcCB0aHJvdWdoIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50ZXIuIExhdGVyLCB3aGVuIGVpdGhlciB0aGUgb3JpZ2luYWwgb3IgdGhlIGNsb25lZCBzb2NrZXQgd2FzIGRlc3Ryb3llZCB2aWEgYGluZXRfc29ja19kZXN0cnVjdGAgYW5kIGBwc3Bfc2tfYXNzb2NfZnJlZWAsIHRoZSBhc3NvY2lhdGVkIGBwc3BfYXNzb2NgIHN0cnVjdCB3b3VsZCBoYXZlIGBwc3BfYXNzb2NfcHV0YCBjYWxsZWQsIHdoaWNoIGRlY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQuIFRoaXMgY291bGQgbGVhZCB0byBhIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIGlmIGJvdGggc29ja2V0cyB3ZXJlIGV2ZW50dWFsbHkgZGVzdHJveWVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IGNvcnJ1cHRlZCBzdGF0ZS4KClRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGluaXRpYWxpemluZyBgbmV3c2stJmd0O3BzcF9hc3NvY2AgdG8gYE5VTExgIHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSYCAqZHVyaW5nKiB0aGUgY2xvbmUgb3BlcmF0aW9uLiBUaGlzIHByZXZlbnRzIGBuZXdza2AgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQmIzM5O3MgYXNzb2NpYXRpb24gYXQgYWxsLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgd2hldGhlciB0aGlzIGNoYW5nZSwgYW5kIHRoZSBidWcgaXQgZml4ZXMsIHdhcnJhbnRzIGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnLiBJIGhhdmUgdG8gYW5hbHl6ZSBpZiB0aGlzIGludHJvZHVjZXMgb3IgZWxpbWluYXRlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd3JpdGVzIG9yIG1lbW9yeS1yZWxhdGVkIGZsYXdzLgoKSSYjMzk7dmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoZSBjb2RlIGFuZCBJIGNhbiBkZWZpbml0aXZlbHkgc2F5IHRoYXQgdGhpcyBpc3N1ZSBpcyAqbm90KiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhlIGltcHJvcGVyIGFsaWFzaW5nIGFuZCBwb3RlbnRpYWwgZG91YmxlLWZyZWUvdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBLTVNBTiBjaGVja3M6CgoxLiAgSXMgdGhlcmUga2VybmVsIGRhdGEgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8uCjIuICBJcyB0aGVyZSBjb25kaXRpb25hbCBsb2dpYyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4KMy4gIEFyZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGFyZSB0aGVuIHJlYWQgbGF0ZXI/IE5vLgo0LiAgSXMgdGhlIHVzZSBvZiBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBldGMuLCBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm8uCgpUaGlzIGJ1ZyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBkb21haW4gb2YgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBwb2ludGVyIG1hbmFnZW1lbnQuIEtBU0FOIGlzIGFscmVhZHkgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdHJhY2tpbmcgdGhlc2Ugc29ydHMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGRhbmdsaW5nIHBvaW50ZXJzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGJ5IGVuc3VyaW5nIG1lbW9yeSBpcyB2YWxpZC4KClRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkIGhlcmUsIGFuZCBJJiMzOTtsbCBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIGEgY2xlYXIgY2FzZSBvZiBLQVNBTiYjMzk7cyBzdHJlbmd0aHMsIG5vdCBLTVNBTiYjMzk7cy4gVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza19jbG9uZSgpYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIHZpYSBgUkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpYC4gXG5cbldoZW4gYSBzb2NrZXQgaXMgY2xvbmVkLCBgc29ja19jb3B5KClgIHBlcmZvcm1zIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzb2NrZXQgc3RydWN0dXJlIGZyb20gcGFyZW50IHRvIGNoaWxkLiBXaXRob3V0IGNsZWFyaW5nIGBuZXdzay1cdTAwM2Vwc3BfYXNzb2NgLCB0aGUgY2xvbmVkIHNvY2tldCBpbmhlcml0ZWQgdGhlIHBhcmVudCYjMzk7cyBwb2ludGVyIHRvIGBzdHJ1Y3QgcHNwX2Fzc29jYCB3aXRob3V0IHRha2luZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudC4gVXBvbiBkZXN0cnVjdGlvbiBvZiB0aGUgY2xvbmVkIHNvY2tldCAoYHBzcF9za19hc3NvY19mcmVlYCksIGBwc3BfYXNzb2NfcHV0KClgIHdvdWxkIGJlIGNhbGxlZCwgbGVhZGluZyB0byByZWZlcmVuY2UgdW5kZXJmbG93LCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgZXJyb3JzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWRkcmVzc2luZyBvYmplY3QgbGlmZWN5Y2xlLCBwb2ludGVyIGFsaWFzaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyAod2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tfY2xvbmUoKWAgaW4gYG5ldC9jb3JlL3NvY2suY2AgdG8gZXhwbGljaXRseSBpbml0aWFsaXplIGBuZXdzay1cdTAwM2Vwc3BfYXNzb2NgIHRvIGBOVUxMYCB2aWEgYFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKWAuIFxuXG5XaGVuIGEgc29ja2V0IGlzIGNsb25lZCwgYHNvY2tfY29weSgpYCBwZXJmb3JtcyBhIHNoYWxsb3cgY29weSBvZiB0aGUgc29ja2V0IHN0cnVjdHVyZSBmcm9tIHBhcmVudCB0byBjaGlsZC4gV2l0aG91dCBjbGVhcmluZyBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCwgdGhlIGNsb25lZCBzb2NrZXQgaW5oZXJpdGVkIHRoZSBwYXJlbnQmIzM5O3MgcG9pbnRlciB0byBgc3RydWN0IHBzcF9hc3NvY2Agd2l0aG91dCB0YWtpbmcgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnQuIFVwb24gZGVzdHJ1Y3Rpb24gb2YgdGhlIGNsb25lZCBzb2NrZXQgKGBwc3Bfc2tfYXNzb2NfZnJlZWApLCBgcHNwX2Fzc29jX3B1dCgpYCB3b3VsZCBiZSBjYWxsZWQsIGxlYWRpbmcgdG8gcmVmZXJlbmNlIHVuZGVyZmxvdywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGVycm9ycy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFkZHJlc3Npbmcgb2JqZWN0IGxpZmVjeWNsZSwgcG9pbnRlciBhbGlhc2luZywgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgKHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTikuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyMzoxNC45MDczMDQyNzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTc5NjQ3NjM4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9QU1BcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19jbG9uZVwiLFxuICAgIFwicHNwX3NvY2tfYXNzb2Nfc2V0X3J4XCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfdHhcIixcbiAgICBcInBzcF9za19hc3NvY19mcmVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tfY2xvbmUoKWAgaW4gYG5ldC9jb3JlL3NvY2suY2AgdG8gZXhwbGljaXRseSBpbml0aWFsaXplIGBuZXdzay1cXHUwMDNlcHNwX2Fzc29jYCB0byBgTlVMTGAgdmlhIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpYC4gXFxuXFxuV2hlbiBhIHNvY2tldCBpcyBjbG9uZWQsIGBzb2NrX2NvcHkoKWAgcGVyZm9ybXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgZnJvbSBwYXJlbnQgdG8gY2hpbGQuIFdpdGhvdXQgY2xlYXJpbmcgYG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2NgLCB0aGUgY2xvbmVkIHNvY2tldCBpbmhlcml0ZWQgdGhlIHBhcmVudCdzIHBvaW50ZXIgdG8gYHN0cnVjdCBwc3BfYXNzb2NgIHdpdGhvdXQgdGFraW5nIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGNvdW50LiBVcG9uIGRlc3RydWN0aW9uIG9mIHRoZSBjbG9uZWQgc29ja2V0IChgcHNwX3NrX2Fzc29jX2ZyZWVgKSwgYHBzcF9hc3NvY19wdXQoKWAgd291bGQgYmUgY2FsbGVkLCBsZWFkaW5nIHRvIHJlZmVyZW5jZSB1bmRlcmZsb3csIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBlcnJvcnMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFkZHJlc3Npbmcgb2JqZWN0IGxpZmVjeWNsZSwgcG9pbnRlciBhbGlhc2luZywgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgKHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTikuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgc29ja2V0J3MgcHNwX2Fzc29jIHBvaW50ZXIgaXMgY2xlYXJlZCBkdXJpbmcgc2tfY2xvbmUoKSB3aGVuIElORVRfUFNQIGlzIGVuYWJsZWQsIHByZXZlbnRpbmcgdGhlIG5ld2x5IGNsb25lZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQgc29ja2V0J3MgUFNQIGFzc29jaWF0aW9uIHBvaW50ZXIgd2l0aG91dCBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudC4gVGhpcyBhdm9pZHMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSBjb25kaXRpb25zIHVwb24gc29ja2V0IGRlc3RydWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyMzoxNC45MDczMTE3OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTg0NzQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNhNWE4NWViYmFjNjk3NTJlMGFmYWY2Y2E4ODhiNTNhYTU2ZjA0OWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTc6MjM6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXFxuaW5kZXggMWFkNDE5MDRkYjI1Yi4uZmE2MGI3NDk0YzU4NiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zb2NrLmNcXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcXG5AQCAtMjQ5NCw2ICsyNDk0LDkgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gXFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xcbiAjZW5kaWZcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbitcXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xcbisjZW5kaWZcXG4gXFxuIFxcdC8qIFNBTklUWSAqL1xcbiBcXHRpZiAobGlrZWx5KG5ld3NrLVxcdTAwM2Vza19uZXRfcmVmY250KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyMzoxNS4yNDk4NTU0MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5NTQyMjI1MTIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX2Nsb25lXCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfcnhcIixcbiAgICBcInBzcF9zb2NrX2Fzc29jX3NldF90eFwiLFxuICAgIFwicHNwX3NrX2Fzc29jX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCdzIHBzcF9hc3NvYyBwb2ludGVyIGlzIGNsZWFyZWQgZHVyaW5nIHNrX2Nsb25lKCkgd2hlbiBJTkVUX1BTUCBpcyBlbmFibGVkLCBwcmV2ZW50aW5nIHRoZSBuZXdseSBjbG9uZWQgc29ja2V0IGZyb20gaW5oZXJpdGluZyB0aGUgcGFyZW50IHNvY2tldCdzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2E1YTg1ZWJiYWM2OTc1MmUwYWZhZjZjYTg4OGI1M2FhNTZmMDQ5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjIzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCAxYWQ0MTkwNGRiMjViLi5mYTYwYjc0OTRjNTg2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0yNDk0LDYgKzI0OTQsOSBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXNrX2JwZl9zdG9yYWdlLCBOVUxMKTtcbiAjZW5kaWZcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4rXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG4rI2VuZGlmXG4gXG4gXHQvKiBTQU5JVFkgKi9cbiBcdGlmIChsaWtlbHkobmV3c2stXHUwMDNlc2tfbmV0X3JlZmNudCkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjIzOjE1LjI0OTg1Njc1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzE3MTQxMDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb21taXQuIFRoZSBpbml0aWFsIGZvY3VzIGlzIHRoZSBjaGFuZ2Ugd2l0aGluIGBuZXQvY29yZS9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBza19jbG9uZWAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpdHNlbGYgaXMgc2ltcGxlLCBhIGNvbmRpdGlvbmFsIGluaXRpYWxpemF0aW9uOlxuXG5gYGBjXG4jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5cdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbiNlbmRpZlxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJ2xsIHVzZSBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjb21tYW5kIHRvIHB1bGwgdXAgYG5ldC9jb3JlL3NvY2suY2AgYXJvdW5kIGxpbmUgMjQ5NCB0byBzZWUgd2hhdCBzdXJyb3VuZHMgdGhpcyBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgbGlrZWx5IGdpdmUgaW5zaWdodHMgaW50byB3aHkgdGhpcyBsaW5lIG9mIGNvZGUgZXhpc3RzLiBJJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBDT05GSUdfSU5FVF9QU1BgIGFuZCBgcHNwX2Fzc29jYC4gSSB3aWxsIHNlYXJjaCB0aGUgZW50aXJlIHRyZWUgZm9yIGJvdGggb2YgdGhlc2UsIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSB1c2luZyBgZ3JlcHBlcmAgb3IgYSBzaW1pbGFyIHRvb2wuIFRoaXMgc2hvdWxkIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODIsIk91dHB1dFRva2VucyI6NzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNToyMi40MjEyNzA0ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0ODA6XFx0XFx0XFx0ICAgICAgYm9vbCBsb2NrKVxcbjI0ODE6XFx0e1xcbjI0ODI6XFx0XFx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG4yNDgzOlxcdFxcdHN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjtcXG4yNDg0OlxcdFxcdGJvb2wgaXNfY2hhcmdlZCA9IHRydWU7XFxuMjQ4NTpcXHRcXHRzdHJ1Y3Qgc29jayAqbmV3c2s7XFxuMjQ4NjpcXHRcXG4yNDg3OlxcdFxcdG5ld3NrID0gc2tfcHJvdF9hbGxvYyhwcm90LCBwcmlvcml0eSwgc2stXFx1MDAzZXNrX2ZhbWlseSk7XFxuMjQ4ODpcXHRcXHRpZiAoIW5ld3NrKVxcbjI0ODk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQ5MDpcXHRcXG4yNDkxOlxcdFxcdHNvY2tfY29weShuZXdzaywgc2spO1xcbjI0OTI6XFx0XFxuMjQ5MzpcXHRcXHRuZXdzay1cXHUwMDNlc2tfcHJvdF9jcmVhdG9yID0gcHJvdDtcXG4yNDk0OlxcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4yNDk1OlxcdFxcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXNrX2JwZl9zdG9yYWdlLCBOVUxMKTtcXG4yNDk2OlxcdCNlbmRpZlxcbjI0OTc6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbjI0OTg6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG4yNDk5OlxcdCNlbmRpZlxcbjI1MDA6XFx0XFxuMjUwMTpcXHRcXHQvKiBTQU5JVFkgKi9cXG4yNTAyOlxcdFxcdGlmIChsaWtlbHkobmV3c2stXFx1MDAzZXNrX25ldF9yZWZjbnQpKSB7XFxuMjUwMzpcXHRcXHRcXHRnZXRfbmV0X3RyYWNrKHNvY2tfbmV0KG5ld3NrKSwgXFx1MDAyNm5ld3NrLVxcdTAwM2Vuc190cmFja2VyLCBwcmlvcml0eSk7XFxuMjUwNDpcXHRcXHRcXHRzb2NrX2ludXNlX2FkZChzb2NrX25ldChuZXdzayksIDEpO1xcbjI1MDU6XFx0XFx0fSBlbHNlIHtcXG4yNTA2OlxcdFxcdFxcdC8qIEtlcm5lbCBzb2NrZXRzIGFyZSBub3QgZWxldmF0aW5nIHRoZSBzdHJ1Y3QgbmV0IHJlZmNvdW50LlxcbjI1MDc6XFx0XFx0XFx0ICogSW5zdGVhZCwgdXNlIGEgdHJhY2tlciB0byBtb3JlIGVhc2lseSBkZXRlY3QgaWYgYSBsYXllclxcbjI1MDg6XFx0XFx0XFx0ICogaXMgbm90IHByb3Blcmx5IGRpc21hbnRsaW5nIGl0cyBrZXJuZWwgc29ja2V0cyBhdCBuZXRuc1xcbjI1MDk6XFx0XFx0XFx0ICogZGVzdHJveSB0aW1lLlxcbjI1MTA6XFx0XFx0XFx0ICovXFxuMjUxMTpcXHRcXHRcXHRuZXRfcGFzc2l2ZV9pbmMoc29ja19uZXQobmV3c2spKTtcXG4yNTEyOlxcdFxcdFxcdF9fbmV0bnNfdHJhY2tlcl9hbGxvYyhzb2NrX25ldChuZXdzayksIFxcdTAwMjZuZXdzay1cXHUwMDNlbnNfdHJhY2tlcixcXG4yNTEzOlxcdFxcdFxcdFxcdFxcdCAgICAgIGZhbHNlLCBwcmlvcml0eSk7XFxuMjUxNDpcXHRcXHR9XFxuMjUxNTpcXHRcXG4yNTE2OlxcdFxcdHNrX25vZGVfaW5pdChcXHUwMDI2bmV3c2stXFx1MDAzZXNrX25vZGUpO1xcbjI1MTc6XFx0XFx0c29ja19sb2NrX2luaXQobmV3c2spO1xcbjI1MTg6XFx0XFxuMjUxOTpcXHRcXHRpZiAobG9jaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjU6MjIuNDIxNDUzMzA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjAzMjA0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5FVF9QU1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9MjEwPWNvbmZpZyBNTFg1X0VOX1BTUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTIxMS1cXHRib29sIFxcXCJNZWxsYW5veCBUZWNobm9sb2dpZXMgc3VwcG9ydCBmb3IgUFNQIGNyeXB0b2dyYXBoeS1vZmZsb2FkIGFjY2VsZXJhdGlvblxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzoyMTI6XFx0ZGVwZW5kcyBvbiBJTkVUX1BTUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTIxMy1cXHRkZXBlbmRzIG9uIE1MWDVfQ09SRV9FTlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlPTE5PWVuZGlmXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTIwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZToyMTppZm5lcSAoJChDT05GSUdfSU5FVF9QU1ApLClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUtMjItbmV0ZGV2c2ltLW9ianMgKz0gcHNwLm9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ0OS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDUxLWludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzODgtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTAtXFx0c3RydWN0IHBzcF9kZXYgX19yY3VcXHQqcHNwX2RldjtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA0Mz1lbnVtIHNrYl9leHRfaWQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDU4LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA1OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDYwLVxcdFNLQl9FWFRfUFNQLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04NC1cXHRzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXRcXHQqdHdfdGIyO1xcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oOjg1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ni1cXHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XFx0ICAqcHNwX2Fzc29jO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2Fzc29jX2Rydl9kYXRhKHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zMS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zMy11bnNpZ25lZCBpbnQgcHNwX2tleV9zaXplKHUzMiB2ZXJzaW9uKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTQ2Ni0jZW5kaWZcXG5pbmNsdWRlL25ldC9zb2NrLmg6NDY3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5pbmNsdWRlL25ldC9zb2NrLmgtNDY4LVxcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcXHQqcHNwX2Fzc29jO1xcbi0tXFxubmV0L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19VTklYKVxcdFxcdCs9IHVuaXgvXFxubmV0L01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19JTkVUX1BTUClcXHRcXHQrPSBwc3AvXFxubmV0L01ha2VmaWxlLTIyLW9iai15XFx0XFx0XFx0XFx0Kz0gaXB2Ni9cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTUxNTA9c3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUxNjUtI2VuZGlmXFxubmV0L2NvcmUvc2tidWZmLmM6NTE2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxubmV0L2NvcmUvc2tidWZmLmMtNTE2Ny1cXHRbU0tCX0VYVF9QU1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgcHNwX3NrYl9leHQpLFxcbi0tXFxubmV0L2NvcmUvc29jay5jPTI0Nzk9c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjQ5Ni0jZW5kaWZcXG5uZXQvY29yZS9zb2NrLmM6MjQ5NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxubmV0L2NvcmUvc29jay5jLTI0OTgtXFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG4tLVxcbm5ldC9wc3AvS2NvbmZpZy00LSNcXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1BcXG5uZXQvcHNwL0tjb25maWctNi1cXHRib29sIFxcXCJQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9wc3AvTWFrZWZpbGUtMi1cXG5uZXQvcHNwL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0lORVRfUFNQKSArPSBwc3Aub1xcbm5ldC9wc3AvTWFrZWZpbGUtNC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZz0zPUNPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTPW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWc6NDpDT05GSUdfSU5FVF9QU1A9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZy01LUNPTkZJR19JUFY2PXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjU6MjQuMDQxNzc5ODM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTc4Mjc3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNwX2Fzc29jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz05MzE9c3RydWN0IHBzcF9rZXkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTkzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6OTM1OnN0YXRpYyBpbnQgbWx4NWVfcHNwX2Fzc29jX2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTkzNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTk2MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6OTYxOnN0YXRpYyB2b2lkIG1seDVlX3BzcF9hc3NvY19kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05NjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jPTEwMTE9c3RhdGljIHN0cnVjdCBwc3BfZGV2X29wcyBtbHg1X3BzcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtMTAxMy1cXHQucnhfc3BpX2FsbG9jID0gbWx4NWVfcHNwX3J4X3NwaV9hbGxvYyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6MTAxNDpcXHQudHhfa2V5X2FkZCAgID0gbWx4NWVfcHNwX2Fzc29jX2FkZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6MTAxNTpcXHQudHhfa2V5X2RlbCAgID0gbWx4NWVfcHNwX2Fzc29jX2RlbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtMTAxNi1cXHQua2V5X3JvdGF0ZSAgID0gbWx4NWVfcHNwX2tleV9yb3RhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYz05Mz1zdGF0aWMgYm9vbCBtbHg1ZV9wc3Bfc2V0X3N0YXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMtOTYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jOjk3OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYy05OC1cXHRib29sIHJldCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTE4PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIyLVxcdHN0cnVjdCBwc3BfZGV2ICpwZWVyX3BzZDtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjM6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNC1cXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMzktXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjQwOlxcdHB0ciA9IHBzcF9hc3NvY19kcnZfZGF0YShwYXMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy00MS1cXHRpZiAoKnB0ciAhPSBucykge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTEzMT1uc2ltX3J4X3NwaV9hbGxvYyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1MzIgdmVyc2lvbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTEtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE1MjpzdGF0aWMgaW50IG5zaW1fYXNzb2NfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUzLVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1NS1cXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IHBzZC1cXHUwMDNlZHJ2X3ByaXY7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE1NjpcXHR2b2lkICoqcHRyID0gcHNwX2Fzc29jX2Rydl9kYXRhKHBhcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xNjU9c3RhdGljIGludCBuc2ltX2tleV9yb3RhdGUoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE3OS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTgwOnN0YXRpYyB2b2lkIG5zaW1fYXNzb2NfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTgxLXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTgyLVxcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gcHNkLVxcdTAwM2VkcnZfcHJpdjtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTgzOlxcdHZvaWQgKipwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTg0LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04NS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6ODY6XFx0c3RydWN0IHBzcF9hc3NvYyBfX3JjdVxcdCAgKnBzcF9hc3NvYztcXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ny0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0yMj1pbnQgcHNwX2Rldl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGRldl9pZCwgdTggZ2VuZXJhdGlvbiwgYm9vbCBzdHJpcF9pY3YpO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTI0LS8qIEtlcm5lbC1mYWNpbmcgQVBJICovXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjI1OnZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yNi1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mjc6c3RhdGljIGlubGluZSB2b2lkICpwc3BfYXNzb2NfZHJ2X2RhdGEoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yOC17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mzc9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zOC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00MC17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQxOlxcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfY2hlY2soc2stXFx1MDAzZXBzcF9hc3NvYywgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDItfVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTQ1PXBzcF9lbnF1ZXVlX3NldF9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00Ni17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQ3OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDgtXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Njk9c3RhdGljIGlubGluZSBib29sXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjcwOnBzcF9pc19hbGxvd2VkX25vbmRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC03MS17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9ODI9c3RhdGljIGlubGluZSBib29sXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjgzOnBzcF9wc2VfbWF0Y2hlc19wYXMoc3RydWN0IHBzcF9za2JfZXh0ICpwc2UsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtODQte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTkxPXN0YXRpYyBpbmxpbmUgZW51bSBza2JfZHJvcF9yZWFzb25cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6OTI6X19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtOTMte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTEyMj1wc3BfdHdza19yeF9wb2xpY3lfY2hlY2soc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsIHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyMy17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjEyNDpcXHRyZXR1cm4gX19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrYiwgcmN1X2RlcmVmZXJlbmNlKHR3LVxcdTAwM2Vwc3BfYXNzb2MpKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTI1LX1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTI2LVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjc6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfZ2V0X2Fzc29jX3JjdShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyOC17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjEyOTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEzMC1cXHRpbnQgc3RhdGU7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTM2LVxcdHBhcyA9IHN0YXRlID09IFRDUF9USU1FX1dBSVQgP1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMzc6XFx0XFx0ICAgICAgcmN1X2RlcmVmZXJlbmNlKGluZXRfdHdzayhzayktXFx1MDAzZXBzcF9hc3NvYykgOlxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMzg6XFx0XFx0ICAgICAgcmN1X2RlcmVmZXJlbmNlKHNrLVxcdTAwM2Vwc3BfYXNzb2MpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMzktXFx0cmV0dXJuIHBhcztcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNDEtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE0MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za2JfZ2V0X2Fzc29jX3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNDMte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE1MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwc3Bfc2tfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1Mi1cXHRpbnQgcHNwX2VuY2FwID0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgUFNQX0hEUl9TSVpFICsgUFNQX1RSTF9TSVpFO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNTM6XFx0Ym9vbCBoYXNfcHNwID0gcmN1X2FjY2Vzc19wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTQtXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTYzPXBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikgeyB9XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2NC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTY1OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY2LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xODc9cHNwX3R3c2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE5MS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTkyOnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrYl9nZXRfYXNzb2NfcmN1KHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE5My17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaD00Mz1zdHJ1Y3QgcHNwX2Rldl9jb25maWcge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNTMtLyoqXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NTQ6ICogc3RydWN0IHBzcF9hc3NvY19kZXYgLSB3cmFwcGVyIGZvciBhc3NvY2lhdGVkIG5ldF9kZXZpY2VcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01NS0gKiBAZGV2X2xpc3Q6IGxpc3Qgbm9kZSBmb3IgcHNwX2Rldjo6YXNzb2NfZGV2X2xpc3RcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTU4LSAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjU5OnN0cnVjdCBwc3BfYXNzb2NfZGV2IHtcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC02MC1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0O1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjctICogQG1haW5fbmV0ZGV2OiBvcmlnaW5hbCBuZXRkZXZpY2Ugb2YgdGhpcyBQU1AgZGV2aWNlXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6Njg6ICogQGFzc29jX2Rldl9saXN0OiBsaXN0IG9mIHBzcF9hc3NvY19kZXYgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQU1AgZGV2aWNlXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjktICogQGFzc29jX2Rldl9jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBhc3NvY19kZXZfbGlzdFxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTI0PXN0cnVjdCBwc3BfZGV2X2NhcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTMyLVxcdCAqIEBhc3NvY19kcnZfc3BjOiBzaXplIG9mIGRyaXZlci1zcGVjaWZpYyBzdGF0ZSBpbiBUeCBhc3NvY1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjEzMzpcXHQgKiBEZXRlcm1pbmVzIHRoZSBzaXplIG9mIHN0cnVjdCBwc3BfYXNzb2M6OmRydl9kYXRhXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTM0LVxcdCAqL1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTUwPXN0cnVjdCBwc3Bfa2V5X3BhcnNlZCB7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0xNTQtXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MTU1OnN0cnVjdCBwc3BfYXNzb2Mge1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTE1Ni1cXHRzdHJ1Y3QgcHNwX2RldiAqcHNkO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTk1PXN0cnVjdCBwc3BfZGV2X29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMjItXFx0ICovXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MjIzOlxcdGludCAoKnR4X2tleV9hZGQpKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMjQtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjI4LVxcdCAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjIyOTpcXHR2b2lkICgqdHhfa2V5X2RlbCkoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMzAtXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MjQyPXN0cnVjdCBza19maWx0ZXI7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMjU4LSAgKlxcdEBza19wb2xpY3k6IGZsb3cgcG9saWN5XFxuaW5jbHVkZS9uZXQvc29jay5oOjI1OTogICpcXHRAcHNwX2Fzc29jOiBQU1AgYXNzb2NpYXRpb24sIGlmIHNvY2tldCBpcyBQU1Atc2VjdXJlZFxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNjAtICAqXFx0QHNrX3JlY2VpdmVfcXVldWU6IGluY29taW5nIHBhY2tldHNcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTQ2Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuaW5jbHVkZS9uZXQvc29jay5oOjQ2ODpcXHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XFx0KnBzcF9hc3NvYztcXG5pbmNsdWRlL25ldC9zb2NrLmgtNDY5LSNlbmRpZlxcbi0tXFxubmV0L2NvcmUvc29jay5jPTI0Nzk9c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjQ5Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxubmV0L2NvcmUvc29jay5jOjI0OTg6XFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG5uZXQvY29yZS9zb2NrLmMtMjQ5OS0jZW5kaWZcXG4tLVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgcHNwX25sX29wc1tdID0ge1xcbi0tXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTA1LVxcdFxcdC5jbWRcXHRcXHQ9IFBTUF9DTURfUlhfQVNTT0MsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmM6MTA2OlxcdFxcdC5wcmVfZG9pdFxcdD0gcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkLFxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTEwNy1cXHRcXHQuZG9pdFxcdFxcdD0gcHNwX25sX3J4X2Fzc29jX2RvaXQsXFxuLS1cXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy0xMTQtXFx0XFx0LmNtZFxcdFxcdD0gUFNQX0NNRF9UWF9BU1NPQyxcXG5uZXQvcHNwL3BzcC1ubC1nZW4uYzoxMTU6XFx0XFx0LnByZV9kb2l0XFx0PSBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTE2LVxcdFxcdC5kb2l0XFx0XFx0PSBwc3BfbmxfdHhfYXNzb2NfZG9pdCxcXG4tLVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oPTIwPWludCBwc3BfZGV2aWNlX2dldF9sb2NrZWRfYWRtaW4oY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMjEtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L3BzcC9wc3AtbmwtZ2VuLmg6MjI6aW50IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcyxcXG5uZXQvcHNwL3BzcC1ubC1nZW4uaC0yMy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4tLVxcbm5ldC9wc3AvcHNwLmg9MjE9dm9pZCBwc3Bfbmxfbm90aWZ5X2RldihzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1MzIgY21kKTtcXG5uZXQvcHNwL3BzcC5oLTIyLVxcbm5ldC9wc3AvcHNwLmg6MjM6c3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2NyZWF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkKTtcXG5uZXQvcHNwL3BzcC5oLTI0LXN0cnVjdCBwc3BfZGV2ICpwc3BfZGV2X2dldF9mb3Jfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9wc3AvcHNwLmg6MjU6dm9pZCBwc3BfZGV2X3R4X2tleV9kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcXG5uZXQvcHNwL3BzcC5oOjI2OmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3AuaC0yNy1cXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbi0tXFxubmV0L3BzcC9wc3AuaD0yOT1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcXG4tLVxcbm5ldC9wc3AvcHNwLmgtMzEtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9wc3AvcHNwLmg6MzI6dm9pZCBwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHN0cnVjdCBwc3BfZGV2ICpwc2QpO1xcbm5ldC9wc3AvcHNwLmgtMzMtXFxuLS1cXG5uZXQvcHNwL3BzcF9tYWluLmM9MTMxPXZvaWQgcHNwX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBwc3BfZGV2ICpwc2QpXFxubmV0L3BzcC9wc3BfbWFpbi5jLTEzMi17XFxubmV0L3BzcC9wc3BfbWFpbi5jOjEzMzpcXHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnksICplbnRyeV90bXA7XFxubmV0L3BzcC9wc3BfbWFpbi5jOjEzNDpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpuZXh0O1xcbm5ldC9wc3AvcHNwX21haW4uYy0xMzUtXFxuLS1cXG5uZXQvcHNwL3BzcF9tYWluLmM9NDA4PXN0YXRpYyB2b2lkIHBzcF9kZXZfZGlzYXNzb2Nfb25lKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L3BzcC9wc3BfbWFpbi5jLTQwOS17XFxubmV0L3BzcC9wc3BfbWFpbi5jOjQxMDpcXHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XFxubmV0L3BzcC9wc3BfbWFpbi5jLTQxMS1cXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NTQ9cHNwX25sX211bHRpY2FzdF9wZXJfbnMoc3RydWN0IHBzcF9kZXYgKnBzZCwgdW5zaWduZWQgaW50IGdyb3VwLFxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy01OS17XFxubmV0L3BzcC9wc3BfbmwuYzo2MDpcXHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XFxubmV0L3BzcC9wc3BfbmwuYy02MS1cXHRzdHJ1Y3QgeGFycmF5IHNlbnRfbmV0cztcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9MjMwPWJvb2wgcHNwX2hhc19hc3NvY19kZXZfaW5fbnMoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9wc3AvcHNwX25sLmMtMjMxLXtcXG5uZXQvcHNwL3BzcF9ubC5jOjIzMjpcXHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XFxubmV0L3BzcC9wc3BfbmwuYy0yMzMtXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTI0Mj1zdGF0aWMgaW50IHBzcF9ubF9maWxsX2Fzc29jX2Rldl9saXN0KHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBza19idWZmICpyc3AsXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTI0NS17XFxubmV0L3BzcC9wc3BfbmwuYzoyNDY6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xcbm5ldC9wc3AvcHNwX25sLmMtMjQ3LVxcdHN0cnVjdCBuZXQgKmRldl9uZXRfbnM7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTQ0Nz1pbnQgcHNwX25sX2tleV9yb3RhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy00ODItXFxubmV0L3BzcC9wc3BfbmwuYzo0ODM6XFx0cHNwX2Fzc29jc19rZXlfcm90YXRlZChwc2QpO1xcbm5ldC9wc3AvcHNwX25sLmMtNDg0LVxcdHBzZC1cXHUwMDNlc3RhdHMucm90YXRpb25zKys7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTQ5OT1pbnQgcHNwX25sX2Rldl9hc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTUwMS1cXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxubmV0L3BzcC9wc3BfbmwuYzo1MDI6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKnBzcF9hc3NvY19kZXY7XFxubmV0L3BzcC9wc3BfbmwuYy01MDMtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmFzc29jX2RldjtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTE4LVxcbm5ldC9wc3AvcHNwX25sLmM6NTE5OlxcdHBzcF9hc3NvY19kZXYgPSBremFsbG9jX29iaigqcHNwX2Fzc29jX2Rldik7XFxubmV0L3BzcC9wc3BfbmwuYzo1MjA6XFx0aWYgKCFwc3BfYXNzb2NfZGV2KSB7XFxubmV0L3BzcC9wc3BfbmwuYy01MjEtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTI2LVxcdGFzc29jX2RldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgobmV0LCBhc3NvY19pZmluZGV4LFxcbm5ldC9wc3AvcHNwX25sLmM6NTI3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwc3BfYXNzb2NfZGV2LVxcdTAwM2VkZXZfdHJhY2tlcixcXG5uZXQvcHNwL3BzcF9ubC5jLTUyOC1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTQzLVxcbm5ldC9wc3AvcHNwX25sLmM6NTQ0OlxcdHBzcF9hc3NvY19kZXYtXFx1MDAzZWFzc29jX2RldiA9IGFzc29jX2RldjtcXG5uZXQvcHNwL3BzcF9ubC5jLTU0NS1cXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTYzLVxcbm5ldC9wc3AvcHNwX25sLmM6NTY0OlxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBzcF9hc3NvY19kZXYtXFx1MDAzZWRldl9saXN0LCBcXHUwMDI2cHNkLVxcdTAwM2Vhc3NvY19kZXZfbGlzdCk7XFxubmV0L3BzcC9wc3BfbmwuYy01NjUtXFx0cHNkLVxcdTAwM2Vhc3NvY19kZXZfY250Kys7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTU3NS1lcnJfcHV0X2RldjpcXG5uZXQvcHNwL3BzcF9ubC5jOjU3NjpcXHRuZXRkZXZfcHV0KGFzc29jX2RldiwgXFx1MDAyNnBzcF9hc3NvY19kZXYtXFx1MDAzZWRldl90cmFja2VyKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTU3Ny1lcnJfZnJlZV9hc3NvYzpcXG5uZXQvcHNwL3BzcF9ubC5jOjU3ODpcXHRrZnJlZShwc3BfYXNzb2NfZGV2KTtcXG5uZXQvcHNwL3BzcF9ubC5jLTU3OS1lcnJfcHV0X25ldDpcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NTg1PWludCBwc3BfbmxfZGV2X2Rpc2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvcHNwL3BzcF9ubC5jLTU4Ni17XFxubmV0L3BzcC9wc3BfbmwuYzo1ODc6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5LCAqZm91bmQgPSBOVUxMO1xcbm5ldC9wc3AvcHNwX25sLmMtNTg4LVxcdHN0cnVjdCBwc3BfZGV2ICpwc2QgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNjM4LVxcbm5ldC9wc3AvcHNwX25sLmM6NjM5OmludCBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXFxubmV0L3BzcC9wc3BfbmwuYy02NDAtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy03NzQtXFx0c3RydWN0IHBzcF9rZXlfcGFyc2VkIGtleTtcXG5uZXQvcHNwL3BzcF9ubC5jOjc3NTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxubmV0L3BzcC9wc3BfbmwuYy03NzYtXFx0c3RydWN0IHNrX2J1ZmYgKnJzcDtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNzkyLVxcbm5ldC9wc3AvcHNwX25sLmM6NzkzOlxcdHBhcyA9IHBzcF9hc3NvY19jcmVhdGUocHNkKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTc5NC1cXHRpZiAoIXBhcykge1xcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy04MTQtXFx0fVxcbm5ldC9wc3AvcHNwX25sLmM6ODE1OlxcdHBzcF9hc3NvY19wdXQocGFzKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTgxNi1cXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtODE5LWVycl9mcmVlX3BhczpcXG5uZXQvcHNwL3BzcF9ubC5jOjgyMDpcXHRwc3BfYXNzb2NfcHV0KHBhcyk7XFxubmV0L3BzcC9wc3BfbmwuYy04MjEtZXJyX2ZyZWVfcnNwOlxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTMwPXBzcF92YWxpZGF0ZV94bWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMzEte1xcbm5ldC9wc3AvcHNwX3NvY2suYzozMjpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxubmV0L3BzcC9wc3Bfc29jay5jLTMzLVxcdGJvb2wgZ29vZDtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy00Ni1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6NDc6c3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2NyZWF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkKVxcbm5ldC9wc3AvcHNwX3NvY2suYy00OC17XFxubmV0L3BzcC9wc3Bfc29jay5jOjQ5OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcXG5uZXQvcHNwL3BzcF9zb2NrLmMtNTAtXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtNjgtXFxubmV0L3BzcC9wc3Bfc29jay5jOjY5OnN0YXRpYyBzdHJ1Y3QgcHNwX2Fzc29jICpwc3BfYXNzb2NfZHVtbXkoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbm5ldC9wc3AvcHNwX3NvY2suYy03MC17XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtNzktXFxubmV0L3BzcC9wc3Bfc29jay5jOjgwOnN0YXRpYyBpbnQgcHNwX2Rldl90eF9rZXlfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG5uZXQvcHNwL3BzcF9zb2NrLmMtODEtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTg1LVxcbm5ldC9wc3AvcHNwX3NvY2suYzo4Njp2b2lkIHBzcF9kZXZfdHhfa2V5X2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxubmV0L3BzcC9wc3Bfc29jay5jLTg3LXtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy05Mi1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6OTM6c3RhdGljIHZvaWQgcHNwX2Fzc29jX2ZyZWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy05NC17XFxubmV0L3BzcC9wc3Bfc29jay5jOjk1OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcHNwX2Fzc29jLCB3b3JrKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtOTYtXFx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IHBhcy1cXHUwMDNlcHNkO1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTEwNS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTA2OnN0YXRpYyB2b2lkIHBzcF9hc3NvY19mcmVlX3F1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA3LXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTA4OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcHNwX2Fzc29jLCByY3UpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMDktXFxubmV0L3BzcC9wc3Bfc29jay5jOjExMDpcXHRJTklUX1dPUksoXFx1MDAyNnBhcy1cXHUwMDNld29yaywgcHNwX2Fzc29jX2ZyZWUpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTEtXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2cGFzLVxcdTAwM2V3b3JrKTtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTQtLyoqXFxubmV0L3BzcC9wc3Bfc29jay5jOjExNTogKiBwc3BfYXNzb2NfcHV0KCkgLSByZWxlYXNlIGEgcmVmZXJlbmNlIG9uIGEgUFNQIGFzc29jaWF0aW9uXFxubmV0L3BzcC9wc3Bfc29jay5jLTExNi0gKiBAcGFzOiBhc3NvY2lhdGlvbiB0byByZWxlYXNlXFxubmV0L3BzcC9wc3Bfc29jay5jLTExNy0gKi9cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTE4OnZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxubmV0L3BzcC9wc3Bfc29jay5jLTExOS17XFxubmV0L3BzcC9wc3Bfc29jay5jLTEyMC1cXHRpZiAocGFzIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2cGFzLVxcdTAwM2VyZWZjbnQpKVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjE6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBhcy1cXHUwMDNlcmN1LCBwc3BfYXNzb2NfZnJlZV9xdWV1ZSk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTEyMi19XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTI0PXZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjUte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjY6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cXHUwMDNlcHNwX2Fzc29jLCAxKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI3LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjg6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjk6XFx0cHNwX2Fzc29jX3B1dChwYXMpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzAtfVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzEtXFxubmV0L3BzcC9wc3Bfc29jay5jOjEzMjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzMtXFx0XFx0XFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDgtXFx0cmVmY291bnRfaW5jKFxcdTAwMjZwYXMtXFx1MDAzZXJlZmNudCk7XFxubmV0L3BzcC9wc3Bfc29jay5jOjE0OTpcXHRyY3VfYXNzaWduX3BvaW50ZXIoc2stXFx1MDAzZXBzcF9hc3NvYywgcGFzKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTUwLVxcdGVyciA9IDA7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTU3LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxNTg6c3RhdGljIGludCBwc3Bfc29ja19yZWN2X3F1ZXVlX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xNTkte1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTE3Nz1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xODEtXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrO1xcbm5ldC9wc3AvcHNwX3NvY2suYzoxODI6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqZHVtbXk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTE4My1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTIxOS1cXHQgKi9cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjIwOlxcdGR1bW15ID0gcHNwX2Fzc29jX2R1bW15KHBhcyk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTIyMS1cXHRpZiAoIWR1bW15KSB7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjQ4LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoyNDk6dm9pZCBwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHN0cnVjdCBwc3BfZGV2ICpwc2QpXFxubmV0L3BzcC9wc3Bfc29jay5jLTI1MC17XFxubmV0L3BzcC9wc3Bfc29jay5jOjI1MTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpuZXh0O1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yNTItXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjY2PXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yNjcte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoyNjg6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjY5LVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTI3MS1cXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnBhcy1cXHUwMDNlcmVmY250KTtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dy1cXHUwMDNlcHNwX2Fzc29jLCBwYXMpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzMtXFx0dHctXFx1MDAzZXR3X3ZhbGlkYXRlX3htaXRfc2tiID0gcHNwX3ZhbGlkYXRlX3htaXQ7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9Mjc2PXZvaWQgcHNwX3R3c2tfYXNzb2NfZnJlZShzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjc3LXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6Mjc4OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodHctXFx1MDAzZXBzcF9hc3NvYywgMSk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI3OS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjgwOlxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dy1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjgxOlxcdHBzcF9hc3NvY19wdXQocGFzKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjgyLX1cXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0yODQ9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3BzcC9wc3Bfc29jay5jLTI4NS17XFxubmV0L3BzcC9wc3Bfc29jay5jOjI4NjpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI4Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02MDY9ZGVmIF9jaGVja19hc3NvY19saXN0KGNmZywgcHNwX2Rldl9pZCwgaWZpbmRleCwgbnNpZD1Ob25lKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02MjMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjYyNDpkZWYgX2RhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jKGNmZywgdmVyc2lvbiwgaXB2ZXIpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02MjUtICAgIFxcXCJcXFwiXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTY1OT1kZWYgX2dldF9wc3BfdmVyX2lwNl92YXJpYW50cygpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2NC1Aa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXA2X3ZhcmlhbnRzKCkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjY2NTpkZWYgZGF0YV9iYXNpY19zZW5kX25ldGtpdF9wc3BfYXNzb2MoY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2Ni0gICAgXFxcIlxcXCJcXFwiVGVzdCBQU1AgZGF0YSBzZW5kIHZpYSBuZXRraXQgd2l0aCBkZXYtYXNzb2MuXFxcIlxcXCJcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2Ny0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjY2ODogICAgX2RhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jKGNmZywgdmVyc2lvbiwgaXB2ZXIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02OTg9ZGVmIF9kZXZfY2hhbmdlX25vdGlmeV9tdWx0aV9uc19uZXRraXQoY2ZnKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS03MjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjcyNjpkZWYgX3BzcF9kZXZfZ2V0X2NoZWNrX25ldGtpdF9wc3BfYXNzb2MoY2ZnKTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNzI3LSAgICBcXFwiXFxcIlxcXCIgQ2hlY2sgcHNwIGRldi1nZXQgb3V0cHV0IHdpdGggbmV0a2l0IGludGVyZmFjZSBhc3NvY2lhdGVkIHdpdGggUFNQIGRldiBcXFwiXFxcIlxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT05NDE9ZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTk4MC0gICAgICAgICAgICAgICAgICAgICAgICBfYXNzb2NfY2hlY2tfbGlzdCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6OTgxOiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODItICAgICAgICAgICAgICAgICAgICAgICAgX2tleV9yb3RhdGlvbl9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODMtICAgICAgICAgICAgICAgICAgICAgICAgX2Rldl9jaGFuZ2Vfbm90aWZ5X211bHRpX25zX25ldGtpdCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6OTg0OiAgICAgICAgICAgICAgICAgICAgICAgIF9wc3BfZGV2X2dldF9jaGVja19uZXRraXRfcHNwX2Fzc29jLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODUtICAgICAgICAgICAgICAgICAgICAgICAgX2Rldl9hc3NvY19ub19uc2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNToyNS42NTk2MTU5MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTMzMjk5MDY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyBvZiBuZXQvcHNwKipcblxuT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBgbmV0L3BzcGAgc3Vic3lzdGVtLiBNeSB1c3VhbCBhcHByb2FjaCDigJMgc3RhcnQgd2l0aCB0aGUgS2NvbmZpZy4gVGhhdCBmaWxlIGlzIHRoZSBmb3VuZGF0aW9uLCByaWdodD8gSXQnbGwgbGF5IG91dCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdmFyaWFibGVzIGFyZSBhdCBwbGF5IGhlcmUuIEZpZ3VyZSBvdXQgd2hhdCBmZWF0dXJlcyBhcmUgY29uZmlndXJhYmxlLCBob3cgdGhleSBpbnRlcnJlbGF0ZSwgYW5kIHdoYXQgdGhlIGJhc2VsaW5lIHNldHVwIGxvb2tzIGxpa2UuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlIGNvcmUgZGVzaWduIGRlY2lzaW9ucyBtYWRlIGJ5IHRoZSBvcmlnaW5hbCBhdXRob3JzLCBhbmQgc3RhcnQgdG8gZm9ybXVsYXRlIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjay4gU28sIGxldCdzIGNyYWNrIG9wZW4gYG5ldC9wc3AvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IGdlbXMgaXQgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI1OjQwLjk5MjYwODU2MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wc3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQU1AgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIElORVRfUFNQXFxuICAgNjpcXHRcXHRib29sIFxcXCJQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgUFNQIFNlY3VyaXR5IFByb3RvY29sIChQU1ApLlxcbiAgMTM6XFx0XFx0Rm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxcbiAgMTQ6XFx0XFx0ICBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZ29vZ2xlL3BzcC9tYWluL2RvYy9QU1BfQXJjaF9TcGVjLnBkZlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNTo0MC45OTI2ODE4OTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzA5NzUyMzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvbW1pdCdzIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHJlYWNoIGZvciBgZ2l0IGxvZ2AuIEkgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5IGRpcmVjdGx5LiBGb3JnZXQgdHJ5aW5nIHRvIGRlY2lwaGVyIHRoZSBkaWZmIGFsb25lOyBJIHdhbnQgdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCBsZWQgdG8gdGhpcyBjaGFuZ2U/IFdoYXQncyB0aGUgbmFycmF0aXZlIGFyb3VuZCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyB3YXMgZG9uZSwgbm90IGp1c3QgKndoYXQqIHdhcyBjaGFuZ2VkLiBUaGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmIGlzIGEgc3RhcnRpbmcgcG9pbnQsIG9mIGNvdXJzZSwgYnV0IG9mdGVuIGl0IG9ubHkgdGVsbHMgcGFydCBvZiB0aGUgc3RvcnkuIEknbSBsb29raW5nIGZvciB0aGUgXCJzbyB3aGF0P1wiIGJlaGluZCB0aGUgXCJ3aGF0LlwiIEdpdmUgbWUgdGhlIGNvbW1pdCBsb2cgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNzUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI1OjU0LjA5MDIwODgyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NjQwODcwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfY2xvbmUuKnBzcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjU6NTYuMjM2NjI1NzI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NDI4MjYwNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBza19jbG9uZWAgYW5kIGhvdyB0aGUgYHBzcF9hc3NvY2AgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc29ja2V0IGFsbG9jYXRpb24gYW5kIGNsb25pbmcuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB3aGVyZSB0aGVzZSBpbnRlcmFjdGlvbnMgb2NjdXIgaW4gdGhlIHNvY2tldCBjcmVhdGlvbiBhbmQgZHVwbGljYXRpb24gcHJvY2Vzcy5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIGBza19jbG9uZWAgYW5kIHBpbnBvaW50IGl0cyBjYWxsZXJzLiBUaGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgZXhhY3Qgc2VxdWVuY2Ugb2YgZXZlbnRzIGFuZCBob3cgdGhlIGFzc29jaWF0aW9uLCBvciBsYWNrIHRoZXJlb2YsIHdpdGggdGhlIGBwc3BfYXNzb2NgIHZhcmlhYmxlIGlzIG1hbmFnZWQgd2hlbiBzb2NrZXRzIGFyZSBjcmVhdGVkIGFuZCBzdWJzZXF1ZW50bHkgY2xvbmVkLiBUaGlzIGludmVzdGlnYXRpb24gd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYXNzb2NpYXRpb24gYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgaW4gdGhlIHNvY2tldCBkdXBsaWNhdGlvbiBwcm9jZXNzLiBJJ20gZm9jdXNpbmcgb24gdHJhY2luZyB0aGlzIGBwc3BfYXNzb2NgIHRocm91Z2ggdGhlIGNhbGwgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjY6MTEuNjY0ODg4ODA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAwODMwMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2Nsb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTEzPUZvciBzZWN1cml0eSBtb2R1bGUgc3VwcG9ydCwgdGhyZWUgU0NUUCBzcGVjaWZpYyBob29rcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQ6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xNi0gICAgc2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTc6ICAgIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMTgtICAgIHNlY3VyaXR5X3NjdHBfYXNzb2NfZXN0YWJsaXNoZWQoKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0xMDI9QVNDT05GIGNodW5rIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYGBAb3B0bmFtZWBgJ3MgYXJlIHByZXNlbnQ6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xMDktXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdDoxMTA6c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xMTEtfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTEzNj1lc3RhYmxpc2hpbmcgYW4gYXNzb2NpYXRpb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE3Ni0gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBTQ1RQX1NPQ0tFVF9UQ1Agb3IgcGVlbGVkIG9mZlxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTc3OiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldCBzZWN1cml0eV9zY3RwX3NrX2Nsb25lKCkgaXNcXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE3OC0gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgdG8gY2xvbmUgdGhlIG5ldyBzb2NrZXQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTE5ND1ob29rcyB3aXRoIHRoZSBTRUxpbnV4IHNwZWNpZmljcyBleHBhbmRlZCBiZWxvdzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE5Ny0gICAgc2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTk4OiAgICBzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE5OS0gICAgc2VjdXJpdHlfc2N0cF9hc3NvY19lc3RhYmxpc2hlZCgpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTI1NT1SZWNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMjU3LVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MjU4OnNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMjU5LX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0yNjE9c29ja2V0KSBvciB3aGVuIGEgc29ja2V0IGlzICdwZWVsZWQgb2ZmJyBlLmcgdXNlcnNwYWNlIGNhbGxzXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdDoyNjI6KipzY3RwX3BlZWxvZmYqKlxcXFwoMykuIGBgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpYGAgd2lsbCBzZXQgdGhlIG5ld1xcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMjYzLXNvY2tldHMgc2lkIGFuZCBwZWVyIHNpZCB0byB0aGF0IGNvbnRhaW5lZCBpbiB0aGUgYGBAYXNvYyBzaWRgYCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0PTEzPVNDVFDnmoRMU03mlK/mjIFcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTIyLVxcdHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdDoyMzpcXHRzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNC1cXHRzZWN1cml0eV9zY3RwX2Fzc29jX2VzdGFibGlzaGVkKClcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0PTM5PXNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTEwNi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdDoxMDc6c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMTA4LX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q9MTE4PXNlY3VyaXR5X3NjdHBfYXNzb2NfZXN0YWJsaXNoZWQoKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMTY2LSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWmguaenOaYr1NDVFBfU09DS0VUX1RDUOaIluaYr+WJpeemu+eahOWll+aOpVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjE2NzogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlrZfvvIzkvJrosIPnlKggc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMTY4LSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOadpeWFi+mahuaWsOeahOWll+aOpeWtl+OAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q9MTc3PVNDVFDnmoRTRUxpbnV45pSv5oyBXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xODctXFx0c2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjE4ODpcXHRzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xODktXFx0c2VjdXJpdHlfc2N0cF9hc3NvY19lc3RhYmxpc2hlZCgpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdD0yMTY9c2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMjQzLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjI0NDpzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNDUtfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNDct5b2T5LiA5Liq5aWX5o6l5a2X6KKr4oCc5Yml56a74oCd5aaC55So5oi356m66Ze06LCD55SoICoqc2N0cF9wZWVsb2ZmKipcXFxcKDMp5pe277yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q6MjQ4OmBgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpYGAg5bCG5Lya5YiG5Yir5bCG5paw5aWX5o6l5a2X55qEc2lk5ZKM5a+556uvc2lk6K6+572u5Li6XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMjQ5LWBgQGFzb2Mgc2lkYGAg5ZKMIGBgQGFzb2MgcGVlciBzaWRgYCDkuK3ljIXlkKvnmoTlgLzjgIJcXG4tLVxcbmNyeXB0by9hZl9hbGcuYz00NjQ9aW50IGFmX2FsZ19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbi0tXFxuY3J5cHRvL2FmX2FsZy5jLTQ4Ni1cXHRzZWN1cml0eV9zb2NrX2dyYWZ0KHNrMiwgbmV3c29jayk7XFxuY3J5cHRvL2FmX2FsZy5jOjQ4NzpcXHRzZWN1cml0eV9za19jbG9uZShzaywgc2syKTtcXG5jcnlwdG8vYWZfYWxnLmMtNDg4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaD05MDk9dm9pZCBjZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpO1xcbmluY2x1ZGUvbGludXgvY2dyb3VwLmg6OTEwOnZvaWQgY2dyb3VwX3NrX2Nsb25lKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKTtcXG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oLTkxMS12b2lkIGNncm91cF9za19mcmVlKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwLmg9OTIwPXN0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpIHt9XFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaDo5MjE6c3RhdGljIGlubGluZSB2b2lkIGNncm91cF9za19jbG9uZShzdHJ1Y3Qgc29ja19jZ3JvdXBfZGF0YSAqc2tjZCkge31cXG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oLTkyMi1zdGF0aWMgaW5saW5lIHZvaWQgY2dyb3VwX3NrX2ZyZWUoc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpIHt9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaD0zNTk9TFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBza19mcmVlX3NlY3VyaXR5LCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg6MzYwOkxTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgc2tfY2xvbmVfc2VjdXJpdHksIGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zNjEtXFx0IHN0cnVjdCBzb2NrICpuZXdzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTM2ND1MU01fSE9PSyhpbnQsIDAsIGluZXRfY29ubl9yZXF1ZXN0LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMzY1LVxcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg6MzY2OkxTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5ldF9jc2tfY2xvbmUsIHN0cnVjdCBzb2NrICpuZXdzayxcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zNjctXFx0IGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTM4Mj1MU01fSE9PSyhpbnQsIDAsIHNjdHBfYmluZF9jb25uZWN0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTM4My1cXHQgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbilcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaDozODQ6TFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBzY3RwX3NrX2Nsb25lLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zODUtXFx0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE2ODk9dm9pZCBzZWN1cml0eV9za19mcmVlKHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE2OTA6dm9pZCBzZWN1cml0eV9za19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzayk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE2OTEtdm9pZCBzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xNjk2PWludCBzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE2OTctXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTY5ODp2b2lkIHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpuZXdzayxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTY5OS1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE3MTI9aW50IHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE3MTMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFkZHJsZW4pO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxNzE0OnZvaWQgc2VjdXJpdHlfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xNzE1LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc29jayAqbmV3c2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE4NDc9c3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE4NTAtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE4NTE6c3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xODUyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xODY5PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xODc0LVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxODc1OnN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqbmV3c2ssXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE4NzYtXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE5MzM9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xOTM5LVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxOTQwOnN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zY3RwX3NrX2Nsb25lKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xOTQxLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD0xNTM9c3RhdGljIGlubGluZSB2b2lkICppbmV0X2Nza19jYShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTE1Ny1cXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oOjE1ODpzdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY2xvbmVfbG9jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC0xNTktXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oPTE1NDc9c3RydWN0IHNjdHBfYXNzb2NpYXRpb24ge1xcbi0tXFxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMjA3OS1cXHQgKiBTQ1RQIFRDUCB0eXBlIHNvY2tldHMgYW5kIHBlZWxlZCBvZmYgY29ubmVjdGlvbnMgYXMgdGhleVxcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oOjIwODA6XFx0ICogY2F1c2UgYSBuZXcgc29ja2V0IHRvIGJlIGdlbmVyYXRlZC4gc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXFxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMjA4MS1cXHQgKiB3aWxsIHRoZW4gcGx1ZyB0aGVzZSBpbnRvIHRoZSBuZXcgc29ja2V0Llxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTE4NDM9dm9pZCBza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3NvY2suaDoxODQ0OnN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LCBib29sIGxvY2spO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0xODQ1LVxcbmluY2x1ZGUvbmV0L3NvY2suaDoxODQ2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnNrX2Nsb25lX2xvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSlcXG5pbmNsdWRlL25ldC9zb2NrLmgtMTg0Ny17XFxuaW5jbHVkZS9uZXQvc29jay5oOjE4NDg6XFx0cmV0dXJuIHNrX2Nsb25lKHNrLCBwcmlvcml0eSwgdHJ1ZSk7XFxuaW5jbHVkZS9uZXQvc29jay5oLTE4NDktfVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTEzODY9c3RhdGljIGlubGluZSBpbnQgeGZybTZfcm91dGVfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTAtXFxuaW5jbHVkZS9uZXQveGZybS5oOjEzOTE6aW50IF9feGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTM5Mi1cXG5pbmNsdWRlL25ldC94ZnJtLmg6MTM5MzpzdGF0aWMgaW5saW5lIGludCB4ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spXFxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTQte1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTktXFx0aWYgKHVubGlrZWx5KG9zay1cXHUwMDNlc2tfcG9saWN5WzBdIHx8IG9zay1cXHUwMDNlc2tfcG9saWN5WzFdKSlcXG5pbmNsdWRlL25ldC94ZnJtLmg6MTQwMDpcXHRcXHRyZXR1cm4gX194ZnJtX3NrX2Nsb25lX3BvbGljeShzaywgb3NrKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTQwMS1cXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0xNDI0PXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX3NrX2ZyZWVfcG9saWN5KHN0cnVjdCBzb2NrICpzaykge31cXG5pbmNsdWRlL25ldC94ZnJtLmg6MTQyNTpzdGF0aWMgaW5saW5lIGludCB4ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMTQyNi1zdGF0aWMgaW5saW5lIGludCB4ZnJtNl9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpIHsgcmV0dXJuIDE7IH1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTc2PUJURl9JRChmdW5jLCBicGZfbHNtX3NvY2tfZ3JhZnQpXFxua2VybmVsL2JwZi9icGZfbHNtLmM6Nzc6QlRGX0lEKGZ1bmMsIGJwZl9sc21faW5ldF9jc2tfY2xvbmUpXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNzgtQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5ldF9jb25uX2VzdGFibGlzaGVkKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYz03NDkzPXZvaWQgY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy03NTIwLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6NzUyMTp2b2lkIGNncm91cF9za19jbG9uZShzdHJ1Y3Qgc29ja19jZ3JvdXBfZGF0YSAqc2tjZClcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTc1MjIte1xcbi0tXFxubmV0L2JsdWV0b290aC9pc28uYz05NTU9c3RhdGljIHZvaWQgaXNvX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2lzby5jLTk2MS1cXHRcXHRidF9zayhzayktXFx1MDAzZWZsYWdzID0gYnRfc2socGFyZW50KS1cXHUwMDNlZmxhZ3M7XFxubmV0L2JsdWV0b290aC9pc28uYzo5NjI6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L2JsdWV0b290aC9pc28uYy05NjMtXFx0fVxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmM9MTk2Nz1zdGF0aWMgdm9pZCBsMmNhcF9zb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqcGFyZW50KVxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMtMTk3OS1cXHRcXHQgKi9cXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX3NvY2suYzoxOTgwOlxcdFxcdHNlY3VyaXR5X3NrX2Nsb25lKHBhcmVudCwgc2spO1xcbm5ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jLTE5ODEtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYz0yNTA9c3RhdGljIHZvaWQgcmZjb21tX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMtMjYzLVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYzoyNjQ6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jLTI2NS1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L2JsdWV0b290aC9zY28uYz01OTY9c3RhdGljIHZvaWQgc2NvX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL3Njby5jLTYwMi1cXHRcXHRidF9zayhzayktXFx1MDAzZWZsYWdzID0gYnRfc2socGFyZW50KS1cXHUwMDNlZmxhZ3M7XFxubmV0L2JsdWV0b290aC9zY28uYzo2MDM6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L2JsdWV0b290aC9zY28uYy02MDQtXFx0fVxcbi0tXFxubmV0L2NvcmUvc29jay5jPTIyMDk9c3RhdGljIHZvaWQgc29ja19jb3B5KHN0cnVjdCBzb2NrICpuc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjIxNy1cXHQgKiB3ZSBtdXN0IGNoZWNrIGlmIHNrX3R4X3F1ZXVlX2NsZWFyKCkgaXMgY2FsbGVkIGFmdGVyXFxubmV0L2NvcmUvc29jay5jOjIyMTg6XFx0ICogc29ja19jb3B5KCkgaW4gc2tfY2xvbmVfbG9jaygpLlxcbm5ldC9jb3JlL3NvY2suYy0yMjE5LVxcdCAqL1xcbi0tXFxubmV0L2NvcmUvc29jay5jLTIyMzItXFx0bnNrLVxcdTAwM2Vza19zZWN1cml0eSA9IHNwdHI7XFxubmV0L2NvcmUvc29jay5jOjIyMzM6XFx0c2VjdXJpdHlfc2tfY2xvbmUob3NrLCBuc2spO1xcbm5ldC9jb3JlL3NvY2suYy0yMjM0LSNlbmRpZlxcbi0tXFxubmV0L2NvcmUvc29jay5jPTI0NDQ9c3RhdGljIHZvaWQgc2tfaW5pdF9jb21tb24oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTI0NzAtLyoqXFxubmV0L2NvcmUvc29jay5jOjI0NzE6ICogc2tfY2xvbmUgLSBjbG9uZSBhIHNvY2tldFxcbm5ldC9jb3JlL3NvY2suYy0yNDcyLSAqIEBzazogdGhlIHNvY2tldCB0byBjbG9uZVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTI0NzgtICovXFxubmV0L2NvcmUvc29jay5jOjI0Nzk6c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxubmV0L2NvcmUvc29jay5jLTI0ODAtXFx0XFx0ICAgICAgYm9vbCBsb2NrKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTI1NDktXFxubmV0L2NvcmUvc29jay5jOjI1NTA6XFx0Y2dyb3VwX3NrX2Nsb25lKFxcdTAwMjZuZXdzay1cXHUwMDNlc2tfY2dycF9kYXRhKTtcXG5uZXQvY29yZS9zb2NrLmMtMjU1MS1cXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0yNTY3LVxcbm5ldC9jb3JlL3NvY2suYzoyNTY4OlxcdGlmICh1bmxpa2VseSghaXNfY2hhcmdlZCB8fCB4ZnJtX3NrX2Nsb25lX3BvbGljeShuZXdzaywgc2spKSkge1xcbm5ldC9jb3JlL3NvY2suYy0yNTY5LVxcdFxcdC8qIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgdW5jaGFyZ2UgdGhlIG5ld1xcbi0tXFxubmV0L2NvcmUvc29jay5jLTI2MTgtfVxcbm5ldC9jb3JlL3NvY2suYzoyNjE5OkVYUE9SVF9TWU1CT0xfR1BMKHNrX2Nsb25lKTtcXG5uZXQvY29yZS9zb2NrLmMtMjYyMC1cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9OTA0PXZvaWQgX19yZXFza19mcmVlKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTEyLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6OTEzOnN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTkxNC1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDQ5LVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA1MDpcXHRcXHRucmVxID0gaW5ldF9yZXFza19jbG9uZShyZXEsIG5zayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDUxLVxcdFxcdGlmICghbnJlcSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTE4NT1zdGF0aWMgdm9pZCBpbmV0X2Nsb25lX3VscChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHN0cnVjdCBzb2NrICpuZXdzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5Ni0vKipcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjExOTc6ICpcXHRpbmV0X2Nza19jbG9uZV9sb2NrIC0gY2xvbmUgYW4gaW5ldCBzb2NrZXQsIGFuZCBsb2NrIGl0cyBjbG9uZVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5OC0gKlxcdEBzazogdGhlIHNvY2tldCB0byBjbG9uZVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjAzLSAqL1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTIwNDpzdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY2xvbmVfbG9jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjA1LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEyMDcte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTIwODpcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19jbG9uZV9sb2NrKHNrLCBwcmlvcml0eSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjA5LVxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzaztcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI1OS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEyNjA6XFx0c2VjdXJpdHlfaW5ldF9jc2tfY2xvbmUobmV3c2ssIHJlcSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjYxLVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMzA0PXZvaWQgaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA2LXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEzMDc6XFx0Lyogc2tfY2xvbmVfbG9jayBsb2NrZWQgdGhlIHNvY2tldCBhbmQgc2V0IHJlZmNudCB0byAyICovXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA4LVxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQxNz1zdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY29tcGxldGVfaGFzaGRhbmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKmNoaWxkLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDMwLVxcdFxcdFxcdC8qIGhvbGQgYSByZWZjbnQgZm9yIHRoZSBucmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXJcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0MzE6XFx0XFx0XFx0ICogd2hpY2ggaXMgYXNzaWduZWQgaW4gaW5ldF9yZXFza19jbG9uZSgpXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDMyLVxcdFxcdFxcdCAqL1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzMy1cXHRcXHRcXHRzb2NrX2hvbGQoc2spO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQzNDpcXHRcXHRcXHRucmVxID0gaW5ldF9yZXFza19jbG9uZShyZXEsIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzUtXFx0XFx0XFx0aWYgKCFucmVxKSB7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTE0NjY9dm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0OTAtXFx0XFx0aWYgKG5zaykge1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQ5MTpcXHRcXHRcXHRucmVxID0gaW5ldF9yZXFza19jbG9uZShyZXEsIG5zayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDkyLVxcdFxcdFxcdGlmIChucmVxKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI1PWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDQtXFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfd3JpdGVfc3BhY2UsIHBzb2NrLVxcdTAwM2VzYXZlZF93cml0ZV9zcGFjZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc0NTpcXHRcXHRcXHQvKiBQYWlycyB3aXRoIGxvY2tsZXNzIHJlYWQgaW4gc2tfY2xvbmVfbG9jaygpICovXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ni1cXHRcXHRcXHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIHBzb2NrLVxcdTAwM2Vza19wcm90byk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU3LVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NTg6XFx0LyogUGFpcnMgd2l0aCBsb2NrbGVzcyByZWFkIGluIHNrX2Nsb25lX2xvY2soKSAqL1xcbm5ldC9pcHY0L3RjcF9icGYuYy03NTktXFx0c29ja19yZXBsYWNlX3Byb3RvKHNrLCBcXHUwMDI2dGNwX2JwZl9wcm90c1tmYW1pbHldW2NvbmZpZ10pO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz03MTc9c3RhdGljIHZvaWQgdGNwX3Y0X3NlbmRfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy04NzgtXFx0XFx0dHJhbnNtaXRfdGltZSA9IHRjcF90cmFuc21pdF90aW1lKHNrKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjg3OTpcXHRcXHR4ZnJtX3NrX2Nsb25lX3BvbGljeShjdGxfc2ssIHNrKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTg4MC1cXHRcXHR0eGhhc2ggPSAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz01NDY9c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTQ5LXtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NTUwOlxcdHN0cnVjdCBzb2NrICpuZXdzayA9IGluZXRfY3NrX2Nsb25lX2xvY2soc2ssIHJlcSwgR0ZQX0FUT01JQyk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTU1MS1cXHRjb25zdCBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ1OD1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDYxLVxcdFxcdHNrLVxcdTAwM2Vza190eXBlID0gcGFyZW50LVxcdTAwM2Vza190eXBlO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0NjI6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ2My1cXHR9XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNjc1PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM2OTQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzY5NTpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzY5Ni1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MDAtXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzcwMTpcXHRzdHJ1Y3Qgc29jayAqbnNrID0gc2tfY2xvbmVfbG9jayhzaywgR0ZQX0FUT01JQyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzcwMi1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc0MC1cXHRzb2NrX3Jlc2V0X2ZsYWcobnNrLCBTT0NLX1JDVV9GUkVFKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzQxOlxcdHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKG5zaywgcmVxKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzQyLVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTIwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkyMi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5MjM6c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkyNC1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9ODA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtODg2LVxcdFxcdGlmIChjdHgtXFx1MDAzZW1wX2NhcGFibGUpIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg4NzpcXHRcXHRcXHRjdHgtXFx1MDAzZWNvbm4gPSBtcHRjcF9za19jbG9uZV9pbml0KGxpc3RlbmVyLVxcdTAwM2Vjb25uLCBcXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg4OC1cXHRcXHRcXHRpZiAoIWN0eC1cXHUwMDNlY29ubilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTczOD12b2lkIF9fbXB0Y3BfaW5oZXJpdF9jZ3JwX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzQ4LVxcdFxcdCpzc2tfY2QgPSAqc2tfY2Q7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNzQ5OlxcdFxcdGNncm91cF9za19jbG9uZShza19jZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzUwLVxcdH1cXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTQ4NTY9c3RhdGljIHN0cnVjdCBzb2NrICpzY3RwX2Nsb25lX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtNDg1OS17XFxubmV0L3NjdHAvc29ja2V0LmM6NDg2MDpcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19jbG9uZShzaywgR0ZQX0tFUk5FTCwgZmFsc2UpO1xcbm5ldC9zY3RwL3NvY2tldC5jLTQ4NjEtXFx0c3RydWN0IGluZXRfc29jayAqbmV3aW5ldDtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQ4NjctXFxubmV0L3NjdHAvc29ja2V0LmM6NDg2ODpcXHQvKiBza19jbG9uZSgpIHNldHMgcmVmY250IHRvIDIgYW5kIGluY3JlbWVudHMgc29ja2V0c19hbGxvY2F0ZWQgKi9cXG5uZXQvc2N0cC9zb2NrZXQuYy00ODY5LVxcdHNvY2tfcHV0KG5ld3NrKTtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQ5MTctXFx0ICovXFxubmV0L3NjdHAvc29ja2V0LmM6NDkxODpcXHRzZWN1cml0eV9zY3RwX3NrX2Nsb25lKGFzb2MsIHNrLCBuZXdzayk7XFxubmV0L3NjdHAvc29ja2V0LmMtNDkxOS1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI3MjE9c3RhdGljIGludCB0aXBjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI3NDctXFx0XFx0Z290byBleGl0O1xcbm5ldC90aXBjL3NvY2tldC5jOjI3NDg6XFx0c2VjdXJpdHlfc2tfY2xvbmUoc29jay1cXHUwMDNlc2ssIG5ld19zb2NrLVxcdTAwM2Vzayk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjc0OS1cXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xMDcxPXN0YXRpYyB2b2lkIHRsc191cGRhdGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG8gKnAsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMTA4Mi1cXHR9IGVsc2Uge1xcbm5ldC90bHMvdGxzX21haW4uYzoxMDgzOlxcdFxcdC8qIFBhaXJzIHdpdGggbG9ja2xlc3MgcmVhZCBpbiBza19jbG9uZV9sb2NrKCkuICovXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwODQtXFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfcHJvdCwgcCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk1NC1cXHRcXHR2c2stXFx1MDAzZWJ1ZmZlcl9tYXhfc2l6ZSA9IHBzay1cXHUwMDNlYnVmZmVyX21heF9zaXplO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5NTU6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk1Ni1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yNDA5PXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKmNsb25lX3BvbGljeShjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm9sZCwgaW50IGRpcilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjQ0MC1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjI0NDE6aW50IF9feGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjQ0Mi17XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz0xMDg3PXN0YXRpYyB2b2lkIGFwcGFybW9yX3NrX2ZyZWVfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTA5Ny0vKipcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzoxMDk4OiAqIGFwcGFybW9yX3NrX2Nsb25lX3NlY3VyaXR5IC0gY2xvbmUgdGhlIHNrX3NlY3VyaXR5IGZpZWxkXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTA5OS0gKiBAc2s6IHNvY2sgdG8gaGF2ZSBzZWN1cml0eSBjbG9uZWRcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTExMDEtICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTEwMjpzdGF0aWMgdm9pZCBhcHBhcm1vcl9za19jbG9uZV9zZWN1cml0eShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTEwMy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTc2Nz1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBhcHBhcm1vcl9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE4MDYtXFx0TFNNX0hPT0tfSU5JVChza19mcmVlX3NlY3VyaXR5LCBhcHBhcm1vcl9za19mcmVlX3NlY3VyaXR5KSxcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzoxODA3OlxcdExTTV9IT09LX0lOSVQoc2tfY2xvbmVfc2VjdXJpdHksIGFwcGFybW9yX3NrX2Nsb25lX3NlY3VyaXR5KSxcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xODA4LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz00NTA5PXZvaWQgc2VjdXJpdHlfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1MTYtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NTE3OiAqIHNlY3VyaXR5X3NrX2Nsb25lKCkgLSBDbG9uZSBhIHNvY2sncyBMU00gc3RhdGVcXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1MTgtICogQHNrOiBvcmlnaW5hbCBzb2NrXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1MjItICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NTIzOnZvaWQgc2VjdXJpdHlfc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI0LXtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ1MjU6XFx0Y2FsbF92b2lkX2hvb2soc2tfY2xvbmVfc2VjdXJpdHksIHNrLCBuZXdzayk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI2LX1cXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ1Mjc6RVhQT1JUX1NZTUJPTChzZWN1cml0eV9za19jbG9uZSk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI4LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz00NTg1PUVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5ldF9jb25uX3JlcXVlc3QpO1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTg3LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDU4ODogKiBzZWN1cml0eV9pbmV0X2Nza19jbG9uZSgpIC0gU2V0IG5ldyBzb2NrIExTTSBzdGF0ZSBiYXNlZCBvbiByZXF1ZXN0X3NvY2tcXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1ODktICogQG5ld3NrOiBuZXcgc29ja1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTkzLSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDU5NDp2b2lkIHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpuZXdzayxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1OTUtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTk2LXtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ1OTc6XFx0Y2FsbF92b2lkX2hvb2soaW5ldF9jc2tfY2xvbmUsIG5ld3NrLCByZXEpO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDU5OC19XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTQ3ODE9RVhQT1JUX1NZTUJPTChzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdCk7XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ3ODMtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0Nzg0OiAqIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKSAtIENsb25lIGEgU0NUUCBzb2NrJ3MgTFNNIHN0YXRlXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00Nzg1LSAqIEBhc29jOiBTQ1RQIGFzc29jaWF0aW9uXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ3OTItICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NzkzOnZvaWQgc2VjdXJpdHlfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDc5NC1cXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKm5ld3NrKVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDc5NS17XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0Nzk2OlxcdGNhbGxfdm9pZF9ob29rKHNjdHBfc2tfY2xvbmUsIGFzb2MsIHNrLCBuZXdzayk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00Nzk3LX1cXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ3OTg6RVhQT1JUX1NZTUJPTChzZWN1cml0eV9zY3RwX3NrX2Nsb25lKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ3OTktXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTU3ND1zdGF0aWMgdm9pZCBzZWxpbnV4X3NrX2ZyZWVfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU1ODAtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU1ODE6c3RhdGljIHZvaWQgc2VsaW51eF9za19jbG9uZV9zZWN1cml0eShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTU4Mi17XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTY3Nz1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9hc3NvY19yZXF1ZXN0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU2OTMtXFx0ICogc29ja2V0cyBhbmQgcGVlbGVkIG9mZiBjb25uZWN0aW9ucyBhcyB0aGV5IGNhdXNlIGEgbmV3XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU2OTQ6XFx0ICogc29ja2V0IHRvIGJlIGdlbmVyYXRlZC4gc2VsaW51eF9zY3RwX3NrX2Nsb25lKCkgd2lsbCB0aGVuXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU2OTUtXFx0ICogcGx1ZyB0aGlzIGludG8gdGhlIG5ldyBzb2NrZXQuXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTcxMD1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9hc3NvY19lc3RhYmxpc2hlZChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01NzE4LVxcdC8qIEluaGVyaXQgc2VjaWQgZnJvbSB0aGUgcGFyZW50IHNvY2tldCAtIHRoaXMgd2lsbCBiZSBwaWNrZWQgdXBcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTcxOTpcXHQgKiBieSBzZWxpbnV4X3NjdHBfc2tfY2xvbmUoKSBpZiB0aGUgYXNzb2NpYXRpb24gZ2V0cyBwZWVsZWQgb2ZmXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU3MjAtXFx0ICogaW50byBhIG5ldyBzb2NrZXQuXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTczMD1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9iaW5kX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODA2LS8qIENhbGxlZCB3aGVuZXZlciBhIG5ldyBzb2NrZXQgaXMgY3JlYXRlZCBieSBhY2NlcHQoMikgb3Igc2N0cF9wZWVsb2ZmKDMpLiAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1ODA3OnN0YXRpYyB2b2lkIHNlbGludXhfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODA4LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4MTYtXFx0aWYgKCFzZWxpbnV4X3BvbGljeWNhcF9leHRzb2NrY2xhc3MoKSlcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTgxNzpcXHRcXHRyZXR1cm4gc2VsaW51eF9za19jbG9uZV9zZWN1cml0eShzaywgbmV3c2spO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODE4LVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4MjEtXFx0bmV3c2tzZWMtXFx1MDAzZXNjbGFzcyA9IHNrc2VjLVxcdTAwM2VzY2xhc3M7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU4MjI6XFx0c2VsaW51eF9uZXRsYmxfc2N0cF9za19jbG9uZShzaywgbmV3c2spO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODIzLX1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz01ODQwPXN0YXRpYyBpbnQgc2VsaW51eF9pbmV0X2Nvbm5fcmVxdWVzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg2MC1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTg2MTpzdGF0aWMgdm9pZCBzZWxpbnV4X2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpuZXdzayxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg2Mi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg3NC1cXHQgKiB0aHJlYWQgd2l0aCBhY2Nlc3MgdG8gbmV3c2tzZWMgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTg3NTpcXHRzZWxpbnV4X25ldGxibF9pbmV0X2Nza19jbG9uZShuZXdzaywgcmVxLVxcdTAwM2Vyc2tfb3BzLVxcdTAwM2VmYW1pbHkpO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODc2LX1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTYwPXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczMC1cXHRMU01fSE9PS19JTklUKHNrX2ZyZWVfc2VjdXJpdHksIHNlbGludXhfc2tfZnJlZV9zZWN1cml0eSksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc3MzE6XFx0TFNNX0hPT0tfSU5JVChza19jbG9uZV9zZWN1cml0eSwgc2VsaW51eF9za19jbG9uZV9zZWN1cml0eSksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc3MzItXFx0TFNNX0hPT0tfSU5JVChza19nZXRzZWNpZCwgc2VsaW51eF9za19nZXRzZWNpZCksXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczNC1cXHRMU01fSE9PS19JTklUKHNjdHBfYXNzb2NfcmVxdWVzdCwgc2VsaW51eF9zY3RwX2Fzc29jX3JlcXVlc3QpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NzM1OlxcdExTTV9IT09LX0lOSVQoc2N0cF9za19jbG9uZSwgc2VsaW51eF9zY3RwX3NrX2Nsb25lKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczNi1cXHRMU01fSE9PS19JTklUKHNjdHBfYmluZF9jb25uZWN0LCBzZWxpbnV4X3NjdHBfYmluZF9jb25uZWN0KSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NzM5LVxcdExTTV9IT09LX0lOSVQoaW5ldF9jb25uX3JlcXVlc3QsIHNlbGludXhfaW5ldF9jb25uX3JlcXVlc3QpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NzQwOlxcdExTTV9IT09LX0lOSVQoaW5ldF9jc2tfY2xvbmUsIHNlbGludXhfaW5ldF9jc2tfY2xvbmUpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NzQxLVxcdExTTV9IT09LX0lOSVQoaW5ldF9jb25uX2VzdGFibGlzaGVkLCBzZWxpbnV4X2luZXRfY29ubl9lc3RhYmxpc2hlZCksXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaD00MD1pbnQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1MTYgZmFtaWx5KTtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaDo0MTp2b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7XFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmg6NDI6dm9pZCBzZWxpbnV4X25ldGxibF9zY3RwX3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKTtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaC00My1pbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaD05Nj1zdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjY6MTMuMTY1NzI4MDQyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NTg4NjU0NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNvY2tldCBDbG9uaW5nIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIHNvY2tldCBjbG9uaW5nIG1lY2hhbmlzbSAoYHNrX2Nsb25lYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IOKAkyB0aGlzIHNvdW5kcyBsaWtlIGEgY29yZSBuZXR3b3JraW5nIGlzc3VlLlxuXG5Fc3NlbnRpYWxseSwgYHNvY2tfY29weWAgaW4gYHNrX2Nsb25lYCBkb2VzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBgc29ja2Agc3RydWN0dXJlLiBUaGUgY3J1eCBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBgc2stXHUwMDNlcHNwX2Fzc29jYCBwb2ludGVyLiBJZiB0aGUgb3JpZ2luYWwgc29ja2V0IChgc2tgKSBoYXMgdGhpcyBgcHNwX2Fzc29jYCBwb2ludGVyIHNldCwgdGhlIGNsb25lZCBzb2NrZXQgKGBuZXdza2ApIGdldHMgYSAqZGlyZWN0KiBjb3B5IG9mIHRoYXQgcG9pbnRlcjogYG5ld3NrLVx1MDAzZXBzcF9hc3NvYyA9IHNrLVx1MDAzZXBzcF9hc3NvY2AuIE5vIHJlZmVyZW5jZSBjb3VudGluZywgbm8gc2FmZWd1YXJkcywganVzdCBhIHN0cmFpZ2h0IHBvaW50ZXIgYXNzaWdubWVudC5cblxuVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGRpY2V5LiBJZiB0aGUgcGFyZW50IHNvY2tldCAoYHNrYCkgYW5kIHRoZSBjaGlsZCBzb2NrZXQgKGBuZXdza2ApIG5vdyBib3RoIGJlbGlldmUgdGhleSBvd24gYHBzcF9hc3NvY2AsIHdlIGhhdmUgYSBjb2xsaXNpb24uIERlc3Ryb3lpbmcgZWl0aGVyIHNvY2tldCBvciBleHBsaWNpdGx5IGNhbGxpbmcgYHBzcF9za19hc3NvY19mcmVlKG5ld3NrKWAgb24gdGhlIGNsb25lIHdvdWxkIGNhdXNlIGBwc3BfYXNzb2NgIHRvIGJlIGZyZWVkLCBwb3RlbnRpYWxseSBsZWF2aW5nIGEgZGFuZ2xpbmcgcG9pbnRlciBmb3IgdGhlIG90aGVyIHNvY2tldCBvciBhbnkgb3RoZXIgc3Vic2VxdWVudCB1c2UuIEFuZCB0aGlzIGNvdWxkIGxlYWQgdG8gdGhlIGNsYXNzaWMgXCJ1c2UtYWZ0ZXItZnJlZVwiIG9yIFwiZG91YmxlIGZyZWVcIiBzY2VuYXJpb3MuXG5cblRoZSBwcm9wb3NlZCBwYXRjaCBpcyBzbWFydC4gVGhleSdyZSBpbml0aWFsaXppbmcgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5IHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7YC4gVGhpcyBlZmZlY3RpdmVseSBwcmV2ZW50cyB0aGUgZGFuZ2xpbmcgcG9pbnRlciBpc3N1ZSBieSBlbnN1cmluZyB0aGUgY2xvbmUgZG9lc24ndCBwb2ludCB0byB0aGUgb3JpZ2luYWwgc3RydWN0dXJlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0cyB1c2UgYHBzcF9hc3NvY2AgYW5kIHdoZXJlIGBwc3Bfc2tfYXNzb2NfZnJlZWAgaXMgY2FsbGVkIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3QgYW5kIHRoZSBuZWVkIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBmb3IgYm90aCBzb2NrZXQgZGVzdHJ1Y3Rpb24gYW5kIGV4cGxpY2l0IGBwc3Bfc2tfYXNzb2NfZnJlZWAgY2FsbHMgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkzMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNjo1Mi43NTQzODU2MTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODU4Nzc4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNwX3NrX2Fzc29jX2ZyZWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTMzPXVuc2lnbmVkIGludCBwc3Bfa2V5X3NpemUodTMyIHZlcnNpb24pO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM1LXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTctI2Vsc2VcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spIHsgfVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTktc3RhdGljIGlubGluZSB2b2lkXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTQwPXZvaWQgaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xNjYtXFx0ZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cXHUwMDNlc2tfcnhfZHN0LCAxKSk7XFxubmV0L2lwdjQvYWZfaW5ldC5jOjE2NzpcXHRwc3Bfc2tfYXNzb2NfZnJlZShzayk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTE2OC19XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTE4PXZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTIzLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3BzcC9wc3Bfc29jay5jLTEyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI2OjU0LjI0MDI2ODYxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDY4NDEyMjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2VybmVsIFZ1bG5lcmFiaWxpdHkgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgc2lnbmlmaWNhbmNlIGZvciBmdXp6aW5nIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIHJlZmNvdW50aW5nIHByb2JsZW0gcmVsYXRlZCB0byBob3cgYHBzcF9za19hc3NvY2AgaXMgaGFuZGxlZCBkdXJpbmcgc29ja2V0IGNsb25pbmcuIFNwZWNpZmljYWxseSwgYGluZXRfc29ja19kZXN0cnVjdGAgY2FsbHMgYHBzcF9za19hc3NvY19mcmVlYCwgd2hpY2ggaW4gdHVybiBpbnZvbHZlcyBgcHNwX2Fzc29jX3B1dGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGEgbGlzdGVuaW5nIFRDUCBzb2NrZXQsIG9yIGEgY2xvbmVkIHNvY2tldCBkZXJpdmVkIGZyb20gaXQsIGlzIGNsb25lZCB2aWEgYHNrX2Nsb25lX2xvY2tgIGFuZCBgc2tfY2xvbmVgLiBgc29ja19jb3B5YCBkdXBsaWNhdGVzIHRoZSBzb2NrZXQgc3RydWN0dXJlIChgc2tgKSB0byBgbmV3c2tgLiBJZiB0aGUgYHNrLVx1MDAzZXBzcF9hc3NvY2AgcG9pbnRlciB3YXMgc2V0LCBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCB3b3VsZCBpbml0aWFsbHkgcG9pbnQgdG8gdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uIChgcGFzYCkgd2l0aG91dCBhIHJlZmNvdW50IGluY3JlYXNlLiBUaGUgb3JpZ2luYWwgY29kZSBjb3VsZCB0aGVuIGxlYWQgdG8gYSBkb3VibGUgZGVjcmVtZW50IG9mIHRoZSByZWZlcmVuY2UgY291bnQgd2hlbiBib3RoIHNvY2tldHMgYXJlIGV2ZW50dWFsbHkgZGVzdHJveWVkLCBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgY29uZGl0aW9uLlxuXG5UaGUgZml4LCBieSBzZXR0aW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7YCwgaW5pdGlhbGl6ZXMgdGhlIGBuZXdzay1cdTAwM2Vwc3BfYXNzb2NgIHRvIGBOVUxMYCwgcHJldmVudGluZyB0aGUgZHVwbGljYXRlIHJlZmVyZW5jZS5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLlxuXG4xLiAgKipJcyB0aGlzIGEgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBrZXJuZWwgbG9naWM/KiogQWJzb2x1dGVseSwgYHNrX2Nsb25lKClgIGluIGBuZXQvY29yZS9zb2NrLmNgIGlzIHRoZSBzb2NrZXQgY2xvbmluZyBmdW5jdGlvbiBhbmQgaXQncyB1c2VkIGFjcm9zcyBhIHZhcmlldHkgb2YgbmV0d29ya2luZyBwcm90b2NvbHMgKFRDUCwgU0NUUCwgTVBUQ1ApIHdoZW5ldmVyIGEgbmV3IGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQgZnJvbSBhIGxpc3RlbmluZyBzb2NrZXQuIFRoaXMgZml4IG1vZGlmaWVzIHRoYXQgY29yZSBjbG9uaW5nIGxvZ2ljIHdoZW4gYElORVRfUFNQYCBpcyBlbmFibGVkLlxuMi4gICoqQ2FuIHRoaXMgYmUgZnV6emVkIGluIGNvbW1vbiBlbnZpcm9ubWVudHM/KiogWWVzLCB0aGlzIGlzIGEgcHVyZSBzb2Z0d2FyZS1iYXNlZCBvcGVyYXRpb24sIGludm9sdmluZyBuZXR3b3JrIHByb3RvY29scy4gSXQgY2FuIGJlIGV4ZXJjaXNlZCBpbiBzdGFuZGFyZCBMaW51eCBlbnZpcm9ubWVudHMsIFFFTVUsIG9yIGV2ZW4gd2l0aCBuZXRkZXZzaW0vdmV0aC9sb29wYmFjayBzZXR1cHMuXG4zLiAgKipJcyBpdCB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/KiogRGVmaW5pdGVseS4gVGhpcyBmaXhlcyBhIHJlZmNvdW50aW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSByZWxhdGVkIHRvIFBTUCB3aXRoaW4gdGhlIGNyaXRpY2FsIHByb2Nlc3Mgb2Ygc29ja2V0IGNsb25pbmcuIFBTUCBpcyBhIG5ldHdvcmtpbmcgZmVhdHVyZSBlbmFibGVkIGJ5IGBDT05GSUdfSU5FVF9QU1BgLiBJdCdzIHRlc3RhYmxlIHdpdGggZnV6emluZyB1c2luZyB0aGUgc29ja2V0IG9wZXJhdGlvbnMsIGxpa2UgVENQIGFjY2VwdCwgbGlzdGVuLCBjb25uZWN0LCBhbmQgcG90ZW50aWFsbHkgbmV0bGluayBjb21tYW5kcyByZWxhdGVkIHRvIFBTUC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcy4gTGV0J3MgbG9vayBhdCBgbmV0L3BzcC9LY29uZmlnYCBhbmQgaWYgaXQgaGFzIGFueSBmdXJ0aGVyIGRlcGVuZGVuY2llcy4gV2UndmUgY29uZmlybWVkIHRoYXQgYElORVRfUFNQYCBkZXBlbmRzIG9uIGBJTkVUYCwgYnV0IGFyZSB0aGVyZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBpbiBgbmV0L3BzcC9LY29uZmlnYCBpdHNlbGYsIG9yIHBlcmhhcHMgYG5ldC9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL0tjb25maWdgPyBJdCdzIGFsd2F5cyBpbXBvcnRhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTkzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI3OjU0LjkyNDM5MzczNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MDYyMjAyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKm5ldC9wc3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9ODQ9c291cmNlIFxcXCJuZXQvcGFja2V0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6ODU6c291cmNlIFxcXCJuZXQvcHNwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctODYtc291cmNlIFxcXCJuZXQvdW5peC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNzo1Ny4zODUwMjA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjEwNDk1NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBQU1AgU2VjdXJpdHkgUHJvdG9jb2wgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBnaXZlbiB0aGlzIEtjb25maWcgZW50cnkgZm9yIHRoZSBQU1AgU2VjdXJpdHkgUHJvdG9jb2wuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseS4gTGV0J3MgZGVsdmUgaW50byB0aGUgYG5ldC9wc3AvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEknbSBub3RpbmcgdGhlIGJvb2xlYW4gbmF0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIGRlcGVuZGVuY3kgb24gYElORVRgLCBhbmQgdGhlIHNlbGVjdCBzdGF0ZW1lbnRzIGNob29zaW5nIGBTS0JfREVDUllQVEVEYCwgYFNLQl9FWFRFTlNJT05TYCwgYW5kIGBTT0NLX1ZBTElEQVRFX1hNSVRgLiBUaGVzZSBkZXBlbmRlbmNpZXMgZ2l2ZSBtZSBpbW1lZGlhdGUgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcga2VybmVsIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRoaXMgcHJvdG9jb2wgaW50ZWdyYXRlcy4gVGhlIGRvY3VtZW50YXRpb24gbGluayBwb2ludHMgdG8gdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNhdGlvbiwgd2hpY2ggSSdsbCBhYnNvbHV0ZWx5IHJldmlldywgbGlrZWx5IG11bHRpcGxlIHRpbWVzLiBUaGUgXCJJZiB1bnN1cmUsIHNheSBOXCIgaGVscCB0ZXh0IGlzIHN0YW5kYXJkLCBidXQgSSB3aWxsIGJlIHN1cmUgdG8gYXZvaWQgdGhhdC5cblxuTm93LCBJIHdhbnQgYSBtb3JlIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4gSSdtIGdvaW5nIHRvIHNjYW4gYWNyb3NzIGFsbCBLY29uZmlnIGZpbGVzIGFuZCBoZWFkZXIgZmlsZXMgaW4gdGhlIHJlbGV2YW50IGFyZWFzIHRvIGNoZWNrIGV2ZXJ5IHBsYWNlIGBJTkVUX1BTUGAgaXMgcmVmZXJlbmNlZC4gQ3Jvc3MtcmVmZXJlbmNpbmcgdGhlc2UgaXMgaW1wb3J0YW50LiBOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgcnVudGltZSBjb25maWd1cmF0aW9uLiBIb3cgaXMgUFNQIGFjdHVhbGx5ICphc3NvY2lhdGVkKiB3aXRoIGEgc29ja2V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIGZvciBkb2luZyB0aGlzLiBUaGF0IHdpbGwgcHJvYmFibHkgcmVxdWlyZSBtb3JlIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIHNvdXJjZSwgYnV0IGlkZWFsbHksIEkgd2FudCB0byBzZWUgaG93IHRoaXMgaXMgY29uZmlndXJlZCBhbmQgbWFuaXB1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBuZXRsaW5rIGludGVyZmFjZXMgb3IgYHNldHNvY2tvcHRgIG9wdGlvbnMgcmVsYXRlZCB0byBcIlBTUFwiLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdW5kZXJzdGFuZGluZyBob3cgaXQncyB1c2VkIHdpbGwgY29tZSBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzIzOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyODoyNS45OTU1MTg3NDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE3MjYyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNwX3NvY2tfYXNzb2Nfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wc3AvcHNwLmg9MjU9dm9pZCBwc3BfZGV2X3R4X2tleV9kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcXG5uZXQvcHNwL3BzcC5oOjI2OmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3AuaC0yNy1cXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbm5ldC9wc3AvcHNwLmgtMjgtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9wc3AvcHNwLmg6Mjk6aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxubmV0L3BzcC9wc3AuaC0zMC1cXHRcXHRcXHQgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy04MDktXFxubmV0L3BzcC9wc3BfbmwuYzo4MTA6XFx0ZXJyID0gcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHNvY2tldC1cXHUwMDNlc2ssIHBhcywgXFx1MDAyNmtleSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTgxMS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTgyNj1pbnQgcHNwX25sX3R4X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtODU3LVxcbm5ldC9wc3AvcHNwX25sLmM6ODU4OlxcdGVyciA9IHBzcF9zb2NrX2Fzc29jX3NldF90eChzb2NrZXQtXFx1MDAzZXNrLCBwc2QsIHZlcnNpb24sIFxcdTAwMjZrZXksXFxubmV0L3BzcC9wc3BfbmwuYy04NTktXFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTI0PXZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTMyOmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTE1OD1zdGF0aWMgaW50IHBzcF9zb2NrX3JlY3ZfcXVldWVfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTc2LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxNzc6aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxubmV0L3BzcC9wc3Bfc29jay5jLTE3OC1cXHRcXHRcXHQgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6Mjg6MjcuNTM3MjQ5NTAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1NTc5NTAyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBzbmlwcGV0IG9mIGNvZGUsIHRoaW5raW5nIHRocm91Z2ggaXQgYXMgYW4gZXhwZXJ0IHdvdWxkOlxuXG4qKkRpdmluZyBpbnRvIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4YCoqXG5cblJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBzb2NrZXQgYXNzb2NpYXRpb24sIHNwZWNpZmljYWxseSBpbiB0aGUgYG5ldC9wc3AvcHNwX3NvY2suY2AgZmlsZS4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4YC4gVGhlc2UgZnVuY3Rpb25zIGxpa2VseSBjb250cm9sIHRoZSBzZXR1cCBvZiByZWNlaXZlIGFuZCB0cmFuc21pdCBhc3NvY2lhdGlvbnMgZm9yIHRoZXNlIHBhcnRpY3VsYXIgUFNQIHNvY2tldHMuIEknbSBhc3N1bWluZyBcIlBTUFwiIGlzIHNvbWV0aGluZyBwcm9wcmlldGFyeSBvciBzcGVjaWZpYyB0byB0aGlzIG5ldHdvcmsgc3RhY2s7IGtub3dpbmcgdGhpcywgSSBjYW4gaW5mZXIgdGhhdCB0aGUgYXNzb2NpYXRpb25zIGJlaW5nIHNldCBoZXJlIGFyZSBsaWtlbHkgdGllZCB0byBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlIG9yIG1lY2hhbmlzbSBmb3IgZWZmaWNpZW50bHkgaGFuZGxpbmcgdGhlc2Ugc29ja2V0cy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBcImFzc29jaWF0aW9uXCIgbWVhbnMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhYm91dCBsaW5raW5nIGEgc29ja2V0IHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2UsIGZsb3cgSUQsIHF1ZXVlLCBvciBldmVuIGEgcGFydGljdWxhciBidWZmZXI/IElzIHRoaXMgYWJvdXQgc2V0dGluZyB1cCBhIGNvbnRleHQgZm9yIHBhY2tldCBwcm9jZXNzaW5nIG9yIGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uPyBUaGUgXCJzZXRcXF9yeFwiIGFuZCBcInNldFxcX3R4XCIgZGlzdGluY3Rpb24gc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRoZSBjb25uZWN0aW9uIGlzIHJlbGV2YW50LlxuXG5NeSBmaXJzdCBzdGVwIHdpbGwgYmUgdG8gcXVpY2tseSByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHBzcF9zb2NrLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBQU1Agc29ja2V0IGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBhc3NvY2lhdGlvbnMgYXJlIHVzZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgcmVsYXRlIHRvIChlc3BlY2lhbGx5IGFueXRoaW5nIHdpdGggXCJhc3NvYyxcIiBcInJ4LFwiIG9yIFwidHhcIiBpbiB0aGUgbmFtZSksIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0aHJvdWdoIHRoZXNlIGZ1bmN0aW9ucywgaWRlbnRpZnlpbmcgYW55IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gQ29udGV4dCBpcyBrZXksIGFuZCBJJ2xsIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlICp3aHkqIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlICpob3cqIHRoZXkncmUgZGVzaWduZWQuIFRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiAqd2hhdCogaXMgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI5OjIzLjExNjc1NTExOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcHNwL3BzcF9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdGlmIChwYXMgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZwYXMtXFx1MDAzZXJlZmNudCkpXFxuIDEyMTpcXHRcXHRcXHRjYWxsX3JjdShcXHUwMDI2cGFzLVxcdTAwM2VyY3UsIHBzcF9hc3NvY19mcmVlX3F1ZXVlKTtcXG4gMTIyOlxcdH1cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxuIDEyNTpcXHR7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIDEpO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoc2stXFx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XFxuIDEyOTpcXHRcXHRwc3BfYXNzb2NfcHV0KHBhcyk7XFxuIDEzMDpcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdGludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuIDEzMzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbiAxMzQ6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRpbnQgZXJyO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRtZW1jcHkoXFx1MDAyNnBhcy1cXHUwMDNlcngsIGtleSwgc2l6ZW9mKCprZXkpKTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcXG4gMTQzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlNvY2tldCBhbHJlYWR5IGhhcyBQU1Agc3RhdGVcXFwiKTtcXG4gMTQ0OlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4gMTQ1OlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDE0NjpcXHRcXHR9XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2cGFzLVxcdTAwM2VyZWZjbnQpO1xcbiAxNDk6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XFxuIDE1MDpcXHRcXHRlcnIgPSAwO1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRleGl0X3VubG9jazpcXG4gMTUzOlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdHJldHVybiBlcnI7XFxuIDE1NjpcXHR9XFxuIDE1NzpcXHRcXG4gMTU4OlxcdHN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG4gMTU5OlxcdHtcXG4gMTYwOlxcdFxcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlO1xcbiAxNjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0c2tiX3JidHJlZV93YWxrKHNrYiwgXFx1MDAyNnRjcF9zayhzayktXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkge1xcbiAxNjQ6XFx0XFx0XFx0cHNlID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9QU1ApO1xcbiAxNjU6XFx0XFx0XFx0aWYgKCFwc3BfcHNlX21hdGNoZXNfcGFzKHBzZSwgcGFzKSlcXG4gMTY2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDE2NzpcXHRcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdFxcdHNrYl9xdWV1ZV93YWxrKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKSB7XFxuIDE3MDpcXHRcXHRcXHRwc2UgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX1BTUCk7XFxuIDE3MTpcXHRcXHRcXHRpZiAoIXBzcF9wc2VfbWF0Y2hlc19wYXMocHNlLCBwYXMpKVxcbiAxNzI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gMTczOlxcdFxcdH1cXG4gMTc0OlxcdFxcdHJldHVybiAwO1xcbiAxNzU6XFx0fVxcbiAxNzY6XFx0XFxuIDE3NzpcXHRpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcXG4gMTc4OlxcdFxcdFxcdFxcdCAgdTMyIHZlcnNpb24sIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbiAxNzk6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE4MDpcXHR7XFxuIDE4MTpcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7XFxuIDE4MjpcXHRcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpkdW1teTtcXG4gMTgzOlxcdFxcdGludCBlcnI7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxuIDE4ODpcXHRcXHRpZiAoIXBhcykge1xcbiAxODk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiU29ja2V0IGhhcyBubyBSeCBrZXlcXFwiKTtcXG4gMTkwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDE5MTpcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFx0aWYgKHBhcy1cXHUwMDNlcHNkICE9IHBzZCkge1xcbiAxOTQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUngga2V5IGZyb20gZGlmZmVyZW50IGRldmljZVxcXCIpO1xcbiAxOTU6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMTk2OlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDE5NzpcXHRcXHR9XFxuIDE5ODpcXHRcXHRpZiAocGFzLVxcdTAwM2V2ZXJzaW9uICE9IHZlcnNpb24pIHtcXG4gMTk5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4gMjAwOlxcdFxcdFxcdFxcdCAgICAgICBcXFwiUFNQIHZlcnNpb24gbWlzbWF0Y2ggd2l0aCBleGlzdGluZyBzdGF0ZVxcXCIpO1xcbiAyMDE6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMjAyOlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDIwMzpcXHRcXHR9XFxuIDIwNDpcXHRcXHRpZiAocGFzLVxcdTAwM2V0eC5zcGkpIHtcXG4gMjA1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlR4IGtleSBhbHJlYWR5IHNldFxcXCIpO1xcbiAyMDY6XFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbiAyMDc6XFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gMjA4OlxcdFxcdH1cXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyOToyMy4xMTY4MzI5OThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0NzQ5MjcyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgc2tfY2xvbmUoKWAgaW4gYG5ldC9jb3JlL3NvY2suY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSBhbGwgcmVsZXZhbnQgc3ltYm9scyB0aGF0IGFyZSBtb2RpZmllZCBvciBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSB0aGUgbW9zdCBlZmZlY3RpdmUgcGFyYW1ldGVycyBmb3IgZnV6emluZy5cblxuTXkgYW5hbHlzaXMgd2VudCBsaWtlIHRoaXM6XG4xLiAgKipNb2RpZmllZCBGdW5jdGlvbjoqKiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgc2tfY2xvbmVgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZC5cbjIuICAqKkhvdCBQYXRoIEFuYWx5c2lzOioqIEkgY29uc2lkZXJlZCB3aGV0aGVyIGBza19jbG9uZWAgaXMgYSBmcmVxdWVudGx5IGV4ZWN1dGVkIGhvdC1wYXRoIGZ1bmN0aW9uIG9yIGxlc3MgY3JpdGljYWwgYW5kIGNvbmZpcm1lZCBpdCdzIGNhbGxlZCBkdXJpbmcgVENQL1NDVFAgY29ubmVjdGlvbiBzZXR1cCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgYnV0IG5vdCBhbHdheXMgaG90IHBhdGguIFRoaXMgaW5mb3JtcyBteSBmdXp6aW5nIHN0cmF0ZWd5LlxuMy4gICoqSW5zdHJ1Y3Rpb24gQWxpZ25tZW50OioqIEkgdGhlbiBjYXJlZnVsbHkgcmUtcmVhZCB0aGUgcmVsZXZhbnQgZnV6emluZyBpbnN0cnVjdGlvbiB3aGljaCBlbXBoYXNpemVzIGZvY3VzaW5nIG9uIHNwZWNpZmljLCBub24tZ2VuZXJpYyBlbnRyeXBvaW50cy4gVGhlIGluc3RydWN0aW9uIGFsc28gaGlnaGxpZ2h0ZWQgdGhlIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyB0byBlbnN1cmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZy5cbjQuICAqKklkZW50aWZ5aW5nIEZvY3VzIFN5bWJvbHM6KiogQmFzZWQgb24gdGhlIHBhdGNoLCBJJ3ZlIGlkZW50aWZpZWQgdGhlICpgc2tfY2xvbmVgKiBmdW5jdGlvbiBhbmQgKm5ldGxpbmsgZW50cnlwb2ludHMgZm9yIFBTUCo6IGBwc3BfbmxfcnhfYXNzb2NfZG9pdGAsIGBwc3BfbmxfdHhfYXNzb2NfZG9pdGAsIGFuZCB0aGUgc29ja2V0IGFzc29jaWF0aW9uIGZ1bmN0aW9uczogYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAsIGBwc3Bfc29ja19hc3NvY19zZXRfdHhgLCBgcHNwX3NrX2Fzc29jX2ZyZWVgIGFzIHRoZSBtYWluIGZvY3VzIHN5bWJvbHMuXG41LiAgKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczoqKiBJIGNoZWNrZWQgZm9yIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFuZCBkZXBlbmRlbmNpZXMgbGlrZSBgQ09ORklHX0lORVRfUFNQYC4gSSBjb25maXJtZWQgdGhhdCBgSU5FVF9QU1BgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYE5FVGBcbjYuICAqKlZlcmlmeWluZyBGdXp6aW5nIFN1aXRhYmlsaXR5OioqIEkgdmVyaWZpZWQgdGhlIHBhdGNoIGZpeGVzIGEgcmVmY291bnRpbmcvc29ja2V0IGluaXRpYWxpemF0aW9uIGlzc3VlIHdoZW4gY2xvbmluZyBzb2NrZXRzIHdpdGggUFNQIHN1cHBvcnQgZW5hYmxlZCAoYENPTkZJR19JTkVUX1BTUGApLCBjb25maXJtaW5nIGl0cyBzdWl0YWJpbGl0eSBmb3IgZnV6emluZy5cbjcuICAqKmBGb2N1c1N5bWJvbHNgIFJlZmluZW1lbnQ6KiogV2l0aCB0aGF0IGluIG1pbmQsIEkgcmV2aWV3ZWQgdGhlIGtleSBmdXp6aW5nIHBhcmFtZXRlcnM6XG4gICAgKiAgICoqYFdvcnRoRnV6emluZ2A6KiogQ29uZmlybWVkIHRoYXQgdGhlIGZpeCBpcyB3b3J0aCBmdXp6aW5nIGR1ZSB0byB0aGUgcmVmY291bnRpbmcvc29ja2V0IGluaXRpYWxpemF0aW9uIGlzc3VlLlxuICAgICogICAqKmBGb2N1c1N5bWJvbHNgOioqIE15IGZpbmFsIHNlbGVjdGlvbiBmb3IgRm9jdXNTeW1ib2xzIGluY2x1ZGVzOlxuICAgICAgICAqICAgYHNrX2Nsb25lYFxuICAgICAgICAqICAgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGBcbiAgICAgICAgKiAgIGBwc3Bfc29ja19hc3NvY19zZXRfdHhgXG4gICAgICAgICogICBgcHNwX3NrX2Fzc29jX2ZyZWVgXG4gICAgKiAgICoqYEVuYWJsZUNvbmZpZ3NgOioqIFRoZSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgYXJlOlxuICAgICAgICAqICAgYElORVRfUFNQYFxuICAgICAgICAqICAgYElORVRgXG44LiAgKipGaW5hbCBWZXJpZmljYXRpb246KiogSSBkb3VibGUtY2hlY2tlZCB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIHRoYXQgYHNrX2Nsb25lYCBpcyBgRVhQT1JUX1NZTUJPTF9HUExgIGFuZCB0aGUgb3RoZXJzIGFyZSBhbHNvIG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5CYXNlZCBvbiB0aGlzLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgdGFyZ2V0cyBhbmQgY29uZmlndXJhdGlvbnMuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGFuZCB0aGUgc3lzdGVtIHJlcXVpcmVtZW50cyBpcyBub3cgc29saWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjczLCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI5OjUwLjU5MTc2MjYzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzM5ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX2Nsb25lXCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfcnhcIixcbiAgICBcInBzcF9zb2NrX2Fzc29jX3NldF90eFwiLFxuICAgIFwicHNwX3NrX2Fzc29jX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCdzIHBzcF9hc3NvYyBwb2ludGVyIGlzIGNsZWFyZWQgZHVyaW5nIHNrX2Nsb25lKCkgd2hlbiBJTkVUX1BTUCBpcyBlbmFibGVkLCBwcmV2ZW50aW5nIHRoZSBuZXdseSBjbG9uZWQgc29ja2V0IGZyb20gaW5oZXJpdGluZyB0aGUgcGFyZW50IHNvY2tldCdzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX2Nsb25lXCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfcnhcIixcbiAgICBcInBzcF9zb2NrX2Fzc29jX3NldF90eFwiLFxuICAgIFwicHNwX3NrX2Fzc29jX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCdzIHBzcF9hc3NvYyBwb2ludGVyIGlzIGNsZWFyZWQgZHVyaW5nIHNrX2Nsb25lKCkgd2hlbiBJTkVUX1BTUCBpcyBlbmFibGVkLCBwcmV2ZW50aW5nIHRoZSBuZXdseSBjbG9uZWQgc29ja2V0IGZyb20gaW5oZXJpdGluZyB0aGUgcGFyZW50IHNvY2tldCdzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6Mjk6NTAuNjcyMTExMTA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIxOTk5NDcyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyOTo1MC42NzI3MDYwOTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDIxOTkzNDg4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza19jbG9uZSgpYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2NgIHRvIGBOVUxMYCB2aWEgYFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXBzcF9hc3NvYywgTlVMTClgLiBcXG5cXG5XaGVuIGEgc29ja2V0IGlzIGNsb25lZCwgYHNvY2tfY29weSgpYCBwZXJmb3JtcyBhIHNoYWxsb3cgY29weSBvZiB0aGUgc29ja2V0IHN0cnVjdHVyZSBmcm9tIHBhcmVudCB0byBjaGlsZC4gV2l0aG91dCBjbGVhcmluZyBgbmV3c2stXFx1MDAzZXBzcF9hc3NvY2AsIHRoZSBjbG9uZWQgc29ja2V0IGluaGVyaXRlZCB0aGUgcGFyZW50J3MgcG9pbnRlciB0byBgc3RydWN0IHBzcF9hc3NvY2Agd2l0aG91dCB0YWtpbmcgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnQuIFVwb24gZGVzdHJ1Y3Rpb24gb2YgdGhlIGNsb25lZCBzb2NrZXQgKGBwc3Bfc2tfYXNzb2NfZnJlZWApLCBgcHNwX2Fzc29jX3B1dCgpYCB3b3VsZCBiZSBjYWxsZWQsIGxlYWRpbmcgdG8gcmVmZXJlbmNlIHVuZGVyZmxvdywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGVycm9ycy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWRkcmVzc2luZyBvYmplY3QgbGlmZWN5Y2xlLCBwb2ludGVyIGFsaWFzaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyAod2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2E1YTg1ZWJiYWM2OTc1MmUwYWZhZjZjYTg4OGI1M2FhNTZmMDQ5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjIzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCAxYWQ0MTkwNGRiMjViLi5mYTYwYjc0OTRjNTg2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0yNDk0LDYgKzI0OTQsOSBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXNrX2JwZl9zdG9yYWdlLCBOVUxMKTtcbiAjZW5kaWZcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4rXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG4rI2VuZGlmXG4gXG4gXHQvKiBTQU5JVFkgKi9cbiBcdGlmIChsaWtlbHkobmV3c2stXHUwMDNlc2tfbmV0X3JlZmNudCkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI5OjUwLjY3MjcwNzM0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTM5NDk5MzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9jb3JlL3NvY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYHNrX2Nsb25lYCAob3IgcG90ZW50aWFsbHkgYHNrX2Nsb25lX2xvY2tgKSBmdW5jdGlvbi4gVGhhdCdzIGEga2V5IHNwb3QgZm9yIHNvY2tldCBjbG9uaW5nLCBhbmQgYW55IG1vZGlmaWNhdGlvbiB0aGVyZSB3YXJyYW50cyBhIGNsb3NlIGxvb2suIFRoZSBzbmlwcGV0IGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFkZGluZyBhIGNvbmRpdGlvbmFsIGJsb2NrIGJhc2VkIG9uIGBDT05GSUdfSU5FVF9QU1BgLiBJbnNpZGUgdGhhdCBjb25kaXRpb25hbCwgaXQncyBpbml0aWFsaXppbmcgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSYC4gU2VlbXMgbGlrZSB0aGV5J3JlIGFzc29jaWF0aW5nIHNvbWUgc29ydCBvZiBwb2ludGVyIHdpdGggdGhlIG5ldyBzb2NrZXQgY2xvbmUgaWYgdGhpcyBgQ09ORklHX0lORVRfUFNQYCBmZWF0dXJlIGlzIGVuYWJsZWQuXG5cblJpZ2h0LCBzbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBwc3BfYXNzb2NgICppcyogYW5kIHdoYXQgdGhpcyBgQ09ORklHX0lORVRfUFNQYCBmbGFnIGNvbnRyb2xzLiBUaW1lIHRvIGdvIGh1bnRpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSBoZXJlIHRvIHNlZSBpZiBhbnkgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IGNvbmNlcm5zIGNvbWUgdG8gbWluZCBhcyBhIHJlc3VsdCBvZiB0aGF0IGFzc29jaWF0aW9uIGFuZCB0aGUgY2xvbmluZyBwcm9jZXNzLiBBbHNvLCBnaXZlbiBpdOKAmXMgUkNVIGluaXQsIHRoZXJlIGFyZSBpbXBsaWNhdGlvbnMgaW4gdGVybXMgb2YgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IHNhZmV0eSB3aXRoIHJlc3BlY3QgdG8gdGhhdCByZWFkIGFuZCB3cml0ZS4gTGV0J3Mgc2VlIHdoYXTigJlzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MzE6MjAuMDY3NzAzMDM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA0NTgwNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzcF9hc3NvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM9OTMxPXN0cnVjdCBwc3Bfa2V5IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05MzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjkzNTpzdGF0aWMgaW50IG1seDVlX3BzcF9hc3NvY19hZGQoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05MzYtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjk2MTpzdGF0aWMgdm9pZCBtbHg1ZV9wc3BfYXNzb2NfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtOTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz0xMDExPXN0YXRpYyBzdHJ1Y3QgcHNwX2Rldl9vcHMgbWx4NV9wc3Bfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTEwMTMtXFx0LnJ4X3NwaV9hbGxvYyA9IG1seDVlX3BzcF9yeF9zcGlfYWxsb2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjEwMTQ6XFx0LnR4X2tleV9hZGQgICA9IG1seDVlX3BzcF9hc3NvY19hZGQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjEwMTU6XFx0LnR4X2tleV9kZWwgICA9IG1seDVlX3BzcF9hc3NvY19kZWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTEwMTYtXFx0LmtleV9yb3RhdGUgICA9IG1seDVlX3BzcF9rZXlfcm90YXRlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmM9OTM9c3RhdGljIGJvb2wgbWx4NWVfcHNwX3NldF9zdGF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jLTk2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYzo5NzpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMtOTgtXFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xOD1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMi1cXHRzdHJ1Y3QgcHNwX2RldiAqcGVlcl9wc2Q7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIzOlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjQtXFx0c3RydWN0IG5ldCAqbmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTM5LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzo0MDpcXHRwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtNDEtXFx0aWYgKCpwdHIgIT0gbnMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xMzE9bnNpbV9yeF9zcGlfYWxsb2Moc3RydWN0IHBzcF9kZXYgKnBzZCwgdTMyIHZlcnNpb24sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxNTI6c3RhdGljIGludCBuc2ltX2Fzc29jX2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1My1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTUtXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBwc2QtXFx1MDAzZWRydl9wcml2O1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxNTY6XFx0dm9pZCAqKnB0ciA9IHBzcF9hc3NvY19kcnZfZGF0YShwYXMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTctXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MTY1PXN0YXRpYyBpbnQgbnNpbV9rZXlfcm90YXRlKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNzktXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE4MDpzdGF0aWMgdm9pZCBuc2ltX2Fzc29jX2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4MS17XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4Mi1cXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IHBzZC1cXHUwMDNlZHJ2X3ByaXY7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE4MzpcXHR2b2lkICoqcHRyID0gcHNwX2Fzc29jX2Rydl9kYXRhKHBhcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4NC1cXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oPTMzPXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oOjg2OlxcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcXHQgICpwc3BfYXNzb2M7XFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODctI2VuZGlmXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MjI9aW50IHBzcF9kZXZfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHUxNiBkZXZfaWQsIHU4IGdlbmVyYXRpb24sIGJvb2wgc3RyaXBfaWN2KTtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yNC0vKiBLZXJuZWwtZmFjaW5nIEFQSSAqL1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoyNTp2b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMjYtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjI3OnN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2Fzc29jX2Rydl9kYXRhKHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMjgte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTM3PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzgtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDAte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0MTpcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQyLX1cXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD00NT1wc3BfZW5xdWV1ZV9zZXRfZGVjcnlwdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDYte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0NzpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQ4LVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTY5PXN0YXRpYyBpbmxpbmUgYm9vbFxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo3MDpwc3BfaXNfYWxsb3dlZF9ub25kYXRhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNzEte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbFxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo4Mzpwc3BfcHNlX21hdGNoZXNfcGFzKHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTg0LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD05MT1zdGF0aWMgaW5saW5lIGVudW0gc2tiX2Ryb3BfcmVhc29uXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjkyOl9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTkzLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMjI9cHNwX3R3c2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjMte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjQ6XFx0cmV0dXJuIF9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhza2IsIHJjdV9kZXJlZmVyZW5jZSh0dy1cXHUwMDNlcHNwX2Fzc29jKSk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyNS19XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyNi1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTI3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2dldF9hc3NvY19yY3UoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjgte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjk6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMzAtXFx0aW50IHN0YXRlO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEzNi1cXHRwYXMgPSBzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUID9cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTM3OlxcdFxcdCAgICAgIHJjdV9kZXJlZmVyZW5jZShpbmV0X3R3c2soc2spLVxcdTAwM2Vwc3BfYXNzb2MpIDpcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTM4OlxcdFxcdCAgICAgIHJjdV9kZXJlZmVyZW5jZShzay1cXHUwMDNlcHNwX2Fzc29jKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTM5LVxcdHJldHVybiBwYXM7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTQxLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tiX2dldF9hc3NvY19yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTQzLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTItXFx0aW50IHBzcF9lbmNhcCA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIFBTUF9IRFJfU0laRSArIFBTUF9UUkxfU0laRTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTUzOlxcdGJvb2wgaGFzX3BzcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzay1cXHUwMDNlcHNwX2Fzc29jKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU0LVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE2Mz1wc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpIHsgfVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjQtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2Ni17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTg3PXBzcF90d3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xOTEtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za2JfZ2V0X2Fzc29jX3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xOTMte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9NDM9c3RydWN0IHBzcF9kZXZfY29uZmlnIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTUzLS8qKlxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjU0OiAqIHN0cnVjdCBwc3BfYXNzb2NfZGV2IC0gd3JhcHBlciBmb3IgYXNzb2NpYXRlZCBuZXRfZGV2aWNlXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNTUtICogQGRldl9saXN0OiBsaXN0IG5vZGUgZm9yIHBzcF9kZXY6OmFzc29jX2Rldl9saXN0XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01OC0gKi9cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDo1OTpzdHJ1Y3QgcHNwX2Fzc29jX2RldiB7XFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjAtXFx0c3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTY3LSAqIEBtYWluX25ldGRldjogb3JpZ2luYWwgbmV0ZGV2aWNlIG9mIHRoaXMgUFNQIGRldmljZVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjY4OiAqIEBhc3NvY19kZXZfbGlzdDogbGlzdCBvZiBwc3BfYXNzb2NfZGV2IGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUFNQIGRldmljZVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTY5LSAqIEBhc3NvY19kZXZfY250OiBudW1iZXIgb2YgZW50cmllcyBpbiBAYXNzb2NfZGV2X2xpc3RcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTEyND1zdHJ1Y3QgcHNwX2Rldl9jYXBzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEzMi1cXHQgKiBAYXNzb2NfZHJ2X3NwYzogc2l6ZSBvZiBkcml2ZXItc3BlY2lmaWMgc3RhdGUgaW4gVHggYXNzb2NcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoxMzM6XFx0ICogRGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiBzdHJ1Y3QgcHNwX2Fzc29jOjpkcnZfZGF0YVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEzNC1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE1MD1zdHJ1Y3QgcHNwX2tleV9wYXJzZWQge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTU0LVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjE1NTpzdHJ1Y3QgcHNwX2Fzc29jIHtcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0xNTYtXFx0c3RydWN0IHBzcF9kZXYgKnBzZDtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE5NT1zdHJ1Y3QgcHNwX2Rldl9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjIyLVxcdCAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjIyMzpcXHRpbnQgKCp0eF9rZXlfYWRkKShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjI0LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIyOC1cXHQgKi9cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoyMjk6XFx0dm9pZCAoKnR4X2tleV9kZWwpKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjMwLVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTI0Mj1zdHJ1Y3Qgc2tfZmlsdGVyO1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTI1OC0gICpcXHRAc2tfcG9saWN5OiBmbG93IHBvbGljeVxcbmluY2x1ZGUvbmV0L3NvY2suaDoyNTk6ICAqXFx0QHBzcF9hc3NvYzogUFNQIGFzc29jaWF0aW9uLCBpZiBzb2NrZXQgaXMgUFNQLXNlY3VyZWRcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjYwLSAgKlxcdEBza19yZWNlaXZlX3F1ZXVlOiBpbmNvbWluZyBwYWNrZXRzXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MzY1PXN0cnVjdCBzb2NrIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC00NjctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L3NvY2suaDo0Njg6XFx0c3RydWN0IHBzcF9hc3NvYyBfX3JjdVxcdCpwc3BfYXNzb2M7XFxuaW5jbHVkZS9uZXQvc29jay5oLTQ2OS0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0yNDc5PXN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTI0OTctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbm5ldC9jb3JlL3NvY2suYzoyNDk4OlxcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XFxubmV0L2NvcmUvc29jay5jLTI0OTktI2VuZGlmXFxuLS1cXG5uZXQvcHNwL3BzcC1ubC1nZW4uYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIHBzcF9ubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTEwNS1cXHRcXHQuY21kXFx0XFx0PSBQU1BfQ01EX1JYX0FTU09DLFxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jOjEwNjpcXHRcXHQucHJlX2RvaXRcXHQ9IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZCxcXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy0xMDctXFx0XFx0LmRvaXRcXHRcXHQ9IHBzcF9ubF9yeF9hc3NvY19kb2l0LFxcbi0tXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTE0LVxcdFxcdC5jbWRcXHRcXHQ9IFBTUF9DTURfVFhfQVNTT0MsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmM6MTE1OlxcdFxcdC5wcmVfZG9pdFxcdD0gcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkLFxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTExNi1cXHRcXHQuZG9pdFxcdFxcdD0gcHNwX25sX3R4X2Fzc29jX2RvaXQsXFxuLS1cXG5uZXQvcHNwL3BzcC1ubC1nZW4uaD0yMD1pbnQgcHNwX2RldmljZV9nZXRfbG9ja2VkX2FkbWluKGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oLTIxLVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9wc3AvcHNwLW5sLWdlbi5oOjIyOmludCBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMjMtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuLS1cXG5uZXQvcHNwL3BzcC5oPTIxPXZvaWQgcHNwX25sX25vdGlmeV9kZXYoc3RydWN0IHBzcF9kZXYgKnBzZCwgdTMyIGNtZCk7XFxubmV0L3BzcC9wc3AuaC0yMi1cXG5uZXQvcHNwL3BzcC5oOjIzOnN0cnVjdCBwc3BfYXNzb2MgKnBzcF9hc3NvY19jcmVhdGUoc3RydWN0IHBzcF9kZXYgKnBzZCk7XFxubmV0L3BzcC9wc3AuaC0yNC1zdHJ1Y3QgcHNwX2RldiAqcHNwX2Rldl9nZXRfZm9yX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvcHNwL3BzcC5oOjI1OnZvaWQgcHNwX2Rldl90eF9rZXlfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XFxubmV0L3BzcC9wc3AuaDoyNjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbm5ldC9wc3AvcHNwLmgtMjctXFx0XFx0XFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4tLVxcbm5ldC9wc3AvcHNwLmg9Mjk9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxuLS1cXG5uZXQvcHNwL3BzcC5oLTMxLVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvcHNwL3BzcC5oOjMyOnZvaWQgcHNwX2Fzc29jc19rZXlfcm90YXRlZChzdHJ1Y3QgcHNwX2RldiAqcHNkKTtcXG5uZXQvcHNwL3BzcC5oLTMzLVxcbi0tXFxubmV0L3BzcC9wc3BfbWFpbi5jPTEzMT12b2lkIHBzcF9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgcHNwX2RldiAqcHNkKVxcbm5ldC9wc3AvcHNwX21haW4uYy0xMzIte1xcbm5ldC9wc3AvcHNwX21haW4uYzoxMzM6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5LCAqZW50cnlfdG1wO1xcbm5ldC9wc3AvcHNwX21haW4uYzoxMzQ6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqbmV4dDtcXG5uZXQvcHNwL3BzcF9tYWluLmMtMTM1LVxcbi0tXFxubmV0L3BzcC9wc3BfbWFpbi5jPTQwOD1zdGF0aWMgdm9pZCBwc3BfZGV2X2Rpc2Fzc29jX29uZShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9wc3AvcHNwX21haW4uYy00MDkte1xcbm5ldC9wc3AvcHNwX21haW4uYzo0MTA6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xcbm5ldC9wc3AvcHNwX21haW4uYy00MTEtXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTU0PXBzcF9ubF9tdWx0aWNhc3RfcGVyX25zKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHVuc2lnbmVkIGludCBncm91cCxcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTkte1xcbm5ldC9wc3AvcHNwX25sLmM6NjA6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xcbm5ldC9wc3AvcHNwX25sLmMtNjEtXFx0c3RydWN0IHhhcnJheSBzZW50X25ldHM7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTIzMD1ib29sIHBzcF9oYXNfYXNzb2NfZGV2X2luX25zKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvcHNwL3BzcF9ubC5jLTIzMS17XFxubmV0L3BzcC9wc3BfbmwuYzoyMzI6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xcbm5ldC9wc3AvcHNwX25sLmMtMjMzLVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYz0yNDI9c3RhdGljIGludCBwc3BfbmxfZmlsbF9hc3NvY19kZXZfbGlzdChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3Qgc2tfYnVmZiAqcnNwLFxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy0yNDUte1xcbm5ldC9wc3AvcHNwX25sLmM6MjQ2OlxcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeTtcXG5uZXQvcHNwL3BzcF9ubC5jLTI0Ny1cXHRzdHJ1Y3QgbmV0ICpkZXZfbmV0X25zO1xcbi0tXFxubmV0L3BzcC9wc3BfbmwuYz00NDc9aW50IHBzcF9ubF9rZXlfcm90YXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNDgyLVxcbm5ldC9wc3AvcHNwX25sLmM6NDgzOlxcdHBzcF9hc3NvY3Nfa2V5X3JvdGF0ZWQocHNkKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTQ4NC1cXHRwc2QtXFx1MDAzZXN0YXRzLnJvdGF0aW9ucysrO1xcbi0tXFxubmV0L3BzcC9wc3BfbmwuYz00OTk9aW50IHBzcF9ubF9kZXZfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy01MDEtXFx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbm5ldC9wc3AvcHNwX25sLmM6NTAyOlxcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICpwc3BfYXNzb2NfZGV2O1xcbm5ldC9wc3AvcHNwX25sLmMtNTAzLVxcdHN0cnVjdCBuZXRfZGV2aWNlICphc3NvY19kZXY7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTUxOC1cXG5uZXQvcHNwL3BzcF9ubC5jOjUxOTpcXHRwc3BfYXNzb2NfZGV2ID0ga3phbGxvY19vYmooKnBzcF9hc3NvY19kZXYpO1xcbm5ldC9wc3AvcHNwX25sLmM6NTIwOlxcdGlmICghcHNwX2Fzc29jX2Rldikge1xcbm5ldC9wc3AvcHNwX25sLmMtNTIxLVxcdFxcdGVyciA9IC1FTk9NRU07XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTUyNi1cXHRhc3NvY19kZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KG5ldCwgYXNzb2NfaWZpbmRleCxcXG5uZXQvcHNwL3BzcF9ubC5jOjUyNzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cHNwX2Fzc29jX2Rldi1cXHUwMDNlZGV2X3RyYWNrZXIsXFxubmV0L3BzcC9wc3BfbmwuYy01MjgtXFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTU0My1cXG5uZXQvcHNwL3BzcF9ubC5jOjU0NDpcXHRwc3BfYXNzb2NfZGV2LVxcdTAwM2Vhc3NvY19kZXYgPSBhc3NvY19kZXY7XFxubmV0L3BzcC9wc3BfbmwuYy01NDUtXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTU2My1cXG5uZXQvcHNwL3BzcF9ubC5jOjU2NDpcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwc3BfYXNzb2NfZGV2LVxcdTAwM2VkZXZfbGlzdCwgXFx1MDAyNnBzZC1cXHUwMDNlYXNzb2NfZGV2X2xpc3QpO1xcbm5ldC9wc3AvcHNwX25sLmMtNTY1LVxcdHBzZC1cXHUwMDNlYXNzb2NfZGV2X2NudCsrO1xcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy01NzUtZXJyX3B1dF9kZXY6XFxubmV0L3BzcC9wc3BfbmwuYzo1NzY6XFx0bmV0ZGV2X3B1dChhc3NvY19kZXYsIFxcdTAwMjZwc3BfYXNzb2NfZGV2LVxcdTAwM2VkZXZfdHJhY2tlcik7XFxubmV0L3BzcC9wc3BfbmwuYy01NzctZXJyX2ZyZWVfYXNzb2M6XFxubmV0L3BzcC9wc3BfbmwuYzo1Nzg6XFx0a2ZyZWUocHNwX2Fzc29jX2Rldik7XFxubmV0L3BzcC9wc3BfbmwuYy01NzktZXJyX3B1dF9uZXQ6XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTU4NT1pbnQgcHNwX25sX2Rldl9kaXNhc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3BzcC9wc3BfbmwuYy01ODYte1xcbm5ldC9wc3AvcHNwX25sLmM6NTg3OlxcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeSwgKmZvdW5kID0gTlVMTDtcXG5uZXQvcHNwL3BzcF9ubC5jLTU4OC1cXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTYzOC1cXG5uZXQvcHNwL3BzcF9ubC5jOjYzOTppbnQgcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkKGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxcbm5ldC9wc3AvcHNwX25sLmMtNjQwLVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTc3MD1pbnQgcHNwX25sX3J4X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNzc0LVxcdHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCBrZXk7XFxubmV0L3BzcC9wc3BfbmwuYzo3NzU6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbm5ldC9wc3AvcHNwX25sLmMtNzc2LVxcdHN0cnVjdCBza19idWZmICpyc3A7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTc5Mi1cXG5uZXQvcHNwL3BzcF9ubC5jOjc5MzpcXHRwYXMgPSBwc3BfYXNzb2NfY3JlYXRlKHBzZCk7XFxubmV0L3BzcC9wc3BfbmwuYy03OTQtXFx0aWYgKCFwYXMpIHtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtODE0LVxcdH1cXG5uZXQvcHNwL3BzcF9ubC5jOjgxNTpcXHRwc3BfYXNzb2NfcHV0KHBhcyk7XFxubmV0L3BzcC9wc3BfbmwuYy04MTYtXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTgxOS1lcnJfZnJlZV9wYXM6XFxubmV0L3BzcC9wc3BfbmwuYzo4MjA6XFx0cHNwX2Fzc29jX3B1dChwYXMpO1xcbm5ldC9wc3AvcHNwX25sLmMtODIxLWVycl9mcmVlX3JzcDpcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0zMD1wc3BfdmFsaWRhdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3BzcC9wc3Bfc29jay5jLTMxLXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MzI6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0zMy1cXHRib29sIGdvb2Q7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtNDYtXFxubmV0L3BzcC9wc3Bfc29jay5jOjQ3OnN0cnVjdCBwc3BfYXNzb2MgKnBzcF9hc3NvY19jcmVhdGUoc3RydWN0IHBzcF9kZXYgKnBzZClcXG5uZXQvcHNwL3BzcF9zb2NrLmMtNDgte1xcbm5ldC9wc3AvcHNwX3NvY2suYzo0OTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxubmV0L3BzcC9wc3Bfc29jay5jLTUwLVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTY4LVxcbm5ldC9wc3AvcHNwX3NvY2suYzo2OTpzdGF0aWMgc3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2R1bW15KHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtNzAte1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTc5LVxcbm5ldC9wc3AvcHNwX3NvY2suYzo4MDpzdGF0aWMgaW50IHBzcF9kZXZfdHhfa2V5X2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3Bfc29jay5jLTgxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy04NS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6ODY6dm9pZCBwc3BfZGV2X3R4X2tleV9kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbm5ldC9wc3AvcHNwX3NvY2suYy04Ny17XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtOTItXFxubmV0L3BzcC9wc3Bfc29jay5jOjkzOnN0YXRpYyB2b2lkIHBzcF9hc3NvY19mcmVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtOTQte1xcbm5ldC9wc3AvcHNwX3NvY2suYzo5NTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBzcF9hc3NvYywgd29yayk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTk2LVxcdHN0cnVjdCBwc3BfZGV2ICpwc2QgPSBwYXMtXFx1MDAzZXBzZDtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMDUtXFxubmV0L3BzcC9wc3Bfc29jay5jOjEwNjpzdGF0aWMgdm9pZCBwc3BfYXNzb2NfZnJlZV9xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxubmV0L3BzcC9wc3Bfc29jay5jLTEwNy17XFxubmV0L3BzcC9wc3Bfc29jay5jOjEwODpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHBzcF9hc3NvYywgcmN1KTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA5LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMTA6XFx0SU5JVF9XT1JLKFxcdTAwMjZwYXMtXFx1MDAzZXdvcmssIHBzcF9hc3NvY19mcmVlKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTExLVxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnBhcy1cXHUwMDNld29yayk7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTE0LS8qKlxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMTU6ICogcHNwX2Fzc29jX3B1dCgpIC0gcmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBhIFBTUCBhc3NvY2lhdGlvblxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTYtICogQHBhczogYXNzb2NpYXRpb24gdG8gcmVsZWFzZVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTctICovXFxubmV0L3BzcC9wc3Bfc29jay5jOjExODp2b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTkte1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjAtXFx0aWYgKHBhcyBcXHUwMDI2XFx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnBhcy1cXHUwMDNlcmVmY250KSlcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTIxOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZwYXMtXFx1MDAzZXJjdSwgcHNwX2Fzc29jX2ZyZWVfcXVldWUpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjItfVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTEyND12b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI2OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXFx1MDAzZXBzcF9hc3NvYywgMSk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTEyNy1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI4OlxcdHJjdV9hc3NpZ25fcG9pbnRlcihzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI5OlxcdHBzcF9hc3NvY19wdXQocGFzKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMwLX1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMxLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMzI6aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMzLVxcdFxcdFxcdCAgc3RydWN0IHBzcF9rZXlfcGFyc2VkICprZXksXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTQ4LVxcdHJlZmNvdW50X2luYyhcXHUwMDI2cGFzLVxcdTAwM2VyZWZjbnQpO1xcbm5ldC9wc3AvcHNwX3NvY2suYzoxNDk6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTE1MC1cXHRlcnIgPSAwO1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTE1Ny1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTU4OnN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTU5LXtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0xNzc9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTgxLVxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzaztcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTgyOlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcywgKmR1bW15O1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xODMtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yMTktXFx0ICovXFxubmV0L3BzcC9wc3Bfc29jay5jOjIyMDpcXHRkdW1teSA9IHBzcF9hc3NvY19kdW1teShwYXMpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yMjEtXFx0aWYgKCFkdW1teSkge1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTI0OC1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjQ5OnZvaWQgcHNwX2Fzc29jc19rZXlfcm90YXRlZChzdHJ1Y3QgcHNwX2RldiAqcHNkKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yNTAte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoyNTE6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqbmV4dDtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjUyLVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTI2Nj12b2lkIHBzcF90d3NrX2luaXQoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjY3LXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjY4OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI2OS1cXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzEtXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZwYXMtXFx1MDAzZXJlZmNudCk7XFxubmV0L3BzcC9wc3Bfc29jay5jOjI3MjpcXHRyY3VfYXNzaWduX3BvaW50ZXIodHctXFx1MDAzZXBzcF9hc3NvYywgcGFzKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjczLVxcdHR3LVxcdTAwM2V0d192YWxpZGF0ZV94bWl0X3NrYiA9IHBzcF92YWxpZGF0ZV94bWl0O1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTI3Nj12b2lkIHBzcF90d3NrX2Fzc29jX2ZyZWUoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcpXFxubmV0L3BzcC9wc3Bfc29jay5jLTI3Ny17XFxubmV0L3BzcC9wc3Bfc29jay5jOjI3ODpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHR3LVxcdTAwM2Vwc3BfYXNzb2MsIDEpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzktXFxubmV0L3BzcC9wc3Bfc29jay5jOjI4MDpcXHRyY3VfYXNzaWduX3BvaW50ZXIodHctXFx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XFxubmV0L3BzcC9wc3Bfc29jay5jOjI4MTpcXHRwc3BfYXNzb2NfcHV0KHBhcyk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI4Mi19XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9Mjg0PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yODUte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoyODY6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yODctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NjA2PWRlZiBfY2hlY2tfYXNzb2NfbGlzdChjZmcsIHBzcF9kZXZfaWQsIGlmaW5kZXgsIG5zaWQ9Tm9uZSk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjIzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2MjQ6ZGVmIF9kYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjI1LSAgICBcXFwiXFxcIlxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02NTk9ZGVmIF9nZXRfcHNwX3Zlcl9pcDZfdmFyaWFudHMoKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjQtQGtzZnRfdmFyaWFudHMoX2dldF9wc3BfdmVyX2lwNl92YXJpYW50cygpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2NjU6ZGVmIGRhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jKGNmZywgdmVyc2lvbiwgaXB2ZXIpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjYtICAgIFxcXCJcXFwiXFxcIlRlc3QgUFNQIGRhdGEgc2VuZCB2aWEgbmV0a2l0IHdpdGggZGV2LWFzc29jLlxcXCJcXFwiXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjctICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2Njg6ICAgIF9kYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9Njk4PWRlZiBfZGV2X2NoYW5nZV9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0KGNmZyk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNzI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo3MjY6ZGVmIF9wc3BfZGV2X2dldF9jaGVja19uZXRraXRfcHNwX2Fzc29jKGNmZyk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTcyNy0gICAgXFxcIlxcXCJcXFwiIENoZWNrIHBzcCBkZXYtZ2V0IG91dHB1dCB3aXRoIG5ldGtpdCBpbnRlcmZhY2UgYXNzb2NpYXRlZCB3aXRoIFBTUCBkZXYgXFxcIlxcXCJcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9OTQxPWRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODAtICAgICAgICAgICAgICAgICAgICAgICAgX2Fzc29jX2NoZWNrX2xpc3QsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5Ojk4MTogICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTgyLSAgICAgICAgICAgICAgICAgICAgICAgIF9rZXlfcm90YXRpb25fbm90aWZ5X211bHRpX25zX25ldGtpdCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTgzLSAgICAgICAgICAgICAgICAgICAgICAgIF9kZXZfY2hhbmdlX25vdGlmeV9tdWx0aV9uc19uZXRraXQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5Ojk4NDogICAgICAgICAgICAgICAgICAgICAgICBfcHNwX2Rldl9nZXRfY2hlY2tfbmV0a2l0X3BzcF9hc3NvYyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTg1LSAgICAgICAgICAgICAgICAgICAgICAgIF9kZXZfYXNzb2Nfbm9fbnNpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MzE6MjEuODcyMjg4Nzk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3MTA1MDI0NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBgc2tfY2xvbmVfbG9ja2AgaW4gYG5ldC9jb3JlL3NvY2suY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgYHNrX2Nsb25lX2xvY2tgIG9wZXJhdGVzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgd2l0aGluIGBuZXQvY29yZS9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI0OTAgdG8gMjUyMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgc29ja2V0IGNsb25pbmcgZnVuY3Rpb25hbGl0eSByZXNpZGVzLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCB0aGUgbG9ja2luZyBzdHJhdGVneSBoZXJlLCB0aGUgY29udGVudGlvbiBwb2ludHMsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBhZGRyZXNzZWQgb3IgaW50cm9kdWNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgbmV0d29yayBzb2NrZXRzIGFyZSBkdXBsaWNhdGVkIGFuZCBob3cgY29uY3VycmVudCBhY2Nlc3MgaXMgbWFuYWdlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbG9jayBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0aGF0IG1pZ2h0IGFyaXNlIGluIGhpZ2gtbG9hZCBzY2VuYXJpb3MuIEkgYmV0IHRoZSBjb21tZW50cyBhcm91bmQgdGhhdCBzZWN0aW9uIGFyZSB2ZXJ5IGVubGlnaHRlbmluZywgbGV0J3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIGhhcyB0byBvZmZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzozMjozOC45NzczMTY5NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDYwOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfa2Vybl9zb2NrKVxcbjI0NjE6XFx0XFx0XFx0bG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUoXFx1MDAyNnNrLVxcdTAwM2Vza19jYWxsYmFja19sb2NrLFxcbjI0NjI6XFx0XFx0XFx0XFx0YWZfa2Vybl9jYWxsYmFja19rZXlzICsgc2stXFx1MDAzZXNrX2ZhbWlseSxcXG4yNDYzOlxcdFxcdFxcdFxcdGFmX2ZhbWlseV9rZXJuX2Nsb2NrX2tleV9zdHJpbmdzW3NrLVxcdTAwM2Vza19mYW1pbHldKTtcXG4yNDY0OlxcdFxcdGVsc2VcXG4yNDY1OlxcdFxcdFxcdGxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayxcXG4yNDY2OlxcdFxcdFxcdFxcdGFmX2NhbGxiYWNrX2tleXMgKyBzay1cXHUwMDNlc2tfZmFtaWx5LFxcbjI0Njc6XFx0XFx0XFx0XFx0YWZfZmFtaWx5X2Nsb2NrX2tleV9zdHJpbmdzW3NrLVxcdTAwM2Vza19mYW1pbHldKTtcXG4yNDY4OlxcdH1cXG4yNDY5OlxcdFxcbjI0NzA6XFx0LyoqXFxuMjQ3MTpcXHQgKiBza19jbG9uZSAtIGNsb25lIGEgc29ja2V0XFxuMjQ3MjpcXHQgKiBAc2s6IHRoZSBzb2NrZXQgdG8gY2xvbmVcXG4yNDczOlxcdCAqIEBwcmlvcml0eTogZm9yIGFsbG9jYXRpb24gKCVHRlBfS0VSTkVMLCAlR0ZQX0FUT01JQywgZXRjKVxcbjI0NzQ6XFx0ICogQGxvY2s6IGlmIHRydWUsIGxvY2sgdGhlIGNsb25lZCBza1xcbjI0NzU6XFx0ICpcXG4yNDc2OlxcdCAqIElmIEBsb2NrIGlzIHRydWUsIHRoZSBjbG9uZSBpcyBsb2NrZWQgYnkgYmhfbG9ja19zb2NrKCksIGFuZFxcbjI0Nzc6XFx0ICogY2FsbGVyIG11c3QgdW5sb2NrIHNvY2tldCBldmVuIGluIGVycm9yIHBhdGggYnkgYmhfdW5sb2NrX3NvY2soKS5cXG4yNDc4OlxcdCAqL1xcbjI0Nzk6XFx0c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuMjQ4MDpcXHRcXHRcXHQgICAgICBib29sIGxvY2spXFxuMjQ4MTpcXHR7XFxuMjQ4MjpcXHRcXHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbjI0ODM6XFx0XFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xcbjI0ODQ6XFx0XFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcXG4yNDg1OlxcdFxcdHN0cnVjdCBzb2NrICpuZXdzaztcXG4yNDg2OlxcdFxcbjI0ODc6XFx0XFx0bmV3c2sgPSBza19wcm90X2FsbG9jKHByb3QsIHByaW9yaXR5LCBzay1cXHUwMDNlc2tfZmFtaWx5KTtcXG4yNDg4OlxcdFxcdGlmICghbmV3c2spXFxuMjQ4OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNDkwOlxcdFxcbjI0OTE6XFx0XFx0c29ja19jb3B5KG5ld3NrLCBzayk7XFxuMjQ5MjpcXHRcXG4yNDkzOlxcdFxcdG5ld3NrLVxcdTAwM2Vza19wcm90X2NyZWF0b3IgPSBwcm90O1xcbjI0OTQ6XFx0I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbjI0OTU6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xcbjI0OTY6XFx0I2VuZGlmXFxuMjQ5NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuMjQ5ODpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xcbjI0OTk6XFx0I2VuZGlmXFxuMjUwMDpcXHRcXG4yNTAxOlxcdFxcdC8qIFNBTklUWSAqL1xcbjI1MDI6XFx0XFx0aWYgKGxpa2VseShuZXdzay1cXHUwMDNlc2tfbmV0X3JlZmNudCkpIHtcXG4yNTAzOlxcdFxcdFxcdGdldF9uZXRfdHJhY2soc29ja19uZXQobmV3c2spLCBcXHUwMDI2bmV3c2stXFx1MDAzZW5zX3RyYWNrZXIsIHByaW9yaXR5KTtcXG4yNTA0OlxcdFxcdFxcdHNvY2tfaW51c2VfYWRkKHNvY2tfbmV0KG5ld3NrKSwgMSk7XFxuMjUwNTpcXHRcXHR9IGVsc2Uge1xcbjI1MDY6XFx0XFx0XFx0LyogS2VybmVsIHNvY2tldHMgYXJlIG5vdCBlbGV2YXRpbmcgdGhlIHN0cnVjdCBuZXQgcmVmY291bnQuXFxuMjUwNzpcXHRcXHRcXHQgKiBJbnN0ZWFkLCB1c2UgYSB0cmFja2VyIHRvIG1vcmUgZWFzaWx5IGRldGVjdCBpZiBhIGxheWVyXFxuMjUwODpcXHRcXHRcXHQgKiBpcyBub3QgcHJvcGVybHkgZGlzbWFudGxpbmcgaXRzIGtlcm5lbCBzb2NrZXRzIGF0IG5ldG5zXFxuMjUwOTpcXHRcXHRcXHQgKiBkZXN0cm95IHRpbWUuXFxuMjUxMDpcXHRcXHRcXHQgKi9cXG4yNTExOlxcdFxcdFxcdG5ldF9wYXNzaXZlX2luYyhzb2NrX25ldChuZXdzaykpO1xcbjI1MTI6XFx0XFx0XFx0X19uZXRuc190cmFja2VyX2FsbG9jKHNvY2tfbmV0KG5ld3NrKSwgXFx1MDAyNm5ld3NrLVxcdTAwM2Vuc190cmFja2VyLFxcbjI1MTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgZmFsc2UsIHByaW9yaXR5KTtcXG4yNTE0OlxcdFxcdH1cXG4yNTE1OlxcdFxcbjI1MTY6XFx0XFx0c2tfbm9kZV9pbml0KFxcdTAwMjZuZXdzay1cXHUwMDNlc2tfbm9kZSk7XFxuMjUxNzpcXHRcXHRzb2NrX2xvY2tfaW5pdChuZXdzayk7XFxuMjUxODpcXHRcXG4yNTE5OlxcdFxcdGlmIChsb2NrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzozMjozOC45Nzc0ODY5NjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzMjY4MzMxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc2tfY2xvbmVgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBza19jbG9uZWAgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBzdGVtIGZyb20gaG93IHNvY2tldCBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgZHVyaW5nIGNsb25pbmcuIFNwZWNpZmljYWxseSwgYHNvY2tfY29weShuZXdzaywgc2spYCBpcyBqdXN0IGEgYG1lbWNweWAuIFRoaXMgbWVhbnMgd2hlbiB3ZSBjbG9uZSBhIHNvY2tldCwgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2Agc2ltcGx5IGdldHMgYSBkaXJlY3QgY29weSBvZiBgc2stXHUwMDNlcHNwX2Fzc29jYCwgd2l0aG91dCBhbnkgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIHJlZCBmbGFnLiBUaGluayBhYm91dCBpdDogd2hlbiBjbG9uaW5nIGEgbGlzdGVuaW5nIHNvY2tldCB0byBhIGNoaWxkIHNvY2tldCwgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgaXMgcG9pbnRpbmcgdG8gdGhlIHNhbWUgbWVtb3J5IGFzIHRoZSBwYXJlbnQncyEgVGhpcyBzaGFyZWQgb3duZXJzaGlwLCB3aXRob3V0IHByb3BlciB0cmFja2luZywgaXMgc2NyZWFtaW5nIHBvdGVudGlhbCBmb3IgY2hhb3MuXG5cblRoZSBwcm9ibGVtPyBFaXRoZXIgc29ja2V0LCB0aGUgcGFyZW50IG9yIHRoZSBjaGlsZCwgY291bGQgZnJlZSB0aGUgYHBzcF9hc3NvY2Agb3IgZGVzdHJveSBpdC4gSWYgZWl0aGVyIG9uZSBkb2VzIGEgYHBzcF9za19hc3NvY19mcmVlKHNrKWAgb3IgZGVyZWZlcmVuY2VzIGl0LCBpdCBjb3VsZCBsZWFkIHRvIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSwgYSBkb3VibGUtZnJlZSwgb3IgZXZlbiBhbiB1bmRlcmZsb3cgb2YgdGhlIHJlZmVyZW5jZSBjb3VudC4gTmlnaHRtYXJlIHNjZW5hcmlvIVxuXG5UaGUgZml4LCBob3dldmVyLCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBTZXR0aW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7YCBleHBsaWNpdGx5IGNsZWFycyB0aGUgcG9pbnRlciBpbiBgbmV3c2tgLiBUaGlzIGlzIHRoZSB2aXRhbCBzdGVwOiBpdCBicmVha3MgdGhlIGxpbmssIGVuc3VyaW5nIHRoZSBjaGlsZCBzb2NrZXQgZG9lc24ndCBpbmhlcml0IHRoZSBwYXJlbnQncyBgcHNwX2Fzc29jYCB3aXRob3V0IHRoZSByZWZlcmVuY2UgY291bnRpbmcgb3IgYW55IHNoYXJlZCBtZW1vcnkuIE5vdywgdGhhdCBpcyBhIGNsZWFuIHNlcGFyYXRpb24uXG5cbk5vdywgbGV0J3MgcGl2b3QgdG8gbWVtb3J5IHNhZmV0eTogSSBuZWVkIHRvIHJ1bGUgb3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5JbiBgc2tfY2xvbmVgIHdlIGhhdmUgYHNvY2tfY29weShuZXdzaywgc2spYCBmb2xsb3dlZCBieSBgUkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpYC4gSSBkb24ndCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSW5pdGlhbGx5LCBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCBpcyBjb3BpZWQgZnJvbSB0aGUgc291cmNlLCB3aGljaCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIFRoZW4sIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIGBOVUxMYC4gVGhpcyBpcyBhIHNhZmUgc2VxdWVuY2UuIFRoZSByb290IGNhdXNlIGlzIGRlZmluaXRlbHkgdGhlIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGJ1Zywgd2hlcmUgdGhlIHNvY2tldCBjbG9uaW5nIGNvcGllZCBhIHBvaW50ZXIgd2l0aG91dCBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IG9yIGNsZWFyaW5nIGl0LiBUaGlzIGlzIHdoeSBLQVNBTiBjYXRjaGVzIHRoZXNlIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSBidWdzLlxuXG5CdXQsIEkgYW0gbm90IHJlYWR5IHRvIGJlIGNvbXBsZXRlbHkgc2F0aXNmaWVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgbGVha3MuIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8gbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgaW52b2x2ZWQ/IExldCdzIGdpdmUgYHBzcF9hc3NvY2AgYSB0aG9yb3VnaCBpbnNwZWN0aW9uIHdpdGggYSBLTVNBTi1saWtlIGFwcHJvYWNoLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIHRvIGJlIHN1cmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTExLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MzM6NDAuMzA0MzIzNDY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5NjE4MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzcF9za19hc3NvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MzM9dW5zaWduZWQgaW50IHBzcF9rZXlfc2l6ZSh1MzIgdmVyc2lvbik7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM0OnZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzUtdm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTM3PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzgtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDAte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTQ1PXBzcF9lbnF1ZXVlX3NldF9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQ4LVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0OTpcXHRwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC01MC1cXHRpZiAocGFzIFxcdTAwMjZcXHUwMDI2IHBhcy1cXHUwMDNldHguc3BpKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTExNj1wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE3LXtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTE4OlxcdHJldHVybiBfX3BzcF9za19yeF9wb2xpY3lfY2hlY2soc2tiLCBwc3Bfc2tfYXNzb2Moc2spKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE5LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTctI2Vsc2VcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spIHsgfVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTktc3RhdGljIGlubGluZSB2b2lkXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTYzPXBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikgeyB9XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2NC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTY1OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY2LXtcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz0xNDA9dm9pZCBpbmV0X3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTE2Ni1cXHRkc3RfcmVsZWFzZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrLVxcdTAwM2Vza19yeF9kc3QsIDEpKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTY3OlxcdHBzcF9za19hc3NvY19mcmVlKHNrKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY4LX1cXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0xMTg9dm9pZCBwc3BfYXNzb2NfcHV0KHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjMtXFxubmV0L3BzcC9wc3Bfc29jay5jOjEyNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0xMzI9aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDEtXFxubmV0L3BzcC9wc3Bfc29jay5jOjE0MjpcXHRpZiAocHNwX3NrX2Fzc29jKHNrKSkge1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDMtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiU29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVxcXCIpO1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTE3Nz1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xODYtXFxubmV0L3BzcC9wc3Bfc29jay5jOjE4NzpcXHRwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xODgtXFx0aWYgKCFwYXMpIHtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0yNjY9dm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3BzcC9wc3Bfc29jay5jLTI2Ny17XFxubmV0L3BzcC9wc3Bfc29jay5jOjI2ODpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjMzOjQyLjA4Mzk0NjIzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzA3ODgwODE4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU29ja2V0IENsb25pbmcgQnVnIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHNvY2tldCBjbG9uaW5nIG1lY2hhbmlzbS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiBob3cgYHBzcF9hc3NvY2AgKGEgc2VjdXJpdHkgYXNzb2NpYXRpb24gcmVsYXRlZCBzdHJ1Y3R1cmUpIGlzIGhhbmRsZWQgd2hlbiBhIHNvY2tldCAoYHNrYCkgaXMgY2xvbmVkIHRvIGNyZWF0ZSBhIG5ldyBzb2NrZXQgKGBuZXdza2ApLlxuXG5Fc3NlbnRpYWxseSwgYHNvY2tfY29weWAgd2FzIGNvcHlpbmcgdGhlIGBzay1cdTAwM2Vwc3BfYXNzb2NgIHBvaW50ZXIgdG8gYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2Agd2l0aG91dCBjb3JyZWN0bHkgbWFuYWdpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgdW5kZXJseWluZyBgcHNwX2Fzc29jYCBzdHJ1Y3R1cmUuIFRoaXMgbWVhbnQgYm90aCBgc2tgIGFuZCBgbmV3c2tgIHdlcmUgcG9pbnRpbmcgdG8gdGhlIHNhbWUgYHBzcF9hc3NvY2Agd2l0aG91dCBwcm9wZXJseSBpbmRpY2F0aW5nIHNoYXJlZCBvd25lcnNoaXAgdGhyb3VnaCBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudGVyLiBMYXRlciwgd2hlbiBlaXRoZXIgdGhlIG9yaWdpbmFsIG9yIHRoZSBjbG9uZWQgc29ja2V0IHdhcyBkZXN0cm95ZWQgdmlhIGBpbmV0X3NvY2tfZGVzdHJ1Y3RgIGFuZCBgcHNwX3NrX2Fzc29jX2ZyZWVgLCB0aGUgYXNzb2NpYXRlZCBgcHNwX2Fzc29jYCBzdHJ1Y3Qgd291bGQgaGF2ZSBgcHNwX2Fzc29jX3B1dGAgY2FsbGVkLCB3aGljaCBkZWNyZW1lbnRlZCB0aGUgcmVmZXJlbmNlIGNvdW50LiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZiBib3RoIHNvY2tldHMgd2VyZSBldmVudHVhbGx5IGRlc3Ryb3llZCwgbGVhZGluZyB0byBwb3RlbnRpYWxseSBjb3JydXB0ZWQgc3RhdGUuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGluaXRpYWxpemluZyBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCB0byBgTlVMTGAgdXNpbmcgYFJDVV9JTklUX1BPSU5URVJgICpkdXJpbmcqIHRoZSBjbG9uZSBvcGVyYXRpb24uIFRoaXMgcHJldmVudHMgYG5ld3NrYCBmcm9tIGluaGVyaXRpbmcgdGhlIHBhcmVudCdzIGFzc29jaWF0aW9uIGF0IGFsbC5cblxuTm93LCBsZXQncyBjb25zaWRlciB3aGV0aGVyIHRoaXMgY2hhbmdlLCBhbmQgdGhlIGJ1ZyBpdCBmaXhlcywgd2FycmFudHMgYSBgTmVlZHNLTVNBTiA9IHRydWVgIGZsYWcuIEkgaGF2ZSB0byBhbmFseXplIGlmIHRoaXMgaW50cm9kdWNlcyBvciBlbGltaW5hdGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3cml0ZXMgb3IgbWVtb3J5LXJlbGF0ZWQgZmxhd3MuXG5cbkkndmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoZSBjb2RlIGFuZCBJIGNhbiBkZWZpbml0aXZlbHkgc2F5IHRoYXQgdGhpcyBpc3N1ZSBpcyAqbm90KiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBJdCdzIHN0cmljdGx5IGFib3V0IG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgaW1wcm9wZXIgYWxpYXNpbmcgYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZS91c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgc3RhbmRhcmQgS01TQU4gY2hlY2tzOlxuXG4xLiAgSXMgdGhlcmUga2VybmVsIGRhdGEgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8uXG4yLiAgSXMgdGhlcmUgY29uZGl0aW9uYWwgbG9naWMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uXG4zLiAgQXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRoYXQgYXJlIHRoZW4gcmVhZCBsYXRlcj8gTm8uXG40LiAgSXMgdGhlIHVzZSBvZiBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBldGMuLCBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm8uXG5cblRoaXMgYnVnIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiByZWZlcmVuY2UgY291bnRpbmcgYW5kIHBvaW50ZXIgbWFuYWdlbWVudC4gS0FTQU4gaXMgYWxyZWFkeSB0aGUgcGVyZmVjdCB0b29sIGZvciB0cmFja2luZyB0aGVzZSBzb3J0cyBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoZGFuZ2xpbmcgcG9pbnRlcnMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSkgYnkgZW5zdXJpbmcgbWVtb3J5IGlzIHZhbGlkLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLCBhbmQgSSdsbCBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MgYSBjbGVhciBjYXNlIG9mIEtBU0FOJ3Mgc3RyZW5ndGhzLCBub3QgS01TQU4ncy4gVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTIxLCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzozOTo1Mi44NzIwMzE1NDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza19jbG9uZSgpYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2NgIHRvIGBOVUxMYCB2aWEgYFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXBzcF9hc3NvYywgTlVMTClgLiBcXG5cXG5XaGVuIGEgc29ja2V0IGlzIGNsb25lZCwgYHNvY2tfY29weSgpYCBwZXJmb3JtcyBhIHNoYWxsb3cgY29weSBvZiB0aGUgc29ja2V0IHN0cnVjdHVyZSBmcm9tIHBhcmVudCB0byBjaGlsZC4gV2l0aG91dCBjbGVhcmluZyBgbmV3c2stXFx1MDAzZXBzcF9hc3NvY2AsIHRoZSBjbG9uZWQgc29ja2V0IGluaGVyaXRlZCB0aGUgcGFyZW50J3MgcG9pbnRlciB0byBgc3RydWN0IHBzcF9hc3NvY2Agd2l0aG91dCB0YWtpbmcgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnQuIFVwb24gZGVzdHJ1Y3Rpb24gb2YgdGhlIGNsb25lZCBzb2NrZXQgKGBwc3Bfc2tfYXNzb2NfZnJlZWApLCBgcHNwX2Fzc29jX3B1dCgpYCB3b3VsZCBiZSBjYWxsZWQsIGxlYWRpbmcgdG8gcmVmZXJlbmNlIHVuZGVyZmxvdywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGVycm9ycy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWRkcmVzc2luZyBvYmplY3QgbGlmZWN5Y2xlLCBwb2ludGVyIGFsaWFzaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyAod2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX2Nsb25lKClgIGluIGBuZXQvY29yZS9zb2NrLmNgIHRvIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgbmV3c2stXFx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIHZpYSBgUkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKWAuIFxcblxcbldoZW4gYSBzb2NrZXQgaXMgY2xvbmVkLCBgc29ja19jb3B5KClgIHBlcmZvcm1zIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzb2NrZXQgc3RydWN0dXJlIGZyb20gcGFyZW50IHRvIGNoaWxkLiBXaXRob3V0IGNsZWFyaW5nIGBuZXdzay1cXHUwMDNlcHNwX2Fzc29jYCwgdGhlIGNsb25lZCBzb2NrZXQgaW5oZXJpdGVkIHRoZSBwYXJlbnQncyBwb2ludGVyIHRvIGBzdHJ1Y3QgcHNwX2Fzc29jYCB3aXRob3V0IHRha2luZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudC4gVXBvbiBkZXN0cnVjdGlvbiBvZiB0aGUgY2xvbmVkIHNvY2tldCAoYHBzcF9za19hc3NvY19mcmVlYCksIGBwc3BfYXNzb2NfcHV0KClgIHdvdWxkIGJlIGNhbGxlZCwgbGVhZGluZyB0byByZWZlcmVuY2UgdW5kZXJmbG93LCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgZXJyb3JzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhZGRyZXNzaW5nIG9iamVjdCBsaWZlY3ljbGUsIHBvaW50ZXIgYWxpYXNpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzICh3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4pLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 17:09:17 +0000 UTC FinishedAt: 2026-08-29 17:39:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_PSP", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_PSP", "INET" ], "series_id": "274b1530-52de-430c-b5e9-dcf2bf0bf1af" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sk_clone", "psp_sock_assoc_set_rx", "psp_sock_assoc_set_tx", "psp_sk_assoc_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfY2xvbmUmIzM0OywKICAgICYjMzQ7cHNwX3NvY2tfYXNzb2Nfc2V0X3J4JiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF90eCYjMzQ7LAogICAgJiMzNDtwc3Bfc2tfYXNzb2NfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza19jbG9uZSgpYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIHZpYSBgUkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpYC4gXG5cbldoZW4gYSBzb2NrZXQgaXMgY2xvbmVkLCBgc29ja19jb3B5KClgIHBlcmZvcm1zIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzb2NrZXQgc3RydWN0dXJlIGZyb20gcGFyZW50IHRvIGNoaWxkLiBXaXRob3V0IGNsZWFyaW5nIGBuZXdzay1cdTAwM2Vwc3BfYXNzb2NgLCB0aGUgY2xvbmVkIHNvY2tldCBpbmhlcml0ZWQgdGhlIHBhcmVudCYjMzk7cyBwb2ludGVyIHRvIGBzdHJ1Y3QgcHNwX2Fzc29jYCB3aXRob3V0IHRha2luZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudC4gVXBvbiBkZXN0cnVjdGlvbiBvZiB0aGUgY2xvbmVkIHNvY2tldCAoYHBzcF9za19hc3NvY19mcmVlYCksIGBwc3BfYXNzb2NfcHV0KClgIHdvdWxkIGJlIGNhbGxlZCwgbGVhZGluZyB0byByZWZlcmVuY2UgdW5kZXJmbG93LCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgZXJyb3JzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWRkcmVzc2luZyBvYmplY3QgbGlmZWN5Y2xlLCBwb2ludGVyIGFsaWFzaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyAod2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgc29ja2V0JiMzOTtzIHBzcF9hc3NvYyBwb2ludGVyIGlzIGNsZWFyZWQgZHVyaW5nIHNrX2Nsb25lKCkgd2hlbiBJTkVUX1BTUCBpcyBlbmFibGVkLCBwcmV2ZW50aW5nIHRoZSBuZXdseSBjbG9uZWQgc29ja2V0IGZyb20gaW5oZXJpdGluZyB0aGUgcGFyZW50IHNvY2tldCYjMzk7cyBQU1AgYXNzb2NpYXRpb24gcG9pbnRlciB3aXRob3V0IGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50LiBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1mcmVlIGNvbmRpdGlvbnMgdXBvbiBzb2NrZXQgZGVzdHJ1Y3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYTVhODVlYmJhYzY5NzUyZTBhZmFmNmNhODg4YjUzYWE1NmYwNDlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTc6MjM6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCAxYWQ0MTkwNGRiMjViLi5mYTYwYjc0OTRjNTg2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0yNDk0LDYgJiM0MzsyNDk0LDkgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vza19icGZfc3RvcmFnZSwgTlVMTCk7XG4gI2VuZGlmXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbiYjNDM7XHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG4mIzQzOyNlbmRpZlxuIFxuIFx0LyogU0FOSVRZICovXG4gXHRpZiAobGlrZWx5KG5ld3NrLVx1MDAzZXNrX25ldF9yZWZjbnQpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2Nsb25lJiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF9yeCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfdHgmIzM0OywKICAgICYjMzQ7cHNwX3NrX2Fzc29jX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQmIzM5O3MgcHNwX2Fzc29jIHBvaW50ZXIgaXMgY2xlYXJlZCBkdXJpbmcgc2tfY2xvbmUoKSB3aGVuIElORVRfUFNQIGlzIGVuYWJsZWQsIHByZXZlbnRpbmcgdGhlIG5ld2x5IGNsb25lZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQgc29ja2V0JiMzOTtzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNhNWE4NWViYmFjNjk3NTJlMGFmYWY2Y2E4ODhiNTNhYTU2ZjA0OWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxNzoyMzoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCAxYWQ0MTkwNGRiMjViLi5mYTYwYjc0OTRjNTg2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jCkBAIC0yNDk0LDYgJiM0MzsyNDk0LDkgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksCiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiAJUkNVX0lOSVRfUE9JTlRFUihuZXdzay0mZ3Q7c2tfYnBmX3N0b3JhZ2UsIE5VTEwpOwogI2VuZGlmCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKQomIzQzOwlSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtwc3BfYXNzb2MsIE5VTEwpOwomIzQzOyNlbmRpZgogCiAJLyogU0FOSVRZICovCiAJaWYgKGxpa2VseShuZXdzay0mZ3Q7c2tfbmV0X3JlZmNudCkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MgoJCQkJCQkJb3V0cHV0OiA3MAoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbW1pdC4gVGhlIGluaXRpYWwgZm9jdXMgaXMgdGhlIGNoYW5nZSB3aXRoaW4gYG5ldC9jb3JlL3NvY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYHNrX2Nsb25lYCBmdW5jdGlvbi4gVGhlIHBhdGNoIGl0c2VsZiBpcyBzaW1wbGUsIGEgY29uZGl0aW9uYWwgaW5pdGlhbGl6YXRpb246CgpgYGBjCiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUCkKCVJDVV9JTklUX1BPSU5URVIobmV3c2stJmd0O3BzcF9hc3NvYywgTlVMTCk7CiNlbmRpZgpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCB1c2UgYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY29tbWFuZCB0byBwdWxsIHVwIGBuZXQvY29yZS9zb2NrLmNgIGFyb3VuZCBsaW5lIDI0OTQgdG8gc2VlIHdoYXQgc3Vycm91bmRzIHRoaXMgY29kZS4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGxpa2VseSBnaXZlIGluc2lnaHRzIGludG8gd2h5IHRoaXMgbGluZSBvZiBjb2RlIGV4aXN0cy4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYENPTkZJR19JTkVUX1BTUGAgYW5kIGBwc3BfYXNzb2NgLiBJIHdpbGwgc2VhcmNoIHRoZSBlbnRpcmUgdHJlZSBmb3IgYm90aCBvZiB0aGVzZSwgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIHVzaW5nIGBncmVwcGVyYCBvciBhIHNpbWlsYXIgdG9vbC4gVGhpcyBzaG91bGQgcGFpbnQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ4MDpcdFx0XHQgICAgICBib29sIGxvY2spXG4yNDgxOlx0e1xuMjQ4MjpcdFx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuMjQ4MzpcdFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xuMjQ4NDpcdFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcbjI0ODU6XHRcdHN0cnVjdCBzb2NrICpuZXdzaztcbjI0ODY6XHRcbjI0ODc6XHRcdG5ld3NrID0gc2tfcHJvdF9hbGxvYyhwcm90LCBwcmlvcml0eSwgc2stXHUwMDNlc2tfZmFtaWx5KTtcbjI0ODg6XHRcdGlmICghbmV3c2spXG4yNDg5Olx0XHRcdGdvdG8gb3V0O1xuMjQ5MDpcdFxuMjQ5MTpcdFx0c29ja19jb3B5KG5ld3NrLCBzayk7XG4yNDkyOlx0XG4yNDkzOlx0XHRuZXdzay1cdTAwM2Vza19wcm90X2NyZWF0b3IgPSBwcm90O1xuMjQ5NDpcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbjI0OTU6XHRcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xuMjQ5NjpcdCNlbmRpZlxuMjQ5NzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbjI0OTg6XHRcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbjI0OTk6XHQjZW5kaWZcbjI1MDA6XHRcbjI1MDE6XHRcdC8qIFNBTklUWSAqL1xuMjUwMjpcdFx0aWYgKGxpa2VseShuZXdzay1cdTAwM2Vza19uZXRfcmVmY250KSkge1xuMjUwMzpcdFx0XHRnZXRfbmV0X3RyYWNrKHNvY2tfbmV0KG5ld3NrKSwgXHUwMDI2bmV3c2stXHUwMDNlbnNfdHJhY2tlciwgcHJpb3JpdHkpO1xuMjUwNDpcdFx0XHRzb2NrX2ludXNlX2FkZChzb2NrX25ldChuZXdzayksIDEpO1xuMjUwNTpcdFx0fSBlbHNlIHtcbjI1MDY6XHRcdFx0LyogS2VybmVsIHNvY2tldHMgYXJlIG5vdCBlbGV2YXRpbmcgdGhlIHN0cnVjdCBuZXQgcmVmY291bnQuXG4yNTA3Olx0XHRcdCAqIEluc3RlYWQsIHVzZSBhIHRyYWNrZXIgdG8gbW9yZSBlYXNpbHkgZGV0ZWN0IGlmIGEgbGF5ZXJcbjI1MDg6XHRcdFx0ICogaXMgbm90IHByb3Blcmx5IGRpc21hbnRsaW5nIGl0cyBrZXJuZWwgc29ja2V0cyBhdCBuZXRuc1xuMjUwOTpcdFx0XHQgKiBkZXN0cm95IHRpbWUuXG4yNTEwOlx0XHRcdCAqL1xuMjUxMTpcdFx0XHRuZXRfcGFzc2l2ZV9pbmMoc29ja19uZXQobmV3c2spKTtcbjI1MTI6XHRcdFx0X19uZXRuc190cmFja2VyX2FsbG9jKHNvY2tfbmV0KG5ld3NrKSwgXHUwMDI2bmV3c2stXHUwMDNlbnNfdHJhY2tlcixcbjI1MTM6XHRcdFx0XHRcdCAgICAgIGZhbHNlLCBwcmlvcml0eSk7XG4yNTE0Olx0XHR9XG4yNTE1Olx0XG4yNTE2Olx0XHRza19ub2RlX2luaXQoXHUwMDI2bmV3c2stXHUwMDNlc2tfbm9kZSk7XG4yNTE3Olx0XHRzb2NrX2xvY2tfaW5pdChuZXdzayk7XG4yNTE4Olx0XG4yNTE5Olx0XHRpZiAobG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTkVUX1BTUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yMTA9Y29uZmlnIE1MWDVfRU5fUFNQXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMTEtXHRib29sIFwmIzM0O01lbGxhbm94IFRlY2hub2xvZ2llcyBzdXBwb3J0IGZvciBQU1AgY3J5cHRvZ3JhcGh5LW9mZmxvYWQgYWNjZWxlcmF0aW9uXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzoyMTI6XHRkZXBlbmRzIG9uIElORVRfUFNQXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0yMTMtXHRkZXBlbmRzIG9uIE1MWDVfQ09SRV9FTlxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZT0xOT1lbmRpZlxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTIwLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlOjIxOmlmbmVxICgkKENPTkZJR19JTkVUX1BTUCksKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTIyLW5ldGRldnNpbS1vYmpzICYjNDM7PSBwc3Aub1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NDktXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTEtaW50IG5zaW1fcHNwX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzg4LSNlbmRpZlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM5MC1cdHN0cnVjdCBwc3BfZGV2IF9fcmN1XHQqcHNwX2Rldjtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwNDM9ZW51bSBza2JfZXh0X2lkIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTgtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDYwLVx0U0tCX0VYVF9QU1AsXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODQtXHRzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXRcdCp0d190YjI7XG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaDo4NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ni1cdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcdCAgKnBzcF9hc3NvYztcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mjc9c3RhdGljIGlubGluZSB2b2lkICpwc3BfYXNzb2NfZHJ2X2RhdGEoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zMS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzMtdW5zaWduZWQgaW50IHBzcF9rZXlfc2l6ZSh1MzIgdmVyc2lvbik7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTQ2Ni0jZW5kaWZcbmluY2x1ZGUvbmV0L3NvY2suaDo0Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvc29jay5oLTQ2OC1cdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcdCpwc3BfYXNzb2M7XG4tLVxubmV0L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19VTklYKVx0XHQmIzQzOz0gdW5peC9cbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXHRcdCYjNDM7PSBwc3AvXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcdFx0XHRcdCYjNDM7PSBpcHY2L1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTUxNTA9c3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MTY1LSNlbmRpZlxubmV0L2NvcmUvc2tidWZmLmM6NTE2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5uZXQvY29yZS9za2J1ZmYuYy01MTY3LVx0W1NLQl9FWFRfUFNQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHBzcF9za2JfZXh0KSxcbi0tXG5uZXQvY29yZS9zb2NrLmM9MjQ3OT1zdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjQ5Ni0jZW5kaWZcbm5ldC9jb3JlL3NvY2suYzoyNDk3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbm5ldC9jb3JlL3NvY2suYy0yNDk4LVx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xuLS1cbm5ldC9wc3AvS2NvbmZpZy00LSNcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxubmV0L3BzcC9LY29uZmlnLTYtXHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3BzcC9NYWtlZmlsZS0yLVxubmV0L3BzcC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19JTkVUX1BTUCkgJiM0Mzs9IHBzcC5vXG5uZXQvcHNwL01ha2VmaWxlLTQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnPTM9Q09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVM9blxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnOjQ6Q09ORklHX0lORVRfUFNQPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZy01LUNPTkZJR19JUFY2PXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc3BfYXNzb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jPTkzMT1zdHJ1Y3QgcHNwX2tleSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTkzNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYzo5MzU6c3RhdGljIGludCBtbHg1ZV9wc3BfYXNzb2NfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05MzYtXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtOTYwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjk2MTpzdGF0aWMgdm9pZCBtbHg1ZV9wc3BfYXNzb2NfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05NjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz0xMDExPXN0YXRpYyBzdHJ1Y3QgcHNwX2Rldl9vcHMgbWx4NV9wc3Bfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy0xMDEzLVx0LnJ4X3NwaV9hbGxvYyA9IG1seDVlX3BzcF9yeF9zcGlfYWxsb2MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6MTAxNDpcdC50eF9rZXlfYWRkICAgPSBtbHg1ZV9wc3BfYXNzb2NfYWRkLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjEwMTU6XHQudHhfa2V5X2RlbCAgID0gbWx4NWVfcHNwX2Fzc29jX2RlbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy0xMDE2LVx0LmtleV9yb3RhdGUgICA9IG1seDVlX3BzcF9rZXlfcm90YXRlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jPTkzPXN0YXRpYyBib29sIG1seDVlX3BzcF9zZXRfc3RhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMtOTYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmM6OTc6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYy05OC1cdGJvb2wgcmV0ID0gZmFsc2U7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTE4PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMi1cdHN0cnVjdCBwc3BfZGV2ICpwZWVyX3BzZDtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMzpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNC1cdHN0cnVjdCBuZXQgKm5ldDtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMzktXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6NDA6XHRwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy00MS1cdGlmICgqcHRyICE9IG5zKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTEzMT1uc2ltX3J4X3NwaV9hbGxvYyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1MzIgdmVyc2lvbixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE1MjpzdGF0aWMgaW50IG5zaW1fYXNzb2NfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTMtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1NS1cdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gcHNkLVx1MDAzZWRydl9wcml2O1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE1NjpcdHZvaWQgKipwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTctXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTE2NT1zdGF0aWMgaW50IG5zaW1fa2V5X3JvdGF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE3OS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxODA6c3RhdGljIHZvaWQgbnNpbV9hc3NvY19kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4MS17XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTgyLVx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBwc2QtXHUwMDNlZHJ2X3ByaXY7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTgzOlx0dm9pZCAqKnB0ciA9IHBzcF9hc3NvY19kcnZfZGF0YShwYXMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4NC1cbi0tXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD0zMz1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrIHtcbi0tXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04NS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaDo4NjpcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcdCAgKnBzcF9hc3NvYztcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg3LSNlbmRpZlxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0yMj1pbnQgcHNwX2Rldl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGRldl9pZCwgdTggZ2VuZXJhdGlvbiwgYm9vbCBzdHJpcF9pY3YpO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yNC0vKiBLZXJuZWwtZmFjaW5nIEFQSSAqL1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjI1OnZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTI2LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjI3OnN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2Fzc29jX2Rydl9kYXRhKHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yOC17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTM3PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zOC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDAte1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQxOlx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhzay1cdTAwM2Vwc3BfYXNzb2MsIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDItfVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD00NT1wc3BfZW5xdWV1ZV9zZXRfZGVjcnlwdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00Ni17XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6NDc6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDgtXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTY5PXN0YXRpYyBpbmxpbmUgYm9vbFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjcwOnBzcF9pc19hbGxvd2VkX25vbmRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTcxLXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9ODI9c3RhdGljIGlubGluZSBib29sXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6ODM6cHNwX3BzZV9tYXRjaGVzX3BhcyhzdHJ1Y3QgcHNwX3NrYl9leHQgKnBzZSwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTg0LXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9OTE9c3RhdGljIGlubGluZSBlbnVtIHNrYl9kcm9wX3JlYXNvblxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjkyOl9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtOTMte1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMjI9cHNwX3R3c2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyMy17XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTI0Olx0cmV0dXJuIF9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhza2IsIHJjdV9kZXJlZmVyZW5jZSh0dy1cdTAwM2Vwc3BfYXNzb2MpKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjUtfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyNi1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjc6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfZ2V0X2Fzc29jX3JjdShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTI4LXtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjk6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTMwLVx0aW50IHN0YXRlO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMzYtXHRwYXMgPSBzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUID9cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMzc6XHRcdCAgICAgIHJjdV9kZXJlZmVyZW5jZShpbmV0X3R3c2soc2spLVx1MDAzZXBzcF9hc3NvYykgOlxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjEzODpcdFx0ICAgICAgcmN1X2RlcmVmZXJlbmNlKHNrLVx1MDAzZXBzcF9hc3NvYyk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTM5LVx0cmV0dXJuIHBhcztcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTQxLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE0MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za2JfZ2V0X2Fzc29jX3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE0My17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE1MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwc3Bfc2tfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTItXHRpbnQgcHNwX2VuY2FwID0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7IFBTUF9IRFJfU0laRSAmIzQzOyBQU1BfVFJMX1NJWkU7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTUzOlx0Ym9vbCBoYXNfcHNwID0gcmN1X2FjY2Vzc19wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYyk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU0LVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNjM9cHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7IH1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjQtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTY1OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjYte1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xODc9cHNwX3R3c2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xOTEtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTkyOnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrYl9nZXRfYXNzb2NfcmN1KHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTkzLXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaD00Mz1zdHJ1Y3QgcHNwX2Rldl9jb25maWcge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTUzLS8qKlxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NTQ6ICogc3RydWN0IHBzcF9hc3NvY19kZXYgLSB3cmFwcGVyIGZvciBhc3NvY2lhdGVkIG5ldF9kZXZpY2VcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTU1LSAqIEBkZXZfbGlzdDogbGlzdCBub2RlIGZvciBwc3BfZGV2Ojphc3NvY19kZXZfbGlzdFxuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTU4LSAqL1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NTk6c3RydWN0IHBzcF9hc3NvY19kZXYge1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjAtXHRzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0O1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTY3LSAqIEBtYWluX25ldGRldjogb3JpZ2luYWwgbmV0ZGV2aWNlIG9mIHRoaXMgUFNQIGRldmljZVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6Njg6ICogQGFzc29jX2Rldl9saXN0OiBsaXN0IG9mIHBzcF9hc3NvY19kZXYgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQU1AgZGV2aWNlXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC02OS0gKiBAYXNzb2NfZGV2X2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGFzc29jX2Rldl9saXN0XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTI0PXN0cnVjdCBwc3BfZGV2X2NhcHMge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEzMi1cdCAqIEBhc3NvY19kcnZfc3BjOiBzaXplIG9mIGRyaXZlci1zcGVjaWZpYyBzdGF0ZSBpbiBUeCBhc3NvY1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MTMzOlx0ICogRGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiBzdHJ1Y3QgcHNwX2Fzc29jOjpkcnZfZGF0YVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTM0LVx0ICovXG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTUwPXN0cnVjdCBwc3Bfa2V5X3BhcnNlZCB7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTU0LVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MTU1OnN0cnVjdCBwc3BfYXNzb2Mge1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTU2LVx0c3RydWN0IHBzcF9kZXYgKnBzZDtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaD0xOTU9c3RydWN0IHBzcF9kZXZfb3BzIHtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMjItXHQgKi9cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjIyMzpcdGludCAoKnR4X2tleV9hZGQpKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIyNC1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjI4LVx0ICovXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoyMjk6XHR2b2lkICgqdHhfa2V5X2RlbCkoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIzMC1cbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MjQyPXN0cnVjdCBza19maWx0ZXI7XG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI1OC0gICpcdEBza19wb2xpY3k6IGZsb3cgcG9saWN5XG5pbmNsdWRlL25ldC9zb2NrLmg6MjU5OiAgKlx0QHBzcF9hc3NvYzogUFNQIGFzc29jaWF0aW9uLCBpZiBzb2NrZXQgaXMgUFNQLXNlY3VyZWRcbmluY2x1ZGUvbmV0L3NvY2suaC0yNjAtICAqXHRAc2tfcmVjZWl2ZV9xdWV1ZTogaW5jb21pbmcgcGFja2V0c1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC00NjctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvc29jay5oOjQ2ODpcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcdCpwc3BfYXNzb2M7XG5pbmNsdWRlL25ldC9zb2NrLmgtNDY5LSNlbmRpZlxuLS1cbm5ldC9jb3JlL3NvY2suYz0yNDc5PXN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNDk3LSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbm5ldC9jb3JlL3NvY2suYzoyNDk4Olx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xubmV0L2NvcmUvc29jay5jLTI0OTktI2VuZGlmXG4tLVxubmV0L3BzcC9wc3AtbmwtZ2VuLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBwc3Bfbmxfb3BzW10gPSB7XG4tLVxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTA1LVx0XHQuY21kXHRcdD0gUFNQX0NNRF9SWF9BU1NPQyxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jOjEwNjpcdFx0LnByZV9kb2l0XHQ9IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZCxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTEwNy1cdFx0LmRvaXRcdFx0PSBwc3BfbmxfcnhfYXNzb2NfZG9pdCxcbi0tXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy0xMTQtXHRcdC5jbWRcdFx0PSBQU1BfQ01EX1RYX0FTU09DLFxubmV0L3BzcC9wc3AtbmwtZ2VuLmM6MTE1Olx0XHQucHJlX2RvaXRcdD0gcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkLFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTE2LVx0XHQuZG9pdFx0XHQ9IHBzcF9ubF90eF9hc3NvY19kb2l0LFxuLS1cbm5ldC9wc3AvcHNwLW5sLWdlbi5oPTIwPWludCBwc3BfZGV2aWNlX2dldF9sb2NrZWRfYWRtaW4oY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXG5uZXQvcHNwL3BzcC1ubC1nZW4uaC0yMS1cdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L3BzcC9wc3AtbmwtZ2VuLmg6MjI6aW50IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcyxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oLTIzLVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4tLVxubmV0L3BzcC9wc3AuaD0yMT12b2lkIHBzcF9ubF9ub3RpZnlfZGV2KHN0cnVjdCBwc3BfZGV2ICpwc2QsIHUzMiBjbWQpO1xubmV0L3BzcC9wc3AuaC0yMi1cbm5ldC9wc3AvcHNwLmg6MjM6c3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2NyZWF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkKTtcbm5ldC9wc3AvcHNwLmgtMjQtc3RydWN0IHBzcF9kZXYgKnBzcF9kZXZfZ2V0X2Zvcl9zb2NrKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvcHNwL3BzcC5oOjI1OnZvaWQgcHNwX2Rldl90eF9rZXlfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XG5uZXQvcHNwL3BzcC5oOjI2OmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5uZXQvcHNwL3BzcC5oLTI3LVx0XHRcdCAgc3RydWN0IHBzcF9rZXlfcGFyc2VkICprZXksXG4tLVxubmV0L3BzcC9wc3AuaD0yOT1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbi0tXG5uZXQvcHNwL3BzcC5oLTMxLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9wc3AvcHNwLmg6MzI6dm9pZCBwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHN0cnVjdCBwc3BfZGV2ICpwc2QpO1xubmV0L3BzcC9wc3AuaC0zMy1cbi0tXG5uZXQvcHNwL3BzcF9tYWluLmM9MTMxPXZvaWQgcHNwX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBwc3BfZGV2ICpwc2QpXG5uZXQvcHNwL3BzcF9tYWluLmMtMTMyLXtcbm5ldC9wc3AvcHNwX21haW4uYzoxMzM6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnksICplbnRyeV90bXA7XG5uZXQvcHNwL3BzcF9tYWluLmM6MTM0Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqbmV4dDtcbm5ldC9wc3AvcHNwX21haW4uYy0xMzUtXG4tLVxubmV0L3BzcC9wc3BfbWFpbi5jPTQwOD1zdGF0aWMgdm9pZCBwc3BfZGV2X2Rpc2Fzc29jX29uZShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L3BzcC9wc3BfbWFpbi5jLTQwOS17XG5uZXQvcHNwL3BzcF9tYWluLmM6NDEwOlx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xubmV0L3BzcC9wc3BfbWFpbi5jLTQxMS1cbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTU0PXBzcF9ubF9tdWx0aWNhc3RfcGVyX25zKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHVuc2lnbmVkIGludCBncm91cCxcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTU5LXtcbm5ldC9wc3AvcHNwX25sLmM6NjA6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XG5uZXQvcHNwL3BzcF9ubC5jLTYxLVx0c3RydWN0IHhhcnJheSBzZW50X25ldHM7XG4tLVxubmV0L3BzcC9wc3BfbmwuYz0yMzA9Ym9vbCBwc3BfaGFzX2Fzc29jX2Rldl9pbl9ucyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvcHNwL3BzcF9ubC5jLTIzMS17XG5uZXQvcHNwL3BzcF9ubC5jOjIzMjpcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeTtcbm5ldC9wc3AvcHNwX25sLmMtMjMzLVxuLS1cbm5ldC9wc3AvcHNwX25sLmM9MjQyPXN0YXRpYyBpbnQgcHNwX25sX2ZpbGxfYXNzb2NfZGV2X2xpc3Qoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHNrX2J1ZmYgKnJzcCxcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTI0NS17XG5uZXQvcHNwL3BzcF9ubC5jOjI0NjpcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeTtcbm5ldC9wc3AvcHNwX25sLmMtMjQ3LVx0c3RydWN0IG5ldCAqZGV2X25ldF9ucztcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTQ0Nz1pbnQgcHNwX25sX2tleV9yb3RhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtNDgyLVxubmV0L3BzcC9wc3BfbmwuYzo0ODM6XHRwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHBzZCk7XG5uZXQvcHNwL3BzcF9ubC5jLTQ4NC1cdHBzZC1cdTAwM2VzdGF0cy5yb3RhdGlvbnMmIzQzOyYjNDM7O1xuLS1cbm5ldC9wc3AvcHNwX25sLmM9NDk5PWludCBwc3BfbmxfZGV2X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTUwMS1cdHN0cnVjdCBwc3BfZGV2ICpwc2QgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xubmV0L3BzcC9wc3BfbmwuYzo1MDI6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqcHNwX2Fzc29jX2Rldjtcbm5ldC9wc3AvcHNwX25sLmMtNTAzLVx0c3RydWN0IG5ldF9kZXZpY2UgKmFzc29jX2Rldjtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTUxOC1cbm5ldC9wc3AvcHNwX25sLmM6NTE5Olx0cHNwX2Fzc29jX2RldiA9IGt6YWxsb2Nfb2JqKCpwc3BfYXNzb2NfZGV2KTtcbm5ldC9wc3AvcHNwX25sLmM6NTIwOlx0aWYgKCFwc3BfYXNzb2NfZGV2KSB7XG5uZXQvcHNwL3BzcF9ubC5jLTUyMS1cdFx0ZXJyID0gLUVOT01FTTtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTUyNi1cdGFzc29jX2RldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgobmV0LCBhc3NvY19pZmluZGV4LFxubmV0L3BzcC9wc3BfbmwuYzo1Mjc6XHRcdFx0XHRcdFx1MDAyNnBzcF9hc3NvY19kZXYtXHUwMDNlZGV2X3RyYWNrZXIsXG5uZXQvcHNwL3BzcF9ubC5jLTUyOC1cdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4tLVxubmV0L3BzcC9wc3BfbmwuYy01NDMtXG5uZXQvcHNwL3BzcF9ubC5jOjU0NDpcdHBzcF9hc3NvY19kZXYtXHUwMDNlYXNzb2NfZGV2ID0gYXNzb2NfZGV2O1xubmV0L3BzcC9wc3BfbmwuYy01NDUtXG4tLVxubmV0L3BzcC9wc3BfbmwuYy01NjMtXG5uZXQvcHNwL3BzcF9ubC5jOjU2NDpcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHNwX2Fzc29jX2Rldi1cdTAwM2VkZXZfbGlzdCwgXHUwMDI2cHNkLVx1MDAzZWFzc29jX2Rldl9saXN0KTtcbm5ldC9wc3AvcHNwX25sLmMtNTY1LVx0cHNkLVx1MDAzZWFzc29jX2Rldl9jbnQmIzQzOyYjNDM7O1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtNTc1LWVycl9wdXRfZGV2OlxubmV0L3BzcC9wc3BfbmwuYzo1NzY6XHRuZXRkZXZfcHV0KGFzc29jX2RldiwgXHUwMDI2cHNwX2Fzc29jX2Rldi1cdTAwM2VkZXZfdHJhY2tlcik7XG5uZXQvcHNwL3BzcF9ubC5jLTU3Ny1lcnJfZnJlZV9hc3NvYzpcbm5ldC9wc3AvcHNwX25sLmM6NTc4Olx0a2ZyZWUocHNwX2Fzc29jX2Rldik7XG5uZXQvcHNwL3BzcF9ubC5jLTU3OS1lcnJfcHV0X25ldDpcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTU4NT1pbnQgcHNwX25sX2Rldl9kaXNhc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvcHNwL3BzcF9ubC5jLTU4Ni17XG5uZXQvcHNwL3BzcF9ubC5jOjU4NzpcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeSwgKmZvdW5kID0gTlVMTDtcbm5ldC9wc3AvcHNwX25sLmMtNTg4LVx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG4tLVxubmV0L3BzcC9wc3BfbmwuYy02MzgtXG5uZXQvcHNwL3BzcF9ubC5jOjYzOTppbnQgcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkKGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxubmV0L3BzcC9wc3BfbmwuYy02NDAtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtNzc0LVx0c3RydWN0IHBzcF9rZXlfcGFyc2VkIGtleTtcbm5ldC9wc3AvcHNwX25sLmM6Nzc1Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xubmV0L3BzcC9wc3BfbmwuYy03NzYtXHRzdHJ1Y3Qgc2tfYnVmZiAqcnNwO1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtNzkyLVxubmV0L3BzcC9wc3BfbmwuYzo3OTM6XHRwYXMgPSBwc3BfYXNzb2NfY3JlYXRlKHBzZCk7XG5uZXQvcHNwL3BzcF9ubC5jLTc5NC1cdGlmICghcGFzKSB7XG4tLVxubmV0L3BzcC9wc3BfbmwuYy04MTQtXHR9XG5uZXQvcHNwL3BzcF9ubC5jOjgxNTpcdHBzcF9hc3NvY19wdXQocGFzKTtcbm5ldC9wc3AvcHNwX25sLmMtODE2LVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtODE5LWVycl9mcmVlX3Bhczpcbm5ldC9wc3AvcHNwX25sLmM6ODIwOlx0cHNwX2Fzc29jX3B1dChwYXMpO1xubmV0L3BzcC9wc3BfbmwuYy04MjEtZXJyX2ZyZWVfcnNwOlxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0zMD1wc3BfdmFsaWRhdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvcHNwL3BzcF9zb2NrLmMtMzEte1xubmV0L3BzcC9wc3Bfc29jay5jOjMyOlx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xubmV0L3BzcC9wc3Bfc29jay5jLTMzLVx0Ym9vbCBnb29kO1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy00Ni1cbm5ldC9wc3AvcHNwX3NvY2suYzo0NzpzdHJ1Y3QgcHNwX2Fzc29jICpwc3BfYXNzb2NfY3JlYXRlKHN0cnVjdCBwc3BfZGV2ICpwc2QpXG5uZXQvcHNwL3BzcF9zb2NrLmMtNDgte1xubmV0L3BzcC9wc3Bfc29jay5jOjQ5Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xubmV0L3BzcC9wc3Bfc29jay5jLTUwLVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy02OC1cbm5ldC9wc3AvcHNwX3NvY2suYzo2OTpzdGF0aWMgc3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2R1bW15KHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbm5ldC9wc3AvcHNwX3NvY2suYy03MC17XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTc5LVxubmV0L3BzcC9wc3Bfc29jay5jOjgwOnN0YXRpYyBpbnQgcHNwX2Rldl90eF9rZXlfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbm5ldC9wc3AvcHNwX3NvY2suYy04MS1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTg1LVxubmV0L3BzcC9wc3Bfc29jay5jOjg2OnZvaWQgcHNwX2Rldl90eF9rZXlfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbm5ldC9wc3AvcHNwX3NvY2suYy04Ny17XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTkyLVxubmV0L3BzcC9wc3Bfc29jay5jOjkzOnN0YXRpYyB2b2lkIHBzcF9hc3NvY19mcmVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9wc3AvcHNwX3NvY2suYy05NC17XG5uZXQvcHNwL3BzcF9zb2NrLmM6OTU6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBzcF9hc3NvYywgd29yayk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtOTYtXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gcGFzLVx1MDAzZXBzZDtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA1LVxubmV0L3BzcC9wc3Bfc29jay5jOjEwNjpzdGF0aWMgdm9pZCBwc3BfYXNzb2NfZnJlZV9xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA3LXtcbm5ldC9wc3AvcHNwX3NvY2suYzoxMDg6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHBzcF9hc3NvYywgcmN1KTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xMDktXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTEwOlx0SU5JVF9XT1JLKFx1MDAyNnBhcy1cdTAwM2V3b3JrLCBwc3BfYXNzb2NfZnJlZSk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTExLVx0c2NoZWR1bGVfd29yayhcdTAwMjZwYXMtXHUwMDNld29yayk7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTExNC0vKipcbm5ldC9wc3AvcHNwX3NvY2suYzoxMTU6ICogcHNwX2Fzc29jX3B1dCgpIC0gcmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBhIFBTUCBhc3NvY2lhdGlvblxubmV0L3BzcC9wc3Bfc29jay5jLTExNi0gKiBAcGFzOiBhc3NvY2lhdGlvbiB0byByZWxlYXNlXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTE3LSAqL1xubmV0L3BzcC9wc3Bfc29jay5jOjExODp2b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxubmV0L3BzcC9wc3Bfc29jay5jLTExOS17XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTIwLVx0aWYgKHBhcyBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpKVxubmV0L3BzcC9wc3Bfc29jay5jOjEyMTpcdFx0Y2FsbF9yY3UoXHUwMDI2cGFzLVx1MDAzZXJjdSwgcHNwX2Fzc29jX2ZyZWVfcXVldWUpO1xubmV0L3BzcC9wc3Bfc29jay5jLTEyMi19XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEyND12b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjUte1xubmV0L3BzcC9wc3Bfc29jay5jOjEyNjpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXHUwMDNlcHNwX2Fzc29jLCAxKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjctXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI4Olx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI5Olx0cHNwX2Fzc29jX3B1dChwYXMpO1xubmV0L3BzcC9wc3Bfc29jay5jLTEzMC19XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMxLVxubmV0L3BzcC9wc3Bfc29jay5jOjEzMjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNDgtXHRyZWZjb3VudF9pbmMoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCk7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MTQ5Olx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYywgcGFzKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xNTAtXHRlcnIgPSAwO1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNTctXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTU4OnN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbm5ldC9wc3AvcHNwX3NvY2suYy0xNTkte1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0xNzc9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTE4MS1cdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzaztcbm5ldC9wc3AvcHNwX3NvY2suYzoxODI6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpkdW1teTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xODMtXHRpbnQgZXJyO1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0yMTktXHQgKi9cbm5ldC9wc3AvcHNwX3NvY2suYzoyMjA6XHRkdW1teSA9IHBzcF9hc3NvY19kdW1teShwYXMpO1xubmV0L3BzcC9wc3Bfc29jay5jLTIyMS1cdGlmICghZHVtbXkpIHtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjQ4LVxubmV0L3BzcC9wc3Bfc29jay5jOjI0OTp2b2lkIHBzcF9hc3NvY3Nfa2V5X3JvdGF0ZWQoc3RydWN0IHBzcF9kZXYgKnBzZClcbm5ldC9wc3AvcHNwX3NvY2suYy0yNTAte1xubmV0L3BzcC9wc3Bfc29jay5jOjI1MTpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcywgKm5leHQ7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMjUyLVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0yNjY9dm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjY3LXtcbm5ldC9wc3AvcHNwX3NvY2suYzoyNjg6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xubmV0L3BzcC9wc3Bfc29jay5jLTI2OS1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjcxLVx0XHRyZWZjb3VudF9pbmMoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCk7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlx0cmN1X2Fzc2lnbl9wb2ludGVyKHR3LVx1MDAzZXBzcF9hc3NvYywgcGFzKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzMtXHR0dy1cdTAwM2V0d192YWxpZGF0ZV94bWl0X3NrYiA9IHBzcF92YWxpZGF0ZV94bWl0O1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0yNzY9dm9pZCBwc3BfdHdza19hc3NvY19mcmVlKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KVxubmV0L3BzcC9wc3Bfc29jay5jLTI3Ny17XG5uZXQvcHNwL3BzcF9zb2NrLmM6Mjc4Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh0dy1cdTAwM2Vwc3BfYXNzb2MsIDEpO1xubmV0L3BzcC9wc3Bfc29jay5jLTI3OS1cbm5ldC9wc3AvcHNwX3NvY2suYzoyODA6XHRyY3VfYXNzaWduX3BvaW50ZXIodHctXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbm5ldC9wc3AvcHNwX3NvY2suYzoyODE6XHRwc3BfYXNzb2NfcHV0KHBhcyk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMjgyLX1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9Mjg0PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3BzcC9wc3Bfc29jay5jLTI4NS17XG5uZXQvcHNwL3BzcF9zb2NrLmM6Mjg2Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xubmV0L3BzcC9wc3Bfc29jay5jLTI4Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NjA2PWRlZiBfY2hlY2tfYXNzb2NfbGlzdChjZmcsIHBzcF9kZXZfaWQsIGlmaW5kZXgsIG5zaWQ9Tm9uZSk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTYyMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2MjQ6ZGVmIF9kYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02MjUtICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02NTk9ZGVmIF9nZXRfcHNwX3Zlcl9pcDZfdmFyaWFudHMoKTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjY0LUBrc2Z0X3ZhcmlhbnRzKF9nZXRfcHNwX3Zlcl9pcDZfdmFyaWFudHMoKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2NjU6ZGVmIGRhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jKGNmZywgdmVyc2lvbiwgaXB2ZXIpOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2Ni0gICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBQU1AgZGF0YSBzZW5kIHZpYSBuZXRraXQgd2l0aCBkZXYtYXNzb2MuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjY3LSAgICBjZmcucmVxdWlyZV9pcHZlcihpcHZlcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2Njg6ICAgIF9kYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2OS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9Njk4PWRlZiBfZGV2X2NoYW5nZV9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0KGNmZyk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTcyNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo3MjY6ZGVmIF9wc3BfZGV2X2dldF9jaGVja19uZXRraXRfcHNwX2Fzc29jKGNmZyk6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNzI3LSAgICBcJiMzNDtcJiMzNDtcJiMzNDsgQ2hlY2sgcHNwIGRldi1nZXQgb3V0cHV0IHdpdGggbmV0a2l0IGludGVyZmFjZSBhc3NvY2lhdGVkIHdpdGggUFNQIGRldiBcJiMzNDtcJiMzNDtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9OTQxPWRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODAtICAgICAgICAgICAgICAgICAgICAgICAgX2Fzc29jX2NoZWNrX2xpc3QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6OTgxOiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTk4Mi0gICAgICAgICAgICAgICAgICAgICAgICBfa2V5X3JvdGF0aW9uX25vdGlmeV9tdWx0aV9uc19uZXRraXQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTgzLSAgICAgICAgICAgICAgICAgICAgICAgIF9kZXZfY2hhbmdlX25vdGlmeV9tdWx0aV9uc19uZXRraXQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6OTg0OiAgICAgICAgICAgICAgICAgICAgICAgIF9wc3BfZGV2X2dldF9jaGVja19uZXRraXRfcHNwX2Fzc29jLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTk4NS0gICAgICAgICAgICAgICAgICAgICAgICBfZGV2X2Fzc29jX25vX25zaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnIG9mIG5ldC9wc3AqKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGUgYG5ldC9wc3BgIHN1YnN5c3RlbS4gTXkgdXN1YWwgYXBwcm9hY2gg4oCTIHN0YXJ0IHdpdGggdGhlIEtjb25maWcuIFRoYXQgZmlsZSBpcyB0aGUgZm91bmRhdGlvbiwgcmlnaHQ/IEl0JiMzOTtsbCBsYXkgb3V0IHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCB0aGVpciBkZWZhdWx0IHZhbHVlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYXJlIGF0IHBsYXkgaGVyZS4gRmlndXJlIG91dCB3aGF0IGZlYXR1cmVzIGFyZSBjb25maWd1cmFibGUsIGhvdyB0aGV5IGludGVycmVsYXRlLCBhbmQgd2hhdCB0aGUgYmFzZWxpbmUgc2V0dXAgbG9va3MgbGlrZS4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlIGNvcmUgZGVzaWduIGRlY2lzaW9ucyBtYWRlIGJ5IHRoZSBvcmlnaW5hbCBhdXRob3JzLCBhbmQgc3RhcnQgdG8gZm9ybXVsYXRlIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjay4gU28sIGxldCYjMzk7cyBjcmFjayBvcGVuIGBuZXQvcHNwL0tjb25maWdgIGFuZCBzZWUgd2hhdCBnZW1zIGl0IGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BzcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFNQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIElORVRfUFNQXG4gICA2Olx0XHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBTS0JfREVDUllQVEVEXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIFBTUCBTZWN1cml0eSBQcm90b2NvbCAoUFNQKS5cbiAgMTM6XHRcdEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiAgMTQ6XHRcdCAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2dvb2dsZS9wc3AvbWFpbi9kb2MvUFNQX0FyY2hfU3BlYy5wZGZcbiAgMTU6XHRcbiAgMTY6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNzUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29tbWl0JiMzOTtzIENvbnRleHQqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byByZWFjaCBmb3IgYGdpdCBsb2dgLiBJIG5lZWQgdG8gc2VlIHRoZSBjb21taXQgaGlzdG9yeSBkaXJlY3RseS4gRm9yZ2V0IHRyeWluZyB0byBkZWNpcGhlciB0aGUgZGlmZiBhbG9uZTsgSSB3YW50IHRoZSBicm9hZGVyIGNvbnRleHQuIFdoYXQgbGVkIHRvIHRoaXMgY2hhbmdlPyBXaGF0JiMzOTtzIHRoZSBuYXJyYXRpdmUgYXJvdW5kIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHdhcyBkb25lLCBub3QganVzdCAqd2hhdCogd2FzIGNoYW5nZWQuIFRoZSBjb21taXQgbWVzc2FnZSBpdHNlbGYgaXMgYSBzdGFydGluZyBwb2ludCwgb2YgY291cnNlLCBidXQgb2Z0ZW4gaXQgb25seSB0ZWxscyBwYXJ0IG9mIHRoZSBzdG9yeS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDtzbyB3aGF0PyYjMzQ7IGJlaGluZCB0aGUgJiMzNDt3aGF0LiYjMzQ7IEdpdmUgbWUgdGhlIGNvbW1pdCBsb2cgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19jbG9uZS4qcHNwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyODUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNrX2Nsb25lYCBhbmQgaG93IHRoZSBgcHNwX2Fzc29jYCBpcyBoYW5kbGVkLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBzb2NrZXQgYWxsb2NhdGlvbiBhbmQgY2xvbmluZy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHdoZXJlIHRoZXNlIGludGVyYWN0aW9ucyBvY2N1ciBpbiB0aGUgc29ja2V0IGNyZWF0aW9uIGFuZCBkdXBsaWNhdGlvbiBwcm9jZXNzLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIGBza19jbG9uZWAgYW5kIHBpbnBvaW50IGl0cyBjYWxsZXJzLiBUaGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgZXhhY3Qgc2VxdWVuY2Ugb2YgZXZlbnRzIGFuZCBob3cgdGhlIGFzc29jaWF0aW9uLCBvciBsYWNrIHRoZXJlb2YsIHdpdGggdGhlIGBwc3BfYXNzb2NgIHZhcmlhYmxlIGlzIG1hbmFnZWQgd2hlbiBzb2NrZXRzIGFyZSBjcmVhdGVkIGFuZCBzdWJzZXF1ZW50bHkgY2xvbmVkLiBUaGlzIGludmVzdGlnYXRpb24gd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYXNzb2NpYXRpb24gYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgaW4gdGhlIHNvY2tldCBkdXBsaWNhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRyYWNpbmcgdGhpcyBgcHNwX2Fzc29jYCB0aHJvdWdoIHRoZSBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19jbG9uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTEzPUZvciBzZWN1cml0eSBtb2R1bGUgc3VwcG9ydCwgdGhyZWUgU0NUUCBzcGVjaWZpYyBob29rcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQ6OlxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMTYtICAgIHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTc6ICAgIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xOC0gICAgc2VjdXJpdHlfc2N0cF9hc3NvY19lc3RhYmxpc2hlZCgpXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0xMDI9QVNDT05GIGNodW5rIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYGBAb3B0bmFtZWBgJiMzOTtzIGFyZSBwcmVzZW50Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTEwOS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTEwOnNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xMTEtfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0xMzY9ZXN0YWJsaXNoaW5nIGFuIGFzc29jaWF0aW9uLlxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMTc2LSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIFNDVFBfU09DS0VUX1RDUCBvciBwZWVsZWQgb2ZmXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0OjE3NzogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpIGlzXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE3OC0gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgdG8gY2xvbmUgdGhlIG5ldyBzb2NrZXQuXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0xOTQ9aG9va3Mgd2l0aCB0aGUgU0VMaW51eCBzcGVjaWZpY3MgZXhwYW5kZWQgYmVsb3c6OlxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMTk3LSAgICBzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdCgpXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0OjE5ODogICAgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE5OS0gICAgc2VjdXJpdHlfc2N0cF9hc3NvY19lc3RhYmxpc2hlZCgpXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0yNTU9UmVjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0yNTctXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0OjI1ODpzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMjU5LX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q9MjYxPXNvY2tldCkgb3Igd2hlbiBhIHNvY2tldCBpcyAmIzM5O3BlZWxlZCBvZmYmIzM5OyBlLmcgdXNlcnNwYWNlIGNhbGxzXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0OjI2MjoqKnNjdHBfcGVlbG9mZioqXFwoMykuIGBgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpYGAgd2lsbCBzZXQgdGhlIG5ld1xuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0yNjMtc29ja2V0cyBzaWQgYW5kIHBlZXIgc2lkIHRvIHRoYXQgY29udGFpbmVkIGluIHRoZSBgYEBhc29jIHNpZGBgIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0PTEzPVNDVFDnmoRMU03mlK/mjIFcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yMi1cdHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjIzOlx0c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNC1cdHNlY3VyaXR5X3NjdHBfYXNzb2NfZXN0YWJsaXNoZWQoKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0PTM5PXNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xMDYtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdDoxMDc6c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xMDgtfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q9MTE4PXNlY3VyaXR5X3NjdHBfYXNzb2NfZXN0YWJsaXNoZWQoKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTE2Ni0gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlpoLmnpzmmK9TQ1RQX1NPQ0tFVF9UQ1DmiJbmmK/liaXnprvnmoTlpZfmjqVcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjE2NzogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlrZfvvIzkvJrosIPnlKggc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xNjgtICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5p2l5YWL6ZqG5paw55qE5aWX5o6l5a2X44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q9MTc3PVNDVFDnmoRTRUxpbnV45pSv5oyBXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMTg3LVx0c2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q6MTg4Olx0c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xODktXHRzZWN1cml0eV9zY3RwX2Fzc29jX2VzdGFibGlzaGVkKClcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdD0yMTY9c2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTI0My1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjI0NDpzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTI0NS1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNDct5b2T5LiA5Liq5aWX5o6l5a2X6KKr4oCc5Yml56a74oCd5aaC55So5oi356m66Ze06LCD55SoICoqc2N0cF9wZWVsb2ZmKipcXCgzKeaXtu+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q6MjQ4OmBgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpYGAg5bCG5Lya5YiG5Yir5bCG5paw5aWX5o6l5a2X55qEc2lk5ZKM5a+556uvc2lk6K6+572u5Li6XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNDktYGBAYXNvYyBzaWRgYCDlkowgYGBAYXNvYyBwZWVyIHNpZGBgIOS4reWMheWQq+eahOWAvOOAglxuLS1cbmNyeXB0by9hZl9hbGcuYz00NjQ9aW50IGFmX2FsZ19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuLS1cbmNyeXB0by9hZl9hbGcuYy00ODYtXHRzZWN1cml0eV9zb2NrX2dyYWZ0KHNrMiwgbmV3c29jayk7XG5jcnlwdG8vYWZfYWxnLmM6NDg3Olx0c2VjdXJpdHlfc2tfY2xvbmUoc2ssIHNrMik7XG5jcnlwdG8vYWZfYWxnLmMtNDg4LVxuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwLmg9OTA5PXZvaWQgY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKTtcbmluY2x1ZGUvbGludXgvY2dyb3VwLmg6OTEwOnZvaWQgY2dyb3VwX3NrX2Nsb25lKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKTtcbmluY2x1ZGUvbGludXgvY2dyb3VwLmgtOTExLXZvaWQgY2dyb3VwX3NrX2ZyZWUoc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpO1xuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwLmg9OTIwPXN0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpIHt9XG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oOjkyMTpzdGF0aWMgaW5saW5lIHZvaWQgY2dyb3VwX3NrX2Nsb25lKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKSB7fVxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaC05MjItc3RhdGljIGlubGluZSB2b2lkIGNncm91cF9za19mcmVlKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKSB7fVxuLS1cbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTM1OT1MU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIHNrX2ZyZWVfc2VjdXJpdHksIHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjM2MDpMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIHNrX2Nsb25lX3NlY3VyaXR5LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zNjEtXHQgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTM2ND1MU01fSE9PSyhpbnQsIDAsIGluZXRfY29ubl9yZXF1ZXN0LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zNjUtXHQgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg6MzY2OkxTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5ldF9jc2tfY2xvbmUsIHN0cnVjdCBzb2NrICpuZXdzayxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTM2Ny1cdCBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg9MzgyPUxTTV9IT09LKGludCwgMCwgc2N0cF9iaW5kX2Nvbm5lY3QsIHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zODMtXHQgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbilcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oOjM4NDpMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIHNjdHBfc2tfY2xvbmUsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMzg1LVx0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xNjg5PXZvaWQgc2VjdXJpdHlfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE2OTA6dm9pZCBzZWN1cml0eV9za19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzayk7XG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTY5MS12b2lkIHNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xNjk2PWludCBzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTY5Ny1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE2OTg6dm9pZCBzZWN1cml0eV9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqbmV3c2ssXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTY5OS1cdFx0XHRjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xNzEyPWludCBzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE3MTMtXHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFkZHJsZW4pO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE3MTQ6dm9pZCBzZWN1cml0eV9zY3RwX3NrX2Nsb25lKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTcxNS1cdFx0XHQgICAgc3RydWN0IHNvY2sgKm5ld3NrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTg0Nz1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE4NTAtXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTg1MTpzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTg1Mi17XG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE4Njk9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5ldF9jb25uX3JlcXVlc3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xODc0LVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE4NzU6c3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpuZXdzayxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xODc2LVx0XHRcdGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTkzMz1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xOTM5LVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE5NDA6c3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTk0MS1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD0xNTM9c3RhdGljIGlubGluZSB2b2lkICppbmV0X2Nza19jYShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC0xNTctXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oOjE1ODpzdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY2xvbmVfbG9jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTE1OS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmg9MTU0Nz1zdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiB7XG4tLVxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMjA3OS1cdCAqIFNDVFAgVENQIHR5cGUgc29ja2V0cyBhbmQgcGVlbGVkIG9mZiBjb25uZWN0aW9ucyBhcyB0aGV5XG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaDoyMDgwOlx0ICogY2F1c2UgYSBuZXcgc29ja2V0IHRvIGJlIGdlbmVyYXRlZC4gc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaC0yMDgxLVx0ICogd2lsbCB0aGVuIHBsdWcgdGhlc2UgaW50byB0aGUgbmV3IHNvY2tldC5cbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MTg0Mz12b2lkIHNrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC9zb2NrLmg6MTg0NDpzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSwgYm9vbCBsb2NrKTtcbmluY2x1ZGUvbmV0L3NvY2suaC0xODQ1LVxuaW5jbHVkZS9uZXQvc29jay5oOjE4NDY6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqc2tfY2xvbmVfbG9jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5KVxuaW5jbHVkZS9uZXQvc29jay5oLTE4NDcte1xuaW5jbHVkZS9uZXQvc29jay5oOjE4NDg6XHRyZXR1cm4gc2tfY2xvbmUoc2ssIHByaW9yaXR5LCB0cnVlKTtcbmluY2x1ZGUvbmV0L3NvY2suaC0xODQ5LX1cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTM4Nj1zdGF0aWMgaW5saW5lIGludCB4ZnJtNl9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTAtXG5pbmNsdWRlL25ldC94ZnJtLmg6MTM5MTppbnQgX194ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spO1xuaW5jbHVkZS9uZXQveGZybS5oLTEzOTItXG5pbmNsdWRlL25ldC94ZnJtLmg6MTM5MzpzdGF0aWMgaW5saW5lIGludCB4ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spXG5pbmNsdWRlL25ldC94ZnJtLmgtMTM5NC17XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTktXHRpZiAodW5saWtlbHkob3NrLVx1MDAzZXNrX3BvbGljeVswXSB8fCBvc2stXHUwMDNlc2tfcG9saWN5WzFdKSlcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNDAwOlx0XHRyZXR1cm4gX194ZnJtX3NrX2Nsb25lX3BvbGljeShzaywgb3NrKTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNDAxLVx0cmV0dXJuIDA7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTE0MjQ9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fc2tfZnJlZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrKSB7fVxuaW5jbHVkZS9uZXQveGZybS5oOjE0MjU6c3RhdGljIGlubGluZSBpbnQgeGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL25ldC94ZnJtLmgtMTQyNi1zdGF0aWMgaW5saW5lIGludCB4ZnJtNl9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpIHsgcmV0dXJuIDE7IH1cbi0tXG5rZXJuZWwvYnBmL2JwZl9sc20uYz03Nj1CVEZfSUQoZnVuYywgYnBmX2xzbV9zb2NrX2dyYWZ0KVxua2VybmVsL2JwZi9icGZfbHNtLmM6Nzc6QlRGX0lEKGZ1bmMsIGJwZl9sc21faW5ldF9jc2tfY2xvbmUpXG5rZXJuZWwvYnBmL2JwZl9sc20uYy03OC1CVEZfSUQoZnVuYywgYnBmX2xzbV9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQpXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYz03NDkzPXZvaWQgY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNzUyMC1cbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6NzUyMTp2b2lkIGNncm91cF9za19jbG9uZShzdHJ1Y3Qgc29ja19jZ3JvdXBfZGF0YSAqc2tjZClcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtNzUyMi17XG4tLVxubmV0L2JsdWV0b290aC9pc28uYz05NTU9c3RhdGljIHZvaWQgaXNvX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG4tLVxubmV0L2JsdWV0b290aC9pc28uYy05NjEtXHRcdGJ0X3NrKHNrKS1cdTAwM2VmbGFncyA9IGJ0X3NrKHBhcmVudCktXHUwMDNlZmxhZ3M7XG5uZXQvYmx1ZXRvb3RoL2lzby5jOjk2MjpcdFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XG5uZXQvYmx1ZXRvb3RoL2lzby5jLTk2My1cdH1cbi0tXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX3NvY2suYz0xOTY3PXN0YXRpYyB2b2lkIGwyY2FwX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG4tLVxubmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMtMTk3OS1cdFx0ICovXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX3NvY2suYzoxOTgwOlx0XHRzZWN1cml0eV9za19jbG9uZShwYXJlbnQsIHNrKTtcbm5ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jLTE5ODEtXHR9IGVsc2Uge1xuLS1cbm5ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYz0yNTA9c3RhdGljIHZvaWQgcmZjb21tX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG4tLVxubmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jLTI2My1cbm5ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYzoyNjQ6XHRcdHNlY3VyaXR5X3NrX2Nsb25lKHBhcmVudCwgc2spO1xubmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jLTI2NS1cdH0gZWxzZSB7XG4tLVxubmV0L2JsdWV0b290aC9zY28uYz01OTY9c3RhdGljIHZvaWQgc2NvX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXG4tLVxubmV0L2JsdWV0b290aC9zY28uYy02MDItXHRcdGJ0X3NrKHNrKS1cdTAwM2VmbGFncyA9IGJ0X3NrKHBhcmVudCktXHUwMDNlZmxhZ3M7XG5uZXQvYmx1ZXRvb3RoL3Njby5jOjYwMzpcdFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XG5uZXQvYmx1ZXRvb3RoL3Njby5jLTYwNC1cdH1cbi0tXG5uZXQvY29yZS9zb2NrLmM9MjIwOT1zdGF0aWMgdm9pZCBzb2NrX2NvcHkoc3RydWN0IHNvY2sgKm5zaywgY29uc3Qgc3RydWN0IHNvY2sgKm9zaylcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjIxNy1cdCAqIHdlIG11c3QgY2hlY2sgaWYgc2tfdHhfcXVldWVfY2xlYXIoKSBpcyBjYWxsZWQgYWZ0ZXJcbm5ldC9jb3JlL3NvY2suYzoyMjE4Olx0ICogc29ja19jb3B5KCkgaW4gc2tfY2xvbmVfbG9jaygpLlxubmV0L2NvcmUvc29jay5jLTIyMTktXHQgKi9cbi0tXG5uZXQvY29yZS9zb2NrLmMtMjIzMi1cdG5zay1cdTAwM2Vza19zZWN1cml0eSA9IHNwdHI7XG5uZXQvY29yZS9zb2NrLmM6MjIzMzpcdHNlY3VyaXR5X3NrX2Nsb25lKG9zaywgbnNrKTtcbm5ldC9jb3JlL3NvY2suYy0yMjM0LSNlbmRpZlxuLS1cbm5ldC9jb3JlL3NvY2suYz0yNDQ0PXN0YXRpYyB2b2lkIHNrX2luaXRfY29tbW9uKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjQ3MC0vKipcbm5ldC9jb3JlL3NvY2suYzoyNDcxOiAqIHNrX2Nsb25lIC0gY2xvbmUgYSBzb2NrZXRcbm5ldC9jb3JlL3NvY2suYy0yNDcyLSAqIEBzazogdGhlIHNvY2tldCB0byBjbG9uZVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNDc4LSAqL1xubmV0L2NvcmUvc29jay5jOjI0Nzk6c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXG5uZXQvY29yZS9zb2NrLmMtMjQ4MC1cdFx0ICAgICAgYm9vbCBsb2NrKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNTQ5LVxubmV0L2NvcmUvc29jay5jOjI1NTA6XHRjZ3JvdXBfc2tfY2xvbmUoXHUwMDI2bmV3c2stXHUwMDNlc2tfY2dycF9kYXRhKTtcbm5ldC9jb3JlL3NvY2suYy0yNTUxLVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNTY3LVxubmV0L2NvcmUvc29jay5jOjI1Njg6XHRpZiAodW5saWtlbHkoIWlzX2NoYXJnZWQgfHwgeGZybV9za19jbG9uZV9wb2xpY3kobmV3c2ssIHNrKSkpIHtcbm5ldC9jb3JlL3NvY2suYy0yNTY5LVx0XHQvKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbiYjMzk7dCB1bmNoYXJnZSB0aGUgbmV3XG4tLVxubmV0L2NvcmUvc29jay5jLTI2MTgtfVxubmV0L2NvcmUvc29jay5jOjI2MTk6RVhQT1JUX1NZTUJPTF9HUEwoc2tfY2xvbmUpO1xubmV0L2NvcmUvc29jay5jLTI2MjAtXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05MDQ9dm9pZCBfX3JlcXNrX2ZyZWUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTEyLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5MTM6c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTQtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA0OS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA1MDpcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDUxLVx0XHRpZiAoIW5yZXEpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMTg1PXN0YXRpYyB2b2lkIGluZXRfY2xvbmVfdWxwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHNvY2sgKm5ld3NrLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5Ni0vKipcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTE5NzogKlx0aW5ldF9jc2tfY2xvbmVfbG9jayAtIGNsb25lIGFuIGluZXQgc29ja2V0LCBhbmQgbG9jayBpdHMgY2xvbmVcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5OC0gKlx0QHNrOiB0aGUgc29ja2V0IHRvIGNsb25lXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjAzLSAqL1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxMjA0OnN0cnVjdCBzb2NrICppbmV0X2Nza19jbG9uZV9sb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIwNS1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjA3LXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTIwODpcdHN0cnVjdCBzb2NrICpuZXdzayA9IHNrX2Nsb25lX2xvY2soc2ssIHByaW9yaXR5KTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTIwOS1cdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzaztcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEyNTktXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEyNjA6XHRzZWN1cml0eV9pbmV0X2Nza19jbG9uZShuZXdzaywgcmVxKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI2MS1cbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEzMDQ9dm9pZCBpbmV0X2Nza19wcmVwYXJlX2ZvcmNlZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA2LXtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTMwNzpcdC8qIHNrX2Nsb25lX2xvY2sgbG9ja2VkIHRoZSBzb2NrZXQgYW5kIHNldCByZWZjbnQgdG8gMiAqL1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA4LVx0YmhfdW5sb2NrX3NvY2soc2spO1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQxNz1zdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY29tcGxldGVfaGFzaGRhbmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKmNoaWxkLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzMC1cdFx0XHQvKiBob2xkIGEgcmVmY250IGZvciB0aGUgbnJlcS1cdTAwM2Vyc2tfbGlzdGVuZXJcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQzMTpcdFx0XHQgKiB3aGljaCBpcyBhc3NpZ25lZCBpbiBpbmV0X3JlcXNrX2Nsb25lKClcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzMi1cdFx0XHQgKi9cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzMy1cdFx0XHRzb2NrX2hvbGQoc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM0Olx0XHRcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM1LVx0XHRcdGlmICghbnJlcSkge1xuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQ2Nj12b2lkIGluZXRfY3NrX2xpc3Rlbl9zdG9wKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0OTAtXHRcdGlmIChuc2spIHtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQ5MTpcdFx0XHRucmVxID0gaW5ldF9yZXFza19jbG9uZShyZXEsIG5zayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0OTItXHRcdFx0aWYgKG5yZXEpIHtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI1PWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzQ0LVx0XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfd3JpdGVfc3BhY2UsIHBzb2NrLVx1MDAzZXNhdmVkX3dyaXRlX3NwYWNlKTtcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDU6XHRcdFx0LyogUGFpcnMgd2l0aCBsb2NrbGVzcyByZWFkIGluIHNrX2Nsb25lX2xvY2soKSAqL1xubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ni1cdFx0XHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIHBzb2NrLVx1MDAzZXNrX3Byb3RvKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjc1ODpcdC8qIFBhaXJzIHdpdGggbG9ja2xlc3MgcmVhZCBpbiBza19jbG9uZV9sb2NrKCkgKi9cbm5ldC9pcHY0L3RjcF9icGYuYy03NTktXHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIFx1MDAyNnRjcF9icGZfcHJvdHNbZmFtaWx5XVtjb25maWddKTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTcxNz1zdGF0aWMgdm9pZCB0Y3BfdjRfc2VuZF9yZXNldChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy04NzgtXHRcdHRyYW5zbWl0X3RpbWUgPSB0Y3BfdHJhbnNtaXRfdGltZShzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjg3OTpcdFx0eGZybV9za19jbG9uZV9wb2xpY3koY3RsX3NrLCBzayk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTg4MC1cdFx0dHhoYXNoID0gKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NTQ2PXN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy01NDkte1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjU1MDpcdHN0cnVjdCBzb2NrICpuZXdzayA9IGluZXRfY3NrX2Nsb25lX2xvY2soc2ssIHJlcSwgR0ZQX0FUT01JQyk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTUxLVx0Y29uc3Qgc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxID0gaW5ldF9yc2socmVxKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDU4PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnBhcmVudClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDYxLVx0XHRzay1cdTAwM2Vza190eXBlID0gcGFyZW50LVx1MDAzZXNrX3R5cGU7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDYyOlx0XHRzZWN1cml0eV9za19jbG9uZShwYXJlbnQsIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NjMtXHR9XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzY3NT1zdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzY5NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM2OTU6c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzY5Ni1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MDAtXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM3MDE6XHRzdHJ1Y3Qgc29jayAqbnNrID0gc2tfY2xvbmVfbG9jayhzaywgR0ZQX0FUT01JQyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzAyLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzQwLVx0c29ja19yZXNldF9mbGFnKG5zaywgU09DS19SQ1VfRlJFRSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzQxOlx0c2VjdXJpdHlfaW5ldF9jc2tfY2xvbmUobnNrLCByZXEpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzc0Mi1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD05MjA9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkyMi1cbm5ldC9tcHRjcC9wcm90b2NvbC5oOjkyMzpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05MjQtXHRcdFx0XHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgwND1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy04ODYtXHRcdGlmIChjdHgtXHUwMDNlbXBfY2FwYWJsZSkge1xubmV0L21wdGNwL3N1YmZsb3cuYzo4ODc6XHRcdFx0Y3R4LVx1MDAzZWNvbm4gPSBtcHRjcF9za19jbG9uZV9pbml0KGxpc3RlbmVyLVx1MDAzZWNvbm4sIFx1MDAyNm1wX29wdCwgY2hpbGQsIHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg4OC1cdFx0XHRpZiAoIWN0eC1cdTAwM2Vjb25uKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTczOD12b2lkIF9fbXB0Y3BfaW5oZXJpdF9jZ3JwX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc0OC1cdFx0KnNza19jZCA9ICpza19jZDtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc0OTpcdFx0Y2dyb3VwX3NrX2Nsb25lKHNrX2NkKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc1MC1cdH1cbi0tXG5uZXQvc2N0cC9zb2NrZXQuYz00ODU2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc2N0cF9jbG9uZV9zb2NrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvc2N0cC9zb2NrZXQuYy00ODU5LXtcbm5ldC9zY3RwL3NvY2tldC5jOjQ4NjA6XHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19jbG9uZShzaywgR0ZQX0tFUk5FTCwgZmFsc2UpO1xubmV0L3NjdHAvc29ja2V0LmMtNDg2MS1cdHN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQ7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDg2Ny1cbm5ldC9zY3RwL3NvY2tldC5jOjQ4Njg6XHQvKiBza19jbG9uZSgpIHNldHMgcmVmY250IHRvIDIgYW5kIGluY3JlbWVudHMgc29ja2V0c19hbGxvY2F0ZWQgKi9cbm5ldC9zY3RwL3NvY2tldC5jLTQ4NjktXHRzb2NrX3B1dChuZXdzayk7XG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDkxNy1cdCAqL1xubmV0L3NjdHAvc29ja2V0LmM6NDkxODpcdHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoYXNvYywgc2ssIG5ld3NrKTtcbm5ldC9zY3RwL3NvY2tldC5jLTQ5MTktXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjcyMT1zdGF0aWMgaW50IHRpcGNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld19zb2NrLFxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI3NDctXHRcdGdvdG8gZXhpdDtcbm5ldC90aXBjL3NvY2tldC5jOjI3NDg6XHRzZWN1cml0eV9za19jbG9uZShzb2NrLVx1MDAzZXNrLCBuZXdfc29jay1cdTAwM2Vzayk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yNzQ5LVxuLS1cbm5ldC90bHMvdGxzX21haW4uYz0xMDcxPXN0YXRpYyB2b2lkIHRsc191cGRhdGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG8gKnAsXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTEwODItXHR9IGVsc2Uge1xubmV0L3Rscy90bHNfbWFpbi5jOjEwODM6XHRcdC8qIFBhaXJzIHdpdGggbG9ja2xlc3MgcmVhZCBpbiBza19jbG9uZV9sb2NrKCkuICovXG5uZXQvdGxzL3Rsc19tYWluLmMtMTA4NC1cdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19wcm90LCBwKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05NTQtXHRcdHZzay1cdTAwM2VidWZmZXJfbWF4X3NpemUgPSBwc2stXHUwMDNlYnVmZmVyX21heF9zaXplO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjk1NTpcdFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTU2LVx0fSBlbHNlIHtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTI0MDk9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqY2xvbmVfcG9saWN5KGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBpbnQgZGlyKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjQ0MC1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjQ0MTppbnQgX194ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI0NDIte1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jPTEwODc9c3RhdGljIHZvaWQgYXBwYXJtb3Jfc2tfZnJlZV9zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2spXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTA5Ny0vKipcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjEwOTg6ICogYXBwYXJtb3Jfc2tfY2xvbmVfc2VjdXJpdHkgLSBjbG9uZSB0aGUgc2tfc2VjdXJpdHkgZmllbGRcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTEwOTktICogQHNrOiBzb2NrIHRvIGhhdmUgc2VjdXJpdHkgY2xvbmVkXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTEwMS0gKi9cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjExMDI6c3RhdGljIHZvaWQgYXBwYXJtb3Jfc2tfY2xvbmVfc2VjdXJpdHkoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTEwMy1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTc2Nz1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBhcHBhcm1vcl9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xODA2LVx0TFNNX0hPT0tfSU5JVChza19mcmVlX3NlY3VyaXR5LCBhcHBhcm1vcl9za19mcmVlX3NlY3VyaXR5KSxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jOjE4MDc6XHRMU01fSE9PS19JTklUKHNrX2Nsb25lX3NlY3VyaXR5LCBhcHBhcm1vcl9za19jbG9uZV9zZWN1cml0eSksXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xODA4LVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9NDUwOT12b2lkIHNlY3VyaXR5X3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDUxNi0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDUxNzogKiBzZWN1cml0eV9za19jbG9uZSgpIC0gQ2xvbmUgYSBzb2NrJiMzOTtzIExTTSBzdGF0ZVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTE4LSAqIEBzazogb3JpZ2luYWwgc29ja1xuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDUyMi0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDUyMzp2b2lkIHNlY3VyaXR5X3NrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI0LXtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDUyNTpcdGNhbGxfdm9pZF9ob29rKHNrX2Nsb25lX3NlY3VyaXR5LCBzaywgbmV3c2spO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI2LX1cbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDUyNzpFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X3NrX2Nsb25lKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDUyOC1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTQ1ODU9RVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdCk7XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTg3LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NTg4OiAqIHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKCkgLSBTZXQgbmV3IHNvY2sgTFNNIHN0YXRlIGJhc2VkIG9uIHJlcXVlc3Rfc29ja1xuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTg5LSAqIEBuZXdzazogbmV3IHNvY2tcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1OTMtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ1OTQ6dm9pZCBzZWN1cml0eV9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqbmV3c2ssXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1OTUtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1OTYte1xuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NTk3Olx0Y2FsbF92b2lkX2hvb2soaW5ldF9jc2tfY2xvbmUsIG5ld3NrLCByZXEpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTk4LX1cbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTQ3ODE9RVhQT1JUX1NZTUJPTChzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdCk7XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NzgzLS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0Nzg0OiAqIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKSAtIENsb25lIGEgU0NUUCBzb2NrJiMzOTtzIExTTSBzdGF0ZVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00Nzg1LSAqIEBhc29jOiBTQ1RQIGFzc29jaWF0aW9uXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NzkyLSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NzkzOnZvaWQgc2VjdXJpdHlfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00Nzk0LVx0XHRcdCAgICBzdHJ1Y3Qgc29jayAqbmV3c2spXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ3OTUte1xuc2VjdXJpdHkvc2VjdXJpdHkuYzo0Nzk2Olx0Y2FsbF92b2lkX2hvb2soc2N0cF9za19jbG9uZSwgYXNvYywgc2ssIG5ld3NrKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDc5Ny19XG5zZWN1cml0eS9zZWN1cml0eS5jOjQ3OTg6RVhQT1JUX1NZTUJPTChzZWN1cml0eV9zY3RwX3NrX2Nsb25lKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDc5OS1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTU3ND1zdGF0aWMgdm9pZCBzZWxpbnV4X3NrX2ZyZWVfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01NTgwLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU1ODE6c3RhdGljIHZvaWQgc2VsaW51eF9za19jbG9uZV9zZWN1cml0eShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01NTgyLXtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTY3Nz1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9hc3NvY19yZXF1ZXN0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01NjkzLVx0ICogc29ja2V0cyBhbmQgcGVlbGVkIG9mZiBjb25uZWN0aW9ucyBhcyB0aGV5IGNhdXNlIGEgbmV3XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTY5NDpcdCAqIHNvY2tldCB0byBiZSBnZW5lcmF0ZWQuIHNlbGludXhfc2N0cF9za19jbG9uZSgpIHdpbGwgdGhlblxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU2OTUtXHQgKiBwbHVnIHRoaXMgaW50byB0aGUgbmV3IHNvY2tldC5cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTcxMD1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9hc3NvY19lc3RhYmxpc2hlZChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTcxOC1cdC8qIEluaGVyaXQgc2VjaWQgZnJvbSB0aGUgcGFyZW50IHNvY2tldCAtIHRoaXMgd2lsbCBiZSBwaWNrZWQgdXBcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1NzE5Olx0ICogYnkgc2VsaW51eF9zY3RwX3NrX2Nsb25lKCkgaWYgdGhlIGFzc29jaWF0aW9uIGdldHMgcGVlbGVkIG9mZlxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU3MjAtXHQgKiBpbnRvIGEgbmV3IHNvY2tldC5cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTczMD1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9iaW5kX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTgwNi0vKiBDYWxsZWQgd2hlbmV2ZXIgYSBuZXcgc29ja2V0IGlzIGNyZWF0ZWQgYnkgYWNjZXB0KDIpIG9yIHNjdHBfcGVlbG9mZigzKS4gKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1ODA3OnN0YXRpYyB2b2lkIHNlbGludXhfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4MDgtXHRcdFx0XHQgIHN0cnVjdCBzb2NrICpuZXdzaylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTgxNi1cdGlmICghc2VsaW51eF9wb2xpY3ljYXBfZXh0c29ja2NsYXNzKCkpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTgxNzpcdFx0cmV0dXJuIHNlbGludXhfc2tfY2xvbmVfc2VjdXJpdHkoc2ssIG5ld3NrKTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODE4LVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODIxLVx0bmV3c2tzZWMtXHUwMDNlc2NsYXNzID0gc2tzZWMtXHUwMDNlc2NsYXNzO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU4MjI6XHRzZWxpbnV4X25ldGxibF9zY3RwX3NrX2Nsb25lKHNrLCBuZXdzayk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTgyMy19XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTU4NDA9c3RhdGljIGludCBzZWxpbnV4X2luZXRfY29ubl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg2MC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1ODYxOnN0YXRpYyB2b2lkIHNlbGludXhfaW5ldF9jc2tfY2xvbmUoc3RydWN0IHNvY2sgKm5ld3NrLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4NjItXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4NzQtXHQgKiB0aHJlYWQgd2l0aCBhY2Nlc3MgdG8gbmV3c2tzZWMgKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1ODc1Olx0c2VsaW51eF9uZXRsYmxfaW5ldF9jc2tfY2xvbmUobmV3c2ssIHJlcS1cdTAwM2Vyc2tfb3BzLVx1MDAzZWZhbWlseSk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg3Ni19XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1NjA9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczMC1cdExTTV9IT09LX0lOSVQoc2tfZnJlZV9zZWN1cml0eSwgc2VsaW51eF9za19mcmVlX3NlY3VyaXR5KSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NzMxOlx0TFNNX0hPT0tfSU5JVChza19jbG9uZV9zZWN1cml0eSwgc2VsaW51eF9za19jbG9uZV9zZWN1cml0eSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczMi1cdExTTV9IT09LX0lOSVQoc2tfZ2V0c2VjaWQsIHNlbGludXhfc2tfZ2V0c2VjaWQpLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NzM0LVx0TFNNX0hPT0tfSU5JVChzY3RwX2Fzc29jX3JlcXVlc3QsIHNlbGludXhfc2N0cF9hc3NvY19yZXF1ZXN0KSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NzM1Olx0TFNNX0hPT0tfSU5JVChzY3RwX3NrX2Nsb25lLCBzZWxpbnV4X3NjdHBfc2tfY2xvbmUpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc3MzYtXHRMU01fSE9PS19JTklUKHNjdHBfYmluZF9jb25uZWN0LCBzZWxpbnV4X3NjdHBfYmluZF9jb25uZWN0KSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczOS1cdExTTV9IT09LX0lOSVQoaW5ldF9jb25uX3JlcXVlc3QsIHNlbGludXhfaW5ldF9jb25uX3JlcXVlc3QpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc3NDA6XHRMU01fSE9PS19JTklUKGluZXRfY3NrX2Nsb25lLCBzZWxpbnV4X2luZXRfY3NrX2Nsb25lKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NzQxLVx0TFNNX0hPT0tfSU5JVChpbmV0X2Nvbm5fZXN0YWJsaXNoZWQsIHNlbGludXhfaW5ldF9jb25uX2VzdGFibGlzaGVkKSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaD00MD1pbnQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1MTYgZmFtaWx5KTtcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRsYWJlbC5oOjQxOnZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jc2tfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCB1MTYgZmFtaWx5KTtcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRsYWJlbC5oOjQyOnZvaWQgc2VsaW51eF9uZXRsYmxfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzayk7XG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaC00My1pbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmg9OTY9c3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkzMwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTb2NrZXQgQ2xvbmluZyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBzb2NrZXQgY2xvbmluZyBtZWNoYW5pc20gKGBza19jbG9uZWApLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCDigJMgdGhpcyBzb3VuZHMgbGlrZSBhIGNvcmUgbmV0d29ya2luZyBpc3N1ZS4KCkVzc2VudGlhbGx5LCBgc29ja19jb3B5YCBpbiBgc2tfY2xvbmVgIGRvZXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGBzb2NrYCBzdHJ1Y3R1cmUuIFRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGBzay0mZ3Q7cHNwX2Fzc29jYCBwb2ludGVyLiBJZiB0aGUgb3JpZ2luYWwgc29ja2V0IChgc2tgKSBoYXMgdGhpcyBgcHNwX2Fzc29jYCBwb2ludGVyIHNldCwgdGhlIGNsb25lZCBzb2NrZXQgKGBuZXdza2ApIGdldHMgYSAqZGlyZWN0KiBjb3B5IG9mIHRoYXQgcG9pbnRlcjogYG5ld3NrLSZndDtwc3BfYXNzb2MgPSBzay0mZ3Q7cHNwX2Fzc29jYC4gTm8gcmVmZXJlbmNlIGNvdW50aW5nLCBubyBzYWZlZ3VhcmRzLCBqdXN0IGEgc3RyYWlnaHQgcG9pbnRlciBhc3NpZ25tZW50LgoKVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGRpY2V5LiBJZiB0aGUgcGFyZW50IHNvY2tldCAoYHNrYCkgYW5kIHRoZSBjaGlsZCBzb2NrZXQgKGBuZXdza2ApIG5vdyBib3RoIGJlbGlldmUgdGhleSBvd24gYHBzcF9hc3NvY2AsIHdlIGhhdmUgYSBjb2xsaXNpb24uIERlc3Ryb3lpbmcgZWl0aGVyIHNvY2tldCBvciBleHBsaWNpdGx5IGNhbGxpbmcgYHBzcF9za19hc3NvY19mcmVlKG5ld3NrKWAgb24gdGhlIGNsb25lIHdvdWxkIGNhdXNlIGBwc3BfYXNzb2NgIHRvIGJlIGZyZWVkLCBwb3RlbnRpYWxseSBsZWF2aW5nIGEgZGFuZ2xpbmcgcG9pbnRlciBmb3IgdGhlIG90aGVyIHNvY2tldCBvciBhbnkgb3RoZXIgc3Vic2VxdWVudCB1c2UuIEFuZCB0aGlzIGNvdWxkIGxlYWQgdG8gdGhlIGNsYXNzaWMgJiMzNDt1c2UtYWZ0ZXItZnJlZSYjMzQ7IG9yICYjMzQ7ZG91YmxlIGZyZWUmIzM0OyBzY2VuYXJpb3MuCgpUaGUgcHJvcG9zZWQgcGF0Y2ggaXMgc21hcnQuIFRoZXkmIzM5O3JlIGluaXRpYWxpemluZyBgbmV3c2stJmd0O3BzcF9hc3NvY2AgdG8gYE5VTExgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5IHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtwc3BfYXNzb2MsIE5VTEwpO2AuIFRoaXMgZWZmZWN0aXZlbHkgcHJldmVudHMgdGhlIGRhbmdsaW5nIHBvaW50ZXIgaXNzdWUgYnkgZW5zdXJpbmcgdGhlIGNsb25lIGRvZXNuJiMzOTt0IHBvaW50IHRvIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzb2NrZXRzIHVzZSBgcHNwX2Fzc29jYCBhbmQgd2hlcmUgYHBzcF9za19hc3NvY19mcmVlYCBpcyBjYWxsZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdCBhbmQgdGhlIG5lZWQgZm9yIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoIGZvciBib3RoIHNvY2tldCBkZXN0cnVjdGlvbiBhbmQgZXhwbGljaXQgYHBzcF9za19hc3NvY19mcmVlYCBjYWxscyB0byBzb2xpZGlmeSB0aGlzIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzcF9za19hc3NvY19mcmVlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zMz11bnNpZ25lZCBpbnQgcHNwX2tleV9zaXplKHUzMiB2ZXJzaW9uKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzUtdm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU3LSNlbHNlXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spIHsgfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1OS1zdGF0aWMgaW5saW5lIHZvaWRcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTQwPXZvaWQgaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY2LVx0ZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cdTAwM2Vza19yeF9kc3QsIDEpKTtcbm5ldC9pcHY0L2FmX2luZXQuYzoxNjc6XHRwc3Bfc2tfYXNzb2NfZnJlZShzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY4LX1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTE4PXZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTEyMy1cbm5ldC9wc3AvcHNwX3NvY2suYzoxMjQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5OTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEtlcm5lbCBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgc2lnbmlmaWNhbmNlIGZvciBmdXp6aW5nIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIHJlZmNvdW50aW5nIHByb2JsZW0gcmVsYXRlZCB0byBob3cgYHBzcF9za19hc3NvY2AgaXMgaGFuZGxlZCBkdXJpbmcgc29ja2V0IGNsb25pbmcuIFNwZWNpZmljYWxseSwgYGluZXRfc29ja19kZXN0cnVjdGAgY2FsbHMgYHBzcF9za19hc3NvY19mcmVlYCwgd2hpY2ggaW4gdHVybiBpbnZvbHZlcyBgcHNwX2Fzc29jX3B1dGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGEgbGlzdGVuaW5nIFRDUCBzb2NrZXQsIG9yIGEgY2xvbmVkIHNvY2tldCBkZXJpdmVkIGZyb20gaXQsIGlzIGNsb25lZCB2aWEgYHNrX2Nsb25lX2xvY2tgIGFuZCBgc2tfY2xvbmVgLiBgc29ja19jb3B5YCBkdXBsaWNhdGVzIHRoZSBzb2NrZXQgc3RydWN0dXJlIChgc2tgKSB0byBgbmV3c2tgLiBJZiB0aGUgYHNrLSZndDtwc3BfYXNzb2NgIHBvaW50ZXIgd2FzIHNldCwgYG5ld3NrLSZndDtwc3BfYXNzb2NgIHdvdWxkIGluaXRpYWxseSBwb2ludCB0byB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24gKGBwYXNgKSB3aXRob3V0IGEgcmVmY291bnQgaW5jcmVhc2UuIFRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIHRoZW4gbGVhZCB0byBhIGRvdWJsZSBkZWNyZW1lbnQgb2YgdGhlIHJlZmVyZW5jZSBjb3VudCB3aGVuIGJvdGggc29ja2V0cyBhcmUgZXZlbnR1YWxseSBkZXN0cm95ZWQsIGNhdXNpbmcgYSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBjb25kaXRpb24uCgpUaGUgZml4LCBieSBzZXR0aW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtwc3BfYXNzb2MsIE5VTEwpO2AsIGluaXRpYWxpemVzIHRoZSBgbmV3c2stJmd0O3BzcF9hc3NvY2AgdG8gYE5VTExgLCBwcmV2ZW50aW5nIHRoZSBkdXBsaWNhdGUgcmVmZXJlbmNlLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4KCjEuICAqKklzIHRoaXMgYSBtb2RpZmljYXRpb24gdG8gcmVhY2hhYmxlIGtlcm5lbCBsb2dpYz8qKiBBYnNvbHV0ZWx5LCBgc2tfY2xvbmUoKWAgaW4gYG5ldC9jb3JlL3NvY2suY2AgaXMgdGhlIHNvY2tldCBjbG9uaW5nIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyB1c2VkIGFjcm9zcyBhIHZhcmlldHkgb2YgbmV0d29ya2luZyBwcm90b2NvbHMgKFRDUCwgU0NUUCwgTVBUQ1ApIHdoZW5ldmVyIGEgbmV3IGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQgZnJvbSBhIGxpc3RlbmluZyBzb2NrZXQuIFRoaXMgZml4IG1vZGlmaWVzIHRoYXQgY29yZSBjbG9uaW5nIGxvZ2ljIHdoZW4gYElORVRfUFNQYCBpcyBlbmFibGVkLgoyLiAgKipDYW4gdGhpcyBiZSBmdXp6ZWQgaW4gY29tbW9uIGVudmlyb25tZW50cz8qKiBZZXMsIHRoaXMgaXMgYSBwdXJlIHNvZnR3YXJlLWJhc2VkIG9wZXJhdGlvbiwgaW52b2x2aW5nIG5ldHdvcmsgcHJvdG9jb2xzLiBJdCBjYW4gYmUgZXhlcmNpc2VkIGluIHN0YW5kYXJkIExpbnV4IGVudmlyb25tZW50cywgUUVNVSwgb3IgZXZlbiB3aXRoIG5ldGRldnNpbS92ZXRoL2xvb3BiYWNrIHNldHVwcy4KMy4gICoqSXMgaXQgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyoqIERlZmluaXRlbHkuIFRoaXMgZml4ZXMgYSByZWZjb3VudGluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgcmVsYXRlZCB0byBQU1Agd2l0aGluIHRoZSBjcml0aWNhbCBwcm9jZXNzIG9mIHNvY2tldCBjbG9uaW5nLiBQU1AgaXMgYSBuZXR3b3JraW5nIGZlYXR1cmUgZW5hYmxlZCBieSBgQ09ORklHX0lORVRfUFNQYC4gSXQmIzM5O3MgdGVzdGFibGUgd2l0aCBmdXp6aW5nIHVzaW5nIHRoZSBzb2NrZXQgb3BlcmF0aW9ucywgbGlrZSBUQ1AgYWNjZXB0LCBsaXN0ZW4sIGNvbm5lY3QsIGFuZCBwb3RlbnRpYWxseSBuZXRsaW5rIGNvbW1hbmRzIHJlbGF0ZWQgdG8gUFNQLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGxvb2sgYXQgYG5ldC9wc3AvS2NvbmZpZ2AgYW5kIGlmIGl0IGhhcyBhbnkgZnVydGhlciBkZXBlbmRlbmNpZXMuIFdlJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgSU5FVF9QU1BgIGRlcGVuZHMgb24gYElORVRgLCBidXQgYXJlIHRoZXJlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIGluIGBuZXQvcHNwL0tjb25maWdgIGl0c2VsZiwgb3IgcGVyaGFwcyBgbmV0L0tjb25maWdgIG9yIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ2A/IEl0JiMzOTtzIGFsd2F5cyBpbXBvcnRhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZS4qbmV0L3BzcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz04ND1zb3VyY2UgXCYjMzQ7bmV0L3BhY2tldC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzo4NTpzb3VyY2UgXCYjMzQ7bmV0L3BzcC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy04Ni1zb3VyY2UgXCYjMzQ7bmV0L3VuaXgvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzIzOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgUFNQIFNlY3VyaXR5IFByb3RvY29sIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBnaXZlbiB0aGlzIEtjb25maWcgZW50cnkgZm9yIHRoZSBQU1AgU2VjdXJpdHkgUHJvdG9jb2wuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBuZXQvcHNwL0tjb25maWdgIGZpbGUgZGlyZWN0bHkgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJJiMzOTttIG5vdGluZyB0aGUgYm9vbGVhbiBuYXR1cmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGUgZGVwZW5kZW5jeSBvbiBgSU5FVGAsIGFuZCB0aGUgc2VsZWN0IHN0YXRlbWVudHMgY2hvb3NpbmcgYFNLQl9ERUNSWVBURURgLCBgU0tCX0VYVEVOU0lPTlNgLCBhbmQgYFNPQ0tfVkFMSURBVEVfWE1JVGAuIFRoZXNlIGRlcGVuZGVuY2llcyBnaXZlIG1lIGltbWVkaWF0ZSBjbHVlcyBhYm91dCB0aGUgdW5kZXJseWluZyBrZXJuZWwgYXJjaGl0ZWN0dXJlIGFuZCBob3cgdGhpcyBwcm90b2NvbCBpbnRlZ3JhdGVzLiBUaGUgZG9jdW1lbnRhdGlvbiBsaW5rIHBvaW50cyB0byB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY2F0aW9uLCB3aGljaCBJJiMzOTtsbCBhYnNvbHV0ZWx5IHJldmlldywgbGlrZWx5IG11bHRpcGxlIHRpbWVzLiBUaGUgJiMzNDtJZiB1bnN1cmUsIHNheSBOJiMzNDsgaGVscCB0ZXh0IGlzIHN0YW5kYXJkLCBidXQgSSB3aWxsIGJlIHN1cmUgdG8gYXZvaWQgdGhhdC4KCk5vdywgSSB3YW50IGEgbW9yZSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiBhY3Jvc3MgYWxsIEtjb25maWcgZmlsZXMgYW5kIGhlYWRlciBmaWxlcyBpbiB0aGUgcmVsZXZhbnQgYXJlYXMgdG8gY2hlY2sgZXZlcnkgcGxhY2UgYElORVRfUFNQYCBpcyByZWZlcmVuY2VkLiBDcm9zcy1yZWZlcmVuY2luZyB0aGVzZSBpcyBpbXBvcnRhbnQuIE5leHQsIEkgbmVlZCB0byBrbm93IHRoZSBydW50aW1lIGNvbmZpZ3VyYXRpb24uIEhvdyBpcyBQU1AgYWN0dWFsbHkgKmFzc29jaWF0ZWQqIHdpdGggYSBzb2NrZXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gZm9yIGRvaW5nIHRoaXMuIFRoYXQgd2lsbCBwcm9iYWJseSByZXF1aXJlIG1vcmUgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBidXQgaWRlYWxseSwgSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCBtYW5pcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBuZXRsaW5rIGludGVyZmFjZXMgb3IgYHNldHNvY2tvcHRgIG9wdGlvbnMgcmVsYXRlZCB0byAmIzM0O1BTUCYjMzQ7LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgdXNlZCB3aWxsIGNvbWUgZnJvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNwX3NvY2tfYXNzb2Nfc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9wc3AvcHNwLmg9MjU9dm9pZCBwc3BfZGV2X3R4X2tleV9kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcbm5ldC9wc3AvcHNwLmg6MjY6aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbm5ldC9wc3AvcHNwLmgtMjctXHRcdFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbm5ldC9wc3AvcHNwLmgtMjgtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L3BzcC9wc3AuaDoyOTppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbm5ldC9wc3AvcHNwLmgtMzAtXHRcdFx0ICB1MzIgdmVyc2lvbiwgc3RydWN0IHBzcF9rZXlfcGFyc2VkICprZXksXG4tLVxubmV0L3BzcC9wc3BfbmwuYz03NzA9aW50IHBzcF9ubF9yeF9hc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3BzcC9wc3BfbmwuYy04MDktXG5uZXQvcHNwL3BzcF9ubC5jOjgxMDpcdGVyciA9IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzb2NrZXQtXHUwMDNlc2ssIHBhcywgXHUwMDI2a2V5LCBpbmZvLVx1MDAzZWV4dGFjayk7XG5uZXQvcHNwL3BzcF9ubC5jLTgxMS1cdGlmIChlcnIpIHtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTgyNj1pbnQgcHNwX25sX3R4X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTg1Ny1cbm5ldC9wc3AvcHNwX25sLmM6ODU4Olx0ZXJyID0gcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHNvY2tldC1cdTAwM2VzaywgcHNkLCB2ZXJzaW9uLCBcdTAwMjZrZXksXG5uZXQvcHNwL3BzcF9ubC5jLTg1OS1cdFx0XHRcdCAgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEyND12b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMxLVxubmV0L3BzcC9wc3Bfc29jay5jOjEzMjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0xNTg9c3RhdGljIGludCBwc3Bfc29ja19yZWN2X3F1ZXVlX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNzYtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTc3OmludCBwc3Bfc29ja19hc3NvY19zZXRfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2RldiAqcHNkLFxubmV0L3BzcC9wc3Bfc29jay5jLTE3OC1cdFx0XHQgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgc25pcHBldCBvZiBjb2RlLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIGFuIGV4cGVydCB3b3VsZDoKCioqRGl2aW5nIGludG8gYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAgYW5kIGBwc3Bfc29ja19hc3NvY19zZXRfdHhgKioKClJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggc29ja2V0IGFzc29jaWF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXQvcHNwL3BzcF9zb2NrLmNgIGZpbGUuIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBhbmQgYHBzcF9zb2NrX2Fzc29jX3NldF90eGAuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgY29udHJvbCB0aGUgc2V0dXAgb2YgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgYXNzb2NpYXRpb25zIGZvciB0aGVzZSBwYXJ0aWN1bGFyIFBTUCBzb2NrZXRzLiBJJiMzOTttIGFzc3VtaW5nICYjMzQ7UFNQJiMzNDsgaXMgc29tZXRoaW5nIHByb3ByaWV0YXJ5IG9yIHNwZWNpZmljIHRvIHRoaXMgbmV0d29yayBzdGFjazsga25vd2luZyB0aGlzLCBJIGNhbiBpbmZlciB0aGF0IHRoZSBhc3NvY2lhdGlvbnMgYmVpbmcgc2V0IGhlcmUgYXJlIGxpa2VseSB0aWVkIHRvIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgb3IgbWVjaGFuaXNtIGZvciBlZmZpY2llbnRseSBoYW5kbGluZyB0aGVzZSBzb2NrZXRzLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAmIzM0O2Fzc29jaWF0aW9uJiMzNDsgbWVhbnMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhYm91dCBsaW5raW5nIGEgc29ja2V0IHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2UsIGZsb3cgSUQsIHF1ZXVlLCBvciBldmVuIGEgcGFydGljdWxhciBidWZmZXI/IElzIHRoaXMgYWJvdXQgc2V0dGluZyB1cCBhIGNvbnRleHQgZm9yIHBhY2tldCBwcm9jZXNzaW5nIG9yIGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uPyBUaGUgJiMzNDtzZXRcX3J4JiMzNDsgYW5kICYjMzQ7c2V0XF90eCYjMzQ7IGRpc3RpbmN0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgY29ubmVjdGlvbiBpcyByZWxldmFudC4KCk15IGZpcnN0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgcHNwX3NvY2suY2AgdG8gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgb2YgdGhlIFBTUCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBhc3NvY2lhdGlvbnMgYXJlIHVzZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgcmVsYXRlIHRvIChlc3BlY2lhbGx5IGFueXRoaW5nIHdpdGggJiMzNDthc3NvYywmIzM0OyAmIzM0O3J4LCYjMzQ7IG9yICYjMzQ7dHgmIzM0OyBpbiB0aGUgbmFtZSksIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCB0aGVzZSBmdW5jdGlvbnMsIGlkZW50aWZ5aW5nIGFueSBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMuIENvbnRleHQgaXMga2V5LCBhbmQgSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgKndoeSogb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGUgKmhvdyogdGhleSYjMzk7cmUgZGVzaWduZWQuIFRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiAqd2hhdCogaXMgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wc3AvcHNwX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRpZiAocGFzIFx1MDAyNlx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCkpXG4gMTIxOlx0XHRcdGNhbGxfcmN1KFx1MDAyNnBhcy1cdTAwM2VyY3UsIHBzcF9hc3NvY19mcmVlX3F1ZXVlKTtcbiAxMjI6XHR9XG4gMTIzOlx0XG4gMTI0Olx0dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG4gMTI1Olx0e1xuIDEyNjpcdFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cdTAwM2Vwc3BfYXNzb2MsIDEpO1xuIDEyNzpcdFxuIDEyODpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG4gMTI5Olx0XHRwc3BfYXNzb2NfcHV0KHBhcyk7XG4gMTMwOlx0fVxuIDEzMTpcdFxuIDEzMjpcdGludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG4gMTMzOlx0XHRcdFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbiAxMzQ6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxMzU6XHR7XG4gMTM2Olx0XHRpbnQgZXJyO1xuIDEzNzpcdFxuIDEzODpcdFx0bWVtY3B5KFx1MDAyNnBhcy1cdTAwM2VyeCwga2V5LCBzaXplb2YoKmtleSkpO1xuIDEzOTpcdFxuIDE0MDpcdFx0bG9ja19zb2NrKHNrKTtcbiAxNDE6XHRcbiAxNDI6XHRcdGlmIChwc3Bfc2tfYXNzb2Moc2spKSB7XG4gMTQzOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVwmIzM0Oyk7XG4gMTQ0Olx0XHRcdGVyciA9IC1FQlVTWTtcbiAxNDU6XHRcdFx0Z290byBleGl0X3VubG9jaztcbiAxNDY6XHRcdH1cbiAxNDc6XHRcbiAxNDg6XHRcdHJlZmNvdW50X2luYyhcdTAwMjZwYXMtXHUwMDNlcmVmY250KTtcbiAxNDk6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihzay1cdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XG4gMTUwOlx0XHRlcnIgPSAwO1xuIDE1MTpcdFxuIDE1MjpcdGV4aXRfdW5sb2NrOlxuIDE1MzpcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiAxNTQ6XHRcbiAxNTU6XHRcdHJldHVybiBlcnI7XG4gMTU2Olx0fVxuIDE1NzpcdFxuIDE1ODpcdHN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbiAxNTk6XHR7XG4gMTYwOlx0XHRzdHJ1Y3QgcHNwX3NrYl9leHQgKnBzZTtcbiAxNjE6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gMTYyOlx0XG4gMTYzOlx0XHRza2JfcmJ0cmVlX3dhbGsoc2tiLCBcdTAwMjZ0Y3Bfc2soc2spLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkge1xuIDE2NDpcdFx0XHRwc2UgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX1BTUCk7XG4gMTY1Olx0XHRcdGlmICghcHNwX3BzZV9tYXRjaGVzX3Bhcyhwc2UsIHBhcykpXG4gMTY2Olx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiAxNjc6XHRcdH1cbiAxNjg6XHRcbiAxNjk6XHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYikge1xuIDE3MDpcdFx0XHRwc2UgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX1BTUCk7XG4gMTcxOlx0XHRcdGlmICghcHNwX3BzZV9tYXRjaGVzX3Bhcyhwc2UsIHBhcykpXG4gMTcyOlx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiAxNzM6XHRcdH1cbiAxNzQ6XHRcdHJldHVybiAwO1xuIDE3NTpcdH1cbiAxNzY6XHRcbiAxNzc6XHRpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbiAxNzg6XHRcdFx0XHQgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbiAxNzk6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAxODA6XHR7XG4gMTgxOlx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7XG4gMTgyOlx0XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpkdW1teTtcbiAxODM6XHRcdGludCBlcnI7XG4gMTg0Olx0XG4gMTg1Olx0XHRsb2NrX3NvY2soc2spO1xuIDE4NjpcdFxuIDE4NzpcdFx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbiAxODg6XHRcdGlmICghcGFzKSB7XG4gMTg5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGhhcyBubyBSeCBrZXlcJiMzNDspO1xuIDE5MDpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE5MTpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDE5MjpcdFx0fVxuIDE5MzpcdFx0aWYgKHBhcy1cdTAwM2Vwc2QgIT0gcHNkKSB7XG4gMTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Ungga2V5IGZyb20gZGlmZmVyZW50IGRldmljZVwmIzM0Oyk7XG4gMTk1Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTk2Olx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gMTk3Olx0XHR9XG4gMTk4Olx0XHRpZiAocGFzLVx1MDAzZXZlcnNpb24gIT0gdmVyc2lvbikge1xuIDE5OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4gMjAwOlx0XHRcdFx0ICAgICAgIFwmIzM0O1BTUCB2ZXJzaW9uIG1pc21hdGNoIHdpdGggZXhpc3Rpbmcgc3RhdGVcJiMzNDspO1xuIDIwMTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDIwMjpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDIwMzpcdFx0fVxuIDIwNDpcdFx0aWYgKHBhcy1cdTAwM2V0eC5zcGkpIHtcbiAyMDU6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtUeCBrZXkgYWxyZWFkeSBzZXRcJiMzNDspO1xuIDIwNjpcdFx0XHRlcnIgPSAtRUJVU1k7XG4gMjA3Olx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gMjA4Olx0XHR9XG4gMjA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjczCgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDYwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYHNrX2Nsb25lKClgIGluIGBuZXQvY29yZS9zb2NrLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgYWxsIHJlbGV2YW50IHN5bWJvbHMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgdGhlIG1vc3QgZWZmZWN0aXZlIHBhcmFtZXRlcnMgZm9yIGZ1enppbmcuCgpNeSBhbmFseXNpcyB3ZW50IGxpa2UgdGhpczoKMS4gICoqTW9kaWZpZWQgRnVuY3Rpb246KiogRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYHNrX2Nsb25lYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuCjIuICAqKkhvdCBQYXRoIEFuYWx5c2lzOioqIEkgY29uc2lkZXJlZCB3aGV0aGVyIGBza19jbG9uZWAgaXMgYSBmcmVxdWVudGx5IGV4ZWN1dGVkIGhvdC1wYXRoIGZ1bmN0aW9uIG9yIGxlc3MgY3JpdGljYWwgYW5kIGNvbmZpcm1lZCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIFRDUC9TQ1RQIGNvbm5lY3Rpb24gc2V0dXAgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGJ1dCBub3QgYWx3YXlzIGhvdCBwYXRoLiBUaGlzIGluZm9ybXMgbXkgZnV6emluZyBzdHJhdGVneS4KMy4gICoqSW5zdHJ1Y3Rpb24gQWxpZ25tZW50OioqIEkgdGhlbiBjYXJlZnVsbHkgcmUtcmVhZCB0aGUgcmVsZXZhbnQgZnV6emluZyBpbnN0cnVjdGlvbiB3aGljaCBlbXBoYXNpemVzIGZvY3VzaW5nIG9uIHNwZWNpZmljLCBub24tZ2VuZXJpYyBlbnRyeXBvaW50cy4gVGhlIGluc3RydWN0aW9uIGFsc28gaGlnaGxpZ2h0ZWQgdGhlIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyB0byBlbnN1cmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZy4KNC4gICoqSWRlbnRpZnlpbmcgRm9jdXMgU3ltYm9sczoqKiBCYXNlZCBvbiB0aGUgcGF0Y2gsIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlICpgc2tfY2xvbmVgKiBmdW5jdGlvbiBhbmQgKm5ldGxpbmsgZW50cnlwb2ludHMgZm9yIFBTUCo6IGBwc3BfbmxfcnhfYXNzb2NfZG9pdGAsIGBwc3BfbmxfdHhfYXNzb2NfZG9pdGAsIGFuZCB0aGUgc29ja2V0IGFzc29jaWF0aW9uIGZ1bmN0aW9uczogYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAsIGBwc3Bfc29ja19hc3NvY19zZXRfdHhgLCBgcHNwX3NrX2Fzc29jX2ZyZWVgIGFzIHRoZSBtYWluIGZvY3VzIHN5bWJvbHMuCjUuICAqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOioqIEkgY2hlY2tlZCBmb3IgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgYW5kIGRlcGVuZGVuY2llcyBsaWtlIGBDT05GSUdfSU5FVF9QU1BgLiBJIGNvbmZpcm1lZCB0aGF0IGBJTkVUX1BTUGAgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgTkVUYAo2LiAgKipWZXJpZnlpbmcgRnV6emluZyBTdWl0YWJpbGl0eToqKiBJIHZlcmlmaWVkIHRoZSBwYXRjaCBmaXhlcyBhIHJlZmNvdW50aW5nL3NvY2tldCBpbml0aWFsaXphdGlvbiBpc3N1ZSB3aGVuIGNsb25pbmcgc29ja2V0cyB3aXRoIFBTUCBzdXBwb3J0IGVuYWJsZWQgKGBDT05GSUdfSU5FVF9QU1BgKSwgY29uZmlybWluZyBpdHMgc3VpdGFiaWxpdHkgZm9yIGZ1enppbmcuCjcuICAqKmBGb2N1c1N5bWJvbHNgIFJlZmluZW1lbnQ6KiogV2l0aCB0aGF0IGluIG1pbmQsIEkgcmV2aWV3ZWQgdGhlIGtleSBmdXp6aW5nIHBhcmFtZXRlcnM6CiAgICAqICAgKipgV29ydGhGdXp6aW5nYDoqKiBDb25maXJtZWQgdGhhdCB0aGUgZml4IGlzIHdvcnRoIGZ1enppbmcgZHVlIHRvIHRoZSByZWZjb3VudGluZy9zb2NrZXQgaW5pdGlhbGl6YXRpb24gaXNzdWUuCiAgICAqICAgKipgRm9jdXNTeW1ib2xzYDoqKiBNeSBmaW5hbCBzZWxlY3Rpb24gZm9yIEZvY3VzU3ltYm9scyBpbmNsdWRlczoKICAgICAgICAqICAgYHNrX2Nsb25lYAogICAgICAgICogICBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YAogICAgICAgICogICBgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4YAogICAgICAgICogICBgcHNwX3NrX2Fzc29jX2ZyZWVgCiAgICAqICAgKipgRW5hYmxlQ29uZmlnc2A6KiogVGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBhcmU6CiAgICAgICAgKiAgIGBJTkVUX1BTUGAKICAgICAgICAqICAgYElORVRgCjguICAqKkZpbmFsIFZlcmlmaWNhdGlvbjoqKiBJIGRvdWJsZS1jaGVja2VkIHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMsIGZpbmRpbmcgdGhhdCBgc2tfY2xvbmVgIGlzIGBFWFBPUlRfU1lNQk9MX0dQTGAgYW5kIHRoZSBvdGhlcnMgYXJlIGFsc28gbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIHRhcmdldHMgYW5kIGNvbmZpZ3VyYXRpb25zLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCBhbmQgdGhlIHN5c3RlbSByZXF1aXJlbWVudHMgaXMgbm93IHNvbGlkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2Nsb25lJiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF9yeCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfdHgmIzM0OywKICAgICYjMzQ7cHNwX3NrX2Fzc29jX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQmIzM5O3MgcHNwX2Fzc29jIHBvaW50ZXIgaXMgY2xlYXJlZCBkdXJpbmcgc2tfY2xvbmUoKSB3aGVuIElORVRfUFNQIGlzIGVuYWJsZWQsIHByZXZlbnRpbmcgdGhlIG5ld2x5IGNsb25lZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQgc29ja2V0JiMzOTtzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2Nsb25lJiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF9yeCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfdHgmIzM0OywKICAgICYjMzQ7cHNwX3NrX2Fzc29jX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQmIzM5O3MgcHNwX2Fzc29jIHBvaW50ZXIgaXMgY2xlYXJlZCBkdXJpbmcgc2tfY2xvbmUoKSB3aGVuIElORVRfUFNQIGlzIGVuYWJsZWQsIHByZXZlbnRpbmcgdGhlIG5ld2x5IGNsb25lZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQgc29ja2V0JiMzOTtzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX2Nsb25lKClgIGluIGBuZXQvY29yZS9zb2NrLmNgIHRvIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCB0byBgTlVMTGAgdmlhIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTClgLiBcblxuV2hlbiBhIHNvY2tldCBpcyBjbG9uZWQsIGBzb2NrX2NvcHkoKWAgcGVyZm9ybXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgZnJvbSBwYXJlbnQgdG8gY2hpbGQuIFdpdGhvdXQgY2xlYXJpbmcgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AsIHRoZSBjbG9uZWQgc29ja2V0IGluaGVyaXRlZCB0aGUgcGFyZW50JiMzOTtzIHBvaW50ZXIgdG8gYHN0cnVjdCBwc3BfYXNzb2NgIHdpdGhvdXQgdGFraW5nIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGNvdW50LiBVcG9uIGRlc3RydWN0aW9uIG9mIHRoZSBjbG9uZWQgc29ja2V0IChgcHNwX3NrX2Fzc29jX2ZyZWVgKSwgYHBzcF9hc3NvY19wdXQoKWAgd291bGQgYmUgY2FsbGVkLCBsZWFkaW5nIHRvIHJlZmVyZW5jZSB1bmRlcmZsb3csIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBlcnJvcnMuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhZGRyZXNzaW5nIG9iamVjdCBsaWZlY3ljbGUsIHBvaW50ZXIgYWxpYXNpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzICh3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4pLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2E1YTg1ZWJiYWM2OTc1MmUwYWZhZjZjYTg4OGI1M2FhNTZmMDQ5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE3OjIzOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDFhZDQxOTA0ZGIyNWIuLmZhNjBiNzQ5NGM1ODYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTI0OTQsNiAmIzQzOzI0OTQsOSBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSwKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKIAlSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtza19icGZfc3RvcmFnZSwgTlVMTCk7CiAjZW5kaWYKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApCiYjNDM7CVJDVV9JTklUX1BPSU5URVIobmV3c2stJmd0O3BzcF9hc3NvYywgTlVMTCk7CiYjNDM7I2VuZGlmCiAKIAkvKiBTQU5JVFkgKi8KIAlpZiAobGlrZWx5KG5ld3NrLSZndDtza19uZXRfcmVmY250KSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3OQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2NvcmUvc29jay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc2tfY2xvbmVgIChvciBwb3RlbnRpYWxseSBgc2tfY2xvbmVfbG9ja2ApIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IHNwb3QgZm9yIHNvY2tldCBjbG9uaW5nLCBhbmQgYW55IG1vZGlmaWNhdGlvbiB0aGVyZSB3YXJyYW50cyBhIGNsb3NlIGxvb2suIFRoZSBzbmlwcGV0IGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBhZGRpbmcgYSBjb25kaXRpb25hbCBibG9jayBiYXNlZCBvbiBgQ09ORklHX0lORVRfUFNQYC4gSW5zaWRlIHRoYXQgY29uZGl0aW9uYWwsIGl0JiMzOTtzIGluaXRpYWxpemluZyBgbmV3c2stJmd0O3BzcF9hc3NvY2AgdG8gYE5VTExgIHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSYC4gU2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBhc3NvY2lhdGluZyBzb21lIHNvcnQgb2YgcG9pbnRlciB3aXRoIHRoZSBuZXcgc29ja2V0IGNsb25lIGlmIHRoaXMgYENPTkZJR19JTkVUX1BTUGAgZmVhdHVyZSBpcyBlbmFibGVkLgoKUmlnaHQsIHNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYHBzcF9hc3NvY2AgKmlzKiBhbmQgd2hhdCB0aGlzIGBDT05GSUdfSU5FVF9QU1BgIGZsYWcgY29udHJvbHMuIFRpbWUgdG8gZ28gaHVudGluZyB0aHJvdWdoIHRoZSBjb2RlYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSBoZXJlIHRvIHNlZSBpZiBhbnkgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IGNvbmNlcm5zIGNvbWUgdG8gbWluZCBhcyBhIHJlc3VsdCBvZiB0aGF0IGFzc29jaWF0aW9uIGFuZCB0aGUgY2xvbmluZyBwcm9jZXNzLiBBbHNvLCBnaXZlbiBpdOKAmXMgUkNVIGluaXQsIHRoZXJlIGFyZSBpbXBsaWNhdGlvbnMgaW4gdGVybXMgb2YgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IHNhZmV0eSB3aXRoIHJlc3BlY3QgdG8gdGhhdCByZWFkIGFuZCB3cml0ZS4gTGV0JiMzOTtzIHNlZSB3aGF04oCZcyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNwX2Fzc29jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz05MzE9c3RydWN0IHBzcF9rZXkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05MzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6OTM1OnN0YXRpYyBpbnQgbWx4NWVfcHNwX2Fzc29jX2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtOTM2LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTk2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYzo5NjE6c3RhdGljIHZvaWQgbWx4NWVfcHNwX2Fzc29jX2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtOTYyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM9MTAxMT1zdGF0aWMgc3RydWN0IHBzcF9kZXZfb3BzIG1seDVfcHNwX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtMTAxMy1cdC5yeF9zcGlfYWxsb2MgPSBtbHg1ZV9wc3Bfcnhfc3BpX2FsbG9jLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjEwMTQ6XHQudHhfa2V5X2FkZCAgID0gbWx4NWVfcHNwX2Fzc29jX2FkZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYzoxMDE1Olx0LnR4X2tleV9kZWwgICA9IG1seDVlX3BzcF9hc3NvY19kZWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtMTAxNi1cdC5rZXlfcm90YXRlICAgPSBtbHg1ZV9wc3Bfa2V5X3JvdGF0ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYz05Mz1zdGF0aWMgYm9vbCBtbHg1ZV9wc3Bfc2V0X3N0YXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jLTk2LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jOjk3Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMtOTgtXHRib29sIHJldCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xOD1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjItXHRzdHJ1Y3QgcHNwX2RldiAqcGVlcl9wc2Q7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjM6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjQtXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTM5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjQwOlx0cHRyID0gcHNwX2Fzc29jX2Rydl9kYXRhKHBhcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtNDEtXHRpZiAoKnB0ciAhPSBucykge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xMzE9bnNpbV9yeF9zcGlfYWxsb2Moc3RydWN0IHBzcF9kZXYgKnBzZCwgdTMyIHZlcnNpb24sXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1MS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxNTI6c3RhdGljIGludCBuc2ltX2Fzc29jX2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUzLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTUtXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IHBzZC1cdTAwM2VkcnZfcHJpdjtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxNTY6XHR2b2lkICoqcHRyID0gcHNwX2Fzc29jX2Rydl9kYXRhKHBhcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTU3LVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xNjU9c3RhdGljIGludCBuc2ltX2tleV9yb3RhdGUoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNzktXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTgwOnN0YXRpYyB2b2lkIG5zaW1fYXNzb2NfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xODEte1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4Mi1cdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gcHNkLVx1MDAzZWRydl9wcml2O1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE4MzpcdHZvaWQgKipwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xODQtXG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6ODY6XHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XHQgICpwc3BfYXNzb2M7XG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ny0jZW5kaWZcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MjI9aW50IHBzcF9kZXZfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHUxNiBkZXZfaWQsIHU4IGdlbmVyYXRpb24sIGJvb2wgc3RyaXBfaWN2KTtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMjQtLyogS2VybmVsLWZhY2luZyBBUEkgKi9cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoyNTp2b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yNi1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoyNzpzdGF0aWMgaW5saW5lIHZvaWQgKnBzcF9hc3NvY19kcnZfZGF0YShzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMjgte1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zNz12b2lkIHBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzgtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQwLXtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0MTpcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfY2hlY2soc2stXHUwMDNlcHNwX2Fzc29jLCBsb2NrZGVwX3NvY2tfaXNfaGVsZChzaykpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQyLX1cbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9NDU9cHNwX2VucXVldWVfc2V0X2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDYte1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQ3Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQ4LVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD02OT1zdGF0aWMgaW5saW5lIGJvb2xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo3MDpwc3BfaXNfYWxsb3dlZF9ub25kYXRhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC03MS17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjgzOnBzcF9wc2VfbWF0Y2hlc19wYXMoc3RydWN0IHBzcF9za2JfZXh0ICpwc2UsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC04NC17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTkxPXN0YXRpYyBpbmxpbmUgZW51bSBza2JfZHJvcF9yZWFzb25cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo5MjpfX3BzcF9za19yeF9wb2xpY3lfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTkzLXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTIyPXBzcF90d3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjMte1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjEyNDpcdHJldHVybiBfX3BzcF9za19yeF9wb2xpY3lfY2hlY2soc2tiLCByY3VfZGVyZWZlcmVuY2UodHctXHUwMDNlcHNwX2Fzc29jKSk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTI1LX1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjYtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTI3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2dldF9hc3NvY19yY3UoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyOC17XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTI5Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEzMC1cdGludCBzdGF0ZTtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTM2LVx0cGFzID0gc3RhdGUgPT0gVENQX1RJTUVfV0FJVCA/XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTM3Olx0XHQgICAgICByY3VfZGVyZWZlcmVuY2UoaW5ldF90d3NrKHNrKS1cdTAwM2Vwc3BfYXNzb2MpIDpcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMzg6XHRcdCAgICAgIHJjdV9kZXJlZmVyZW5jZShzay1cdTAwM2Vwc3BfYXNzb2MpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEzOS1cdHJldHVybiBwYXM7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE0MS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tiX2dldF9hc3NvY19yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNDMte1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTUyLVx0aW50IHBzcF9lbmNhcCA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBQU1BfSERSX1NJWkUgJiM0MzsgUFNQX1RSTF9TSVpFO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE1MzpcdGJvb2wgaGFzX3BzcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzay1cdTAwM2Vwc3BfYXNzb2MpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1NC1cbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTYzPXBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikgeyB9XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY0LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY2LXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTg3PXBzcF90d3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTkxLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za2JfZ2V0X2Fzc29jX3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE5My17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9NDM9c3RydWN0IHBzcF9kZXZfY29uZmlnIHtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01My0vKipcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjU0OiAqIHN0cnVjdCBwc3BfYXNzb2NfZGV2IC0gd3JhcHBlciBmb3IgYXNzb2NpYXRlZCBuZXRfZGV2aWNlXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01NS0gKiBAZGV2X2xpc3Q6IGxpc3Qgbm9kZSBmb3IgcHNwX2Rldjo6YXNzb2NfZGV2X2xpc3Rcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01OC0gKi9cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjU5OnN0cnVjdCBwc3BfYXNzb2NfZGV2IHtcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTYwLVx0c3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC02Ny0gKiBAbWFpbl9uZXRkZXY6IG9yaWdpbmFsIG5ldGRldmljZSBvZiB0aGlzIFBTUCBkZXZpY2VcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjY4OiAqIEBhc3NvY19kZXZfbGlzdDogbGlzdCBvZiBwc3BfYXNzb2NfZGV2IGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUFNQIGRldmljZVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjktICogQGFzc29jX2Rldl9jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBhc3NvY19kZXZfbGlzdFxuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTEyND1zdHJ1Y3QgcHNwX2Rldl9jYXBzIHtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0xMzItXHQgKiBAYXNzb2NfZHJ2X3NwYzogc2l6ZSBvZiBkcml2ZXItc3BlY2lmaWMgc3RhdGUgaW4gVHggYXNzb2NcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjEzMzpcdCAqIERldGVybWluZXMgdGhlIHNpemUgb2Ygc3RydWN0IHBzcF9hc3NvYzo6ZHJ2X2RhdGFcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEzNC1cdCAqL1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE1MD1zdHJ1Y3QgcHNwX2tleV9wYXJzZWQge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTE1NC1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjE1NTpzdHJ1Y3QgcHNwX2Fzc29jIHtcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTE1Ni1cdHN0cnVjdCBwc3BfZGV2ICpwc2Q7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTk1PXN0cnVjdCBwc3BfZGV2X29wcyB7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjIyLVx0ICovXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoyMjM6XHRpbnQgKCp0eF9rZXlfYWRkKShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMjQtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIyOC1cdCAqL1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MjI5Olx0dm9pZCAoKnR4X2tleV9kZWwpKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMzAtXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oPTI0Mj1zdHJ1Y3Qgc2tfZmlsdGVyO1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC0yNTgtICAqXHRAc2tfcG9saWN5OiBmbG93IHBvbGljeVxuaW5jbHVkZS9uZXQvc29jay5oOjI1OTogICpcdEBwc3BfYXNzb2M6IFBTUCBhc3NvY2lhdGlvbiwgaWYgc29ja2V0IGlzIFBTUC1zZWN1cmVkXG5pbmNsdWRlL25ldC9zb2NrLmgtMjYwLSAgKlx0QHNrX3JlY2VpdmVfcXVldWU6IGluY29taW5nIHBhY2tldHNcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmg9MzY1PXN0cnVjdCBzb2NrIHtcbi0tXG5pbmNsdWRlL25ldC9zb2NrLmgtNDY3LSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmluY2x1ZGUvbmV0L3NvY2suaDo0Njg6XHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XHQqcHNwX2Fzc29jO1xuaW5jbHVkZS9uZXQvc29jay5oLTQ2OS0jZW5kaWZcbi0tXG5uZXQvY29yZS9zb2NrLmM9MjQ3OT1zdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMjQ5Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5uZXQvY29yZS9zb2NrLmM6MjQ5ODpcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbm5ldC9jb3JlL3NvY2suYy0yNDk5LSNlbmRpZlxuLS1cbm5ldC9wc3AvcHNwLW5sLWdlbi5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgcHNwX25sX29wc1tdID0ge1xuLS1cbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTEwNS1cdFx0LmNtZFx0XHQ9IFBTUF9DTURfUlhfQVNTT0MsXG5uZXQvcHNwL3BzcC1ubC1nZW4uYzoxMDY6XHRcdC5wcmVfZG9pdFx0PSBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQsXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy0xMDctXHRcdC5kb2l0XHRcdD0gcHNwX25sX3J4X2Fzc29jX2RvaXQsXG4tLVxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTE0LVx0XHQuY21kXHRcdD0gUFNQX0NNRF9UWF9BU1NPQyxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jOjExNTpcdFx0LnByZV9kb2l0XHQ9IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZCxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTExNi1cdFx0LmRvaXRcdFx0PSBwc3BfbmxfdHhfYXNzb2NfZG9pdCxcbi0tXG5uZXQvcHNwL3BzcC1ubC1nZW4uaD0yMD1pbnQgcHNwX2RldmljZV9nZXRfbG9ja2VkX2FkbWluKGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMjEtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9wc3AvcHNwLW5sLWdlbi5oOjIyOmludCBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXG5uZXQvcHNwL3BzcC1ubC1nZW4uaC0yMy1cdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuLS1cbm5ldC9wc3AvcHNwLmg9MjE9dm9pZCBwc3Bfbmxfbm90aWZ5X2RldihzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1MzIgY21kKTtcbm5ldC9wc3AvcHNwLmgtMjItXG5uZXQvcHNwL3BzcC5oOjIzOnN0cnVjdCBwc3BfYXNzb2MgKnBzcF9hc3NvY19jcmVhdGUoc3RydWN0IHBzcF9kZXYgKnBzZCk7XG5uZXQvcHNwL3BzcC5oLTI0LXN0cnVjdCBwc3BfZGV2ICpwc3BfZGV2X2dldF9mb3Jfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3BzcC9wc3AuaDoyNTp2b2lkIHBzcF9kZXZfdHhfa2V5X2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpO1xubmV0L3BzcC9wc3AuaDoyNjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3AuaC0yNy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuLS1cbm5ldC9wc3AvcHNwLmg9Mjk9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXG4tLVxubmV0L3BzcC9wc3AuaC0zMS1cdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5uZXQvcHNwL3BzcC5oOjMyOnZvaWQgcHNwX2Fzc29jc19rZXlfcm90YXRlZChzdHJ1Y3QgcHNwX2RldiAqcHNkKTtcbm5ldC9wc3AvcHNwLmgtMzMtXG4tLVxubmV0L3BzcC9wc3BfbWFpbi5jPTEzMT12b2lkIHBzcF9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgcHNwX2RldiAqcHNkKVxubmV0L3BzcC9wc3BfbWFpbi5jLTEzMi17XG5uZXQvcHNwL3BzcF9tYWluLmM6MTMzOlx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5LCAqZW50cnlfdG1wO1xubmV0L3BzcC9wc3BfbWFpbi5jOjEzNDpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcywgKm5leHQ7XG5uZXQvcHNwL3BzcF9tYWluLmMtMTM1LVxuLS1cbm5ldC9wc3AvcHNwX21haW4uYz00MDg9c3RhdGljIHZvaWQgcHNwX2Rldl9kaXNhc3NvY19vbmUoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9wc3AvcHNwX21haW4uYy00MDkte1xubmV0L3BzcC9wc3BfbWFpbi5jOjQxMDpcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeTtcbm5ldC9wc3AvcHNwX21haW4uYy00MTEtXG4tLVxubmV0L3BzcC9wc3BfbmwuYz01ND1wc3BfbmxfbXVsdGljYXN0X3Blcl9ucyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1bnNpZ25lZCBpbnQgZ3JvdXAsXG4tLVxubmV0L3BzcC9wc3BfbmwuYy01OS17XG5uZXQvcHNwL3BzcF9ubC5jOjYwOlx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xubmV0L3BzcC9wc3BfbmwuYy02MS1cdHN0cnVjdCB4YXJyYXkgc2VudF9uZXRzO1xuLS1cbm5ldC9wc3AvcHNwX25sLmM9MjMwPWJvb2wgcHNwX2hhc19hc3NvY19kZXZfaW5fbnMoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldCAqbmV0KVxubmV0L3BzcC9wc3BfbmwuYy0yMzEte1xubmV0L3BzcC9wc3BfbmwuYzoyMzI6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XG5uZXQvcHNwL3BzcF9ubC5jLTIzMy1cbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTI0Mj1zdGF0aWMgaW50IHBzcF9ubF9maWxsX2Fzc29jX2Rldl9saXN0KHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBza19idWZmICpyc3AsXG4tLVxubmV0L3BzcC9wc3BfbmwuYy0yNDUte1xubmV0L3BzcC9wc3BfbmwuYzoyNDY6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XG5uZXQvcHNwL3BzcF9ubC5jLTI0Ny1cdHN0cnVjdCBuZXQgKmRldl9uZXRfbnM7XG4tLVxubmV0L3BzcC9wc3BfbmwuYz00NDc9aW50IHBzcF9ubF9rZXlfcm90YXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTQ4Mi1cbm5ldC9wc3AvcHNwX25sLmM6NDgzOlx0cHNwX2Fzc29jc19rZXlfcm90YXRlZChwc2QpO1xubmV0L3BzcC9wc3BfbmwuYy00ODQtXHRwc2QtXHUwMDNlc3RhdHMucm90YXRpb25zJiM0MzsmIzQzOztcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTQ5OT1pbnQgcHNwX25sX2Rldl9hc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3BzcC9wc3BfbmwuYy01MDEtXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbm5ldC9wc3AvcHNwX25sLmM6NTAyOlx0c3RydWN0IHBzcF9hc3NvY19kZXYgKnBzcF9hc3NvY19kZXY7XG5uZXQvcHNwL3BzcF9ubC5jLTUwMy1cdHN0cnVjdCBuZXRfZGV2aWNlICphc3NvY19kZXY7XG4tLVxubmV0L3BzcC9wc3BfbmwuYy01MTgtXG5uZXQvcHNwL3BzcF9ubC5jOjUxOTpcdHBzcF9hc3NvY19kZXYgPSBremFsbG9jX29iaigqcHNwX2Fzc29jX2Rldik7XG5uZXQvcHNwL3BzcF9ubC5jOjUyMDpcdGlmICghcHNwX2Fzc29jX2Rldikge1xubmV0L3BzcC9wc3BfbmwuYy01MjEtXHRcdGVyciA9IC1FTk9NRU07XG4tLVxubmV0L3BzcC9wc3BfbmwuYy01MjYtXHRhc3NvY19kZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KG5ldCwgYXNzb2NfaWZpbmRleCxcbm5ldC9wc3AvcHNwX25sLmM6NTI3Olx0XHRcdFx0XHRcdTAwMjZwc3BfYXNzb2NfZGV2LVx1MDAzZWRldl90cmFja2VyLFxubmV0L3BzcC9wc3BfbmwuYy01MjgtXHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtNTQzLVxubmV0L3BzcC9wc3BfbmwuYzo1NDQ6XHRwc3BfYXNzb2NfZGV2LVx1MDAzZWFzc29jX2RldiA9IGFzc29jX2Rldjtcbm5ldC9wc3AvcHNwX25sLmMtNTQ1LVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtNTYzLVxubmV0L3BzcC9wc3BfbmwuYzo1NjQ6XHRsaXN0X2FkZF90YWlsKFx1MDAyNnBzcF9hc3NvY19kZXYtXHUwMDNlZGV2X2xpc3QsIFx1MDAyNnBzZC1cdTAwM2Vhc3NvY19kZXZfbGlzdCk7XG5uZXQvcHNwL3BzcF9ubC5jLTU2NS1cdHBzZC1cdTAwM2Vhc3NvY19kZXZfY250JiM0MzsmIzQzOztcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTU3NS1lcnJfcHV0X2Rldjpcbm5ldC9wc3AvcHNwX25sLmM6NTc2Olx0bmV0ZGV2X3B1dChhc3NvY19kZXYsIFx1MDAyNnBzcF9hc3NvY19kZXYtXHUwMDNlZGV2X3RyYWNrZXIpO1xubmV0L3BzcC9wc3BfbmwuYy01NzctZXJyX2ZyZWVfYXNzb2M6XG5uZXQvcHNwL3BzcF9ubC5jOjU3ODpcdGtmcmVlKHBzcF9hc3NvY19kZXYpO1xubmV0L3BzcC9wc3BfbmwuYy01NzktZXJyX3B1dF9uZXQ6XG4tLVxubmV0L3BzcC9wc3BfbmwuYz01ODU9aW50IHBzcF9ubF9kZXZfZGlzYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3BzcC9wc3BfbmwuYy01ODYte1xubmV0L3BzcC9wc3BfbmwuYzo1ODc6XHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnksICpmb3VuZCA9IE5VTEw7XG5uZXQvcHNwL3BzcF9ubC5jLTU4OC1cdHN0cnVjdCBwc3BfZGV2ICpwc2QgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtNjM4LVxubmV0L3BzcC9wc3BfbmwuYzo2Mzk6aW50IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcyxcbm5ldC9wc3AvcHNwX25sLmMtNjQwLVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTc3MD1pbnQgcHNwX25sX3J4X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTc3NC1cdHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCBrZXk7XG5uZXQvcHNwL3BzcF9ubC5jOjc3NTpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbm5ldC9wc3AvcHNwX25sLmMtNzc2LVx0c3RydWN0IHNrX2J1ZmYgKnJzcDtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTc5Mi1cbm5ldC9wc3AvcHNwX25sLmM6NzkzOlx0cGFzID0gcHNwX2Fzc29jX2NyZWF0ZShwc2QpO1xubmV0L3BzcC9wc3BfbmwuYy03OTQtXHRpZiAoIXBhcykge1xuLS1cbm5ldC9wc3AvcHNwX25sLmMtODE0LVx0fVxubmV0L3BzcC9wc3BfbmwuYzo4MTU6XHRwc3BfYXNzb2NfcHV0KHBhcyk7XG5uZXQvcHNwL3BzcF9ubC5jLTgxNi1cbi0tXG5uZXQvcHNwL3BzcF9ubC5jLTgxOS1lcnJfZnJlZV9wYXM6XG5uZXQvcHNwL3BzcF9ubC5jOjgyMDpcdHBzcF9hc3NvY19wdXQocGFzKTtcbm5ldC9wc3AvcHNwX25sLmMtODIxLWVycl9mcmVlX3JzcDpcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MzA9cHNwX3ZhbGlkYXRlX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3BzcC9wc3Bfc29jay5jLTMxLXtcbm5ldC9wc3AvcHNwX3NvY2suYzozMjpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbm5ldC9wc3AvcHNwX3NvY2suYy0zMy1cdGJvb2wgZ29vZDtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtNDYtXG5uZXQvcHNwL3BzcF9zb2NrLmM6NDc6c3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2NyZWF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkKVxubmV0L3BzcC9wc3Bfc29jay5jLTQ4LXtcbm5ldC9wc3AvcHNwX3NvY2suYzo0OTpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbm5ldC9wc3AvcHNwX3NvY2suYy01MC1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtNjgtXG5uZXQvcHNwL3BzcF9zb2NrLmM6Njk6c3RhdGljIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9hc3NvY19kdW1teShzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5uZXQvcHNwL3BzcF9zb2NrLmMtNzAte1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy03OS1cbm5ldC9wc3AvcHNwX3NvY2suYzo4MDpzdGF0aWMgaW50IHBzcF9kZXZfdHhfa2V5X2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG5uZXQvcHNwL3BzcF9zb2NrLmMtODEtXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy04NS1cbm5ldC9wc3AvcHNwX3NvY2suYzo4Njp2b2lkIHBzcF9kZXZfdHhfa2V5X2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5uZXQvcHNwL3BzcF9zb2NrLmMtODcte1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy05Mi1cbm5ldC9wc3AvcHNwX3NvY2suYzo5MzpzdGF0aWMgdm9pZCBwc3BfYXNzb2NfZnJlZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvcHNwL3BzcF9zb2NrLmMtOTQte1xubmV0L3BzcC9wc3Bfc29jay5jOjk1Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwc3BfYXNzb2MsIHdvcmspO1xubmV0L3BzcC9wc3Bfc29jay5jLTk2LVx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IHBhcy1cdTAwM2Vwc2Q7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTEwNS1cbm5ldC9wc3AvcHNwX3NvY2suYzoxMDY6c3RhdGljIHZvaWQgcHNwX2Fzc29jX2ZyZWVfcXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxubmV0L3BzcC9wc3Bfc29jay5jLTEwNy17XG5uZXQvcHNwL3BzcF9zb2NrLmM6MTA4Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwc3BfYXNzb2MsIHJjdSk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA5LVxubmV0L3BzcC9wc3Bfc29jay5jOjExMDpcdElOSVRfV09SSyhcdTAwMjZwYXMtXHUwMDNld29yaywgcHNwX2Fzc29jX2ZyZWUpO1xubmV0L3BzcC9wc3Bfc29jay5jLTExMS1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2cGFzLVx1MDAzZXdvcmspO1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xMTQtLyoqXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTE1OiAqIHBzcF9hc3NvY19wdXQoKSAtIHJlbGVhc2UgYSByZWZlcmVuY2Ugb24gYSBQU1AgYXNzb2NpYXRpb25cbm5ldC9wc3AvcHNwX3NvY2suYy0xMTYtICogQHBhczogYXNzb2NpYXRpb24gdG8gcmVsZWFzZVxubmV0L3BzcC9wc3Bfc29jay5jLTExNy0gKi9cbm5ldC9wc3AvcHNwX3NvY2suYzoxMTg6dm9pZCBwc3BfYXNzb2NfcHV0KHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTkte1xubmV0L3BzcC9wc3Bfc29jay5jLTEyMC1cdGlmIChwYXMgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZwYXMtXHUwMDNlcmVmY250KSlcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjE6XHRcdGNhbGxfcmN1KFx1MDAyNnBhcy1cdTAwM2VyY3UsIHBzcF9hc3NvY19mcmVlX3F1ZXVlKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjItfVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0xMjQ9dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjY6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrLVx1MDAzZXBzcF9hc3NvYywgMSk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI3LVxubmV0L3BzcC9wc3Bfc29jay5jOjEyODpcdHJjdV9hc3NpZ25fcG9pbnRlcihzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xubmV0L3BzcC9wc3Bfc29jay5jOjEyOTpcdHBzcF9hc3NvY19wdXQocGFzKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzAtfVxubmV0L3BzcC9wc3Bfc29jay5jLTEzMS1cbm5ldC9wc3AvcHNwX3NvY2suYzoxMzI6aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzMtXHRcdFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTQ4LVx0cmVmY291bnRfaW5jKFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpO1xubmV0L3BzcC9wc3Bfc29jay5jOjE0OTpcdHJjdV9hc3NpZ25fcG9pbnRlcihzay1cdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTUwLVx0ZXJyID0gMDtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTU3LVxubmV0L3BzcC9wc3Bfc29jay5jOjE1ODpzdGF0aWMgaW50IHBzcF9zb2NrX3JlY3ZfcXVldWVfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTU5LXtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTc3PWludCBwc3Bfc29ja19hc3NvY19zZXRfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2RldiAqcHNkLFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xODEtXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MTgyOlx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqZHVtbXk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTgzLVx0aW50IGVycjtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjE5LVx0ICovXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjIwOlx0ZHVtbXkgPSBwc3BfYXNzb2NfZHVtbXkocGFzKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yMjEtXHRpZiAoIWR1bW15KSB7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTI0OC1cbm5ldC9wc3AvcHNwX3NvY2suYzoyNDk6dm9pZCBwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHN0cnVjdCBwc3BfZGV2ICpwc2QpXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjUwLXtcbm5ldC9wc3AvcHNwX3NvY2suYzoyNTE6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpuZXh0O1xubmV0L3BzcC9wc3Bfc29jay5jLTI1Mi1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjY2PXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTI2Ny17XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjY4Olx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNjktXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTI3MS1cdFx0cmVmY291bnRfaW5jKFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpO1xubmV0L3BzcC9wc3Bfc29jay5jOjI3MjpcdHJjdV9hc3NpZ25fcG9pbnRlcih0dy1cdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMjczLVx0dHctXHUwMDNldHdfdmFsaWRhdGVfeG1pdF9za2IgPSBwc3BfdmFsaWRhdGVfeG1pdDtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9Mjc2PXZvaWQgcHNwX3R3c2tfYXNzb2NfZnJlZShzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dylcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzcte1xubmV0L3BzcC9wc3Bfc29jay5jOjI3ODpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodHctXHUwMDNlcHNwX2Fzc29jLCAxKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzktXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjgwOlx0cmN1X2Fzc2lnbl9wb2ludGVyKHR3LVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjgxOlx0cHNwX2Fzc29jX3B1dChwYXMpO1xubmV0L3BzcC9wc3Bfc29jay5jLTI4Mi19XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTI4ND12b2lkIHBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9wc3AvcHNwX3NvY2suYy0yODUte1xubmV0L3BzcC9wc3Bfc29jay5jOjI4NjpcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcbm5ldC9wc3AvcHNwX3NvY2suYy0yODctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTYwNj1kZWYgX2NoZWNrX2Fzc29jX2xpc3QoY2ZnLCBwc3BfZGV2X2lkLCBpZmluZGV4LCBuc2lkPU5vbmUpOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02MjMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjI0OmRlZiBfZGF0YV9iYXNpY19zZW5kX25ldGtpdF9wc3BfYXNzb2MoY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjI1LSAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NjU5PWRlZiBfZ2V0X3BzcF92ZXJfaXA2X3ZhcmlhbnRzKCk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2NC1Aa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXA2X3ZhcmlhbnRzKCkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjY1OmRlZiBkYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjYtICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgUFNQIGRhdGEgc2VuZCB2aWEgbmV0a2l0IHdpdGggZGV2LWFzc29jLlwmIzM0O1wmIzM0O1wmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2Ny0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjY4OiAgICBfZGF0YV9iYXNpY19zZW5kX25ldGtpdF9wc3BfYXNzb2MoY2ZnLCB2ZXJzaW9uLCBpcHZlcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTY5OD1kZWYgX2Rldl9jaGFuZ2Vfbm90aWZ5X211bHRpX25zX25ldGtpdChjZmcpOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS03MjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NzI2OmRlZiBfcHNwX2Rldl9nZXRfY2hlY2tfbmV0a2l0X3BzcF9hc3NvYyhjZmcpOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTcyNy0gICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7IENoZWNrIHBzcCBkZXYtZ2V0IG91dHB1dCB3aXRoIG5ldGtpdCBpbnRlcmZhY2UgYXNzb2NpYXRlZCB3aXRoIFBTUCBkZXYgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTk0MT1kZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTgwLSAgICAgICAgICAgICAgICAgICAgICAgIF9hc3NvY19jaGVja19saXN0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5Ojk4MTogICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODItICAgICAgICAgICAgICAgICAgICAgICAgX2tleV9yb3RhdGlvbl9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTk4My0gICAgICAgICAgICAgICAgICAgICAgICBfZGV2X2NoYW5nZV9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5Ojk4NDogICAgICAgICAgICAgICAgICAgICAgICBfcHNwX2Rldl9nZXRfY2hlY2tfbmV0a2l0X3BzcF9hc3NvYyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODUtICAgICAgICAgICAgICAgICAgICAgICAgX2Rldl9hc3NvY19ub19uc2lkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGBza19jbG9uZV9sb2NrYCBpbiBgbmV0L2NvcmUvc29jay5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgYHNrX2Nsb25lX2xvY2tgIG9wZXJhdGVzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgd2l0aGluIGBuZXQvY29yZS9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI0OTAgdG8gMjUyMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIHNvY2tldCBjbG9uaW5nIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcy4gSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgaGVyZSwgdGhlIGNvbnRlbnRpb24gcG9pbnRzLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcmUgYWRkcmVzc2VkIG9yIGludHJvZHVjZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGlzIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IG5ldHdvcmsgc29ja2V0cyBhcmUgZHVwbGljYXRlZCBhbmQgaG93IGNvbmN1cnJlbnQgYWNjZXNzIGlzIG1hbmFnZWQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBsb2NrIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgbWlnaHQgYXJpc2UgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcy4gSSBiZXQgdGhlIGNvbW1lbnRzIGFyb3VuZCB0aGF0IHNlY3Rpb24gYXJlIHZlcnkgZW5saWdodGVuaW5nLCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIGhhcyB0byBvZmZlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NjA6XHRcdGlmIChzay1cdTAwM2Vza19rZXJuX3NvY2spXG4yNDYxOlx0XHRcdGxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKFx1MDAyNnNrLVx1MDAzZXNrX2NhbGxiYWNrX2xvY2ssXG4yNDYyOlx0XHRcdFx0YWZfa2Vybl9jYWxsYmFja19rZXlzICYjNDM7IHNrLVx1MDAzZXNrX2ZhbWlseSxcbjI0NjM6XHRcdFx0XHRhZl9mYW1pbHlfa2Vybl9jbG9ja19rZXlfc3RyaW5nc1tzay1cdTAwM2Vza19mYW1pbHldKTtcbjI0NjQ6XHRcdGVsc2VcbjI0NjU6XHRcdFx0bG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUoXHUwMDI2c2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayxcbjI0NjY6XHRcdFx0XHRhZl9jYWxsYmFja19rZXlzICYjNDM7IHNrLVx1MDAzZXNrX2ZhbWlseSxcbjI0Njc6XHRcdFx0XHRhZl9mYW1pbHlfY2xvY2tfa2V5X3N0cmluZ3Nbc2stXHUwMDNlc2tfZmFtaWx5XSk7XG4yNDY4Olx0fVxuMjQ2OTpcdFxuMjQ3MDpcdC8qKlxuMjQ3MTpcdCAqIHNrX2Nsb25lIC0gY2xvbmUgYSBzb2NrZXRcbjI0NzI6XHQgKiBAc2s6IHRoZSBzb2NrZXQgdG8gY2xvbmVcbjI0NzM6XHQgKiBAcHJpb3JpdHk6IGZvciBhbGxvY2F0aW9uICglR0ZQX0tFUk5FTCwgJUdGUF9BVE9NSUMsIGV0YylcbjI0NzQ6XHQgKiBAbG9jazogaWYgdHJ1ZSwgbG9jayB0aGUgY2xvbmVkIHNrXG4yNDc1Olx0ICpcbjI0NzY6XHQgKiBJZiBAbG9jayBpcyB0cnVlLCB0aGUgY2xvbmUgaXMgbG9ja2VkIGJ5IGJoX2xvY2tfc29jaygpLCBhbmRcbjI0Nzc6XHQgKiBjYWxsZXIgbXVzdCB1bmxvY2sgc29ja2V0IGV2ZW4gaW4gZXJyb3IgcGF0aCBieSBiaF91bmxvY2tfc29jaygpLlxuMjQ3ODpcdCAqL1xuMjQ3OTpcdHN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuMjQ4MDpcdFx0XHQgICAgICBib29sIGxvY2spXG4yNDgxOlx0e1xuMjQ4MjpcdFx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuMjQ4MzpcdFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xuMjQ4NDpcdFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcbjI0ODU6XHRcdHN0cnVjdCBzb2NrICpuZXdzaztcbjI0ODY6XHRcbjI0ODc6XHRcdG5ld3NrID0gc2tfcHJvdF9hbGxvYyhwcm90LCBwcmlvcml0eSwgc2stXHUwMDNlc2tfZmFtaWx5KTtcbjI0ODg6XHRcdGlmICghbmV3c2spXG4yNDg5Olx0XHRcdGdvdG8gb3V0O1xuMjQ5MDpcdFxuMjQ5MTpcdFx0c29ja19jb3B5KG5ld3NrLCBzayk7XG4yNDkyOlx0XG4yNDkzOlx0XHRuZXdzay1cdTAwM2Vza19wcm90X2NyZWF0b3IgPSBwcm90O1xuMjQ5NDpcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbjI0OTU6XHRcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xuMjQ5NjpcdCNlbmRpZlxuMjQ5NzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbjI0OTg6XHRcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbjI0OTk6XHQjZW5kaWZcbjI1MDA6XHRcbjI1MDE6XHRcdC8qIFNBTklUWSAqL1xuMjUwMjpcdFx0aWYgKGxpa2VseShuZXdzay1cdTAwM2Vza19uZXRfcmVmY250KSkge1xuMjUwMzpcdFx0XHRnZXRfbmV0X3RyYWNrKHNvY2tfbmV0KG5ld3NrKSwgXHUwMDI2bmV3c2stXHUwMDNlbnNfdHJhY2tlciwgcHJpb3JpdHkpO1xuMjUwNDpcdFx0XHRzb2NrX2ludXNlX2FkZChzb2NrX25ldChuZXdzayksIDEpO1xuMjUwNTpcdFx0fSBlbHNlIHtcbjI1MDY6XHRcdFx0LyogS2VybmVsIHNvY2tldHMgYXJlIG5vdCBlbGV2YXRpbmcgdGhlIHN0cnVjdCBuZXQgcmVmY291bnQuXG4yNTA3Olx0XHRcdCAqIEluc3RlYWQsIHVzZSBhIHRyYWNrZXIgdG8gbW9yZSBlYXNpbHkgZGV0ZWN0IGlmIGEgbGF5ZXJcbjI1MDg6XHRcdFx0ICogaXMgbm90IHByb3Blcmx5IGRpc21hbnRsaW5nIGl0cyBrZXJuZWwgc29ja2V0cyBhdCBuZXRuc1xuMjUwOTpcdFx0XHQgKiBkZXN0cm95IHRpbWUuXG4yNTEwOlx0XHRcdCAqL1xuMjUxMTpcdFx0XHRuZXRfcGFzc2l2ZV9pbmMoc29ja19uZXQobmV3c2spKTtcbjI1MTI6XHRcdFx0X19uZXRuc190cmFja2VyX2FsbG9jKHNvY2tfbmV0KG5ld3NrKSwgXHUwMDI2bmV3c2stXHUwMDNlbnNfdHJhY2tlcixcbjI1MTM6XHRcdFx0XHRcdCAgICAgIGZhbHNlLCBwcmlvcml0eSk7XG4yNTE0Olx0XHR9XG4yNTE1Olx0XG4yNTE2Olx0XHRza19ub2RlX2luaXQoXHUwMDI2bmV3c2stXHUwMDNlc2tfbm9kZSk7XG4yNTE3Olx0XHRzb2NrX2xvY2tfaW5pdChuZXdzayk7XG4yNTE4Olx0XG4yNTE5Olx0XHRpZiAobG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc2tfY2xvbmVgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHNrX2Nsb25lYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIHN0ZW0gZnJvbSBob3cgc29ja2V0IHN0cnVjdHVyZXMgYXJlIGNvcGllZCBkdXJpbmcgY2xvbmluZy4gU3BlY2lmaWNhbGx5LCBgc29ja19jb3B5KG5ld3NrLCBzaylgIGlzIGp1c3QgYSBgbWVtY3B5YC4gVGhpcyBtZWFucyB3aGVuIHdlIGNsb25lIGEgc29ja2V0LCBgbmV3c2stJmd0O3BzcF9hc3NvY2Agc2ltcGx5IGdldHMgYSBkaXJlY3QgY29weSBvZiBgc2stJmd0O3BzcF9hc3NvY2AsIHdpdGhvdXQgYW55IHByb3BlciByZWZlcmVuY2UgY291bnRpbmcuIFRoaXMgaXMgYSByZWQgZmxhZy4gVGhpbmsgYWJvdXQgaXQ6IHdoZW4gY2xvbmluZyBhIGxpc3RlbmluZyBzb2NrZXQgdG8gYSBjaGlsZCBzb2NrZXQsIGBuZXdzay0mZ3Q7cHNwX2Fzc29jYCBpcyBwb2ludGluZyB0byB0aGUgc2FtZSBtZW1vcnkgYXMgdGhlIHBhcmVudCYjMzk7cyEgVGhpcyBzaGFyZWQgb3duZXJzaGlwLCB3aXRob3V0IHByb3BlciB0cmFja2luZywgaXMgc2NyZWFtaW5nIHBvdGVudGlhbCBmb3IgY2hhb3MuCgpUaGUgcHJvYmxlbT8gRWl0aGVyIHNvY2tldCwgdGhlIHBhcmVudCBvciB0aGUgY2hpbGQsIGNvdWxkIGZyZWUgdGhlIGBwc3BfYXNzb2NgIG9yIGRlc3Ryb3kgaXQuIElmIGVpdGhlciBvbmUgZG9lcyBhIGBwc3Bfc2tfYXNzb2NfZnJlZShzaylgIG9yIGRlcmVmZXJlbmNlcyBpdCwgaXQgY291bGQgbGVhZCB0byBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIGEgZG91YmxlLWZyZWUsIG9yIGV2ZW4gYW4gdW5kZXJmbG93IG9mIHRoZSByZWZlcmVuY2UgY291bnQuIE5pZ2h0bWFyZSBzY2VuYXJpbyEKClRoZSBmaXgsIGhvd2V2ZXIsIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFNldHRpbmcgYFJDVV9JTklUX1BPSU5URVIobmV3c2stJmd0O3BzcF9hc3NvYywgTlVMTCk7YCBleHBsaWNpdGx5IGNsZWFycyB0aGUgcG9pbnRlciBpbiBgbmV3c2tgLiBUaGlzIGlzIHRoZSB2aXRhbCBzdGVwOiBpdCBicmVha3MgdGhlIGxpbmssIGVuc3VyaW5nIHRoZSBjaGlsZCBzb2NrZXQgZG9lc24mIzM5O3QgaW5oZXJpdCB0aGUgcGFyZW50JiMzOTtzIGBwc3BfYXNzb2NgIHdpdGhvdXQgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBvciBhbnkgc2hhcmVkIG1lbW9yeS4gTm93LCB0aGF0IGlzIGEgY2xlYW4gc2VwYXJhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHBpdm90IHRvIG1lbW9yeSBzYWZldHk6IEkgbmVlZCB0byBydWxlIG91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBvciBpbmZvcm1hdGlvbiBsZWFrcy4KCkluIGBza19jbG9uZWAgd2UgaGF2ZSBgc29ja19jb3B5KG5ld3NrLCBzaylgIGZvbGxvd2VkIGJ5IGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLSZndDtwc3BfYXNzb2MsIE5VTEwpYC4gSSBkb24mIzM5O3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEluaXRpYWxseSwgYG5ld3NrLSZndDtwc3BfYXNzb2NgIGlzIGNvcGllZCBmcm9tIHRoZSBzb3VyY2UsIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZC4gVGhlbiwgd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gYE5VTExgLiBUaGlzIGlzIGEgc2FmZSBzZXF1ZW5jZS4gVGhlIHJvb3QgY2F1c2UgaXMgZGVmaW5pdGVseSB0aGUgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgYnVnLCB3aGVyZSB0aGUgc29ja2V0IGNsb25pbmcgY29waWVkIGEgcG9pbnRlciB3aXRob3V0IGluY3JlbWVudGluZyB0aGUgcmVmY291bnQgb3IgY2xlYXJpbmcgaXQuIFRoaXMgaXMgd2h5IEtBU0FOIGNhdGNoZXMgdGhlc2UgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1mcmVlIGJ1Z3MuCgpCdXQsIEkgYW0gbm90IHJlYWR5IHRvIGJlIGNvbXBsZXRlbHkgc2F0aXNmaWVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgbGVha3MuIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8gbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgaW52b2x2ZWQ/IExldCYjMzk7cyBnaXZlIGBwc3BfYXNzb2NgIGEgdGhvcm91Z2ggaW5zcGVjdGlvbiB3aXRoIGEgS01TQU4tbGlrZSBhcHByb2FjaC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UgdG8gYmUgc3VyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNwX3NrX2Fzc29jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zMz11bnNpZ25lZCBpbnQgcHNwX2tleV9zaXplKHUzMiB2ZXJzaW9uKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzUtdm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zNz12b2lkIHBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzgtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQwLXtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9NDU9cHNwX2VucXVldWVfc2V0X2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQ4LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQ5Olx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC01MC1cdGlmIChwYXMgXHUwMDI2XHUwMDI2IHBhcy1cdTAwM2V0eC5zcGkpXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTExNj1wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMTcte1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjExODpcdHJldHVybiBfX3BzcF9za19yeF9wb2xpY3lfY2hlY2soc2tiLCBwc3Bfc2tfYXNzb2Moc2spKTtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMTktfVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU3LSNlbHNlXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spIHsgfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1OS1zdGF0aWMgaW5saW5lIHZvaWRcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTYzPXBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikgeyB9XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY0LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY2LXtcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTQwPXZvaWQgaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY2LVx0ZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cdTAwM2Vza19yeF9kc3QsIDEpKTtcbm5ldC9pcHY0L2FmX2luZXQuYzoxNjc6XHRwc3Bfc2tfYXNzb2NfZnJlZShzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY4LX1cbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTE4PXZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTEyMy1cbm5ldC9wc3AvcHNwX3NvY2suYzoxMjQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTMyPWludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG4tLVxubmV0L3BzcC9wc3Bfc29jay5jLTE0MS1cbm5ldC9wc3AvcHNwX3NvY2suYzoxNDI6XHRpZiAocHNwX3NrX2Fzc29jKHNrKSkge1xubmV0L3BzcC9wc3Bfc29jay5jLTE0My1cdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXCYjMzQ7KTtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTc3PWludCBwc3Bfc29ja19hc3NvY19zZXRfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2RldiAqcHNkLFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xODYtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTg3Olx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0xODgtXHRpZiAoIXBhcykge1xuLS1cbm5ldC9wc3AvcHNwX3NvY2suYz0yNjY9dm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjY3LXtcbm5ldC9wc3AvcHNwX3NvY2suYzoyNjg6XHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xubmV0L3BzcC9wc3Bfc29jay5jLTI2OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjEKCQkJCQkJCW91dHB1dDogMjM3CgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNvY2tldCBDbG9uaW5nIEJ1ZyBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290LiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkZHJlc3NlcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgc29ja2V0IGNsb25pbmcgbWVjaGFuaXNtLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIGhvdyBgcHNwX2Fzc29jYCAoYSBzZWN1cml0eSBhc3NvY2lhdGlvbiByZWxhdGVkIHN0cnVjdHVyZSkgaXMgaGFuZGxlZCB3aGVuIGEgc29ja2V0IChgc2tgKSBpcyBjbG9uZWQgdG8gY3JlYXRlIGEgbmV3IHNvY2tldCAoYG5ld3NrYCkuCgpFc3NlbnRpYWxseSwgYHNvY2tfY29weWAgd2FzIGNvcHlpbmcgdGhlIGBzay0mZ3Q7cHNwX2Fzc29jYCBwb2ludGVyIHRvIGBuZXdzay0mZ3Q7cHNwX2Fzc29jYCB3aXRob3V0IGNvcnJlY3RseSBtYW5hZ2luZyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB1bmRlcmx5aW5nIGBwc3BfYXNzb2NgIHN0cnVjdHVyZS4gVGhpcyBtZWFudCBib3RoIGBza2AgYW5kIGBuZXdza2Agd2VyZSBwb2ludGluZyB0byB0aGUgc2FtZSBgcHNwX2Fzc29jYCB3aXRob3V0IHByb3Blcmx5IGluZGljYXRpbmcgc2hhcmVkIG93bmVyc2hpcCB0aHJvdWdoIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50ZXIuIExhdGVyLCB3aGVuIGVpdGhlciB0aGUgb3JpZ2luYWwgb3IgdGhlIGNsb25lZCBzb2NrZXQgd2FzIGRlc3Ryb3llZCB2aWEgYGluZXRfc29ja19kZXN0cnVjdGAgYW5kIGBwc3Bfc2tfYXNzb2NfZnJlZWAsIHRoZSBhc3NvY2lhdGVkIGBwc3BfYXNzb2NgIHN0cnVjdCB3b3VsZCBoYXZlIGBwc3BfYXNzb2NfcHV0YCBjYWxsZWQsIHdoaWNoIGRlY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQuIFRoaXMgY291bGQgbGVhZCB0byBhIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIGlmIGJvdGggc29ja2V0cyB3ZXJlIGV2ZW50dWFsbHkgZGVzdHJveWVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IGNvcnJ1cHRlZCBzdGF0ZS4KClRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGluaXRpYWxpemluZyBgbmV3c2stJmd0O3BzcF9hc3NvY2AgdG8gYE5VTExgIHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSYCAqZHVyaW5nKiB0aGUgY2xvbmUgb3BlcmF0aW9uLiBUaGlzIHByZXZlbnRzIGBuZXdza2AgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQmIzM5O3MgYXNzb2NpYXRpb24gYXQgYWxsLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgd2hldGhlciB0aGlzIGNoYW5nZSwgYW5kIHRoZSBidWcgaXQgZml4ZXMsIHdhcnJhbnRzIGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnLiBJIGhhdmUgdG8gYW5hbHl6ZSBpZiB0aGlzIGludHJvZHVjZXMgb3IgZWxpbWluYXRlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd3JpdGVzIG9yIG1lbW9yeS1yZWxhdGVkIGZsYXdzLgoKSSYjMzk7dmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoZSBjb2RlIGFuZCBJIGNhbiBkZWZpbml0aXZlbHkgc2F5IHRoYXQgdGhpcyBpc3N1ZSBpcyAqbm90KiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBvYmplY3QgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhlIGltcHJvcGVyIGFsaWFzaW5nIGFuZCBwb3RlbnRpYWwgZG91YmxlLWZyZWUvdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBLTVNBTiBjaGVja3M6CgoxLiAgSXMgdGhlcmUga2VybmVsIGRhdGEgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8uCjIuICBJcyB0aGVyZSBjb25kaXRpb25hbCBsb2dpYyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4KMy4gIEFyZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGFyZSB0aGVuIHJlYWQgbGF0ZXI/IE5vLgo0LiAgSXMgdGhlIHVzZSBvZiBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBldGMuLCBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm8uCgpUaGlzIGJ1ZyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBkb21haW4gb2YgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBwb2ludGVyIG1hbmFnZW1lbnQuIEtBU0FOIGlzIGFscmVhZHkgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdHJhY2tpbmcgdGhlc2Ugc29ydHMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKGRhbmdsaW5nIHBvaW50ZXJzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUpIGJ5IGVuc3VyaW5nIG1lbW9yeSBpcyB2YWxpZC4KClRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkIGhlcmUsIGFuZCBJJiMzOTtsbCBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIGEgY2xlYXIgY2FzZSBvZiBLQVNBTiYjMzk7cyBzdHJlbmd0aHMsIG5vdCBLTVNBTiYjMzk7cy4gVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza19jbG9uZSgpYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIHZpYSBgUkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpYC4gXG5cbldoZW4gYSBzb2NrZXQgaXMgY2xvbmVkLCBgc29ja19jb3B5KClgIHBlcmZvcm1zIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzb2NrZXQgc3RydWN0dXJlIGZyb20gcGFyZW50IHRvIGNoaWxkLiBXaXRob3V0IGNsZWFyaW5nIGBuZXdzay1cdTAwM2Vwc3BfYXNzb2NgLCB0aGUgY2xvbmVkIHNvY2tldCBpbmhlcml0ZWQgdGhlIHBhcmVudCYjMzk7cyBwb2ludGVyIHRvIGBzdHJ1Y3QgcHNwX2Fzc29jYCB3aXRob3V0IHRha2luZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudC4gVXBvbiBkZXN0cnVjdGlvbiBvZiB0aGUgY2xvbmVkIHNvY2tldCAoYHBzcF9za19hc3NvY19mcmVlYCksIGBwc3BfYXNzb2NfcHV0KClgIHdvdWxkIGJlIGNhbGxlZCwgbGVhZGluZyB0byByZWZlcmVuY2UgdW5kZXJmbG93LCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgZXJyb3JzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWRkcmVzc2luZyBvYmplY3QgbGlmZWN5Y2xlLCBwb2ludGVyIGFsaWFzaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyAod2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tfY2xvbmUoKWAgaW4gYG5ldC9jb3JlL3NvY2suY2AgdG8gZXhwbGljaXRseSBpbml0aWFsaXplIGBuZXdzay1cdTAwM2Vwc3BfYXNzb2NgIHRvIGBOVUxMYCB2aWEgYFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKWAuIFxuXG5XaGVuIGEgc29ja2V0IGlzIGNsb25lZCwgYHNvY2tfY29weSgpYCBwZXJmb3JtcyBhIHNoYWxsb3cgY29weSBvZiB0aGUgc29ja2V0IHN0cnVjdHVyZSBmcm9tIHBhcmVudCB0byBjaGlsZC4gV2l0aG91dCBjbGVhcmluZyBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCwgdGhlIGNsb25lZCBzb2NrZXQgaW5oZXJpdGVkIHRoZSBwYXJlbnQmIzM5O3MgcG9pbnRlciB0byBgc3RydWN0IHBzcF9hc3NvY2Agd2l0aG91dCB0YWtpbmcgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnQuIFVwb24gZGVzdHJ1Y3Rpb24gb2YgdGhlIGNsb25lZCBzb2NrZXQgKGBwc3Bfc2tfYXNzb2NfZnJlZWApLCBgcHNwX2Fzc29jX3B1dCgpYCB3b3VsZCBiZSBjYWxsZWQsIGxlYWRpbmcgdG8gcmVmZXJlbmNlIHVuZGVyZmxvdywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGVycm9ycy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFkZHJlc3Npbmcgb2JqZWN0IGxpZmVjeWNsZSwgcG9pbnRlciBhbGlhc2luZywgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgKHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTikuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyMzoxNC45MDczMDQyNzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTc5NjQ3NjM4OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9QU1BcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19jbG9uZVwiLFxuICAgIFwicHNwX3NvY2tfYXNzb2Nfc2V0X3J4XCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfdHhcIixcbiAgICBcInBzcF9za19hc3NvY19mcmVlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tfY2xvbmUoKWAgaW4gYG5ldC9jb3JlL3NvY2suY2AgdG8gZXhwbGljaXRseSBpbml0aWFsaXplIGBuZXdzay1cXHUwMDNlcHNwX2Fzc29jYCB0byBgTlVMTGAgdmlhIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpYC4gXFxuXFxuV2hlbiBhIHNvY2tldCBpcyBjbG9uZWQsIGBzb2NrX2NvcHkoKWAgcGVyZm9ybXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIHNvY2tldCBzdHJ1Y3R1cmUgZnJvbSBwYXJlbnQgdG8gY2hpbGQuIFdpdGhvdXQgY2xlYXJpbmcgYG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2NgLCB0aGUgY2xvbmVkIHNvY2tldCBpbmhlcml0ZWQgdGhlIHBhcmVudCdzIHBvaW50ZXIgdG8gYHN0cnVjdCBwc3BfYXNzb2NgIHdpdGhvdXQgdGFraW5nIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGNvdW50LiBVcG9uIGRlc3RydWN0aW9uIG9mIHRoZSBjbG9uZWQgc29ja2V0IChgcHNwX3NrX2Fzc29jX2ZyZWVgKSwgYHBzcF9hc3NvY19wdXQoKWAgd291bGQgYmUgY2FsbGVkLCBsZWFkaW5nIHRvIHJlZmVyZW5jZSB1bmRlcmZsb3csIHVzZS1hZnRlci1mcmVlLCBvciBkb3VibGUtZnJlZSBlcnJvcnMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFkZHJlc3Npbmcgb2JqZWN0IGxpZmVjeWNsZSwgcG9pbnRlciBhbGlhc2luZywgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgKHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTikuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgc29ja2V0J3MgcHNwX2Fzc29jIHBvaW50ZXIgaXMgY2xlYXJlZCBkdXJpbmcgc2tfY2xvbmUoKSB3aGVuIElORVRfUFNQIGlzIGVuYWJsZWQsIHByZXZlbnRpbmcgdGhlIG5ld2x5IGNsb25lZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHRoZSBwYXJlbnQgc29ja2V0J3MgUFNQIGFzc29jaWF0aW9uIHBvaW50ZXIgd2l0aG91dCBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudC4gVGhpcyBhdm9pZHMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSBjb25kaXRpb25zIHVwb24gc29ja2V0IGRlc3RydWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyMzoxNC45MDczMTE3OThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTg0NzQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNhNWE4NWViYmFjNjk3NTJlMGFmYWY2Y2E4ODhiNTNhYTU2ZjA0OWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTc6MjM6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXFxuaW5kZXggMWFkNDE5MDRkYjI1Yi4uZmE2MGI3NDk0YzU4NiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9zb2NrLmNcXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcXG5AQCAtMjQ5NCw2ICsyNDk0LDkgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gXFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xcbiAjZW5kaWZcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbitcXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xcbisjZW5kaWZcXG4gXFxuIFxcdC8qIFNBTklUWSAqL1xcbiBcXHRpZiAobGlrZWx5KG5ld3NrLVxcdTAwM2Vza19uZXRfcmVmY250KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyMzoxNS4yNDk4NTU0MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5NTQyMjI1MTIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX2Nsb25lXCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfcnhcIixcbiAgICBcInBzcF9zb2NrX2Fzc29jX3NldF90eFwiLFxuICAgIFwicHNwX3NrX2Fzc29jX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCdzIHBzcF9hc3NvYyBwb2ludGVyIGlzIGNsZWFyZWQgZHVyaW5nIHNrX2Nsb25lKCkgd2hlbiBJTkVUX1BTUCBpcyBlbmFibGVkLCBwcmV2ZW50aW5nIHRoZSBuZXdseSBjbG9uZWQgc29ja2V0IGZyb20gaW5oZXJpdGluZyB0aGUgcGFyZW50IHNvY2tldCdzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2E1YTg1ZWJiYWM2OTc1MmUwYWZhZjZjYTg4OGI1M2FhNTZmMDQ5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjIzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCAxYWQ0MTkwNGRiMjViLi5mYTYwYjc0OTRjNTg2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0yNDk0LDYgKzI0OTQsOSBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXNrX2JwZl9zdG9yYWdlLCBOVUxMKTtcbiAjZW5kaWZcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4rXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG4rI2VuZGlmXG4gXG4gXHQvKiBTQU5JVFkgKi9cbiBcdGlmIChsaWtlbHkobmV3c2stXHUwMDNlc2tfbmV0X3JlZmNudCkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjIzOjE1LjI0OTg1Njc1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzE3MTQxMDA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb21taXQuIFRoZSBpbml0aWFsIGZvY3VzIGlzIHRoZSBjaGFuZ2Ugd2l0aGluIGBuZXQvY29yZS9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBza19jbG9uZWAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpdHNlbGYgaXMgc2ltcGxlLCBhIGNvbmRpdGlvbmFsIGluaXRpYWxpemF0aW9uOlxuXG5gYGBjXG4jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5cdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbiNlbmRpZlxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJ2xsIHVzZSBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjb21tYW5kIHRvIHB1bGwgdXAgYG5ldC9jb3JlL3NvY2suY2AgYXJvdW5kIGxpbmUgMjQ5NCB0byBzZWUgd2hhdCBzdXJyb3VuZHMgdGhpcyBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgbGlrZWx5IGdpdmUgaW5zaWdodHMgaW50byB3aHkgdGhpcyBsaW5lIG9mIGNvZGUgZXhpc3RzLiBJJ2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGBDT05GSUdfSU5FVF9QU1BgIGFuZCBgcHNwX2Fzc29jYC4gSSB3aWxsIHNlYXJjaCB0aGUgZW50aXJlIHRyZWUgZm9yIGJvdGggb2YgdGhlc2UsIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSB1c2luZyBgZ3JlcHBlcmAgb3IgYSBzaW1pbGFyIHRvb2wuIFRoaXMgc2hvdWxkIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODIsIk91dHB1dFRva2VucyI6NzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNToyMi40MjEyNzA0ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0ODA6XFx0XFx0XFx0ICAgICAgYm9vbCBsb2NrKVxcbjI0ODE6XFx0e1xcbjI0ODI6XFx0XFx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG4yNDgzOlxcdFxcdHN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjtcXG4yNDg0OlxcdFxcdGJvb2wgaXNfY2hhcmdlZCA9IHRydWU7XFxuMjQ4NTpcXHRcXHRzdHJ1Y3Qgc29jayAqbmV3c2s7XFxuMjQ4NjpcXHRcXG4yNDg3OlxcdFxcdG5ld3NrID0gc2tfcHJvdF9hbGxvYyhwcm90LCBwcmlvcml0eSwgc2stXFx1MDAzZXNrX2ZhbWlseSk7XFxuMjQ4ODpcXHRcXHRpZiAoIW5ld3NrKVxcbjI0ODk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQ5MDpcXHRcXG4yNDkxOlxcdFxcdHNvY2tfY29weShuZXdzaywgc2spO1xcbjI0OTI6XFx0XFxuMjQ5MzpcXHRcXHRuZXdzay1cXHUwMDNlc2tfcHJvdF9jcmVhdG9yID0gcHJvdDtcXG4yNDk0OlxcdCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4yNDk1OlxcdFxcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXNrX2JwZl9zdG9yYWdlLCBOVUxMKTtcXG4yNDk2OlxcdCNlbmRpZlxcbjI0OTc6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbjI0OTg6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG4yNDk5OlxcdCNlbmRpZlxcbjI1MDA6XFx0XFxuMjUwMTpcXHRcXHQvKiBTQU5JVFkgKi9cXG4yNTAyOlxcdFxcdGlmIChsaWtlbHkobmV3c2stXFx1MDAzZXNrX25ldF9yZWZjbnQpKSB7XFxuMjUwMzpcXHRcXHRcXHRnZXRfbmV0X3RyYWNrKHNvY2tfbmV0KG5ld3NrKSwgXFx1MDAyNm5ld3NrLVxcdTAwM2Vuc190cmFja2VyLCBwcmlvcml0eSk7XFxuMjUwNDpcXHRcXHRcXHRzb2NrX2ludXNlX2FkZChzb2NrX25ldChuZXdzayksIDEpO1xcbjI1MDU6XFx0XFx0fSBlbHNlIHtcXG4yNTA2OlxcdFxcdFxcdC8qIEtlcm5lbCBzb2NrZXRzIGFyZSBub3QgZWxldmF0aW5nIHRoZSBzdHJ1Y3QgbmV0IHJlZmNvdW50LlxcbjI1MDc6XFx0XFx0XFx0ICogSW5zdGVhZCwgdXNlIGEgdHJhY2tlciB0byBtb3JlIGVhc2lseSBkZXRlY3QgaWYgYSBsYXllclxcbjI1MDg6XFx0XFx0XFx0ICogaXMgbm90IHByb3Blcmx5IGRpc21hbnRsaW5nIGl0cyBrZXJuZWwgc29ja2V0cyBhdCBuZXRuc1xcbjI1MDk6XFx0XFx0XFx0ICogZGVzdHJveSB0aW1lLlxcbjI1MTA6XFx0XFx0XFx0ICovXFxuMjUxMTpcXHRcXHRcXHRuZXRfcGFzc2l2ZV9pbmMoc29ja19uZXQobmV3c2spKTtcXG4yNTEyOlxcdFxcdFxcdF9fbmV0bnNfdHJhY2tlcl9hbGxvYyhzb2NrX25ldChuZXdzayksIFxcdTAwMjZuZXdzay1cXHUwMDNlbnNfdHJhY2tlcixcXG4yNTEzOlxcdFxcdFxcdFxcdFxcdCAgICAgIGZhbHNlLCBwcmlvcml0eSk7XFxuMjUxNDpcXHRcXHR9XFxuMjUxNTpcXHRcXG4yNTE2OlxcdFxcdHNrX25vZGVfaW5pdChcXHUwMDI2bmV3c2stXFx1MDAzZXNrX25vZGUpO1xcbjI1MTc6XFx0XFx0c29ja19sb2NrX2luaXQobmV3c2spO1xcbjI1MTg6XFx0XFxuMjUxOTpcXHRcXHRpZiAobG9jaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjU6MjIuNDIxNDUzMzA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjAzMjA0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5FVF9QU1BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9MjEwPWNvbmZpZyBNTFg1X0VOX1BTUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTIxMS1cXHRib29sIFxcXCJNZWxsYW5veCBUZWNobm9sb2dpZXMgc3VwcG9ydCBmb3IgUFNQIGNyeXB0b2dyYXBoeS1vZmZsb2FkIGFjY2VsZXJhdGlvblxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzoyMTI6XFx0ZGVwZW5kcyBvbiBJTkVUX1BTUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTIxMy1cXHRkZXBlbmRzIG9uIE1MWDVfQ09SRV9FTlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlPTE5PWVuZGlmXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTIwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZToyMTppZm5lcSAoJChDT05GSUdfSU5FVF9QU1ApLClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUtMjItbmV0ZGV2c2ltLW9ianMgKz0gcHNwLm9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ0OS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDUxLWludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzODgtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTAtXFx0c3RydWN0IHBzcF9kZXYgX19yY3VcXHQqcHNwX2RldjtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA0Mz1lbnVtIHNrYl9leHRfaWQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDU4LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA1OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDYwLVxcdFNLQl9FWFRfUFNQLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04NC1cXHRzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXRcXHQqdHdfdGIyO1xcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oOjg1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ni1cXHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XFx0ICAqcHNwX2Fzc29jO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2Fzc29jX2Rydl9kYXRhKHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zMS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zMy11bnNpZ25lZCBpbnQgcHNwX2tleV9zaXplKHUzMiB2ZXJzaW9uKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTQ2Ni0jZW5kaWZcXG5pbmNsdWRlL25ldC9zb2NrLmg6NDY3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5pbmNsdWRlL25ldC9zb2NrLmgtNDY4LVxcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcXHQqcHNwX2Fzc29jO1xcbi0tXFxubmV0L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19VTklYKVxcdFxcdCs9IHVuaXgvXFxubmV0L01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19JTkVUX1BTUClcXHRcXHQrPSBwc3AvXFxubmV0L01ha2VmaWxlLTIyLW9iai15XFx0XFx0XFx0XFx0Kz0gaXB2Ni9cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTUxNTA9c3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUxNjUtI2VuZGlmXFxubmV0L2NvcmUvc2tidWZmLmM6NTE2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxubmV0L2NvcmUvc2tidWZmLmMtNTE2Ny1cXHRbU0tCX0VYVF9QU1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgcHNwX3NrYl9leHQpLFxcbi0tXFxubmV0L2NvcmUvc29jay5jPTI0Nzk9c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjQ5Ni0jZW5kaWZcXG5uZXQvY29yZS9zb2NrLmM6MjQ5NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxubmV0L2NvcmUvc29jay5jLTI0OTgtXFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG4tLVxcbm5ldC9wc3AvS2NvbmZpZy00LSNcXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1BcXG5uZXQvcHNwL0tjb25maWctNi1cXHRib29sIFxcXCJQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9wc3AvTWFrZWZpbGUtMi1cXG5uZXQvcHNwL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0lORVRfUFNQKSArPSBwc3Aub1xcbm5ldC9wc3AvTWFrZWZpbGUtNC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZz0zPUNPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTPW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWc6NDpDT05GSUdfSU5FVF9QU1A9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZy01LUNPTkZJR19JUFY2PXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjU6MjQuMDQxNzc5ODM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTc4Mjc3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNwX2Fzc29jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz05MzE9c3RydWN0IHBzcF9rZXkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTkzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6OTM1OnN0YXRpYyBpbnQgbWx4NWVfcHNwX2Fzc29jX2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTkzNi1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTk2MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6OTYxOnN0YXRpYyB2b2lkIG1seDVlX3BzcF9hc3NvY19kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05NjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jPTEwMTE9c3RhdGljIHN0cnVjdCBwc3BfZGV2X29wcyBtbHg1X3BzcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtMTAxMy1cXHQucnhfc3BpX2FsbG9jID0gbWx4NWVfcHNwX3J4X3NwaV9hbGxvYyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6MTAxNDpcXHQudHhfa2V5X2FkZCAgID0gbWx4NWVfcHNwX2Fzc29jX2FkZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6MTAxNTpcXHQudHhfa2V5X2RlbCAgID0gbWx4NWVfcHNwX2Fzc29jX2RlbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtMTAxNi1cXHQua2V5X3JvdGF0ZSAgID0gbWx4NWVfcHNwX2tleV9yb3RhdGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYz05Mz1zdGF0aWMgYm9vbCBtbHg1ZV9wc3Bfc2V0X3N0YXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMtOTYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jOjk3OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYy05OC1cXHRib29sIHJldCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTE4PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIyLVxcdHN0cnVjdCBwc3BfZGV2ICpwZWVyX3BzZDtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjM6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNC1cXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMzktXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjQwOlxcdHB0ciA9IHBzcF9hc3NvY19kcnZfZGF0YShwYXMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy00MS1cXHRpZiAoKnB0ciAhPSBucykge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTEzMT1uc2ltX3J4X3NwaV9hbGxvYyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1MzIgdmVyc2lvbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTEtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE1MjpzdGF0aWMgaW50IG5zaW1fYXNzb2NfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUzLVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1NS1cXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IHBzZC1cXHUwMDNlZHJ2X3ByaXY7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE1NjpcXHR2b2lkICoqcHRyID0gcHNwX2Fzc29jX2Rydl9kYXRhKHBhcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xNjU9c3RhdGljIGludCBuc2ltX2tleV9yb3RhdGUoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE3OS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTgwOnN0YXRpYyB2b2lkIG5zaW1fYXNzb2NfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTgxLXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTgyLVxcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gcHNkLVxcdTAwM2VkcnZfcHJpdjtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTgzOlxcdHZvaWQgKipwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTg0LVxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04NS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6ODY6XFx0c3RydWN0IHBzcF9hc3NvYyBfX3JjdVxcdCAgKnBzcF9hc3NvYztcXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ny0jZW5kaWZcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0yMj1pbnQgcHNwX2Rldl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGRldl9pZCwgdTggZ2VuZXJhdGlvbiwgYm9vbCBzdHJpcF9pY3YpO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTI0LS8qIEtlcm5lbC1mYWNpbmcgQVBJICovXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjI1OnZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yNi1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mjc6c3RhdGljIGlubGluZSB2b2lkICpwc3BfYXNzb2NfZHJ2X2RhdGEoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yOC17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mzc9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zOC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00MC17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQxOlxcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfY2hlY2soc2stXFx1MDAzZXBzcF9hc3NvYywgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDItfVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTQ1PXBzcF9lbnF1ZXVlX3NldF9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00Ni17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQ3OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDgtXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Njk9c3RhdGljIGlubGluZSBib29sXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjcwOnBzcF9pc19hbGxvd2VkX25vbmRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC03MS17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9ODI9c3RhdGljIGlubGluZSBib29sXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjgzOnBzcF9wc2VfbWF0Y2hlc19wYXMoc3RydWN0IHBzcF9za2JfZXh0ICpwc2UsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtODQte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTkxPXN0YXRpYyBpbmxpbmUgZW51bSBza2JfZHJvcF9yZWFzb25cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6OTI6X19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtOTMte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTEyMj1wc3BfdHdza19yeF9wb2xpY3lfY2hlY2soc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsIHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyMy17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjEyNDpcXHRyZXR1cm4gX19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrYiwgcmN1X2RlcmVmZXJlbmNlKHR3LVxcdTAwM2Vwc3BfYXNzb2MpKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTI1LX1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTI2LVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjc6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfZ2V0X2Fzc29jX3JjdShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyOC17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjEyOTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEzMC1cXHRpbnQgc3RhdGU7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTM2LVxcdHBhcyA9IHN0YXRlID09IFRDUF9USU1FX1dBSVQgP1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMzc6XFx0XFx0ICAgICAgcmN1X2RlcmVmZXJlbmNlKGluZXRfdHdzayhzayktXFx1MDAzZXBzcF9hc3NvYykgOlxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMzg6XFx0XFx0ICAgICAgcmN1X2RlcmVmZXJlbmNlKHNrLVxcdTAwM2Vwc3BfYXNzb2MpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMzktXFx0cmV0dXJuIHBhcztcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNDEtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE0MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za2JfZ2V0X2Fzc29jX3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNDMte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE1MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwc3Bfc2tfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1Mi1cXHRpbnQgcHNwX2VuY2FwID0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgUFNQX0hEUl9TSVpFICsgUFNQX1RSTF9TSVpFO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNTM6XFx0Ym9vbCBoYXNfcHNwID0gcmN1X2FjY2Vzc19wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTQtXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTYzPXBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikgeyB9XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2NC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTY1OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY2LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xODc9cHNwX3R3c2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE5MS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTkyOnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrYl9nZXRfYXNzb2NfcmN1KHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE5My17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaD00Mz1zdHJ1Y3QgcHNwX2Rldl9jb25maWcge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNTMtLyoqXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NTQ6ICogc3RydWN0IHBzcF9hc3NvY19kZXYgLSB3cmFwcGVyIGZvciBhc3NvY2lhdGVkIG5ldF9kZXZpY2VcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01NS0gKiBAZGV2X2xpc3Q6IGxpc3Qgbm9kZSBmb3IgcHNwX2Rldjo6YXNzb2NfZGV2X2xpc3RcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTU4LSAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjU5OnN0cnVjdCBwc3BfYXNzb2NfZGV2IHtcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC02MC1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0O1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjctICogQG1haW5fbmV0ZGV2OiBvcmlnaW5hbCBuZXRkZXZpY2Ugb2YgdGhpcyBQU1AgZGV2aWNlXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6Njg6ICogQGFzc29jX2Rldl9saXN0OiBsaXN0IG9mIHBzcF9hc3NvY19kZXYgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQU1AgZGV2aWNlXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjktICogQGFzc29jX2Rldl9jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBhc3NvY19kZXZfbGlzdFxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTI0PXN0cnVjdCBwc3BfZGV2X2NhcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTMyLVxcdCAqIEBhc3NvY19kcnZfc3BjOiBzaXplIG9mIGRyaXZlci1zcGVjaWZpYyBzdGF0ZSBpbiBUeCBhc3NvY1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjEzMzpcXHQgKiBEZXRlcm1pbmVzIHRoZSBzaXplIG9mIHN0cnVjdCBwc3BfYXNzb2M6OmRydl9kYXRhXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTM0LVxcdCAqL1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTUwPXN0cnVjdCBwc3Bfa2V5X3BhcnNlZCB7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0xNTQtXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MTU1OnN0cnVjdCBwc3BfYXNzb2Mge1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTE1Ni1cXHRzdHJ1Y3QgcHNwX2RldiAqcHNkO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9MTk1PXN0cnVjdCBwc3BfZGV2X29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMjItXFx0ICovXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MjIzOlxcdGludCAoKnR4X2tleV9hZGQpKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMjQtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjI4LVxcdCAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjIyOTpcXHR2b2lkICgqdHhfa2V5X2RlbCkoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0yMzAtXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MjQyPXN0cnVjdCBza19maWx0ZXI7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtMjU4LSAgKlxcdEBza19wb2xpY3k6IGZsb3cgcG9saWN5XFxuaW5jbHVkZS9uZXQvc29jay5oOjI1OTogICpcXHRAcHNwX2Fzc29jOiBQU1AgYXNzb2NpYXRpb24sIGlmIHNvY2tldCBpcyBQU1Atc2VjdXJlZFxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNjAtICAqXFx0QHNrX3JlY2VpdmVfcXVldWU6IGluY29taW5nIHBhY2tldHNcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTQ2Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuaW5jbHVkZS9uZXQvc29jay5oOjQ2ODpcXHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XFx0KnBzcF9hc3NvYztcXG5pbmNsdWRlL25ldC9zb2NrLmgtNDY5LSNlbmRpZlxcbi0tXFxubmV0L2NvcmUvc29jay5jPTI0Nzk9c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjQ5Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxubmV0L2NvcmUvc29jay5jOjI0OTg6XFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG5uZXQvY29yZS9zb2NrLmMtMjQ5OS0jZW5kaWZcXG4tLVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgcHNwX25sX29wc1tdID0ge1xcbi0tXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTA1LVxcdFxcdC5jbWRcXHRcXHQ9IFBTUF9DTURfUlhfQVNTT0MsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmM6MTA2OlxcdFxcdC5wcmVfZG9pdFxcdD0gcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkLFxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTEwNy1cXHRcXHQuZG9pdFxcdFxcdD0gcHNwX25sX3J4X2Fzc29jX2RvaXQsXFxuLS1cXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy0xMTQtXFx0XFx0LmNtZFxcdFxcdD0gUFNQX0NNRF9UWF9BU1NPQyxcXG5uZXQvcHNwL3BzcC1ubC1nZW4uYzoxMTU6XFx0XFx0LnByZV9kb2l0XFx0PSBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTE2LVxcdFxcdC5kb2l0XFx0XFx0PSBwc3BfbmxfdHhfYXNzb2NfZG9pdCxcXG4tLVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oPTIwPWludCBwc3BfZGV2aWNlX2dldF9sb2NrZWRfYWRtaW4oY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMjEtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxubmV0L3BzcC9wc3AtbmwtZ2VuLmg6MjI6aW50IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcyxcXG5uZXQvcHNwL3BzcC1ubC1nZW4uaC0yMy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4tLVxcbm5ldC9wc3AvcHNwLmg9MjE9dm9pZCBwc3Bfbmxfbm90aWZ5X2RldihzdHJ1Y3QgcHNwX2RldiAqcHNkLCB1MzIgY21kKTtcXG5uZXQvcHNwL3BzcC5oLTIyLVxcbm5ldC9wc3AvcHNwLmg6MjM6c3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2NyZWF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkKTtcXG5uZXQvcHNwL3BzcC5oLTI0LXN0cnVjdCBwc3BfZGV2ICpwc3BfZGV2X2dldF9mb3Jfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9wc3AvcHNwLmg6MjU6dm9pZCBwc3BfZGV2X3R4X2tleV9kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcXG5uZXQvcHNwL3BzcC5oOjI2OmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3AuaC0yNy1cXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbi0tXFxubmV0L3BzcC9wc3AuaD0yOT1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcXG4tLVxcbm5ldC9wc3AvcHNwLmgtMzEtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9wc3AvcHNwLmg6MzI6dm9pZCBwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHN0cnVjdCBwc3BfZGV2ICpwc2QpO1xcbm5ldC9wc3AvcHNwLmgtMzMtXFxuLS1cXG5uZXQvcHNwL3BzcF9tYWluLmM9MTMxPXZvaWQgcHNwX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBwc3BfZGV2ICpwc2QpXFxubmV0L3BzcC9wc3BfbWFpbi5jLTEzMi17XFxubmV0L3BzcC9wc3BfbWFpbi5jOjEzMzpcXHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnksICplbnRyeV90bXA7XFxubmV0L3BzcC9wc3BfbWFpbi5jOjEzNDpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpuZXh0O1xcbm5ldC9wc3AvcHNwX21haW4uYy0xMzUtXFxuLS1cXG5uZXQvcHNwL3BzcF9tYWluLmM9NDA4PXN0YXRpYyB2b2lkIHBzcF9kZXZfZGlzYXNzb2Nfb25lKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L3BzcC9wc3BfbWFpbi5jLTQwOS17XFxubmV0L3BzcC9wc3BfbWFpbi5jOjQxMDpcXHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XFxubmV0L3BzcC9wc3BfbWFpbi5jLTQxMS1cXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NTQ9cHNwX25sX211bHRpY2FzdF9wZXJfbnMoc3RydWN0IHBzcF9kZXYgKnBzZCwgdW5zaWduZWQgaW50IGdyb3VwLFxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy01OS17XFxubmV0L3BzcC9wc3BfbmwuYzo2MDpcXHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XFxubmV0L3BzcC9wc3BfbmwuYy02MS1cXHRzdHJ1Y3QgeGFycmF5IHNlbnRfbmV0cztcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9MjMwPWJvb2wgcHNwX2hhc19hc3NvY19kZXZfaW5fbnMoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9wc3AvcHNwX25sLmMtMjMxLXtcXG5uZXQvcHNwL3BzcF9ubC5jOjIzMjpcXHRzdHJ1Y3QgcHNwX2Fzc29jX2RldiAqZW50cnk7XFxubmV0L3BzcC9wc3BfbmwuYy0yMzMtXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTI0Mj1zdGF0aWMgaW50IHBzcF9ubF9maWxsX2Fzc29jX2Rldl9saXN0KHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBza19idWZmICpyc3AsXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTI0NS17XFxubmV0L3BzcC9wc3BfbmwuYzoyNDY6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xcbm5ldC9wc3AvcHNwX25sLmMtMjQ3LVxcdHN0cnVjdCBuZXQgKmRldl9uZXRfbnM7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTQ0Nz1pbnQgcHNwX25sX2tleV9yb3RhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy00ODItXFxubmV0L3BzcC9wc3BfbmwuYzo0ODM6XFx0cHNwX2Fzc29jc19rZXlfcm90YXRlZChwc2QpO1xcbm5ldC9wc3AvcHNwX25sLmMtNDg0LVxcdHBzZC1cXHUwMDNlc3RhdHMucm90YXRpb25zKys7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTQ5OT1pbnQgcHNwX25sX2Rldl9hc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTUwMS1cXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxubmV0L3BzcC9wc3BfbmwuYzo1MDI6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKnBzcF9hc3NvY19kZXY7XFxubmV0L3BzcC9wc3BfbmwuYy01MDMtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmFzc29jX2RldjtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTE4LVxcbm5ldC9wc3AvcHNwX25sLmM6NTE5OlxcdHBzcF9hc3NvY19kZXYgPSBremFsbG9jX29iaigqcHNwX2Fzc29jX2Rldik7XFxubmV0L3BzcC9wc3BfbmwuYzo1MjA6XFx0aWYgKCFwc3BfYXNzb2NfZGV2KSB7XFxubmV0L3BzcC9wc3BfbmwuYy01MjEtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTI2LVxcdGFzc29jX2RldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgobmV0LCBhc3NvY19pZmluZGV4LFxcbm5ldC9wc3AvcHNwX25sLmM6NTI3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwc3BfYXNzb2NfZGV2LVxcdTAwM2VkZXZfdHJhY2tlcixcXG5uZXQvcHNwL3BzcF9ubC5jLTUyOC1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTQzLVxcbm5ldC9wc3AvcHNwX25sLmM6NTQ0OlxcdHBzcF9hc3NvY19kZXYtXFx1MDAzZWFzc29jX2RldiA9IGFzc29jX2RldjtcXG5uZXQvcHNwL3BzcF9ubC5jLTU0NS1cXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTYzLVxcbm5ldC9wc3AvcHNwX25sLmM6NTY0OlxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBzcF9hc3NvY19kZXYtXFx1MDAzZWRldl9saXN0LCBcXHUwMDI2cHNkLVxcdTAwM2Vhc3NvY19kZXZfbGlzdCk7XFxubmV0L3BzcC9wc3BfbmwuYy01NjUtXFx0cHNkLVxcdTAwM2Vhc3NvY19kZXZfY250Kys7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTU3NS1lcnJfcHV0X2RldjpcXG5uZXQvcHNwL3BzcF9ubC5jOjU3NjpcXHRuZXRkZXZfcHV0KGFzc29jX2RldiwgXFx1MDAyNnBzcF9hc3NvY19kZXYtXFx1MDAzZWRldl90cmFja2VyKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTU3Ny1lcnJfZnJlZV9hc3NvYzpcXG5uZXQvcHNwL3BzcF9ubC5jOjU3ODpcXHRrZnJlZShwc3BfYXNzb2NfZGV2KTtcXG5uZXQvcHNwL3BzcF9ubC5jLTU3OS1lcnJfcHV0X25ldDpcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NTg1PWludCBwc3BfbmxfZGV2X2Rpc2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvcHNwL3BzcF9ubC5jLTU4Ni17XFxubmV0L3BzcC9wc3BfbmwuYzo1ODc6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5LCAqZm91bmQgPSBOVUxMO1xcbm5ldC9wc3AvcHNwX25sLmMtNTg4LVxcdHN0cnVjdCBwc3BfZGV2ICpwc2QgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNjM4LVxcbm5ldC9wc3AvcHNwX25sLmM6NjM5OmludCBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXFxubmV0L3BzcC9wc3BfbmwuYy02NDAtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy03NzQtXFx0c3RydWN0IHBzcF9rZXlfcGFyc2VkIGtleTtcXG5uZXQvcHNwL3BzcF9ubC5jOjc3NTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxubmV0L3BzcC9wc3BfbmwuYy03NzYtXFx0c3RydWN0IHNrX2J1ZmYgKnJzcDtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNzkyLVxcbm5ldC9wc3AvcHNwX25sLmM6NzkzOlxcdHBhcyA9IHBzcF9hc3NvY19jcmVhdGUocHNkKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTc5NC1cXHRpZiAoIXBhcykge1xcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy04MTQtXFx0fVxcbm5ldC9wc3AvcHNwX25sLmM6ODE1OlxcdHBzcF9hc3NvY19wdXQocGFzKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTgxNi1cXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtODE5LWVycl9mcmVlX3BhczpcXG5uZXQvcHNwL3BzcF9ubC5jOjgyMDpcXHRwc3BfYXNzb2NfcHV0KHBhcyk7XFxubmV0L3BzcC9wc3BfbmwuYy04MjEtZXJyX2ZyZWVfcnNwOlxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTMwPXBzcF92YWxpZGF0ZV94bWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMzEte1xcbm5ldC9wc3AvcHNwX3NvY2suYzozMjpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxubmV0L3BzcC9wc3Bfc29jay5jLTMzLVxcdGJvb2wgZ29vZDtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy00Ni1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6NDc6c3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2NyZWF0ZShzdHJ1Y3QgcHNwX2RldiAqcHNkKVxcbm5ldC9wc3AvcHNwX3NvY2suYy00OC17XFxubmV0L3BzcC9wc3Bfc29jay5jOjQ5OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcXG5uZXQvcHNwL3BzcF9zb2NrLmMtNTAtXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtNjgtXFxubmV0L3BzcC9wc3Bfc29jay5jOjY5OnN0YXRpYyBzdHJ1Y3QgcHNwX2Fzc29jICpwc3BfYXNzb2NfZHVtbXkoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbm5ldC9wc3AvcHNwX3NvY2suYy03MC17XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtNzktXFxubmV0L3BzcC9wc3Bfc29jay5jOjgwOnN0YXRpYyBpbnQgcHNwX2Rldl90eF9rZXlfYWRkKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG5uZXQvcHNwL3BzcF9zb2NrLmMtODEtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTg1LVxcbm5ldC9wc3AvcHNwX3NvY2suYzo4Njp2b2lkIHBzcF9kZXZfdHhfa2V5X2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxubmV0L3BzcC9wc3Bfc29jay5jLTg3LXtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy05Mi1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6OTM6c3RhdGljIHZvaWQgcHNwX2Fzc29jX2ZyZWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy05NC17XFxubmV0L3BzcC9wc3Bfc29jay5jOjk1OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcHNwX2Fzc29jLCB3b3JrKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtOTYtXFx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IHBhcy1cXHUwMDNlcHNkO1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTEwNS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTA2OnN0YXRpYyB2b2lkIHBzcF9hc3NvY19mcmVlX3F1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA3LXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTA4OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcHNwX2Fzc29jLCByY3UpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMDktXFxubmV0L3BzcC9wc3Bfc29jay5jOjExMDpcXHRJTklUX1dPUksoXFx1MDAyNnBhcy1cXHUwMDNld29yaywgcHNwX2Fzc29jX2ZyZWUpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTEtXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2cGFzLVxcdTAwM2V3b3JrKTtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTQtLyoqXFxubmV0L3BzcC9wc3Bfc29jay5jOjExNTogKiBwc3BfYXNzb2NfcHV0KCkgLSByZWxlYXNlIGEgcmVmZXJlbmNlIG9uIGEgUFNQIGFzc29jaWF0aW9uXFxubmV0L3BzcC9wc3Bfc29jay5jLTExNi0gKiBAcGFzOiBhc3NvY2lhdGlvbiB0byByZWxlYXNlXFxubmV0L3BzcC9wc3Bfc29jay5jLTExNy0gKi9cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTE4OnZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxubmV0L3BzcC9wc3Bfc29jay5jLTExOS17XFxubmV0L3BzcC9wc3Bfc29jay5jLTEyMC1cXHRpZiAocGFzIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2cGFzLVxcdTAwM2VyZWZjbnQpKVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjE6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBhcy1cXHUwMDNlcmN1LCBwc3BfYXNzb2NfZnJlZV9xdWV1ZSk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTEyMi19XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTI0PXZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjUte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjY6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cXHUwMDNlcHNwX2Fzc29jLCAxKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI3LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjg6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjk6XFx0cHNwX2Fzc29jX3B1dChwYXMpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzAtfVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzEtXFxubmV0L3BzcC9wc3Bfc29jay5jOjEzMjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMzMtXFx0XFx0XFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDgtXFx0cmVmY291bnRfaW5jKFxcdTAwMjZwYXMtXFx1MDAzZXJlZmNudCk7XFxubmV0L3BzcC9wc3Bfc29jay5jOjE0OTpcXHRyY3VfYXNzaWduX3BvaW50ZXIoc2stXFx1MDAzZXBzcF9hc3NvYywgcGFzKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTUwLVxcdGVyciA9IDA7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTU3LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxNTg6c3RhdGljIGludCBwc3Bfc29ja19yZWN2X3F1ZXVlX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xNTkte1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTE3Nz1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xODEtXFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrO1xcbm5ldC9wc3AvcHNwX3NvY2suYzoxODI6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqZHVtbXk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTE4My1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTIxOS1cXHQgKi9cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjIwOlxcdGR1bW15ID0gcHNwX2Fzc29jX2R1bW15KHBhcyk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTIyMS1cXHRpZiAoIWR1bW15KSB7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjQ4LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoyNDk6dm9pZCBwc3BfYXNzb2NzX2tleV9yb3RhdGVkKHN0cnVjdCBwc3BfZGV2ICpwc2QpXFxubmV0L3BzcC9wc3Bfc29jay5jLTI1MC17XFxubmV0L3BzcC9wc3Bfc29jay5jOjI1MTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpuZXh0O1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yNTItXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjY2PXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yNjcte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoyNjg6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjY5LVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTI3MS1cXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnBhcy1cXHUwMDNlcmVmY250KTtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dy1cXHUwMDNlcHNwX2Fzc29jLCBwYXMpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzMtXFx0dHctXFx1MDAzZXR3X3ZhbGlkYXRlX3htaXRfc2tiID0gcHNwX3ZhbGlkYXRlX3htaXQ7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9Mjc2PXZvaWQgcHNwX3R3c2tfYXNzb2NfZnJlZShzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjc3LXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6Mjc4OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodHctXFx1MDAzZXBzcF9hc3NvYywgMSk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI3OS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjgwOlxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dy1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjgxOlxcdHBzcF9hc3NvY19wdXQocGFzKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjgyLX1cXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0yODQ9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3BzcC9wc3Bfc29jay5jLTI4NS17XFxubmV0L3BzcC9wc3Bfc29jay5jOjI4NjpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI4Ny1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02MDY9ZGVmIF9jaGVja19hc3NvY19saXN0KGNmZywgcHNwX2Rldl9pZCwgaWZpbmRleCwgbnNpZD1Ob25lKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02MjMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjYyNDpkZWYgX2RhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jKGNmZywgdmVyc2lvbiwgaXB2ZXIpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02MjUtICAgIFxcXCJcXFwiXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTY1OT1kZWYgX2dldF9wc3BfdmVyX2lwNl92YXJpYW50cygpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2NC1Aa3NmdF92YXJpYW50cyhfZ2V0X3BzcF92ZXJfaXA2X3ZhcmlhbnRzKCkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjY2NTpkZWYgZGF0YV9iYXNpY19zZW5kX25ldGtpdF9wc3BfYXNzb2MoY2ZnLCB2ZXJzaW9uLCBpcHZlcik6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2Ni0gICAgXFxcIlxcXCJcXFwiVGVzdCBQU1AgZGF0YSBzZW5kIHZpYSBuZXRraXQgd2l0aCBkZXYtYXNzb2MuXFxcIlxcXCJcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2Ny0gICAgY2ZnLnJlcXVpcmVfaXB2ZXIoaXB2ZXIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjY2ODogICAgX2RhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jKGNmZywgdmVyc2lvbiwgaXB2ZXIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTY2OS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02OTg9ZGVmIF9kZXZfY2hhbmdlX25vdGlmeV9tdWx0aV9uc19uZXRraXQoY2ZnKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS03MjUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjcyNjpkZWYgX3BzcF9kZXZfZ2V0X2NoZWNrX25ldGtpdF9wc3BfYXNzb2MoY2ZnKTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNzI3LSAgICBcXFwiXFxcIlxcXCIgQ2hlY2sgcHNwIGRldi1nZXQgb3V0cHV0IHdpdGggbmV0a2l0IGludGVyZmFjZSBhc3NvY2lhdGVkIHdpdGggUFNQIGRldiBcXFwiXFxcIlxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT05NDE9ZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTk4MC0gICAgICAgICAgICAgICAgICAgICAgICBfYXNzb2NfY2hlY2tfbGlzdCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6OTgxOiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODItICAgICAgICAgICAgICAgICAgICAgICAgX2tleV9yb3RhdGlvbl9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODMtICAgICAgICAgICAgICAgICAgICAgICAgX2Rldl9jaGFuZ2Vfbm90aWZ5X211bHRpX25zX25ldGtpdCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6OTg0OiAgICAgICAgICAgICAgICAgICAgICAgIF9wc3BfZGV2X2dldF9jaGVja19uZXRraXRfcHNwX2Fzc29jLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODUtICAgICAgICAgICAgICAgICAgICAgICAgX2Rldl9hc3NvY19ub19uc2lkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNToyNS42NTk2MTU5MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTMzMjk5MDY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyBvZiBuZXQvcHNwKipcblxuT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBgbmV0L3BzcGAgc3Vic3lzdGVtLiBNeSB1c3VhbCBhcHByb2FjaCDigJMgc3RhcnQgd2l0aCB0aGUgS2NvbmZpZy4gVGhhdCBmaWxlIGlzIHRoZSBmb3VuZGF0aW9uLCByaWdodD8gSXQnbGwgbGF5IG91dCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdmFyaWFibGVzIGFyZSBhdCBwbGF5IGhlcmUuIEZpZ3VyZSBvdXQgd2hhdCBmZWF0dXJlcyBhcmUgY29uZmlndXJhYmxlLCBob3cgdGhleSBpbnRlcnJlbGF0ZSwgYW5kIHdoYXQgdGhlIGJhc2VsaW5lIHNldHVwIGxvb2tzIGxpa2UuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgdGhlIGNvcmUgZGVzaWduIGRlY2lzaW9ucyBtYWRlIGJ5IHRoZSBvcmlnaW5hbCBhdXRob3JzLCBhbmQgc3RhcnQgdG8gZm9ybXVsYXRlIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjay4gU28sIGxldCdzIGNyYWNrIG9wZW4gYG5ldC9wc3AvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IGdlbXMgaXQgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI1OjQwLjk5MjYwODU2MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wc3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQU1AgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIElORVRfUFNQXFxuICAgNjpcXHRcXHRib29sIFxcXCJQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgUFNQIFNlY3VyaXR5IFByb3RvY29sIChQU1ApLlxcbiAgMTM6XFx0XFx0Rm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxcbiAgMTQ6XFx0XFx0ICBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZ29vZ2xlL3BzcC9tYWluL2RvYy9QU1BfQXJjaF9TcGVjLnBkZlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNTo0MC45OTI2ODE4OTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzA5NzUyMzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvbW1pdCdzIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHJlYWNoIGZvciBgZ2l0IGxvZ2AuIEkgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5IGRpcmVjdGx5LiBGb3JnZXQgdHJ5aW5nIHRvIGRlY2lwaGVyIHRoZSBkaWZmIGFsb25lOyBJIHdhbnQgdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCBsZWQgdG8gdGhpcyBjaGFuZ2U/IFdoYXQncyB0aGUgbmFycmF0aXZlIGFyb3VuZCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyB3YXMgZG9uZSwgbm90IGp1c3QgKndoYXQqIHdhcyBjaGFuZ2VkLiBUaGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmIGlzIGEgc3RhcnRpbmcgcG9pbnQsIG9mIGNvdXJzZSwgYnV0IG9mdGVuIGl0IG9ubHkgdGVsbHMgcGFydCBvZiB0aGUgc3RvcnkuIEknbSBsb29raW5nIGZvciB0aGUgXCJzbyB3aGF0P1wiIGJlaGluZCB0aGUgXCJ3aGF0LlwiIEdpdmUgbWUgdGhlIGNvbW1pdCBsb2cgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNzUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI1OjU0LjA5MDIwODgyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NjQwODcwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tfY2xvbmUuKnBzcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjU6NTYuMjM2NjI1NzI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1NDI4MjYwNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBza19jbG9uZWAgYW5kIGhvdyB0aGUgYHBzcF9hc3NvY2AgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc29ja2V0IGFsbG9jYXRpb24gYW5kIGNsb25pbmcuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB3aGVyZSB0aGVzZSBpbnRlcmFjdGlvbnMgb2NjdXIgaW4gdGhlIHNvY2tldCBjcmVhdGlvbiBhbmQgZHVwbGljYXRpb24gcHJvY2Vzcy5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uIGBza19jbG9uZWAgYW5kIHBpbnBvaW50IGl0cyBjYWxsZXJzLiBUaGlzIHdpbGwgc2hlZCBsaWdodCBvbiB0aGUgZXhhY3Qgc2VxdWVuY2Ugb2YgZXZlbnRzIGFuZCBob3cgdGhlIGFzc29jaWF0aW9uLCBvciBsYWNrIHRoZXJlb2YsIHdpdGggdGhlIGBwc3BfYXNzb2NgIHZhcmlhYmxlIGlzIG1hbmFnZWQgd2hlbiBzb2NrZXRzIGFyZSBjcmVhdGVkIGFuZCBzdWJzZXF1ZW50bHkgY2xvbmVkLiBUaGlzIGludmVzdGlnYXRpb24gd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYXNzb2NpYXRpb24gYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgaW4gdGhlIHNvY2tldCBkdXBsaWNhdGlvbiBwcm9jZXNzLiBJJ20gZm9jdXNpbmcgb24gdHJhY2luZyB0aGlzIGBwc3BfYXNzb2NgIHRocm91Z2ggdGhlIGNhbGwgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjY6MTEuNjY0ODg4ODA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAwODMwMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2Nsb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTc0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTEzPUZvciBzZWN1cml0eSBtb2R1bGUgc3VwcG9ydCwgdGhyZWUgU0NUUCBzcGVjaWZpYyBob29rcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQ6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xNi0gICAgc2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTc6ICAgIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMTgtICAgIHNlY3VyaXR5X3NjdHBfYXNzb2NfZXN0YWJsaXNoZWQoKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0xMDI9QVNDT05GIGNodW5rIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYGBAb3B0bmFtZWBgJ3MgYXJlIHByZXNlbnQ6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xMDktXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdDoxMTA6c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdC0xMTEtfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTEzNj1lc3RhYmxpc2hpbmcgYW4gYXNzb2NpYXRpb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE3Ni0gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBTQ1RQX1NPQ0tFVF9UQ1Agb3IgcGVlbGVkIG9mZlxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTc3OiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldCBzZWN1cml0eV9zY3RwX3NrX2Nsb25lKCkgaXNcXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE3OC0gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgdG8gY2xvbmUgdGhlIG5ldyBzb2NrZXQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTE5ND1ob29rcyB3aXRoIHRoZSBTRUxpbnV4IHNwZWNpZmljcyBleHBhbmRlZCBiZWxvdzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE5Ny0gICAgc2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MTk4OiAgICBzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0LTE5OS0gICAgc2VjdXJpdHlfc2N0cF9hc3NvY19lc3RhYmxpc2hlZCgpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L1NDVFAucnN0PTI1NT1SZWNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMjU3LVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3Q6MjU4OnNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMjU5LX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdD0yNjE9c29ja2V0KSBvciB3aGVuIGEgc29ja2V0IGlzICdwZWVsZWQgb2ZmJyBlLmcgdXNlcnNwYWNlIGNhbGxzXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9TQ1RQLnJzdDoyNjI6KipzY3RwX3BlZWxvZmYqKlxcXFwoMykuIGBgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpYGAgd2lsbCBzZXQgdGhlIG5ld1xcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvU0NUUC5yc3QtMjYzLXNvY2tldHMgc2lkIGFuZCBwZWVyIHNpZCB0byB0aGF0IGNvbnRhaW5lZCBpbiB0aGUgYGBAYXNvYyBzaWRgYCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0PTEzPVNDVFDnmoRMU03mlK/mjIFcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTIyLVxcdHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdDoyMzpcXHRzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNC1cXHRzZWN1cml0eV9zY3RwX2Fzc29jX2VzdGFibGlzaGVkKClcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0PTM5PXNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KClcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0LTEwNi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdDoxMDc6c2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMTA4LX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q9MTE4PXNlY3VyaXR5X3NjdHBfYXNzb2NfZXN0YWJsaXNoZWQoKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMTY2LSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWmguaenOaYr1NDVFBfU09DS0VUX1RDUOaIluaYr+WJpeemu+eahOWll+aOpVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjE2NzogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDlrZfvvIzkvJrosIPnlKggc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMTY4LSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOadpeWFi+mahuaWsOeahOWll+aOpeWtl+OAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q9MTc3PVNDVFDnmoRTRUxpbnV45pSv5oyBXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xODctXFx0c2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjE4ODpcXHRzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0xODktXFx0c2VjdXJpdHlfc2N0cF9hc3NvY19lc3RhYmxpc2hlZCgpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdD0yMTY9c2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3QoKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMjQzLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L1NDVFAucnN0OjI0NDpzZWN1cml0eV9zY3RwX3NrX2Nsb25lKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNDUtfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9TQ1RQLnJzdC0yNDct5b2T5LiA5Liq5aWX5o6l5a2X6KKr4oCc5Yml56a74oCd5aaC55So5oi356m66Ze06LCD55SoICoqc2N0cF9wZWVsb2ZmKipcXFxcKDMp5pe277yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3Q6MjQ4OmBgc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpYGAg5bCG5Lya5YiG5Yir5bCG5paw5aWX5o6l5a2X55qEc2lk5ZKM5a+556uvc2lk6K6+572u5Li6XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvU0NUUC5yc3QtMjQ5LWBgQGFzb2Mgc2lkYGAg5ZKMIGBgQGFzb2MgcGVlciBzaWRgYCDkuK3ljIXlkKvnmoTlgLzjgIJcXG4tLVxcbmNyeXB0by9hZl9hbGcuYz00NjQ9aW50IGFmX2FsZ19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbi0tXFxuY3J5cHRvL2FmX2FsZy5jLTQ4Ni1cXHRzZWN1cml0eV9zb2NrX2dyYWZ0KHNrMiwgbmV3c29jayk7XFxuY3J5cHRvL2FmX2FsZy5jOjQ4NzpcXHRzZWN1cml0eV9za19jbG9uZShzaywgc2syKTtcXG5jcnlwdG8vYWZfYWxnLmMtNDg4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaD05MDk9dm9pZCBjZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpO1xcbmluY2x1ZGUvbGludXgvY2dyb3VwLmg6OTEwOnZvaWQgY2dyb3VwX3NrX2Nsb25lKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKTtcXG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oLTkxMS12b2lkIGNncm91cF9za19mcmVlKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY2dyb3VwLmg9OTIwPXN0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfc2tfYWxsb2Moc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpIHt9XFxuaW5jbHVkZS9saW51eC9jZ3JvdXAuaDo5MjE6c3RhdGljIGlubGluZSB2b2lkIGNncm91cF9za19jbG9uZShzdHJ1Y3Qgc29ja19jZ3JvdXBfZGF0YSAqc2tjZCkge31cXG5pbmNsdWRlL2xpbnV4L2Nncm91cC5oLTkyMi1zdGF0aWMgaW5saW5lIHZvaWQgY2dyb3VwX3NrX2ZyZWUoc3RydWN0IHNvY2tfY2dyb3VwX2RhdGEgKnNrY2QpIHt9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaD0zNTk9TFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBza19mcmVlX3NlY3VyaXR5LCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg6MzYwOkxTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgc2tfY2xvbmVfc2VjdXJpdHksIGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zNjEtXFx0IHN0cnVjdCBzb2NrICpuZXdzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTM2ND1MU01fSE9PSyhpbnQsIDAsIGluZXRfY29ubl9yZXF1ZXN0LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMzY1LVxcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg6MzY2OkxTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5ldF9jc2tfY2xvbmUsIHN0cnVjdCBzb2NrICpuZXdzayxcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zNjctXFx0IGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTM4Mj1MU01fSE9PSyhpbnQsIDAsIHNjdHBfYmluZF9jb25uZWN0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oLTM4My1cXHQgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbilcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaDozODQ6TFNNX0hPT0sodm9pZCwgTFNNX1JFVF9WT0lELCBzY3RwX3NrX2Nsb25lLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaC0zODUtXFx0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE2ODk9dm9pZCBzZWN1cml0eV9za19mcmVlKHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE2OTA6dm9pZCBzZWN1cml0eV9za19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzayk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE2OTEtdm9pZCBzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xNjk2PWludCBzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE2OTctXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTY5ODp2b2lkIHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpuZXdzayxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTY5OS1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE3MTI9aW50IHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE3MTMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFkZHJsZW4pO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxNzE0OnZvaWQgc2VjdXJpdHlfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xNzE1LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc29jayAqbmV3c2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE4NDc9c3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NrX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE4NTAtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjE4NTE6c3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3NrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xODUyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xODY5PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xODc0LVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxODc1OnN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqbmV3c2ssXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTE4NzYtXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTE5MzM9c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2N0cF9iaW5kX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xOTM5LVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxOTQwOnN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9zY3RwX3NrX2Nsb25lKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xOTQxLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD0xNTM9c3RhdGljIGlubGluZSB2b2lkICppbmV0X2Nza19jYShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTE1Ny1cXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oOjE1ODpzdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY2xvbmVfbG9jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC0xNTktXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oPTE1NDc9c3RydWN0IHNjdHBfYXNzb2NpYXRpb24ge1xcbi0tXFxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMjA3OS1cXHQgKiBTQ1RQIFRDUCB0eXBlIHNvY2tldHMgYW5kIHBlZWxlZCBvZmYgY29ubmVjdGlvbnMgYXMgdGhleVxcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oOjIwODA6XFx0ICogY2F1c2UgYSBuZXcgc29ja2V0IHRvIGJlIGdlbmVyYXRlZC4gc2VjdXJpdHlfc2N0cF9za19jbG9uZSgpXFxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMjA4MS1cXHQgKiB3aWxsIHRoZW4gcGx1ZyB0aGVzZSBpbnRvIHRoZSBuZXcgc29ja2V0Llxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTE4NDM9dm9pZCBza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3NvY2suaDoxODQ0OnN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LCBib29sIGxvY2spO1xcbmluY2x1ZGUvbmV0L3NvY2suaC0xODQ1LVxcbmluY2x1ZGUvbmV0L3NvY2suaDoxODQ2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnNrX2Nsb25lX2xvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSlcXG5pbmNsdWRlL25ldC9zb2NrLmgtMTg0Ny17XFxuaW5jbHVkZS9uZXQvc29jay5oOjE4NDg6XFx0cmV0dXJuIHNrX2Nsb25lKHNrLCBwcmlvcml0eSwgdHJ1ZSk7XFxuaW5jbHVkZS9uZXQvc29jay5oLTE4NDktfVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTEzODY9c3RhdGljIGlubGluZSBpbnQgeGZybTZfcm91dGVfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTAtXFxuaW5jbHVkZS9uZXQveGZybS5oOjEzOTE6aW50IF9feGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTM5Mi1cXG5pbmNsdWRlL25ldC94ZnJtLmg6MTM5MzpzdGF0aWMgaW5saW5lIGludCB4ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spXFxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTQte1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTEzOTktXFx0aWYgKHVubGlrZWx5KG9zay1cXHUwMDNlc2tfcG9saWN5WzBdIHx8IG9zay1cXHUwMDNlc2tfcG9saWN5WzFdKSlcXG5pbmNsdWRlL25ldC94ZnJtLmg6MTQwMDpcXHRcXHRyZXR1cm4gX194ZnJtX3NrX2Nsb25lX3BvbGljeShzaywgb3NrKTtcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTQwMS1cXHRyZXR1cm4gMDtcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0xNDI0PXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX3NrX2ZyZWVfcG9saWN5KHN0cnVjdCBzb2NrICpzaykge31cXG5pbmNsdWRlL25ldC94ZnJtLmg6MTQyNTpzdGF0aWMgaW5saW5lIGludCB4ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMTQyNi1zdGF0aWMgaW5saW5lIGludCB4ZnJtNl9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpIHsgcmV0dXJuIDE7IH1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xzbS5jPTc2PUJURl9JRChmdW5jLCBicGZfbHNtX3NvY2tfZ3JhZnQpXFxua2VybmVsL2JwZi9icGZfbHNtLmM6Nzc6QlRGX0lEKGZ1bmMsIGJwZl9sc21faW5ldF9jc2tfY2xvbmUpXFxua2VybmVsL2JwZi9icGZfbHNtLmMtNzgtQlRGX0lEKGZ1bmMsIGJwZl9sc21faW5ldF9jb25uX2VzdGFibGlzaGVkKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYz03NDkzPXZvaWQgY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrX2Nncm91cF9kYXRhICpza2NkKVxcbi0tXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy03NTIwLVxcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6NzUyMTp2b2lkIGNncm91cF9za19jbG9uZShzdHJ1Y3Qgc29ja19jZ3JvdXBfZGF0YSAqc2tjZClcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTc1MjIte1xcbi0tXFxubmV0L2JsdWV0b290aC9pc28uYz05NTU9c3RhdGljIHZvaWQgaXNvX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2lzby5jLTk2MS1cXHRcXHRidF9zayhzayktXFx1MDAzZWZsYWdzID0gYnRfc2socGFyZW50KS1cXHUwMDNlZmxhZ3M7XFxubmV0L2JsdWV0b290aC9pc28uYzo5NjI6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L2JsdWV0b290aC9pc28uYy05NjMtXFx0fVxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmM9MTk2Nz1zdGF0aWMgdm9pZCBsMmNhcF9zb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqcGFyZW50KVxcbi0tXFxubmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMtMTk3OS1cXHRcXHQgKi9cXG5uZXQvYmx1ZXRvb3RoL2wyY2FwX3NvY2suYzoxOTgwOlxcdFxcdHNlY3VyaXR5X3NrX2Nsb25lKHBhcmVudCwgc2spO1xcbm5ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jLTE5ODEtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYz0yNTA9c3RhdGljIHZvaWQgcmZjb21tX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMtMjYzLVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYzoyNjQ6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jLTI2NS1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L2JsdWV0b290aC9zY28uYz01OTY9c3RhdGljIHZvaWQgc2NvX3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL3Njby5jLTYwMi1cXHRcXHRidF9zayhzayktXFx1MDAzZWZsYWdzID0gYnRfc2socGFyZW50KS1cXHUwMDNlZmxhZ3M7XFxubmV0L2JsdWV0b290aC9zY28uYzo2MDM6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L2JsdWV0b290aC9zY28uYy02MDQtXFx0fVxcbi0tXFxubmV0L2NvcmUvc29jay5jPTIyMDk9c3RhdGljIHZvaWQgc29ja19jb3B5KHN0cnVjdCBzb2NrICpuc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjIxNy1cXHQgKiB3ZSBtdXN0IGNoZWNrIGlmIHNrX3R4X3F1ZXVlX2NsZWFyKCkgaXMgY2FsbGVkIGFmdGVyXFxubmV0L2NvcmUvc29jay5jOjIyMTg6XFx0ICogc29ja19jb3B5KCkgaW4gc2tfY2xvbmVfbG9jaygpLlxcbm5ldC9jb3JlL3NvY2suYy0yMjE5LVxcdCAqL1xcbi0tXFxubmV0L2NvcmUvc29jay5jLTIyMzItXFx0bnNrLVxcdTAwM2Vza19zZWN1cml0eSA9IHNwdHI7XFxubmV0L2NvcmUvc29jay5jOjIyMzM6XFx0c2VjdXJpdHlfc2tfY2xvbmUob3NrLCBuc2spO1xcbm5ldC9jb3JlL3NvY2suYy0yMjM0LSNlbmRpZlxcbi0tXFxubmV0L2NvcmUvc29jay5jPTI0NDQ9c3RhdGljIHZvaWQgc2tfaW5pdF9jb21tb24oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTI0NzAtLyoqXFxubmV0L2NvcmUvc29jay5jOjI0NzE6ICogc2tfY2xvbmUgLSBjbG9uZSBhIHNvY2tldFxcbm5ldC9jb3JlL3NvY2suYy0yNDcyLSAqIEBzazogdGhlIHNvY2tldCB0byBjbG9uZVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTI0NzgtICovXFxubmV0L2NvcmUvc29jay5jOjI0Nzk6c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxubmV0L2NvcmUvc29jay5jLTI0ODAtXFx0XFx0ICAgICAgYm9vbCBsb2NrKVxcbi0tXFxubmV0L2NvcmUvc29jay5jLTI1NDktXFxubmV0L2NvcmUvc29jay5jOjI1NTA6XFx0Y2dyb3VwX3NrX2Nsb25lKFxcdTAwMjZuZXdzay1cXHUwMDNlc2tfY2dycF9kYXRhKTtcXG5uZXQvY29yZS9zb2NrLmMtMjU1MS1cXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0yNTY3LVxcbm5ldC9jb3JlL3NvY2suYzoyNTY4OlxcdGlmICh1bmxpa2VseSghaXNfY2hhcmdlZCB8fCB4ZnJtX3NrX2Nsb25lX3BvbGljeShuZXdzaywgc2spKSkge1xcbm5ldC9jb3JlL3NvY2suYy0yNTY5LVxcdFxcdC8qIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgdW5jaGFyZ2UgdGhlIG5ld1xcbi0tXFxubmV0L2NvcmUvc29jay5jLTI2MTgtfVxcbm5ldC9jb3JlL3NvY2suYzoyNjE5OkVYUE9SVF9TWU1CT0xfR1BMKHNrX2Nsb25lKTtcXG5uZXQvY29yZS9zb2NrLmMtMjYyMC1cXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9OTA0PXZvaWQgX19yZXFza19mcmVlKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTEyLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6OTEzOnN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTkxNC1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzMz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDQ5LVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA1MDpcXHRcXHRucmVxID0gaW5ldF9yZXFza19jbG9uZShyZXEsIG5zayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDUxLVxcdFxcdGlmICghbnJlcSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTE4NT1zdGF0aWMgdm9pZCBpbmV0X2Nsb25lX3VscChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHN0cnVjdCBzb2NrICpuZXdzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5Ni0vKipcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjExOTc6ICpcXHRpbmV0X2Nza19jbG9uZV9sb2NrIC0gY2xvbmUgYW4gaW5ldCBzb2NrZXQsIGFuZCBsb2NrIGl0cyBjbG9uZVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTE5OC0gKlxcdEBzazogdGhlIHNvY2tldCB0byBjbG9uZVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjAzLSAqL1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTIwNDpzdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY2xvbmVfbG9jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjA1LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTEyMDcte1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTIwODpcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19jbG9uZV9sb2NrKHNrLCBwcmlvcml0eSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjA5LVxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzaztcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTI1OS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEyNjA6XFx0c2VjdXJpdHlfaW5ldF9jc2tfY2xvbmUobmV3c2ssIHJlcSk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMjYxLVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xMzA0PXZvaWQgaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA2LXtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEzMDc6XFx0Lyogc2tfY2xvbmVfbG9jayBsb2NrZWQgdGhlIHNvY2tldCBhbmQgc2V0IHJlZmNudCB0byAyICovXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMzA4LVxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTQxNz1zdHJ1Y3Qgc29jayAqaW5ldF9jc2tfY29tcGxldGVfaGFzaGRhbmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKmNoaWxkLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDMwLVxcdFxcdFxcdC8qIGhvbGQgYSByZWZjbnQgZm9yIHRoZSBucmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXJcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0MzE6XFx0XFx0XFx0ICogd2hpY2ggaXMgYXNzaWduZWQgaW4gaW5ldF9yZXFza19jbG9uZSgpXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDMyLVxcdFxcdFxcdCAqL1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzMy1cXHRcXHRcXHRzb2NrX2hvbGQoc2spO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQzNDpcXHRcXHRcXHRucmVxID0gaW5ldF9yZXFza19jbG9uZShyZXEsIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzUtXFx0XFx0XFx0aWYgKCFucmVxKSB7XFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTE0NjY9dm9pZCBpbmV0X2Nza19saXN0ZW5fc3RvcChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0OTAtXFx0XFx0aWYgKG5zaykge1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTQ5MTpcXHRcXHRcXHRucmVxID0gaW5ldF9yZXFza19jbG9uZShyZXEsIG5zayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDkyLVxcdFxcdFxcdGlmIChucmVxKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI1PWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDQtXFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfd3JpdGVfc3BhY2UsIHBzb2NrLVxcdTAwM2VzYXZlZF93cml0ZV9zcGFjZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjc0NTpcXHRcXHRcXHQvKiBQYWlycyB3aXRoIGxvY2tsZXNzIHJlYWQgaW4gc2tfY2xvbmVfbG9jaygpICovXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ni1cXHRcXHRcXHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIHBzb2NrLVxcdTAwM2Vza19wcm90byk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU3LVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NTg6XFx0LyogUGFpcnMgd2l0aCBsb2NrbGVzcyByZWFkIGluIHNrX2Nsb25lX2xvY2soKSAqL1xcbm5ldC9pcHY0L3RjcF9icGYuYy03NTktXFx0c29ja19yZXBsYWNlX3Byb3RvKHNrLCBcXHUwMDI2dGNwX2JwZl9wcm90c1tmYW1pbHldW2NvbmZpZ10pO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz03MTc9c3RhdGljIHZvaWQgdGNwX3Y0X3NlbmRfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy04NzgtXFx0XFx0dHJhbnNtaXRfdGltZSA9IHRjcF90cmFuc21pdF90aW1lKHNrKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjg3OTpcXHRcXHR4ZnJtX3NrX2Nsb25lX3BvbGljeShjdGxfc2ssIHNrKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTg4MC1cXHRcXHR0eGhhc2ggPSAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz01NDY9c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNTQ5LXtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NTUwOlxcdHN0cnVjdCBzb2NrICpuZXdzayA9IGluZXRfY3NrX2Nsb25lX2xvY2soc2ssIHJlcSwgR0ZQX0FUT01JQyk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTU1MS1cXHRjb25zdCBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXEgPSBpbmV0X3JzayhyZXEpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ1OD1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpwYXJlbnQpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDYxLVxcdFxcdHNrLVxcdTAwM2Vza190eXBlID0gcGFyZW50LVxcdTAwM2Vza190eXBlO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0NjI6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ2My1cXHR9XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNjc1PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM2OTQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzY5NTpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzY5Ni1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MDAtXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzcwMTpcXHRzdHJ1Y3Qgc29jayAqbnNrID0gc2tfY2xvbmVfbG9jayhzaywgR0ZQX0FUT01JQyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzcwMi1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc0MC1cXHRzb2NrX3Jlc2V0X2ZsYWcobnNrLCBTT0NLX1JDVV9GUkVFKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzQxOlxcdHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKG5zaywgcmVxKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzQyLVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTIwPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfdjZfaW5pdCh2b2lkKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkyMi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5MjM6c3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkyNC1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9ODA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtODg2LVxcdFxcdGlmIChjdHgtXFx1MDAzZW1wX2NhcGFibGUpIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg4NzpcXHRcXHRcXHRjdHgtXFx1MDAzZWNvbm4gPSBtcHRjcF9za19jbG9uZV9pbml0KGxpc3RlbmVyLVxcdTAwM2Vjb25uLCBcXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg4OC1cXHRcXHRcXHRpZiAoIWN0eC1cXHUwMDNlY29ubilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTczOD12b2lkIF9fbXB0Y3BfaW5oZXJpdF9jZ3JwX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzQ4LVxcdFxcdCpzc2tfY2QgPSAqc2tfY2Q7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNzQ5OlxcdFxcdGNncm91cF9za19jbG9uZShza19jZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzUwLVxcdH1cXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jPTQ4NTY9c3RhdGljIHN0cnVjdCBzb2NrICpzY3RwX2Nsb25lX3NvY2soc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3NjdHAvc29ja2V0LmMtNDg1OS17XFxubmV0L3NjdHAvc29ja2V0LmM6NDg2MDpcXHRzdHJ1Y3Qgc29jayAqbmV3c2sgPSBza19jbG9uZShzaywgR0ZQX0tFUk5FTCwgZmFsc2UpO1xcbm5ldC9zY3RwL3NvY2tldC5jLTQ4NjEtXFx0c3RydWN0IGluZXRfc29jayAqbmV3aW5ldDtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQ4NjctXFxubmV0L3NjdHAvc29ja2V0LmM6NDg2ODpcXHQvKiBza19jbG9uZSgpIHNldHMgcmVmY250IHRvIDIgYW5kIGluY3JlbWVudHMgc29ja2V0c19hbGxvY2F0ZWQgKi9cXG5uZXQvc2N0cC9zb2NrZXQuYy00ODY5LVxcdHNvY2tfcHV0KG5ld3NrKTtcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQ5MTctXFx0ICovXFxubmV0L3NjdHAvc29ja2V0LmM6NDkxODpcXHRzZWN1cml0eV9zY3RwX3NrX2Nsb25lKGFzb2MsIHNrLCBuZXdzayk7XFxubmV0L3NjdHAvc29ja2V0LmMtNDkxOS1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI3MjE9c3RhdGljIGludCB0aXBjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jayxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI3NDctXFx0XFx0Z290byBleGl0O1xcbm5ldC90aXBjL3NvY2tldC5jOjI3NDg6XFx0c2VjdXJpdHlfc2tfY2xvbmUoc29jay1cXHUwMDNlc2ssIG5ld19zb2NrLVxcdTAwM2Vzayk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjc0OS1cXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xMDcxPXN0YXRpYyB2b2lkIHRsc191cGRhdGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG8gKnAsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMTA4Mi1cXHR9IGVsc2Uge1xcbm5ldC90bHMvdGxzX21haW4uYzoxMDgzOlxcdFxcdC8qIFBhaXJzIHdpdGggbG9ja2xlc3MgcmVhZCBpbiBza19jbG9uZV9sb2NrKCkuICovXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwODQtXFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfcHJvdCwgcCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk1NC1cXHRcXHR2c2stXFx1MDAzZWJ1ZmZlcl9tYXhfc2l6ZSA9IHBzay1cXHUwMDNlYnVmZmVyX21heF9zaXplO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5NTU6XFx0XFx0c2VjdXJpdHlfc2tfY2xvbmUocGFyZW50LCBzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk1Ni1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yNDA5PXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKmNsb25lX3BvbGljeShjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm9sZCwgaW50IGRpcilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjQ0MC1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjI0NDE6aW50IF9feGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjQ0Mi17XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz0xMDg3PXN0YXRpYyB2b2lkIGFwcGFybW9yX3NrX2ZyZWVfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTA5Ny0vKipcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzoxMDk4OiAqIGFwcGFybW9yX3NrX2Nsb25lX3NlY3VyaXR5IC0gY2xvbmUgdGhlIHNrX3NlY3VyaXR5IGZpZWxkXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTA5OS0gKiBAc2s6IHNvY2sgdG8gaGF2ZSBzZWN1cml0eSBjbG9uZWRcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTExMDEtICovXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTEwMjpzdGF0aWMgdm9pZCBhcHBhcm1vcl9za19jbG9uZV9zZWN1cml0eShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTEwMy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTc2Nz1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBhcHBhcm1vcl9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE4MDYtXFx0TFNNX0hPT0tfSU5JVChza19mcmVlX3NlY3VyaXR5LCBhcHBhcm1vcl9za19mcmVlX3NlY3VyaXR5KSxcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzoxODA3OlxcdExTTV9IT09LX0lOSVQoc2tfY2xvbmVfc2VjdXJpdHksIGFwcGFybW9yX3NrX2Nsb25lX3NlY3VyaXR5KSxcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xODA4LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz00NTA5PXZvaWQgc2VjdXJpdHlfc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1MTYtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NTE3OiAqIHNlY3VyaXR5X3NrX2Nsb25lKCkgLSBDbG9uZSBhIHNvY2sncyBMU00gc3RhdGVcXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1MTgtICogQHNrOiBvcmlnaW5hbCBzb2NrXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1MjItICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NTIzOnZvaWQgc2VjdXJpdHlfc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI0LXtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ1MjU6XFx0Y2FsbF92b2lkX2hvb2soc2tfY2xvbmVfc2VjdXJpdHksIHNrLCBuZXdzayk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI2LX1cXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ1Mjc6RVhQT1JUX1NZTUJPTChzZWN1cml0eV9za19jbG9uZSk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTI4LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz00NTg1PUVYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5ldF9jb25uX3JlcXVlc3QpO1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTg3LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDU4ODogKiBzZWN1cml0eV9pbmV0X2Nza19jbG9uZSgpIC0gU2V0IG5ldyBzb2NrIExTTSBzdGF0ZSBiYXNlZCBvbiByZXF1ZXN0X3NvY2tcXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1ODktICogQG5ld3NrOiBuZXcgc29ja1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTkzLSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6NDU5NDp2b2lkIHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpuZXdzayxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ1OTUtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00NTk2LXtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ1OTc6XFx0Y2FsbF92b2lkX2hvb2soaW5ldF9jc2tfY2xvbmUsIG5ld3NrLCByZXEpO1xcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDU5OC19XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTQ3ODE9RVhQT1JUX1NZTUJPTChzZWN1cml0eV9zY3RwX2JpbmRfY29ubmVjdCk7XFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ3ODMtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0Nzg0OiAqIHNlY3VyaXR5X3NjdHBfc2tfY2xvbmUoKSAtIENsb25lIGEgU0NUUCBzb2NrJ3MgTFNNIHN0YXRlXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00Nzg1LSAqIEBhc29jOiBTQ1RQIGFzc29jaWF0aW9uXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ3OTItICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0NzkzOnZvaWQgc2VjdXJpdHlfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDc5NC1cXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKm5ld3NrKVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtNDc5NS17XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzo0Nzk2OlxcdGNhbGxfdm9pZF9ob29rKHNjdHBfc2tfY2xvbmUsIGFzb2MsIHNrLCBuZXdzayk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy00Nzk3LX1cXG5zZWN1cml0eS9zZWN1cml0eS5jOjQ3OTg6RVhQT1JUX1NZTUJPTChzZWN1cml0eV9zY3RwX3NrX2Nsb25lKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTQ3OTktXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTU3ND1zdGF0aWMgdm9pZCBzZWxpbnV4X3NrX2ZyZWVfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU1ODAtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU1ODE6c3RhdGljIHZvaWQgc2VsaW51eF9za19jbG9uZV9zZWN1cml0eShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTU4Mi17XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTY3Nz1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9hc3NvY19yZXF1ZXN0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU2OTMtXFx0ICogc29ja2V0cyBhbmQgcGVlbGVkIG9mZiBjb25uZWN0aW9ucyBhcyB0aGV5IGNhdXNlIGEgbmV3XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU2OTQ6XFx0ICogc29ja2V0IHRvIGJlIGdlbmVyYXRlZC4gc2VsaW51eF9zY3RwX3NrX2Nsb25lKCkgd2lsbCB0aGVuXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU2OTUtXFx0ICogcGx1ZyB0aGlzIGludG8gdGhlIG5ldyBzb2NrZXQuXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTcxMD1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9hc3NvY19lc3RhYmxpc2hlZChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01NzE4LVxcdC8qIEluaGVyaXQgc2VjaWQgZnJvbSB0aGUgcGFyZW50IHNvY2tldCAtIHRoaXMgd2lsbCBiZSBwaWNrZWQgdXBcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTcxOTpcXHQgKiBieSBzZWxpbnV4X3NjdHBfc2tfY2xvbmUoKSBpZiB0aGUgYXNzb2NpYXRpb24gZ2V0cyBwZWVsZWQgb2ZmXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU3MjAtXFx0ICogaW50byBhIG5ldyBzb2NrZXQuXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTczMD1zdGF0aWMgaW50IHNlbGludXhfc2N0cF9iaW5kX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODA2LS8qIENhbGxlZCB3aGVuZXZlciBhIG5ldyBzb2NrZXQgaXMgY3JlYXRlZCBieSBhY2NlcHQoMikgb3Igc2N0cF9wZWVsb2ZmKDMpLiAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo1ODA3OnN0YXRpYyB2b2lkIHNlbGludXhfc2N0cF9za19jbG9uZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNvY2sgKnNrLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODA4LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4MTYtXFx0aWYgKCFzZWxpbnV4X3BvbGljeWNhcF9leHRzb2NrY2xhc3MoKSlcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTgxNzpcXHRcXHRyZXR1cm4gc2VsaW51eF9za19jbG9uZV9zZWN1cml0eShzaywgbmV3c2spO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODE4LVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTU4MjEtXFx0bmV3c2tzZWMtXFx1MDAzZXNjbGFzcyA9IHNrc2VjLVxcdTAwM2VzY2xhc3M7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjU4MjI6XFx0c2VsaW51eF9uZXRsYmxfc2N0cF9za19jbG9uZShzaywgbmV3c2spO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODIzLX1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz01ODQwPXN0YXRpYyBpbnQgc2VsaW51eF9pbmV0X2Nvbm5fcmVxdWVzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg2MC1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTg2MTpzdGF0aWMgdm9pZCBzZWxpbnV4X2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpuZXdzayxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg2Mi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTg3NC1cXHQgKiB0aHJlYWQgd2l0aCBhY2Nlc3MgdG8gbmV3c2tzZWMgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTg3NTpcXHRzZWxpbnV4X25ldGxibF9pbmV0X2Nza19jbG9uZShuZXdzaywgcmVxLVxcdTAwM2Vyc2tfb3BzLVxcdTAwM2VmYW1pbHkpO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01ODc2LX1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTYwPXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczMC1cXHRMU01fSE9PS19JTklUKHNrX2ZyZWVfc2VjdXJpdHksIHNlbGludXhfc2tfZnJlZV9zZWN1cml0eSksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc3MzE6XFx0TFNNX0hPT0tfSU5JVChza19jbG9uZV9zZWN1cml0eSwgc2VsaW51eF9za19jbG9uZV9zZWN1cml0eSksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc3MzItXFx0TFNNX0hPT0tfSU5JVChza19nZXRzZWNpZCwgc2VsaW51eF9za19nZXRzZWNpZCksXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczNC1cXHRMU01fSE9PS19JTklUKHNjdHBfYXNzb2NfcmVxdWVzdCwgc2VsaW51eF9zY3RwX2Fzc29jX3JlcXVlc3QpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NzM1OlxcdExTTV9IT09LX0lOSVQoc2N0cF9za19jbG9uZSwgc2VsaW51eF9zY3RwX3NrX2Nsb25lKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzczNi1cXHRMU01fSE9PS19JTklUKHNjdHBfYmluZF9jb25uZWN0LCBzZWxpbnV4X3NjdHBfYmluZF9jb25uZWN0KSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NzM5LVxcdExTTV9IT09LX0lOSVQoaW5ldF9jb25uX3JlcXVlc3QsIHNlbGludXhfaW5ldF9jb25uX3JlcXVlc3QpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NzQwOlxcdExTTV9IT09LX0lOSVQoaW5ldF9jc2tfY2xvbmUsIHNlbGludXhfaW5ldF9jc2tfY2xvbmUpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NzQxLVxcdExTTV9IT09LX0lOSVQoaW5ldF9jb25uX2VzdGFibGlzaGVkLCBzZWxpbnV4X2luZXRfY29ubl9lc3RhYmxpc2hlZCksXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaD00MD1pbnQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1MTYgZmFtaWx5KTtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaDo0MTp2b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7XFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmg6NDI6dm9pZCBzZWxpbnV4X25ldGxibF9zY3RwX3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKTtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaC00My1pbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaD05Nj1zdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MjY6MTMuMTY1NzI4MDQyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NTg4NjU0NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNvY2tldCBDbG9uaW5nIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIHNvY2tldCBjbG9uaW5nIG1lY2hhbmlzbSAoYHNrX2Nsb25lYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IOKAkyB0aGlzIHNvdW5kcyBsaWtlIGEgY29yZSBuZXR3b3JraW5nIGlzc3VlLlxuXG5Fc3NlbnRpYWxseSwgYHNvY2tfY29weWAgaW4gYHNrX2Nsb25lYCBkb2VzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBgc29ja2Agc3RydWN0dXJlLiBUaGUgY3J1eCBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBgc2stXHUwMDNlcHNwX2Fzc29jYCBwb2ludGVyLiBJZiB0aGUgb3JpZ2luYWwgc29ja2V0IChgc2tgKSBoYXMgdGhpcyBgcHNwX2Fzc29jYCBwb2ludGVyIHNldCwgdGhlIGNsb25lZCBzb2NrZXQgKGBuZXdza2ApIGdldHMgYSAqZGlyZWN0KiBjb3B5IG9mIHRoYXQgcG9pbnRlcjogYG5ld3NrLVx1MDAzZXBzcF9hc3NvYyA9IHNrLVx1MDAzZXBzcF9hc3NvY2AuIE5vIHJlZmVyZW5jZSBjb3VudGluZywgbm8gc2FmZWd1YXJkcywganVzdCBhIHN0cmFpZ2h0IHBvaW50ZXIgYXNzaWdubWVudC5cblxuVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGRpY2V5LiBJZiB0aGUgcGFyZW50IHNvY2tldCAoYHNrYCkgYW5kIHRoZSBjaGlsZCBzb2NrZXQgKGBuZXdza2ApIG5vdyBib3RoIGJlbGlldmUgdGhleSBvd24gYHBzcF9hc3NvY2AsIHdlIGhhdmUgYSBjb2xsaXNpb24uIERlc3Ryb3lpbmcgZWl0aGVyIHNvY2tldCBvciBleHBsaWNpdGx5IGNhbGxpbmcgYHBzcF9za19hc3NvY19mcmVlKG5ld3NrKWAgb24gdGhlIGNsb25lIHdvdWxkIGNhdXNlIGBwc3BfYXNzb2NgIHRvIGJlIGZyZWVkLCBwb3RlbnRpYWxseSBsZWF2aW5nIGEgZGFuZ2xpbmcgcG9pbnRlciBmb3IgdGhlIG90aGVyIHNvY2tldCBvciBhbnkgb3RoZXIgc3Vic2VxdWVudCB1c2UuIEFuZCB0aGlzIGNvdWxkIGxlYWQgdG8gdGhlIGNsYXNzaWMgXCJ1c2UtYWZ0ZXItZnJlZVwiIG9yIFwiZG91YmxlIGZyZWVcIiBzY2VuYXJpb3MuXG5cblRoZSBwcm9wb3NlZCBwYXRjaCBpcyBzbWFydC4gVGhleSdyZSBpbml0aWFsaXppbmcgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5IHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7YC4gVGhpcyBlZmZlY3RpdmVseSBwcmV2ZW50cyB0aGUgZGFuZ2xpbmcgcG9pbnRlciBpc3N1ZSBieSBlbnN1cmluZyB0aGUgY2xvbmUgZG9lc24ndCBwb2ludCB0byB0aGUgb3JpZ2luYWwgc3RydWN0dXJlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0cyB1c2UgYHBzcF9hc3NvY2AgYW5kIHdoZXJlIGBwc3Bfc2tfYXNzb2NfZnJlZWAgaXMgY2FsbGVkIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3QgYW5kIHRoZSBuZWVkIGZvciB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBmb3IgYm90aCBzb2NrZXQgZGVzdHJ1Y3Rpb24gYW5kIGV4cGxpY2l0IGBwc3Bfc2tfYXNzb2NfZnJlZWAgY2FsbHMgdG8gc29saWRpZnkgdGhpcyB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkzMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNjo1Mi43NTQzODU2MTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODU4Nzc4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNwX3NrX2Fzc29jX2ZyZWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTMzPXVuc2lnbmVkIGludCBwc3Bfa2V5X3NpemUodTMyIHZlcnNpb24pO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM1LXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTctI2Vsc2VcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spIHsgfVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTktc3RhdGljIGlubGluZSB2b2lkXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTQwPXZvaWQgaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xNjYtXFx0ZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cXHUwMDNlc2tfcnhfZHN0LCAxKSk7XFxubmV0L2lwdjQvYWZfaW5ldC5jOjE2NzpcXHRwc3Bfc2tfYXNzb2NfZnJlZShzayk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTE2OC19XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTE4PXZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTIzLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3BzcC9wc3Bfc29jay5jLTEyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI2OjU0LjI0MDI2ODYxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDY4NDEyMjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2VybmVsIFZ1bG5lcmFiaWxpdHkgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGFzIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgc2lnbmlmaWNhbmNlIGZvciBmdXp6aW5nIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIHJlZmNvdW50aW5nIHByb2JsZW0gcmVsYXRlZCB0byBob3cgYHBzcF9za19hc3NvY2AgaXMgaGFuZGxlZCBkdXJpbmcgc29ja2V0IGNsb25pbmcuIFNwZWNpZmljYWxseSwgYGluZXRfc29ja19kZXN0cnVjdGAgY2FsbHMgYHBzcF9za19hc3NvY19mcmVlYCwgd2hpY2ggaW4gdHVybiBpbnZvbHZlcyBgcHNwX2Fzc29jX3B1dGAuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGEgbGlzdGVuaW5nIFRDUCBzb2NrZXQsIG9yIGEgY2xvbmVkIHNvY2tldCBkZXJpdmVkIGZyb20gaXQsIGlzIGNsb25lZCB2aWEgYHNrX2Nsb25lX2xvY2tgIGFuZCBgc2tfY2xvbmVgLiBgc29ja19jb3B5YCBkdXBsaWNhdGVzIHRoZSBzb2NrZXQgc3RydWN0dXJlIChgc2tgKSB0byBgbmV3c2tgLiBJZiB0aGUgYHNrLVx1MDAzZXBzcF9hc3NvY2AgcG9pbnRlciB3YXMgc2V0LCBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCB3b3VsZCBpbml0aWFsbHkgcG9pbnQgdG8gdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uIChgcGFzYCkgd2l0aG91dCBhIHJlZmNvdW50IGluY3JlYXNlLiBUaGUgb3JpZ2luYWwgY29kZSBjb3VsZCB0aGVuIGxlYWQgdG8gYSBkb3VibGUgZGVjcmVtZW50IG9mIHRoZSByZWZlcmVuY2UgY291bnQgd2hlbiBib3RoIHNvY2tldHMgYXJlIGV2ZW50dWFsbHkgZGVzdHJveWVkLCBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgY29uZGl0aW9uLlxuXG5UaGUgZml4LCBieSBzZXR0aW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7YCwgaW5pdGlhbGl6ZXMgdGhlIGBuZXdzay1cdTAwM2Vwc3BfYXNzb2NgIHRvIGBOVUxMYCwgcHJldmVudGluZyB0aGUgZHVwbGljYXRlIHJlZmVyZW5jZS5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLlxuXG4xLiAgKipJcyB0aGlzIGEgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBrZXJuZWwgbG9naWM/KiogQWJzb2x1dGVseSwgYHNrX2Nsb25lKClgIGluIGBuZXQvY29yZS9zb2NrLmNgIGlzIHRoZSBzb2NrZXQgY2xvbmluZyBmdW5jdGlvbiBhbmQgaXQncyB1c2VkIGFjcm9zcyBhIHZhcmlldHkgb2YgbmV0d29ya2luZyBwcm90b2NvbHMgKFRDUCwgU0NUUCwgTVBUQ1ApIHdoZW5ldmVyIGEgbmV3IGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQgZnJvbSBhIGxpc3RlbmluZyBzb2NrZXQuIFRoaXMgZml4IG1vZGlmaWVzIHRoYXQgY29yZSBjbG9uaW5nIGxvZ2ljIHdoZW4gYElORVRfUFNQYCBpcyBlbmFibGVkLlxuMi4gICoqQ2FuIHRoaXMgYmUgZnV6emVkIGluIGNvbW1vbiBlbnZpcm9ubWVudHM/KiogWWVzLCB0aGlzIGlzIGEgcHVyZSBzb2Z0d2FyZS1iYXNlZCBvcGVyYXRpb24sIGludm9sdmluZyBuZXR3b3JrIHByb3RvY29scy4gSXQgY2FuIGJlIGV4ZXJjaXNlZCBpbiBzdGFuZGFyZCBMaW51eCBlbnZpcm9ubWVudHMsIFFFTVUsIG9yIGV2ZW4gd2l0aCBuZXRkZXZzaW0vdmV0aC9sb29wYmFjayBzZXR1cHMuXG4zLiAgKipJcyBpdCB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQ/KiogRGVmaW5pdGVseS4gVGhpcyBmaXhlcyBhIHJlZmNvdW50aW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSByZWxhdGVkIHRvIFBTUCB3aXRoaW4gdGhlIGNyaXRpY2FsIHByb2Nlc3Mgb2Ygc29ja2V0IGNsb25pbmcuIFBTUCBpcyBhIG5ldHdvcmtpbmcgZmVhdHVyZSBlbmFibGVkIGJ5IGBDT05GSUdfSU5FVF9QU1BgLiBJdCdzIHRlc3RhYmxlIHdpdGggZnV6emluZyB1c2luZyB0aGUgc29ja2V0IG9wZXJhdGlvbnMsIGxpa2UgVENQIGFjY2VwdCwgbGlzdGVuLCBjb25uZWN0LCBhbmQgcG90ZW50aWFsbHkgbmV0bGluayBjb21tYW5kcyByZWxhdGVkIHRvIFBTUC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcy4gTGV0J3MgbG9vayBhdCBgbmV0L3BzcC9LY29uZmlnYCBhbmQgaWYgaXQgaGFzIGFueSBmdXJ0aGVyIGRlcGVuZGVuY2llcy4gV2UndmUgY29uZmlybWVkIHRoYXQgYElORVRfUFNQYCBkZXBlbmRzIG9uIGBJTkVUYCwgYnV0IGFyZSB0aGVyZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBpbiBgbmV0L3BzcC9LY29uZmlnYCBpdHNlbGYsIG9yIHBlcmhhcHMgYG5ldC9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL0tjb25maWdgPyBJdCdzIGFsd2F5cyBpbXBvcnRhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTkzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI3OjU0LjkyNDM5MzczNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MDYyMjAyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKm5ldC9wc3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9ODQ9c291cmNlIFxcXCJuZXQvcGFja2V0L0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6ODU6c291cmNlIFxcXCJuZXQvcHNwL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctODYtc291cmNlIFxcXCJuZXQvdW5peC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyNzo1Ny4zODUwMjA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjEwNDk1NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBQU1AgU2VjdXJpdHkgUHJvdG9jb2wgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBnaXZlbiB0aGlzIEtjb25maWcgZW50cnkgZm9yIHRoZSBQU1AgU2VjdXJpdHkgUHJvdG9jb2wuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseS4gTGV0J3MgZGVsdmUgaW50byB0aGUgYG5ldC9wc3AvS2NvbmZpZ2AgZmlsZSBkaXJlY3RseSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEknbSBub3RpbmcgdGhlIGJvb2xlYW4gbmF0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIGRlcGVuZGVuY3kgb24gYElORVRgLCBhbmQgdGhlIHNlbGVjdCBzdGF0ZW1lbnRzIGNob29zaW5nIGBTS0JfREVDUllQVEVEYCwgYFNLQl9FWFRFTlNJT05TYCwgYW5kIGBTT0NLX1ZBTElEQVRFX1hNSVRgLiBUaGVzZSBkZXBlbmRlbmNpZXMgZ2l2ZSBtZSBpbW1lZGlhdGUgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcga2VybmVsIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRoaXMgcHJvdG9jb2wgaW50ZWdyYXRlcy4gVGhlIGRvY3VtZW50YXRpb24gbGluayBwb2ludHMgdG8gdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNhdGlvbiwgd2hpY2ggSSdsbCBhYnNvbHV0ZWx5IHJldmlldywgbGlrZWx5IG11bHRpcGxlIHRpbWVzLiBUaGUgXCJJZiB1bnN1cmUsIHNheSBOXCIgaGVscCB0ZXh0IGlzIHN0YW5kYXJkLCBidXQgSSB3aWxsIGJlIHN1cmUgdG8gYXZvaWQgdGhhdC5cblxuTm93LCBJIHdhbnQgYSBtb3JlIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4gSSdtIGdvaW5nIHRvIHNjYW4gYWNyb3NzIGFsbCBLY29uZmlnIGZpbGVzIGFuZCBoZWFkZXIgZmlsZXMgaW4gdGhlIHJlbGV2YW50IGFyZWFzIHRvIGNoZWNrIGV2ZXJ5IHBsYWNlIGBJTkVUX1BTUGAgaXMgcmVmZXJlbmNlZC4gQ3Jvc3MtcmVmZXJlbmNpbmcgdGhlc2UgaXMgaW1wb3J0YW50LiBOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgcnVudGltZSBjb25maWd1cmF0aW9uLiBIb3cgaXMgUFNQIGFjdHVhbGx5ICphc3NvY2lhdGVkKiB3aXRoIGEgc29ja2V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtIGZvciBkb2luZyB0aGlzLiBUaGF0IHdpbGwgcHJvYmFibHkgcmVxdWlyZSBtb3JlIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIHNvdXJjZSwgYnV0IGlkZWFsbHksIEkgd2FudCB0byBzZWUgaG93IHRoaXMgaXMgY29uZmlndXJlZCBhbmQgbWFuaXB1bGF0ZWQgZnJvbSB1c2VyIHNwYWNlLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBuZXRsaW5rIGludGVyZmFjZXMgb3IgYHNldHNvY2tvcHRgIG9wdGlvbnMgcmVsYXRlZCB0byBcIlBTUFwiLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdW5kZXJzdGFuZGluZyBob3cgaXQncyB1c2VkIHdpbGwgY29tZSBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzIzOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyODoyNS45OTU1MTg3NDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE3MjYyMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNwX3NvY2tfYXNzb2Nfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wc3AvcHNwLmg9MjU9dm9pZCBwc3BfZGV2X3R4X2tleV9kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcXG5uZXQvcHNwL3BzcC5oOjI2OmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3AuaC0yNy1cXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbm5ldC9wc3AvcHNwLmgtMjgtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbm5ldC9wc3AvcHNwLmg6Mjk6aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxubmV0L3BzcC9wc3AuaC0zMC1cXHRcXHRcXHQgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy04MDktXFxubmV0L3BzcC9wc3BfbmwuYzo4MTA6XFx0ZXJyID0gcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHNvY2tldC1cXHUwMDNlc2ssIHBhcywgXFx1MDAyNmtleSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTgxMS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTgyNj1pbnQgcHNwX25sX3R4X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtODU3LVxcbm5ldC9wc3AvcHNwX25sLmM6ODU4OlxcdGVyciA9IHBzcF9zb2NrX2Fzc29jX3NldF90eChzb2NrZXQtXFx1MDAzZXNrLCBwc2QsIHZlcnNpb24sIFxcdTAwMjZrZXksXFxubmV0L3BzcC9wc3BfbmwuYy04NTktXFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTI0PXZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTMyOmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTE1OD1zdGF0aWMgaW50IHBzcF9zb2NrX3JlY3ZfcXVldWVfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTc2LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxNzc6aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxubmV0L3BzcC9wc3Bfc29jay5jLTE3OC1cXHRcXHRcXHQgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6Mjg6MjcuNTM3MjQ5NTAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1NTc5NTAyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBzbmlwcGV0IG9mIGNvZGUsIHRoaW5raW5nIHRocm91Z2ggaXQgYXMgYW4gZXhwZXJ0IHdvdWxkOlxuXG4qKkRpdmluZyBpbnRvIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4YCoqXG5cblJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBzb2NrZXQgYXNzb2NpYXRpb24sIHNwZWNpZmljYWxseSBpbiB0aGUgYG5ldC9wc3AvcHNwX3NvY2suY2AgZmlsZS4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4YC4gVGhlc2UgZnVuY3Rpb25zIGxpa2VseSBjb250cm9sIHRoZSBzZXR1cCBvZiByZWNlaXZlIGFuZCB0cmFuc21pdCBhc3NvY2lhdGlvbnMgZm9yIHRoZXNlIHBhcnRpY3VsYXIgUFNQIHNvY2tldHMuIEknbSBhc3N1bWluZyBcIlBTUFwiIGlzIHNvbWV0aGluZyBwcm9wcmlldGFyeSBvciBzcGVjaWZpYyB0byB0aGlzIG5ldHdvcmsgc3RhY2s7IGtub3dpbmcgdGhpcywgSSBjYW4gaW5mZXIgdGhhdCB0aGUgYXNzb2NpYXRpb25zIGJlaW5nIHNldCBoZXJlIGFyZSBsaWtlbHkgdGllZCB0byBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlIG9yIG1lY2hhbmlzbSBmb3IgZWZmaWNpZW50bHkgaGFuZGxpbmcgdGhlc2Ugc29ja2V0cy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBcImFzc29jaWF0aW9uXCIgbWVhbnMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhYm91dCBsaW5raW5nIGEgc29ja2V0IHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2UsIGZsb3cgSUQsIHF1ZXVlLCBvciBldmVuIGEgcGFydGljdWxhciBidWZmZXI/IElzIHRoaXMgYWJvdXQgc2V0dGluZyB1cCBhIGNvbnRleHQgZm9yIHBhY2tldCBwcm9jZXNzaW5nIG9yIGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uPyBUaGUgXCJzZXRcXF9yeFwiIGFuZCBcInNldFxcX3R4XCIgZGlzdGluY3Rpb24gc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRoZSBjb25uZWN0aW9uIGlzIHJlbGV2YW50LlxuXG5NeSBmaXJzdCBzdGVwIHdpbGwgYmUgdG8gcXVpY2tseSByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHBzcF9zb2NrLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgYXJjaGl0ZWN0dXJlIG9mIHRoZSBQU1Agc29ja2V0IGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBhc3NvY2lhdGlvbnMgYXJlIHVzZWQsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgcmVsYXRlIHRvIChlc3BlY2lhbGx5IGFueXRoaW5nIHdpdGggXCJhc3NvYyxcIiBcInJ4LFwiIG9yIFwidHhcIiBpbiB0aGUgbmFtZSksIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0aHJvdWdoIHRoZXNlIGZ1bmN0aW9ucywgaWRlbnRpZnlpbmcgYW55IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gQ29udGV4dCBpcyBrZXksIGFuZCBJJ2xsIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlICp3aHkqIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlICpob3cqIHRoZXkncmUgZGVzaWduZWQuIFRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiAqd2hhdCogaXMgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ2MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI5OjIzLjExNjc1NTExOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcHNwL3BzcF9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdGlmIChwYXMgXFx1MDAyNlxcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZwYXMtXFx1MDAzZXJlZmNudCkpXFxuIDEyMTpcXHRcXHRcXHRjYWxsX3JjdShcXHUwMDI2cGFzLVxcdTAwM2VyY3UsIHBzcF9hc3NvY19mcmVlX3F1ZXVlKTtcXG4gMTIyOlxcdH1cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxuIDEyNTpcXHR7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIDEpO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoc2stXFx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XFxuIDEyOTpcXHRcXHRwc3BfYXNzb2NfcHV0KHBhcyk7XFxuIDEzMDpcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdGludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuIDEzMzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbiAxMzQ6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRpbnQgZXJyO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRtZW1jcHkoXFx1MDAyNnBhcy1cXHUwMDNlcngsIGtleSwgc2l6ZW9mKCprZXkpKTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcXG4gMTQzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlNvY2tldCBhbHJlYWR5IGhhcyBQU1Agc3RhdGVcXFwiKTtcXG4gMTQ0OlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4gMTQ1OlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDE0NjpcXHRcXHR9XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2cGFzLVxcdTAwM2VyZWZjbnQpO1xcbiAxNDk6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XFxuIDE1MDpcXHRcXHRlcnIgPSAwO1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRleGl0X3VubG9jazpcXG4gMTUzOlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdHJldHVybiBlcnI7XFxuIDE1NjpcXHR9XFxuIDE1NzpcXHRcXG4gMTU4OlxcdHN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG4gMTU5OlxcdHtcXG4gMTYwOlxcdFxcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlO1xcbiAxNjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0c2tiX3JidHJlZV93YWxrKHNrYiwgXFx1MDAyNnRjcF9zayhzayktXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkge1xcbiAxNjQ6XFx0XFx0XFx0cHNlID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9QU1ApO1xcbiAxNjU6XFx0XFx0XFx0aWYgKCFwc3BfcHNlX21hdGNoZXNfcGFzKHBzZSwgcGFzKSlcXG4gMTY2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDE2NzpcXHRcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdFxcdHNrYl9xdWV1ZV93YWxrKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKSB7XFxuIDE3MDpcXHRcXHRcXHRwc2UgPSBza2JfZXh0X2ZpbmQoc2tiLCBTS0JfRVhUX1BTUCk7XFxuIDE3MTpcXHRcXHRcXHRpZiAoIXBzcF9wc2VfbWF0Y2hlc19wYXMocHNlLCBwYXMpKVxcbiAxNzI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gMTczOlxcdFxcdH1cXG4gMTc0OlxcdFxcdHJldHVybiAwO1xcbiAxNzU6XFx0fVxcbiAxNzY6XFx0XFxuIDE3NzpcXHRpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcXG4gMTc4OlxcdFxcdFxcdFxcdCAgdTMyIHZlcnNpb24sIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcbiAxNzk6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDE4MDpcXHR7XFxuIDE4MTpcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7XFxuIDE4MjpcXHRcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsICpkdW1teTtcXG4gMTgzOlxcdFxcdGludCBlcnI7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxuIDE4ODpcXHRcXHRpZiAoIXBhcykge1xcbiAxODk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiU29ja2V0IGhhcyBubyBSeCBrZXlcXFwiKTtcXG4gMTkwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDE5MTpcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFx0aWYgKHBhcy1cXHUwMDNlcHNkICE9IHBzZCkge1xcbiAxOTQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUngga2V5IGZyb20gZGlmZmVyZW50IGRldmljZVxcXCIpO1xcbiAxOTU6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMTk2OlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDE5NzpcXHRcXHR9XFxuIDE5ODpcXHRcXHRpZiAocGFzLVxcdTAwM2V2ZXJzaW9uICE9IHZlcnNpb24pIHtcXG4gMTk5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4gMjAwOlxcdFxcdFxcdFxcdCAgICAgICBcXFwiUFNQIHZlcnNpb24gbWlzbWF0Y2ggd2l0aCBleGlzdGluZyBzdGF0ZVxcXCIpO1xcbiAyMDE6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMjAyOlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDIwMzpcXHRcXHR9XFxuIDIwNDpcXHRcXHRpZiAocGFzLVxcdTAwM2V0eC5zcGkpIHtcXG4gMjA1OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlR4IGtleSBhbHJlYWR5IHNldFxcXCIpO1xcbiAyMDY6XFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbiAyMDc6XFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gMjA4OlxcdFxcdH1cXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyOToyMy4xMTY4MzI5OThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0NzQ5MjcyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgc2tfY2xvbmUoKWAgaW4gYG5ldC9jb3JlL3NvY2suY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSBhbGwgcmVsZXZhbnQgc3ltYm9scyB0aGF0IGFyZSBtb2RpZmllZCBvciBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggYW5kIGRldGVybWluZSB0aGUgbW9zdCBlZmZlY3RpdmUgcGFyYW1ldGVycyBmb3IgZnV6emluZy5cblxuTXkgYW5hbHlzaXMgd2VudCBsaWtlIHRoaXM6XG4xLiAgKipNb2RpZmllZCBGdW5jdGlvbjoqKiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgc2tfY2xvbmVgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZC5cbjIuICAqKkhvdCBQYXRoIEFuYWx5c2lzOioqIEkgY29uc2lkZXJlZCB3aGV0aGVyIGBza19jbG9uZWAgaXMgYSBmcmVxdWVudGx5IGV4ZWN1dGVkIGhvdC1wYXRoIGZ1bmN0aW9uIG9yIGxlc3MgY3JpdGljYWwgYW5kIGNvbmZpcm1lZCBpdCdzIGNhbGxlZCBkdXJpbmcgVENQL1NDVFAgY29ubmVjdGlvbiBzZXR1cCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgYnV0IG5vdCBhbHdheXMgaG90IHBhdGguIFRoaXMgaW5mb3JtcyBteSBmdXp6aW5nIHN0cmF0ZWd5LlxuMy4gICoqSW5zdHJ1Y3Rpb24gQWxpZ25tZW50OioqIEkgdGhlbiBjYXJlZnVsbHkgcmUtcmVhZCB0aGUgcmVsZXZhbnQgZnV6emluZyBpbnN0cnVjdGlvbiB3aGljaCBlbXBoYXNpemVzIGZvY3VzaW5nIG9uIHNwZWNpZmljLCBub24tZ2VuZXJpYyBlbnRyeXBvaW50cy4gVGhlIGluc3RydWN0aW9uIGFsc28gaGlnaGxpZ2h0ZWQgdGhlIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyB0byBlbnN1cmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZy5cbjQuICAqKklkZW50aWZ5aW5nIEZvY3VzIFN5bWJvbHM6KiogQmFzZWQgb24gdGhlIHBhdGNoLCBJJ3ZlIGlkZW50aWZpZWQgdGhlICpgc2tfY2xvbmVgKiBmdW5jdGlvbiBhbmQgKm5ldGxpbmsgZW50cnlwb2ludHMgZm9yIFBTUCo6IGBwc3BfbmxfcnhfYXNzb2NfZG9pdGAsIGBwc3BfbmxfdHhfYXNzb2NfZG9pdGAsIGFuZCB0aGUgc29ja2V0IGFzc29jaWF0aW9uIGZ1bmN0aW9uczogYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAsIGBwc3Bfc29ja19hc3NvY19zZXRfdHhgLCBgcHNwX3NrX2Fzc29jX2ZyZWVgIGFzIHRoZSBtYWluIGZvY3VzIHN5bWJvbHMuXG41LiAgKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczoqKiBJIGNoZWNrZWQgZm9yIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFuZCBkZXBlbmRlbmNpZXMgbGlrZSBgQ09ORklHX0lORVRfUFNQYC4gSSBjb25maXJtZWQgdGhhdCBgSU5FVF9QU1BgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYE5FVGBcbjYuICAqKlZlcmlmeWluZyBGdXp6aW5nIFN1aXRhYmlsaXR5OioqIEkgdmVyaWZpZWQgdGhlIHBhdGNoIGZpeGVzIGEgcmVmY291bnRpbmcvc29ja2V0IGluaXRpYWxpemF0aW9uIGlzc3VlIHdoZW4gY2xvbmluZyBzb2NrZXRzIHdpdGggUFNQIHN1cHBvcnQgZW5hYmxlZCAoYENPTkZJR19JTkVUX1BTUGApLCBjb25maXJtaW5nIGl0cyBzdWl0YWJpbGl0eSBmb3IgZnV6emluZy5cbjcuICAqKmBGb2N1c1N5bWJvbHNgIFJlZmluZW1lbnQ6KiogV2l0aCB0aGF0IGluIG1pbmQsIEkgcmV2aWV3ZWQgdGhlIGtleSBmdXp6aW5nIHBhcmFtZXRlcnM6XG4gICAgKiAgICoqYFdvcnRoRnV6emluZ2A6KiogQ29uZmlybWVkIHRoYXQgdGhlIGZpeCBpcyB3b3J0aCBmdXp6aW5nIGR1ZSB0byB0aGUgcmVmY291bnRpbmcvc29ja2V0IGluaXRpYWxpemF0aW9uIGlzc3VlLlxuICAgICogICAqKmBGb2N1c1N5bWJvbHNgOioqIE15IGZpbmFsIHNlbGVjdGlvbiBmb3IgRm9jdXNTeW1ib2xzIGluY2x1ZGVzOlxuICAgICAgICAqICAgYHNrX2Nsb25lYFxuICAgICAgICAqICAgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGBcbiAgICAgICAgKiAgIGBwc3Bfc29ja19hc3NvY19zZXRfdHhgXG4gICAgICAgICogICBgcHNwX3NrX2Fzc29jX2ZyZWVgXG4gICAgKiAgICoqYEVuYWJsZUNvbmZpZ3NgOioqIFRoZSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgYXJlOlxuICAgICAgICAqICAgYElORVRfUFNQYFxuICAgICAgICAqICAgYElORVRgXG44LiAgKipGaW5hbCBWZXJpZmljYXRpb246KiogSSBkb3VibGUtY2hlY2tlZCB0aGUgbm9uLXN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIHRoYXQgYHNrX2Nsb25lYCBpcyBgRVhQT1JUX1NZTUJPTF9HUExgIGFuZCB0aGUgb3RoZXJzIGFyZSBhbHNvIG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5CYXNlZCBvbiB0aGlzLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgdGFyZ2V0cyBhbmQgY29uZmlndXJhdGlvbnMuIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBhdGNoIGFuZCB0aGUgc3lzdGVtIHJlcXVpcmVtZW50cyBpcyBub3cgc29saWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjczLCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI5OjUwLjU5MTc2MjYzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzM5ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX2Nsb25lXCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfcnhcIixcbiAgICBcInBzcF9zb2NrX2Fzc29jX3NldF90eFwiLFxuICAgIFwicHNwX3NrX2Fzc29jX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCdzIHBzcF9hc3NvYyBwb2ludGVyIGlzIGNsZWFyZWQgZHVyaW5nIHNrX2Nsb25lKCkgd2hlbiBJTkVUX1BTUCBpcyBlbmFibGVkLCBwcmV2ZW50aW5nIHRoZSBuZXdseSBjbG9uZWQgc29ja2V0IGZyb20gaW5oZXJpdGluZyB0aGUgcGFyZW50IHNvY2tldCdzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX2Nsb25lXCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfcnhcIixcbiAgICBcInBzcF9zb2NrX2Fzc29jX3NldF90eFwiLFxuICAgIFwicHNwX3NrX2Fzc29jX2ZyZWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCdzIHBzcF9hc3NvYyBwb2ludGVyIGlzIGNsZWFyZWQgZHVyaW5nIHNrX2Nsb25lKCkgd2hlbiBJTkVUX1BTUCBpcyBlbmFibGVkLCBwcmV2ZW50aW5nIHRoZSBuZXdseSBjbG9uZWQgc29ja2V0IGZyb20gaW5oZXJpdGluZyB0aGUgcGFyZW50IHNvY2tldCdzIFBTUCBhc3NvY2lhdGlvbiBwb2ludGVyIHdpdGhvdXQgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UgY291bnQuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgY29uZGl0aW9ucyB1cG9uIHNvY2tldCBkZXN0cnVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6Mjk6NTAuNjcyMTExMTA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDIxOTk5NDcyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzoyOTo1MC42NzI3MDYwOTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDIxOTkzNDg4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza19jbG9uZSgpYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2NgIHRvIGBOVUxMYCB2aWEgYFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXBzcF9hc3NvYywgTlVMTClgLiBcXG5cXG5XaGVuIGEgc29ja2V0IGlzIGNsb25lZCwgYHNvY2tfY29weSgpYCBwZXJmb3JtcyBhIHNoYWxsb3cgY29weSBvZiB0aGUgc29ja2V0IHN0cnVjdHVyZSBmcm9tIHBhcmVudCB0byBjaGlsZC4gV2l0aG91dCBjbGVhcmluZyBgbmV3c2stXFx1MDAzZXBzcF9hc3NvY2AsIHRoZSBjbG9uZWQgc29ja2V0IGluaGVyaXRlZCB0aGUgcGFyZW50J3MgcG9pbnRlciB0byBgc3RydWN0IHBzcF9hc3NvY2Agd2l0aG91dCB0YWtpbmcgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnQuIFVwb24gZGVzdHJ1Y3Rpb24gb2YgdGhlIGNsb25lZCBzb2NrZXQgKGBwc3Bfc2tfYXNzb2NfZnJlZWApLCBgcHNwX2Fzc29jX3B1dCgpYCB3b3VsZCBiZSBjYWxsZWQsIGxlYWRpbmcgdG8gcmVmZXJlbmNlIHVuZGVyZmxvdywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGVycm9ycy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWRkcmVzc2luZyBvYmplY3QgbGlmZWN5Y2xlLCBwb2ludGVyIGFsaWFzaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyAod2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2E1YTg1ZWJiYWM2OTc1MmUwYWZhZjZjYTg4OGI1M2FhNTZmMDQ5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE3OjIzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jXG5pbmRleCAxYWQ0MTkwNGRiMjViLi5mYTYwYjc0OTRjNTg2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXG4rKysgYi9uZXQvY29yZS9zb2NrLmNcbkBAIC0yNDk0LDYgKzI0OTQsOSBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXNrX2JwZl9zdG9yYWdlLCBOVUxMKTtcbiAjZW5kaWZcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4rXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XG4rI2VuZGlmXG4gXG4gXHQvKiBTQU5JVFkgKi9cbiBcdGlmIChsaWtlbHkobmV3c2stXHUwMDNlc2tfbmV0X3JlZmNudCkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjI5OjUwLjY3MjcwNzM0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTM5NDk5MzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9jb3JlL3NvY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYHNrX2Nsb25lYCAob3IgcG90ZW50aWFsbHkgYHNrX2Nsb25lX2xvY2tgKSBmdW5jdGlvbi4gVGhhdCdzIGEga2V5IHNwb3QgZm9yIHNvY2tldCBjbG9uaW5nLCBhbmQgYW55IG1vZGlmaWNhdGlvbiB0aGVyZSB3YXJyYW50cyBhIGNsb3NlIGxvb2suIFRoZSBzbmlwcGV0IGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFkZGluZyBhIGNvbmRpdGlvbmFsIGJsb2NrIGJhc2VkIG9uIGBDT05GSUdfSU5FVF9QU1BgLiBJbnNpZGUgdGhhdCBjb25kaXRpb25hbCwgaXQncyBpbml0aWFsaXppbmcgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIHVzaW5nIGBSQ1VfSU5JVF9QT0lOVEVSYC4gU2VlbXMgbGlrZSB0aGV5J3JlIGFzc29jaWF0aW5nIHNvbWUgc29ydCBvZiBwb2ludGVyIHdpdGggdGhlIG5ldyBzb2NrZXQgY2xvbmUgaWYgdGhpcyBgQ09ORklHX0lORVRfUFNQYCBmZWF0dXJlIGlzIGVuYWJsZWQuXG5cblJpZ2h0LCBzbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBwc3BfYXNzb2NgICppcyogYW5kIHdoYXQgdGhpcyBgQ09ORklHX0lORVRfUFNQYCBmbGFnIGNvbnRyb2xzLiBUaW1lIHRvIGdvIGh1bnRpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSBoZXJlIHRvIHNlZSBpZiBhbnkgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IGNvbmNlcm5zIGNvbWUgdG8gbWluZCBhcyBhIHJlc3VsdCBvZiB0aGF0IGFzc29jaWF0aW9uIGFuZCB0aGUgY2xvbmluZyBwcm9jZXNzLiBBbHNvLCBnaXZlbiBpdOKAmXMgUkNVIGluaXQsIHRoZXJlIGFyZSBpbXBsaWNhdGlvbnMgaW4gdGVybXMgb2YgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IHNhZmV0eSB3aXRoIHJlc3BlY3QgdG8gdGhhdCByZWFkIGFuZCB3cml0ZS4gTGV0J3Mgc2VlIHdoYXTigJlzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MzE6MjAuMDY3NzAzMDM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA0NTgwNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzcF9hc3NvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM9OTMxPXN0cnVjdCBwc3Bfa2V5IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05MzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjkzNTpzdGF0aWMgaW50IG1seDVlX3BzcF9hc3NvY19hZGQoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05MzYtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYy05NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjk2MTpzdGF0aWMgdm9pZCBtbHg1ZV9wc3BfYXNzb2NfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtOTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz0xMDExPXN0YXRpYyBzdHJ1Y3QgcHNwX2Rldl9vcHMgbWx4NV9wc3Bfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTEwMTMtXFx0LnJ4X3NwaV9hbGxvYyA9IG1seDVlX3BzcF9yeF9zcGlfYWxsb2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjEwMTQ6XFx0LnR4X2tleV9hZGQgICA9IG1seDVlX3BzcF9hc3NvY19hZGQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjEwMTU6XFx0LnR4X2tleV9kZWwgICA9IG1seDVlX3BzcF9hc3NvY19kZWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jLTEwMTYtXFx0LmtleV9yb3RhdGUgICA9IG1seDVlX3BzcF9rZXlfcm90YXRlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmM9OTM9c3RhdGljIGJvb2wgbWx4NWVfcHNwX3NldF9zdGF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jLTk2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYzo5NzpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMtOTgtXFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xOD1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMi1cXHRzdHJ1Y3QgcHNwX2RldiAqcGVlcl9wc2Q7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIzOlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjQtXFx0c3RydWN0IG5ldCAqbmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTM5LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzo0MDpcXHRwdHIgPSBwc3BfYXNzb2NfZHJ2X2RhdGEocGFzKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtNDEtXFx0aWYgKCpwdHIgIT0gbnMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xMzE9bnNpbV9yeF9zcGlfYWxsb2Moc3RydWN0IHBzcF9kZXYgKnBzZCwgdTMyIHZlcnNpb24sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxNTI6c3RhdGljIGludCBuc2ltX2Fzc29jX2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1My1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTUtXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBwc2QtXFx1MDAzZWRydl9wcml2O1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxNTY6XFx0dm9pZCAqKnB0ciA9IHBzcF9hc3NvY19kcnZfZGF0YShwYXMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNTctXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MTY1PXN0YXRpYyBpbnQgbnNpbV9rZXlfcm90YXRlKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xNzktXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE4MDpzdGF0aWMgdm9pZCBuc2ltX2Fzc29jX2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4MS17XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4Mi1cXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IHBzZC1cXHUwMDNlZHJ2X3ByaXY7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE4MzpcXHR2b2lkICoqcHRyID0gcHNwX2Fzc29jX2Rydl9kYXRhKHBhcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE4NC1cXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oPTMzPXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oOjg2OlxcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcXHQgICpwc3BfYXNzb2M7XFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODctI2VuZGlmXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MjI9aW50IHBzcF9kZXZfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHUxNiBkZXZfaWQsIHU4IGdlbmVyYXRpb24sIGJvb2wgc3RyaXBfaWN2KTtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0yNC0vKiBLZXJuZWwtZmFjaW5nIEFQSSAqL1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoyNTp2b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMjYtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjI3OnN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2Fzc29jX2Rydl9kYXRhKHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMjgte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTM3PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzgtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDAte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0MTpcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQyLX1cXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD00NT1wc3BfZW5xdWV1ZV9zZXRfZGVjcnlwdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDYte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0NzpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQ4LVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTY5PXN0YXRpYyBpbmxpbmUgYm9vbFxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo3MDpwc3BfaXNfYWxsb3dlZF9ub25kYXRhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNzEte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbFxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo4Mzpwc3BfcHNlX21hdGNoZXNfcGFzKHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTg0LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD05MT1zdGF0aWMgaW5saW5lIGVudW0gc2tiX2Ryb3BfcmVhc29uXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjkyOl9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTkzLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMjI9cHNwX3R3c2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjMte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjQ6XFx0cmV0dXJuIF9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhza2IsIHJjdV9kZXJlZmVyZW5jZSh0dy1cXHUwMDNlcHNwX2Fzc29jKSk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyNS19XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEyNi1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTI3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2dldF9hc3NvY19yY3UoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMjgte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMjk6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMzAtXFx0aW50IHN0YXRlO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTEzNi1cXHRwYXMgPSBzdGF0ZSA9PSBUQ1BfVElNRV9XQUlUID9cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTM3OlxcdFxcdCAgICAgIHJjdV9kZXJlZmVyZW5jZShpbmV0X3R3c2soc2spLVxcdTAwM2Vwc3BfYXNzb2MpIDpcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTM4OlxcdFxcdCAgICAgIHJjdV9kZXJlZmVyZW5jZShzay1cXHUwMDNlcHNwX2Fzc29jKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTM5LVxcdHJldHVybiBwYXM7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTQxLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNDI6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tiX2dldF9hc3NvY19yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTQzLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTItXFx0aW50IHBzcF9lbmNhcCA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIFBTUF9IRFJfU0laRSArIFBTUF9UUkxfU0laRTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTUzOlxcdGJvb2wgaGFzX3BzcCA9IHJjdV9hY2Nlc3NfcG9pbnRlcihzay1cXHUwMDNlcHNwX2Fzc29jKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU0LVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE2Mz1wc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpIHsgfVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjQtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2Ni17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTg3PXBzcF90d3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xOTEtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE5MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za2JfZ2V0X2Fzc29jX3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xOTMte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9NDM9c3RydWN0IHBzcF9kZXZfY29uZmlnIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTUzLS8qKlxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjU0OiAqIHN0cnVjdCBwc3BfYXNzb2NfZGV2IC0gd3JhcHBlciBmb3IgYXNzb2NpYXRlZCBuZXRfZGV2aWNlXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNTUtICogQGRldl9saXN0OiBsaXN0IG5vZGUgZm9yIHBzcF9kZXY6OmFzc29jX2Rldl9saXN0XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC01OC0gKi9cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDo1OTpzdHJ1Y3QgcHNwX2Fzc29jX2RldiB7XFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNjAtXFx0c3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTY3LSAqIEBtYWluX25ldGRldjogb3JpZ2luYWwgbmV0ZGV2aWNlIG9mIHRoaXMgUFNQIGRldmljZVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjY4OiAqIEBhc3NvY19kZXZfbGlzdDogbGlzdCBvZiBwc3BfYXNzb2NfZGV2IGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUFNQIGRldmljZVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTY5LSAqIEBhc3NvY19kZXZfY250OiBudW1iZXIgb2YgZW50cmllcyBpbiBAYXNzb2NfZGV2X2xpc3RcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTEyND1zdHJ1Y3QgcHNwX2Rldl9jYXBzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEzMi1cXHQgKiBAYXNzb2NfZHJ2X3NwYzogc2l6ZSBvZiBkcml2ZXItc3BlY2lmaWMgc3RhdGUgaW4gVHggYXNzb2NcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoxMzM6XFx0ICogRGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiBzdHJ1Y3QgcHNwX2Fzc29jOjpkcnZfZGF0YVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEzNC1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE1MD1zdHJ1Y3QgcHNwX2tleV9wYXJzZWQge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTU0LVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjE1NTpzdHJ1Y3QgcHNwX2Fzc29jIHtcXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0xNTYtXFx0c3RydWN0IHBzcF9kZXYgKnBzZDtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE5NT1zdHJ1Y3QgcHNwX2Rldl9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjIyLVxcdCAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjIyMzpcXHRpbnQgKCp0eF9rZXlfYWRkKShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjI0LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIyOC1cXHQgKi9cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoyMjk6XFx0dm9pZCAoKnR4X2tleV9kZWwpKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjMwLVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTI0Mj1zdHJ1Y3Qgc2tfZmlsdGVyO1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTI1OC0gICpcXHRAc2tfcG9saWN5OiBmbG93IHBvbGljeVxcbmluY2x1ZGUvbmV0L3NvY2suaDoyNTk6ICAqXFx0QHBzcF9hc3NvYzogUFNQIGFzc29jaWF0aW9uLCBpZiBzb2NrZXQgaXMgUFNQLXNlY3VyZWRcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjYwLSAgKlxcdEBza19yZWNlaXZlX3F1ZXVlOiBpbmNvbWluZyBwYWNrZXRzXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MzY1PXN0cnVjdCBzb2NrIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC00NjctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L3NvY2suaDo0Njg6XFx0c3RydWN0IHBzcF9hc3NvYyBfX3JjdVxcdCpwc3BfYXNzb2M7XFxuaW5jbHVkZS9uZXQvc29jay5oLTQ2OS0jZW5kaWZcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0yNDc5PXN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxcbi0tXFxubmV0L2NvcmUvc29jay5jLTI0OTctI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbm5ldC9jb3JlL3NvY2suYzoyNDk4OlxcdFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XFxubmV0L2NvcmUvc29jay5jLTI0OTktI2VuZGlmXFxuLS1cXG5uZXQvcHNwL3BzcC1ubC1nZW4uYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIHBzcF9ubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTEwNS1cXHRcXHQuY21kXFx0XFx0PSBQU1BfQ01EX1JYX0FTU09DLFxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jOjEwNjpcXHRcXHQucHJlX2RvaXRcXHQ9IHBzcF9hc3NvY19kZXZpY2VfZ2V0X2xvY2tlZCxcXG5uZXQvcHNwL3BzcC1ubC1nZW4uYy0xMDctXFx0XFx0LmRvaXRcXHRcXHQ9IHBzcF9ubF9yeF9hc3NvY19kb2l0LFxcbi0tXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmMtMTE0LVxcdFxcdC5jbWRcXHRcXHQ9IFBTUF9DTURfVFhfQVNTT0MsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmM6MTE1OlxcdFxcdC5wcmVfZG9pdFxcdD0gcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkLFxcbm5ldC9wc3AvcHNwLW5sLWdlbi5jLTExNi1cXHRcXHQuZG9pdFxcdFxcdD0gcHNwX25sX3R4X2Fzc29jX2RvaXQsXFxuLS1cXG5uZXQvcHNwL3BzcC1ubC1nZW4uaD0yMD1pbnQgcHNwX2RldmljZV9nZXRfbG9ja2VkX2FkbWluKGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxcbm5ldC9wc3AvcHNwLW5sLWdlbi5oLTIxLVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9wc3AvcHNwLW5sLWdlbi5oOjIyOmludCBwc3BfYXNzb2NfZGV2aWNlX2dldF9sb2NrZWQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsXFxubmV0L3BzcC9wc3AtbmwtZ2VuLmgtMjMtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuLS1cXG5uZXQvcHNwL3BzcC5oPTIxPXZvaWQgcHNwX25sX25vdGlmeV9kZXYoc3RydWN0IHBzcF9kZXYgKnBzZCwgdTMyIGNtZCk7XFxubmV0L3BzcC9wc3AuaC0yMi1cXG5uZXQvcHNwL3BzcC5oOjIzOnN0cnVjdCBwc3BfYXNzb2MgKnBzcF9hc3NvY19jcmVhdGUoc3RydWN0IHBzcF9kZXYgKnBzZCk7XFxubmV0L3BzcC9wc3AuaC0yNC1zdHJ1Y3QgcHNwX2RldiAqcHNwX2Rldl9nZXRfZm9yX3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvcHNwL3BzcC5oOjI1OnZvaWQgcHNwX2Rldl90eF9rZXlfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XFxubmV0L3BzcC9wc3AuaDoyNjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbm5ldC9wc3AvcHNwLmgtMjctXFx0XFx0XFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4tLVxcbm5ldC9wc3AvcHNwLmg9Mjk9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxuLS1cXG5uZXQvcHNwL3BzcC5oLTMxLVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvcHNwL3BzcC5oOjMyOnZvaWQgcHNwX2Fzc29jc19rZXlfcm90YXRlZChzdHJ1Y3QgcHNwX2RldiAqcHNkKTtcXG5uZXQvcHNwL3BzcC5oLTMzLVxcbi0tXFxubmV0L3BzcC9wc3BfbWFpbi5jPTEzMT12b2lkIHBzcF9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgcHNwX2RldiAqcHNkKVxcbm5ldC9wc3AvcHNwX21haW4uYy0xMzIte1xcbm5ldC9wc3AvcHNwX21haW4uYzoxMzM6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5LCAqZW50cnlfdG1wO1xcbm5ldC9wc3AvcHNwX21haW4uYzoxMzQ6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqbmV4dDtcXG5uZXQvcHNwL3BzcF9tYWluLmMtMTM1LVxcbi0tXFxubmV0L3BzcC9wc3BfbWFpbi5jPTQwOD1zdGF0aWMgdm9pZCBwc3BfZGV2X2Rpc2Fzc29jX29uZShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9wc3AvcHNwX21haW4uYy00MDkte1xcbm5ldC9wc3AvcHNwX21haW4uYzo0MTA6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xcbm5ldC9wc3AvcHNwX21haW4uYy00MTEtXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTU0PXBzcF9ubF9tdWx0aWNhc3RfcGVyX25zKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHVuc2lnbmVkIGludCBncm91cCxcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNTkte1xcbm5ldC9wc3AvcHNwX25sLmM6NjA6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xcbm5ldC9wc3AvcHNwX25sLmMtNjEtXFx0c3RydWN0IHhhcnJheSBzZW50X25ldHM7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTIzMD1ib29sIHBzcF9oYXNfYXNzb2NfZGV2X2luX25zKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvcHNwL3BzcF9ubC5jLTIzMS17XFxubmV0L3BzcC9wc3BfbmwuYzoyMzI6XFx0c3RydWN0IHBzcF9hc3NvY19kZXYgKmVudHJ5O1xcbm5ldC9wc3AvcHNwX25sLmMtMjMzLVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYz0yNDI9c3RhdGljIGludCBwc3BfbmxfZmlsbF9hc3NvY19kZXZfbGlzdChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3Qgc2tfYnVmZiAqcnNwLFxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy0yNDUte1xcbm5ldC9wc3AvcHNwX25sLmM6MjQ2OlxcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeTtcXG5uZXQvcHNwL3BzcF9ubC5jLTI0Ny1cXHRzdHJ1Y3QgbmV0ICpkZXZfbmV0X25zO1xcbi0tXFxubmV0L3BzcC9wc3BfbmwuYz00NDc9aW50IHBzcF9ubF9rZXlfcm90YXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNDgyLVxcbm5ldC9wc3AvcHNwX25sLmM6NDgzOlxcdHBzcF9hc3NvY3Nfa2V5X3JvdGF0ZWQocHNkKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTQ4NC1cXHRwc2QtXFx1MDAzZXN0YXRzLnJvdGF0aW9ucysrO1xcbi0tXFxubmV0L3BzcC9wc3BfbmwuYz00OTk9aW50IHBzcF9ubF9kZXZfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy01MDEtXFx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzBdO1xcbm5ldC9wc3AvcHNwX25sLmM6NTAyOlxcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICpwc3BfYXNzb2NfZGV2O1xcbm5ldC9wc3AvcHNwX25sLmMtNTAzLVxcdHN0cnVjdCBuZXRfZGV2aWNlICphc3NvY19kZXY7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTUxOC1cXG5uZXQvcHNwL3BzcF9ubC5jOjUxOTpcXHRwc3BfYXNzb2NfZGV2ID0ga3phbGxvY19vYmooKnBzcF9hc3NvY19kZXYpO1xcbm5ldC9wc3AvcHNwX25sLmM6NTIwOlxcdGlmICghcHNwX2Fzc29jX2Rldikge1xcbm5ldC9wc3AvcHNwX25sLmMtNTIxLVxcdFxcdGVyciA9IC1FTk9NRU07XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTUyNi1cXHRhc3NvY19kZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KG5ldCwgYXNzb2NfaWZpbmRleCxcXG5uZXQvcHNwL3BzcF9ubC5jOjUyNzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cHNwX2Fzc29jX2Rldi1cXHUwMDNlZGV2X3RyYWNrZXIsXFxubmV0L3BzcC9wc3BfbmwuYy01MjgtXFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTU0My1cXG5uZXQvcHNwL3BzcF9ubC5jOjU0NDpcXHRwc3BfYXNzb2NfZGV2LVxcdTAwM2Vhc3NvY19kZXYgPSBhc3NvY19kZXY7XFxubmV0L3BzcC9wc3BfbmwuYy01NDUtXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTU2My1cXG5uZXQvcHNwL3BzcF9ubC5jOjU2NDpcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwc3BfYXNzb2NfZGV2LVxcdTAwM2VkZXZfbGlzdCwgXFx1MDAyNnBzZC1cXHUwMDNlYXNzb2NfZGV2X2xpc3QpO1xcbm5ldC9wc3AvcHNwX25sLmMtNTY1LVxcdHBzZC1cXHUwMDNlYXNzb2NfZGV2X2NudCsrO1xcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy01NzUtZXJyX3B1dF9kZXY6XFxubmV0L3BzcC9wc3BfbmwuYzo1NzY6XFx0bmV0ZGV2X3B1dChhc3NvY19kZXYsIFxcdTAwMjZwc3BfYXNzb2NfZGV2LVxcdTAwM2VkZXZfdHJhY2tlcik7XFxubmV0L3BzcC9wc3BfbmwuYy01NzctZXJyX2ZyZWVfYXNzb2M6XFxubmV0L3BzcC9wc3BfbmwuYzo1Nzg6XFx0a2ZyZWUocHNwX2Fzc29jX2Rldik7XFxubmV0L3BzcC9wc3BfbmwuYy01NzktZXJyX3B1dF9uZXQ6XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTU4NT1pbnQgcHNwX25sX2Rldl9kaXNhc3NvY19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3BzcC9wc3BfbmwuYy01ODYte1xcbm5ldC9wc3AvcHNwX25sLmM6NTg3OlxcdHN0cnVjdCBwc3BfYXNzb2NfZGV2ICplbnRyeSwgKmZvdW5kID0gTlVMTDtcXG5uZXQvcHNwL3BzcF9ubC5jLTU4OC1cXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTYzOC1cXG5uZXQvcHNwL3BzcF9ubC5jOjYzOTppbnQgcHNwX2Fzc29jX2RldmljZV9nZXRfbG9ja2VkKGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLFxcbm5ldC9wc3AvcHNwX25sLmMtNjQwLVxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jPTc3MD1pbnQgcHNwX25sX3J4X2Fzc29jX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtNzc0LVxcdHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCBrZXk7XFxubmV0L3BzcC9wc3BfbmwuYzo3NzU6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbm5ldC9wc3AvcHNwX25sLmMtNzc2LVxcdHN0cnVjdCBza19idWZmICpyc3A7XFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTc5Mi1cXG5uZXQvcHNwL3BzcF9ubC5jOjc5MzpcXHRwYXMgPSBwc3BfYXNzb2NfY3JlYXRlKHBzZCk7XFxubmV0L3BzcC9wc3BfbmwuYy03OTQtXFx0aWYgKCFwYXMpIHtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmMtODE0LVxcdH1cXG5uZXQvcHNwL3BzcF9ubC5jOjgxNTpcXHRwc3BfYXNzb2NfcHV0KHBhcyk7XFxubmV0L3BzcC9wc3BfbmwuYy04MTYtXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTgxOS1lcnJfZnJlZV9wYXM6XFxubmV0L3BzcC9wc3BfbmwuYzo4MjA6XFx0cHNwX2Fzc29jX3B1dChwYXMpO1xcbm5ldC9wc3AvcHNwX25sLmMtODIxLWVycl9mcmVlX3JzcDpcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0zMD1wc3BfdmFsaWRhdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3BzcC9wc3Bfc29jay5jLTMxLXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MzI6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0zMy1cXHRib29sIGdvb2Q7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtNDYtXFxubmV0L3BzcC9wc3Bfc29jay5jOjQ3OnN0cnVjdCBwc3BfYXNzb2MgKnBzcF9hc3NvY19jcmVhdGUoc3RydWN0IHBzcF9kZXYgKnBzZClcXG5uZXQvcHNwL3BzcF9zb2NrLmMtNDgte1xcbm5ldC9wc3AvcHNwX3NvY2suYzo0OTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXM7XFxubmV0L3BzcC9wc3Bfc29jay5jLTUwLVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTY4LVxcbm5ldC9wc3AvcHNwX3NvY2suYzo2OTpzdGF0aWMgc3RydWN0IHBzcF9hc3NvYyAqcHNwX2Fzc29jX2R1bW15KHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtNzAte1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTc5LVxcbm5ldC9wc3AvcHNwX3NvY2suYzo4MDpzdGF0aWMgaW50IHBzcF9kZXZfdHhfa2V5X2FkZChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3Bfc29jay5jLTgxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy04NS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6ODY6dm9pZCBwc3BfZGV2X3R4X2tleV9kZWwoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbm5ldC9wc3AvcHNwX3NvY2suYy04Ny17XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtOTItXFxubmV0L3BzcC9wc3Bfc29jay5jOjkzOnN0YXRpYyB2b2lkIHBzcF9hc3NvY19mcmVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtOTQte1xcbm5ldC9wc3AvcHNwX3NvY2suYzo5NTpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBzcF9hc3NvYywgd29yayk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTk2LVxcdHN0cnVjdCBwc3BfZGV2ICpwc2QgPSBwYXMtXFx1MDAzZXBzZDtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMDUtXFxubmV0L3BzcC9wc3Bfc29jay5jOjEwNjpzdGF0aWMgdm9pZCBwc3BfYXNzb2NfZnJlZV9xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxubmV0L3BzcC9wc3Bfc29jay5jLTEwNy17XFxubmV0L3BzcC9wc3Bfc29jay5jOjEwODpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHBzcF9hc3NvYywgcmN1KTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTA5LVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMTA6XFx0SU5JVF9XT1JLKFxcdTAwMjZwYXMtXFx1MDAzZXdvcmssIHBzcF9hc3NvY19mcmVlKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTExLVxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnBhcy1cXHUwMDNld29yayk7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTE0LS8qKlxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMTU6ICogcHNwX2Fzc29jX3B1dCgpIC0gcmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBhIFBTUCBhc3NvY2lhdGlvblxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTYtICogQHBhczogYXNzb2NpYXRpb24gdG8gcmVsZWFzZVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTctICovXFxubmV0L3BzcC9wc3Bfc29jay5jOjExODp2b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMTkte1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjAtXFx0aWYgKHBhcyBcXHUwMDI2XFx1MDAyNiByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnBhcy1cXHUwMDNlcmVmY250KSlcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTIxOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZwYXMtXFx1MDAzZXJjdSwgcHNwX2Fzc29jX2ZyZWVfcXVldWUpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjItfVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTEyND12b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI2OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXFx1MDAzZXBzcF9hc3NvYywgMSk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTEyNy1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI4OlxcdHJjdV9hc3NpZ25fcG9pbnRlcihzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI5OlxcdHBzcF9hc3NvY19wdXQocGFzKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMwLX1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMxLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMzI6aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMzLVxcdFxcdFxcdCAgc3RydWN0IHBzcF9rZXlfcGFyc2VkICprZXksXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTQ4LVxcdHJlZmNvdW50X2luYyhcXHUwMDI2cGFzLVxcdTAwM2VyZWZjbnQpO1xcbm5ldC9wc3AvcHNwX3NvY2suYzoxNDk6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTE1MC1cXHRlcnIgPSAwO1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTE1Ny1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTU4OnN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTU5LXtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0xNzc9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTgxLVxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzaztcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTgyOlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcywgKmR1bW15O1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xODMtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yMTktXFx0ICovXFxubmV0L3BzcC9wc3Bfc29jay5jOjIyMDpcXHRkdW1teSA9IHBzcF9hc3NvY19kdW1teShwYXMpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yMjEtXFx0aWYgKCFkdW1teSkge1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTI0OC1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjQ5OnZvaWQgcHNwX2Fzc29jc19rZXlfcm90YXRlZChzdHJ1Y3QgcHNwX2RldiAqcHNkKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yNTAte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoyNTE6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzLCAqbmV4dDtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjUyLVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTI2Nj12b2lkIHBzcF90d3NrX2luaXQoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjY3LXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjY4OlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI2OS1cXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzEtXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZwYXMtXFx1MDAzZXJlZmNudCk7XFxubmV0L3BzcC9wc3Bfc29jay5jOjI3MjpcXHRyY3VfYXNzaWduX3BvaW50ZXIodHctXFx1MDAzZXBzcF9hc3NvYywgcGFzKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjczLVxcdHR3LVxcdTAwM2V0d192YWxpZGF0ZV94bWl0X3NrYiA9IHBzcF92YWxpZGF0ZV94bWl0O1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTI3Nj12b2lkIHBzcF90d3NrX2Fzc29jX2ZyZWUoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcpXFxubmV0L3BzcC9wc3Bfc29jay5jLTI3Ny17XFxubmV0L3BzcC9wc3Bfc29jay5jOjI3ODpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHR3LVxcdTAwM2Vwc3BfYXNzb2MsIDEpO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzktXFxubmV0L3BzcC9wc3Bfc29jay5jOjI4MDpcXHRyY3VfYXNzaWduX3BvaW50ZXIodHctXFx1MDAzZXBzcF9hc3NvYywgTlVMTCk7XFxubmV0L3BzcC9wc3Bfc29jay5jOjI4MTpcXHRwc3BfYXNzb2NfcHV0KHBhcyk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI4Mi19XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9Mjg0PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yODUte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoyODY6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yODctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NjA2PWRlZiBfY2hlY2tfYXNzb2NfbGlzdChjZmcsIHBzcF9kZXZfaWQsIGlmaW5kZXgsIG5zaWQ9Tm9uZSk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjIzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2MjQ6ZGVmIF9kYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjI1LSAgICBcXFwiXFxcIlxcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02NTk9ZGVmIF9nZXRfcHNwX3Zlcl9pcDZfdmFyaWFudHMoKTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjQtQGtzZnRfdmFyaWFudHMoX2dldF9wc3BfdmVyX2lwNl92YXJpYW50cygpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2NjU6ZGVmIGRhdGFfYmFzaWNfc2VuZF9uZXRraXRfcHNwX2Fzc29jKGNmZywgdmVyc2lvbiwgaXB2ZXIpOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjYtICAgIFxcXCJcXFwiXFxcIlRlc3QgUFNQIGRhdGEgc2VuZCB2aWEgbmV0a2l0IHdpdGggZGV2LWFzc29jLlxcXCJcXFwiXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjctICAgIGNmZy5yZXF1aXJlX2lwdmVyKGlwdmVyKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2Njg6ICAgIF9kYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyhjZmcsIHZlcnNpb24sIGlwdmVyKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS02NjktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9Njk4PWRlZiBfZGV2X2NoYW5nZV9ub3RpZnlfbXVsdGlfbnNfbmV0a2l0KGNmZyk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNzI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo3MjY6ZGVmIF9wc3BfZGV2X2dldF9jaGVja19uZXRraXRfcHNwX2Fzc29jKGNmZyk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTcyNy0gICAgXFxcIlxcXCJcXFwiIENoZWNrIHBzcCBkZXYtZ2V0IG91dHB1dCB3aXRoIG5ldGtpdCBpbnRlcmZhY2UgYXNzb2NpYXRlZCB3aXRoIFBTUCBkZXYgXFxcIlxcXCJcXFwiXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9OTQxPWRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS05ODAtICAgICAgICAgICAgICAgICAgICAgICAgX2Fzc29jX2NoZWNrX2xpc3QsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5Ojk4MTogICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2Jhc2ljX3NlbmRfbmV0a2l0X3BzcF9hc3NvYyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTgyLSAgICAgICAgICAgICAgICAgICAgICAgIF9rZXlfcm90YXRpb25fbm90aWZ5X211bHRpX25zX25ldGtpdCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTgzLSAgICAgICAgICAgICAgICAgICAgICAgIF9kZXZfY2hhbmdlX25vdGlmeV9tdWx0aV9uc19uZXRraXQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5Ojk4NDogICAgICAgICAgICAgICAgICAgICAgICBfcHNwX2Rldl9nZXRfY2hlY2tfbmV0a2l0X3BzcF9hc3NvYyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktOTg1LSAgICAgICAgICAgICAgICAgICAgICAgIF9kZXZfYXNzb2Nfbm9fbnNpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MzE6MjEuODcyMjg4Nzk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3MTA1MDI0NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBgc2tfY2xvbmVfbG9ja2AgaW4gYG5ldC9jb3JlL3NvY2suY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgYHNrX2Nsb25lX2xvY2tgIG9wZXJhdGVzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgd2l0aGluIGBuZXQvY29yZS9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI0OTAgdG8gMjUyMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgc29ja2V0IGNsb25pbmcgZnVuY3Rpb25hbGl0eSByZXNpZGVzLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCB0aGUgbG9ja2luZyBzdHJhdGVneSBoZXJlLCB0aGUgY29udGVudGlvbiBwb2ludHMsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFyZSBhZGRyZXNzZWQgb3IgaW50cm9kdWNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgbmV0d29yayBzb2NrZXRzIGFyZSBkdXBsaWNhdGVkIGFuZCBob3cgY29uY3VycmVudCBhY2Nlc3MgaXMgbWFuYWdlZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbG9jayBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0aGF0IG1pZ2h0IGFyaXNlIGluIGhpZ2gtbG9hZCBzY2VuYXJpb3MuIEkgYmV0IHRoZSBjb21tZW50cyBhcm91bmQgdGhhdCBzZWN0aW9uIGFyZSB2ZXJ5IGVubGlnaHRlbmluZywgbGV0J3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIGhhcyB0byBvZmZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzozMjozOC45NzczMTY5NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDYwOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfa2Vybl9zb2NrKVxcbjI0NjE6XFx0XFx0XFx0bG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUoXFx1MDAyNnNrLVxcdTAwM2Vza19jYWxsYmFja19sb2NrLFxcbjI0NjI6XFx0XFx0XFx0XFx0YWZfa2Vybl9jYWxsYmFja19rZXlzICsgc2stXFx1MDAzZXNrX2ZhbWlseSxcXG4yNDYzOlxcdFxcdFxcdFxcdGFmX2ZhbWlseV9rZXJuX2Nsb2NrX2tleV9zdHJpbmdzW3NrLVxcdTAwM2Vza19mYW1pbHldKTtcXG4yNDY0OlxcdFxcdGVsc2VcXG4yNDY1OlxcdFxcdFxcdGxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKFxcdTAwMjZzay1cXHUwMDNlc2tfY2FsbGJhY2tfbG9jayxcXG4yNDY2OlxcdFxcdFxcdFxcdGFmX2NhbGxiYWNrX2tleXMgKyBzay1cXHUwMDNlc2tfZmFtaWx5LFxcbjI0Njc6XFx0XFx0XFx0XFx0YWZfZmFtaWx5X2Nsb2NrX2tleV9zdHJpbmdzW3NrLVxcdTAwM2Vza19mYW1pbHldKTtcXG4yNDY4OlxcdH1cXG4yNDY5OlxcdFxcbjI0NzA6XFx0LyoqXFxuMjQ3MTpcXHQgKiBza19jbG9uZSAtIGNsb25lIGEgc29ja2V0XFxuMjQ3MjpcXHQgKiBAc2s6IHRoZSBzb2NrZXQgdG8gY2xvbmVcXG4yNDczOlxcdCAqIEBwcmlvcml0eTogZm9yIGFsbG9jYXRpb24gKCVHRlBfS0VSTkVMLCAlR0ZQX0FUT01JQywgZXRjKVxcbjI0NzQ6XFx0ICogQGxvY2s6IGlmIHRydWUsIGxvY2sgdGhlIGNsb25lZCBza1xcbjI0NzU6XFx0ICpcXG4yNDc2OlxcdCAqIElmIEBsb2NrIGlzIHRydWUsIHRoZSBjbG9uZSBpcyBsb2NrZWQgYnkgYmhfbG9ja19zb2NrKCksIGFuZFxcbjI0Nzc6XFx0ICogY2FsbGVyIG11c3QgdW5sb2NrIHNvY2tldCBldmVuIGluIGVycm9yIHBhdGggYnkgYmhfdW5sb2NrX3NvY2soKS5cXG4yNDc4OlxcdCAqL1xcbjI0Nzk6XFx0c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuMjQ4MDpcXHRcXHRcXHQgICAgICBib29sIGxvY2spXFxuMjQ4MTpcXHR7XFxuMjQ4MjpcXHRcXHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbjI0ODM6XFx0XFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xcbjI0ODQ6XFx0XFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcXG4yNDg1OlxcdFxcdHN0cnVjdCBzb2NrICpuZXdzaztcXG4yNDg2OlxcdFxcbjI0ODc6XFx0XFx0bmV3c2sgPSBza19wcm90X2FsbG9jKHByb3QsIHByaW9yaXR5LCBzay1cXHUwMDNlc2tfZmFtaWx5KTtcXG4yNDg4OlxcdFxcdGlmICghbmV3c2spXFxuMjQ4OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNDkwOlxcdFxcbjI0OTE6XFx0XFx0c29ja19jb3B5KG5ld3NrLCBzayk7XFxuMjQ5MjpcXHRcXG4yNDkzOlxcdFxcdG5ld3NrLVxcdTAwM2Vza19wcm90X2NyZWF0b3IgPSBwcm90O1xcbjI0OTQ6XFx0I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbjI0OTU6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlc2tfYnBmX3N0b3JhZ2UsIE5VTEwpO1xcbjI0OTY6XFx0I2VuZGlmXFxuMjQ5NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuMjQ5ODpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xcbjI0OTk6XFx0I2VuZGlmXFxuMjUwMDpcXHRcXG4yNTAxOlxcdFxcdC8qIFNBTklUWSAqL1xcbjI1MDI6XFx0XFx0aWYgKGxpa2VseShuZXdzay1cXHUwMDNlc2tfbmV0X3JlZmNudCkpIHtcXG4yNTAzOlxcdFxcdFxcdGdldF9uZXRfdHJhY2soc29ja19uZXQobmV3c2spLCBcXHUwMDI2bmV3c2stXFx1MDAzZW5zX3RyYWNrZXIsIHByaW9yaXR5KTtcXG4yNTA0OlxcdFxcdFxcdHNvY2tfaW51c2VfYWRkKHNvY2tfbmV0KG5ld3NrKSwgMSk7XFxuMjUwNTpcXHRcXHR9IGVsc2Uge1xcbjI1MDY6XFx0XFx0XFx0LyogS2VybmVsIHNvY2tldHMgYXJlIG5vdCBlbGV2YXRpbmcgdGhlIHN0cnVjdCBuZXQgcmVmY291bnQuXFxuMjUwNzpcXHRcXHRcXHQgKiBJbnN0ZWFkLCB1c2UgYSB0cmFja2VyIHRvIG1vcmUgZWFzaWx5IGRldGVjdCBpZiBhIGxheWVyXFxuMjUwODpcXHRcXHRcXHQgKiBpcyBub3QgcHJvcGVybHkgZGlzbWFudGxpbmcgaXRzIGtlcm5lbCBzb2NrZXRzIGF0IG5ldG5zXFxuMjUwOTpcXHRcXHRcXHQgKiBkZXN0cm95IHRpbWUuXFxuMjUxMDpcXHRcXHRcXHQgKi9cXG4yNTExOlxcdFxcdFxcdG5ldF9wYXNzaXZlX2luYyhzb2NrX25ldChuZXdzaykpO1xcbjI1MTI6XFx0XFx0XFx0X19uZXRuc190cmFja2VyX2FsbG9jKHNvY2tfbmV0KG5ld3NrKSwgXFx1MDAyNm5ld3NrLVxcdTAwM2Vuc190cmFja2VyLFxcbjI1MTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgZmFsc2UsIHByaW9yaXR5KTtcXG4yNTE0OlxcdFxcdH1cXG4yNTE1OlxcdFxcbjI1MTY6XFx0XFx0c2tfbm9kZV9pbml0KFxcdTAwMjZuZXdzay1cXHUwMDNlc2tfbm9kZSk7XFxuMjUxNzpcXHRcXHRzb2NrX2xvY2tfaW5pdChuZXdzayk7XFxuMjUxODpcXHRcXG4yNTE5OlxcdFxcdGlmIChsb2NrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzozMjozOC45Nzc0ODY5NjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzMjY4MzMxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc2tfY2xvbmVgIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBza19jbG9uZWAgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBzdGVtIGZyb20gaG93IHNvY2tldCBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgZHVyaW5nIGNsb25pbmcuIFNwZWNpZmljYWxseSwgYHNvY2tfY29weShuZXdzaywgc2spYCBpcyBqdXN0IGEgYG1lbWNweWAuIFRoaXMgbWVhbnMgd2hlbiB3ZSBjbG9uZSBhIHNvY2tldCwgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2Agc2ltcGx5IGdldHMgYSBkaXJlY3QgY29weSBvZiBgc2stXHUwMDNlcHNwX2Fzc29jYCwgd2l0aG91dCBhbnkgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIHJlZCBmbGFnLiBUaGluayBhYm91dCBpdDogd2hlbiBjbG9uaW5nIGEgbGlzdGVuaW5nIHNvY2tldCB0byBhIGNoaWxkIHNvY2tldCwgYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2AgaXMgcG9pbnRpbmcgdG8gdGhlIHNhbWUgbWVtb3J5IGFzIHRoZSBwYXJlbnQncyEgVGhpcyBzaGFyZWQgb3duZXJzaGlwLCB3aXRob3V0IHByb3BlciB0cmFja2luZywgaXMgc2NyZWFtaW5nIHBvdGVudGlhbCBmb3IgY2hhb3MuXG5cblRoZSBwcm9ibGVtPyBFaXRoZXIgc29ja2V0LCB0aGUgcGFyZW50IG9yIHRoZSBjaGlsZCwgY291bGQgZnJlZSB0aGUgYHBzcF9hc3NvY2Agb3IgZGVzdHJveSBpdC4gSWYgZWl0aGVyIG9uZSBkb2VzIGEgYHBzcF9za19hc3NvY19mcmVlKHNrKWAgb3IgZGVyZWZlcmVuY2VzIGl0LCBpdCBjb3VsZCBsZWFkIHRvIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSwgYSBkb3VibGUtZnJlZSwgb3IgZXZlbiBhbiB1bmRlcmZsb3cgb2YgdGhlIHJlZmVyZW5jZSBjb3VudC4gTmlnaHRtYXJlIHNjZW5hcmlvIVxuXG5UaGUgZml4LCBob3dldmVyLCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBTZXR0aW5nIGBSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVx1MDAzZXBzcF9hc3NvYywgTlVMTCk7YCBleHBsaWNpdGx5IGNsZWFycyB0aGUgcG9pbnRlciBpbiBgbmV3c2tgLiBUaGlzIGlzIHRoZSB2aXRhbCBzdGVwOiBpdCBicmVha3MgdGhlIGxpbmssIGVuc3VyaW5nIHRoZSBjaGlsZCBzb2NrZXQgZG9lc24ndCBpbmhlcml0IHRoZSBwYXJlbnQncyBgcHNwX2Fzc29jYCB3aXRob3V0IHRoZSByZWZlcmVuY2UgY291bnRpbmcgb3IgYW55IHNoYXJlZCBtZW1vcnkuIE5vdywgdGhhdCBpcyBhIGNsZWFuIHNlcGFyYXRpb24uXG5cbk5vdywgbGV0J3MgcGl2b3QgdG8gbWVtb3J5IHNhZmV0eTogSSBuZWVkIHRvIHJ1bGUgb3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5JbiBgc2tfY2xvbmVgIHdlIGhhdmUgYHNvY2tfY29weShuZXdzaywgc2spYCBmb2xsb3dlZCBieSBgUkNVX0lOSVRfUE9JTlRFUihuZXdzay1cdTAwM2Vwc3BfYXNzb2MsIE5VTEwpYC4gSSBkb24ndCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSW5pdGlhbGx5LCBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCBpcyBjb3BpZWQgZnJvbSB0aGUgc291cmNlLCB3aGljaCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIFRoZW4sIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIGBOVUxMYC4gVGhpcyBpcyBhIHNhZmUgc2VxdWVuY2UuIFRoZSByb290IGNhdXNlIGlzIGRlZmluaXRlbHkgdGhlIHVzZS1hZnRlci1mcmVlL2RvdWJsZS1mcmVlIGJ1Zywgd2hlcmUgdGhlIHNvY2tldCBjbG9uaW5nIGNvcGllZCBhIHBvaW50ZXIgd2l0aG91dCBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IG9yIGNsZWFyaW5nIGl0LiBUaGlzIGlzIHdoeSBLQVNBTiBjYXRjaGVzIHRoZXNlIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSBidWdzLlxuXG5CdXQsIEkgYW0gbm90IHJlYWR5IHRvIGJlIGNvbXBsZXRlbHkgc2F0aXNmaWVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgbGVha3MuIEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8gbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcgaW52b2x2ZWQ/IExldCdzIGdpdmUgYHBzcF9hc3NvY2AgYSB0aG9yb3VnaCBpbnNwZWN0aW9uIHdpdGggYSBLTVNBTi1saWtlIGFwcHJvYWNoLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIHRvIGJlIHN1cmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTExLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTc6MzM6NDAuMzA0MzIzNDY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5NjE4MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzcF9za19hc3NvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MzM9dW5zaWduZWQgaW50IHBzcF9rZXlfc2l6ZSh1MzIgdmVyc2lvbik7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM0OnZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzUtdm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTM3PXZvaWQgcHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzgtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDAte1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTQ1PXBzcF9lbnF1ZXVlX3NldF9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQ4LVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0OTpcXHRwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC01MC1cXHRpZiAocGFzIFxcdTAwMjZcXHUwMDI2IHBhcy1cXHUwMDNldHguc3BpKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTExNj1wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE3LXtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTE4OlxcdHJldHVybiBfX3BzcF9za19yeF9wb2xpY3lfY2hlY2soc2tiLCBwc3Bfc2tfYXNzb2Moc2spKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE5LX1cXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNTA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHNwX3NrX292ZXJoZWFkKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTctI2Vsc2VcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTU4OnN0YXRpYyBpbmxpbmUgdm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spIHsgfVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTktc3RhdGljIGlubGluZSB2b2lkXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTYzPXBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikgeyB9XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2NC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MTY1OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY2LXtcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYz0xNDA9dm9pZCBpbmV0X3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jLTE2Ni1cXHRkc3RfcmVsZWFzZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrLVxcdTAwM2Vza19yeF9kc3QsIDEpKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTY3OlxcdHBzcF9za19hc3NvY19mcmVlKHNrKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY4LX1cXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0xMTg9dm9pZCBwc3BfYXNzb2NfcHV0KHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjMtXFxubmV0L3BzcC9wc3Bfc29jay5jOjEyNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTI1LXtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0xMzI9aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDEtXFxubmV0L3BzcC9wc3Bfc29jay5jOjE0MjpcXHRpZiAocHNwX3NrX2Fzc29jKHNrKSkge1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDMtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiU29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVxcXCIpO1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTE3Nz1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xODYtXFxubmV0L3BzcC9wc3Bfc29jay5jOjE4NzpcXHRwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0xODgtXFx0aWYgKCFwYXMpIHtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0yNjY9dm9pZCBwc3BfdHdza19pbml0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3BzcC9wc3Bfc29jay5jLTI2Ny17XFxubmV0L3BzcC9wc3Bfc29jay5jOjI2ODpcXHRzdHJ1Y3QgcHNwX2Fzc29jICpwYXMgPSBwc3Bfc2tfYXNzb2Moc2spO1xcbm5ldC9wc3AvcHNwX3NvY2suYy0yNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE3OjMzOjQyLjA4Mzk0NjIzOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzA3ODgwODE4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU29ja2V0IENsb25pbmcgQnVnIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRyZXNzZXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHNvY2tldCBjbG9uaW5nIG1lY2hhbmlzbS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGllcyBpbiBob3cgYHBzcF9hc3NvY2AgKGEgc2VjdXJpdHkgYXNzb2NpYXRpb24gcmVsYXRlZCBzdHJ1Y3R1cmUpIGlzIGhhbmRsZWQgd2hlbiBhIHNvY2tldCAoYHNrYCkgaXMgY2xvbmVkIHRvIGNyZWF0ZSBhIG5ldyBzb2NrZXQgKGBuZXdza2ApLlxuXG5Fc3NlbnRpYWxseSwgYHNvY2tfY29weWAgd2FzIGNvcHlpbmcgdGhlIGBzay1cdTAwM2Vwc3BfYXNzb2NgIHBvaW50ZXIgdG8gYG5ld3NrLVx1MDAzZXBzcF9hc3NvY2Agd2l0aG91dCBjb3JyZWN0bHkgbWFuYWdpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgdW5kZXJseWluZyBgcHNwX2Fzc29jYCBzdHJ1Y3R1cmUuIFRoaXMgbWVhbnQgYm90aCBgc2tgIGFuZCBgbmV3c2tgIHdlcmUgcG9pbnRpbmcgdG8gdGhlIHNhbWUgYHBzcF9hc3NvY2Agd2l0aG91dCBwcm9wZXJseSBpbmRpY2F0aW5nIHNoYXJlZCBvd25lcnNoaXAgdGhyb3VnaCBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudGVyLiBMYXRlciwgd2hlbiBlaXRoZXIgdGhlIG9yaWdpbmFsIG9yIHRoZSBjbG9uZWQgc29ja2V0IHdhcyBkZXN0cm95ZWQgdmlhIGBpbmV0X3NvY2tfZGVzdHJ1Y3RgIGFuZCBgcHNwX3NrX2Fzc29jX2ZyZWVgLCB0aGUgYXNzb2NpYXRlZCBgcHNwX2Fzc29jYCBzdHJ1Y3Qgd291bGQgaGF2ZSBgcHNwX2Fzc29jX3B1dGAgY2FsbGVkLCB3aGljaCBkZWNyZW1lbnRlZCB0aGUgcmVmZXJlbmNlIGNvdW50LiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZiBib3RoIHNvY2tldHMgd2VyZSBldmVudHVhbGx5IGRlc3Ryb3llZCwgbGVhZGluZyB0byBwb3RlbnRpYWxseSBjb3JydXB0ZWQgc3RhdGUuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGluaXRpYWxpemluZyBgbmV3c2stXHUwMDNlcHNwX2Fzc29jYCB0byBgTlVMTGAgdXNpbmcgYFJDVV9JTklUX1BPSU5URVJgICpkdXJpbmcqIHRoZSBjbG9uZSBvcGVyYXRpb24uIFRoaXMgcHJldmVudHMgYG5ld3NrYCBmcm9tIGluaGVyaXRpbmcgdGhlIHBhcmVudCdzIGFzc29jaWF0aW9uIGF0IGFsbC5cblxuTm93LCBsZXQncyBjb25zaWRlciB3aGV0aGVyIHRoaXMgY2hhbmdlLCBhbmQgdGhlIGJ1ZyBpdCBmaXhlcywgd2FycmFudHMgYSBgTmVlZHNLTVNBTiA9IHRydWVgIGZsYWcuIEkgaGF2ZSB0byBhbmFseXplIGlmIHRoaXMgaW50cm9kdWNlcyBvciBlbGltaW5hdGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3cml0ZXMgb3IgbWVtb3J5LXJlbGF0ZWQgZmxhd3MuXG5cbkkndmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoZSBjb2RlIGFuZCBJIGNhbiBkZWZpbml0aXZlbHkgc2F5IHRoYXQgdGhpcyBpc3N1ZSBpcyAqbm90KiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBJdCdzIHN0cmljdGx5IGFib3V0IG9iamVjdCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgaW1wcm9wZXIgYWxpYXNpbmcgYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZS91c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBJJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgc3RhbmRhcmQgS01TQU4gY2hlY2tzOlxuXG4xLiAgSXMgdGhlcmUga2VybmVsIGRhdGEgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8uXG4yLiAgSXMgdGhlcmUgY29uZGl0aW9uYWwgbG9naWMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uXG4zLiAgQXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRoYXQgYXJlIHRoZW4gcmVhZCBsYXRlcj8gTm8uXG40LiAgSXMgdGhlIHVzZSBvZiBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBldGMuLCBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm8uXG5cblRoaXMgYnVnIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiByZWZlcmVuY2UgY291bnRpbmcgYW5kIHBvaW50ZXIgbWFuYWdlbWVudC4gS0FTQU4gaXMgYWxyZWFkeSB0aGUgcGVyZmVjdCB0b29sIGZvciB0cmFja2luZyB0aGVzZSBzb3J0cyBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoZGFuZ2xpbmcgcG9pbnRlcnMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSkgYnkgZW5zdXJpbmcgbWVtb3J5IGlzIHZhbGlkLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLCBhbmQgSSdsbCBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MgYSBjbGVhciBjYXNlIG9mIEtBU0FOJ3Mgc3RyZW5ndGhzLCBub3QgS01TQU4ncy4gVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTIxLCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNzozOTo1Mi44NzIwMzE1NDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza19jbG9uZSgpYCBpbiBgbmV0L2NvcmUvc29jay5jYCB0byBleHBsaWNpdGx5IGluaXRpYWxpemUgYG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2NgIHRvIGBOVUxMYCB2aWEgYFJDVV9JTklUX1BPSU5URVIobmV3c2stXFx1MDAzZXBzcF9hc3NvYywgTlVMTClgLiBcXG5cXG5XaGVuIGEgc29ja2V0IGlzIGNsb25lZCwgYHNvY2tfY29weSgpYCBwZXJmb3JtcyBhIHNoYWxsb3cgY29weSBvZiB0aGUgc29ja2V0IHN0cnVjdHVyZSBmcm9tIHBhcmVudCB0byBjaGlsZC4gV2l0aG91dCBjbGVhcmluZyBgbmV3c2stXFx1MDAzZXBzcF9hc3NvY2AsIHRoZSBjbG9uZWQgc29ja2V0IGluaGVyaXRlZCB0aGUgcGFyZW50J3MgcG9pbnRlciB0byBgc3RydWN0IHBzcF9hc3NvY2Agd2l0aG91dCB0YWtpbmcgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnQuIFVwb24gZGVzdHJ1Y3Rpb24gb2YgdGhlIGNsb25lZCBzb2NrZXQgKGBwc3Bfc2tfYXNzb2NfZnJlZWApLCBgcHNwX2Fzc29jX3B1dCgpYCB3b3VsZCBiZSBjYWxsZWQsIGxlYWRpbmcgdG8gcmVmZXJlbmNlIHVuZGVyZmxvdywgdXNlLWFmdGVyLWZyZWUsIG9yIGRvdWJsZS1mcmVlIGVycm9ycy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWRkcmVzc2luZyBvYmplY3QgbGlmZWN5Y2xlLCBwb2ludGVyIGFsaWFzaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyAod2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOKS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX2Nsb25lKClgIGluIGBuZXQvY29yZS9zb2NrLmNgIHRvIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBgbmV3c2stXFx1MDAzZXBzcF9hc3NvY2AgdG8gYE5VTExgIHZpYSBgUkNVX0lOSVRfUE9JTlRFUihuZXdzay1cXHUwMDNlcHNwX2Fzc29jLCBOVUxMKWAuIFxcblxcbldoZW4gYSBzb2NrZXQgaXMgY2xvbmVkLCBgc29ja19jb3B5KClgIHBlcmZvcm1zIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzb2NrZXQgc3RydWN0dXJlIGZyb20gcGFyZW50IHRvIGNoaWxkLiBXaXRob3V0IGNsZWFyaW5nIGBuZXdzay1cXHUwMDNlcHNwX2Fzc29jYCwgdGhlIGNsb25lZCBzb2NrZXQgaW5oZXJpdGVkIHRoZSBwYXJlbnQncyBwb2ludGVyIHRvIGBzdHJ1Y3QgcHNwX2Fzc29jYCB3aXRob3V0IHRha2luZyBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudC4gVXBvbiBkZXN0cnVjdGlvbiBvZiB0aGUgY2xvbmVkIHNvY2tldCAoYHBzcF9za19hc3NvY19mcmVlYCksIGBwc3BfYXNzb2NfcHV0KClgIHdvdWxkIGJlIGNhbGxlZCwgbGVhZGluZyB0byByZWZlcmVuY2UgdW5kZXJmbG93LCB1c2UtYWZ0ZXItZnJlZSwgb3IgZG91YmxlLWZyZWUgZXJyb3JzLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhZGRyZXNzaW5nIG9iamVjdCBsaWZlY3ljbGUsIHBvaW50ZXIgYWxpYXNpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzICh3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4pLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[1] Phase: Succeeded StartedAt: 2026-08-29 17:40:04 +0000 UTC FinishedAt: 2026-08-29 17:40:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 17:40:04 +0000 UTC FinishedAt: 2026-08-29 17:40:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2] Phase: Succeeded StartedAt: 2026-08-29 17:40:04 +0000 UTC FinishedAt: 2026-08-29 21:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 17:40:04 +0000 UTC FinishedAt: 2026-08-29 21:19:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 17:40:04 +0000 UTC FinishedAt: 2026-08-29 17:40:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 17:40:04 +0000 UTC FinishedAt: 2026-08-29 17:40:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6h2wl/series-workflow6h2wl-convert-artifact-373117181/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 17:40:14 +0000 UTC FinishedAt: 2026-08-29 17:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 17:40:14 +0000 UTC FinishedAt: 2026-08-29 17:55:56 +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:*0cf62004-6fe1-4f22-8e6b-f4e073fc7f8a,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-workflow6h2wl/series-workflow6h2wl-convert-artifact-373117181/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": "da969b25-50a3-48db-ad91-c57f798a7344", "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-workflow6h2wl/series-workflow6h2wl-build-action-1094859315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 17:40:14 +0000 UTC FinishedAt: 2026-08-29 17:55:46 +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:*0cf62004-6fe1-4f22-8e6b-f4e073fc7f8a,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-workflow6h2wl/series-workflow6h2wl-convert-artifact-373117181/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": "da969b25-50a3-48db-ad91-c57f798a7344", "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-workflow6h2wl/series-workflow6h2wl-build-action-1094859315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 17:55:56 +0000 UTC FinishedAt: 2026-08-29 17:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 17:55:56 +0000 UTC FinishedAt: 2026-08-29 17:55:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 17:55:56 +0000 UTC FinishedAt: 2026-08-29 17:56:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 17:55:56 +0000 UTC FinishedAt: 2026-08-29 17:56:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6h2wl/series-workflow6h2wl-convert-artifact-2216636760/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 17:56:06 +0000 UTC FinishedAt: 2026-08-29 17:58:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 17:56:06 +0000 UTC FinishedAt: 2026-08-29 17:57:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*da969b25-50a3-48db-ad91-c57f798a7344,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-workflow6h2wl/series-workflow6h2wl-build-action-1094859315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 17:58:05 +0000 UTC FinishedAt: 2026-08-29 17:58:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 17:58:05 +0000 UTC FinishedAt: 2026-08-29 17:58:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 17:58:05 +0000 UTC FinishedAt: 2026-08-29 18:14:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 17:58:05 +0000 UTC FinishedAt: 2026-08-29 18:14:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0cf62004-6fe1-4f22-8e6b-f4e073fc7f8a,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-workflow6h2wl/series-workflow6h2wl-convert-artifact-2216636760/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": "37c28ae4-3944-4c4d-bd03-bbd76bef658c", "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-workflow6h2wl/series-workflow6h2wl-build-action-3972717252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 17:58:05 +0000 UTC FinishedAt: 2026-08-29 18:14:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0cf62004-6fe1-4f22-8e6b-f4e073fc7f8a,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-workflow6h2wl/series-workflow6h2wl-convert-artifact-2216636760/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": "37c28ae4-3944-4c4d-bd03-bbd76bef658c", "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-workflow6h2wl/series-workflow6h2wl-build-action-3972717252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 18:14:16 +0000 UTC FinishedAt: 2026-08-29 18:14:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 18:14:16 +0000 UTC FinishedAt: 2026-08-29 18:14:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 18:14:16 +0000 UTC FinishedAt: 2026-08-29 18:16:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 18:14:16 +0000 UTC FinishedAt: 2026-08-29 18:15:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37c28ae4-3944-4c4d-bd03-bbd76bef658c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6h2wl/series-workflow6h2wl-build-action-3972717252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 18:16:06 +0000 UTC FinishedAt: 2026-08-29 21:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 18:16:06 +0000 UTC FinishedAt: 2026-08-29 21:19:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*da969b25-50a3-48db-ad91-c57f798a7344,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37c28ae4-3944-4c4d-bd03-bbd76bef658c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6h2wl/series-workflow6h2wl-build-action-1094859315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6h2wl/series-workflow6h2wl-build-action-3972717252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 18:16:06 +0000 UTC FinishedAt: 2026-08-29 18:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 18:16:06 +0000 UTC FinishedAt: 2026-08-29 18:16:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6h2wl/series-workflow6h2wl-convert-artifact-4176594225/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 18:16:06 +0000 UTC FinishedAt: 2026-08-29 18:16:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 18:16:06 +0000 UTC FinishedAt: 2026-08-29 18:16:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 18:16:06 +0000 UTC FinishedAt: 2026-08-29 18:16:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 18:16:16 +0000 UTC FinishedAt: 2026-08-29 21:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6h2wl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_clone","psp_sock_assoc_set_rx","psp_sock_assoc_set_tx","psp_sk_assoc_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","INET"],"series_id":"274b1530-52de-430c-b5e9-dcf2bf0bf1af","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 18:16:16 +0000 UTC FinishedAt: 2026-08-29 21:19:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*da969b25-50a3-48db-ad91-c57f798a7344,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37c28ae4-3944-4c4d-bd03-bbd76bef658c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6h2wl/series-workflow6h2wl-build-action-1094859315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6h2wl/series-workflow6h2wl-build-action-3972717252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6h2wl/series-workflow6h2wl-convert-artifact-4176594225/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}