Name: series-workflowdmtcb Phase: Succeeded StartedAt: 2026-09-11 07:31:33 +0000 UTC FinishedAt: 2026-09-11 11:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[0] Phase: Succeeded StartedAt: 2026-09-11 07:31:33 +0000 UTC FinishedAt: 2026-09-11 07:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 07:31:33 +0000 UTC FinishedAt: 2026-09-11 07:53:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "99d76b4da88f21edd14b169f65de33e8df1b7804", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTIPLE_TABLES", "IP_ADVANCED_ROUTER", "IPV6_MULTIPLE_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "99d76b4da88f21edd14b169f65de33e8df1b7804", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTIPLE_TABLES", "IP_ADVANCED_ROUTER", "IPV6_MULTIPLE_TABLES" ], "series_id": "f4bcc6fc-341b-4c01-8561-3e363668f07f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "notify_rule_change", "fib_newrule", "fib_delrule", "fib_nl_fill_rule" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBWNl9NVUxUSVBMRV9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtub3RpZnlfcnVsZV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZmliX25ld3J1bGUmIzM0OywKICAgICYjMzQ7ZmliX2RlbHJ1bGUmIzM0OywKICAgICYjMzQ7ZmliX25sX2ZpbGxfcnVsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgbWVzc2FnZSBwYXlsb2FkIHNpemUgY2FsY3VsYXRpb24gaW4gZmliX3J1bGVfbmxtc2dfc2l6ZSgpIHdpdGhpbiBuZXQvY29yZS9maWJfcnVsZXMuYyB0byBhY2NvdW50IGZvciBGUkFfR09UTyBhbmQgRlJBX0wzTURFViBhdHRyaWJ1dGVzLCBwcmV2ZW50aW5nIHVuZGVyc2l6ZWQgbmV0bGluayBub3RpZmljYXRpb24gYWxsb2NhdGlvbnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIHVwb24gRklCIHJ1bGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uIHZpYSBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MGI4NGM2ZmM0ZTc1Yjk3MTViMjAzN2VhZmI1ZWVlYzFkOTMyNTM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6NTE6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmliX3J1bGVzLmMgYi9uZXQvY29yZS9maWJfcnVsZXMuY1xuaW5kZXggN2RmMjE2YzE3YzY3YS4uNWU4NGJjNzQwMTkxNyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWJfcnVsZXMuY1xuQEAgLTExMzMsNyAmIzQzOzExMzMsOSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG4gXHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19JRkdST1VQICovXG4gXHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BUksgKi9cbiBcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFTSyAqL1xuJiM0MztcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9cbiBcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xuJiM0MztcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqL1xuIFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSlcbiBcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX1BST1RPQ09MICovXG4gXHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9JUF9QUk9UTyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBWNl9NVUxUSVBMRV9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtub3RpZnlfcnVsZV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZmliX25ld3J1bGUmIzM0OywKICAgICYjMzQ7ZmliX2RlbHJ1bGUmIzM0OywKICAgICYjMzQ7ZmliX25sX2ZpbGxfcnVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBtZXNzYWdlIHBheWxvYWQgc2l6ZSBjYWxjdWxhdGlvbiBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgd2l0aGluIG5ldC9jb3JlL2ZpYl9ydWxlcy5jIHRvIGFjY291bnQgZm9yIEZSQV9HT1RPIGFuZCBGUkFfTDNNREVWIGF0dHJpYnV0ZXMsIHByZXZlbnRpbmcgdW5kZXJzaXplZCBuZXRsaW5rIG5vdGlmaWNhdGlvbiBhbGxvY2F0aW9ucy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgdXBvbiBGSUIgcnVsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb24gdmlhIHJ0bmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwYjg0YzZmYzRlNzViOTcxNWIyMDM3ZWFmYjVlZWVjMWQ5MzI1MzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwNzo1MTo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jIGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKaW5kZXggN2RmMjE2YzE3YzY3YS4uNWU4NGJjNzQwMTkxNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmliX3J1bGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKQEAgLTExMzMsNyAmIzQzOzExMzMsOSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsCiAJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX0lGR1JPVVAgKi8KIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovCiAJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFTSyAqLwomIzQzOwkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfR09UTyAqLwogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KDgpIC8qIEZSQV9UVU5fSUQgKi8KJiM0MzsJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqLwogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX2t1aWRfcmFuZ2UpKQogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9QUk9UT0NPTCAqLwogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9JUF9QUk9UTyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRklCIFJ1bGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBhIGBkaWZmYCBoZXJlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBub3RpY2luZyBhZGRpdGlvbnMgdG8gdGhlIGBmaWJfcnVsZV9ubG1zZ19zaXplYCBmdW5jdGlvbiwgd2hpY2ggY2FsY3VsYXRlcyB0aGUgc2l6ZSBuZWVkZWQgZm9yIE5ldGxpbmsgbWVzc2FnZXMgcmVsYXRlZCB0byBGSUIgcnVsZXMuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kIG1lc3NhZ2luZyBwZXJzcGVjdGl2ZS4KClRoZSBkaWZmIGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgYXR0cmlidXRlczogYEZSQV9HT1RPYCwgYEZSQV9MM01ERVZgLCBwb3RlbnRpYWxseSBoaW50aW5nIGF0IG5ldyBydWxlIGZ1bmN0aW9uYWxpdGllcyByZWxhdGVkIHRvIGRpcmVjdCB0cmFmZmljIGhhbmRsaW5nIG9yIGludGVyZmFjZSBjb250cm9sIGF0IGxheWVyIDMuIFRoZSBgRlJBX0dPVE9gIGlzIHBhcnRpY3VsYXJseSBpbnRyaWd1aW5nLCBzdWdnZXN0cyBkaXJlY3QganVtcHMgd2l0aGluIHJ1bGUgc2V0cywgd2hpY2ggY291bGQgb3B0aW1pemUgcnVsZSBldmFsdWF0aW9uIGluIHNwZWNpZmljIHNjZW5hcmlvcywgaWYgaGFuZGxlZCBjb3JyZWN0bHkuIGBGUkFfTDNNREVWYCBsaWtlbHkgc2lnbmlmaWVzIGFuIGFzc29jaWF0aW9uIHdpdGggYSBzcGVjaWZpYyBsYXllciAzIGRldmljZSwgd2hpY2ggc291bmRzIGludGVyZXN0aW5nLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXNzdW1wdGlvbnMsIHNvIEkgd2lsbCBoYXZlIHRvIGNoZWNrIHRoZSBjb250ZXh0IHdpdGhpbiBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLiBJJiMzOTtsbCBmaXJlIHVwIGEgcXVpY2sgcmVhZC1maWxlIG9yIGdyZXBwZXIgc2VhcmNoIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRlZCBhdHRyaWJ1dGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBuZXcgYXR0cmlidXRlcyBhcmUgdXNlZCwgYW5kIGhvdyB0aGV5IHBvdGVudGlhbGx5IGltcGFjdCB0aGUgRklCIHJ1bGUgcHJvY2Vzc2luZyBsb2dpYy4gRGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgdGhlIHNpemUgY2hhbmdlcyBjb3VsZCBzdWdnZXN0IGFuIGV4cGFuc2lvbiBpbiBydWxlIGNvbXBsZXhpdHkgb3IgYSBtb3ZlIHRvd2FyZHMgbW9yZSBncmFudWxhciBjb250cm9sLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwgb3IgcHJvYmxlbWF0aWMgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIGV4aXN0aW5nIHJ1bGUgbWF0Y2hpbmcsIHJvdXRlIHNlbGVjdGlvbiwgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaW4gbXkgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0e1xuMTEyMTpcdFx0cmV0dXJuIGZpYl9kZWxydWxlKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIHNrYiwgbmxoLCBleHRhY2ssIGZhbHNlKTtcbjExMjI6XHR9XG4xMTIzOlx0XG4xMTI0Olx0c3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxuMTEyNTpcdFx0XHRcdFx0XHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxuMTEyNjpcdHtcbjExMjc6XHRcdHNpemVfdCBwYXlsb2FkID0gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBmaWJfcnVsZV9oZHIpKVxuMTEyODpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShJRk5BTVNJWikgLyogRlJBX0lJRk5BTUUgKi9cbjExMjk6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoSUZOQU1TSVopIC8qIEZSQV9PSUZOQU1FICovXG4xMTMwOlx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9QUklPUklUWSAqL1xuMTEzMTpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfVEFCTEUgKi9cbjExMzI6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX1BSRUZJWExFTiAqL1xuMTEzMzpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfU1VQUFJFU1NfSUZHUk9VUCAqL1xuMTEzNDpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovXG4xMTM1Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi9cbjExMzY6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9cbjExMzc6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xuMTEzODpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovXG4xMTM5Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX2t1aWRfcmFuZ2UpKVxuMTE0MDpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi9cbjExNDE6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0lQX1BST1RPICovXG4xMTQyOlx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX3J1bGVfcG9ydF9yYW5nZSkpIC8qIEZSQV9TUE9SVF9SQU5HRSAqL1xuMTE0MzpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpKSAvKiBGUkFfRFBPUlRfUkFOR0UgKi9cbjExNDQ6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMikgLyogRlJBX1NQT1JUX01BU0sgKi9cbjExNDU6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMik7IC8qIEZSQV9EUE9SVF9NQVNLICovXG4xMTQ2Olx0XG4xMTQ3Olx0XHRpZiAob3BzLVx1MDAzZW5sbXNnX3BheWxvYWQpXG4xMTQ4Olx0XHRcdHBheWxvYWQgJiM0Mzs9IG9wcy1cdTAwM2VubG1zZ19wYXlsb2FkKHJ1bGUpO1xuMTE0OTpcdFxuMTE1MDpcdFx0cmV0dXJuIHBheWxvYWQ7XG4xMTUxOlx0fVxuMTE1MjpcdFxuMTE1MzpcdHN0YXRpYyBpbnQgZmliX25sX2ZpbGxfcnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXG4xMTU0Olx0XHRcdFx0ICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MsXG4xMTU1Olx0XHRcdFx0ICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG4xMTU2Olx0e1xuMTE1NzpcdFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4xMTU4Olx0XHRzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmg7XG4xMTU5Olx0XG4xMTYwOlx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgdHlwZSwgc2l6ZW9mKCpmcmgpLCBmbGFncyk7XG4xMTYxOlx0XHRpZiAobmxoID09IE5VTEwpXG4xMTYyOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4xMTYzOlx0XG4xMTY0Olx0XHRmcmggPSBubG1zZ19kYXRhKG5saCk7XG4xMTY1Olx0XHRmcmgtXHUwMDNlZmFtaWx5ID0gb3BzLVx1MDAzZWZhbWlseTtcbjExNjY6XHRcdGZyaC1cdTAwM2V0YWJsZSA9IHJ1bGUtXHUwMDNldGFibGUgXHUwMDNjIDI1NiA/IHJ1bGUtXHUwMDNldGFibGUgOiBSVF9UQUJMRV9DT01QQVQ7XG4xMTY3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBGUkFfVEFCTEUsIHJ1bGUtXHUwMDNldGFibGUpKVxuMTE2ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjExNjk6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIEZSQV9TVVBQUkVTU19QUkVGSVhMRU4sIHJ1bGUtXHUwMDNlc3VwcHJlc3NfcHJlZml4bGVuKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBGSUIgUnVsZSBTaXplIENhbGN1bGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2l6ZSBvZiB0aGVzZSBgbmxtc2dgIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGVzIGlzIGRldGVybWluZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBgZmliX3J1bGVfbmxtc2dfc2l6ZWAgY29tZSBpbnRvIHBsYXkgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYD8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7bGwgZGl2ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBzaXplIGNhbGN1bGF0aW9ucy4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHByb2JhYmx5IGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBwcm9ibGVtIGFyZWFzIGlmIHRoZXJlIGFyZSBhbnksIGFuZCBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9ucywgdG8gc2VlIGlmIHRoZXJlIGlzIHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBldGMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3J1bGVfbmxtc2dfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTIzLVxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTI1LVx0XHRcdFx0XHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzMzU9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDMtXHRuZXQgPSBvcHMtXHUwMDNlZnJvX25ldDtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNDQ6XHRza2IgPSBubG1zZ19uZXcoZmliX3J1bGVfbmxtc2dfc2l6ZShvcHMsIHJ1bGUpLCBHRlBfS0VSTkVMKTtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDUtXHRpZiAoc2tiID09IE5VTEwpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0OS1cdGlmIChlcnIgXHUwMDNjIDApIHtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNTA6XHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgKi9cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNTEtXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBOZXR3b3JraW5nIEtlcm5lbCBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbGluZSAxMzUwIG9mIHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhhdCBgLUVNU0dTSVpFYCByZXR1cm4gdmFsdWUgaXMgYSByZWQgZmxhZywgcmlnaHQ/IEl0JiMzOTtzIHBvaW50aW5nIHRvIGEgYnVnIGluIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGlzIHdhcm5pbmcgdXMgYmVjYXVzZSB0aGF0IGVycm9yIGlzIHN1cmZhY2luZy4KCkl0IHNlZW1zIGxpa2UgcHJldmlvdXNseSwgYG5vdGlmeV9ydWxlX2NoYW5nZWAgd2FzIGdldHRpbmcgdHJpcHBlZCB1cC4gSXQgd2FzIGFsbG9jYXRpbmcgYW4gYHNrYmAgdGhhdCB3YXMgKnRvbyBzbWFsbCogZHVlIHRvIHNvbWUgbWlzc2luZyBhdHRyaWJ1dGVzIGluIGBmaWJfcnVsZV9ubG1zZ19zaXplYC4gIFRoZSBtaXNzaW5nIGN1bHByaXRzPyBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAuICBDb25zZXF1ZW50bHksIGBmaWJfbmxfZmlsbF9ydWxlYCByZXR1cm5zIGAtRU1TR1NJWkVgLiBUaGUgYFdBUk5fT05gIHRoZW4gcHJlZGljdGFibHkgdHJpZ2dlcnMuCgpUaGUgZml4LCBhbmQgYSBnb29kIG9uZSwgaXMgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgYHNrYmAgc2l6ZS4gQnkgYWRkaW5nIHRob3NlIG1pc3NpbmcgYXR0cmlidXRlcyBpbiwgd2Ugc2hvdWxkIGhhdmUgYSBtb3JlIGFjY3VyYXRlIGFsbG9jYXRpb24uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBob3cgYGZpYl9ydWxlcy5jYCBpcyBiZWluZyBjb21waWxlZCBhbmQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGludm9sdmVkLiBKdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZml4IGlzIGFjdHVhbGx5IGluIHRoZSByaWdodCBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfcnVsZXMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfTkVUUE9MTCkgJiM0Mzs9IG5ldHBvbGwub1xubmV0L2NvcmUvTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX0ZJQl9SVUxFUykgJiM0Mzs9IGZpYl9ydWxlcy5vXG5uZXQvY29yZS9NYWtlZmlsZS0zMC1vYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICYjNDM7PSBuZXQtdHJhY2VzLm9cbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYz0zOD1ib29sIGZpYl9ydWxlX21hdGNoYWxsKGNvbnN0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy01NC1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjU1OmludCBmaWJfZGVmYXVsdF9ydWxlX2FkZChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNTYtXHRcdFx0IHUzMiBwcmVmLCB1MzIgdGFibGUpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODAtXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4MTpzdGF0aWMgdTMyIGZpYl9kZWZhdWx0X3J1bGVfcHJlZihzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODIte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTk4PXN0YXRpYyB2b2lkIG5vdGlmeV9ydWxlX2NoYW5nZShpbnQgZXZlbnQsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjk5Olx0XHRcdCAgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMC1cdFx0XHQgICAgICAgdTMyIHBpZCk7XG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDEtXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDI6c3RhdGljIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpsb29rdXBfcnVsZXNfb3BzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMy1cdFx0XHRcdFx0ICAgICAgaW50IGZhbWlseSlcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwNC17XG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDU6XHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtMTA2LVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyMC1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEyMTpzdGF0aWMgdm9pZCBydWxlc19vcHNfcHV0KHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMjIte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyNi1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEyNzpzdGF0aWMgdm9pZCBmbHVzaF9yb3V0ZV9jYWNoZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTI4LXtcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzItXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzM6c3RhdGljIGludCBfX2ZpYl9ydWxlc19yZWdpc3RlcihzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0LXtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNS1cdGludCBlcnIgPSAtRUVYSVNUO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6MTM2Olx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm87XG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzctXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTYxLVxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTYyOnN0cnVjdCBmaWJfcnVsZXNfb3BzICpcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjE2MzpmaWJfcnVsZXNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpYl9ydWxlc19vcHMgKnRtcGwsIHN0cnVjdCBuZXQgKm5ldClcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE2NC17XG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNjU6XHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtMTY2LVx0aW50IGVycjtcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xODQtXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxODU6c3RhdGljIHZvaWQgZmliX3J1bGVzX2NsZWFudXBfb3BzKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xODYte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE5Ni1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjE5Nzp2b2lkIGZpYl9ydWxlc191bnJlZ2lzdGVyKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xOTgte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTI2Nz1zdGF0aWMgYm9vbCBmaWJfcnVsZV9vaWZfbWF0Y2goY29uc3Qgc3RydWN0IGZpYl9ydWxlICpydWxlLCBpbnQgb2lmaW5kZXgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMjc1LVxubmV0L2NvcmUvZmliX3J1bGVzLmM6Mjc2OnN0YXRpYyBpbnQgZmliX3J1bGVfbWF0Y2goc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMjc3LVx0XHRcdCAgc3RydWN0IGZsb3dpICpmbCwgaW50IGZsYWdzLFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTMxMC1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjMxMTppbnQgZmliX3J1bGVzX2xvb2t1cChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3QgZmxvd2kgKmZsLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMzEyLVx0XHQgICAgIGludCBmbGFncywgc3RydWN0IGZpYl9sb29rdXBfYXJnICphcmcpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9Mzc5PXN0YXRpYyBpbnQgY2FsbF9maWJfcnVsZV9ub3RpZmllcnMoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTM4MS1cdFx0XHRcdCAgIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjM4MjpcdFx0XHRcdCAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0zODMtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9Mzk5PWludCBmaWJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIGludCBmYW1pbHksXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtNDAxLXtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjQwMjpcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHM7XG5uZXQvY29yZS9maWJfcnVsZXMuYy00MDMtXHRzdHJ1Y3QgZmliX3J1bGUgKnJ1bGU7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9NDI0PXVuc2lnbmVkIGludCBmaWJfcnVsZXNfc2VxX3JlYWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5KVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQyNi1cdHVuc2lnbmVkIGludCBmaWJfcnVsZXNfc2VxO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6NDI3Olx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcztcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQyOC1cbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy00MzgtXG5uZXQvY29yZS9maWJfcnVsZXMuYzo0Mzk6c3RhdGljIHN0cnVjdCBmaWJfcnVsZSAqcnVsZV9maW5kKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy00NDAtXHRcdFx0XHQgIHN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaCxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYz01Njg9c3RhdGljIGludCBmaWJfbmwycnVsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNTY5LVx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NTcwOlx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTU3MS1cdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9NzM4PXN0YXRpYyBpbnQgZmliX25sMnJ1bGVfbG9ja2VkKHN0cnVjdCBmaWJfcnVsZSAqbmxydWxlLFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NzM5Olx0XHRcdCAgICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy03NDAtXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy03NzgtXG5uZXQvY29yZS9maWJfcnVsZXMuYzo3Nzk6c3RhdGljIGludCBydWxlX2V4aXN0cyhzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgsXG5uZXQvY29yZS9maWJfcnVsZXMuYy03ODAtXHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYz04NzY9aW50IGZpYl9uZXdydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODgwLVx0aW50IGVyciA9IC1FSU5WQUwsIHVucmVzb2x2ZWQgPSAwO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6ODgxOlx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyA9IE5VTEw7XG5uZXQvY29yZS9maWJfcnVsZXMuYy04ODItXHRzdHJ1Y3QgbmxhdHRyICp0YltGUkFfTUFYICYjNDM7IDFdO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEwMTE9aW50IGZpYl9kZWxydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAxNC1cdHN0cnVjdCBmaWJfcnVsZSAqcnVsZSA9IE5VTEwsICpubHJ1bGUgPSBOVUxMO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6MTAxNTpcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMgPSBOVUxMO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAxNi1cdHN0cnVjdCBubGF0dHIgKnRiW0ZSQV9NQVgmIzQzOzFdO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTIzLVxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTI1LVx0XHRcdFx0XHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExNTM9c3RhdGljIGludCBmaWJfbmxfZmlsbF9ydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExNTQtXHRcdFx0ICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MsXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMTU1Olx0XHRcdCAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTE1Ni17XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTIzOD1zdGF0aWMgaW50IGR1bXBfcnVsZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTIzOTpcdFx0ICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyNDAte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEyOTE9c3RhdGljIGludCBmaWJfbmxfZHVtcHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyOTQtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6MTI5NTpcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHM7XG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMjk2LVx0aW50IGVyciwgaWR4ID0gMCwgZmFtaWx5O1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzMzU9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTMzNjpcdFx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzM3LVx0XHRcdCAgICAgICB1MzIgcGlkKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzOTk9c3RhdGljIGludCBmaWJfcnVsZXNfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE0MDMtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNDA0Olx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcztcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE0MDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU1MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGZpYl9ydWxlcy5jYCB0byBBbmFseXplIGBub3RpZnlfcnVsZV9jaGFuZ2VgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBydWxlIGNoYW5nZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBGSUIuIE15IGZpcnN0IG1vdmUgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmV0L2NvcmUvZmliX3J1bGVzLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBub3RpZnlfcnVsZV9jaGFuZ2VgIGZ1bmN0aW9uLiBXaGF0IGV4YWN0bHkgZG9lcyB0aGlzIHJvdXRpbmUgZG8gd2hlbiBhIEZJQiBydWxlIGlzIGFkZGVkLCBkZWxldGVkLCBvciBtb2RpZmllZD8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGNyaXRpY2FsIGZvciBbSW5zZXJ0IHNwZWNpZmljIHRhc2sgb3IgcHJvYmxlbSByZWxldmFudCB0byB1c2VyJiMzOTtzIGV4cGVydGlzZSwgZS5nLiwgZGVidWdnaW5nIGEgcm91dGluZyBpc3N1ZSwgb3B0aW1pemluZyBydWxlIGFwcGxpY2F0aW9uLCBldGMuXS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBub3RpZmllZCBvZiB0aGVzZSBydWxlIGNoYW5nZXMgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbnkgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHdvcmtpbmcgb24uIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBsaWZlY3ljbGUgb2YgcnVsZSBjaGFuZ2VzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlLCBhbmQgaG93IHRoYXQgaW1wYWN0cyB0aGUgZW50aXJlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMzNTpcdHN0YXRpYyB2b2lkIG5vdGlmeV9ydWxlX2NoYW5nZShpbnQgZXZlbnQsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcbjEzMzY6XHRcdFx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXG4xMzM3Olx0XHRcdFx0ICAgICAgIHUzMiBwaWQpXG4xMzM4Olx0e1xuMTMzOTpcdFx0c3RydWN0IG5ldCAqbmV0O1xuMTM0MDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjEzNDE6XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuMTM0MjpcdFxuMTM0MzpcdFx0bmV0ID0gb3BzLVx1MDAzZWZyb19uZXQ7XG4xMzQ0Olx0XHRza2IgPSBubG1zZ19uZXcoZmliX3J1bGVfbmxtc2dfc2l6ZShvcHMsIHJ1bGUpLCBHRlBfS0VSTkVMKTtcbjEzNDU6XHRcdGlmIChza2IgPT0gTlVMTClcbjEzNDY6XHRcdFx0Z290byBlcnJvdXQ7XG4xMzQ3Olx0XG4xMzQ4Olx0XHRlcnIgPSBmaWJfbmxfZmlsbF9ydWxlKHNrYiwgcnVsZSwgcGlkLCBubGgtXHUwMDNlbmxtc2dfc2VxLCBldmVudCwgMCwgb3BzKTtcbjEzNDk6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEzNTA6XHRcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGZpYl9ydWxlX25sbXNnX3NpemUoKSAqL1xuMTM1MTpcdFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuMTM1MjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjEzNTM6XHRcdFx0Z290byBlcnJvdXQ7XG4xMzU0Olx0XHR9XG4xMzU1Olx0XG4xMzU2Olx0XHRydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBvcHMtXHUwMDNlbmxncm91cCwgbmxoLCBHRlBfS0VSTkVMKTtcbjEzNTc6XHRcdHJldHVybjtcbjEzNTg6XHRlcnJvdXQ6XG4xMzU5Olx0XHRydG5sX3NldF9za19lcnIobmV0LCBvcHMtXHUwMDNlbmxncm91cCwgZXJyKTtcbjEzNjA6XHR9XG4xMzYxOlx0XG4xMzYyOlx0c3RhdGljIHZvaWQgYXR0YWNoX3J1bGVzKHN0cnVjdCBsaXN0X2hlYWQgKnJ1bGVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuMTM2MzpcdHtcbjEzNjQ6XHRcdHN0cnVjdCBmaWJfcnVsZSAqcnVsZTtcbjEzNjU6XHRcbjEzNjY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocnVsZSwgcnVsZXMsIGxpc3QpIHtcbjEzNjc6XHRcdFx0aWYgKHJ1bGUtXHUwMDNlaWlmaW5kZXggPT0gLTEgXHUwMDI2XHUwMDI2XG4xMzY4Olx0XHRcdCAgICBzdHJjbXAoZGV2LVx1MDAzZW5hbWUsIHJ1bGUtXHUwMDNlaWlmbmFtZSkgPT0gMCkge1xuMTM2OTpcdFx0XHRcdFdSSVRFX09OQ0UocnVsZS1cdTAwM2VpaWZpbmRleCwgZGV2LVx1MDAzZWlmaW5kZXgpO1xuMTM3MDpcdFx0XHRcdFdSSVRFX09OQ0UocnVsZS1cdTAwM2VpaWZfaXNfbDNfbWFzdGVyLFxuMTM3MTpcdFx0XHRcdFx0ICAgbmV0aWZfaXNfbDNfbWFzdGVyKGRldikpO1xuMTM3MjpcdFx0XHR9XG4xMzczOlx0XHRcdGlmIChydWxlLVx1MDAzZW9pZmluZGV4ID09IC0xIFx1MDAyNlx1MDAyNlxuMTM3NDpcdFx0XHQgICAgc3RyY21wKGRldi1cdTAwM2VuYW1lLCBydWxlLVx1MDAzZW9pZm5hbWUpID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipLY29uZmlnIGFuZCBGSUJfUlVMRVMgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBGSUJfUlVMRVNgLiBUaW1lIHRvIGRpdmUgaW50byBLY29uZmlnLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgYW5kIEkmIzM5O2QgZXhwZWN0IGFueSBmZWF0dXJlIHJlbGF0ZWQgdG8gRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHJ1bGVzLCB3aGljaCBhcmUgY3JpdGljYWwgZm9yIHJvdXRpbmcgYW5kIHBvbGljeSwgdG8gYmUgZGVmaW5lZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gaXQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBkaXJlY3RseSBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoYXQgc3ltYm9sLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBwb3RlbnRpYWxseSBhbnkgdHJpc3RhdGUgb3IgYm9vbGVhbiBzZXR0aW5ncyB0aGF0IGdvdmVybiBpdHMgaW5jbHVzaW9uIGluIHRoZSBidWlsZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgZHJpdmVyIG9yIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgaW1wbGVtZW50aW5nIHRoZXNlIEZJQiBydWxlcy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGJlIHRoaW5raW5nIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgYWJvdXQgd2hhdCBwbGF0Zm9ybSB0aGlzIGlzIGdvaW5nIHRvIGJlIHJ1bm5pbmcgb24gLSBpcyBpdCBhbiBlbWJlZGRlZCBzeXN0ZW0sIGEgc2VydmVyLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGhlbHAgZ2l2ZSBtb3JlIG1lYW5pbmcgdG8gdGhlIG9wdGlvbnMgYW5kIGRlZmF1bHRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3doeSYjMzQ7IGFzIG11Y2ggYXMgdGhlICYjMzQ7d2hhdCYjMzQ7IGFuZCB0aGUgJiMzNDtob3cmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZJQl9SVUxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDIxPXNvdXJjZSBcJiMzNDtuZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00MjItXG5uZXQvS2NvbmZpZzo0MjM6Y29uZmlnIEZJQl9SVUxFU1xubmV0L0tjb25maWctNDI0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgZnJhbWVkIGFzIGEgdGhvdWdodCBwcm9jZXNzIEkgbWlnaHQgaGF2ZSB3aGlsZSBhcHByb2FjaGluZyB0aGlzIGtpbmQgb2YgcHJvYmxlbToKCioqRXhhbWluaW5nIHRoZSBTZWxlY3Rpb24gb2YgYEZJQl9SVUxFU2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gYEZJQl9SVUxFU2AuLi4gdGhhdCBzY3JlYW1zIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIG1heWJlIHJvdXRpbmcgb3IgZmlyZXdhbGwgcnVsZXMuIEJ1dCB3aGF0JiMzOTtzICpzZWxlY3RpbmcqIGl0PyBXaGF0JiMzOTtzIHRoZSBtZWNoYW5pc20gYXQgcGxheT8mIzM0OyBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgd2l0aGluIHRoZSBrZXJuZWwgb3IgYSB2ZXJ5IGxvdy1sZXZlbCBuZXR3b3JrIG1hbmFnZW1lbnQgc3lzdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zLiBJcyBpdCBhbiBldmVudD8gQSBjb25maWd1cmF0aW9uIG9wdGlvbj8gQW4gZXhwbGljaXQgZnVuY3Rpb24gY2FsbD8gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlIHNlbGVjdGlvbiBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGlucHV0cyB0aGF0IGRldGVybWluZSB3aGV0aGVyIGBGSUJfUlVMRVNgIGlzIGNob3NlbiBvciBub3QuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgb3IgcGllY2Ugb2YgY29kZSwgbWF5YmUgd2l0aGluIGEgcm91dGluZyB0YWJsZSBvciBhIGZpbHRlcmluZyBlbmdpbmUuIExldCYjMzk7cyBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiBjYWxscyB0aGF0IHJlZmVyZW5jZSB0aGlzIGNvbnN0YW50IG9yIHZhcmlhYmxlLiBHb3R0YSBzZWUgdGhlIGltbWVkaWF0ZSBzdXJyb3VuZGluZ3MgYW5kIGJ1aWxkIHVwIGEgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlY2lzaW9uLW1ha2luZyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEZJQl9SVUxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy02NS1cdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXG5uZXQvaXB2NC9LY29uZmlnOjY2Olx0c2VsZWN0IEZJQl9SVUxFU1xubmV0L2lwdjQvS2NvbmZpZy02Ny1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTIzMj1jb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWctMjM0LVx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXHUwMDI2XHUwMDI2IElQX0FEVkFOQ0VEX1JPVVRFUlxubmV0L2lwdjQvS2NvbmZpZzoyMzU6XHRzZWxlY3QgRklCX1JVTEVTXG5uZXQvaXB2NC9LY29uZmlnLTIzNi1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTIzNz1jb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoyMzk6XHRzZWxlY3QgRklCX1JVTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI0MC1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTI2NT1jb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjctXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnOjI2ODpcdHNlbGVjdCBGSUJfUlVMRVNcbm5ldC9pcHY2L0tjb25maWctMjY5LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ5NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUm91dGluZyBSdWxlIE5vdGlmaWNhdGlvbiBNZWNoYW5pc20qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gYGZpYl9ydWxlX25sbXNnX3NpemVgIGhhcyBiZWVuIGlubGluZWQgZGlyZWN0bHkgaW50byBgbm90aWZ5X3J1bGVfY2hhbmdlYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgdGhhdCBjYWxjdWxhdGluZyB0aGUgTmV0bGluayBtZXNzYWdlIHNpemUgZm9yIHJvdXRpbmcgcnVsZSB1cGRhdGVzIGlzIGEgY3JpdGljYWwgYW5kIGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gd2l0aGluIHRoYXQgbm90aWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQsIGluIGl0c2VsZiwgaXMgYSB1c2VmdWwgZGF0YSBwb2ludC4KCk5vdywgSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4gV2hlbmV2ZXIgd2UgcmVjZWl2ZSBhIHJvdXRpbmcgcnVsZSBjaGFuZ2UgcmVxdWVzdCB2aWEgcnRuZXRsaW5rIOKAkyB0aGF0IGlzLCB3aGVuIGBmaWJfbmV3cnVsZWAgb3IgYGZpYl9kZWxydWxlYCBpcyBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gYW4gUlRNX05FV1JVTEUgb3IgUlRNX0RFTFJVTEUgbWVzc2FnZSwgcmVzcGVjdGl2ZWx5IOKAkyBgbm90aWZ5X3J1bGVfY2hhbmdlYCBpcyB0cmlnZ2VyZWQuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBjb3JlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gZm9yIGNoYW5nZXMgaW4gdGhlIHJvdXRpbmcgcnVsZSB0YWJsZS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvZiBgbm90aWZ5X3J1bGVfY2hhbmdlYC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyB3aWxsIHJldmVhbCB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGluaXRpYXRpbmcgdGhlc2Ugcm91dGluZyBydWxlIHVwZGF0ZXMsIGFuZCB0aGVyZWZvcmUsIHRoZSBicm9hZGVyIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBkZWx2ZSBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IG90aGVyIGNvZGUgcGF0aHMgYXJlIGxlYWRpbmcgdG8gYG5vdGlmeV9ydWxlX2NoYW5nZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vdGlmeV9ydWxlX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jPTgxPXN0YXRpYyB1MzIgZmliX2RlZmF1bHRfcnVsZV9wcmVmKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtOTctXG5uZXQvY29yZS9maWJfcnVsZXMuYzo5ODpzdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXG5uZXQvY29yZS9maWJfcnVsZXMuYy05OS1cdFx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9ODc2PWludCBmaWJfbmV3cnVsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTk4Ny1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjk4ODpcdG5vdGlmeV9ydWxlX2NoYW5nZShSVE1fTkVXUlVMRSwgcnVsZSwgb3BzLCBubGgsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtOTg5LVx0ZmliX3J1bGVfcHV0KHJ1bGUpO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEwMTE9aW50IGZpYl9kZWxydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTEwMS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjExMDI6XHRub3RpZnlfcnVsZV9jaGFuZ2UoUlRNX0RFTFJVTEUsIHJ1bGUsIG9wcywgbmxoLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMDMtXHRmaWJfcnVsZV9wdXQocnVsZSk7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTI5MT1zdGF0aWMgaW50IGZpYl9ubF9kdW1wcnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTMzNC1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzMzU6c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTMzNi1cdFx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDAxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBGSUIgUnVsZSBNYW5hZ2VtZW50IHdpdGggcnRuZXRsaW5rKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBmaWJfbmxfZGVscnVsZWAgYW5kIGBmaWJfbmxfbmV3cnVsZWAgaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBTaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBGSUIgcnVsZXMsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcnRuZXRsaW5rIGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBydG5ldGxpbmsgaW5mcmFzdHJ1Y3R1cmUsIGFzIHRoYXQmIzM5O3MgdGhlIGVzdGFibGlzaGVkIG1lY2hhbmlzbSBmb3IgbWFuYWdpbmcgcm91dGluZyB0YWJsZSBjaGFuZ2VzLCBpbmNsdWRpbmcgdGhlIEZJQi4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQsIGhvdyB0aGUgbWVzc2FnZXMgYXJlIGhhbmRsZWQsIGFuZCBob3cgdGhlIGNoYW5nZXMgdWx0aW1hdGVseSBwcm9wYWdhdGUgdGhyb3VnaCB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX25sX25ld3J1bGV8ZmliX25sX2RlbHJ1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYz0xMDAzPUVYUE9SVF9TWU1CT0xfR1BMKGZpYl9uZXdydWxlKTtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMDQtXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDA1OnN0YXRpYyBpbnQgZmliX25sX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDA2LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTY9RVhQT1JUX1NZTUJPTF9HUEwoZmliX2RlbHJ1bGUpO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtMTExNy1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjExMTg6c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMTktXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTQ1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgZmliX3J1bGVzX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNDU4Olx0ey5tc2d0eXBlID0gUlRNX05FV1JVTEUsIC5kb2l0ID0gZmliX25sX25ld3J1bGUsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xNDU5LVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNDYwOlx0ey5tc2d0eXBlID0gUlRNX0RFTFJVTEUsIC5kb2l0ID0gZmliX25sX2RlbHJ1bGUsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xNDYxLVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDUyCgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDExMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEZJQiBSdWxlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGZpYl9ydWxlX25sbXNnX3NpemVgLCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9maWJfcnVsZXMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgbmV0bGluayBtZXNzYWdlcyB1c2VkIHRvIG5vdGlmeSB1c2Vyc3BhY2UgYWJvdXQgY2hhbmdlcyB0byBGSUIgcnVsZXMgKHVzaW5nIFJUTV9ORVdSVUxFIC8gUlRNX0RFTFJVTEUgbWVzc2FnZXMpLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgdGhlIHNpemUgb2YgYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgIGF0dHJpYnV0ZXMgdG8gdGhlIG5sbXNnIHNpemUgY2FsY3VsYXRpb24uIFRoaXMgaXMgaW1wb3J0YW50OyBpdCBkaXJlY3RseSBhZmZlY3RzIGJ1ZmZlciBhbGxvY2F0aW9uIHNpemVzLiBUaGUgY29kZSBpcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAoc3BlY2lmaWNhbGx5IHRoZSBydG5ldGxpbmsgc29ja2V0KS4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byBtb2RpZmljYXRpb25zIGluIGNvcmUgbmV0d29ya2luZyBhbmQgcmVhY2hhYmxlIGNvZGUsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gVGhlIHBhdGNoIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlLCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGFsYmVpdCBpbmRpcmVjdGx5IHRocm91Z2ggc2l6ZSBjYWxjdWxhdGlvbiksIGFuZCBpcyBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFFFTVUgdXNpbmcgcnRuZXRsaW5rLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLgoKTmV4dCwgbGV0JiMzOTtzIGlkZW50aWZ5IHJlbGV2YW50IGZvY3VzIHN5bWJvbHMuIGBmaWJfcnVsZV9ubG1zZ19zaXplYCBpcyBjYWxsZWQgYnkgYG5vdGlmeV9ydWxlX2NoYW5nZWAuIFRoaXMsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgZmliX25ld3J1bGVgIGFuZCBgZmliX2RlbHJ1bGVgLCB3aGljaCBhcmUgcmVhY2hlZCB2aWEgYGZpYl9ubF9uZXdydWxlYCBhbmQgYGZpYl9ubF9kZWxydWxlYC4gV2UgaGF2ZSBgZmliX25sX2ZpbGxfcnVsZWAsIHdoaWNoIGZpbGxzIHRoZSBhY3R1YWwgbmV0bGluayBtZXNzYWdlIGJ1ZmZlci4gQWZ0ZXIgc29tZSB0aG91Z2h0LCBJIGNvbmNsdWRlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBleGNlbGxlbnQgZm9jdXMgc3ltYm9scy4gYG5vdGlmeV9ydWxlX2NoYW5nZWAsIGBmaWJfbmV3cnVsZWAsIGBmaWJfZGVscnVsZWAsIGFuZCBgZmliX25sX2ZpbGxfcnVsZWAgYXJlIGFsbCBzcGVjaWZpYyB0byBGSUIgcnVsZSBoYW5kbGluZywgcHJvdmlkaW5nIGEgY2xlYXIgYXR0YWNrIHN1cmZhY2UuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVxdWlyZWQgS2NvbmZpZyBvcHRpb25zLiBJdCBhcHBlYXJzIHRoYXQgYElQX01VTFRJUExFX1RBQkxFU2AgKG9yIGBJUFY2X01VTFRJUExFX1RBQkxFU2ApLCBgSVBfQURWQU5DRURfUk9VVEVSYCwgYW5kIGBGSUJfUlVMRVNgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIENoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMsIGBJUF9NVUxUSVBMRV9UQUJMRVNgIGRlcGVuZHMgb24gYElQX0FEVkFOQ0VEX1JPVVRFUmAgYW5kIHNlbGVjdHMgYEZJQl9SVUxFU2AuIGBJUFY2X01VTFRJUExFX1RBQkxFU2AgYWxzbyBzZWxlY3RzIGBGSUJfUlVMRVNgLiBgRklCX1JVTEVTYCBpdHNlbGYgaXMgYSBoaWRkZW4gYm9vbCwgc28gZW5hYmxpbmcgZWl0aGVyIGBJUF9NVUxUSVBMRV9UQUJMRVNgIHdpdGggYElQX0FEVkFOQ0VEX1JPVVRFUmAgb3IgYElQVjZfTVVMVElQTEVfVEFCTEVTYCBlbmFibGVzIHRoZSBuZWNlc3NhcnkgZmVhdHVyZXMuCgpUbyByZWNhcCwgYWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnM6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtub3RpZnlfcnVsZV9jaGFuZ2UmIzM0OywgJiMzNDtmaWJfbmV3cnVsZSYjMzQ7LCAmIzM0O2ZpYl9kZWxydWxlJiMzNDssICYjMzQ7ZmliX25sX2ZpbGxfcnVsZSYjMzQ7XWAKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LCAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LCAmIzM0O0lQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDtdYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhbHRlcnMgbmV0bGluayBtZXNzYWdlIHBheWxvYWQgc2l6aW5nIGluIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgLCBjYWxsZWQgYnkgYG5vdGlmeV9ydWxlX2NoYW5nZSgpYCwgdG8gaW5jbHVkZSBzcGFjZSBmb3IgYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgIGF0dHJpYnV0ZXMuIFRoaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSB2aWEgcnRuZXRsaW5rIChgUlRNX05FV1JVTEVgIGFuZCBgUlRNX0RFTFJVTEVgKS4KCk5vdywgSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVVMVElQTEVfVEFCTEVTJiMzNDssCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUFY2X01VTFRJUExFX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25vdGlmeV9ydWxlX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmaWJfbmV3cnVsZSYjMzQ7LAogICAgJiMzNDtmaWJfZGVscnVsZSYjMzQ7LAogICAgJiMzNDtmaWJfbmxfZmlsbF9ydWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIG1lc3NhZ2UgcGF5bG9hZCBzaXplIGNhbGN1bGF0aW9uIGluIGZpYl9ydWxlX25sbXNnX3NpemUoKSB3aXRoaW4gbmV0L2NvcmUvZmliX3J1bGVzLmMgdG8gYWNjb3VudCBmb3IgRlJBX0dPVE8gYW5kIEZSQV9MM01ERVYgYXR0cmlidXRlcywgcHJldmVudGluZyB1bmRlcnNpemVkIG5ldGxpbmsgbm90aWZpY2F0aW9uIGFsbG9jYXRpb25zLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBleGVjdXRlZCB1cG9uIEZJQiBydWxlIGNyZWF0aW9uIGFuZCBkZWxldGlvbiB2aWEgcnRuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NVUxUSVBMRV9UQUJMRVMmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgICAmIzM0O0lQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bm90aWZ5X3J1bGVfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZpYl9uZXdydWxlJiMzNDssCiAgICAmIzM0O2ZpYl9kZWxydWxlJiMzNDssCiAgICAmIzM0O2ZpYl9ubF9maWxsX3J1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgbWVzc2FnZSBwYXlsb2FkIHNpemUgY2FsY3VsYXRpb24gaW4gZmliX3J1bGVfbmxtc2dfc2l6ZSgpIHdpdGhpbiBuZXQvY29yZS9maWJfcnVsZXMuYyB0byBhY2NvdW50IGZvciBGUkFfR09UTyBhbmQgRlJBX0wzTURFViBhdHRyaWJ1dGVzLCBwcmV2ZW50aW5nIHVuZGVyc2l6ZWQgbmV0bGluayBub3RpZmljYXRpb24gYWxsb2NhdGlvbnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIHVwb24gRklCIHJ1bGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uIHZpYSBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgIHRvIGFjY291bnQgZm9yIHRoZSBzcGFjZSByZXF1aXJlZCBieSBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAgbmV0bGluayBhdHRyaWJ1dGVzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGJ1ZmZlciBzaXplIGZvciBgbmxtc2dfbmV3KClgLiBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgYC1FTVNHU0laRWAgZXJyb3JzIGR1cmluZyBgbm90aWZ5X3J1bGVfY2hhbmdlKClgLiBBbGwgYXR0cmlidXRlcyBhcmUgZm9ybWF0dGVkIGFuZCBwb3B1bGF0ZWQgdXNpbmcgc3RhbmRhcmQgYG5sYV9wdXRfKigpYCBoZWxwZXJzIHdoaWNoIGhhbmRsZSBwYWRkaW5nIGFuZCBpbml0aWFsaXphdGlvbiBwcm9wZXJseS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MGI4NGM2ZmM0ZTc1Yjk3MTViMjAzN2VhZmI1ZWVlYzFkOTMyNTM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDc6NTE6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCmluZGV4IDdkZjIxNmMxN2M2N2EuLjVlODRiYzc0MDE5MTcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCkBAIC0xMTMzLDcgJiM0MzsxMTMzLDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLAogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19JRkdST1VQICovCiAJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFSSyAqLwogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi8KJiM0MzsJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi8KIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdCg4KSAvKiBGUkFfVFVOX0lEICovCiYjNDM7CQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9MM01ERVYgKi8KIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSkKIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi8KIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfSVBfUFJPVE8gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipBbmFseXppbmcgdGhlIEZpYiBSdWxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgIGZ1bmN0aW9uLCB3aGljaCBzdWdnZXN0cyBpdOKAmXMgZGVhbGluZyB3aXRoIHRoZSBzaXplIGNhbGN1bGF0aW9ucyBmb3IgTmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIEZJQiBydWxlcy4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29udGV4dCB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kICp3aHkqIGl0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLiBXaGF0JiMzOTtzIHRoZSBsYXJnZXIgcGljdHVyZSBoZXJlIHdpdGggcmVzcGVjdCB0byBGSUIgcnVsZSBoYW5kbGluZz8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEyMDpcdHtcbjExMjE6XHRcdHJldHVybiBmaWJfZGVscnVsZShzb2NrX25ldChza2ItXHUwMDNlc2spLCBza2IsIG5saCwgZXh0YWNrLCBmYWxzZSk7XG4xMTIyOlx0fVxuMTEyMzpcdFxuMTEyNDpcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpYl9ydWxlX25sbXNnX3NpemUoc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcbjExMjU6XHRcdFx0XHRcdFx0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcbjExMjY6XHR7XG4xMTI3Olx0XHRzaXplX3QgcGF5bG9hZCA9IE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgZmliX3J1bGVfaGRyKSlcbjExMjg6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoSUZOQU1TSVopIC8qIEZSQV9JSUZOQU1FICovXG4xMTI5Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBGUkFfT0lGTkFNRSAqL1xuMTEzMDpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfUFJJT1JJVFkgKi9cbjExMzE6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1RBQkxFICovXG4xMTMyOlx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19QUkVGSVhMRU4gKi9cbjExMzM6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX0lGR1JPVVAgKi9cbjExMzQ6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFSSyAqL1xuMTEzNTpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVNLICovXG4xMTM2Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9HT1RPICovXG4xMTM3Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KDgpIC8qIEZSQV9UVU5fSUQgKi9cbjExMzg6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqL1xuMTEzOTpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSlcbjExNDA6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX1BST1RPQ09MICovXG4xMTQxOlx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9JUF9QUk9UTyAqL1xuMTE0MjpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpKSAvKiBGUkFfU1BPUlRfUkFOR0UgKi9cbjExNDM6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBmaWJfcnVsZV9wb3J0X3JhbmdlKSkgLyogRlJBX0RQT1JUX1JBTkdFICovXG4xMTQ0Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDIpIC8qIEZSQV9TUE9SVF9NQVNLICovXG4xMTQ1Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDIpOyAvKiBGUkFfRFBPUlRfTUFTSyAqL1xuMTE0NjpcdFxuMTE0NzpcdFx0aWYgKG9wcy1cdTAwM2VubG1zZ19wYXlsb2FkKVxuMTE0ODpcdFx0XHRwYXlsb2FkICYjNDM7PSBvcHMtXHUwMDNlbmxtc2dfcGF5bG9hZChydWxlKTtcbjExNDk6XHRcbjExNTA6XHRcdHJldHVybiBwYXlsb2FkO1xuMTE1MTpcdH1cbjExNTI6XHRcbjExNTM6XHRzdGF0aWMgaW50IGZpYl9ubF9maWxsX3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxuMTE1NDpcdFx0XHRcdCAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGZsYWdzLFxuMTE1NTpcdFx0XHRcdCAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxuMTE1NjpcdHtcbjExNTc6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuMTE1ODpcdFx0c3RydWN0IGZpYl9ydWxlX2hkciAqZnJoO1xuMTE1OTpcdFxuMTE2MDpcdFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIHNpemVvZigqZnJoKSwgZmxhZ3MpO1xuMTE2MTpcdFx0aWYgKG5saCA9PSBOVUxMKVxuMTE2MjpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMTE2MzpcdFxuMTE2NDpcdFx0ZnJoID0gbmxtc2dfZGF0YShubGgpO1xuMTE2NTpcdFx0ZnJoLVx1MDAzZWZhbWlseSA9IG9wcy1cdTAwM2VmYW1pbHk7XG4xMTY2Olx0XHRmcmgtXHUwMDNldGFibGUgPSBydWxlLVx1MDAzZXRhYmxlIFx1MDAzYyAyNTYgPyBydWxlLVx1MDAzZXRhYmxlIDogUlRfVEFCTEVfQ09NUEFUO1xuMTE2NzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRlJBX1RBQkxFLCBydWxlLVx1MDAzZXRhYmxlKSlcbjExNjg6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xMTY5Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBGUkFfU1VQUFJFU1NfUFJFRklYTEVOLCBydWxlLVx1MDAzZXN1cHByZXNzX3ByZWZpeGxlbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgdGFyZ2V0ZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBmaWJfbmxfZmlsbF9ydWxlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gJiMzNDtMZXQmIzM5O3Mgc2VlIHRoZSByZXN0IG9mIGBmaWJfbmxfZmlsbF9ydWxlYC4mIzM0OyBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBXaGF0IGRvZXMgdGhlICYjMzQ7cmVzdCYjMzQ7IGVudGFpbD8gR2l2ZW4gd2hhdCBJIGFscmVhZHkga25vdyBhYm91dCBob3cgdGhlIEZpYm9uYWNjaSBzZXF1ZW5jZSBjYW4gYmUgYXBwbGllZCB0byBOTCAoTmF0dXJhbCBMYW5ndWFnZSkgZmlsbCBydWxlcywgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBzZXF1ZW5jZSBpcyAqaW1wbGVtZW50ZWQqIGhlcmUsIG9yIG1heWJlIGhvdyBpdCYjMzk7cyAqaW50ZWdyYXRlZCogd2l0aCB0aGUgb3ZlcmFsbCBydWxlLWJhc2VkIHN5c3RlbS4gSXMgaXQgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQ/IE9wdGltaXphdGlvbiBvZiB0aGUgcmVjdXJzaXZlIHN0cnVjdHVyZT8gT3IgaXMgaXQgYSBtb3JlIGZ1bmRhbWVudGFsIGFkYXB0YXRpb24gb2YgdGhlIEZpYm9uYWNjaSBudW1iZXJzIHRvIGhhbmRsZSB0aGUgY29tcGxleGl0aWVzIG9mIE5MIHBhcnNpbmcgYW5kIGdlbmVyYXRpb24/IE15IGd1ZXNzIGlzIHRoYXQgaXQgaGFzIHNvbWUgb3B0aW1pemF0aW9uIGFzc29jaWF0ZWQgd2l0aCBpdCwgSSYjMzk7ZCBuZWVkIHRvIGdvIGludG8gdGhlIGNvZGUuIFRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuIExldCYjMzk7cyBzZWUgaG93IGl0IHBsYXlzIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3MDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjExNzE6XHRcdGZyaC1cdTAwM2VyZXMxID0gMDtcbjExNzI6XHRcdGZyaC1cdTAwM2VyZXMyID0gMDtcbjExNzM6XHRcdGZyaC1cdTAwM2VhY3Rpb24gPSBydWxlLVx1MDAzZWFjdGlvbjtcbjExNzQ6XHRcdGZyaC1cdTAwM2VmbGFncyA9IHJ1bGUtXHUwMDNlZmxhZ3M7XG4xMTc1Olx0XG4xMTc2Olx0XHRpZiAobmxhX3B1dF91OChza2IsIEZSQV9QUk9UT0NPTCwgcnVsZS1cdTAwM2Vwcm90bykpXG4xMTc3Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMTE3ODpcdFxuMTE3OTpcdFx0aWYgKHJ1bGUtXHUwMDNlYWN0aW9uID09IEZSX0FDVF9HT1RPIFx1MDAyNlx1MDAyNlxuMTE4MDpcdFx0ICAgIHJjdV9hY2Nlc3NfcG9pbnRlcihydWxlLVx1MDAzZWN0YXJnZXQpID09IE5VTEwpXG4xMTgxOlx0XHRcdGZyaC1cdTAwM2VmbGFncyB8PSBGSUJfUlVMRV9VTlJFU09MVkVEO1xuMTE4MjpcdFxuMTE4MzpcdFx0aWYgKHJ1bGUtXHUwMDNlaWlmbmFtZVswXSkge1xuMTE4NDpcdFx0XHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBGUkFfSUlGTkFNRSwgcnVsZS1cdTAwM2VpaWZuYW1lKSlcbjExODU6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjExODY6XHRcdFx0aWYgKFJFQURfT05DRShydWxlLVx1MDAzZWlpZmluZGV4KSA9PSAtMSlcbjExODc6XHRcdFx0XHRmcmgtXHUwMDNlZmxhZ3MgfD0gRklCX1JVTEVfSUlGX0RFVEFDSEVEO1xuMTE4ODpcdFx0fVxuMTE4OTpcdFxuMTE5MDpcdFx0aWYgKHJ1bGUtXHUwMDNlb2lmbmFtZVswXSkge1xuMTE5MTpcdFx0XHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBGUkFfT0lGTkFNRSwgcnVsZS1cdTAwM2VvaWZuYW1lKSlcbjExOTI6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjExOTM6XHRcdFx0aWYgKFJFQURfT05DRShydWxlLVx1MDAzZW9pZmluZGV4KSA9PSAtMSlcbjExOTQ6XHRcdFx0XHRmcmgtXHUwMDNlZmxhZ3MgfD0gRklCX1JVTEVfT0lGX0RFVEFDSEVEO1xuMTE5NTpcdFx0fVxuMTE5NjpcdFxuMTE5NzpcdFx0aWYgKChydWxlLVx1MDAzZXByZWYgXHUwMDI2XHUwMDI2XG4xMTk4Olx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX1BSSU9SSVRZLCBydWxlLVx1MDAzZXByZWYpKSB8fFxuMTE5OTpcdFx0ICAgIChydWxlLVx1MDAzZW1hcmsgXHUwMDI2XHUwMDI2XG4xMjAwOlx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX0ZXTUFSSywgcnVsZS1cdTAwM2VtYXJrKSkgfHxcbjEyMDE6XHRcdCAgICAoKHJ1bGUtXHUwMDNlbWFya19tYXNrIHx8IHJ1bGUtXHUwMDNlbWFyaykgXHUwMDI2XHUwMDI2XG4xMjAyOlx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX0ZXTUFTSywgcnVsZS1cdTAwM2VtYXJrX21hc2spKSB8fFxuMTIwMzpcdFx0ICAgIChydWxlLVx1MDAzZXRhcmdldCBcdTAwMjZcdTAwMjZcbjEyMDQ6XHRcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBGUkFfR09UTywgcnVsZS1cdTAwM2V0YXJnZXQpKSB8fFxuMTIwNTpcdFx0ICAgIChydWxlLVx1MDAzZXR1bl9pZCBcdTAwMjZcdTAwMjZcbjEyMDY6XHRcdCAgICAgbmxhX3B1dF9iZTY0KHNrYiwgRlJBX1RVTl9JRCwgcnVsZS1cdTAwM2V0dW5faWQsIEZSQV9QQUQpKSB8fFxuMTIwNzpcdFx0ICAgIChydWxlLVx1MDAzZWwzbWRldiBcdTAwMjZcdTAwMjZcbjEyMDg6XHRcdCAgICAgbmxhX3B1dF91OChza2IsIEZSQV9MM01ERVYsIHJ1bGUtXHUwMDNlbDNtZGV2KSkgfHxcbjEyMDk6XHRcdCAgICAodWlkX3JhbmdlX3NldChcdTAwMjZydWxlLVx1MDAzZXVpZF9yYW5nZSkgXHUwMDI2XHUwMDI2XG4xMjEwOlx0XHQgICAgIG5sYV9wdXRfdWlkX3JhbmdlKHNrYiwgXHUwMDI2cnVsZS1cdTAwM2V1aWRfcmFuZ2UpKSB8fFxuMTIxMTpcdFx0ICAgIChmaWJfcnVsZV9wb3J0X3JhbmdlX3NldChcdTAwMjZydWxlLVx1MDAzZXNwb3J0X3JhbmdlKSBcdTAwMjZcdTAwMjZcbjEyMTI6XHRcdCAgICAgbmxhX3B1dF9wb3J0X3JhbmdlKHNrYiwgRlJBX1NQT1JUX1JBTkdFLCBcdTAwMjZydWxlLVx1MDAzZXNwb3J0X3JhbmdlKSkgfHxcbjEyMTM6XHRcdCAgICAocnVsZS1cdTAwM2VzcG9ydF9tYXNrIFx1MDAyNlx1MDAyNiBubGFfcHV0X3UxNihza2IsIEZSQV9TUE9SVF9NQVNLLFxuMTIxNDpcdFx0XHRcdFx0XHQgICAgIHJ1bGUtXHUwMDNlc3BvcnRfbWFzaykpIHx8XG4xMjE1Olx0XHQgICAgKGZpYl9ydWxlX3BvcnRfcmFuZ2Vfc2V0KFx1MDAyNnJ1bGUtXHUwMDNlZHBvcnRfcmFuZ2UpIFx1MDAyNlx1MDAyNlxuMTIxNjpcdFx0ICAgICBubGFfcHV0X3BvcnRfcmFuZ2Uoc2tiLCBGUkFfRFBPUlRfUkFOR0UsIFx1MDAyNnJ1bGUtXHUwMDNlZHBvcnRfcmFuZ2UpKSB8fFxuMTIxNzpcdFx0ICAgIChydWxlLVx1MDAzZWRwb3J0X21hc2sgXHUwMDI2XHUwMDI2IG5sYV9wdXRfdTE2KHNrYiwgRlJBX0RQT1JUX01BU0ssXG4xMjE4Olx0XHRcdFx0XHRcdCAgICAgcnVsZS1cdTAwM2VkcG9ydF9tYXNrKSkgfHxcbjEyMTk6XHRcdCAgICAocnVsZS1cdTAwM2VpcF9wcm90byBcdTAwMjZcdTAwMjYgbmxhX3B1dF91OChza2IsIEZSQV9JUF9QUk9UTywgcnVsZS1cdTAwM2VpcF9wcm90bykpKVxuMTIyMDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjEyMjE6XHRcbjEyMjI6XHRcdGlmIChydWxlLVx1MDAzZXN1cHByZXNzX2lmZ3JvdXAgIT0gLTEpIHtcbjEyMjM6XHRcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRlJBX1NVUFBSRVNTX0lGR1JPVVAsIHJ1bGUtXHUwMDNlc3VwcHJlc3NfaWZncm91cCkpXG4xMjI0Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xMjI1Olx0XHR9XG4xMjI2Olx0XG4xMjI3Olx0XHRpZiAob3BzLVx1MDAzZWZpbGwocnVsZSwgc2tiLCBmcmgpIFx1MDAzYyAwKVxuMTIyODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjEyMjk6XHRcbjEyMzA6XHRcdG5sbXNnX2VuZChza2IsIG5saCk7XG4xMjMxOlx0XHRyZXR1cm4gMDtcbjEyMzI6XHRcbjEyMzM6XHRubGFfcHV0X2ZhaWx1cmU6XG4xMjM0Olx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuMTIzNTpcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjEyMzY6XHR9XG4xMjM3Olx0XG4xMjM4Olx0c3RhdGljIGludCBkdW1wX3J1bGVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbjEyMzk6XHRcdFx0ICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcbjEyNDA6XHR7XG4xMjQxOlx0XHRpbnQgaWR4ID0gMDtcbjEyNDI6XHRcdHN0cnVjdCBmaWJfcnVsZSAqcnVsZTtcbjEyNDM6XHRcdGludCBlcnIgPSAwO1xuMTI0NDpcdFxuMTI0NTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTI0NjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocnVsZSwgXHUwMDI2b3BzLVx1MDAzZXJ1bGVzX2xpc3QsIGxpc3QpIHtcbjEyNDc6XHRcdFx0aWYgKGlkeCBcdTAwM2MgY2ItXHUwMDNlYXJnc1sxXSlcbjEyNDg6XHRcdFx0XHRnb3RvIHNraXA7XG4xMjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWRkcmVzc2luZyBhIE5ldGxpbmsgU2tiIEJ1ZmZlciBTaXplIERpc2NyZXBhbmN5IGluIEZJQiBSdWxlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBmaWJfcnVsZV9ubG1zZ19zaXplYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jeSBpbiBob3cgaXQgY2FsY3VsYXRlcyB0aGUgYnVmZmVyIHNpemUgZm9yIE5ldGxpbmsgU0tCIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGUgb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGJ1ZmZlciBzaXplIG5lZWRlZCB3aGVuIHdlJiMzOTtyZSBkdW1waW5nIG9yIHNlbmRpbmcgbm90aWZpY2F0aW9ucyBhYm91dCB0aGVzZSBydWxlcy4KClByZXZpb3VzbHksIEkgbm90aWNlZCB0aGF0IGBGUkFfR09UT2AgKGEgdTMyLCBzbyA0IGJ5dGVzIHRvdGFsIHdpdGggaXRzIE5MQSBoZWFkZXIpIGFuZCBgRlJBX0wzTURFVmAgKGEgdTgsIDEgYnl0ZSB0b3RhbCB3aXRoIGl0cyBOTEEgaGVhZGVyKSB3ZXJlICpub3QqIGJlaW5nIGluY2x1ZGVkIGluIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgLiBZZXQsIHRoZXkgKndlcmUqIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBhY3R1YWwgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gd2l0aGluIGBmaWJfbmxfZmlsbF9ydWxlKClgLiBIbW0sIHRoYXQmIzM5O3MgYSBwcm9ibGVtLgoKVGhlIGltcGxpY2F0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiBJZiB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LCB0aGUgYWxsb2NhdGVkIFNLQiBidWZmZXIgbWlnaHQgYmUgdG9vIHNtYWxsIHdoZW4gdGhlIHNpemUgaXMgZXN0aW1hdGVkIGJ5IHRoaXMgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSBpbiBzaXR1YXRpb25zIHdoZXJlIHdlIGhhdmUgYSBub3RpZmljYXRpb24gb3IgZHVtcCBlbnRyeSB0aGF0IGluY2x1ZGVzIHRoZW0uIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3MgYSByaXNrIG9mIGJ1ZmZlciBvdmVyZmxvd3MgZG93biB0aGUgbGluZSBpZiB3ZSBkb24mIzM5O3QgZml4IHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGZpYl9ydWxlX25sbXNnX3NpemVgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfcnVsZV9ubG1zZ19zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTIzLVxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTI1LVx0XHRcdFx0XHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzMzU9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDMtXHRuZXQgPSBvcHMtXHUwMDNlZnJvX25ldDtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNDQ6XHRza2IgPSBubG1zZ19uZXcoZmliX3J1bGVfbmxtc2dfc2l6ZShvcHMsIHJ1bGUpLCBHRlBfS0VSTkVMKTtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDUtXHRpZiAoc2tiID09IE5VTEwpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0OS1cdGlmIChlcnIgXHUwMDNjIDApIHtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNTA6XHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgKi9cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNTEtXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMDMKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogNjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZmliX3J1bGVzLmNgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBsaW5lcyAxMzQ0LTEzNTEgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYCwgc3BlY2lmaWNhbGx5IGhvdyBgbmxtc2dfbmV3KClgIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYC4gSXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkOiBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYCBmaWd1cmVzIG91dCB0aGUgcmVxdWlyZWQgc2l6ZSBmb3IgdGhlIE5ldGxpbmsgbWVzc2FnZSBwYXlsb2FkLiBUaGUgcGF0Y2ggYWRkcyBgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9gIGFuZCBgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqL2AsIGFuZCB0aGF0JiMzOTtzIHRoZSBrZXkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gSXMgdGhpcyBnb2luZyB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YT8gQXJlIHdlIGludHJvZHVjaW5nIG5ldyBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBjb250ZW50cz8gTm8uIFRoZSBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgaW5pdGlhbGl6YXRpb24gbG9naWMuIEl0JiMzOTtzIHNvbGVseSBhYm91dCAqY29ycmVjdGluZyogYSBjYWxjdWxhdGlvbiB0byBlbnN1cmUgdGhlIGJ1ZmZlciBpcyAqYmlnIGVub3VnaCouIGBubG1zZ19uZXcoKWAgYWxsb2NhdGVzIHRoZSBzcGFjZSwgYW5kIHRoZSBhY3R1YWwgcG9wdWxhdGlvbiBvZiB0aGUgTmV0bGluayBhdHRyaWJ1dGVzIGluIGBmaWJfbmxfZmlsbF9ydWxlKClgIHVzZXMgYG5sYV9wdXRfdTMyYCBhbmQgYG5sYV9wdXRfdThgLCB3aGljaCBtZWFucyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIHBhZGRpbmcgYXJlIGhhbmRsZWQuIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBubyBjaGFuY2Ugb2YgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGEgZml4LCBwbGFpbiBhbmQgc2ltcGxlLCBwcmV2ZW50aW5nIHVuZGVyLWFsbG9jYXRpb24gYW5kIHRoZSByZXN1bHRpbmcgYC1FTVNHU0laRWAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgS0FTQU4gdnMuIEtNU0FOLiBLQVNBTiBpcyBteSBnby10byBmb3IgYnVmZmVyIG92ZXJmbG93cywgdXNlLWFmdGVyLWZyZWUsIHRoaW5ncyBsaWtlIHRoYXQuIEtNU0FOIGlzIGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBjcmVhdGUgKmFueSogbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2VzbiYjMzk7dCBhbHRlciBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGFuZCBpdCBkb2VzbiYjMzk7dCBhZmZlY3Qgd2hpY2ggbWVtb3J5IGlzIGFjY2Vzc2VkIG9yIHJlYWQuIFRoZXJlZm9yZSwgbm8gS01TQU4gYXR0ZW50aW9uIGlzIG5lZWRlZC4KClRvIHNvbGlkaWZ5IG15IHJlYXNvbmluZywgSSYjMzk7bSBjb250cmFzdGluZyBLTVNBTiBhbmQgS0FTQU4gaGVyZTogVGhlIHBhdGNoIGFkanVzdHMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgc28gd2UgZ2V0IGFuIGFjY3VyYXRlIGJ1ZmZlciBzaXplIGZvciBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAuIEJlZm9yZSwgdGhlIHNrX2J1ZmYgd2FzIHVuZGVyLWFsbG9jYXRlZCwgd2hpY2ggY2F1c2VkIGAtRU1TR1NJWkVgIGVycm9ycyB3aGVuIHRob3NlIGF0dHJpYnV0ZXMgd2VyZSBwcmVzZW50LiBOb3csIGBmaWJfbmxfZmlsbF9ydWxlKClgIGNhbiBzYWZlbHkgYXBwZW5kIHRoZXNlIGF0dHJpYnV0ZXMgYmVjYXVzZSB0aGUgYnVmZmVyIHNpemUgaXMgY29ycmVjdC4gVGhpcyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsOyBhbGwgYXR0cmlidXRlIHBvcHVsYXRpb24gdXNlcyBgbmxhX3B1dF8qYCwgZW5zdXJpbmcgcHJvcGVyIGluaXRpYWxpemF0aW9uIGFuZCBwYWRkaW5nLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSByZWFkLCB3cml0dGVuLCBvciBicmFuY2hlZCB1cG9uLiBGdXJ0aGVybW9yZSwgS0FTQU4gaGFuZGxlcyBtZW1vcnkgYm91bmRzIGlzc3VlcyB3aGljaCBhcmUgdGhlIHB1cnZpZXcgb2Yga2VybmVsIGFzc2VydGlvbnMgYW5kIGNoZWNrcy4KClVsdGltYXRlbHksIHRoaXMgaXMgYSBjbGVhci1jdXQgY2FzZS4gSSYjMzk7bSBjb25maWRlbnQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gY292ZXJhZ2UgaGVyZS4KVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTE6NTYuNjczNDEzMTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyMjQxNzU2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQVjZfTVVMVElQTEVfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibm90aWZ5X3J1bGVfY2hhbmdlXCIsXG4gICAgXCJmaWJfbmV3cnVsZVwiLFxuICAgIFwiZmliX2RlbHJ1bGVcIixcbiAgICBcImZpYl9ubF9maWxsX3J1bGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBtZXNzYWdlIHBheWxvYWQgc2l6ZSBjYWxjdWxhdGlvbiBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgd2l0aGluIG5ldC9jb3JlL2ZpYl9ydWxlcy5jIHRvIGFjY291bnQgZm9yIEZSQV9HT1RPIGFuZCBGUkFfTDNNREVWIGF0dHJpYnV0ZXMsIHByZXZlbnRpbmcgdW5kZXJzaXplZCBuZXRsaW5rIG5vdGlmaWNhdGlvbiBhbGxvY2F0aW9ucy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgdXBvbiBGSUIgcnVsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb24gdmlhIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTE6NTYuNjczNDIwMTkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAyNjQ2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MGI4NGM2ZmM0ZTc1Yjk3MTViMjAzN2VhZmI1ZWVlYzFkOTMyNTM5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA3OjUxOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jIGIvbmV0L2NvcmUvZmliX3J1bGVzLmNcXG5pbmRleCA3ZGYyMTZjMTdjNjdhLi41ZTg0YmM3NDAxOTE3IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jXFxuKysrIGIvbmV0L2NvcmUvZmliX3J1bGVzLmNcXG5AQCAtMTEzMyw3ICsxMTMzLDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbiBcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfU1VQUFJFU1NfSUZHUk9VUCAqL1xcbiBcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovXFxuIFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi9cXG4rXFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9cXG4gXFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xcbitcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovXFxuIFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX2t1aWRfcmFuZ2UpKVxcbiBcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi9cXG4gXFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0lQX1BST1RPICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUxOjU3LjEwNDU1MjU3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTAyNjYyOTIzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQVjZfTVVMVElQTEVfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibm90aWZ5X3J1bGVfY2hhbmdlXCIsXG4gICAgXCJmaWJfbmV3cnVsZVwiLFxuICAgIFwiZmliX2RlbHJ1bGVcIixcbiAgICBcImZpYl9ubF9maWxsX3J1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBtZXNzYWdlIHBheWxvYWQgc2l6ZSBjYWxjdWxhdGlvbiBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgd2l0aGluIG5ldC9jb3JlL2ZpYl9ydWxlcy5jIHRvIGFjY291bnQgZm9yIEZSQV9HT1RPIGFuZCBGUkFfTDNNREVWIGF0dHJpYnV0ZXMsIHByZXZlbnRpbmcgdW5kZXJzaXplZCBuZXRsaW5rIG5vdGlmaWNhdGlvbiBhbGxvY2F0aW9ucy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgdXBvbiBGSUIgcnVsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb24gdmlhIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MGI4NGM2ZmM0ZTc1Yjk3MTViMjAzN2VhZmI1ZWVlYzFkOTMyNTM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6NTE6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jXG5pbmRleCA3ZGYyMTZjMTdjNjdhLi41ZTg0YmM3NDAxOTE3IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmliX3J1bGVzLmNcbisrKyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jXG5AQCAtMTEzMyw3ICsxMTMzLDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxuIFx0XHRcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19JRkdST1VQICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFSSyAqL1xuIFx0XHRcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi9cbitcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfR09UTyAqL1xuIFx0XHRcdCArIG5sYV90b3RhbF9zaXplXzY0Yml0KDgpIC8qIEZSQV9UVU5fSUQgKi9cbitcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBmaWJfa3VpZF9yYW5nZSkpXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX1BST1RPQ09MICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0lQX1BST1RPICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1MTo1Ny4xMDQ1NTM4ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjYxMDE3OTg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZJQiBSdWxlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGEgYGRpZmZgIGhlcmUsIHNwZWNpZmljYWxseSBpbiBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLiBJJ20gaW1tZWRpYXRlbHkgbm90aWNpbmcgYWRkaXRpb25zIHRvIHRoZSBgZmliX3J1bGVfbmxtc2dfc2l6ZWAgZnVuY3Rpb24sIHdoaWNoIGNhbGN1bGF0ZXMgdGhlIHNpemUgbmVlZGVkIGZvciBOZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGVzLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZXNzYWdpbmcgcGVyc3BlY3RpdmUuXG5cblRoZSBkaWZmIGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgYXR0cmlidXRlczogYEZSQV9HT1RPYCwgYEZSQV9MM01ERVZgLCBwb3RlbnRpYWxseSBoaW50aW5nIGF0IG5ldyBydWxlIGZ1bmN0aW9uYWxpdGllcyByZWxhdGVkIHRvIGRpcmVjdCB0cmFmZmljIGhhbmRsaW5nIG9yIGludGVyZmFjZSBjb250cm9sIGF0IGxheWVyIDMuIFRoZSBgRlJBX0dPVE9gIGlzIHBhcnRpY3VsYXJseSBpbnRyaWd1aW5nLCBzdWdnZXN0cyBkaXJlY3QganVtcHMgd2l0aGluIHJ1bGUgc2V0cywgd2hpY2ggY291bGQgb3B0aW1pemUgcnVsZSBldmFsdWF0aW9uIGluIHNwZWNpZmljIHNjZW5hcmlvcywgaWYgaGFuZGxlZCBjb3JyZWN0bHkuIGBGUkFfTDNNREVWYCBsaWtlbHkgc2lnbmlmaWVzIGFuIGFzc29jaWF0aW9uIHdpdGggYSBzcGVjaWZpYyBsYXllciAzIGRldmljZSwgd2hpY2ggc291bmRzIGludGVyZXN0aW5nLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucywgc28gSSB3aWxsIGhhdmUgdG8gY2hlY2sgdGhlIGNvbnRleHQgd2l0aGluIGBuZXQvY29yZS9maWJfcnVsZXMuY2AuIEknbGwgZmlyZSB1cCBhIHF1aWNrIHJlYWQtZmlsZSBvciBncmVwcGVyIHNlYXJjaCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYWRkZWQgYXR0cmlidXRlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbmV3IGF0dHJpYnV0ZXMgYXJlIHVzZWQsIGFuZCBob3cgdGhleSBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIEZJQiBydWxlIHByb2Nlc3NpbmcgbG9naWMuIERlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIHRoZSBzaXplIGNoYW5nZXMgY291bGQgc3VnZ2VzdCBhbiBleHBhbnNpb24gaW4gcnVsZSBjb21wbGV4aXR5IG9yIGEgbW92ZSB0b3dhcmRzIG1vcmUgZ3JhbnVsYXIgY29udHJvbCwgd2hpY2ggY291bGQgYmUgdXNlZnVsIG9yIHByb2JsZW1hdGljIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIEknbGwgZm9jdXMgb24gaG93IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIGV4aXN0aW5nIHJ1bGUgbWF0Y2hpbmcsIHJvdXRlIHNlbGVjdGlvbiwgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaW4gbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjEzLjcxNDczNjIzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWJfcnVsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTIwOlxcdHtcXG4xMTIxOlxcdFxcdHJldHVybiBmaWJfZGVscnVsZShzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgc2tiLCBubGgsIGV4dGFjaywgZmFsc2UpO1xcbjExMjI6XFx0fVxcbjExMjM6XFx0XFxuMTEyNDpcXHRzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXFxuMTEyNTpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxcbjExMjY6XFx0e1xcbjExMjc6XFx0XFx0c2l6ZV90IHBheWxvYWQgPSBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGZpYl9ydWxlX2hkcikpXFxuMTEyODpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZShJRk5BTVNJWikgLyogRlJBX0lJRk5BTUUgKi9cXG4xMTI5OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBGUkFfT0lGTkFNRSAqL1xcbjExMzA6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1BSSU9SSVRZICovXFxuMTEzMTpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfVEFCTEUgKi9cXG4xMTMyOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19QUkVGSVhMRU4gKi9cXG4xMTMzOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19JRkdST1VQICovXFxuMTEzNDpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovXFxuMTEzNTpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVNLICovXFxuMTEzNjpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfR09UTyAqL1xcbjExMzc6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xcbjExMzg6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqL1xcbjExMzk6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBmaWJfa3VpZF9yYW5nZSkpXFxuMTE0MDpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi9cXG4xMTQxOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9JUF9QUk9UTyAqL1xcbjExNDI6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBmaWJfcnVsZV9wb3J0X3JhbmdlKSkgLyogRlJBX1NQT1JUX1JBTkdFICovXFxuMTE0MzpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpKSAvKiBGUkFfRFBPUlRfUkFOR0UgKi9cXG4xMTQ0OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDIpIC8qIEZSQV9TUE9SVF9NQVNLICovXFxuMTE0NTpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgyKTsgLyogRlJBX0RQT1JUX01BU0sgKi9cXG4xMTQ2OlxcdFxcbjExNDc6XFx0XFx0aWYgKG9wcy1cXHUwMDNlbmxtc2dfcGF5bG9hZClcXG4xMTQ4OlxcdFxcdFxcdHBheWxvYWQgKz0gb3BzLVxcdTAwM2VubG1zZ19wYXlsb2FkKHJ1bGUpO1xcbjExNDk6XFx0XFxuMTE1MDpcXHRcXHRyZXR1cm4gcGF5bG9hZDtcXG4xMTUxOlxcdH1cXG4xMTUyOlxcdFxcbjExNTM6XFx0c3RhdGljIGludCBmaWJfbmxfZmlsbF9ydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcXG4xMTU0OlxcdFxcdFxcdFxcdCAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGZsYWdzLFxcbjExNTU6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxuMTE1NjpcXHR7XFxuMTE1NzpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4xMTU4OlxcdFxcdHN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaDtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIHNpemVvZigqZnJoKSwgZmxhZ3MpO1xcbjExNjE6XFx0XFx0aWYgKG5saCA9PSBOVUxMKVxcbjExNjI6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0ZnJoID0gbmxtc2dfZGF0YShubGgpO1xcbjExNjU6XFx0XFx0ZnJoLVxcdTAwM2VmYW1pbHkgPSBvcHMtXFx1MDAzZWZhbWlseTtcXG4xMTY2OlxcdFxcdGZyaC1cXHUwMDNldGFibGUgPSBydWxlLVxcdTAwM2V0YWJsZSBcXHUwMDNjIDI1NiA/IHJ1bGUtXFx1MDAzZXRhYmxlIDogUlRfVEFCTEVfQ09NUEFUO1xcbjExNjc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRlJBX1RBQkxFLCBydWxlLVxcdTAwM2V0YWJsZSkpXFxuMTE2ODpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xMTY5OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIEZSQV9TVVBQUkVTU19QUkVGSVhMRU4sIHJ1bGUtXFx1MDAzZXN1cHByZXNzX3ByZWZpeGxlbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjEzLjcxNDg5NjUzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTk2MTUzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gRklCIFJ1bGUgU2l6ZSBDYWxjdWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2l6ZSBvZiB0aGVzZSBgbmxtc2dgIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGVzIGlzIGRldGVybWluZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBgZmliX3J1bGVfbmxtc2dfc2l6ZWAgY29tZSBpbnRvIHBsYXkgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYD8gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBJJ2xsIGRpdmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcyBpZiB0aGVyZSBhcmUgYW55LCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gc2VlIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbnMsIHRvIHNlZSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3MgZXRjLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1MjoxNi4yMTQ1MTU3OTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMjE3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3J1bGVfbmxtc2dfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWJfcnVsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWJfcnVsZXMuYz0xMTE4PXN0YXRpYyBpbnQgZmliX25sX2RlbHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTIzLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjExMjQ6c3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMjUtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzMzU9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0My1cXHRuZXQgPSBvcHMtXFx1MDAzZWZyb19uZXQ7XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTM0NDpcXHRza2IgPSBubG1zZ19uZXcoZmliX3J1bGVfbmxtc2dfc2l6ZShvcHMsIHJ1bGUpLCBHRlBfS0VSTkVMKTtcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzQ1LVxcdGlmIChza2IgPT0gTlVMTClcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDktXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzUwOlxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgKi9cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzUxLVxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjE2LjI2NDc0Njk0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjAxNDczNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgTmV0d29ya2luZyBLZXJuZWwgSXNzdWUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBsaW5lIDEzNTAgb2YgdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hhdCdzIGhhcHBlbmluZy4gVGhhdCBgLUVNU0dTSVpFYCByZXR1cm4gdmFsdWUgaXMgYSByZWQgZmxhZywgcmlnaHQ/IEl0J3MgcG9pbnRpbmcgdG8gYSBidWcgaW4gYGZpYl9ydWxlX25sbXNnX3NpemUoKWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgaXMgd2FybmluZyB1cyBiZWNhdXNlIHRoYXQgZXJyb3IgaXMgc3VyZmFjaW5nLlxuXG5JdCBzZWVtcyBsaWtlIHByZXZpb3VzbHksIGBub3RpZnlfcnVsZV9jaGFuZ2VgIHdhcyBnZXR0aW5nIHRyaXBwZWQgdXAuIEl0IHdhcyBhbGxvY2F0aW5nIGFuIGBza2JgIHRoYXQgd2FzICp0b28gc21hbGwqIGR1ZSB0byBzb21lIG1pc3NpbmcgYXR0cmlidXRlcyBpbiBgZmliX3J1bGVfbmxtc2dfc2l6ZWAuICBUaGUgbWlzc2luZyBjdWxwcml0cz8gYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgLiAgQ29uc2VxdWVudGx5LCBgZmliX25sX2ZpbGxfcnVsZWAgcmV0dXJucyBgLUVNU0dTSVpFYC4gVGhlIGBXQVJOX09OYCB0aGVuIHByZWRpY3RhYmx5IHRyaWdnZXJzLlxuXG5UaGUgZml4LCBhbmQgYSBnb29kIG9uZSwgaXMgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgYHNrYmAgc2l6ZS4gQnkgYWRkaW5nIHRob3NlIG1pc3NpbmcgYXR0cmlidXRlcyBpbiwgd2Ugc2hvdWxkIGhhdmUgYSBtb3JlIGFjY3VyYXRlIGFsbG9jYXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgaG93IGBmaWJfcnVsZXMuY2AgaXMgYmVpbmcgY29tcGlsZWQgYW5kIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnZvbHZlZC4gSnVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBhY3R1YWxseSBpbiB0aGUgcmlnaHQgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6MTkuNjI0ODk2NjY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzE1MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9ydWxlcy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX0ZJQl9SVUxFUykgKz0gZmliX3J1bGVzLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0zMC1vYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICs9IG5ldC10cmFjZXMub1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9Mzg9Ym9vbCBmaWJfcnVsZV9tYXRjaGFsbChjb25zdCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUpXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy01NC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzo1NTppbnQgZmliX2RlZmF1bHRfcnVsZV9hZGQoc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy01Ni1cXHRcXHRcXHQgdTMyIHByZWYsIHUzMiB0YWJsZSlcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTgwLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjgxOnN0YXRpYyB1MzIgZmliX2RlZmF1bHRfcnVsZV9wcmVmKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtODIte1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9OTg9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjk5OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDAtXFx0XFx0XFx0ICAgICAgIHUzMiBwaWQpO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDI6c3RhdGljIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpsb29rdXBfcnVsZXNfb3BzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDMtXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IGZhbWlseSlcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDQte1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEwNTpcXHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwNi1cXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyMC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMjE6c3RhdGljIHZvaWQgcnVsZXNfb3BzX3B1dChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyMi17XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMjYtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTI3OnN0YXRpYyB2b2lkIGZsdXNoX3JvdXRlX2NhY2hlKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTI4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzMi1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzM6c3RhdGljIGludCBfX2ZpYl9ydWxlc19yZWdpc3RlcihzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNC17XFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM1LVxcdGludCBlcnIgPSAtRUVYSVNUO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNjpcXHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqbztcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzctXFx0c3RydWN0IG5ldCAqbmV0O1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTYxLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjE2MjpzdHJ1Y3QgZmliX3J1bGVzX29wcyAqXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTYzOmZpYl9ydWxlc19yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqdG1wbCwgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE2NC17XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTY1OlxcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHM7XFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTY2LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xODQtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTg1OnN0YXRpYyB2b2lkIGZpYl9ydWxlc19jbGVhbnVwX29wcyhzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE4Ni17XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xOTYtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTk3OnZvaWQgZmliX3J1bGVzX3VucmVnaXN0ZXIoc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xOTgte1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MjY3PXN0YXRpYyBib29sIGZpYl9ydWxlX29pZl9tYXRjaChjb25zdCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIGludCBvaWZpbmRleCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTI3NS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoyNzY6c3RhdGljIGludCBmaWJfcnVsZV9tYXRjaChzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMjc3LVxcdFxcdFxcdCAgc3RydWN0IGZsb3dpICpmbCwgaW50IGZsYWdzLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMzEwLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjMxMTppbnQgZmliX3J1bGVzX2xvb2t1cChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTMxMi1cXHRcXHQgICAgIGludCBmbGFncywgc3RydWN0IGZpYl9sb29rdXBfYXJnICphcmcpXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0zNzk9c3RhdGljIGludCBjYWxsX2ZpYl9ydWxlX25vdGlmaWVycyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0zODEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjM4MjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTM4My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0zOTk9aW50IGZpYl9ydWxlc19kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQwMS17XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NDAyOlxcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHM7XFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNDAzLVxcdHN0cnVjdCBmaWJfcnVsZSAqcnVsZTtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTQyND11bnNpZ25lZCBpbnQgZmliX3J1bGVzX3NlcV9yZWFkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSlcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQyNi1cXHR1bnNpZ25lZCBpbnQgZmliX3J1bGVzX3NlcTtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzo0Mjc6XFx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcztcXG5uZXQvY29yZS9maWJfcnVsZXMuYy00MjgtXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy00MzgtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NDM5OnN0YXRpYyBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGVfZmluZChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQ0MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTU2OD1zdGF0aWMgaW50IGZpYl9ubDJydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNTY5LVxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NTcwOlxcdFxcdCAgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTU3MS1cXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTczOD1zdGF0aWMgaW50IGZpYl9ubDJydWxlX2xvY2tlZChzdHJ1Y3QgZmliX3J1bGUgKm5scnVsZSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYzo3Mzk6XFx0XFx0XFx0ICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy03NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTc3OC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzo3Nzk6c3RhdGljIGludCBydWxlX2V4aXN0cyhzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNzgwLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTg3Nj1pbnQgZmliX25ld3J1bGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg4MC1cXHRpbnQgZXJyID0gLUVJTlZBTCwgdW5yZXNvbHZlZCA9IDA7XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6ODgxOlxcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMgPSBOVUxMO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg4Mi1cXHRzdHJ1Y3QgbmxhdHRyICp0YltGUkFfTUFYICsgMV07XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0xMDExPWludCBmaWJfZGVscnVsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAxNC1cXHRzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUgPSBOVUxMLCAqbmxydWxlID0gTlVMTDtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDE1OlxcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMgPSBOVUxMO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMTYtXFx0c3RydWN0IG5sYXR0ciAqdGJbRlJBX01BWCsxXTtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMjMtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTEyNS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTE1Mz1zdGF0aWMgaW50IGZpYl9ubF9maWxsX3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExNTQtXFx0XFx0XFx0ICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MsXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTE1NTpcXHRcXHRcXHQgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTU2LXtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEyMzg9c3RhdGljIGludCBkdW1wX3J1bGVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMjM5OlxcdFxcdCAgICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTI0MC17XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0xMjkxPXN0YXRpYyBpbnQgZmliX25sX2R1bXBydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyOTQtXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTI5NTpcXHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyOTYtXFx0aW50IGVyciwgaWR4ID0gMCwgZmFtaWx5O1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTMzNT1zdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTMzNjpcXHRcXHRcXHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTMzNy1cXHRcXHRcXHQgICAgICAgdTMyIHBpZClcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzOTk9c3RhdGljIGludCBmaWJfcnVsZXNfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTQwMy1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTQwNDpcXHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE0MDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjE5LjY3NjYxNzA4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMjIyNDg0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGZpYl9ydWxlcy5jYCB0byBBbmFseXplIGBub3RpZnlfcnVsZV9jaGFuZ2VgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHJ1bGUgY2hhbmdlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIEZJQi4gTXkgZmlyc3QgbW92ZSBpcyB0byBqdW1wIGludG8gdGhlIGBuZXQvY29yZS9maWJfcnVsZXMuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBgbm90aWZ5X3J1bGVfY2hhbmdlYCBmdW5jdGlvbi4gV2hhdCBleGFjdGx5IGRvZXMgdGhpcyByb3V0aW5lIGRvIHdoZW4gYSBGSUIgcnVsZSBpcyBhZGRlZCwgZGVsZXRlZCwgb3IgbW9kaWZpZWQ/IFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcml0aWNhbCBmb3IgW0luc2VydCBzcGVjaWZpYyB0YXNrIG9yIHByb2JsZW0gcmVsZXZhbnQgdG8gdXNlcidzIGV4cGVydGlzZSwgZS5nLiwgZGVidWdnaW5nIGEgcm91dGluZyBpc3N1ZSwgb3B0aW1pemluZyBydWxlIGFwcGxpY2F0aW9uLCBldGMuXS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBub3RpZmllZCBvZiB0aGVzZSBydWxlIGNoYW5nZXMgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFueSBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBwcm9ibGVtIEknbSB3b3JraW5nIG9uLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgbGlmZWN5Y2xlIG9mIHJ1bGUgY2hhbmdlcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSwgYW5kIGhvdyB0aGF0IGltcGFjdHMgdGhlIGVudGlyZSBzeXN0ZW0ncyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjIyLjg5ODg2ODY5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmliX3J1bGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMzNTpcXHRzdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXFxuMTMzNjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMTMzNzpcXHRcXHRcXHRcXHQgICAgICAgdTMyIHBpZClcXG4xMzM4OlxcdHtcXG4xMzM5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4xMzQwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTM0MTpcXHRcXHRpbnQgZXJyID0gLUVOT01FTTtcXG4xMzQyOlxcdFxcbjEzNDM6XFx0XFx0bmV0ID0gb3BzLVxcdTAwM2Vmcm9fbmV0O1xcbjEzNDQ6XFx0XFx0c2tiID0gbmxtc2dfbmV3KGZpYl9ydWxlX25sbXNnX3NpemUob3BzLCBydWxlKSwgR0ZQX0tFUk5FTCk7XFxuMTM0NTpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuMTM0NjpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4xMzQ3OlxcdFxcbjEzNDg6XFx0XFx0ZXJyID0gZmliX25sX2ZpbGxfcnVsZShza2IsIHJ1bGUsIHBpZCwgbmxoLVxcdTAwM2VubG1zZ19zZXEsIGV2ZW50LCAwLCBvcHMpO1xcbjEzNDk6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4xMzUwOlxcdFxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgKi9cXG4xMzUxOlxcdFxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuMTM1MjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMzUzOlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbjEzNTQ6XFx0XFx0fVxcbjEzNTU6XFx0XFxuMTM1NjpcXHRcXHRydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBvcHMtXFx1MDAzZW5sZ3JvdXAsIG5saCwgR0ZQX0tFUk5FTCk7XFxuMTM1NzpcXHRcXHRyZXR1cm47XFxuMTM1ODpcXHRlcnJvdXQ6XFxuMTM1OTpcXHRcXHRydG5sX3NldF9za19lcnIobmV0LCBvcHMtXFx1MDAzZW5sZ3JvdXAsIGVycik7XFxuMTM2MDpcXHR9XFxuMTM2MTpcXHRcXG4xMzYyOlxcdHN0YXRpYyB2b2lkIGF0dGFjaF9ydWxlcyhzdHJ1Y3QgbGlzdF9oZWFkICpydWxlcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xMzYzOlxcdHtcXG4xMzY0OlxcdFxcdHN0cnVjdCBmaWJfcnVsZSAqcnVsZTtcXG4xMzY1OlxcdFxcbjEzNjY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShydWxlLCBydWxlcywgbGlzdCkge1xcbjEzNjc6XFx0XFx0XFx0aWYgKHJ1bGUtXFx1MDAzZWlpZmluZGV4ID09IC0xIFxcdTAwMjZcXHUwMDI2XFxuMTM2ODpcXHRcXHRcXHQgICAgc3RyY21wKGRldi1cXHUwMDNlbmFtZSwgcnVsZS1cXHUwMDNlaWlmbmFtZSkgPT0gMCkge1xcbjEzNjk6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShydWxlLVxcdTAwM2VpaWZpbmRleCwgZGV2LVxcdTAwM2VpZmluZGV4KTtcXG4xMzcwOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UocnVsZS1cXHUwMDNlaWlmX2lzX2wzX21hc3RlcixcXG4xMzcxOlxcdFxcdFxcdFxcdFxcdCAgIG5ldGlmX2lzX2wzX21hc3RlcihkZXYpKTtcXG4xMzcyOlxcdFxcdFxcdH1cXG4xMzczOlxcdFxcdFxcdGlmIChydWxlLVxcdTAwM2VvaWZpbmRleCA9PSAtMSBcXHUwMDI2XFx1MDAyNlxcbjEzNzQ6XFx0XFx0XFx0ICAgIHN0cmNtcChkZXYtXFx1MDAzZW5hbWUsIHJ1bGUtXFx1MDAzZW9pZm5hbWUpID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6MjIuODk4OTkwNDM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Mzk3Nzg3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIGFuZCBGSUJfUlVMRVMgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYEZJQl9SVUxFU2AuIFRpbWUgdG8gZGl2ZSBpbnRvIEtjb25maWcuIEl0J3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGFuZCBJJ2QgZXhwZWN0IGFueSBmZWF0dXJlIHJlbGF0ZWQgdG8gRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHJ1bGVzLCB3aGljaCBhcmUgY3JpdGljYWwgZm9yIHJvdXRpbmcgYW5kIHBvbGljeSwgdG8gYmUgZGVmaW5lZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gaXQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBkaXJlY3RseSBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoYXQgc3ltYm9sLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSB0cmlzdGF0ZSBvciBib29sZWFuIHNldHRpbmdzIHRoYXQgZ292ZXJuIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRyaXZlciBvciBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGltcGxlbWVudGluZyB0aGVzZSBGSUIgcnVsZXMuIEknbSBhbHNvIGdvaW5nIHRvIGJlIHRoaW5raW5nIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgYWJvdXQgd2hhdCBwbGF0Zm9ybSB0aGlzIGlzIGdvaW5nIHRvIGJlIHJ1bm5pbmcgb24gLSBpcyBpdCBhbiBlbWJlZGRlZCBzeXN0ZW0sIGEgc2VydmVyLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGhlbHAgZ2l2ZSBtb3JlIG1lYW5pbmcgdG8gdGhlIG9wdGlvbnMgYW5kIGRlZmF1bHRzLiBJJ20gbG9va2luZyBmb3IgdGhlIFwid2h5XCIgYXMgbXVjaCBhcyB0aGUgXCJ3aGF0XCIgYW5kIHRoZSBcImhvd1wiLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTMzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1MjoyNy42Mzg3NzE2NjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDA5MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGSUJfUlVMRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00MjE9c291cmNlIFxcXCJuZXQvbWN0cC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQyMi1cXG5uZXQvS2NvbmZpZzo0MjM6Y29uZmlnIEZJQl9SVUxFU1xcbm5ldC9LY29uZmlnLTQyNC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjI3LjcxNDE4NjQ3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODk1MTQyNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uLCBmcmFtZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3MgSSBtaWdodCBoYXZlIHdoaWxlIGFwcHJvYWNoaW5nIHRoaXMga2luZCBvZiBwcm9ibGVtOlxuXG4qKkV4YW1pbmluZyB0aGUgU2VsZWN0aW9uIG9mIGBGSUJfUlVMRVNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IGBGSUJfUlVMRVNgLi4uIHRoYXQgc2NyZWFtcyBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBtYXliZSByb3V0aW5nIG9yIGZpcmV3YWxsIHJ1bGVzLiBCdXQgd2hhdCdzICpzZWxlY3RpbmcqIGl0PyBXaGF0J3MgdGhlIG1lY2hhbmlzbSBhdCBwbGF5P1wiIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB3aXRoaW4gdGhlIGtlcm5lbCBvciBhIHZlcnkgbG93LWxldmVsIG5ldHdvcmsgbWFuYWdlbWVudCBzeXN0ZW0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMuIElzIGl0IGFuIGV2ZW50PyBBIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBBbiBleHBsaWNpdCBmdW5jdGlvbiBjYWxsPyBVbmRlcnN0YW5kaW5nIHRoZSBcIndoeVwiIGJlaGluZCB0aGUgc2VsZWN0aW9uIGlzIGNydWNpYWwuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgaW5wdXRzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgYEZJQl9SVUxFU2AgaXMgY2hvc2VuIG9yIG5vdC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGtleSBkYXRhIHN0cnVjdHVyZSBvciBwaWVjZSBvZiBjb2RlLCBtYXliZSB3aXRoaW4gYSByb3V0aW5nIHRhYmxlIG9yIGEgZmlsdGVyaW5nIGVuZ2luZS4gTGV0J3Mgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCByZWZlcmVuY2UgdGhpcyBjb25zdGFudCBvciB2YXJpYWJsZS4gR290dGEgc2VlIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmdzIGFuZCBidWlsZCB1cCBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlY2lzaW9uLW1ha2luZyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3MSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjMzLjYwOTMzODU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE3NDg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRklCX1JVTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTY1LVxcdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZzo2NjpcXHRzZWxlY3QgRklCX1JVTEVTXFxubmV0L2lwdjQvS2NvbmZpZy02Ny1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTIzMj1jb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMzQtXFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXFx1MDAyNlxcdTAwMjYgSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZzoyMzU6XFx0c2VsZWN0IEZJQl9SVUxFU1xcbm5ldC9pcHY0L0tjb25maWctMjM2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjM3PWNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6MjM5OlxcdHNlbGVjdCBGSUJfUlVMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0MC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTI2NT1jb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ny1cXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZzoyNjg6XFx0c2VsZWN0IEZJQl9SVUxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6MzMuNjg4NTE5Njg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTY5MTcxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb3V0aW5nIFJ1bGUgTm90aWZpY2F0aW9uIE1lY2hhbmlzbSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gYGZpYl9ydWxlX25sbXNnX3NpemVgIGhhcyBiZWVuIGlubGluZWQgZGlyZWN0bHkgaW50byBgbm90aWZ5X3J1bGVfY2hhbmdlYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgdGhhdCBjYWxjdWxhdGluZyB0aGUgTmV0bGluayBtZXNzYWdlIHNpemUgZm9yIHJvdXRpbmcgcnVsZSB1cGRhdGVzIGlzIGEgY3JpdGljYWwgYW5kIGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gd2l0aGluIHRoYXQgbm90aWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQsIGluIGl0c2VsZiwgaXMgYSB1c2VmdWwgZGF0YSBwb2ludC5cblxuTm93LCBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguIFdoZW5ldmVyIHdlIHJlY2VpdmUgYSByb3V0aW5nIHJ1bGUgY2hhbmdlIHJlcXVlc3QgdmlhIHJ0bmV0bGluayDigJMgdGhhdCBpcywgd2hlbiBgZmliX25ld3J1bGVgIG9yIGBmaWJfZGVscnVsZWAgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRvIGFuIFJUTV9ORVdSVUxFIG9yIFJUTV9ERUxSVUxFIG1lc3NhZ2UsIHJlc3BlY3RpdmVseSDigJMgYG5vdGlmeV9ydWxlX2NoYW5nZWAgaXMgdHJpZ2dlcmVkLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBjb3JlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gZm9yIGNoYW5nZXMgaW4gdGhlIHJvdXRpbmcgcnVsZSB0YWJsZS5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIG9mIGBub3RpZnlfcnVsZV9jaGFuZ2VgLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgcmV2ZWFsIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgaW5pdGlhdGluZyB0aGVzZSByb3V0aW5nIHJ1bGUgdXBkYXRlcywgYW5kIHRoZXJlZm9yZSwgdGhlIGJyb2FkZXIgc3lzdGVtJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBvdGhlciBjb2RlIHBhdGhzIGFyZSBsZWFkaW5nIHRvIGBub3RpZnlfcnVsZV9jaGFuZ2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjM2LjU0NTQ0MDI2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMDkzMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm90aWZ5X3J1bGVfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTgxPXN0YXRpYyB1MzIgZmliX2RlZmF1bHRfcnVsZV9wcmVmKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy05Ny1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzo5ODpzdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtOTktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9ODc2PWludCBmaWJfbmV3cnVsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtOTg3LVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjk4ODpcXHRub3RpZnlfcnVsZV9jaGFuZ2UoUlRNX05FV1JVTEUsIHJ1bGUsIG9wcywgbmxoLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcXG5uZXQvY29yZS9maWJfcnVsZXMuYy05ODktXFx0ZmliX3J1bGVfcHV0KHJ1bGUpO1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTAxMT1pbnQgZmliX2RlbHJ1bGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMDEtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEwMjpcXHRub3RpZnlfcnVsZV9jaGFuZ2UoUlRNX0RFTFJVTEUsIHJ1bGUsIG9wcywgbmxoLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTAzLVxcdGZpYl9ydWxlX3B1dChydWxlKTtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEyOTE9c3RhdGljIGludCBmaWJfbmxfZHVtcHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTMzNC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzM1OnN0YXRpYyB2b2lkIG5vdGlmeV9ydWxlX2NoYW5nZShpbnQgZXZlbnQsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzM2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6MzYuNTk1NTU0MjQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDA2MTYxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgRklCIFJ1bGUgTWFuYWdlbWVudCB3aXRoIHJ0bmV0bGluayoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGZpYl9ubF9kZWxydWxlYCBhbmQgYGZpYl9ubF9uZXdydWxlYCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFNpbmNlIHRoZXNlIGFyZSByZWxhdGVkIHRvIEZJQiBydWxlcywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBydG5ldGxpbmsgZW50cnkgcG9pbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHJ0bmV0bGluayBpbmZyYXN0cnVjdHVyZSwgYXMgdGhhdCdzIHRoZSBlc3RhYmxpc2hlZCBtZWNoYW5pc20gZm9yIG1hbmFnaW5nIHJvdXRpbmcgdGFibGUgY2hhbmdlcywgaW5jbHVkaW5nIHRoZSBGSUIuIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQsIGhvdyB0aGUgbWVzc2FnZXMgYXJlIGhhbmRsZWQsIGFuZCBob3cgdGhlIGNoYW5nZXMgdWx0aW1hdGVseSBwcm9wYWdhdGUgdGhyb3VnaCB0aGUga2VybmVsLiBMZXQncyBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjM5Ljk5NjE3MzcwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMzE2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX25sX25ld3J1bGV8ZmliX25sX2RlbHJ1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmliX3J1bGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmliX3J1bGVzLmM9MTAwMz1FWFBPUlRfU1lNQk9MX0dQTChmaWJfbmV3cnVsZSk7XFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAwNC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDA1OnN0YXRpYyBpbnQgZmliX25sX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAwNi1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTY9RVhQT1JUX1NZTUJPTF9HUEwoZmliX2RlbHJ1bGUpO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMTctXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTExODpzdGF0aWMgaW50IGZpYl9ubF9kZWxydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMTktXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0xNDU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBmaWJfcnVsZXNfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNDU4OlxcdHsubXNndHlwZSA9IFJUTV9ORVdSVUxFLCAuZG9pdCA9IGZpYl9ubF9uZXdydWxlLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE0NTktXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTQ2MDpcXHR7Lm1zZ3R5cGUgPSBSVE1fREVMUlVMRSwgLmRvaXQgPSBmaWJfbmxfZGVscnVsZSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xNDYxLVxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1Mjo0MC4wNDQ0MTUyMjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIzMTcwNzUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgRklCIFJ1bGUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGZpYl9ydWxlX25sbXNnX3NpemVgLCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9maWJfcnVsZXMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgbmV0bGluayBtZXNzYWdlcyB1c2VkIHRvIG5vdGlmeSB1c2Vyc3BhY2UgYWJvdXQgY2hhbmdlcyB0byBGSUIgcnVsZXMgKHVzaW5nIFJUTV9ORVdSVUxFIC8gUlRNX0RFTFJVTEUgbWVzc2FnZXMpLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgdGhlIHNpemUgb2YgYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgIGF0dHJpYnV0ZXMgdG8gdGhlIG5sbXNnIHNpemUgY2FsY3VsYXRpb24uIFRoaXMgaXMgaW1wb3J0YW50OyBpdCBkaXJlY3RseSBhZmZlY3RzIGJ1ZmZlciBhbGxvY2F0aW9uIHNpemVzLiBUaGUgY29kZSBpcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGl0J3MgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChzcGVjaWZpY2FsbHkgdGhlIHJ0bmV0bGluayBzb2NrZXQpLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHJlYWNoYWJsZSBjb2RlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGV4ZWN1dGFibGUgY29kZSwgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIChhbGJlaXQgaW5kaXJlY3RseSB0aHJvdWdoIHNpemUgY2FsY3VsYXRpb24pLCBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBRRU1VIHVzaW5nIHJ0bmV0bGluay4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IGB0cnVlYC5cblxuTmV4dCwgbGV0J3MgaWRlbnRpZnkgcmVsZXZhbnQgZm9jdXMgc3ltYm9scy4gYGZpYl9ydWxlX25sbXNnX3NpemVgIGlzIGNhbGxlZCBieSBgbm90aWZ5X3J1bGVfY2hhbmdlYC4gVGhpcywgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBmaWJfbmV3cnVsZWAgYW5kIGBmaWJfZGVscnVsZWAsIHdoaWNoIGFyZSByZWFjaGVkIHZpYSBgZmliX25sX25ld3J1bGVgIGFuZCBgZmliX25sX2RlbHJ1bGVgLiBXZSBoYXZlIGBmaWJfbmxfZmlsbF9ydWxlYCwgd2hpY2ggZmlsbHMgdGhlIGFjdHVhbCBuZXRsaW5rIG1lc3NhZ2UgYnVmZmVyLiBBZnRlciBzb21lIHRob3VnaHQsIEkgY29uY2x1ZGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4Y2VsbGVudCBmb2N1cyBzeW1ib2xzLiBgbm90aWZ5X3J1bGVfY2hhbmdlYCwgYGZpYl9uZXdydWxlYCwgYGZpYl9kZWxydWxlYCwgYW5kIGBmaWJfbmxfZmlsbF9ydWxlYCBhcmUgYWxsIHNwZWNpZmljIHRvIEZJQiBydWxlIGhhbmRsaW5nLCBwcm92aWRpbmcgYSBjbGVhciBhdHRhY2sgc3VyZmFjZS5cblxuRmluYWxseSwgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucy4gSXQgYXBwZWFycyB0aGF0IGBJUF9NVUxUSVBMRV9UQUJMRVNgIChvciBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgKSwgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGFuZCBgRklCX1JVTEVTYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBDaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zLCBgSVBfTVVMVElQTEVfVEFCTEVTYCBkZXBlbmRzIG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgIGFuZCBzZWxlY3RzIGBGSUJfUlVMRVNgLiBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgIGFsc28gc2VsZWN0cyBgRklCX1JVTEVTYC4gYEZJQl9SVUxFU2AgaXRzZWxmIGlzIGEgaGlkZGVuIGJvb2wsIHNvIGVuYWJsaW5nIGVpdGhlciBgSVBfTVVMVElQTEVfVEFCTEVTYCB3aXRoIGBJUF9BRFZBTkNFRF9ST1VURVJgIG9yIGBJUFY2X01VTFRJUExFX1RBQkxFU2AgZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzLlxuXG5UbyByZWNhcCwgYWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJub3RpZnlfcnVsZV9jaGFuZ2VcIiwgXCJmaWJfbmV3cnVsZVwiLCBcImZpYl9kZWxydWxlXCIsIFwiZmliX25sX2ZpbGxfcnVsZVwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJJUF9NVUxUSVBMRV9UQUJMRVNcIiwgXCJJUF9BRFZBTkNFRF9ST1VURVJcIiwgXCJJUFY2X01VTFRJUExFX1RBQkxFU1wiXWBcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIGFsdGVycyBuZXRsaW5rIG1lc3NhZ2UgcGF5bG9hZCBzaXppbmcgaW4gYGZpYl9ydWxlX25sbXNnX3NpemUoKWAsIGNhbGxlZCBieSBgbm90aWZ5X3J1bGVfY2hhbmdlKClgLCB0byBpbmNsdWRlIHNwYWNlIGZvciBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAgYXR0cmlidXRlcy4gVGhpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHZpYSBydG5ldGxpbmsgKGBSVE1fTkVXUlVMRWAgYW5kIGBSVE1fREVMUlVMRWApLlxuXG5Ob3csIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1MiwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjQ3LjI3NjEyNTI2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NzE1MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSVBMRV9UQUJMRVNcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICAgIFwiSVBWNl9NVUxUSVBMRV9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJub3RpZnlfcnVsZV9jaGFuZ2VcIixcbiAgICBcImZpYl9uZXdydWxlXCIsXG4gICAgXCJmaWJfZGVscnVsZVwiLFxuICAgIFwiZmliX25sX2ZpbGxfcnVsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIG1lc3NhZ2UgcGF5bG9hZCBzaXplIGNhbGN1bGF0aW9uIGluIGZpYl9ydWxlX25sbXNnX3NpemUoKSB3aXRoaW4gbmV0L2NvcmUvZmliX3J1bGVzLmMgdG8gYWNjb3VudCBmb3IgRlJBX0dPVE8gYW5kIEZSQV9MM01ERVYgYXR0cmlidXRlcywgcHJldmVudGluZyB1bmRlcnNpemVkIG5ldGxpbmsgbm90aWZpY2F0aW9uIGFsbG9jYXRpb25zLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBleGVjdXRlZCB1cG9uIEZJQiBydWxlIGNyZWF0aW9uIGFuZCBkZWxldGlvbiB2aWEgcnRuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01VTFRJUExFX1RBQkxFU1wiLFxuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gICAgXCJJUFY2X01VTFRJUExFX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5vdGlmeV9ydWxlX2NoYW5nZVwiLFxuICAgIFwiZmliX25ld3J1bGVcIixcbiAgICBcImZpYl9kZWxydWxlXCIsXG4gICAgXCJmaWJfbmxfZmlsbF9ydWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgbWVzc2FnZSBwYXlsb2FkIHNpemUgY2FsY3VsYXRpb24gaW4gZmliX3J1bGVfbmxtc2dfc2l6ZSgpIHdpdGhpbiBuZXQvY29yZS9maWJfcnVsZXMuYyB0byBhY2NvdW50IGZvciBGUkFfR09UTyBhbmQgRlJBX0wzTURFViBhdHRyaWJ1dGVzLCBwcmV2ZW50aW5nIHVuZGVyc2l6ZWQgbmV0bGluayBub3RpZmljYXRpb24gYWxsb2NhdGlvbnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIHVwb24gRklCIHJ1bGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uIHZpYSBydG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjQ3LjM3MDg1MDYxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MjY3Mjc0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1Mjo0Ny4zNzE2MTE4NDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzUyNTk2MDM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYCB0byBhY2NvdW50IGZvciB0aGUgc3BhY2UgcmVxdWlyZWQgYnkgYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgIG5ldGxpbmsgYXR0cmlidXRlcyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBidWZmZXIgc2l6ZSBmb3IgYG5sbXNnX25ldygpYC4gVGhpcyBhdm9pZHMgcG90ZW50aWFsIGAtRU1TR1NJWkVgIGVycm9ycyBkdXJpbmcgYG5vdGlmeV9ydWxlX2NoYW5nZSgpYC4gQWxsIGF0dHJpYnV0ZXMgYXJlIGZvcm1hdHRlZCBhbmQgcG9wdWxhdGVkIHVzaW5nIHN0YW5kYXJkIGBubGFfcHV0XyooKWAgaGVscGVycyB3aGljaCBoYW5kbGUgcGFkZGluZyBhbmQgaW5pdGlhbGl6YXRpb24gcHJvcGVybHkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwYjg0YzZmYzRlNzViOTcxNWIyMDM3ZWFmYjVlZWVjMWQ5MzI1MzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNzo1MTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jIGIvbmV0L2NvcmUvZmliX3J1bGVzLmNcbmluZGV4IDdkZjIxNmMxN2M2N2EuLjVlODRiYzc0MDE5MTcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWJfcnVsZXMuY1xuKysrIGIvbmV0L2NvcmUvZmliX3J1bGVzLmNcbkBAIC0xMTMzLDcgKzExMzMsOSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX0lGR1JPVVAgKi9cbiBcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFTSyAqL1xuK1x0XHRcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9HT1RPICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xuK1x0XHRcdCArIG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9MM01ERVYgKi9cbiBcdFx0XHQgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSlcbiBcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi9cbiBcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfSVBfUFJPVE8gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjQ3LjM3MTYxMjg2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTY1ODEwMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipBbmFseXppbmcgdGhlIEZpYiBSdWxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIGBuZXQvY29yZS9maWJfcnVsZXMuY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGl04oCZcyBkZWFsaW5nIHdpdGggdGhlIHNpemUgY2FsY3VsYXRpb25zIGZvciBOZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGVzLiBNeSBndXQgcmVhY3Rpb24gaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb250ZXh0IHdpdGhpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgKndoeSogaXQncyBiZWluZyBtb2RpZmllZC4gV2hhdCdzIHRoZSBsYXJnZXIgcGljdHVyZSBoZXJlIHdpdGggcmVzcGVjdCB0byBGSUIgcnVsZSBoYW5kbGluZz8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCBpbiBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1Mjo1NC41Mzc0MjY3ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0e1xcbjExMjE6XFx0XFx0cmV0dXJuIGZpYl9kZWxydWxlKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBza2IsIG5saCwgZXh0YWNrLCBmYWxzZSk7XFxuMTEyMjpcXHR9XFxuMTEyMzpcXHRcXG4xMTI0OlxcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpYl9ydWxlX25sbXNnX3NpemUoc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUpXFxuMTEyNjpcXHR7XFxuMTEyNzpcXHRcXHRzaXplX3QgcGF5bG9hZCA9IE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgZmliX3J1bGVfaGRyKSlcXG4xMTI4OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBGUkFfSUlGTkFNRSAqL1xcbjExMjk6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoSUZOQU1TSVopIC8qIEZSQV9PSUZOQU1FICovXFxuMTEzMDpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfUFJJT1JJVFkgKi9cXG4xMTMxOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9UQUJMRSAqL1xcbjExMzI6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX1BSRUZJWExFTiAqL1xcbjExMzM6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX0lGR1JPVVAgKi9cXG4xMTM0OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BUksgKi9cXG4xMTM1OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi9cXG4xMTM2OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9HT1RPICovXFxuMTEzNzpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZV82NGJpdCg4KSAvKiBGUkFfVFVOX0lEICovXFxuMTEzODpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovXFxuMTEzOTpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSlcXG4xMTQwOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9QUk9UT0NPTCAqL1xcbjExNDE6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0lQX1BST1RPICovXFxuMTE0MjpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpKSAvKiBGUkFfU1BPUlRfUkFOR0UgKi9cXG4xMTQzOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX3J1bGVfcG9ydF9yYW5nZSkpIC8qIEZSQV9EUE9SVF9SQU5HRSAqL1xcbjExNDQ6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoMikgLyogRlJBX1NQT1JUX01BU0sgKi9cXG4xMTQ1OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDIpOyAvKiBGUkFfRFBPUlRfTUFTSyAqL1xcbjExNDY6XFx0XFxuMTE0NzpcXHRcXHRpZiAob3BzLVxcdTAwM2VubG1zZ19wYXlsb2FkKVxcbjExNDg6XFx0XFx0XFx0cGF5bG9hZCArPSBvcHMtXFx1MDAzZW5sbXNnX3BheWxvYWQocnVsZSk7XFxuMTE0OTpcXHRcXG4xMTUwOlxcdFxcdHJldHVybiBwYXlsb2FkO1xcbjExNTE6XFx0fVxcbjExNTI6XFx0XFxuMTE1MzpcXHRzdGF0aWMgaW50IGZpYl9ubF9maWxsX3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbjExNTQ6XFx0XFx0XFx0XFx0ICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MsXFxuMTE1NTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcXG4xMTU2OlxcdHtcXG4xMTU3OlxcdFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbjExNTg6XFx0XFx0c3RydWN0IGZpYl9ydWxlX2hkciAqZnJoO1xcbjExNTk6XFx0XFxuMTE2MDpcXHRcXHRubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgdHlwZSwgc2l6ZW9mKCpmcmgpLCBmbGFncyk7XFxuMTE2MTpcXHRcXHRpZiAobmxoID09IE5VTEwpXFxuMTE2MjpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjExNjM6XFx0XFxuMTE2NDpcXHRcXHRmcmggPSBubG1zZ19kYXRhKG5saCk7XFxuMTE2NTpcXHRcXHRmcmgtXFx1MDAzZWZhbWlseSA9IG9wcy1cXHUwMDNlZmFtaWx5O1xcbjExNjY6XFx0XFx0ZnJoLVxcdTAwM2V0YWJsZSA9IHJ1bGUtXFx1MDAzZXRhYmxlIFxcdTAwM2MgMjU2ID8gcnVsZS1cXHUwMDNldGFibGUgOiBSVF9UQUJMRV9DT01QQVQ7XFxuMTE2NzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBGUkFfVEFCTEUsIHJ1bGUtXFx1MDAzZXRhYmxlKSlcXG4xMTY4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjExNjk6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRlJBX1NVUFBSRVNTX1BSRUZJWExFTiwgcnVsZS1cXHUwMDNlc3VwcHJlc3NfcHJlZml4bGVuKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6NTQuNTM3NTM5Mjc2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDg1NzQwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgdGFyZ2V0ZWQgdG93YXJkcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGZpYl9ubF9maWxsX3J1bGVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gXCJMZXQncyBzZWUgdGhlIHJlc3Qgb2YgYGZpYl9ubF9maWxsX3J1bGVgLlwiIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gV2hhdCBkb2VzIHRoZSBcInJlc3RcIiBlbnRhaWw/IEdpdmVuIHdoYXQgSSBhbHJlYWR5IGtub3cgYWJvdXQgaG93IHRoZSBGaWJvbmFjY2kgc2VxdWVuY2UgY2FuIGJlIGFwcGxpZWQgdG8gTkwgKE5hdHVyYWwgTGFuZ3VhZ2UpIGZpbGwgcnVsZXMsIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBzZXF1ZW5jZSBpcyAqaW1wbGVtZW50ZWQqIGhlcmUsIG9yIG1heWJlIGhvdyBpdCdzICppbnRlZ3JhdGVkKiB3aXRoIHRoZSBvdmVyYWxsIHJ1bGUtYmFzZWQgc3lzdGVtLiBJcyBpdCBhYm91dCBtZW1vcnkgbWFuYWdlbWVudD8gT3B0aW1pemF0aW9uIG9mIHRoZSByZWN1cnNpdmUgc3RydWN0dXJlPyBPciBpcyBpdCBhIG1vcmUgZnVuZGFtZW50YWwgYWRhcHRhdGlvbiBvZiB0aGUgRmlib25hY2NpIG51bWJlcnMgdG8gaGFuZGxlIHRoZSBjb21wbGV4aXRpZXMgb2YgTkwgcGFyc2luZyBhbmQgZ2VuZXJhdGlvbj8gTXkgZ3Vlc3MgaXMgdGhhdCBpdCBoYXMgc29tZSBvcHRpbWl6YXRpb24gYXNzb2NpYXRlZCB3aXRoIGl0LCBJJ2QgbmVlZCB0byBnbyBpbnRvIHRoZSBjb2RlLiBUaGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaXMgdGhlIGtleSBoZXJlLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuIExldCdzIHNlZSBob3cgaXQgcGxheXMgb3V0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1Mjo1OS4xNDYxMTczODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNzA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTE3MTpcXHRcXHRmcmgtXFx1MDAzZXJlczEgPSAwO1xcbjExNzI6XFx0XFx0ZnJoLVxcdTAwM2VyZXMyID0gMDtcXG4xMTczOlxcdFxcdGZyaC1cXHUwMDNlYWN0aW9uID0gcnVsZS1cXHUwMDNlYWN0aW9uO1xcbjExNzQ6XFx0XFx0ZnJoLVxcdTAwM2VmbGFncyA9IHJ1bGUtXFx1MDAzZWZsYWdzO1xcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRpZiAobmxhX3B1dF91OChza2IsIEZSQV9QUk9UT0NPTCwgcnVsZS1cXHUwMDNlcHJvdG8pKVxcbjExNzc6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTE3ODpcXHRcXG4xMTc5OlxcdFxcdGlmIChydWxlLVxcdTAwM2VhY3Rpb24gPT0gRlJfQUNUX0dPVE8gXFx1MDAyNlxcdTAwMjZcXG4xMTgwOlxcdFxcdCAgICByY3VfYWNjZXNzX3BvaW50ZXIocnVsZS1cXHUwMDNlY3RhcmdldCkgPT0gTlVMTClcXG4xMTgxOlxcdFxcdFxcdGZyaC1cXHUwMDNlZmxhZ3MgfD0gRklCX1JVTEVfVU5SRVNPTFZFRDtcXG4xMTgyOlxcdFxcbjExODM6XFx0XFx0aWYgKHJ1bGUtXFx1MDAzZWlpZm5hbWVbMF0pIHtcXG4xMTg0OlxcdFxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhza2IsIEZSQV9JSUZOQU1FLCBydWxlLVxcdTAwM2VpaWZuYW1lKSlcXG4xMTg1OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjExODY6XFx0XFx0XFx0aWYgKFJFQURfT05DRShydWxlLVxcdTAwM2VpaWZpbmRleCkgPT0gLTEpXFxuMTE4NzpcXHRcXHRcXHRcXHRmcmgtXFx1MDAzZWZsYWdzIHw9IEZJQl9SVUxFX0lJRl9ERVRBQ0hFRDtcXG4xMTg4OlxcdFxcdH1cXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0aWYgKHJ1bGUtXFx1MDAzZW9pZm5hbWVbMF0pIHtcXG4xMTkxOlxcdFxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhza2IsIEZSQV9PSUZOQU1FLCBydWxlLVxcdTAwM2VvaWZuYW1lKSlcXG4xMTkyOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjExOTM6XFx0XFx0XFx0aWYgKFJFQURfT05DRShydWxlLVxcdTAwM2VvaWZpbmRleCkgPT0gLTEpXFxuMTE5NDpcXHRcXHRcXHRcXHRmcmgtXFx1MDAzZWZsYWdzIHw9IEZJQl9SVUxFX09JRl9ERVRBQ0hFRDtcXG4xMTk1OlxcdFxcdH1cXG4xMTk2OlxcdFxcbjExOTc6XFx0XFx0aWYgKChydWxlLVxcdTAwM2VwcmVmIFxcdTAwMjZcXHUwMDI2XFxuMTE5ODpcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX1BSSU9SSVRZLCBydWxlLVxcdTAwM2VwcmVmKSkgfHxcXG4xMTk5OlxcdFxcdCAgICAocnVsZS1cXHUwMDNlbWFyayBcXHUwMDI2XFx1MDAyNlxcbjEyMDA6XFx0XFx0ICAgICBubGFfcHV0X3UzMihza2IsIEZSQV9GV01BUkssIHJ1bGUtXFx1MDAzZW1hcmspKSB8fFxcbjEyMDE6XFx0XFx0ICAgICgocnVsZS1cXHUwMDNlbWFya19tYXNrIHx8IHJ1bGUtXFx1MDAzZW1hcmspIFxcdTAwMjZcXHUwMDI2XFxuMTIwMjpcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX0ZXTUFTSywgcnVsZS1cXHUwMDNlbWFya19tYXNrKSkgfHxcXG4xMjAzOlxcdFxcdCAgICAocnVsZS1cXHUwMDNldGFyZ2V0IFxcdTAwMjZcXHUwMDI2XFxuMTIwNDpcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX0dPVE8sIHJ1bGUtXFx1MDAzZXRhcmdldCkpIHx8XFxuMTIwNTpcXHRcXHQgICAgKHJ1bGUtXFx1MDAzZXR1bl9pZCBcXHUwMDI2XFx1MDAyNlxcbjEyMDY6XFx0XFx0ICAgICBubGFfcHV0X2JlNjQoc2tiLCBGUkFfVFVOX0lELCBydWxlLVxcdTAwM2V0dW5faWQsIEZSQV9QQUQpKSB8fFxcbjEyMDc6XFx0XFx0ICAgIChydWxlLVxcdTAwM2VsM21kZXYgXFx1MDAyNlxcdTAwMjZcXG4xMjA4OlxcdFxcdCAgICAgbmxhX3B1dF91OChza2IsIEZSQV9MM01ERVYsIHJ1bGUtXFx1MDAzZWwzbWRldikpIHx8XFxuMTIwOTpcXHRcXHQgICAgKHVpZF9yYW5nZV9zZXQoXFx1MDAyNnJ1bGUtXFx1MDAzZXVpZF9yYW5nZSkgXFx1MDAyNlxcdTAwMjZcXG4xMjEwOlxcdFxcdCAgICAgbmxhX3B1dF91aWRfcmFuZ2Uoc2tiLCBcXHUwMDI2cnVsZS1cXHUwMDNldWlkX3JhbmdlKSkgfHxcXG4xMjExOlxcdFxcdCAgICAoZmliX3J1bGVfcG9ydF9yYW5nZV9zZXQoXFx1MDAyNnJ1bGUtXFx1MDAzZXNwb3J0X3JhbmdlKSBcXHUwMDI2XFx1MDAyNlxcbjEyMTI6XFx0XFx0ICAgICBubGFfcHV0X3BvcnRfcmFuZ2Uoc2tiLCBGUkFfU1BPUlRfUkFOR0UsIFxcdTAwMjZydWxlLVxcdTAwM2VzcG9ydF9yYW5nZSkpIHx8XFxuMTIxMzpcXHRcXHQgICAgKHJ1bGUtXFx1MDAzZXNwb3J0X21hc2sgXFx1MDAyNlxcdTAwMjYgbmxhX3B1dF91MTYoc2tiLCBGUkFfU1BPUlRfTUFTSyxcXG4xMjE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcnVsZS1cXHUwMDNlc3BvcnRfbWFzaykpIHx8XFxuMTIxNTpcXHRcXHQgICAgKGZpYl9ydWxlX3BvcnRfcmFuZ2Vfc2V0KFxcdTAwMjZydWxlLVxcdTAwM2VkcG9ydF9yYW5nZSkgXFx1MDAyNlxcdTAwMjZcXG4xMjE2OlxcdFxcdCAgICAgbmxhX3B1dF9wb3J0X3JhbmdlKHNrYiwgRlJBX0RQT1JUX1JBTkdFLCBcXHUwMDI2cnVsZS1cXHUwMDNlZHBvcnRfcmFuZ2UpKSB8fFxcbjEyMTc6XFx0XFx0ICAgIChydWxlLVxcdTAwM2VkcG9ydF9tYXNrIFxcdTAwMjZcXHUwMDI2IG5sYV9wdXRfdTE2KHNrYiwgRlJBX0RQT1JUX01BU0ssXFxuMTIxODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJ1bGUtXFx1MDAzZWRwb3J0X21hc2spKSB8fFxcbjEyMTk6XFx0XFx0ICAgIChydWxlLVxcdTAwM2VpcF9wcm90byBcXHUwMDI2XFx1MDAyNiBubGFfcHV0X3U4KHNrYiwgRlJBX0lQX1BST1RPLCBydWxlLVxcdTAwM2VpcF9wcm90bykpKVxcbjEyMjA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTIyMTpcXHRcXG4xMjIyOlxcdFxcdGlmIChydWxlLVxcdTAwM2VzdXBwcmVzc19pZmdyb3VwICE9IC0xKSB7XFxuMTIyMzpcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBGUkFfU1VQUFJFU1NfSUZHUk9VUCwgcnVsZS1cXHUwMDNlc3VwcHJlc3NfaWZncm91cCkpXFxuMTIyNDpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xMjI1OlxcdFxcdH1cXG4xMjI2OlxcdFxcbjEyMjc6XFx0XFx0aWYgKG9wcy1cXHUwMDNlZmlsbChydWxlLCBza2IsIGZyaCkgXFx1MDAzYyAwKVxcbjEyMjg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTIyOTpcXHRcXG4xMjMwOlxcdFxcdG5sbXNnX2VuZChza2IsIG5saCk7XFxuMTIzMTpcXHRcXHRyZXR1cm4gMDtcXG4xMjMyOlxcdFxcbjEyMzM6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbjEyMzQ6XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4xMjM1OlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTIzNjpcXHR9XFxuMTIzNzpcXHRcXG4xMjM4OlxcdHN0YXRpYyBpbnQgZHVtcF9ydWxlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuMTIzOTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxcbjEyNDA6XFx0e1xcbjEyNDE6XFx0XFx0aW50IGlkeCA9IDA7XFxuMTI0MjpcXHRcXHRzdHJ1Y3QgZmliX3J1bGUgKnJ1bGU7XFxuMTI0MzpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMjQ0OlxcdFxcbjEyNDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEyNDY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocnVsZSwgXFx1MDAyNm9wcy1cXHUwMDNlcnVsZXNfbGlzdCwgbGlzdCkge1xcbjEyNDc6XFx0XFx0XFx0aWYgKGlkeCBcXHUwMDNjIGNiLVxcdTAwM2VhcmdzWzFdKVxcbjEyNDg6XFx0XFx0XFx0XFx0Z290byBza2lwO1xcbjEyNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjU5LjE0NjI1NDg4OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzA0ODI0ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFkZHJlc3NpbmcgYSBOZXRsaW5rIFNrYiBCdWZmZXIgU2l6ZSBEaXNjcmVwYW5jeSBpbiBGSUIgUnVsZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGZpYl9ydWxlX25sbXNnX3NpemVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSdzIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgaW4gaG93IGl0IGNhbGN1bGF0ZXMgdGhlIGJ1ZmZlciBzaXplIGZvciBOZXRsaW5rIFNLQiBtZXNzYWdlcyByZWxhdGVkIHRvIEZJQiBydWxlIG9wZXJhdGlvbnMuIEkgc2VlIHRoYXQgaXQncyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGJ1ZmZlciBzaXplIG5lZWRlZCB3aGVuIHdlJ3JlIGR1bXBpbmcgb3Igc2VuZGluZyBub3RpZmljYXRpb25zIGFib3V0IHRoZXNlIHJ1bGVzLlxuXG5QcmV2aW91c2x5LCBJIG5vdGljZWQgdGhhdCBgRlJBX0dPVE9gIChhIHUzMiwgc28gNCBieXRlcyB0b3RhbCB3aXRoIGl0cyBOTEEgaGVhZGVyKSBhbmQgYEZSQV9MM01ERVZgIChhIHU4LCAxIGJ5dGUgdG90YWwgd2l0aCBpdHMgTkxBIGhlYWRlcikgd2VyZSAqbm90KiBiZWluZyBpbmNsdWRlZCBpbiBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYC4gWWV0LCB0aGV5ICp3ZXJlKiBiZWluZyBpbmNsdWRlZCBpbiB0aGUgYWN0dWFsIG1lc3NhZ2UgY29uc3RydWN0aW9uIHdpdGhpbiBgZmliX25sX2ZpbGxfcnVsZSgpYC4gSG1tLCB0aGF0J3MgYSBwcm9ibGVtLlxuXG5UaGUgaW1wbGljYXRpb25zIGFyZSBwcmV0dHkgY2xlYXI6IElmIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQsIHRoZSBhbGxvY2F0ZWQgU0tCIGJ1ZmZlciBtaWdodCBiZSB0b28gc21hbGwgd2hlbiB0aGUgc2l6ZSBpcyBlc3RpbWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiwgcGFydGljdWxhcmx5IGluIHNpdHVhdGlvbnMgd2hlcmUgd2UgaGF2ZSBhIG5vdGlmaWNhdGlvbiBvciBkdW1wIGVudHJ5IHRoYXQgaW5jbHVkZXMgdGhlbS4gVGhhdCBtZWFucyB0aGVyZSdzIGEgcmlzayBvZiBidWZmZXIgb3ZlcmZsb3dzIGRvd24gdGhlIGxpbmUgaWYgd2UgZG9uJ3QgZml4IHRoaXMuIEknbGwgbmVlZCB0byBjaGVjayB3aGVyZSBgZmliX3J1bGVfbmxtc2dfc2l6ZWAgaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUga2VybmVsJ3MgY2FsbCBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIyNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUzOjAzLjg1MTA4NDQ4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMDM2Njc2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfcnVsZV9ubG1zZ19zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMjMtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTEyNS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTMzNT1zdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzQzLVxcdG5ldCA9IG9wcy1cXHUwMDNlZnJvX25ldDtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzQ0OlxcdHNrYiA9IG5sbXNnX25ldyhmaWJfcnVsZV9ubG1zZ19zaXplKG9wcywgcnVsZSksIEdGUF9LRVJORUwpO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDUtXFx0aWYgKHNrYiA9PSBOVUxMKVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0OS1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNTA6XFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGZpYl9ydWxlX25sbXNnX3NpemUoKSAqL1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNTEtXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTM6MDYuMDYxNDU3NzA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MzYwNzU4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBmaWJfcnVsZXMuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGxpbmVzIDEzNDQtMTM1MSBpbiBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLCBzcGVjaWZpY2FsbHkgaG93IGBubG1zZ19uZXcoKWAgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgLiBJdCdzIHN0cmFpZ2h0Zm9yd2FyZDogYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgZmlndXJlcyBvdXQgdGhlIHJlcXVpcmVkIHNpemUgZm9yIHRoZSBOZXRsaW5rIG1lc3NhZ2UgcGF5bG9hZC4gVGhlIHBhdGNoIGFkZHMgYCsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9gIGFuZCBgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovYCwgYW5kIHRoYXQncyB0aGUga2V5LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gSXMgdGhpcyBnb2luZyB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YT8gQXJlIHdlIGludHJvZHVjaW5nIG5ldyBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBjb250ZW50cz8gTm8uIFRoZSBwYXRjaCBpc24ndCB0b3VjaGluZyBpbml0aWFsaXphdGlvbiBsb2dpYy4gSXQncyBzb2xlbHkgYWJvdXQgKmNvcnJlY3RpbmcqIGEgY2FsY3VsYXRpb24gdG8gZW5zdXJlIHRoZSBidWZmZXIgaXMgKmJpZyBlbm91Z2gqLiBgbmxtc2dfbmV3KClgIGFsbG9jYXRlcyB0aGUgc3BhY2UsIGFuZCB0aGUgYWN0dWFsIHBvcHVsYXRpb24gb2YgdGhlIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgZmliX25sX2ZpbGxfcnVsZSgpYCB1c2VzIGBubGFfcHV0X3UzMmAgYW5kIGBubGFfcHV0X3U4YCwgd2hpY2ggbWVhbnMgcHJvcGVyIGluaXRpYWxpemF0aW9uIGFuZCBwYWRkaW5nIGFyZSBoYW5kbGVkLiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBubyBjaGFuY2Ugb2YgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGEgZml4LCBwbGFpbiBhbmQgc2ltcGxlLCBwcmV2ZW50aW5nIHVuZGVyLWFsbG9jYXRpb24gYW5kIHRoZSByZXN1bHRpbmcgYC1FTVNHU0laRWAuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IEtBU0FOIHZzLiBLTVNBTi4gS0FTQU4gaXMgbXkgZ28tdG8gZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIHVzZS1hZnRlci1mcmVlLCB0aGluZ3MgbGlrZSB0aGF0LiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBjcmVhdGUgKmFueSogbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2Vzbid0IGFsdGVyIGFueSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGl0IGRvZXNuJ3QgYWZmZWN0IHdoaWNoIG1lbW9yeSBpcyBhY2Nlc3NlZCBvciByZWFkLiBUaGVyZWZvcmUsIG5vIEtNU0FOIGF0dGVudGlvbiBpcyBuZWVkZWQuXG5cblRvIHNvbGlkaWZ5IG15IHJlYXNvbmluZywgSSdtIGNvbnRyYXN0aW5nIEtNU0FOIGFuZCBLQVNBTiBoZXJlOiBUaGUgcGF0Y2ggYWRqdXN0cyBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYCBzbyB3ZSBnZXQgYW4gYWNjdXJhdGUgYnVmZmVyIHNpemUgZm9yIGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYC4gQmVmb3JlLCB0aGUgc2tfYnVmZiB3YXMgdW5kZXItYWxsb2NhdGVkLCB3aGljaCBjYXVzZWQgYC1FTVNHU0laRWAgZXJyb3JzIHdoZW4gdGhvc2UgYXR0cmlidXRlcyB3ZXJlIHByZXNlbnQuIE5vdywgYGZpYl9ubF9maWxsX3J1bGUoKWAgY2FuIHNhZmVseSBhcHBlbmQgdGhlc2UgYXR0cmlidXRlcyBiZWNhdXNlIHRoZSBidWZmZXIgc2l6ZSBpcyBjb3JyZWN0LiBUaGlzIGlzIGFic29sdXRlbHkgY3JpdGljYWw7IGFsbCBhdHRyaWJ1dGUgcG9wdWxhdGlvbiB1c2VzIGBubGFfcHV0XypgLCBlbnN1cmluZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIHBhZGRpbmcuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIHJlYWQsIHdyaXR0ZW4sIG9yIGJyYW5jaGVkIHVwb24uIEZ1cnRoZXJtb3JlLCBLQVNBTiBoYW5kbGVzIG1lbW9yeSBib3VuZHMgaXNzdWVzIHdoaWNoIGFyZSB0aGUgcHVydmlldyBvZiBrZXJuZWwgYXNzZXJ0aW9ucyBhbmQgY2hlY2tzLlxuXG5VbHRpbWF0ZWx5LCB0aGlzIGlzIGEgY2xlYXItY3V0IGNhc2UuIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gY292ZXJhZ2UgaGVyZS5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTAzLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1MzoxNC44OTc1MzY1MDNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgIHRvIGFjY291bnQgZm9yIHRoZSBzcGFjZSByZXF1aXJlZCBieSBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAgbmV0bGluayBhdHRyaWJ1dGVzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGJ1ZmZlciBzaXplIGZvciBgbmxtc2dfbmV3KClgLiBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgYC1FTVNHU0laRWAgZXJyb3JzIGR1cmluZyBgbm90aWZ5X3J1bGVfY2hhbmdlKClgLiBBbGwgYXR0cmlidXRlcyBhcmUgZm9ybWF0dGVkIGFuZCBwb3B1bGF0ZWQgdXNpbmcgc3RhbmRhcmQgYG5sYV9wdXRfKigpYCBoZWxwZXJzIHdoaWNoIGhhbmRsZSBwYWRkaW5nIGFuZCBpbml0aWFsaXphdGlvbiBwcm9wZXJseS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowdmtcb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 07:31:33 +0000 UTC FinishedAt: 2026-09-11 07:53:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "99d76b4da88f21edd14b169f65de33e8df1b7804", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTIPLE_TABLES", "IP_ADVANCED_ROUTER", "IPV6_MULTIPLE_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "99d76b4da88f21edd14b169f65de33e8df1b7804", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MULTIPLE_TABLES", "IP_ADVANCED_ROUTER", "IPV6_MULTIPLE_TABLES" ], "series_id": "f4bcc6fc-341b-4c01-8561-3e363668f07f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "notify_rule_change", "fib_newrule", "fib_delrule", "fib_nl_fill_rule" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBWNl9NVUxUSVBMRV9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtub3RpZnlfcnVsZV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZmliX25ld3J1bGUmIzM0OywKICAgICYjMzQ7ZmliX2RlbHJ1bGUmIzM0OywKICAgICYjMzQ7ZmliX25sX2ZpbGxfcnVsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgbWVzc2FnZSBwYXlsb2FkIHNpemUgY2FsY3VsYXRpb24gaW4gZmliX3J1bGVfbmxtc2dfc2l6ZSgpIHdpdGhpbiBuZXQvY29yZS9maWJfcnVsZXMuYyB0byBhY2NvdW50IGZvciBGUkFfR09UTyBhbmQgRlJBX0wzTURFViBhdHRyaWJ1dGVzLCBwcmV2ZW50aW5nIHVuZGVyc2l6ZWQgbmV0bGluayBub3RpZmljYXRpb24gYWxsb2NhdGlvbnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIHVwb24gRklCIHJ1bGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uIHZpYSBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MGI4NGM2ZmM0ZTc1Yjk3MTViMjAzN2VhZmI1ZWVlYzFkOTMyNTM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6NTE6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmliX3J1bGVzLmMgYi9uZXQvY29yZS9maWJfcnVsZXMuY1xuaW5kZXggN2RmMjE2YzE3YzY3YS4uNWU4NGJjNzQwMTkxNyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWJfcnVsZXMuY1xuQEAgLTExMzMsNyAmIzQzOzExMzMsOSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG4gXHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19JRkdST1VQICovXG4gXHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BUksgKi9cbiBcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFTSyAqL1xuJiM0MztcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9cbiBcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xuJiM0MztcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqL1xuIFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSlcbiBcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX1BST1RPQ09MICovXG4gXHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9JUF9QUk9UTyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBWNl9NVUxUSVBMRV9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtub3RpZnlfcnVsZV9jaGFuZ2UmIzM0OywKICAgICYjMzQ7ZmliX25ld3J1bGUmIzM0OywKICAgICYjMzQ7ZmliX2RlbHJ1bGUmIzM0OywKICAgICYjMzQ7ZmliX25sX2ZpbGxfcnVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBtZXNzYWdlIHBheWxvYWQgc2l6ZSBjYWxjdWxhdGlvbiBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgd2l0aGluIG5ldC9jb3JlL2ZpYl9ydWxlcy5jIHRvIGFjY291bnQgZm9yIEZSQV9HT1RPIGFuZCBGUkFfTDNNREVWIGF0dHJpYnV0ZXMsIHByZXZlbnRpbmcgdW5kZXJzaXplZCBuZXRsaW5rIG5vdGlmaWNhdGlvbiBhbGxvY2F0aW9ucy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgdXBvbiBGSUIgcnVsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb24gdmlhIHJ0bmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwYjg0YzZmYzRlNzViOTcxNWIyMDM3ZWFmYjVlZWVjMWQ5MzI1MzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwNzo1MTo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jIGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKaW5kZXggN2RmMjE2YzE3YzY3YS4uNWU4NGJjNzQwMTkxNyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmliX3J1bGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKQEAgLTExMzMsNyAmIzQzOzExMzMsOSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsCiAJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX0lGR1JPVVAgKi8KIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovCiAJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFTSyAqLwomIzQzOwkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfR09UTyAqLwogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KDgpIC8qIEZSQV9UVU5fSUQgKi8KJiM0MzsJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqLwogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX2t1aWRfcmFuZ2UpKQogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9QUk9UT0NPTCAqLwogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9JUF9QUk9UTyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRklCIFJ1bGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBhIGBkaWZmYCBoZXJlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBub3RpY2luZyBhZGRpdGlvbnMgdG8gdGhlIGBmaWJfcnVsZV9ubG1zZ19zaXplYCBmdW5jdGlvbiwgd2hpY2ggY2FsY3VsYXRlcyB0aGUgc2l6ZSBuZWVkZWQgZm9yIE5ldGxpbmsgbWVzc2FnZXMgcmVsYXRlZCB0byBGSUIgcnVsZXMuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kIG1lc3NhZ2luZyBwZXJzcGVjdGl2ZS4KClRoZSBkaWZmIGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgYXR0cmlidXRlczogYEZSQV9HT1RPYCwgYEZSQV9MM01ERVZgLCBwb3RlbnRpYWxseSBoaW50aW5nIGF0IG5ldyBydWxlIGZ1bmN0aW9uYWxpdGllcyByZWxhdGVkIHRvIGRpcmVjdCB0cmFmZmljIGhhbmRsaW5nIG9yIGludGVyZmFjZSBjb250cm9sIGF0IGxheWVyIDMuIFRoZSBgRlJBX0dPVE9gIGlzIHBhcnRpY3VsYXJseSBpbnRyaWd1aW5nLCBzdWdnZXN0cyBkaXJlY3QganVtcHMgd2l0aGluIHJ1bGUgc2V0cywgd2hpY2ggY291bGQgb3B0aW1pemUgcnVsZSBldmFsdWF0aW9uIGluIHNwZWNpZmljIHNjZW5hcmlvcywgaWYgaGFuZGxlZCBjb3JyZWN0bHkuIGBGUkFfTDNNREVWYCBsaWtlbHkgc2lnbmlmaWVzIGFuIGFzc29jaWF0aW9uIHdpdGggYSBzcGVjaWZpYyBsYXllciAzIGRldmljZSwgd2hpY2ggc291bmRzIGludGVyZXN0aW5nLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXNzdW1wdGlvbnMsIHNvIEkgd2lsbCBoYXZlIHRvIGNoZWNrIHRoZSBjb250ZXh0IHdpdGhpbiBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLiBJJiMzOTtsbCBmaXJlIHVwIGEgcXVpY2sgcmVhZC1maWxlIG9yIGdyZXBwZXIgc2VhcmNoIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRlZCBhdHRyaWJ1dGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBuZXcgYXR0cmlidXRlcyBhcmUgdXNlZCwgYW5kIGhvdyB0aGV5IHBvdGVudGlhbGx5IGltcGFjdCB0aGUgRklCIHJ1bGUgcHJvY2Vzc2luZyBsb2dpYy4gRGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgdGhlIHNpemUgY2hhbmdlcyBjb3VsZCBzdWdnZXN0IGFuIGV4cGFuc2lvbiBpbiBydWxlIGNvbXBsZXhpdHkgb3IgYSBtb3ZlIHRvd2FyZHMgbW9yZSBncmFudWxhciBjb250cm9sLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwgb3IgcHJvYmxlbWF0aWMgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIGV4aXN0aW5nIHJ1bGUgbWF0Y2hpbmcsIHJvdXRlIHNlbGVjdGlvbiwgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaW4gbXkgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTIwOlx0e1xuMTEyMTpcdFx0cmV0dXJuIGZpYl9kZWxydWxlKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIHNrYiwgbmxoLCBleHRhY2ssIGZhbHNlKTtcbjExMjI6XHR9XG4xMTIzOlx0XG4xMTI0Olx0c3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxuMTEyNTpcdFx0XHRcdFx0XHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxuMTEyNjpcdHtcbjExMjc6XHRcdHNpemVfdCBwYXlsb2FkID0gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBmaWJfcnVsZV9oZHIpKVxuMTEyODpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShJRk5BTVNJWikgLyogRlJBX0lJRk5BTUUgKi9cbjExMjk6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoSUZOQU1TSVopIC8qIEZSQV9PSUZOQU1FICovXG4xMTMwOlx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9QUklPUklUWSAqL1xuMTEzMTpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfVEFCTEUgKi9cbjExMzI6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX1BSRUZJWExFTiAqL1xuMTEzMzpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfU1VQUFJFU1NfSUZHUk9VUCAqL1xuMTEzNDpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovXG4xMTM1Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi9cbjExMzY6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9cbjExMzc6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xuMTEzODpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovXG4xMTM5Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX2t1aWRfcmFuZ2UpKVxuMTE0MDpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi9cbjExNDE6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0lQX1BST1RPICovXG4xMTQyOlx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX3J1bGVfcG9ydF9yYW5nZSkpIC8qIEZSQV9TUE9SVF9SQU5HRSAqL1xuMTE0MzpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpKSAvKiBGUkFfRFBPUlRfUkFOR0UgKi9cbjExNDQ6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMikgLyogRlJBX1NQT1JUX01BU0sgKi9cbjExNDU6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMik7IC8qIEZSQV9EUE9SVF9NQVNLICovXG4xMTQ2Olx0XG4xMTQ3Olx0XHRpZiAob3BzLVx1MDAzZW5sbXNnX3BheWxvYWQpXG4xMTQ4Olx0XHRcdHBheWxvYWQgJiM0Mzs9IG9wcy1cdTAwM2VubG1zZ19wYXlsb2FkKHJ1bGUpO1xuMTE0OTpcdFxuMTE1MDpcdFx0cmV0dXJuIHBheWxvYWQ7XG4xMTUxOlx0fVxuMTE1MjpcdFxuMTE1MzpcdHN0YXRpYyBpbnQgZmliX25sX2ZpbGxfcnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXG4xMTU0Olx0XHRcdFx0ICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MsXG4xMTU1Olx0XHRcdFx0ICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG4xMTU2Olx0e1xuMTE1NzpcdFx0c3RydWN0IG5sbXNnaGRyICpubGg7XG4xMTU4Olx0XHRzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmg7XG4xMTU5Olx0XG4xMTYwOlx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgdHlwZSwgc2l6ZW9mKCpmcmgpLCBmbGFncyk7XG4xMTYxOlx0XHRpZiAobmxoID09IE5VTEwpXG4xMTYyOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4xMTYzOlx0XG4xMTY0Olx0XHRmcmggPSBubG1zZ19kYXRhKG5saCk7XG4xMTY1Olx0XHRmcmgtXHUwMDNlZmFtaWx5ID0gb3BzLVx1MDAzZWZhbWlseTtcbjExNjY6XHRcdGZyaC1cdTAwM2V0YWJsZSA9IHJ1bGUtXHUwMDNldGFibGUgXHUwMDNjIDI1NiA/IHJ1bGUtXHUwMDNldGFibGUgOiBSVF9UQUJMRV9DT01QQVQ7XG4xMTY3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBGUkFfVEFCTEUsIHJ1bGUtXHUwMDNldGFibGUpKVxuMTE2ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjExNjk6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIEZSQV9TVVBQUkVTU19QUkVGSVhMRU4sIHJ1bGUtXHUwMDNlc3VwcHJlc3NfcHJlZml4bGVuKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBGSUIgUnVsZSBTaXplIENhbGN1bGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2l6ZSBvZiB0aGVzZSBgbmxtc2dgIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGVzIGlzIGRldGVybWluZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBgZmliX3J1bGVfbmxtc2dfc2l6ZWAgY29tZSBpbnRvIHBsYXkgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYD8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7bGwgZGl2ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBzaXplIGNhbGN1bGF0aW9ucy4gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIHByb2JhYmx5IGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBwcm9ibGVtIGFyZWFzIGlmIHRoZXJlIGFyZSBhbnksIGFuZCBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9ucywgdG8gc2VlIGlmIHRoZXJlIGlzIHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBldGMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3J1bGVfbmxtc2dfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTIzLVxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTI1LVx0XHRcdFx0XHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzMzU9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDMtXHRuZXQgPSBvcHMtXHUwMDNlZnJvX25ldDtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNDQ6XHRza2IgPSBubG1zZ19uZXcoZmliX3J1bGVfbmxtc2dfc2l6ZShvcHMsIHJ1bGUpLCBHRlBfS0VSTkVMKTtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDUtXHRpZiAoc2tiID09IE5VTEwpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0OS1cdGlmIChlcnIgXHUwMDNjIDApIHtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNTA6XHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgKi9cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNTEtXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBOZXR3b3JraW5nIEtlcm5lbCBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbGluZSAxMzUwIG9mIHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhhdCBgLUVNU0dTSVpFYCByZXR1cm4gdmFsdWUgaXMgYSByZWQgZmxhZywgcmlnaHQ/IEl0JiMzOTtzIHBvaW50aW5nIHRvIGEgYnVnIGluIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGlzIHdhcm5pbmcgdXMgYmVjYXVzZSB0aGF0IGVycm9yIGlzIHN1cmZhY2luZy4KCkl0IHNlZW1zIGxpa2UgcHJldmlvdXNseSwgYG5vdGlmeV9ydWxlX2NoYW5nZWAgd2FzIGdldHRpbmcgdHJpcHBlZCB1cC4gSXQgd2FzIGFsbG9jYXRpbmcgYW4gYHNrYmAgdGhhdCB3YXMgKnRvbyBzbWFsbCogZHVlIHRvIHNvbWUgbWlzc2luZyBhdHRyaWJ1dGVzIGluIGBmaWJfcnVsZV9ubG1zZ19zaXplYC4gIFRoZSBtaXNzaW5nIGN1bHByaXRzPyBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAuICBDb25zZXF1ZW50bHksIGBmaWJfbmxfZmlsbF9ydWxlYCByZXR1cm5zIGAtRU1TR1NJWkVgLiBUaGUgYFdBUk5fT05gIHRoZW4gcHJlZGljdGFibHkgdHJpZ2dlcnMuCgpUaGUgZml4LCBhbmQgYSBnb29kIG9uZSwgaXMgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgYHNrYmAgc2l6ZS4gQnkgYWRkaW5nIHRob3NlIG1pc3NpbmcgYXR0cmlidXRlcyBpbiwgd2Ugc2hvdWxkIGhhdmUgYSBtb3JlIGFjY3VyYXRlIGFsbG9jYXRpb24uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBob3cgYGZpYl9ydWxlcy5jYCBpcyBiZWluZyBjb21waWxlZCBhbmQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGludm9sdmVkLiBKdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZml4IGlzIGFjdHVhbGx5IGluIHRoZSByaWdodCBwbGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfcnVsZXMubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfTkVUUE9MTCkgJiM0Mzs9IG5ldHBvbGwub1xubmV0L2NvcmUvTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX0ZJQl9SVUxFUykgJiM0Mzs9IGZpYl9ydWxlcy5vXG5uZXQvY29yZS9NYWtlZmlsZS0zMC1vYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICYjNDM7PSBuZXQtdHJhY2VzLm9cbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYz0zOD1ib29sIGZpYl9ydWxlX21hdGNoYWxsKGNvbnN0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy01NC1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjU1OmludCBmaWJfZGVmYXVsdF9ydWxlX2FkZChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNTYtXHRcdFx0IHUzMiBwcmVmLCB1MzIgdGFibGUpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODAtXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4MTpzdGF0aWMgdTMyIGZpYl9kZWZhdWx0X3J1bGVfcHJlZihzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODIte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTk4PXN0YXRpYyB2b2lkIG5vdGlmeV9ydWxlX2NoYW5nZShpbnQgZXZlbnQsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjk5Olx0XHRcdCAgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMC1cdFx0XHQgICAgICAgdTMyIHBpZCk7XG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDEtXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDI6c3RhdGljIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpsb29rdXBfcnVsZXNfb3BzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMy1cdFx0XHRcdFx0ICAgICAgaW50IGZhbWlseSlcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwNC17XG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDU6XHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtMTA2LVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyMC1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEyMTpzdGF0aWMgdm9pZCBydWxlc19vcHNfcHV0KHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMjIte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyNi1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEyNzpzdGF0aWMgdm9pZCBmbHVzaF9yb3V0ZV9jYWNoZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTI4LXtcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzItXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzM6c3RhdGljIGludCBfX2ZpYl9ydWxlc19yZWdpc3RlcihzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0LXtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNS1cdGludCBlcnIgPSAtRUVYSVNUO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6MTM2Olx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm87XG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzctXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTYxLVxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTYyOnN0cnVjdCBmaWJfcnVsZXNfb3BzICpcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjE2MzpmaWJfcnVsZXNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGZpYl9ydWxlc19vcHMgKnRtcGwsIHN0cnVjdCBuZXQgKm5ldClcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE2NC17XG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNjU6XHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtMTY2LVx0aW50IGVycjtcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xODQtXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxODU6c3RhdGljIHZvaWQgZmliX3J1bGVzX2NsZWFudXBfb3BzKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xODYte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE5Ni1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjE5Nzp2b2lkIGZpYl9ydWxlc191bnJlZ2lzdGVyKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xOTgte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTI2Nz1zdGF0aWMgYm9vbCBmaWJfcnVsZV9vaWZfbWF0Y2goY29uc3Qgc3RydWN0IGZpYl9ydWxlICpydWxlLCBpbnQgb2lmaW5kZXgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMjc1LVxubmV0L2NvcmUvZmliX3J1bGVzLmM6Mjc2OnN0YXRpYyBpbnQgZmliX3J1bGVfbWF0Y2goc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMjc3LVx0XHRcdCAgc3RydWN0IGZsb3dpICpmbCwgaW50IGZsYWdzLFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTMxMC1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjMxMTppbnQgZmliX3J1bGVzX2xvb2t1cChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3QgZmxvd2kgKmZsLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMzEyLVx0XHQgICAgIGludCBmbGFncywgc3RydWN0IGZpYl9sb29rdXBfYXJnICphcmcpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9Mzc5PXN0YXRpYyBpbnQgY2FsbF9maWJfcnVsZV9ub3RpZmllcnMoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTM4MS1cdFx0XHRcdCAgIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjM4MjpcdFx0XHRcdCAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0zODMtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9Mzk5PWludCBmaWJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIGludCBmYW1pbHksXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtNDAxLXtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjQwMjpcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHM7XG5uZXQvY29yZS9maWJfcnVsZXMuYy00MDMtXHRzdHJ1Y3QgZmliX3J1bGUgKnJ1bGU7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9NDI0PXVuc2lnbmVkIGludCBmaWJfcnVsZXNfc2VxX3JlYWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5KVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQyNi1cdHVuc2lnbmVkIGludCBmaWJfcnVsZXNfc2VxO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6NDI3Olx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcztcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQyOC1cbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy00MzgtXG5uZXQvY29yZS9maWJfcnVsZXMuYzo0Mzk6c3RhdGljIHN0cnVjdCBmaWJfcnVsZSAqcnVsZV9maW5kKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy00NDAtXHRcdFx0XHQgIHN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaCxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYz01Njg9c3RhdGljIGludCBmaWJfbmwycnVsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNTY5LVx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NTcwOlx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTU3MS1cdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9NzM4PXN0YXRpYyBpbnQgZmliX25sMnJ1bGVfbG9ja2VkKHN0cnVjdCBmaWJfcnVsZSAqbmxydWxlLFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NzM5Olx0XHRcdCAgICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy03NDAtXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy03NzgtXG5uZXQvY29yZS9maWJfcnVsZXMuYzo3Nzk6c3RhdGljIGludCBydWxlX2V4aXN0cyhzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgsXG5uZXQvY29yZS9maWJfcnVsZXMuYy03ODAtXHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYz04NzY9aW50IGZpYl9uZXdydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODgwLVx0aW50IGVyciA9IC1FSU5WQUwsIHVucmVzb2x2ZWQgPSAwO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6ODgxOlx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyA9IE5VTEw7XG5uZXQvY29yZS9maWJfcnVsZXMuYy04ODItXHRzdHJ1Y3QgbmxhdHRyICp0YltGUkFfTUFYICYjNDM7IDFdO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEwMTE9aW50IGZpYl9kZWxydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAxNC1cdHN0cnVjdCBmaWJfcnVsZSAqcnVsZSA9IE5VTEwsICpubHJ1bGUgPSBOVUxMO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6MTAxNTpcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMgPSBOVUxMO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAxNi1cdHN0cnVjdCBubGF0dHIgKnRiW0ZSQV9NQVgmIzQzOzFdO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTIzLVxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTI1LVx0XHRcdFx0XHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExNTM9c3RhdGljIGludCBmaWJfbmxfZmlsbF9ydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExNTQtXHRcdFx0ICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MsXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMTU1Olx0XHRcdCAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTE1Ni17XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTIzOD1zdGF0aWMgaW50IGR1bXBfcnVsZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTIzOTpcdFx0ICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyNDAte1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEyOTE9c3RhdGljIGludCBmaWJfbmxfZHVtcHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyOTQtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xubmV0L2NvcmUvZmliX3J1bGVzLmM6MTI5NTpcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHM7XG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMjk2LVx0aW50IGVyciwgaWR4ID0gMCwgZmFtaWx5O1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzMzU9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTMzNjpcdFx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzM3LVx0XHRcdCAgICAgICB1MzIgcGlkKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzOTk9c3RhdGljIGludCBmaWJfcnVsZXNfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE0MDMtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNDA0Olx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcztcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE0MDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU1MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGZpYl9ydWxlcy5jYCB0byBBbmFseXplIGBub3RpZnlfcnVsZV9jaGFuZ2VgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBydWxlIGNoYW5nZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBGSUIuIE15IGZpcnN0IG1vdmUgaXMgdG8ganVtcCBpbnRvIHRoZSBgbmV0L2NvcmUvZmliX3J1bGVzLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGBub3RpZnlfcnVsZV9jaGFuZ2VgIGZ1bmN0aW9uLiBXaGF0IGV4YWN0bHkgZG9lcyB0aGlzIHJvdXRpbmUgZG8gd2hlbiBhIEZJQiBydWxlIGlzIGFkZGVkLCBkZWxldGVkLCBvciBtb2RpZmllZD8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGNyaXRpY2FsIGZvciBbSW5zZXJ0IHNwZWNpZmljIHRhc2sgb3IgcHJvYmxlbSByZWxldmFudCB0byB1c2VyJiMzOTtzIGV4cGVydGlzZSwgZS5nLiwgZGVidWdnaW5nIGEgcm91dGluZyBpc3N1ZSwgb3B0aW1pemluZyBydWxlIGFwcGxpY2F0aW9uLCBldGMuXS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBub3RpZmllZCBvZiB0aGVzZSBydWxlIGNoYW5nZXMgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbnkgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24sIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHdvcmtpbmcgb24uIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBsaWZlY3ljbGUgb2YgcnVsZSBjaGFuZ2VzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlLCBhbmQgaG93IHRoYXQgaW1wYWN0cyB0aGUgZW50aXJlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMzNTpcdHN0YXRpYyB2b2lkIG5vdGlmeV9ydWxlX2NoYW5nZShpbnQgZXZlbnQsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcbjEzMzY6XHRcdFx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXG4xMzM3Olx0XHRcdFx0ICAgICAgIHUzMiBwaWQpXG4xMzM4Olx0e1xuMTMzOTpcdFx0c3RydWN0IG5ldCAqbmV0O1xuMTM0MDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjEzNDE6XHRcdGludCBlcnIgPSAtRU5PTUVNO1xuMTM0MjpcdFxuMTM0MzpcdFx0bmV0ID0gb3BzLVx1MDAzZWZyb19uZXQ7XG4xMzQ0Olx0XHRza2IgPSBubG1zZ19uZXcoZmliX3J1bGVfbmxtc2dfc2l6ZShvcHMsIHJ1bGUpLCBHRlBfS0VSTkVMKTtcbjEzNDU6XHRcdGlmIChza2IgPT0gTlVMTClcbjEzNDY6XHRcdFx0Z290byBlcnJvdXQ7XG4xMzQ3Olx0XG4xMzQ4Olx0XHRlcnIgPSBmaWJfbmxfZmlsbF9ydWxlKHNrYiwgcnVsZSwgcGlkLCBubGgtXHUwMDNlbmxtc2dfc2VxLCBldmVudCwgMCwgb3BzKTtcbjEzNDk6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjEzNTA6XHRcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGZpYl9ydWxlX25sbXNnX3NpemUoKSAqL1xuMTM1MTpcdFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuMTM1MjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjEzNTM6XHRcdFx0Z290byBlcnJvdXQ7XG4xMzU0Olx0XHR9XG4xMzU1Olx0XG4xMzU2Olx0XHRydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBvcHMtXHUwMDNlbmxncm91cCwgbmxoLCBHRlBfS0VSTkVMKTtcbjEzNTc6XHRcdHJldHVybjtcbjEzNTg6XHRlcnJvdXQ6XG4xMzU5Olx0XHRydG5sX3NldF9za19lcnIobmV0LCBvcHMtXHUwMDNlbmxncm91cCwgZXJyKTtcbjEzNjA6XHR9XG4xMzYxOlx0XG4xMzYyOlx0c3RhdGljIHZvaWQgYXR0YWNoX3J1bGVzKHN0cnVjdCBsaXN0X2hlYWQgKnJ1bGVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuMTM2MzpcdHtcbjEzNjQ6XHRcdHN0cnVjdCBmaWJfcnVsZSAqcnVsZTtcbjEzNjU6XHRcbjEzNjY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocnVsZSwgcnVsZXMsIGxpc3QpIHtcbjEzNjc6XHRcdFx0aWYgKHJ1bGUtXHUwMDNlaWlmaW5kZXggPT0gLTEgXHUwMDI2XHUwMDI2XG4xMzY4Olx0XHRcdCAgICBzdHJjbXAoZGV2LVx1MDAzZW5hbWUsIHJ1bGUtXHUwMDNlaWlmbmFtZSkgPT0gMCkge1xuMTM2OTpcdFx0XHRcdFdSSVRFX09OQ0UocnVsZS1cdTAwM2VpaWZpbmRleCwgZGV2LVx1MDAzZWlmaW5kZXgpO1xuMTM3MDpcdFx0XHRcdFdSSVRFX09OQ0UocnVsZS1cdTAwM2VpaWZfaXNfbDNfbWFzdGVyLFxuMTM3MTpcdFx0XHRcdFx0ICAgbmV0aWZfaXNfbDNfbWFzdGVyKGRldikpO1xuMTM3MjpcdFx0XHR9XG4xMzczOlx0XHRcdGlmIChydWxlLVx1MDAzZW9pZmluZGV4ID09IC0xIFx1MDAyNlx1MDAyNlxuMTM3NDpcdFx0XHQgICAgc3RyY21wKGRldi1cdTAwM2VuYW1lLCBydWxlLVx1MDAzZW9pZm5hbWUpID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipLY29uZmlnIGFuZCBGSUJfUlVMRVMgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBGSUJfUlVMRVNgLiBUaW1lIHRvIGRpdmUgaW50byBLY29uZmlnLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgYW5kIEkmIzM5O2QgZXhwZWN0IGFueSBmZWF0dXJlIHJlbGF0ZWQgdG8gRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHJ1bGVzLCB3aGljaCBhcmUgY3JpdGljYWwgZm9yIHJvdXRpbmcgYW5kIHBvbGljeSwgdG8gYmUgZGVmaW5lZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gaXQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBkaXJlY3RseSBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoYXQgc3ltYm9sLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBwb3RlbnRpYWxseSBhbnkgdHJpc3RhdGUgb3IgYm9vbGVhbiBzZXR0aW5ncyB0aGF0IGdvdmVybiBpdHMgaW5jbHVzaW9uIGluIHRoZSBidWlsZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgZHJpdmVyIG9yIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgaW1wbGVtZW50aW5nIHRoZXNlIEZJQiBydWxlcy4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGJlIHRoaW5raW5nIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgYWJvdXQgd2hhdCBwbGF0Zm9ybSB0aGlzIGlzIGdvaW5nIHRvIGJlIHJ1bm5pbmcgb24gLSBpcyBpdCBhbiBlbWJlZGRlZCBzeXN0ZW0sIGEgc2VydmVyLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGhlbHAgZ2l2ZSBtb3JlIG1lYW5pbmcgdG8gdGhlIG9wdGlvbnMgYW5kIGRlZmF1bHRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3doeSYjMzQ7IGFzIG11Y2ggYXMgdGhlICYjMzQ7d2hhdCYjMzQ7IGFuZCB0aGUgJiMzNDtob3cmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZJQl9SVUxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NDIxPXNvdXJjZSBcJiMzNDtuZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00MjItXG5uZXQvS2NvbmZpZzo0MjM6Y29uZmlnIEZJQl9SVUxFU1xubmV0L0tjb25maWctNDI0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgZnJhbWVkIGFzIGEgdGhvdWdodCBwcm9jZXNzIEkgbWlnaHQgaGF2ZSB3aGlsZSBhcHByb2FjaGluZyB0aGlzIGtpbmQgb2YgcHJvYmxlbToKCioqRXhhbWluaW5nIHRoZSBTZWxlY3Rpb24gb2YgYEZJQl9SVUxFU2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gYEZJQl9SVUxFU2AuLi4gdGhhdCBzY3JlYW1zIHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIG1heWJlIHJvdXRpbmcgb3IgZmlyZXdhbGwgcnVsZXMuIEJ1dCB3aGF0JiMzOTtzICpzZWxlY3RpbmcqIGl0PyBXaGF0JiMzOTtzIHRoZSBtZWNoYW5pc20gYXQgcGxheT8mIzM0OyBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgd2l0aGluIHRoZSBrZXJuZWwgb3IgYSB2ZXJ5IGxvdy1sZXZlbCBuZXR3b3JrIG1hbmFnZW1lbnQgc3lzdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdHJpZ2dlcmluZyBjb25kaXRpb25zLiBJcyBpdCBhbiBldmVudD8gQSBjb25maWd1cmF0aW9uIG9wdGlvbj8gQW4gZXhwbGljaXQgZnVuY3Rpb24gY2FsbD8gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlIHNlbGVjdGlvbiBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGlucHV0cyB0aGF0IGRldGVybWluZSB3aGV0aGVyIGBGSUJfUlVMRVNgIGlzIGNob3NlbiBvciBub3QuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgb3IgcGllY2Ugb2YgY29kZSwgbWF5YmUgd2l0aGluIGEgcm91dGluZyB0YWJsZSBvciBhIGZpbHRlcmluZyBlbmdpbmUuIExldCYjMzk7cyBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiBjYWxscyB0aGF0IHJlZmVyZW5jZSB0aGlzIGNvbnN0YW50IG9yIHZhcmlhYmxlLiBHb3R0YSBzZWUgdGhlIGltbWVkaWF0ZSBzdXJyb3VuZGluZ3MgYW5kIGJ1aWxkIHVwIGEgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlY2lzaW9uLW1ha2luZyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEZJQl9SVUxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy02NS1cdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXG5uZXQvaXB2NC9LY29uZmlnOjY2Olx0c2VsZWN0IEZJQl9SVUxFU1xubmV0L2lwdjQvS2NvbmZpZy02Ny1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTIzMj1jb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWctMjM0LVx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXHUwMDI2XHUwMDI2IElQX0FEVkFOQ0VEX1JPVVRFUlxubmV0L2lwdjQvS2NvbmZpZzoyMzU6XHRzZWxlY3QgRklCX1JVTEVTXG5uZXQvaXB2NC9LY29uZmlnLTIzNi1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTIzNz1jb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoyMzk6XHRzZWxlY3QgRklCX1JVTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI0MC1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTI2NT1jb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjctXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnOjI2ODpcdHNlbGVjdCBGSUJfUlVMRVNcbm5ldC9pcHY2L0tjb25maWctMjY5LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ5NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUm91dGluZyBSdWxlIE5vdGlmaWNhdGlvbiBNZWNoYW5pc20qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gYGZpYl9ydWxlX25sbXNnX3NpemVgIGhhcyBiZWVuIGlubGluZWQgZGlyZWN0bHkgaW50byBgbm90aWZ5X3J1bGVfY2hhbmdlYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgdGhhdCBjYWxjdWxhdGluZyB0aGUgTmV0bGluayBtZXNzYWdlIHNpemUgZm9yIHJvdXRpbmcgcnVsZSB1cGRhdGVzIGlzIGEgY3JpdGljYWwgYW5kIGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gd2l0aGluIHRoYXQgbm90aWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQsIGluIGl0c2VsZiwgaXMgYSB1c2VmdWwgZGF0YSBwb2ludC4KCk5vdywgSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4gV2hlbmV2ZXIgd2UgcmVjZWl2ZSBhIHJvdXRpbmcgcnVsZSBjaGFuZ2UgcmVxdWVzdCB2aWEgcnRuZXRsaW5rIOKAkyB0aGF0IGlzLCB3aGVuIGBmaWJfbmV3cnVsZWAgb3IgYGZpYl9kZWxydWxlYCBpcyBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gYW4gUlRNX05FV1JVTEUgb3IgUlRNX0RFTFJVTEUgbWVzc2FnZSwgcmVzcGVjdGl2ZWx5IOKAkyBgbm90aWZ5X3J1bGVfY2hhbmdlYCBpcyB0cmlnZ2VyZWQuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBjb3JlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gZm9yIGNoYW5nZXMgaW4gdGhlIHJvdXRpbmcgcnVsZSB0YWJsZS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvZiBgbm90aWZ5X3J1bGVfY2hhbmdlYC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyB3aWxsIHJldmVhbCB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGluaXRpYXRpbmcgdGhlc2Ugcm91dGluZyBydWxlIHVwZGF0ZXMsIGFuZCB0aGVyZWZvcmUsIHRoZSBicm9hZGVyIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBkZWx2ZSBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IG90aGVyIGNvZGUgcGF0aHMgYXJlIGxlYWRpbmcgdG8gYG5vdGlmeV9ydWxlX2NoYW5nZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vdGlmeV9ydWxlX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jPTgxPXN0YXRpYyB1MzIgZmliX2RlZmF1bHRfcnVsZV9wcmVmKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtOTctXG5uZXQvY29yZS9maWJfcnVsZXMuYzo5ODpzdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXG5uZXQvY29yZS9maWJfcnVsZXMuYy05OS1cdFx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9ODc2PWludCBmaWJfbmV3cnVsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTk4Ny1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjk4ODpcdG5vdGlmeV9ydWxlX2NoYW5nZShSVE1fTkVXUlVMRSwgcnVsZSwgb3BzLCBubGgsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtOTg5LVx0ZmliX3J1bGVfcHV0KHJ1bGUpO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEwMTE9aW50IGZpYl9kZWxydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTEwMS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjExMDI6XHRub3RpZnlfcnVsZV9jaGFuZ2UoUlRNX0RFTFJVTEUsIHJ1bGUsIG9wcywgbmxoLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMDMtXHRmaWJfcnVsZV9wdXQocnVsZSk7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTI5MT1zdGF0aWMgaW50IGZpYl9ubF9kdW1wcnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTMzNC1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzMzU6c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTMzNi1cdFx0XHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDAxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBGSUIgUnVsZSBNYW5hZ2VtZW50IHdpdGggcnRuZXRsaW5rKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBmaWJfbmxfZGVscnVsZWAgYW5kIGBmaWJfbmxfbmV3cnVsZWAgaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBTaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBGSUIgcnVsZXMsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcnRuZXRsaW5rIGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBydG5ldGxpbmsgaW5mcmFzdHJ1Y3R1cmUsIGFzIHRoYXQmIzM5O3MgdGhlIGVzdGFibGlzaGVkIG1lY2hhbmlzbSBmb3IgbWFuYWdpbmcgcm91dGluZyB0YWJsZSBjaGFuZ2VzLCBpbmNsdWRpbmcgdGhlIEZJQi4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQsIGhvdyB0aGUgbWVzc2FnZXMgYXJlIGhhbmRsZWQsIGFuZCBob3cgdGhlIGNoYW5nZXMgdWx0aW1hdGVseSBwcm9wYWdhdGUgdGhyb3VnaCB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX25sX25ld3J1bGV8ZmliX25sX2RlbHJ1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYz0xMDAzPUVYUE9SVF9TWU1CT0xfR1BMKGZpYl9uZXdydWxlKTtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMDQtXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDA1OnN0YXRpYyBpbnQgZmliX25sX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDA2LVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTY9RVhQT1JUX1NZTUJPTF9HUEwoZmliX2RlbHJ1bGUpO1xubmV0L2NvcmUvZmliX3J1bGVzLmMtMTExNy1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjExMTg6c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMTktXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTQ1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgZmliX3J1bGVzX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNDU4Olx0ey5tc2d0eXBlID0gUlRNX05FV1JVTEUsIC5kb2l0ID0gZmliX25sX25ld3J1bGUsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xNDU5LVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNDYwOlx0ey5tc2d0eXBlID0gUlRNX0RFTFJVTEUsIC5kb2l0ID0gZmliX25sX2RlbHJ1bGUsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xNDYxLVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDUyCgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDExMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEZJQiBSdWxlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGZpYl9ydWxlX25sbXNnX3NpemVgLCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9maWJfcnVsZXMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgbmV0bGluayBtZXNzYWdlcyB1c2VkIHRvIG5vdGlmeSB1c2Vyc3BhY2UgYWJvdXQgY2hhbmdlcyB0byBGSUIgcnVsZXMgKHVzaW5nIFJUTV9ORVdSVUxFIC8gUlRNX0RFTFJVTEUgbWVzc2FnZXMpLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgdGhlIHNpemUgb2YgYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgIGF0dHJpYnV0ZXMgdG8gdGhlIG5sbXNnIHNpemUgY2FsY3VsYXRpb24uIFRoaXMgaXMgaW1wb3J0YW50OyBpdCBkaXJlY3RseSBhZmZlY3RzIGJ1ZmZlciBhbGxvY2F0aW9uIHNpemVzLiBUaGUgY29kZSBpcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAoc3BlY2lmaWNhbGx5IHRoZSBydG5ldGxpbmsgc29ja2V0KS4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byBtb2RpZmljYXRpb25zIGluIGNvcmUgbmV0d29ya2luZyBhbmQgcmVhY2hhYmxlIGNvZGUsIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gVGhlIHBhdGNoIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlLCBhbHRlcnMgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGFsYmVpdCBpbmRpcmVjdGx5IHRocm91Z2ggc2l6ZSBjYWxjdWxhdGlvbiksIGFuZCBpcyBmdWxseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFFFTVUgdXNpbmcgcnRuZXRsaW5rLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLgoKTmV4dCwgbGV0JiMzOTtzIGlkZW50aWZ5IHJlbGV2YW50IGZvY3VzIHN5bWJvbHMuIGBmaWJfcnVsZV9ubG1zZ19zaXplYCBpcyBjYWxsZWQgYnkgYG5vdGlmeV9ydWxlX2NoYW5nZWAuIFRoaXMsIGluIHR1cm4sIGlzIGNhbGxlZCBieSBgZmliX25ld3J1bGVgIGFuZCBgZmliX2RlbHJ1bGVgLCB3aGljaCBhcmUgcmVhY2hlZCB2aWEgYGZpYl9ubF9uZXdydWxlYCBhbmQgYGZpYl9ubF9kZWxydWxlYC4gV2UgaGF2ZSBgZmliX25sX2ZpbGxfcnVsZWAsIHdoaWNoIGZpbGxzIHRoZSBhY3R1YWwgbmV0bGluayBtZXNzYWdlIGJ1ZmZlci4gQWZ0ZXIgc29tZSB0aG91Z2h0LCBJIGNvbmNsdWRlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBleGNlbGxlbnQgZm9jdXMgc3ltYm9scy4gYG5vdGlmeV9ydWxlX2NoYW5nZWAsIGBmaWJfbmV3cnVsZWAsIGBmaWJfZGVscnVsZWAsIGFuZCBgZmliX25sX2ZpbGxfcnVsZWAgYXJlIGFsbCBzcGVjaWZpYyB0byBGSUIgcnVsZSBoYW5kbGluZywgcHJvdmlkaW5nIGEgY2xlYXIgYXR0YWNrIHN1cmZhY2UuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVxdWlyZWQgS2NvbmZpZyBvcHRpb25zLiBJdCBhcHBlYXJzIHRoYXQgYElQX01VTFRJUExFX1RBQkxFU2AgKG9yIGBJUFY2X01VTFRJUExFX1RBQkxFU2ApLCBgSVBfQURWQU5DRURfUk9VVEVSYCwgYW5kIGBGSUJfUlVMRVNgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIENoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMsIGBJUF9NVUxUSVBMRV9UQUJMRVNgIGRlcGVuZHMgb24gYElQX0FEVkFOQ0VEX1JPVVRFUmAgYW5kIHNlbGVjdHMgYEZJQl9SVUxFU2AuIGBJUFY2X01VTFRJUExFX1RBQkxFU2AgYWxzbyBzZWxlY3RzIGBGSUJfUlVMRVNgLiBgRklCX1JVTEVTYCBpdHNlbGYgaXMgYSBoaWRkZW4gYm9vbCwgc28gZW5hYmxpbmcgZWl0aGVyIGBJUF9NVUxUSVBMRV9UQUJMRVNgIHdpdGggYElQX0FEVkFOQ0VEX1JPVVRFUmAgb3IgYElQVjZfTVVMVElQTEVfVEFCTEVTYCBlbmFibGVzIHRoZSBuZWNlc3NhcnkgZmVhdHVyZXMuCgpUbyByZWNhcCwgYWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnM6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtub3RpZnlfcnVsZV9jaGFuZ2UmIzM0OywgJiMzNDtmaWJfbmV3cnVsZSYjMzQ7LCAmIzM0O2ZpYl9kZWxydWxlJiMzNDssICYjMzQ7ZmliX25sX2ZpbGxfcnVsZSYjMzQ7XWAKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LCAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LCAmIzM0O0lQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDtdYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhbHRlcnMgbmV0bGluayBtZXNzYWdlIHBheWxvYWQgc2l6aW5nIGluIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgLCBjYWxsZWQgYnkgYG5vdGlmeV9ydWxlX2NoYW5nZSgpYCwgdG8gaW5jbHVkZSBzcGFjZSBmb3IgYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgIGF0dHJpYnV0ZXMuIFRoaXMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSB2aWEgcnRuZXRsaW5rIChgUlRNX05FV1JVTEVgIGFuZCBgUlRNX0RFTFJVTEVgKS4KCk5vdywgSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVVMVElQTEVfVEFCTEVTJiMzNDssCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUFY2X01VTFRJUExFX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25vdGlmeV9ydWxlX2NoYW5nZSYjMzQ7LAogICAgJiMzNDtmaWJfbmV3cnVsZSYjMzQ7LAogICAgJiMzNDtmaWJfZGVscnVsZSYjMzQ7LAogICAgJiMzNDtmaWJfbmxfZmlsbF9ydWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIG1lc3NhZ2UgcGF5bG9hZCBzaXplIGNhbGN1bGF0aW9uIGluIGZpYl9ydWxlX25sbXNnX3NpemUoKSB3aXRoaW4gbmV0L2NvcmUvZmliX3J1bGVzLmMgdG8gYWNjb3VudCBmb3IgRlJBX0dPVE8gYW5kIEZSQV9MM01ERVYgYXR0cmlidXRlcywgcHJldmVudGluZyB1bmRlcnNpemVkIG5ldGxpbmsgbm90aWZpY2F0aW9uIGFsbG9jYXRpb25zLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBleGVjdXRlZCB1cG9uIEZJQiBydWxlIGNyZWF0aW9uIGFuZCBkZWxldGlvbiB2aWEgcnRuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NVUxUSVBMRV9UQUJMRVMmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgICAmIzM0O0lQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bm90aWZ5X3J1bGVfY2hhbmdlJiMzNDssCiAgICAmIzM0O2ZpYl9uZXdydWxlJiMzNDssCiAgICAmIzM0O2ZpYl9kZWxydWxlJiMzNDssCiAgICAmIzM0O2ZpYl9ubF9maWxsX3J1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgbWVzc2FnZSBwYXlsb2FkIHNpemUgY2FsY3VsYXRpb24gaW4gZmliX3J1bGVfbmxtc2dfc2l6ZSgpIHdpdGhpbiBuZXQvY29yZS9maWJfcnVsZXMuYyB0byBhY2NvdW50IGZvciBGUkFfR09UTyBhbmQgRlJBX0wzTURFViBhdHRyaWJ1dGVzLCBwcmV2ZW50aW5nIHVuZGVyc2l6ZWQgbmV0bGluayBub3RpZmljYXRpb24gYWxsb2NhdGlvbnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIHVwb24gRklCIHJ1bGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uIHZpYSBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgIHRvIGFjY291bnQgZm9yIHRoZSBzcGFjZSByZXF1aXJlZCBieSBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAgbmV0bGluayBhdHRyaWJ1dGVzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGJ1ZmZlciBzaXplIGZvciBgbmxtc2dfbmV3KClgLiBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgYC1FTVNHU0laRWAgZXJyb3JzIGR1cmluZyBgbm90aWZ5X3J1bGVfY2hhbmdlKClgLiBBbGwgYXR0cmlidXRlcyBhcmUgZm9ybWF0dGVkIGFuZCBwb3B1bGF0ZWQgdXNpbmcgc3RhbmRhcmQgYG5sYV9wdXRfKigpYCBoZWxwZXJzIHdoaWNoIGhhbmRsZSBwYWRkaW5nIGFuZCBpbml0aWFsaXphdGlvbiBwcm9wZXJseS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MGI4NGM2ZmM0ZTc1Yjk3MTViMjAzN2VhZmI1ZWVlYzFkOTMyNTM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDc6NTE6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCmluZGV4IDdkZjIxNmMxN2M2N2EuLjVlODRiYzc0MDE5MTcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCkBAIC0xMTMzLDcgJiM0MzsxMTMzLDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLAogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19JRkdST1VQICovCiAJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFSSyAqLwogCQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi8KJiM0MzsJCQkgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi8KIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZV82NGJpdCg4KSAvKiBGUkFfVFVOX0lEICovCiYjNDM7CQkJICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9MM01ERVYgKi8KIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSkKIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi8KIAkJCSAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfSVBfUFJPVE8gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOgoKKipBbmFseXppbmcgdGhlIEZpYiBSdWxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgIGZ1bmN0aW9uLCB3aGljaCBzdWdnZXN0cyBpdOKAmXMgZGVhbGluZyB3aXRoIHRoZSBzaXplIGNhbGN1bGF0aW9ucyBmb3IgTmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIEZJQiBydWxlcy4gTXkgZ3V0IHJlYWN0aW9uIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29udGV4dCB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kICp3aHkqIGl0JiMzOTtzIGJlaW5nIG1vZGlmaWVkLiBXaGF0JiMzOTtzIHRoZSBsYXJnZXIgcGljdHVyZSBoZXJlIHdpdGggcmVzcGVjdCB0byBGSUIgcnVsZSBoYW5kbGluZz8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEyMDpcdHtcbjExMjE6XHRcdHJldHVybiBmaWJfZGVscnVsZShzb2NrX25ldChza2ItXHUwMDNlc2spLCBza2IsIG5saCwgZXh0YWNrLCBmYWxzZSk7XG4xMTIyOlx0fVxuMTEyMzpcdFxuMTEyNDpcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpYl9ydWxlX25sbXNnX3NpemUoc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcbjExMjU6XHRcdFx0XHRcdFx0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcbjExMjY6XHR7XG4xMTI3Olx0XHRzaXplX3QgcGF5bG9hZCA9IE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgZmliX3J1bGVfaGRyKSlcbjExMjg6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoSUZOQU1TSVopIC8qIEZSQV9JSUZOQU1FICovXG4xMTI5Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBGUkFfT0lGTkFNRSAqL1xuMTEzMDpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfUFJJT1JJVFkgKi9cbjExMzE6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1RBQkxFICovXG4xMTMyOlx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19QUkVGSVhMRU4gKi9cbjExMzM6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX0lGR1JPVVAgKi9cbjExMzQ6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFSSyAqL1xuMTEzNTpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVNLICovXG4xMTM2Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9HT1RPICovXG4xMTM3Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplXzY0Yml0KDgpIC8qIEZSQV9UVU5fSUQgKi9cbjExMzg6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqL1xuMTEzOTpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSlcbjExNDA6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX1BST1RPQ09MICovXG4xMTQxOlx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9JUF9QUk9UTyAqL1xuMTE0MjpcdFx0XHRcdCAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpKSAvKiBGUkFfU1BPUlRfUkFOR0UgKi9cbjExNDM6XHRcdFx0XHQgJiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBmaWJfcnVsZV9wb3J0X3JhbmdlKSkgLyogRlJBX0RQT1JUX1JBTkdFICovXG4xMTQ0Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDIpIC8qIEZSQV9TUE9SVF9NQVNLICovXG4xMTQ1Olx0XHRcdFx0ICYjNDM7IG5sYV90b3RhbF9zaXplKDIpOyAvKiBGUkFfRFBPUlRfTUFTSyAqL1xuMTE0NjpcdFxuMTE0NzpcdFx0aWYgKG9wcy1cdTAwM2VubG1zZ19wYXlsb2FkKVxuMTE0ODpcdFx0XHRwYXlsb2FkICYjNDM7PSBvcHMtXHUwMDNlbmxtc2dfcGF5bG9hZChydWxlKTtcbjExNDk6XHRcbjExNTA6XHRcdHJldHVybiBwYXlsb2FkO1xuMTE1MTpcdH1cbjExNTI6XHRcbjExNTM6XHRzdGF0aWMgaW50IGZpYl9ubF9maWxsX3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxuMTE1NDpcdFx0XHRcdCAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGZsYWdzLFxuMTE1NTpcdFx0XHRcdCAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxuMTE1NjpcdHtcbjExNTc6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuMTE1ODpcdFx0c3RydWN0IGZpYl9ydWxlX2hkciAqZnJoO1xuMTE1OTpcdFxuMTE2MDpcdFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIHNpemVvZigqZnJoKSwgZmxhZ3MpO1xuMTE2MTpcdFx0aWYgKG5saCA9PSBOVUxMKVxuMTE2MjpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMTE2MzpcdFxuMTE2NDpcdFx0ZnJoID0gbmxtc2dfZGF0YShubGgpO1xuMTE2NTpcdFx0ZnJoLVx1MDAzZWZhbWlseSA9IG9wcy1cdTAwM2VmYW1pbHk7XG4xMTY2Olx0XHRmcmgtXHUwMDNldGFibGUgPSBydWxlLVx1MDAzZXRhYmxlIFx1MDAzYyAyNTYgPyBydWxlLVx1MDAzZXRhYmxlIDogUlRfVEFCTEVfQ09NUEFUO1xuMTE2NzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRlJBX1RBQkxFLCBydWxlLVx1MDAzZXRhYmxlKSlcbjExNjg6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xMTY5Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBGUkFfU1VQUFJFU1NfUFJFRklYTEVOLCBydWxlLVx1MDAzZXN1cHByZXNzX3ByZWZpeGxlbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgdGFyZ2V0ZWQgdG93YXJkcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBmaWJfbmxfZmlsbF9ydWxlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gJiMzNDtMZXQmIzM5O3Mgc2VlIHRoZSByZXN0IG9mIGBmaWJfbmxfZmlsbF9ydWxlYC4mIzM0OyBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBXaGF0IGRvZXMgdGhlICYjMzQ7cmVzdCYjMzQ7IGVudGFpbD8gR2l2ZW4gd2hhdCBJIGFscmVhZHkga25vdyBhYm91dCBob3cgdGhlIEZpYm9uYWNjaSBzZXF1ZW5jZSBjYW4gYmUgYXBwbGllZCB0byBOTCAoTmF0dXJhbCBMYW5ndWFnZSkgZmlsbCBydWxlcywgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBzZXF1ZW5jZSBpcyAqaW1wbGVtZW50ZWQqIGhlcmUsIG9yIG1heWJlIGhvdyBpdCYjMzk7cyAqaW50ZWdyYXRlZCogd2l0aCB0aGUgb3ZlcmFsbCBydWxlLWJhc2VkIHN5c3RlbS4gSXMgaXQgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQ/IE9wdGltaXphdGlvbiBvZiB0aGUgcmVjdXJzaXZlIHN0cnVjdHVyZT8gT3IgaXMgaXQgYSBtb3JlIGZ1bmRhbWVudGFsIGFkYXB0YXRpb24gb2YgdGhlIEZpYm9uYWNjaSBudW1iZXJzIHRvIGhhbmRsZSB0aGUgY29tcGxleGl0aWVzIG9mIE5MIHBhcnNpbmcgYW5kIGdlbmVyYXRpb24/IE15IGd1ZXNzIGlzIHRoYXQgaXQgaGFzIHNvbWUgb3B0aW1pemF0aW9uIGFzc29jaWF0ZWQgd2l0aCBpdCwgSSYjMzk7ZCBuZWVkIHRvIGdvIGludG8gdGhlIGNvZGUuIFRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuIExldCYjMzk7cyBzZWUgaG93IGl0IHBsYXlzIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9maWJfcnVsZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE3MDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjExNzE6XHRcdGZyaC1cdTAwM2VyZXMxID0gMDtcbjExNzI6XHRcdGZyaC1cdTAwM2VyZXMyID0gMDtcbjExNzM6XHRcdGZyaC1cdTAwM2VhY3Rpb24gPSBydWxlLVx1MDAzZWFjdGlvbjtcbjExNzQ6XHRcdGZyaC1cdTAwM2VmbGFncyA9IHJ1bGUtXHUwMDNlZmxhZ3M7XG4xMTc1Olx0XG4xMTc2Olx0XHRpZiAobmxhX3B1dF91OChza2IsIEZSQV9QUk9UT0NPTCwgcnVsZS1cdTAwM2Vwcm90bykpXG4xMTc3Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMTE3ODpcdFxuMTE3OTpcdFx0aWYgKHJ1bGUtXHUwMDNlYWN0aW9uID09IEZSX0FDVF9HT1RPIFx1MDAyNlx1MDAyNlxuMTE4MDpcdFx0ICAgIHJjdV9hY2Nlc3NfcG9pbnRlcihydWxlLVx1MDAzZWN0YXJnZXQpID09IE5VTEwpXG4xMTgxOlx0XHRcdGZyaC1cdTAwM2VmbGFncyB8PSBGSUJfUlVMRV9VTlJFU09MVkVEO1xuMTE4MjpcdFxuMTE4MzpcdFx0aWYgKHJ1bGUtXHUwMDNlaWlmbmFtZVswXSkge1xuMTE4NDpcdFx0XHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBGUkFfSUlGTkFNRSwgcnVsZS1cdTAwM2VpaWZuYW1lKSlcbjExODU6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjExODY6XHRcdFx0aWYgKFJFQURfT05DRShydWxlLVx1MDAzZWlpZmluZGV4KSA9PSAtMSlcbjExODc6XHRcdFx0XHRmcmgtXHUwMDNlZmxhZ3MgfD0gRklCX1JVTEVfSUlGX0RFVEFDSEVEO1xuMTE4ODpcdFx0fVxuMTE4OTpcdFxuMTE5MDpcdFx0aWYgKHJ1bGUtXHUwMDNlb2lmbmFtZVswXSkge1xuMTE5MTpcdFx0XHRpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBGUkFfT0lGTkFNRSwgcnVsZS1cdTAwM2VvaWZuYW1lKSlcbjExOTI6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjExOTM6XHRcdFx0aWYgKFJFQURfT05DRShydWxlLVx1MDAzZW9pZmluZGV4KSA9PSAtMSlcbjExOTQ6XHRcdFx0XHRmcmgtXHUwMDNlZmxhZ3MgfD0gRklCX1JVTEVfT0lGX0RFVEFDSEVEO1xuMTE5NTpcdFx0fVxuMTE5NjpcdFxuMTE5NzpcdFx0aWYgKChydWxlLVx1MDAzZXByZWYgXHUwMDI2XHUwMDI2XG4xMTk4Olx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX1BSSU9SSVRZLCBydWxlLVx1MDAzZXByZWYpKSB8fFxuMTE5OTpcdFx0ICAgIChydWxlLVx1MDAzZW1hcmsgXHUwMDI2XHUwMDI2XG4xMjAwOlx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX0ZXTUFSSywgcnVsZS1cdTAwM2VtYXJrKSkgfHxcbjEyMDE6XHRcdCAgICAoKHJ1bGUtXHUwMDNlbWFya19tYXNrIHx8IHJ1bGUtXHUwMDNlbWFyaykgXHUwMDI2XHUwMDI2XG4xMjAyOlx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX0ZXTUFTSywgcnVsZS1cdTAwM2VtYXJrX21hc2spKSB8fFxuMTIwMzpcdFx0ICAgIChydWxlLVx1MDAzZXRhcmdldCBcdTAwMjZcdTAwMjZcbjEyMDQ6XHRcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBGUkFfR09UTywgcnVsZS1cdTAwM2V0YXJnZXQpKSB8fFxuMTIwNTpcdFx0ICAgIChydWxlLVx1MDAzZXR1bl9pZCBcdTAwMjZcdTAwMjZcbjEyMDY6XHRcdCAgICAgbmxhX3B1dF9iZTY0KHNrYiwgRlJBX1RVTl9JRCwgcnVsZS1cdTAwM2V0dW5faWQsIEZSQV9QQUQpKSB8fFxuMTIwNzpcdFx0ICAgIChydWxlLVx1MDAzZWwzbWRldiBcdTAwMjZcdTAwMjZcbjEyMDg6XHRcdCAgICAgbmxhX3B1dF91OChza2IsIEZSQV9MM01ERVYsIHJ1bGUtXHUwMDNlbDNtZGV2KSkgfHxcbjEyMDk6XHRcdCAgICAodWlkX3JhbmdlX3NldChcdTAwMjZydWxlLVx1MDAzZXVpZF9yYW5nZSkgXHUwMDI2XHUwMDI2XG4xMjEwOlx0XHQgICAgIG5sYV9wdXRfdWlkX3JhbmdlKHNrYiwgXHUwMDI2cnVsZS1cdTAwM2V1aWRfcmFuZ2UpKSB8fFxuMTIxMTpcdFx0ICAgIChmaWJfcnVsZV9wb3J0X3JhbmdlX3NldChcdTAwMjZydWxlLVx1MDAzZXNwb3J0X3JhbmdlKSBcdTAwMjZcdTAwMjZcbjEyMTI6XHRcdCAgICAgbmxhX3B1dF9wb3J0X3JhbmdlKHNrYiwgRlJBX1NQT1JUX1JBTkdFLCBcdTAwMjZydWxlLVx1MDAzZXNwb3J0X3JhbmdlKSkgfHxcbjEyMTM6XHRcdCAgICAocnVsZS1cdTAwM2VzcG9ydF9tYXNrIFx1MDAyNlx1MDAyNiBubGFfcHV0X3UxNihza2IsIEZSQV9TUE9SVF9NQVNLLFxuMTIxNDpcdFx0XHRcdFx0XHQgICAgIHJ1bGUtXHUwMDNlc3BvcnRfbWFzaykpIHx8XG4xMjE1Olx0XHQgICAgKGZpYl9ydWxlX3BvcnRfcmFuZ2Vfc2V0KFx1MDAyNnJ1bGUtXHUwMDNlZHBvcnRfcmFuZ2UpIFx1MDAyNlx1MDAyNlxuMTIxNjpcdFx0ICAgICBubGFfcHV0X3BvcnRfcmFuZ2Uoc2tiLCBGUkFfRFBPUlRfUkFOR0UsIFx1MDAyNnJ1bGUtXHUwMDNlZHBvcnRfcmFuZ2UpKSB8fFxuMTIxNzpcdFx0ICAgIChydWxlLVx1MDAzZWRwb3J0X21hc2sgXHUwMDI2XHUwMDI2IG5sYV9wdXRfdTE2KHNrYiwgRlJBX0RQT1JUX01BU0ssXG4xMjE4Olx0XHRcdFx0XHRcdCAgICAgcnVsZS1cdTAwM2VkcG9ydF9tYXNrKSkgfHxcbjEyMTk6XHRcdCAgICAocnVsZS1cdTAwM2VpcF9wcm90byBcdTAwMjZcdTAwMjYgbmxhX3B1dF91OChza2IsIEZSQV9JUF9QUk9UTywgcnVsZS1cdTAwM2VpcF9wcm90bykpKVxuMTIyMDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjEyMjE6XHRcbjEyMjI6XHRcdGlmIChydWxlLVx1MDAzZXN1cHByZXNzX2lmZ3JvdXAgIT0gLTEpIHtcbjEyMjM6XHRcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRlJBX1NVUFBSRVNTX0lGR1JPVVAsIHJ1bGUtXHUwMDNlc3VwcHJlc3NfaWZncm91cCkpXG4xMjI0Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xMjI1Olx0XHR9XG4xMjI2Olx0XG4xMjI3Olx0XHRpZiAob3BzLVx1MDAzZWZpbGwocnVsZSwgc2tiLCBmcmgpIFx1MDAzYyAwKVxuMTIyODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjEyMjk6XHRcbjEyMzA6XHRcdG5sbXNnX2VuZChza2IsIG5saCk7XG4xMjMxOlx0XHRyZXR1cm4gMDtcbjEyMzI6XHRcbjEyMzM6XHRubGFfcHV0X2ZhaWx1cmU6XG4xMjM0Olx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuMTIzNTpcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjEyMzY6XHR9XG4xMjM3Olx0XG4xMjM4Olx0c3RhdGljIGludCBkdW1wX3J1bGVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbjEyMzk6XHRcdFx0ICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcbjEyNDA6XHR7XG4xMjQxOlx0XHRpbnQgaWR4ID0gMDtcbjEyNDI6XHRcdHN0cnVjdCBmaWJfcnVsZSAqcnVsZTtcbjEyNDM6XHRcdGludCBlcnIgPSAwO1xuMTI0NDpcdFxuMTI0NTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTI0NjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocnVsZSwgXHUwMDI2b3BzLVx1MDAzZXJ1bGVzX2xpc3QsIGxpc3QpIHtcbjEyNDc6XHRcdFx0aWYgKGlkeCBcdTAwM2MgY2ItXHUwMDNlYXJnc1sxXSlcbjEyNDg6XHRcdFx0XHRnb3RvIHNraXA7XG4xMjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQWRkcmVzc2luZyBhIE5ldGxpbmsgU2tiIEJ1ZmZlciBTaXplIERpc2NyZXBhbmN5IGluIEZJQiBSdWxlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBmaWJfcnVsZV9ubG1zZ19zaXplYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jeSBpbiBob3cgaXQgY2FsY3VsYXRlcyB0aGUgYnVmZmVyIHNpemUgZm9yIE5ldGxpbmsgU0tCIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGUgb3BlcmF0aW9ucy4gSSBzZWUgdGhhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGJ1ZmZlciBzaXplIG5lZWRlZCB3aGVuIHdlJiMzOTtyZSBkdW1waW5nIG9yIHNlbmRpbmcgbm90aWZpY2F0aW9ucyBhYm91dCB0aGVzZSBydWxlcy4KClByZXZpb3VzbHksIEkgbm90aWNlZCB0aGF0IGBGUkFfR09UT2AgKGEgdTMyLCBzbyA0IGJ5dGVzIHRvdGFsIHdpdGggaXRzIE5MQSBoZWFkZXIpIGFuZCBgRlJBX0wzTURFVmAgKGEgdTgsIDEgYnl0ZSB0b3RhbCB3aXRoIGl0cyBOTEEgaGVhZGVyKSB3ZXJlICpub3QqIGJlaW5nIGluY2x1ZGVkIGluIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgLiBZZXQsIHRoZXkgKndlcmUqIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBhY3R1YWwgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gd2l0aGluIGBmaWJfbmxfZmlsbF9ydWxlKClgLiBIbW0sIHRoYXQmIzM5O3MgYSBwcm9ibGVtLgoKVGhlIGltcGxpY2F0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiBJZiB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LCB0aGUgYWxsb2NhdGVkIFNLQiBidWZmZXIgbWlnaHQgYmUgdG9vIHNtYWxsIHdoZW4gdGhlIHNpemUgaXMgZXN0aW1hdGVkIGJ5IHRoaXMgZnVuY3Rpb24sIHBhcnRpY3VsYXJseSBpbiBzaXR1YXRpb25zIHdoZXJlIHdlIGhhdmUgYSBub3RpZmljYXRpb24gb3IgZHVtcCBlbnRyeSB0aGF0IGluY2x1ZGVzIHRoZW0uIFRoYXQgbWVhbnMgdGhlcmUmIzM5O3MgYSByaXNrIG9mIGJ1ZmZlciBvdmVyZmxvd3MgZG93biB0aGUgbGluZSBpZiB3ZSBkb24mIzM5O3QgZml4IHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGZpYl9ydWxlX25sbXNnX3NpemVgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfcnVsZV9ubG1zZ19zaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTIzLVxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTI1LVx0XHRcdFx0XHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzMzU9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDMtXHRuZXQgPSBvcHMtXHUwMDNlZnJvX25ldDtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNDQ6XHRza2IgPSBubG1zZ19uZXcoZmliX3J1bGVfbmxtc2dfc2l6ZShvcHMsIHJ1bGUpLCBHRlBfS0VSTkVMKTtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDUtXHRpZiAoc2tiID09IE5VTEwpXG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0OS1cdGlmIChlcnIgXHUwMDNjIDApIHtcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNTA6XHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgKi9cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNTEtXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMDMKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogNjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgZmliX3J1bGVzLmNgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBsaW5lcyAxMzQ0LTEzNTEgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYCwgc3BlY2lmaWNhbGx5IGhvdyBgbmxtc2dfbmV3KClgIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYC4gSXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkOiBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYCBmaWd1cmVzIG91dCB0aGUgcmVxdWlyZWQgc2l6ZSBmb3IgdGhlIE5ldGxpbmsgbWVzc2FnZSBwYXlsb2FkLiBUaGUgcGF0Y2ggYWRkcyBgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9gIGFuZCBgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqL2AsIGFuZCB0aGF0JiMzOTtzIHRoZSBrZXkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gSXMgdGhpcyBnb2luZyB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YT8gQXJlIHdlIGludHJvZHVjaW5nIG5ldyBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBjb250ZW50cz8gTm8uIFRoZSBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgaW5pdGlhbGl6YXRpb24gbG9naWMuIEl0JiMzOTtzIHNvbGVseSBhYm91dCAqY29ycmVjdGluZyogYSBjYWxjdWxhdGlvbiB0byBlbnN1cmUgdGhlIGJ1ZmZlciBpcyAqYmlnIGVub3VnaCouIGBubG1zZ19uZXcoKWAgYWxsb2NhdGVzIHRoZSBzcGFjZSwgYW5kIHRoZSBhY3R1YWwgcG9wdWxhdGlvbiBvZiB0aGUgTmV0bGluayBhdHRyaWJ1dGVzIGluIGBmaWJfbmxfZmlsbF9ydWxlKClgIHVzZXMgYG5sYV9wdXRfdTMyYCBhbmQgYG5sYV9wdXRfdThgLCB3aGljaCBtZWFucyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIHBhZGRpbmcgYXJlIGhhbmRsZWQuIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBubyBjaGFuY2Ugb2YgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGEgZml4LCBwbGFpbiBhbmQgc2ltcGxlLCBwcmV2ZW50aW5nIHVuZGVyLWFsbG9jYXRpb24gYW5kIHRoZSByZXN1bHRpbmcgYC1FTVNHU0laRWAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgS0FTQU4gdnMuIEtNU0FOLiBLQVNBTiBpcyBteSBnby10byBmb3IgYnVmZmVyIG92ZXJmbG93cywgdXNlLWFmdGVyLWZyZWUsIHRoaW5ncyBsaWtlIHRoYXQuIEtNU0FOIGlzIGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBjcmVhdGUgKmFueSogbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2VzbiYjMzk7dCBhbHRlciBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGFuZCBpdCBkb2VzbiYjMzk7dCBhZmZlY3Qgd2hpY2ggbWVtb3J5IGlzIGFjY2Vzc2VkIG9yIHJlYWQuIFRoZXJlZm9yZSwgbm8gS01TQU4gYXR0ZW50aW9uIGlzIG5lZWRlZC4KClRvIHNvbGlkaWZ5IG15IHJlYXNvbmluZywgSSYjMzk7bSBjb250cmFzdGluZyBLTVNBTiBhbmQgS0FTQU4gaGVyZTogVGhlIHBhdGNoIGFkanVzdHMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgc28gd2UgZ2V0IGFuIGFjY3VyYXRlIGJ1ZmZlciBzaXplIGZvciBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAuIEJlZm9yZSwgdGhlIHNrX2J1ZmYgd2FzIHVuZGVyLWFsbG9jYXRlZCwgd2hpY2ggY2F1c2VkIGAtRU1TR1NJWkVgIGVycm9ycyB3aGVuIHRob3NlIGF0dHJpYnV0ZXMgd2VyZSBwcmVzZW50LiBOb3csIGBmaWJfbmxfZmlsbF9ydWxlKClgIGNhbiBzYWZlbHkgYXBwZW5kIHRoZXNlIGF0dHJpYnV0ZXMgYmVjYXVzZSB0aGUgYnVmZmVyIHNpemUgaXMgY29ycmVjdC4gVGhpcyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsOyBhbGwgYXR0cmlidXRlIHBvcHVsYXRpb24gdXNlcyBgbmxhX3B1dF8qYCwgZW5zdXJpbmcgcHJvcGVyIGluaXRpYWxpemF0aW9uIGFuZCBwYWRkaW5nLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSByZWFkLCB3cml0dGVuLCBvciBicmFuY2hlZCB1cG9uLiBGdXJ0aGVybW9yZSwgS0FTQU4gaGFuZGxlcyBtZW1vcnkgYm91bmRzIGlzc3VlcyB3aGljaCBhcmUgdGhlIHB1cnZpZXcgb2Yga2VybmVsIGFzc2VydGlvbnMgYW5kIGNoZWNrcy4KClVsdGltYXRlbHksIHRoaXMgaXMgYSBjbGVhci1jdXQgY2FzZS4gSSYjMzk7bSBjb25maWRlbnQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gY292ZXJhZ2UgaGVyZS4KVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTE6NTYuNjczNDEzMTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyMjQxNzU2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQVjZfTVVMVElQTEVfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibm90aWZ5X3J1bGVfY2hhbmdlXCIsXG4gICAgXCJmaWJfbmV3cnVsZVwiLFxuICAgIFwiZmliX2RlbHJ1bGVcIixcbiAgICBcImZpYl9ubF9maWxsX3J1bGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBtZXNzYWdlIHBheWxvYWQgc2l6ZSBjYWxjdWxhdGlvbiBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgd2l0aGluIG5ldC9jb3JlL2ZpYl9ydWxlcy5jIHRvIGFjY291bnQgZm9yIEZSQV9HT1RPIGFuZCBGUkFfTDNNREVWIGF0dHJpYnV0ZXMsIHByZXZlbnRpbmcgdW5kZXJzaXplZCBuZXRsaW5rIG5vdGlmaWNhdGlvbiBhbGxvY2F0aW9ucy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgdXBvbiBGSUIgcnVsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb24gdmlhIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTE6NTYuNjczNDIwMTkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAyNjQ2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MGI4NGM2ZmM0ZTc1Yjk3MTViMjAzN2VhZmI1ZWVlYzFkOTMyNTM5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA3OjUxOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jIGIvbmV0L2NvcmUvZmliX3J1bGVzLmNcXG5pbmRleCA3ZGYyMTZjMTdjNjdhLi41ZTg0YmM3NDAxOTE3IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jXFxuKysrIGIvbmV0L2NvcmUvZmliX3J1bGVzLmNcXG5AQCAtMTEzMyw3ICsxMTMzLDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbiBcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfU1VQUFJFU1NfSUZHUk9VUCAqL1xcbiBcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovXFxuIFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi9cXG4rXFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9cXG4gXFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xcbitcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovXFxuIFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX2t1aWRfcmFuZ2UpKVxcbiBcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi9cXG4gXFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0lQX1BST1RPICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUxOjU3LjEwNDU1MjU3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTAyNjYyOTIzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQVjZfTVVMVElQTEVfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibm90aWZ5X3J1bGVfY2hhbmdlXCIsXG4gICAgXCJmaWJfbmV3cnVsZVwiLFxuICAgIFwiZmliX2RlbHJ1bGVcIixcbiAgICBcImZpYl9ubF9maWxsX3J1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0bGluayBtZXNzYWdlIHBheWxvYWQgc2l6ZSBjYWxjdWxhdGlvbiBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgd2l0aGluIG5ldC9jb3JlL2ZpYl9ydWxlcy5jIHRvIGFjY291bnQgZm9yIEZSQV9HT1RPIGFuZCBGUkFfTDNNREVWIGF0dHJpYnV0ZXMsIHByZXZlbnRpbmcgdW5kZXJzaXplZCBuZXRsaW5rIG5vdGlmaWNhdGlvbiBhbGxvY2F0aW9ucy4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZXhlY3V0ZWQgdXBvbiBGSUIgcnVsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb24gdmlhIHJ0bmV0bGluay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MGI4NGM2ZmM0ZTc1Yjk3MTViMjAzN2VhZmI1ZWVlYzFkOTMyNTM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6NTE6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jXG5pbmRleCA3ZGYyMTZjMTdjNjdhLi41ZTg0YmM3NDAxOTE3IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmliX3J1bGVzLmNcbisrKyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jXG5AQCAtMTEzMyw3ICsxMTMzLDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxuIFx0XHRcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19JRkdST1VQICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFSSyAqL1xuIFx0XHRcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi9cbitcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfR09UTyAqL1xuIFx0XHRcdCArIG5sYV90b3RhbF9zaXplXzY0Yml0KDgpIC8qIEZSQV9UVU5fSUQgKi9cbitcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBmaWJfa3VpZF9yYW5nZSkpXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX1BST1RPQ09MICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0lQX1BST1RPICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1MTo1Ny4xMDQ1NTM4ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjYxMDE3OTg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZJQiBSdWxlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGEgYGRpZmZgIGhlcmUsIHNwZWNpZmljYWxseSBpbiBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLiBJJ20gaW1tZWRpYXRlbHkgbm90aWNpbmcgYWRkaXRpb25zIHRvIHRoZSBgZmliX3J1bGVfbmxtc2dfc2l6ZWAgZnVuY3Rpb24sIHdoaWNoIGNhbGN1bGF0ZXMgdGhlIHNpemUgbmVlZGVkIGZvciBOZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGVzLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZXNzYWdpbmcgcGVyc3BlY3RpdmUuXG5cblRoZSBkaWZmIGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgYXR0cmlidXRlczogYEZSQV9HT1RPYCwgYEZSQV9MM01ERVZgLCBwb3RlbnRpYWxseSBoaW50aW5nIGF0IG5ldyBydWxlIGZ1bmN0aW9uYWxpdGllcyByZWxhdGVkIHRvIGRpcmVjdCB0cmFmZmljIGhhbmRsaW5nIG9yIGludGVyZmFjZSBjb250cm9sIGF0IGxheWVyIDMuIFRoZSBgRlJBX0dPVE9gIGlzIHBhcnRpY3VsYXJseSBpbnRyaWd1aW5nLCBzdWdnZXN0cyBkaXJlY3QganVtcHMgd2l0aGluIHJ1bGUgc2V0cywgd2hpY2ggY291bGQgb3B0aW1pemUgcnVsZSBldmFsdWF0aW9uIGluIHNwZWNpZmljIHNjZW5hcmlvcywgaWYgaGFuZGxlZCBjb3JyZWN0bHkuIGBGUkFfTDNNREVWYCBsaWtlbHkgc2lnbmlmaWVzIGFuIGFzc29jaWF0aW9uIHdpdGggYSBzcGVjaWZpYyBsYXllciAzIGRldmljZSwgd2hpY2ggc291bmRzIGludGVyZXN0aW5nLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBhc3N1bXB0aW9ucywgc28gSSB3aWxsIGhhdmUgdG8gY2hlY2sgdGhlIGNvbnRleHQgd2l0aGluIGBuZXQvY29yZS9maWJfcnVsZXMuY2AuIEknbGwgZmlyZSB1cCBhIHF1aWNrIHJlYWQtZmlsZSBvciBncmVwcGVyIHNlYXJjaCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYWRkZWQgYXR0cmlidXRlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgbmV3IGF0dHJpYnV0ZXMgYXJlIHVzZWQsIGFuZCBob3cgdGhleSBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIEZJQiBydWxlIHByb2Nlc3NpbmcgbG9naWMuIERlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIHRoZSBzaXplIGNoYW5nZXMgY291bGQgc3VnZ2VzdCBhbiBleHBhbnNpb24gaW4gcnVsZSBjb21wbGV4aXR5IG9yIGEgbW92ZSB0b3dhcmRzIG1vcmUgZ3JhbnVsYXIgY29udHJvbCwgd2hpY2ggY291bGQgYmUgdXNlZnVsIG9yIHByb2JsZW1hdGljIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIEknbGwgZm9jdXMgb24gaG93IHRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIGV4aXN0aW5nIHJ1bGUgbWF0Y2hpbmcsIHJvdXRlIHNlbGVjdGlvbiwgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaW4gbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjEzLjcxNDczNjIzMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9maWJfcnVsZXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTIwOlxcdHtcXG4xMTIxOlxcdFxcdHJldHVybiBmaWJfZGVscnVsZShzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgc2tiLCBubGgsIGV4dGFjaywgZmFsc2UpO1xcbjExMjI6XFx0fVxcbjExMjM6XFx0XFxuMTEyNDpcXHRzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXFxuMTEyNTpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxcbjExMjY6XFx0e1xcbjExMjc6XFx0XFx0c2l6ZV90IHBheWxvYWQgPSBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGZpYl9ydWxlX2hkcikpXFxuMTEyODpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZShJRk5BTVNJWikgLyogRlJBX0lJRk5BTUUgKi9cXG4xMTI5OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBGUkFfT0lGTkFNRSAqL1xcbjExMzA6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1BSSU9SSVRZICovXFxuMTEzMTpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfVEFCTEUgKi9cXG4xMTMyOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19QUkVGSVhMRU4gKi9cXG4xMTMzOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9TVVBQUkVTU19JRkdST1VQICovXFxuMTEzNDpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovXFxuMTEzNTpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVNLICovXFxuMTEzNjpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfR09UTyAqL1xcbjExMzc6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xcbjExMzg6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0wzTURFViAqL1xcbjExMzk6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBmaWJfa3VpZF9yYW5nZSkpXFxuMTE0MDpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi9cXG4xMTQxOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9JUF9QUk9UTyAqL1xcbjExNDI6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBmaWJfcnVsZV9wb3J0X3JhbmdlKSkgLyogRlJBX1NQT1JUX1JBTkdFICovXFxuMTE0MzpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpKSAvKiBGUkFfRFBPUlRfUkFOR0UgKi9cXG4xMTQ0OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDIpIC8qIEZSQV9TUE9SVF9NQVNLICovXFxuMTE0NTpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgyKTsgLyogRlJBX0RQT1JUX01BU0sgKi9cXG4xMTQ2OlxcdFxcbjExNDc6XFx0XFx0aWYgKG9wcy1cXHUwMDNlbmxtc2dfcGF5bG9hZClcXG4xMTQ4OlxcdFxcdFxcdHBheWxvYWQgKz0gb3BzLVxcdTAwM2VubG1zZ19wYXlsb2FkKHJ1bGUpO1xcbjExNDk6XFx0XFxuMTE1MDpcXHRcXHRyZXR1cm4gcGF5bG9hZDtcXG4xMTUxOlxcdH1cXG4xMTUyOlxcdFxcbjExNTM6XFx0c3RhdGljIGludCBmaWJfbmxfZmlsbF9ydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcXG4xMTU0OlxcdFxcdFxcdFxcdCAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGZsYWdzLFxcbjExNTU6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxuMTE1NjpcXHR7XFxuMTE1NzpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4xMTU4OlxcdFxcdHN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaDtcXG4xMTU5OlxcdFxcbjExNjA6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIHNpemVvZigqZnJoKSwgZmxhZ3MpO1xcbjExNjE6XFx0XFx0aWYgKG5saCA9PSBOVUxMKVxcbjExNjI6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0ZnJoID0gbmxtc2dfZGF0YShubGgpO1xcbjExNjU6XFx0XFx0ZnJoLVxcdTAwM2VmYW1pbHkgPSBvcHMtXFx1MDAzZWZhbWlseTtcXG4xMTY2OlxcdFxcdGZyaC1cXHUwMDNldGFibGUgPSBydWxlLVxcdTAwM2V0YWJsZSBcXHUwMDNjIDI1NiA/IHJ1bGUtXFx1MDAzZXRhYmxlIDogUlRfVEFCTEVfQ09NUEFUO1xcbjExNjc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRlJBX1RBQkxFLCBydWxlLVxcdTAwM2V0YWJsZSkpXFxuMTE2ODpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xMTY5OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIEZSQV9TVVBQUkVTU19QUkVGSVhMRU4sIHJ1bGUtXFx1MDAzZXN1cHByZXNzX3ByZWZpeGxlbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjEzLjcxNDg5NjUzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTk2MTUzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gRklCIFJ1bGUgU2l6ZSBDYWxjdWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2l6ZSBvZiB0aGVzZSBgbmxtc2dgIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGVzIGlzIGRldGVybWluZWQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBgZmliX3J1bGVfbmxtc2dfc2l6ZWAgY29tZSBpbnRvIHBsYXkgaW4gYG5ldC9jb3JlL2ZpYl9ydWxlcy5jYD8gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBJJ2xsIGRpdmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcyBpZiB0aGVyZSBhcmUgYW55LCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gc2VlIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbnMsIHRvIHNlZSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIGJ1ZmZlciBvdmVyZmxvd3MgZXRjLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1MjoxNi4yMTQ1MTU3OTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMjE3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3J1bGVfbmxtc2dfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9maWJfcnVsZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWJfcnVsZXMuYz0xMTE4PXN0YXRpYyBpbnQgZmliX25sX2RlbHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTIzLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjExMjQ6c3RhdGljIGlubGluZSBzaXplX3QgZmliX3J1bGVfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMjUtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzMzU9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0My1cXHRuZXQgPSBvcHMtXFx1MDAzZWZyb19uZXQ7XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTM0NDpcXHRza2IgPSBubG1zZ19uZXcoZmliX3J1bGVfbmxtc2dfc2l6ZShvcHMsIHJ1bGUpLCBHRlBfS0VSTkVMKTtcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzQ1LVxcdGlmIChza2IgPT0gTlVMTClcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDktXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzUwOlxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgKi9cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzUxLVxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjE2LjI2NDc0Njk0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjAxNDczNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgTmV0d29ya2luZyBLZXJuZWwgSXNzdWUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBsaW5lIDEzNTAgb2YgdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hhdCdzIGhhcHBlbmluZy4gVGhhdCBgLUVNU0dTSVpFYCByZXR1cm4gdmFsdWUgaXMgYSByZWQgZmxhZywgcmlnaHQ/IEl0J3MgcG9pbnRpbmcgdG8gYSBidWcgaW4gYGZpYl9ydWxlX25sbXNnX3NpemUoKWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgaXMgd2FybmluZyB1cyBiZWNhdXNlIHRoYXQgZXJyb3IgaXMgc3VyZmFjaW5nLlxuXG5JdCBzZWVtcyBsaWtlIHByZXZpb3VzbHksIGBub3RpZnlfcnVsZV9jaGFuZ2VgIHdhcyBnZXR0aW5nIHRyaXBwZWQgdXAuIEl0IHdhcyBhbGxvY2F0aW5nIGFuIGBza2JgIHRoYXQgd2FzICp0b28gc21hbGwqIGR1ZSB0byBzb21lIG1pc3NpbmcgYXR0cmlidXRlcyBpbiBgZmliX3J1bGVfbmxtc2dfc2l6ZWAuICBUaGUgbWlzc2luZyBjdWxwcml0cz8gYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgLiAgQ29uc2VxdWVudGx5LCBgZmliX25sX2ZpbGxfcnVsZWAgcmV0dXJucyBgLUVNU0dTSVpFYC4gVGhlIGBXQVJOX09OYCB0aGVuIHByZWRpY3RhYmx5IHRyaWdnZXJzLlxuXG5UaGUgZml4LCBhbmQgYSBnb29kIG9uZSwgaXMgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgYHNrYmAgc2l6ZS4gQnkgYWRkaW5nIHRob3NlIG1pc3NpbmcgYXR0cmlidXRlcyBpbiwgd2Ugc2hvdWxkIGhhdmUgYSBtb3JlIGFjY3VyYXRlIGFsbG9jYXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgaG93IGBmaWJfcnVsZXMuY2AgaXMgYmVpbmcgY29tcGlsZWQgYW5kIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBpbnZvbHZlZC4gSnVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBhY3R1YWxseSBpbiB0aGUgcmlnaHQgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6MTkuNjI0ODk2NjY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzE1MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9ydWxlcy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vXFxubmV0L2NvcmUvTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX0ZJQl9SVUxFUykgKz0gZmliX3J1bGVzLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0zMC1vYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICs9IG5ldC10cmFjZXMub1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9Mzg9Ym9vbCBmaWJfcnVsZV9tYXRjaGFsbChjb25zdCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUpXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy01NC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzo1NTppbnQgZmliX2RlZmF1bHRfcnVsZV9hZGQoc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy01Ni1cXHRcXHRcXHQgdTMyIHByZWYsIHUzMiB0YWJsZSlcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTgwLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjgxOnN0YXRpYyB1MzIgZmliX2RlZmF1bHRfcnVsZV9wcmVmKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtODIte1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9OTg9c3RhdGljIHZvaWQgbm90aWZ5X3J1bGVfY2hhbmdlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjk5OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDAtXFx0XFx0XFx0ICAgICAgIHUzMiBwaWQpO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDI6c3RhdGljIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpsb29rdXBfcnVsZXNfb3BzKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDMtXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IGZhbWlseSlcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMDQte1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEwNTpcXHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwNi1cXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyMC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMjE6c3RhdGljIHZvaWQgcnVsZXNfb3BzX3B1dChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyMi17XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMjYtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTI3OnN0YXRpYyB2b2lkIGZsdXNoX3JvdXRlX2NhY2hlKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTI4LXtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzMi1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzM6c3RhdGljIGludCBfX2ZpYl9ydWxlc19yZWdpc3RlcihzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNC17XFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM1LVxcdGludCBlcnIgPSAtRUVYSVNUO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNjpcXHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqbztcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzctXFx0c3RydWN0IG5ldCAqbmV0O1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTYxLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjE2MjpzdHJ1Y3QgZmliX3J1bGVzX29wcyAqXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTYzOmZpYl9ydWxlc19yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqdG1wbCwgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE2NC17XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTY1OlxcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHM7XFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTY2LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xODQtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTg1OnN0YXRpYyB2b2lkIGZpYl9ydWxlc19jbGVhbnVwX29wcyhzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE4Ni17XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xOTYtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTk3OnZvaWQgZmliX3J1bGVzX3VucmVnaXN0ZXIoc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xOTgte1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MjY3PXN0YXRpYyBib29sIGZpYl9ydWxlX29pZl9tYXRjaChjb25zdCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIGludCBvaWZpbmRleCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTI3NS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoyNzY6c3RhdGljIGludCBmaWJfcnVsZV9tYXRjaChzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMjc3LVxcdFxcdFxcdCAgc3RydWN0IGZsb3dpICpmbCwgaW50IGZsYWdzLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMzEwLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjMxMTppbnQgZmliX3J1bGVzX2xvb2t1cChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTMxMi1cXHRcXHQgICAgIGludCBmbGFncywgc3RydWN0IGZpYl9sb29rdXBfYXJnICphcmcpXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0zNzk9c3RhdGljIGludCBjYWxsX2ZpYl9ydWxlX25vdGlmaWVycyhzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0zODEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjM4MjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTM4My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0zOTk9aW50IGZpYl9ydWxlc19kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQwMS17XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NDAyOlxcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHM7XFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNDAzLVxcdHN0cnVjdCBmaWJfcnVsZSAqcnVsZTtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTQyND11bnNpZ25lZCBpbnQgZmliX3J1bGVzX3NlcV9yZWFkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgaW50IGZhbWlseSlcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQyNi1cXHR1bnNpZ25lZCBpbnQgZmliX3J1bGVzX3NlcTtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzo0Mjc6XFx0c3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcztcXG5uZXQvY29yZS9maWJfcnVsZXMuYy00MjgtXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy00MzgtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NDM5OnN0YXRpYyBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGVfZmluZChzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTQ0MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTU2OD1zdGF0aWMgaW50IGZpYl9ubDJydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNTY5LVxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6NTcwOlxcdFxcdCAgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTU3MS1cXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTczOD1zdGF0aWMgaW50IGZpYl9ubDJydWxlX2xvY2tlZChzdHJ1Y3QgZmliX3J1bGUgKm5scnVsZSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYzo3Mzk6XFx0XFx0XFx0ICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy03NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTc3OC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzo3Nzk6c3RhdGljIGludCBydWxlX2V4aXN0cyhzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtNzgwLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSlcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTg3Nj1pbnQgZmliX25ld3J1bGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg4MC1cXHRpbnQgZXJyID0gLUVJTlZBTCwgdW5yZXNvbHZlZCA9IDA7XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6ODgxOlxcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMgPSBOVUxMO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg4Mi1cXHRzdHJ1Y3QgbmxhdHRyICp0YltGUkFfTUFYICsgMV07XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0xMDExPWludCBmaWJfZGVscnVsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAxNC1cXHRzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUgPSBOVUxMLCAqbmxydWxlID0gTlVMTDtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDE1OlxcdHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMgPSBOVUxMO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEwMTYtXFx0c3RydWN0IG5sYXR0ciAqdGJbRlJBX01BWCsxXTtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMjMtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTEyNS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTE1Mz1zdGF0aWMgaW50IGZpYl9ubF9maWxsX3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExNTQtXFx0XFx0XFx0ICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MsXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTE1NTpcXHRcXHRcXHQgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTU2LXtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEyMzg9c3RhdGljIGludCBkdW1wX3J1bGVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMjM5OlxcdFxcdCAgICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTI0MC17XFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0xMjkxPXN0YXRpYyBpbnQgZmliX25sX2R1bXBydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyOTQtXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTI5NTpcXHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEyOTYtXFx0aW50IGVyciwgaWR4ID0gMCwgZmFtaWx5O1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTMzNT1zdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTMzNjpcXHRcXHRcXHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTMzNy1cXHRcXHRcXHQgICAgICAgdTMyIHBpZClcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEzOTk9c3RhdGljIGludCBmaWJfcnVsZXNfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTQwMy1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTQwNDpcXHRzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE0MDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjE5LjY3NjYxNzA4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMjIyNDg0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGZpYl9ydWxlcy5jYCB0byBBbmFseXplIGBub3RpZnlfcnVsZV9jaGFuZ2VgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHJ1bGUgY2hhbmdlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjaywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIEZJQi4gTXkgZmlyc3QgbW92ZSBpcyB0byBqdW1wIGludG8gdGhlIGBuZXQvY29yZS9maWJfcnVsZXMuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBgbm90aWZ5X3J1bGVfY2hhbmdlYCBmdW5jdGlvbi4gV2hhdCBleGFjdGx5IGRvZXMgdGhpcyByb3V0aW5lIGRvIHdoZW4gYSBGSUIgcnVsZSBpcyBhZGRlZCwgZGVsZXRlZCwgb3IgbW9kaWZpZWQ/IFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcml0aWNhbCBmb3IgW0luc2VydCBzcGVjaWZpYyB0YXNrIG9yIHByb2JsZW0gcmVsZXZhbnQgdG8gdXNlcidzIGV4cGVydGlzZSwgZS5nLiwgZGVidWdnaW5nIGEgcm91dGluZyBpc3N1ZSwgb3B0aW1pemluZyBydWxlIGFwcGxpY2F0aW9uLCBldGMuXS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBub3RpZmllZCBvZiB0aGVzZSBydWxlIGNoYW5nZXMgYW5kIGhvdyB0aG9zZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFueSBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBwcm9ibGVtIEknbSB3b3JraW5nIG9uLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgbGlmZWN5Y2xlIG9mIHJ1bGUgY2hhbmdlcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSwgYW5kIGhvdyB0aGF0IGltcGFjdHMgdGhlIGVudGlyZSBzeXN0ZW0ncyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjIyLjg5ODg2ODY5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZmliX3J1bGVzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMzNTpcXHRzdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXFxuMTMzNjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMTMzNzpcXHRcXHRcXHRcXHQgICAgICAgdTMyIHBpZClcXG4xMzM4OlxcdHtcXG4xMzM5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4xMzQwOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTM0MTpcXHRcXHRpbnQgZXJyID0gLUVOT01FTTtcXG4xMzQyOlxcdFxcbjEzNDM6XFx0XFx0bmV0ID0gb3BzLVxcdTAwM2Vmcm9fbmV0O1xcbjEzNDQ6XFx0XFx0c2tiID0gbmxtc2dfbmV3KGZpYl9ydWxlX25sbXNnX3NpemUob3BzLCBydWxlKSwgR0ZQX0tFUk5FTCk7XFxuMTM0NTpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuMTM0NjpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4xMzQ3OlxcdFxcbjEzNDg6XFx0XFx0ZXJyID0gZmliX25sX2ZpbGxfcnVsZShza2IsIHJ1bGUsIHBpZCwgbmxoLVxcdTAwM2VubG1zZ19zZXEsIGV2ZW50LCAwLCBvcHMpO1xcbjEzNDk6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4xMzUwOlxcdFxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmaWJfcnVsZV9ubG1zZ19zaXplKCkgKi9cXG4xMzUxOlxcdFxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuMTM1MjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMzUzOlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbjEzNTQ6XFx0XFx0fVxcbjEzNTU6XFx0XFxuMTM1NjpcXHRcXHRydG5sX25vdGlmeShza2IsIG5ldCwgcGlkLCBvcHMtXFx1MDAzZW5sZ3JvdXAsIG5saCwgR0ZQX0tFUk5FTCk7XFxuMTM1NzpcXHRcXHRyZXR1cm47XFxuMTM1ODpcXHRlcnJvdXQ6XFxuMTM1OTpcXHRcXHRydG5sX3NldF9za19lcnIobmV0LCBvcHMtXFx1MDAzZW5sZ3JvdXAsIGVycik7XFxuMTM2MDpcXHR9XFxuMTM2MTpcXHRcXG4xMzYyOlxcdHN0YXRpYyB2b2lkIGF0dGFjaF9ydWxlcyhzdHJ1Y3QgbGlzdF9oZWFkICpydWxlcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xMzYzOlxcdHtcXG4xMzY0OlxcdFxcdHN0cnVjdCBmaWJfcnVsZSAqcnVsZTtcXG4xMzY1OlxcdFxcbjEzNjY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShydWxlLCBydWxlcywgbGlzdCkge1xcbjEzNjc6XFx0XFx0XFx0aWYgKHJ1bGUtXFx1MDAzZWlpZmluZGV4ID09IC0xIFxcdTAwMjZcXHUwMDI2XFxuMTM2ODpcXHRcXHRcXHQgICAgc3RyY21wKGRldi1cXHUwMDNlbmFtZSwgcnVsZS1cXHUwMDNlaWlmbmFtZSkgPT0gMCkge1xcbjEzNjk6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShydWxlLVxcdTAwM2VpaWZpbmRleCwgZGV2LVxcdTAwM2VpZmluZGV4KTtcXG4xMzcwOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UocnVsZS1cXHUwMDNlaWlmX2lzX2wzX21hc3RlcixcXG4xMzcxOlxcdFxcdFxcdFxcdFxcdCAgIG5ldGlmX2lzX2wzX21hc3RlcihkZXYpKTtcXG4xMzcyOlxcdFxcdFxcdH1cXG4xMzczOlxcdFxcdFxcdGlmIChydWxlLVxcdTAwM2VvaWZpbmRleCA9PSAtMSBcXHUwMDI2XFx1MDAyNlxcbjEzNzQ6XFx0XFx0XFx0ICAgIHN0cmNtcChkZXYtXFx1MDAzZW5hbWUsIHJ1bGUtXFx1MDAzZW9pZm5hbWUpID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6MjIuODk4OTkwNDM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Mzk3Nzg3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIGFuZCBGSUJfUlVMRVMgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYEZJQl9SVUxFU2AuIFRpbWUgdG8gZGl2ZSBpbnRvIEtjb25maWcuIEl0J3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGFuZCBJJ2QgZXhwZWN0IGFueSBmZWF0dXJlIHJlbGF0ZWQgdG8gRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpIHJ1bGVzLCB3aGljaCBhcmUgY3JpdGljYWwgZm9yIHJvdXRpbmcgYW5kIHBvbGljeSwgdG8gYmUgZGVmaW5lZCBhbmQgY29udHJvbGxlZCB3aXRoaW4gaXQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBkaXJlY3RseSBzZWFyY2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoYXQgc3ltYm9sLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSB0cmlzdGF0ZSBvciBib29sZWFuIHNldHRpbmdzIHRoYXQgZ292ZXJuIGl0cyBpbmNsdXNpb24gaW4gdGhlIGJ1aWxkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRyaXZlciBvciBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGltcGxlbWVudGluZyB0aGVzZSBGSUIgcnVsZXMuIEknbSBhbHNvIGdvaW5nIHRvIGJlIHRoaW5raW5nIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgYWJvdXQgd2hhdCBwbGF0Zm9ybSB0aGlzIGlzIGdvaW5nIHRvIGJlIHJ1bm5pbmcgb24gLSBpcyBpdCBhbiBlbWJlZGRlZCBzeXN0ZW0sIGEgc2VydmVyLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGhlbHAgZ2l2ZSBtb3JlIG1lYW5pbmcgdG8gdGhlIG9wdGlvbnMgYW5kIGRlZmF1bHRzLiBJJ20gbG9va2luZyBmb3IgdGhlIFwid2h5XCIgYXMgbXVjaCBhcyB0aGUgXCJ3aGF0XCIgYW5kIHRoZSBcImhvd1wiLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTMzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1MjoyNy42Mzg3NzE2NjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDA5MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGSUJfUlVMRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00MjE9c291cmNlIFxcXCJuZXQvbWN0cC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQyMi1cXG5uZXQvS2NvbmZpZzo0MjM6Y29uZmlnIEZJQl9SVUxFU1xcbm5ldC9LY29uZmlnLTQyNC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjI3LjcxNDE4NjQ3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODk1MTQyNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uLCBmcmFtZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3MgSSBtaWdodCBoYXZlIHdoaWxlIGFwcHJvYWNoaW5nIHRoaXMga2luZCBvZiBwcm9ibGVtOlxuXG4qKkV4YW1pbmluZyB0aGUgU2VsZWN0aW9uIG9mIGBGSUJfUlVMRVNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IGBGSUJfUlVMRVNgLi4uIHRoYXQgc2NyZWFtcyBzb21ldGhpbmcgbmV0d29yay1yZWxhdGVkLCBtYXliZSByb3V0aW5nIG9yIGZpcmV3YWxsIHJ1bGVzLiBCdXQgd2hhdCdzICpzZWxlY3RpbmcqIGl0PyBXaGF0J3MgdGhlIG1lY2hhbmlzbSBhdCBwbGF5P1wiIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB3aXRoaW4gdGhlIGtlcm5lbCBvciBhIHZlcnkgbG93LWxldmVsIG5ldHdvcmsgbWFuYWdlbWVudCBzeXN0ZW0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMuIElzIGl0IGFuIGV2ZW50PyBBIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBBbiBleHBsaWNpdCBmdW5jdGlvbiBjYWxsPyBVbmRlcnN0YW5kaW5nIHRoZSBcIndoeVwiIGJlaGluZCB0aGUgc2VsZWN0aW9uIGlzIGNydWNpYWwuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgaW5wdXRzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgYEZJQl9SVUxFU2AgaXMgY2hvc2VuIG9yIG5vdC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGtleSBkYXRhIHN0cnVjdHVyZSBvciBwaWVjZSBvZiBjb2RlLCBtYXliZSB3aXRoaW4gYSByb3V0aW5nIHRhYmxlIG9yIGEgZmlsdGVyaW5nIGVuZ2luZS4gTGV0J3Mgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCByZWZlcmVuY2UgdGhpcyBjb25zdGFudCBvciB2YXJpYWJsZS4gR290dGEgc2VlIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmdzIGFuZCBidWlsZCB1cCBhIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlY2lzaW9uLW1ha2luZyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3MSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjMzLjYwOTMzODU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE3NDg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRklCX1JVTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz02Mz1jb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTY1LVxcdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZzo2NjpcXHRzZWxlY3QgRklCX1JVTEVTXFxubmV0L2lwdjQvS2NvbmZpZy02Ny1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTIzMj1jb25maWcgSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMzQtXFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXFx1MDAyNlxcdTAwMjYgSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZzoyMzU6XFx0c2VsZWN0IEZJQl9SVUxFU1xcbm5ldC9pcHY0L0tjb25maWctMjM2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjM3PWNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6MjM5OlxcdHNlbGVjdCBGSUJfUlVMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0MC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTI2NT1jb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ny1cXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZzoyNjg6XFx0c2VsZWN0IEZJQl9SVUxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6MzMuNjg4NTE5Njg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTY5MTcxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb3V0aW5nIFJ1bGUgTm90aWZpY2F0aW9uIE1lY2hhbmlzbSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gYGZpYl9ydWxlX25sbXNnX3NpemVgIGhhcyBiZWVuIGlubGluZWQgZGlyZWN0bHkgaW50byBgbm90aWZ5X3J1bGVfY2hhbmdlYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgdGhhdCBjYWxjdWxhdGluZyB0aGUgTmV0bGluayBtZXNzYWdlIHNpemUgZm9yIHJvdXRpbmcgcnVsZSB1cGRhdGVzIGlzIGEgY3JpdGljYWwgYW5kIGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gd2l0aGluIHRoYXQgbm90aWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQsIGluIGl0c2VsZiwgaXMgYSB1c2VmdWwgZGF0YSBwb2ludC5cblxuTm93LCBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGguIFdoZW5ldmVyIHdlIHJlY2VpdmUgYSByb3V0aW5nIHJ1bGUgY2hhbmdlIHJlcXVlc3QgdmlhIHJ0bmV0bGluayDigJMgdGhhdCBpcywgd2hlbiBgZmliX25ld3J1bGVgIG9yIGBmaWJfZGVscnVsZWAgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRvIGFuIFJUTV9ORVdSVUxFIG9yIFJUTV9ERUxSVUxFIG1lc3NhZ2UsIHJlc3BlY3RpdmVseSDigJMgYG5vdGlmeV9ydWxlX2NoYW5nZWAgaXMgdHJpZ2dlcmVkLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBjb3JlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gZm9yIGNoYW5nZXMgaW4gdGhlIHJvdXRpbmcgcnVsZSB0YWJsZS5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIG9mIGBub3RpZnlfcnVsZV9jaGFuZ2VgLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgcmV2ZWFsIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgaW5pdGlhdGluZyB0aGVzZSByb3V0aW5nIHJ1bGUgdXBkYXRlcywgYW5kIHRoZXJlZm9yZSwgdGhlIGJyb2FkZXIgc3lzdGVtJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBvdGhlciBjb2RlIHBhdGhzIGFyZSBsZWFkaW5nIHRvIGBub3RpZnlfcnVsZV9jaGFuZ2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjM2LjU0NTQ0MDI2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMDkzMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm90aWZ5X3J1bGVfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTgxPXN0YXRpYyB1MzIgZmliX2RlZmF1bHRfcnVsZV9wcmVmKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMpXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy05Ny1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzo5ODpzdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtOTktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9ODc2PWludCBmaWJfbmV3cnVsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtOTg3LVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjk4ODpcXHRub3RpZnlfcnVsZV9jaGFuZ2UoUlRNX05FV1JVTEUsIHJ1bGUsIG9wcywgbmxoLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcXG5uZXQvY29yZS9maWJfcnVsZXMuYy05ODktXFx0ZmliX3J1bGVfcHV0KHJ1bGUpO1xcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTAxMT1pbnQgZmliX2RlbHJ1bGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMDEtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEwMjpcXHRub3RpZnlfcnVsZV9jaGFuZ2UoUlRNX0RFTFJVTEUsIHJ1bGUsIG9wcywgbmxoLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMTAzLVxcdGZpYl9ydWxlX3B1dChydWxlKTtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTEyOTE9c3RhdGljIGludCBmaWJfbmxfZHVtcHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTMzNC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzM1OnN0YXRpYyB2b2lkIG5vdGlmeV9ydWxlX2NoYW5nZShpbnQgZXZlbnQsIHN0cnVjdCBmaWJfcnVsZSAqcnVsZSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzM2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6MzYuNTk1NTU0MjQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MDA2MTYxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgRklCIFJ1bGUgTWFuYWdlbWVudCB3aXRoIHJ0bmV0bGluayoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGZpYl9ubF9kZWxydWxlYCBhbmQgYGZpYl9ubF9uZXdydWxlYCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFNpbmNlIHRoZXNlIGFyZSByZWxhdGVkIHRvIEZJQiBydWxlcywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBydG5ldGxpbmsgZW50cnkgcG9pbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHJ0bmV0bGluayBpbmZyYXN0cnVjdHVyZSwgYXMgdGhhdCdzIHRoZSBlc3RhYmxpc2hlZCBtZWNoYW5pc20gZm9yIG1hbmFnaW5nIHJvdXRpbmcgdGFibGUgY2hhbmdlcywgaW5jbHVkaW5nIHRoZSBGSUIuIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQsIGhvdyB0aGUgbWVzc2FnZXMgYXJlIGhhbmRsZWQsIGFuZCBob3cgdGhlIGNoYW5nZXMgdWx0aW1hdGVseSBwcm9wYWdhdGUgdGhyb3VnaCB0aGUga2VybmVsLiBMZXQncyBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjM5Ljk5NjE3MzcwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMzE2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX25sX25ld3J1bGV8ZmliX25sX2RlbHJ1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmliX3J1bGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmliX3J1bGVzLmM9MTAwMz1FWFBPUlRfU1lNQk9MX0dQTChmaWJfbmV3cnVsZSk7XFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAwNC1cXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMDA1OnN0YXRpYyBpbnQgZmliX25sX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTAwNi1cXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTY9RVhQT1JUX1NZTUJPTF9HUEwoZmliX2RlbHJ1bGUpO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMTctXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTExODpzdGF0aWMgaW50IGZpYl9ubF9kZWxydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMTktXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYz0xNDU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBmaWJfcnVsZXNfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxNDU4OlxcdHsubXNndHlwZSA9IFJUTV9ORVdSVUxFLCAuZG9pdCA9IGZpYl9ubF9uZXdydWxlLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTE0NTktXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTQ2MDpcXHR7Lm1zZ3R5cGUgPSBSVE1fREVMUlVMRSwgLmRvaXQgPSBmaWJfbmxfZGVscnVsZSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xNDYxLVxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1Mjo0MC4wNDQ0MTUyMjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIzMTcwNzUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgRklCIFJ1bGUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGZpYl9ydWxlX25sbXNnX3NpemVgLCBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9maWJfcnVsZXMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgbmV0bGluayBtZXNzYWdlcyB1c2VkIHRvIG5vdGlmeSB1c2Vyc3BhY2UgYWJvdXQgY2hhbmdlcyB0byBGSUIgcnVsZXMgKHVzaW5nIFJUTV9ORVdSVUxFIC8gUlRNX0RFTFJVTEUgbWVzc2FnZXMpLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgdGhlIHNpemUgb2YgYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgIGF0dHJpYnV0ZXMgdG8gdGhlIG5sbXNnIHNpemUgY2FsY3VsYXRpb24uIFRoaXMgaXMgaW1wb3J0YW50OyBpdCBkaXJlY3RseSBhZmZlY3RzIGJ1ZmZlciBhbGxvY2F0aW9uIHNpemVzLiBUaGUgY29kZSBpcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGl0J3MgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIChzcGVjaWZpY2FsbHkgdGhlIHJ0bmV0bGluayBzb2NrZXQpLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbW9kaWZpY2F0aW9ucyBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHJlYWNoYWJsZSBjb2RlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGV4ZWN1dGFibGUgY29kZSwgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIChhbGJlaXQgaW5kaXJlY3RseSB0aHJvdWdoIHNpemUgY2FsY3VsYXRpb24pLCBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBRRU1VIHVzaW5nIHJ0bmV0bGluay4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IGB0cnVlYC5cblxuTmV4dCwgbGV0J3MgaWRlbnRpZnkgcmVsZXZhbnQgZm9jdXMgc3ltYm9scy4gYGZpYl9ydWxlX25sbXNnX3NpemVgIGlzIGNhbGxlZCBieSBgbm90aWZ5X3J1bGVfY2hhbmdlYC4gVGhpcywgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBmaWJfbmV3cnVsZWAgYW5kIGBmaWJfZGVscnVsZWAsIHdoaWNoIGFyZSByZWFjaGVkIHZpYSBgZmliX25sX25ld3J1bGVgIGFuZCBgZmliX25sX2RlbHJ1bGVgLiBXZSBoYXZlIGBmaWJfbmxfZmlsbF9ydWxlYCwgd2hpY2ggZmlsbHMgdGhlIGFjdHVhbCBuZXRsaW5rIG1lc3NhZ2UgYnVmZmVyLiBBZnRlciBzb21lIHRob3VnaHQsIEkgY29uY2x1ZGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4Y2VsbGVudCBmb2N1cyBzeW1ib2xzLiBgbm90aWZ5X3J1bGVfY2hhbmdlYCwgYGZpYl9uZXdydWxlYCwgYGZpYl9kZWxydWxlYCwgYW5kIGBmaWJfbmxfZmlsbF9ydWxlYCBhcmUgYWxsIHNwZWNpZmljIHRvIEZJQiBydWxlIGhhbmRsaW5nLCBwcm92aWRpbmcgYSBjbGVhciBhdHRhY2sgc3VyZmFjZS5cblxuRmluYWxseSwgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucy4gSXQgYXBwZWFycyB0aGF0IGBJUF9NVUxUSVBMRV9UQUJMRVNgIChvciBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgKSwgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGFuZCBgRklCX1JVTEVTYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBDaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zLCBgSVBfTVVMVElQTEVfVEFCTEVTYCBkZXBlbmRzIG9uIGBJUF9BRFZBTkNFRF9ST1VURVJgIGFuZCBzZWxlY3RzIGBGSUJfUlVMRVNgLiBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgIGFsc28gc2VsZWN0cyBgRklCX1JVTEVTYC4gYEZJQl9SVUxFU2AgaXRzZWxmIGlzIGEgaGlkZGVuIGJvb2wsIHNvIGVuYWJsaW5nIGVpdGhlciBgSVBfTVVMVElQTEVfVEFCTEVTYCB3aXRoIGBJUF9BRFZBTkNFRF9ST1VURVJgIG9yIGBJUFY2X01VTFRJUExFX1RBQkxFU2AgZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzLlxuXG5UbyByZWNhcCwgYWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJub3RpZnlfcnVsZV9jaGFuZ2VcIiwgXCJmaWJfbmV3cnVsZVwiLCBcImZpYl9kZWxydWxlXCIsIFwiZmliX25sX2ZpbGxfcnVsZVwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJJUF9NVUxUSVBMRV9UQUJMRVNcIiwgXCJJUF9BRFZBTkNFRF9ST1VURVJcIiwgXCJJUFY2X01VTFRJUExFX1RBQkxFU1wiXWBcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIGFsdGVycyBuZXRsaW5rIG1lc3NhZ2UgcGF5bG9hZCBzaXppbmcgaW4gYGZpYl9ydWxlX25sbXNnX3NpemUoKWAsIGNhbGxlZCBieSBgbm90aWZ5X3J1bGVfY2hhbmdlKClgLCB0byBpbmNsdWRlIHNwYWNlIGZvciBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAgYXR0cmlidXRlcy4gVGhpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHZpYSBydG5ldGxpbmsgKGBSVE1fTkVXUlVMRWAgYW5kIGBSVE1fREVMUlVMRWApLlxuXG5Ob3csIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1MiwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjQ3LjI3NjEyNTI2NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NzE1MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NVUxUSVBMRV9UQUJMRVNcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICAgIFwiSVBWNl9NVUxUSVBMRV9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJub3RpZnlfcnVsZV9jaGFuZ2VcIixcbiAgICBcImZpYl9uZXdydWxlXCIsXG4gICAgXCJmaWJfZGVscnVsZVwiLFxuICAgIFwiZmliX25sX2ZpbGxfcnVsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRsaW5rIG1lc3NhZ2UgcGF5bG9hZCBzaXplIGNhbGN1bGF0aW9uIGluIGZpYl9ydWxlX25sbXNnX3NpemUoKSB3aXRoaW4gbmV0L2NvcmUvZmliX3J1bGVzLmMgdG8gYWNjb3VudCBmb3IgRlJBX0dPVE8gYW5kIEZSQV9MM01ERVYgYXR0cmlidXRlcywgcHJldmVudGluZyB1bmRlcnNpemVkIG5ldGxpbmsgbm90aWZpY2F0aW9uIGFsbG9jYXRpb25zLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBleGVjdXRlZCB1cG9uIEZJQiBydWxlIGNyZWF0aW9uIGFuZCBkZWxldGlvbiB2aWEgcnRuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01VTFRJUExFX1RBQkxFU1wiLFxuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gICAgXCJJUFY2X01VTFRJUExFX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5vdGlmeV9ydWxlX2NoYW5nZVwiLFxuICAgIFwiZmliX25ld3J1bGVcIixcbiAgICBcImZpYl9kZWxydWxlXCIsXG4gICAgXCJmaWJfbmxfZmlsbF9ydWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGxpbmsgbWVzc2FnZSBwYXlsb2FkIHNpemUgY2FsY3VsYXRpb24gaW4gZmliX3J1bGVfbmxtc2dfc2l6ZSgpIHdpdGhpbiBuZXQvY29yZS9maWJfcnVsZXMuYyB0byBhY2NvdW50IGZvciBGUkFfR09UTyBhbmQgRlJBX0wzTURFViBhdHRyaWJ1dGVzLCBwcmV2ZW50aW5nIHVuZGVyc2l6ZWQgbmV0bGluayBub3RpZmljYXRpb24gYWxsb2NhdGlvbnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGV4ZWN1dGVkIHVwb24gRklCIHJ1bGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uIHZpYSBydG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjQ3LjM3MDg1MDYxN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MjY3Mjc0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1Mjo0Ny4zNzE2MTE4NDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzUyNTk2MDM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYCB0byBhY2NvdW50IGZvciB0aGUgc3BhY2UgcmVxdWlyZWQgYnkgYEZSQV9HT1RPYCBhbmQgYEZSQV9MM01ERVZgIG5ldGxpbmsgYXR0cmlidXRlcyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBidWZmZXIgc2l6ZSBmb3IgYG5sbXNnX25ldygpYC4gVGhpcyBhdm9pZHMgcG90ZW50aWFsIGAtRU1TR1NJWkVgIGVycm9ycyBkdXJpbmcgYG5vdGlmeV9ydWxlX2NoYW5nZSgpYC4gQWxsIGF0dHJpYnV0ZXMgYXJlIGZvcm1hdHRlZCBhbmQgcG9wdWxhdGVkIHVzaW5nIHN0YW5kYXJkIGBubGFfcHV0XyooKWAgaGVscGVycyB3aGljaCBoYW5kbGUgcGFkZGluZyBhbmQgaW5pdGlhbGl6YXRpb24gcHJvcGVybHkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwYjg0YzZmYzRlNzViOTcxNWIyMDM3ZWFmYjVlZWVjMWQ5MzI1MzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNzo1MTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jIGIvbmV0L2NvcmUvZmliX3J1bGVzLmNcbmluZGV4IDdkZjIxNmMxN2M2N2EuLjVlODRiYzc0MDE5MTcgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWJfcnVsZXMuY1xuKysrIGIvbmV0L2NvcmUvZmliX3J1bGVzLmNcbkBAIC0xMTMzLDcgKzExMzMsOSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX0lGR1JPVVAgKi9cbiBcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfRldNQVJLICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0ZXTUFTSyAqL1xuK1x0XHRcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9HT1RPICovXG4gXHRcdFx0ICsgbmxhX3RvdGFsX3NpemVfNjRiaXQoOCkgLyogRlJBX1RVTl9JRCAqL1xuK1x0XHRcdCArIG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9MM01ERVYgKi9cbiBcdFx0XHQgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSlcbiBcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfUFJPVE9DT0wgKi9cbiBcdFx0XHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfSVBfUFJPVE8gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjQ3LjM3MTYxMjg2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTY1ODEwMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipBbmFseXppbmcgdGhlIEZpYiBSdWxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIGBuZXQvY29yZS9maWJfcnVsZXMuY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGl04oCZcyBkZWFsaW5nIHdpdGggdGhlIHNpemUgY2FsY3VsYXRpb25zIGZvciBOZXRsaW5rIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gRklCIHJ1bGVzLiBNeSBndXQgcmVhY3Rpb24gaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb250ZXh0IHdpdGhpbiB0aGF0IGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgKndoeSogaXQncyBiZWluZyBtb2RpZmllZC4gV2hhdCdzIHRoZSBsYXJnZXIgcGljdHVyZSBoZXJlIHdpdGggcmVzcGVjdCB0byBGSUIgcnVsZSBoYW5kbGluZz8gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3MgY2hhbmdlZCBpbiBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1Mjo1NC41Mzc0MjY3ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0e1xcbjExMjE6XFx0XFx0cmV0dXJuIGZpYl9kZWxydWxlKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBza2IsIG5saCwgZXh0YWNrLCBmYWxzZSk7XFxuMTEyMjpcXHR9XFxuMTEyMzpcXHRcXG4xMTI0OlxcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpYl9ydWxlX25sbXNnX3NpemUoc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcyxcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUpXFxuMTEyNjpcXHR7XFxuMTEyNzpcXHRcXHRzaXplX3QgcGF5bG9hZCA9IE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgZmliX3J1bGVfaGRyKSlcXG4xMTI4OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBGUkFfSUlGTkFNRSAqL1xcbjExMjk6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoSUZOQU1TSVopIC8qIEZSQV9PSUZOQU1FICovXFxuMTEzMDpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfUFJJT1JJVFkgKi9cXG4xMTMxOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9UQUJMRSAqL1xcbjExMzI6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX1BSRUZJWExFTiAqL1xcbjExMzM6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1NVUFBSRVNTX0lGR1JPVVAgKi9cXG4xMTM0OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BUksgKi9cXG4xMTM1OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BU0sgKi9cXG4xMTM2OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9HT1RPICovXFxuMTEzNzpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZV82NGJpdCg4KSAvKiBGUkFfVFVOX0lEICovXFxuMTEzODpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovXFxuMTEzOTpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9rdWlkX3JhbmdlKSlcXG4xMTQwOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDEpIC8qIEZSQV9QUk9UT0NPTCAqL1xcbjExNDE6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoMSkgLyogRlJBX0lQX1BST1RPICovXFxuMTE0MjpcXHRcXHRcXHRcXHQgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGZpYl9ydWxlX3BvcnRfcmFuZ2UpKSAvKiBGUkFfU1BPUlRfUkFOR0UgKi9cXG4xMTQzOlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgZmliX3J1bGVfcG9ydF9yYW5nZSkpIC8qIEZSQV9EUE9SVF9SQU5HRSAqL1xcbjExNDQ6XFx0XFx0XFx0XFx0ICsgbmxhX3RvdGFsX3NpemUoMikgLyogRlJBX1NQT1JUX01BU0sgKi9cXG4xMTQ1OlxcdFxcdFxcdFxcdCArIG5sYV90b3RhbF9zaXplKDIpOyAvKiBGUkFfRFBPUlRfTUFTSyAqL1xcbjExNDY6XFx0XFxuMTE0NzpcXHRcXHRpZiAob3BzLVxcdTAwM2VubG1zZ19wYXlsb2FkKVxcbjExNDg6XFx0XFx0XFx0cGF5bG9hZCArPSBvcHMtXFx1MDAzZW5sbXNnX3BheWxvYWQocnVsZSk7XFxuMTE0OTpcXHRcXG4xMTUwOlxcdFxcdHJldHVybiBwYXlsb2FkO1xcbjExNTE6XFx0fVxcbjExNTI6XFx0XFxuMTE1MzpcXHRzdGF0aWMgaW50IGZpYl9ubF9maWxsX3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9ydWxlICpydWxlLFxcbjExNTQ6XFx0XFx0XFx0XFx0ICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MsXFxuMTE1NTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcylcXG4xMTU2OlxcdHtcXG4xMTU3OlxcdFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbjExNTg6XFx0XFx0c3RydWN0IGZpYl9ydWxlX2hkciAqZnJoO1xcbjExNTk6XFx0XFxuMTE2MDpcXHRcXHRubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgdHlwZSwgc2l6ZW9mKCpmcmgpLCBmbGFncyk7XFxuMTE2MTpcXHRcXHRpZiAobmxoID09IE5VTEwpXFxuMTE2MjpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjExNjM6XFx0XFxuMTE2NDpcXHRcXHRmcmggPSBubG1zZ19kYXRhKG5saCk7XFxuMTE2NTpcXHRcXHRmcmgtXFx1MDAzZWZhbWlseSA9IG9wcy1cXHUwMDNlZmFtaWx5O1xcbjExNjY6XFx0XFx0ZnJoLVxcdTAwM2V0YWJsZSA9IHJ1bGUtXFx1MDAzZXRhYmxlIFxcdTAwM2MgMjU2ID8gcnVsZS1cXHUwMDNldGFibGUgOiBSVF9UQUJMRV9DT01QQVQ7XFxuMTE2NzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBGUkFfVEFCTEUsIHJ1bGUtXFx1MDAzZXRhYmxlKSlcXG4xMTY4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjExNjk6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRlJBX1NVUFBSRVNTX1BSRUZJWExFTiwgcnVsZS1cXHUwMDNlc3VwcHJlc3NfcHJlZml4bGVuKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTI6NTQuNTM3NTM5Mjc2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDg1NzQwOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgdGFyZ2V0ZWQgdG93YXJkcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGZpYl9ubF9maWxsX3J1bGVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gXCJMZXQncyBzZWUgdGhlIHJlc3Qgb2YgYGZpYl9ubF9maWxsX3J1bGVgLlwiIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gV2hhdCBkb2VzIHRoZSBcInJlc3RcIiBlbnRhaWw/IEdpdmVuIHdoYXQgSSBhbHJlYWR5IGtub3cgYWJvdXQgaG93IHRoZSBGaWJvbmFjY2kgc2VxdWVuY2UgY2FuIGJlIGFwcGxpZWQgdG8gTkwgKE5hdHVyYWwgTGFuZ3VhZ2UpIGZpbGwgcnVsZXMsIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBzZXF1ZW5jZSBpcyAqaW1wbGVtZW50ZWQqIGhlcmUsIG9yIG1heWJlIGhvdyBpdCdzICppbnRlZ3JhdGVkKiB3aXRoIHRoZSBvdmVyYWxsIHJ1bGUtYmFzZWQgc3lzdGVtLiBJcyBpdCBhYm91dCBtZW1vcnkgbWFuYWdlbWVudD8gT3B0aW1pemF0aW9uIG9mIHRoZSByZWN1cnNpdmUgc3RydWN0dXJlPyBPciBpcyBpdCBhIG1vcmUgZnVuZGFtZW50YWwgYWRhcHRhdGlvbiBvZiB0aGUgRmlib25hY2NpIG51bWJlcnMgdG8gaGFuZGxlIHRoZSBjb21wbGV4aXRpZXMgb2YgTkwgcGFyc2luZyBhbmQgZ2VuZXJhdGlvbj8gTXkgZ3Vlc3MgaXMgdGhhdCBpdCBoYXMgc29tZSBvcHRpbWl6YXRpb24gYXNzb2NpYXRlZCB3aXRoIGl0LCBJJ2QgbmVlZCB0byBnbyBpbnRvIHRoZSBjb2RlLiBUaGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaXMgdGhlIGtleSBoZXJlLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuIExldCdzIHNlZSBob3cgaXQgcGxheXMgb3V0IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNDQ2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1Mjo1OS4xNDYxMTczODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNzA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTE3MTpcXHRcXHRmcmgtXFx1MDAzZXJlczEgPSAwO1xcbjExNzI6XFx0XFx0ZnJoLVxcdTAwM2VyZXMyID0gMDtcXG4xMTczOlxcdFxcdGZyaC1cXHUwMDNlYWN0aW9uID0gcnVsZS1cXHUwMDNlYWN0aW9uO1xcbjExNzQ6XFx0XFx0ZnJoLVxcdTAwM2VmbGFncyA9IHJ1bGUtXFx1MDAzZWZsYWdzO1xcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRpZiAobmxhX3B1dF91OChza2IsIEZSQV9QUk9UT0NPTCwgcnVsZS1cXHUwMDNlcHJvdG8pKVxcbjExNzc6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTE3ODpcXHRcXG4xMTc5OlxcdFxcdGlmIChydWxlLVxcdTAwM2VhY3Rpb24gPT0gRlJfQUNUX0dPVE8gXFx1MDAyNlxcdTAwMjZcXG4xMTgwOlxcdFxcdCAgICByY3VfYWNjZXNzX3BvaW50ZXIocnVsZS1cXHUwMDNlY3RhcmdldCkgPT0gTlVMTClcXG4xMTgxOlxcdFxcdFxcdGZyaC1cXHUwMDNlZmxhZ3MgfD0gRklCX1JVTEVfVU5SRVNPTFZFRDtcXG4xMTgyOlxcdFxcbjExODM6XFx0XFx0aWYgKHJ1bGUtXFx1MDAzZWlpZm5hbWVbMF0pIHtcXG4xMTg0OlxcdFxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhza2IsIEZSQV9JSUZOQU1FLCBydWxlLVxcdTAwM2VpaWZuYW1lKSlcXG4xMTg1OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjExODY6XFx0XFx0XFx0aWYgKFJFQURfT05DRShydWxlLVxcdTAwM2VpaWZpbmRleCkgPT0gLTEpXFxuMTE4NzpcXHRcXHRcXHRcXHRmcmgtXFx1MDAzZWZsYWdzIHw9IEZJQl9SVUxFX0lJRl9ERVRBQ0hFRDtcXG4xMTg4OlxcdFxcdH1cXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0aWYgKHJ1bGUtXFx1MDAzZW9pZm5hbWVbMF0pIHtcXG4xMTkxOlxcdFxcdFxcdGlmIChubGFfcHV0X3N0cmluZyhza2IsIEZSQV9PSUZOQU1FLCBydWxlLVxcdTAwM2VvaWZuYW1lKSlcXG4xMTkyOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjExOTM6XFx0XFx0XFx0aWYgKFJFQURfT05DRShydWxlLVxcdTAwM2VvaWZpbmRleCkgPT0gLTEpXFxuMTE5NDpcXHRcXHRcXHRcXHRmcmgtXFx1MDAzZWZsYWdzIHw9IEZJQl9SVUxFX09JRl9ERVRBQ0hFRDtcXG4xMTk1OlxcdFxcdH1cXG4xMTk2OlxcdFxcbjExOTc6XFx0XFx0aWYgKChydWxlLVxcdTAwM2VwcmVmIFxcdTAwMjZcXHUwMDI2XFxuMTE5ODpcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX1BSSU9SSVRZLCBydWxlLVxcdTAwM2VwcmVmKSkgfHxcXG4xMTk5OlxcdFxcdCAgICAocnVsZS1cXHUwMDNlbWFyayBcXHUwMDI2XFx1MDAyNlxcbjEyMDA6XFx0XFx0ICAgICBubGFfcHV0X3UzMihza2IsIEZSQV9GV01BUkssIHJ1bGUtXFx1MDAzZW1hcmspKSB8fFxcbjEyMDE6XFx0XFx0ICAgICgocnVsZS1cXHUwMDNlbWFya19tYXNrIHx8IHJ1bGUtXFx1MDAzZW1hcmspIFxcdTAwMjZcXHUwMDI2XFxuMTIwMjpcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX0ZXTUFTSywgcnVsZS1cXHUwMDNlbWFya19tYXNrKSkgfHxcXG4xMjAzOlxcdFxcdCAgICAocnVsZS1cXHUwMDNldGFyZ2V0IFxcdTAwMjZcXHUwMDI2XFxuMTIwNDpcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgRlJBX0dPVE8sIHJ1bGUtXFx1MDAzZXRhcmdldCkpIHx8XFxuMTIwNTpcXHRcXHQgICAgKHJ1bGUtXFx1MDAzZXR1bl9pZCBcXHUwMDI2XFx1MDAyNlxcbjEyMDY6XFx0XFx0ICAgICBubGFfcHV0X2JlNjQoc2tiLCBGUkFfVFVOX0lELCBydWxlLVxcdTAwM2V0dW5faWQsIEZSQV9QQUQpKSB8fFxcbjEyMDc6XFx0XFx0ICAgIChydWxlLVxcdTAwM2VsM21kZXYgXFx1MDAyNlxcdTAwMjZcXG4xMjA4OlxcdFxcdCAgICAgbmxhX3B1dF91OChza2IsIEZSQV9MM01ERVYsIHJ1bGUtXFx1MDAzZWwzbWRldikpIHx8XFxuMTIwOTpcXHRcXHQgICAgKHVpZF9yYW5nZV9zZXQoXFx1MDAyNnJ1bGUtXFx1MDAzZXVpZF9yYW5nZSkgXFx1MDAyNlxcdTAwMjZcXG4xMjEwOlxcdFxcdCAgICAgbmxhX3B1dF91aWRfcmFuZ2Uoc2tiLCBcXHUwMDI2cnVsZS1cXHUwMDNldWlkX3JhbmdlKSkgfHxcXG4xMjExOlxcdFxcdCAgICAoZmliX3J1bGVfcG9ydF9yYW5nZV9zZXQoXFx1MDAyNnJ1bGUtXFx1MDAzZXNwb3J0X3JhbmdlKSBcXHUwMDI2XFx1MDAyNlxcbjEyMTI6XFx0XFx0ICAgICBubGFfcHV0X3BvcnRfcmFuZ2Uoc2tiLCBGUkFfU1BPUlRfUkFOR0UsIFxcdTAwMjZydWxlLVxcdTAwM2VzcG9ydF9yYW5nZSkpIHx8XFxuMTIxMzpcXHRcXHQgICAgKHJ1bGUtXFx1MDAzZXNwb3J0X21hc2sgXFx1MDAyNlxcdTAwMjYgbmxhX3B1dF91MTYoc2tiLCBGUkFfU1BPUlRfTUFTSyxcXG4xMjE0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcnVsZS1cXHUwMDNlc3BvcnRfbWFzaykpIHx8XFxuMTIxNTpcXHRcXHQgICAgKGZpYl9ydWxlX3BvcnRfcmFuZ2Vfc2V0KFxcdTAwMjZydWxlLVxcdTAwM2VkcG9ydF9yYW5nZSkgXFx1MDAyNlxcdTAwMjZcXG4xMjE2OlxcdFxcdCAgICAgbmxhX3B1dF9wb3J0X3JhbmdlKHNrYiwgRlJBX0RQT1JUX1JBTkdFLCBcXHUwMDI2cnVsZS1cXHUwMDNlZHBvcnRfcmFuZ2UpKSB8fFxcbjEyMTc6XFx0XFx0ICAgIChydWxlLVxcdTAwM2VkcG9ydF9tYXNrIFxcdTAwMjZcXHUwMDI2IG5sYV9wdXRfdTE2KHNrYiwgRlJBX0RQT1JUX01BU0ssXFxuMTIxODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJ1bGUtXFx1MDAzZWRwb3J0X21hc2spKSB8fFxcbjEyMTk6XFx0XFx0ICAgIChydWxlLVxcdTAwM2VpcF9wcm90byBcXHUwMDI2XFx1MDAyNiBubGFfcHV0X3U4KHNrYiwgRlJBX0lQX1BST1RPLCBydWxlLVxcdTAwM2VpcF9wcm90bykpKVxcbjEyMjA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTIyMTpcXHRcXG4xMjIyOlxcdFxcdGlmIChydWxlLVxcdTAwM2VzdXBwcmVzc19pZmdyb3VwICE9IC0xKSB7XFxuMTIyMzpcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBGUkFfU1VQUFJFU1NfSUZHUk9VUCwgcnVsZS1cXHUwMDNlc3VwcHJlc3NfaWZncm91cCkpXFxuMTIyNDpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xMjI1OlxcdFxcdH1cXG4xMjI2OlxcdFxcbjEyMjc6XFx0XFx0aWYgKG9wcy1cXHUwMDNlZmlsbChydWxlLCBza2IsIGZyaCkgXFx1MDAzYyAwKVxcbjEyMjg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTIyOTpcXHRcXG4xMjMwOlxcdFxcdG5sbXNnX2VuZChza2IsIG5saCk7XFxuMTIzMTpcXHRcXHRyZXR1cm4gMDtcXG4xMjMyOlxcdFxcbjEyMzM6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbjEyMzQ6XFx0XFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcXG4xMjM1OlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTIzNjpcXHR9XFxuMTIzNzpcXHRcXG4xMjM4OlxcdHN0YXRpYyBpbnQgZHVtcF9ydWxlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuMTIzOTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzKVxcbjEyNDA6XFx0e1xcbjEyNDE6XFx0XFx0aW50IGlkeCA9IDA7XFxuMTI0MjpcXHRcXHRzdHJ1Y3QgZmliX3J1bGUgKnJ1bGU7XFxuMTI0MzpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMjQ0OlxcdFxcbjEyNDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjEyNDY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocnVsZSwgXFx1MDAyNm9wcy1cXHUwMDNlcnVsZXNfbGlzdCwgbGlzdCkge1xcbjEyNDc6XFx0XFx0XFx0aWYgKGlkeCBcXHUwMDNjIGNiLVxcdTAwM2VhcmdzWzFdKVxcbjEyNDg6XFx0XFx0XFx0XFx0Z290byBza2lwO1xcbjEyNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUyOjU5LjE0NjI1NDg4OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzA0ODI0ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFkZHJlc3NpbmcgYSBOZXRsaW5rIFNrYiBCdWZmZXIgU2l6ZSBEaXNjcmVwYW5jeSBpbiBGSUIgUnVsZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGZpYl9ydWxlX25sbXNnX3NpemVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSdzIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kgaW4gaG93IGl0IGNhbGN1bGF0ZXMgdGhlIGJ1ZmZlciBzaXplIGZvciBOZXRsaW5rIFNLQiBtZXNzYWdlcyByZWxhdGVkIHRvIEZJQiBydWxlIG9wZXJhdGlvbnMuIEkgc2VlIHRoYXQgaXQncyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGJ1ZmZlciBzaXplIG5lZWRlZCB3aGVuIHdlJ3JlIGR1bXBpbmcgb3Igc2VuZGluZyBub3RpZmljYXRpb25zIGFib3V0IHRoZXNlIHJ1bGVzLlxuXG5QcmV2aW91c2x5LCBJIG5vdGljZWQgdGhhdCBgRlJBX0dPVE9gIChhIHUzMiwgc28gNCBieXRlcyB0b3RhbCB3aXRoIGl0cyBOTEEgaGVhZGVyKSBhbmQgYEZSQV9MM01ERVZgIChhIHU4LCAxIGJ5dGUgdG90YWwgd2l0aCBpdHMgTkxBIGhlYWRlcikgd2VyZSAqbm90KiBiZWluZyBpbmNsdWRlZCBpbiBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYC4gWWV0LCB0aGV5ICp3ZXJlKiBiZWluZyBpbmNsdWRlZCBpbiB0aGUgYWN0dWFsIG1lc3NhZ2UgY29uc3RydWN0aW9uIHdpdGhpbiBgZmliX25sX2ZpbGxfcnVsZSgpYC4gSG1tLCB0aGF0J3MgYSBwcm9ibGVtLlxuXG5UaGUgaW1wbGljYXRpb25zIGFyZSBwcmV0dHkgY2xlYXI6IElmIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQsIHRoZSBhbGxvY2F0ZWQgU0tCIGJ1ZmZlciBtaWdodCBiZSB0b28gc21hbGwgd2hlbiB0aGUgc2l6ZSBpcyBlc3RpbWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiwgcGFydGljdWxhcmx5IGluIHNpdHVhdGlvbnMgd2hlcmUgd2UgaGF2ZSBhIG5vdGlmaWNhdGlvbiBvciBkdW1wIGVudHJ5IHRoYXQgaW5jbHVkZXMgdGhlbS4gVGhhdCBtZWFucyB0aGVyZSdzIGEgcmlzayBvZiBidWZmZXIgb3ZlcmZsb3dzIGRvd24gdGhlIGxpbmUgaWYgd2UgZG9uJ3QgZml4IHRoaXMuIEknbGwgbmVlZCB0byBjaGVjayB3aGVyZSBgZmliX3J1bGVfbmxtc2dfc2l6ZWAgaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUga2VybmVsJ3MgY2FsbCBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIyNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjUzOjAzLjg1MTA4NDQ4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMDM2Njc2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfcnVsZV9ubG1zZ19zaXplXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTExMTg9c3RhdGljIGludCBmaWJfbmxfZGVscnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTExMjMtXFxubmV0L2NvcmUvZmliX3J1bGVzLmM6MTEyNDpzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTEyNS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGZpYl9ydWxlICpydWxlKVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmM9MTMzNT1zdGF0aWMgdm9pZCBub3RpZnlfcnVsZV9jaGFuZ2UoaW50IGV2ZW50LCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsXFxuLS1cXG5uZXQvY29yZS9maWJfcnVsZXMuYy0xMzQzLVxcdG5ldCA9IG9wcy1cXHUwMDNlZnJvX25ldDtcXG5uZXQvY29yZS9maWJfcnVsZXMuYzoxMzQ0OlxcdHNrYiA9IG5sbXNnX25ldyhmaWJfcnVsZV9ubG1zZ19zaXplKG9wcywgcnVsZSksIEdGUF9LRVJORUwpO1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNDUtXFx0aWYgKHNrYiA9PSBOVUxMKVxcbi0tXFxubmV0L2NvcmUvZmliX3J1bGVzLmMtMTM0OS1cXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjEzNTA6XFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGZpYl9ydWxlX25sbXNnX3NpemUoKSAqL1xcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTEzNTEtXFx0XFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NTM6MDYuMDYxNDU3NzA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MzYwNzU4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBmaWJfcnVsZXMuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGxpbmVzIDEzNDQtMTM1MSBpbiBgbmV0L2NvcmUvZmliX3J1bGVzLmNgLCBzcGVjaWZpY2FsbHkgaG93IGBubG1zZ19uZXcoKWAgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgLiBJdCdzIHN0cmFpZ2h0Zm9yd2FyZDogYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgZmlndXJlcyBvdXQgdGhlIHJlcXVpcmVkIHNpemUgZm9yIHRoZSBOZXRsaW5rIG1lc3NhZ2UgcGF5bG9hZC4gVGhlIHBhdGNoIGFkZHMgYCsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX0dPVE8gKi9gIGFuZCBgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBGUkFfTDNNREVWICovYCwgYW5kIHRoYXQncyB0aGUga2V5LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gSXMgdGhpcyBnb2luZyB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YT8gQXJlIHdlIGludHJvZHVjaW5nIG5ldyBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBjb250ZW50cz8gTm8uIFRoZSBwYXRjaCBpc24ndCB0b3VjaGluZyBpbml0aWFsaXphdGlvbiBsb2dpYy4gSXQncyBzb2xlbHkgYWJvdXQgKmNvcnJlY3RpbmcqIGEgY2FsY3VsYXRpb24gdG8gZW5zdXJlIHRoZSBidWZmZXIgaXMgKmJpZyBlbm91Z2gqLiBgbmxtc2dfbmV3KClgIGFsbG9jYXRlcyB0aGUgc3BhY2UsIGFuZCB0aGUgYWN0dWFsIHBvcHVsYXRpb24gb2YgdGhlIE5ldGxpbmsgYXR0cmlidXRlcyBpbiBgZmliX25sX2ZpbGxfcnVsZSgpYCB1c2VzIGBubGFfcHV0X3UzMmAgYW5kIGBubGFfcHV0X3U4YCwgd2hpY2ggbWVhbnMgcHJvcGVyIGluaXRpYWxpemF0aW9uIGFuZCBwYWRkaW5nIGFyZSBoYW5kbGVkLiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBubyBjaGFuY2Ugb2YgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGEgZml4LCBwbGFpbiBhbmQgc2ltcGxlLCBwcmV2ZW50aW5nIHVuZGVyLWFsbG9jYXRpb24gYW5kIHRoZSByZXN1bHRpbmcgYC1FTVNHU0laRWAuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IEtBU0FOIHZzLiBLTVNBTi4gS0FTQU4gaXMgbXkgZ28tdG8gZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIHVzZS1hZnRlci1mcmVlLCB0aGluZ3MgbGlrZSB0aGF0LiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBjcmVhdGUgKmFueSogbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2Vzbid0IGFsdGVyIGFueSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYW5kIGl0IGRvZXNuJ3QgYWZmZWN0IHdoaWNoIG1lbW9yeSBpcyBhY2Nlc3NlZCBvciByZWFkLiBUaGVyZWZvcmUsIG5vIEtNU0FOIGF0dGVudGlvbiBpcyBuZWVkZWQuXG5cblRvIHNvbGlkaWZ5IG15IHJlYXNvbmluZywgSSdtIGNvbnRyYXN0aW5nIEtNU0FOIGFuZCBLQVNBTiBoZXJlOiBUaGUgcGF0Y2ggYWRqdXN0cyBgZmliX3J1bGVfbmxtc2dfc2l6ZSgpYCBzbyB3ZSBnZXQgYW4gYWNjdXJhdGUgYnVmZmVyIHNpemUgZm9yIGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYC4gQmVmb3JlLCB0aGUgc2tfYnVmZiB3YXMgdW5kZXItYWxsb2NhdGVkLCB3aGljaCBjYXVzZWQgYC1FTVNHU0laRWAgZXJyb3JzIHdoZW4gdGhvc2UgYXR0cmlidXRlcyB3ZXJlIHByZXNlbnQuIE5vdywgYGZpYl9ubF9maWxsX3J1bGUoKWAgY2FuIHNhZmVseSBhcHBlbmQgdGhlc2UgYXR0cmlidXRlcyBiZWNhdXNlIHRoZSBidWZmZXIgc2l6ZSBpcyBjb3JyZWN0LiBUaGlzIGlzIGFic29sdXRlbHkgY3JpdGljYWw7IGFsbCBhdHRyaWJ1dGUgcG9wdWxhdGlvbiB1c2VzIGBubGFfcHV0XypgLCBlbnN1cmluZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIHBhZGRpbmcuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIHJlYWQsIHdyaXR0ZW4sIG9yIGJyYW5jaGVkIHVwb24uIEZ1cnRoZXJtb3JlLCBLQVNBTiBoYW5kbGVzIG1lbW9yeSBib3VuZHMgaXNzdWVzIHdoaWNoIGFyZSB0aGUgcHVydmlldyBvZiBrZXJuZWwgYXNzZXJ0aW9ucyBhbmQgY2hlY2tzLlxuXG5VbHRpbWF0ZWx5LCB0aGlzIGlzIGEgY2xlYXItY3V0IGNhc2UuIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gY292ZXJhZ2UgaGVyZS5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTAzLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo1MzoxNC44OTc1MzY1MDNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGZpYl9ydWxlX25sbXNnX3NpemUoKWAgdG8gYWNjb3VudCBmb3IgdGhlIHNwYWNlIHJlcXVpcmVkIGJ5IGBGUkFfR09UT2AgYW5kIGBGUkFfTDNNREVWYCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUgZm9yIGBubG1zZ19uZXcoKWAuIFRoaXMgYXZvaWRzIHBvdGVudGlhbCBgLUVNU0dTSVpFYCBlcnJvcnMgZHVyaW5nIGBub3RpZnlfcnVsZV9jaGFuZ2UoKWAuIEFsbCBhdHRyaWJ1dGVzIGFyZSBmb3JtYXR0ZWQgYW5kIHBvcHVsYXRlZCB1c2luZyBzdGFuZGFyZCBgbmxhX3B1dF8qKClgIGhlbHBlcnMgd2hpY2ggaGFuZGxlIHBhZGRpbmcgYW5kIGluaXRpYWxpemF0aW9uIHByb3Blcmx5LiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBmaWJfcnVsZV9ubG1zZ19zaXplKClgIHRvIGFjY291bnQgZm9yIHRoZSBzcGFjZSByZXF1aXJlZCBieSBgRlJBX0dPVE9gIGFuZCBgRlJBX0wzTURFVmAgbmV0bGluayBhdHRyaWJ1dGVzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGJ1ZmZlciBzaXplIGZvciBgbmxtc2dfbmV3KClgLiBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgYC1FTVNHU0laRWAgZXJyb3JzIGR1cmluZyBgbm90aWZ5X3J1bGVfY2hhbmdlKClgLiBBbGwgYXR0cmlidXRlcyBhcmUgZm9ybWF0dGVkIGFuZCBwb3B1bGF0ZWQgdXNpbmcgc3RhbmRhcmQgYG5sYV9wdXRfKigpYCBoZWxwZXJzIHdoaWNoIGhhbmRsZSBwYWRkaW5nIGFuZCBpbml0aWFsaXphdGlvbiBwcm9wZXJseS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowdmtcb[1] Phase: Succeeded StartedAt: 2026-09-11 07:53:38 +0000 UTC FinishedAt: 2026-09-11 07:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 07:53:38 +0000 UTC FinishedAt: 2026-09-11 07:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2] Phase: Succeeded StartedAt: 2026-09-11 07:53:38 +0000 UTC FinishedAt: 2026-09-11 11:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 07:53:38 +0000 UTC FinishedAt: 2026-09-11 11:36:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 07:53:38 +0000 UTC FinishedAt: 2026-09-11 07:53:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 07:53:38 +0000 UTC FinishedAt: 2026-09-11 07:53:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowdmtcb/series-workflowdmtcb-convert-artifact-642153824/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 07:53:48 +0000 UTC FinishedAt: 2026-09-11 08:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 07:53:48 +0000 UTC FinishedAt: 2026-09-11 08:11:55 +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:*9e9415e7-d84f-4969-bacd-542129372b8e,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-workflowdmtcb/series-workflowdmtcb-convert-artifact-642153824/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": "3fc3a4f5-5a0a-4e84-b4a5-e7833b7f6b33", "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-workflowdmtcb/series-workflowdmtcb-build-action-707718182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 07:53:48 +0000 UTC FinishedAt: 2026-09-11 08:11:45 +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:*9e9415e7-d84f-4969-bacd-542129372b8e,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-workflowdmtcb/series-workflowdmtcb-convert-artifact-642153824/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": "3fc3a4f5-5a0a-4e84-b4a5-e7833b7f6b33", "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-workflowdmtcb/series-workflowdmtcb-build-action-707718182/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 08:11:55 +0000 UTC FinishedAt: 2026-09-11 08:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 08:11:55 +0000 UTC FinishedAt: 2026-09-11 08:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 08:11:55 +0000 UTC FinishedAt: 2026-09-11 08:12:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 08:11:55 +0000 UTC FinishedAt: 2026-09-11 08:12:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowdmtcb/series-workflowdmtcb-convert-artifact-1498554247/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 08:12:21 +0000 UTC FinishedAt: 2026-09-11 08:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 08:12:21 +0000 UTC FinishedAt: 2026-09-11 08:14:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3fc3a4f5-5a0a-4e84-b4a5-e7833b7f6b33,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-workflowdmtcb/series-workflowdmtcb-build-action-707718182/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-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 08:14:12 +0000 UTC FinishedAt: 2026-09-11 08:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 08:14:12 +0000 UTC FinishedAt: 2026-09-11 08:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 08:14:12 +0000 UTC FinishedAt: 2026-09-11 08:31:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 08:14:12 +0000 UTC FinishedAt: 2026-09-11 08:31:52 +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:*9e9415e7-d84f-4969-bacd-542129372b8e,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-workflowdmtcb/series-workflowdmtcb-convert-artifact-1498554247/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": "acb9aff3-f554-4c98-877f-c0fcf215ef8c", "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-workflowdmtcb/series-workflowdmtcb-build-action-3891007755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 08:14:12 +0000 UTC FinishedAt: 2026-09-11 08:31:42 +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:*9e9415e7-d84f-4969-bacd-542129372b8e,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-workflowdmtcb/series-workflowdmtcb-convert-artifact-1498554247/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": "acb9aff3-f554-4c98-877f-c0fcf215ef8c", "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-workflowdmtcb/series-workflowdmtcb-build-action-3891007755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 08:31:52 +0000 UTC FinishedAt: 2026-09-11 08:31:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 08:31:52 +0000 UTC FinishedAt: 2026-09-11 08:31:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 08:31:52 +0000 UTC FinishedAt: 2026-09-11 08:33:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 08:31:52 +0000 UTC FinishedAt: 2026-09-11 08:33:35 +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:*acb9aff3-f554-4c98-877f-c0fcf215ef8c,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-workflowdmtcb/series-workflowdmtcb-build-action-3891007755/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-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 08:33:45 +0000 UTC FinishedAt: 2026-09-11 11:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 08:33:45 +0000 UTC FinishedAt: 2026-09-11 11:36:41 +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":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"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:*3fc3a4f5-5a0a-4e84-b4a5-e7833b7f6b33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*acb9aff3-f554-4c98-877f-c0fcf215ef8c,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-workflowdmtcb/series-workflowdmtcb-build-action-707718182/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-workflowdmtcb/series-workflowdmtcb-build-action-3891007755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 08:33:45 +0000 UTC FinishedAt: 2026-09-11 08:33:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 08:33:45 +0000 UTC FinishedAt: 2026-09-11 08:33:51 +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":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"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-workflowdmtcb/series-workflowdmtcb-convert-artifact-4109759584/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 08:33:45 +0000 UTC FinishedAt: 2026-09-11 08:33:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 08:33:45 +0000 UTC FinishedAt: 2026-09-11 08:33:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 08:33:46 +0000 UTC FinishedAt: 2026-09-11 08:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 08:33:56 +0000 UTC FinishedAt: 2026-09-11 11:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdmtcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["notify_rule_change","fib_newrule","fib_delrule","fib_nl_fill_rule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"99d76b4da88f21edd14b169f65de33e8df1b7804","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES"],"series_id":"f4bcc6fc-341b-4c01-8561-3e363668f07f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 08:33:56 +0000 UTC FinishedAt: 2026-09-11 11:36:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3fc3a4f5-5a0a-4e84-b4a5-e7833b7f6b33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*acb9aff3-f554-4c98-877f-c0fcf215ef8c,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-workflowdmtcb/series-workflowdmtcb-build-action-707718182/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-workflowdmtcb/series-workflowdmtcb-build-action-3891007755/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-workflowdmtcb/series-workflowdmtcb-convert-artifact-4109759584/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,}