Name: series-workflowx8mww Phase: Succeeded StartedAt: 2026-08-22 02:58:49 +0000 UTC FinishedAt: 2026-08-22 07:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[0] Phase: Succeeded StartedAt: 2026-08-22 02:58:49 +0000 UTC FinishedAt: 2026-08-22 04:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 02:58:49 +0000 UTC FinishedAt: 2026-08-22 04:12:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "903c1cf6dff9964e71eda98a39e2e5d442050472", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "903c1cf6dff9964e71eda98a39e2e5d442050472", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN" ], "series_id": "fdfbab82-b839-4345-ba4a-a144db0658fc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_reparent_memcg", "lru_gen_reparent_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDssCiAgICAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIHJlcGFyZW50aW5nIGJ5IHN1YnRyYWN0aW5nIHRoZSBtb3ZlZCBzaXplIGZyb20gdGhlIGNoaWxkIGxydXZlYy4gVGhpcyBwcmV2ZW50cyB0aGUgZHlpbmcgY2hpbGQgZnJvbSBkZXNjcmliaW5nIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgYWNjb3VudGluZyB1cGRhdGVzLCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY2dyb3VwIG9mZmxpbmluZyBsb2dpYyB0byBwcm9wZXJseSBtb3ZlIExSVSBzaXplIGFjY291bnRpbmcgZnJvbSBhIGR5aW5nIGNoaWxkIG1lbWNnIHRvIGl0cyBwYXJlbnQsIGluc3RlYWQgb2YganVzdCBjb3B5aW5nIGl0LiBUaGlzIHByZXZlbnRzIHRoZSBjaGlsZCBtZW1jZyBmcm9tIHJldGFpbmluZyBub24temVybyBMUlUgc2l6ZXMgYWZ0ZXIgcmVwYXJlbnRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtZW1jZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIG1lbW9yeSBjZ3JvdXBzLCB3aGljaCBpcyBhIHJlYWNoYWJsZSBhbmQgaW1wb3J0YW50IHBhdGggdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZkNmVkNDAyOGFhMWM4NjZhYTA3ZGY3NGNmNmM0YjJjZGQ4ZDk0MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwMzozOTozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvLmNcbkBAIC0xMTMwLDcgJiM0MzsxMTMwLDE2IEBAIHN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxuIFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcbiBcbiYjNDM7XHRcdGlmICghc2l6ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBmb2xpb3MgYXJlIGFjY291bnRlZCB0byB0aGUgcGFyZW50IGZyb20gbm93IG9uLCBzbyB0aGVcbiYjNDM7XHRcdCAqIHNpemUgaGFzIHRvIGJlIG1vdmVkLCBub3QganVzdCBjb3BpZWQuIExlYXZpbmcgaXQgYmVoaW5kXG4mIzQzO1x0XHQgKiBtYWtlcyB0aGUgZHlpbmcgY2hpbGQgZGVzY3JpYmUgZm9saW9zIGl0IG5vIGxvbmdlciBvd25zLlxuJiM0MztcdFx0ICovXG4gXHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbiYjNDM7XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmU3ZjBjNTJhMThjMC4uNTYxZWVlYzU2MjhjYiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTQ2MzUsNyAmIzQzOzQ2MzUsMTIgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcbiBcdFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuIFxuJiM0MztcdFx0XHRpZiAoIXNpemUpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xuIFx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbiYjNDM7XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xuIFx0XHR9XG4gXHR9XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjI5bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmQ2ZWQ0MDI4YWExYzg2NmFhMDdkZjc0Y2Y2YzRiMmNkZDhkOTQwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDAzOjM5OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0xMTMwLDcgJiM0MzsxMTMwLDE2IEBAIHN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLAogCWZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCk7CiAKJiM0MzsJCWlmICghc2l6ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZm9saW9zIGFyZSBhY2NvdW50ZWQgdG8gdGhlIHBhcmVudCBmcm9tIG5vdyBvbiwgc28gdGhlCiYjNDM7CQkgKiBzaXplIGhhcyB0byBiZSBtb3ZlZCwgbm90IGp1c3QgY29waWVkLiBMZWF2aW5nIGl0IGJlaGluZAomIzQzOwkJICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4KJiM0MzsJCSAqLwogCQltZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7CiYjNDM7CQltZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGZlN2YwYzUyYTE4YzAuLjU2MWVlZWM1NjI4Y2IgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00NjM1LDcgJiM0Mzs0NjM1LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsCiAJCWZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7CiAJCQl1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpOwogCiYjNDM7CQkJaWYgKCFzaXplKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQkvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqLwogCQkJbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpOwomIzQzOwkJCW1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTsKIAkJfQogCX0KIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0d2Vha2luZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIG1lbW9yeSBjZ3JvdXBzLCBvciBtZW1jZ3MuIEl0JiMzOTtzIHRvdWNoaW5nIGBtbS9mb2xpby5jYCBhbmQgYG1tL3Ztc2Nhbi5jYCwgYW5kIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSB1cGRhdGVzIHRvIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBhbmQgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBUaGV5JiMzOTtyZSBhZGRpbmcgYSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGNhbGwsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBtb3JlIHByZWNpc2UgYXBwcm9hY2ggdG8gYWNjb3VudGluZyBkdXJpbmcgdGhlIExSVSByZXBhcmVudGluZyBwcm9jZXNzIGluc3RlYWQgb2YgYSBzaW1wbGUgY29weS4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2UsIHBlcmhhcHMgY29ycmVjdGluZyBhbiBhY2NvdW50aW5nIGlzc3VlIG9yIGltcHJvdmluZyB0aGUgYWNjdXJhY3kgb2YgbWVtb3J5IHVzYWdlIHRyYWNraW5nLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbmQgd2hlcmUgdGhleSYjMzk7cmUgY2FsbGVkLiBJIHNlZSBgbHJ1dmVjX3JlcGFyZW50X2xydWAgaXMgaW4gYG1tL2ZvbGlvLmNgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgaXMgaW4gYG1tL3Ztc2Nhbi5jYC4gQWxyaWdodCwgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgbHJ1dmVjX3JlcGFyZW50X2xydWAgbWlnaHQgYmUgY2FsbGVkIGZyb20gYG1lbV9jZ3JvdXBfcmVwYXJlbnRfbHJ1dmVjYCBvciBwb3NzaWJseSBldmVuIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYC4gVGhhdCBzZWVtcyBsb2dpY2FsLCBidXQgbGV0JiMzOTtzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGUgYmFzZSBmb3IgdGhlc2UgZnVuY3Rpb24gbmFtZXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciB1c2FnZSBhbmQgaG93IHRoaXMgbmV3IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgY2FsbCBmaXRzIGludG8gdGhlIGxhcmdlciBtZW1jZyBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1dmVjX3JlcGFyZW50X2xydSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTExMDc9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL2ZvbGlvLmMtMTExOS0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS9mb2xpby5jOjExMjA6c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG5tbS9mb2xpby5jLTExMjEtXHRcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxuLS1cbm1tL2ZvbGlvLmM9MTE0Nj12b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vZm9saW8uYy0xMTU0LVx0Zm9yX2VhY2hfbHJ1KGxydSlcbm1tL2ZvbGlvLmM6MTE1NTpcdFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcbm1tL2ZvbGlvLmMtMTE1Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYGxydV9yZXBhcmVudF9tZW1jZ2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyB0aGUgZnVuY3Rpb24gbWFraW5nIHRoaXMgY2FsbC4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gTm93LCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nICphcm91bmQqIHRoYXQgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYW5kIHdoYXQgaXQgY2FsbHMuCgpUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gaW5pdGlhdGUgYSBzZWFyY2ggZm9yIGJvdGggYGxydV9yZXBhcmVudF9tZW1jZ2AgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYC4gVGhpcyBzZWFyY2ggd2lsbCByZXZlYWwgdGhlIGJyb2FkZXIgY2FsbCBncmFwaCBhbmQgaGlnaGxpZ2h0IGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBCeSBleHBsb3JpbmcgdGhlc2UgZnVuY3Rpb25zLCBJIGNhbiByZWNvbnN0cnVjdCB0aGUgY29udHJvbCBmbG93IGFuZCBlc3RhYmxpc2ggdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGUgYWltIGlzIHRvIHRob3JvdWdobHkgYW5hbHl6ZSB0aGUgcm9sZSBhbmQgaW1wYWN0IG9mIGBscnVfcmVwYXJlbnRfbWVtY2dgIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD00Njk9c3RhdGljIGlubGluZSBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc2LSNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ3Nzp2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc4LSNlbmRpZlxuLS1cbm1tL2ZvbGlvLmM9MTEyMD1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9mb2xpby5jLTExNDUtXG5tbS9mb2xpby5jOjExNDY6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vZm9saW8uYy0xMTQ3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI5Ny1cdFx0fSBlbHNlIHtcbm1tL21lbWNvbnRyb2wuYzoyOTg6XHRcdFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG5tbS9tZW1jb250cm9sLmMtMjk5LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgYGxydV9yZXBhcmVudF9tZW1jZ2AqKgoKT2theSwgc28gYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgYmVpbmcgY2FsbGVkIGZyb20gZWl0aGVyIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIG9yIGEgcmVsYXRlZCBmdW5jdGlvbiwgbGlrZWx5IHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhlIHRyYWNlIHBvaW50cyBtZSBkaXJlY3RseSB0byBgbW0vbWVtY29udHJvbC5jOjI5ODogbHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7YC4gR29vZCwgdGhhdCYjMzk7cyBwcmVjaXNlLiBOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2AgYXJvdW5kIGxpbmUgMjk4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBjb250ZXh0IGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZ3Jhc3Agd2hhdCYjMzk7cyBoYXBwZW5pbmcgZHVyaW5nIHRoaXMgcmVwYXJlbnRpbmcgb3BlcmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiAyODE6XHRcdGludCBuaWQ7XG4gMjgyOlx0XG4gMjgzOlx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuIDI4NDpcdHJldHJ5OlxuIDI4NTpcdFx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXG4gMjg2Olx0XHRcdFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xuIDI4NzpcdFxuIDI4ODpcdFx0XHRyZXBhcmVudF9sb2NrcyhtZW1jZywgcGFyZW50LCBuaWQpO1xuIDI4OTpcdFxuIDI5MDpcdFx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbiAyOTE6XHRcdFx0XHRpZiAoIXJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2cocGFyZW50LCBuaWQpKSB7XG4gMjkyOlx0XHRcdFx0XHRyZXBhcmVudF91bmxvY2tzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMjkzOlx0XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiAyOTQ6XHRcdFx0XHRcdGdvdG8gcmV0cnk7XG4gMjk1Olx0XHRcdFx0fVxuIDI5NjpcdFx0XHRcdGxydV9nZW5fcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtcbiAyOTc6XHRcdFx0fSBlbHNlIHtcbiAyOTg6XHRcdFx0XHRscnVfcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtcbiAyOTk6XHRcdFx0fVxuIDMwMDpcdFxuIDMwMTpcdFx0XHRvYmpjZyA9IF9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMzAyOlx0XG4gMzAzOlx0XHRcdHJlcGFyZW50X3VubG9ja3MobWVtY2csIHBhcmVudCwgbmlkKTtcbiAzMDQ6XHRcbiAzMDU6XHRcdFx0cGVyY3B1X3JlZl9raWxsKFx1MDAyNm9iamNnLVx1MDAzZXJlZmNudCk7XG4gMzA2Olx0XHR9XG4gMzA3Olx0XG4gMzA4Olx0XHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbiAzMDk6XHR9XG4gMzEwOlx0XG4gMzExOlx0LypcbiAzMTI6XHQgKiBBIGxvdCBvZiB0aGUgY2FsbHMgdG8gdGhlIGNhY2hlIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZVxuIDMxMzpcdCAqIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBTaW5jZSB0aGUgY2FsbHMgdG8gbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soKSBhcmVcbiAzMTQ6XHQgKiBjb25kaXRpb25hbCB0byB0aGlzIHN0YXRpYyBicmFuY2gsIHdlJiMzOTtsbCBoYXZlIHRvIGFsbG93IG1vZHVsZXMgdGhhdCBkb2VzXG4gMzE1Olx0ICoga21lbV9jYWNoZV9hbGxvYyBhbmQgdGhlIHN1Y2ggdG8gc2VlIHRoaXMgc3ltYm9sIGFzIHdlbGxcbiAzMTY6XHQgKi9cbiAzMTc6XHRERUZJTkVfU1RBVElDX0tFWV9GQUxTRShtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIDMxODpcdEVYUE9SVF9TWU1CT0wobWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcbiAzMTk6XHRcbiAzMjA6XHRERUZJTkVfU1RBVElDX0tFWV9GQUxTRShtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xuIDMyMTpcdEVYUE9SVF9TWU1CT0wobWVtY2dfYnBmX2VuYWJsZWRfa2V5KTtcbiAzMjI6XHRcbiAzMjM6XHQvKipcbiAzMjQ6XHQgKiBnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyAtIGFjcXVpcmUgYSBjc3Mgb2YgdGhlIG1lbWNnIGFzc29jaWF0ZWQgd2l0aCBhIGZvbGlvXG4gMzI1Olx0ICogQGZvbGlvOiBmb2xpbyBvZiBpbnRlcmVzdFxuIDMyNjpcdCAqXG4gMzI3Olx0ICogSWYgbWVtY2cgaXMgYm91bmQgdG8gdGhlIGRlZmF1bHQgaGllcmFyY2h5LCBjc3Mgb2YgdGhlIG1lbWNnIGFzc29jaWF0ZWRcbiAzMjg6XHQgKiB3aXRoIEBmb2xpbyBpcyByZXR1cm5lZC4gIFRoZSByZXR1cm5lZCBjc3MgcmVtYWlucyBhc3NvY2lhdGVkIHdpdGggQGZvbGlvXG4gMzI5Olx0ICogdW50aWwgaXQgaXMgcmVsZWFzZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRnVuY3Rpb24gTmFtZSBWZXJpZmljYXRpb24qKgoKSG1tLCBpcyBpdCBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYD8gVGhhdCBzZWVtcy4uLiB2YWd1ZWx5IGZhbWlsaWFyLCBidXQgSSYjMzk7bSBub3QgZW50aXJlbHkgY29uZmlkZW50LiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUmIzM5O3MgbG9naWMsIGl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgZnVuY3Rpb24mIzM5O3MgcHJlY2lzZSBuYW1lLiBJIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGluZGVlZCB0aGUgY29ycmVjdCBmdW5jdGlvbi4gQSBzaW1wbGUgdHlwbyBhdCB0aGlzIGxldmVsIGNvdWxkIGxlYWQgbWUgZG93biBhIHJhYmJpdCBob2xlIGZvciBob3Vycy4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHksIGp1c3QgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfcmVwYXJlbnRfb2JqY2dzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xOTY9c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpfY2dyb3VwX2FsbG9jKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTIxNC1cbm1tL21lbWNvbnRyb2wuYzoyMTU6c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTIxNi1cdFx0XHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzA9c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3VubG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzYtXG5tbS9tZW1jb250cm9sLmM6Mjc3OnN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtMjc4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzAwLVxubW0vbWVtY29udHJvbC5jOjMwMTpcdFx0b2JqY2cgPSBfX21lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZywgcGFyZW50LCBuaWQpO1xubW0vbWVtY29udHJvbC5jLTMwMi1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDM0OD1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNjQtXHQgKi9cbm1tL21lbWNvbnRyb2wuYzo0MzY1Olx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00MzY2LVx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01Mzk0PXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQwOC0gKlxubW0vbWVtY29udHJvbC5jOjU0MDk6ICogbWVtY2dfcmVwYXJlbnRfb2JqY2dzKCkgcmVwYXJlbnRzIGEgZHlpbmcgY2dyb3VwIG9uZSBub2RlIGF0IGEgdGltZTogdGhlXG5tbS9tZW1jb250cm9sLmMtNTQxMC0gKiBmb2xpb3Mgb24gdGhhdCBub2RlJiMzOTtzIExSVSBsaXN0cyBtb3ZlIHRvIHRoZSBwYXJlbnQgYW5kIHRoYXQgbm9kZSYjMzk7cyBvYmpjZyBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjIyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBDZ3JvdXAgT2ZmbGluaW5nIEJ1Z2ZpeCoqCgpPa2F5LCBzbyB0aGlzIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBkdXJpbmcgYSBtZW1vcnkgY2dyb3VwJiMzOTtzIGRlc3RydWN0aW9uIG9yIG9mZmxpbmluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBjcml0aWNhbCBhcmVhIOKAkyB0aGUgdGVhcmRvd24gb2YgbWVtb3J5IHJlc291cmNlcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGZsYXc6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcHJvcGFnYXRlZCB0byB0aGUgY2hpbGQgY2dyb3VwIGR1cmluZyB0aGlzIG9mZmxpbmluZywgd2hpY2ggbWVhbnMgdGhlIExSVSBzaXplcyB3ZXJlbiYjMzk7dCBnZXR0aW5nIHVwZGF0ZWQgY29ycmVjdGx5IG9uIHRoZSBjaGlsZHJlbiwgd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgYWNjb3VudGluZyBvZiBtZW1vcnkgdXRpbGl6YXRpb24uIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgb2ZmbGluaW5nIHBhdGguCgpJcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5ISBUaGlzIGlzIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhdXRpb3VzLgoKTm93LCB3aGF0IGZ1bmN0aW9ucyBhcmUgbW9zdCByZWxldmFudD8gSSYjMzk7ZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2U6IGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgdG8gY29uZmlybSBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBpdCBpcy4gVGhhdCYjMzk7cyBub3QgdG9vIHN1cnByaXNpbmcgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgaXQgYmVpbmcgYSBjb3JlIGNvbXBvbmVudC4gTm93LCBob3cgYWJvdXQgYGxydV9yZXBhcmVudF9tZW1jZ2A/IEFoLCBpdCYjMzk7cyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSwgYmVjYXVzZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgTFJVIHVwZGF0ZXMgYW5kIG1heSBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cy4gTGFzdGx5LCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AsIGxldCYjMzk7cyBjaGVjayBpdCBpbiBgbW0vdm1zY2FuLmNgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuCgpUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBwbGFuIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFdlIG5lZWQgdG8gYmUgZXNwZWNpYWxseSBjYXJlZnVsIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHBhcmVudCBhbmQgY2hpbGQgY2dyb3VwcyBkdXJpbmcgb2ZmbGluaW5nIHRvIGVuc3VyZSBtZW1vcnkgYWNjb3VudGluZyBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9NzAxPWJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MDI6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwMy1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc1Mz1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1NDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NTUte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjk1LVx0XHRcdH1cbm1tL21lbWNvbnRyb2wuYzoyOTY6XHRcdFx0bHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhtZW1jZywgcGFyZW50LCBuaWQpO1xubW0vbWVtY29udHJvbC5jLTI5Ny1cdFx0fSBlbHNlIHtcbi0tXG5tbS92bXNjYW4uYz00NTQ4PXZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ1ODgtICovXG5tbS92bXNjYW4uYzo0NTg5OnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG5tbS92bXNjYW4uYy00NTkwLVx0XHRcdFx0ICAgICBpbnQgem9uZSwgaW50IHR5cGUpXG4tLVxubW0vdm1zY2FuLmMtNDYxOS1cbm1tL3Ztc2Nhbi5jOjQ2MjA6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2MjEte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2MzEtXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KVxubW0vdm1zY2FuLmM6NDYzMjpcdFx0XHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xubW0vdm1zY2FuLmMtNDYzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGFyZW4mIzM5O3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSBxdWVzdGlvbiBhYm91dCBob3cgdGhleSBhcmUgdXRpbGl6ZWQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBUaGF0IHVzdWFsbHkgaW1wbGllcyBzb21lIGV4dGVybmFsIGFjY2VzcyBvciBjYWxsLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGRlcGVuZGVuY2llcyBpcyBrZXkuCgoqKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKgoKSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciB0aGVzZSBndXlzIHRvIGV2ZW4gZXhpc3Qgb3IgZnVuY3Rpb24/JiMzNDsgYENPTkZJR19NRU1DR2AgZmVlbHMgbGlrZSB0aGUgbW9zdCBvYnZpb3VzIGFuZCBsaWtlbHkgY2FuZGlkYXRlLiBUaGF0JiMzOTtzIGFsbW9zdCBhIGdpdmVuLCBpc24mIzM5O3QgaXQ/IFNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBzZWVtIGluaGVyZW50bHkgdGllZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuCgpUbyBiZSBjZXJ0YWluLCBhbmQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGluIGBtbS9mb2xpby5jYCB0byBzZWUgaG93IGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGFjdHVhbGx5IHVzZWQuIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBleHRlbnQgb2YgdGhlaXIgaW1wYWN0IGFuZCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD00Njk9c3RhdGljIGlubGluZSBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc2LSNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ3Nzp2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc4LSNlbmRpZlxuLS1cbm1tL2ZvbGlvLmM9MTEyMD1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9mb2xpby5jLTExNDUtXG5tbS9mb2xpby5jOjExNDY6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vZm9saW8uYy0xMTQ3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI5Ny1cdFx0fSBlbHNlIHtcbm1tL21lbWNvbnRyb2wuYzoyOTg6XHRcdFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG5tbS9tZW1jb250cm9sLmMtMjk5LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBscnVfZ2VuX3JlcGFyZW50X21lbWNnIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpcyBkZWZpbml0ZWx5IGluIGBtbS92bXNjYW4uY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBpcyBgQ09ORklHX0xSVV9HRU5gIHJlbGF0ZWQgdG8gYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGRpZyBpbnRvLiBVbmRlcnN0YW5kaW5nIHRoYXQgZGVwZW5kZW5jeSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBmdW5jdGlvbiBpcyBkb2luZywgYW5kIHdoYXQgdHJpZ2dlcnMgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDE9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwMjp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzAzLVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzUzPXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzU0OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc1NS17XG4tLVxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTUtXHRcdFx0fVxubW0vbWVtY29udHJvbC5jOjI5NjpcdFx0XHRscnVfZ2VuX3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG5tbS9tZW1jb250cm9sLmMtMjk3LVx0XHR9IGVsc2Uge1xuLS1cbm1tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDU4OC0gKi9cbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ1OTAtXHRcdFx0XHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcbi0tXG5tbS92bXNjYW4uYy00NjE5LVxubW0vdm1zY2FuLmM6NDYyMDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYyMS17XG4tLVxubW0vdm1zY2FuLmMtNDYzMS1cdFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspXG5tbS92bXNjYW4uYzo0NjMyOlx0XHRcdF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIHppZCwgdHlwZSk7XG5tbS92bXNjYW4uYy00NjMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgbWVtb3J5LXJlbGF0ZWQsIGFuZCB0aGUgYG1tem9uZS5oYCBoZWFkZXIgZmlsZSBmZWVscyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlZ2lvbiBhcm91bmQgbGluZSA3MDIuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgc29tZSBrZXkgZnVuY3Rpb25zIGZvciB6b25lIG1hbmFnZW1lbnQgYXJlIGRlZmluZWQgb3IgcmVmZXJlbmNlZCwgd2hpY2ggaXMgaW1wb3J0YW50IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBvcmdhbml6YXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG1pZ2h0IGJlIGdvaW5nIHdyb25nIGJ5IGNoZWNraW5nIG91dCB0aGF0IHNwZWNpZmljIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbXpvbmUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjkwOlx0dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCk7XG4gNjkxOlx0dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gNjkyOlx0Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcbiA2OTM6XHRcbiA2OTQ6XHR2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIDY5NTpcdHZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gNjk2Olx0dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIDY5NzpcdHZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gNjk4Olx0dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiA2OTk6XHR2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG4gNzAwOlx0dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIDcwMTpcdGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIDcwMjpcdHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuIDcwMzpcdFxuIDcwNDpcdCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIDcwNTpcdFxuIDcwNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiA3MDc6XHR7XG4gNzA4Olx0fVxuIDcwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTFJVIEdlbmVyYXRpb24gYW5kIE1lbWNnIFJlcGFyZW50aW5nIExvZ2ljKioKCk9rYXksIHNvIHRoZSBwYXRjaCBkb2N1bWVudGF0aW9uIGluZGljYXRlcyB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBmb3IgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBUaGF0IG1ha2VzIHNlbnNlLiBXYWl0IGEgbWludXRlLi4uIHRoaXMgaXMgYSBiaXQgY29uZnVzaW5nLiBJdCBsb29rcyBsaWtlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGNhbGxlZCB3aGVuIGBscnVfZ2VuX2VuYWJsZWQoKWAgaXMgKmZhbHNlKi4gQW5kIHRoZW4sIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBscnVfZ2VuX2VuYWJsZWQoKWAgaXMgdHJ1ZS4gSXQgc2VlbXMgbGlrZSBib3RoIGFyZSBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLCB3aGljaCBzdWdnZXN0cyBhbiBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgdHdvIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZW0gYmV0dGVyLgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9mb2xpby5jYCBhcm91bmQgbGluZSAxMTIwLiBUaGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgbG9jYXRpb24gZm9yIHRoZSByZWxldmFudCBjb2RlLCBiYXNlZCBvbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZXNlIGNhbGxzIHRoZXJlLiBIb3BlZnVsbHkgdGhpcyB3aWxsIG1ha2UgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyBjbGVhcmVyLCBhbmQgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2Vuc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZm9saW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExNTpcdFx0fVxuMTExNjpcdFx0ZmJhdGNoLVx1MDAzZW5yID0gajtcbjExMTc6XHR9XG4xMTE4Olx0XG4xMTE5Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuMTEyMDpcdHN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxuMTEyMTpcdFx0XHRcdFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbjExMjI6XHRcdFx0XHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgbmlkKVxuMTEyMzpcdHtcbjExMjQ6XHRcdGludCB6aWQ7XG4xMTI1Olx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbjExMjY6XHRcbjExMjc6XHRcdGlmIChscnUgIT0gTFJVX1VORVZJQ1RBQkxFKVxuMTEyODpcdFx0XHRsaXN0X3NwbGljZV90YWlsX2luaXQoXHUwMDI2Y2hpbGRfbHJ1dmVjLVx1MDAzZWxpc3RzW2xydV0sIFx1MDAyNnBhcmVudF9scnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XSk7XG4xMTI5Olx0XG4xMTMwOlx0XHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSkge1xuMTEzMTpcdFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuMTEzMjpcdFxuMTEzMzpcdFx0XHRpZiAoIXNpemUpXG4xMTM0Olx0XHRcdFx0Y29udGludWU7XG4xMTM1Olx0XG4xMTM2Olx0XHRcdC8qXG4xMTM3Olx0XHRcdCAqIFRoZSBmb2xpb3MgYXJlIGFjY291bnRlZCB0byB0aGUgcGFyZW50IGZyb20gbm93IG9uLCBzbyB0aGVcbjExMzg6XHRcdFx0ICogc2l6ZSBoYXMgdG8gYmUgbW92ZWQsIG5vdCBqdXN0IGNvcGllZC4gTGVhdmluZyBpdCBiZWhpbmRcbjExMzk6XHRcdFx0ICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy5cbjExNDA6XHRcdFx0ICovXG4xMTQxOlx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbjExNDI6XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xuMTE0MzpcdFx0fVxuMTE0NDpcdH1cbjExNDU6XHRcbjExNDY6XHR2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4xMTQ3Olx0e1xuMTE0ODpcdFx0ZW51bSBscnVfbGlzdCBscnU7XG4xMTQ5Olx0XHRzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsICpwYXJlbnRfbHJ1dmVjO1xuMTE1MDpcdFxuMTE1MTpcdFx0Y2hpbGRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShuaWQpKTtcbjExNTI6XHRcdHBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTtcbjExNTM6XHRcbjExNTQ6XHRcdGZvcl9lYWNoX2xydShscnUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4yNG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBMUlUgUmVwYXJlbnRpbmcgaW4gTWVtY2cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IExSVSByZXBhcmVudGluZyB3b3JrcyB3aXRoaW4gdGhlIG1lbWNnIGZyYW1ld29yay4gSXQgbG9va3MgbGlrZSBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBkaXJlY3RseSB0aWVkIHRvIGBDT05GSUdfTUVNQ0dgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiwgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIHNlZW1zIHRvIGJlIGdhdGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAsICphbmQqIEkgcHJlc3VtZSwgYENPTkZJR19NRU1DR2AgYXMgd2VsbC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuIEdpdmVuIHRoYXQgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGNyaXRpY2FsIGxvZ2ljIHJlc2lkZXMuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0NjIwLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpc3NlY3RpbmcgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2MTU6XHRcdFx0XHRfX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUgJiM0MzsgcGFyZW50X2xydV9hY3RpdmUsIHpvbmUsIG5yX3BhZ2VzKTtcbjQ2MTY6XHRcdFx0fVxuNDYxNzpcdFx0fVxuNDYxODpcdH1cbjQ2MTk6XHRcbjQ2MjA6XHR2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuNDYyMTpcdHtcbjQ2MjI6XHRcdHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgKnBhcmVudF9scnV2ZWM7XG40NjIzOlx0XHRpbnQgdHlwZSwgemlkO1xuNDYyNDpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG40NjI1Olx0XHRlbnVtIGxydV9saXN0IGxydTtcbjQ2MjY6XHRcbjQ2Mjc6XHRcdGNoaWxkX2xydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG40NjI4Olx0XHRwYXJlbnRfbHJ1dmVjID0gZ2V0X2xydXZlYyhwYXJlbnQsIG5pZCk7XG40NjI5Olx0XG40NjMwOlx0XHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSlcbjQ2MzE6XHRcdFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspXG40NjMyOlx0XHRcdFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcbjQ2MzM6XHRcbjQ2MzQ6XHRcdGZvcl9lYWNoX2xydShscnUpIHtcbjQ2MzU6XHRcdFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcbjQ2MzY6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuNDYzNzpcdFxuNDYzODpcdFx0XHRcdGlmICghc2l6ZSlcbjQ2Mzk6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNDY0MDpcdFxuNDY0MTpcdFx0XHRcdC8qIE1vdmUgdGhlIGFjY291bnRpbmcsIGRvIG5vdCBkdXBsaWNhdGUgaXQuICovXG40NjQyOlx0XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xuNDY0MzpcdFx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcbjQ2NDQ6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQ29kZSBmb3IgTWVtY2cgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gRmlyc3QsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGV2ZW4gY29tcGlsZWQgaW4gd2hlbiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgaXQgZG9lcywgYW5kIGl0JiMzOTtzIHRha2luZyBhIGBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2dgIGFzIGl0cyBpbnB1dCB3aGljaCBzZWVtcyBsb2dpY2FsLiBOb3csIHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBjb25maXJtIHRoYXQgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBndWFyZCBpcyBwcmVzZW50IGFyb3VuZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiwganVzdCB0byBlbnN1cmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMganVzdCBiYXNpYyBkaWxpZ2VuY2UsIGJ1dCBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgdW5kZXIgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiBDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMDM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjA5LVxubW0vdm1zY2FuLmM6MjEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIxMS1cbi0tXG5tbS92bXNjYW4uYz0yNzQ0PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yNzQ3LVxubW0vdm1zY2FuLmM6Mjc0ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yNzQ5LVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9MjkwMj1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MDgtXG5tbS92bXNjYW4uYzoyOTA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MTAtXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9Mjk0Mj12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NDgtXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzoyOTQ5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5NTAtXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjk2OT12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NzctXG5tbS92bXNjYW4uYzoyOTc4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5NzktXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMzAwMS1cbm1tL3Ztc2Nhbi5jOjMwMDI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMzAwMy1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMDctXG5tbS92bXNjYW4uYzozMDA4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwMDktdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDM4Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00NDI3LVxubW0vdm1zY2FuLmM6NDQyODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00NDI5LVxuLS1cbm1tL3Ztc2Nhbi5jPTU2MDU9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NjE4LVxubW0vdm1zY2FuLmM6NTYxOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01NjIwLVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NTg3MT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4OTAtXG5tbS92bXNjYW4uYzo1ODkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU4OTItXG4tLVxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02ODExLVxubW0vdm1zY2FuLmM6NjgxMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02ODEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTFJVIEdlbmVyYXRpb24gYW5kIE1lbUNnIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmZGVmIENPTkZJR19NRU1DR2AgYXQgbGluZSA0NDI4LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIGl0ICphbHNvKiByZWxpZXMgb24gYENPTkZJR19MUlVfR0VOYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiB0aGUgTFJVIEdlbmVyYXRpb24gc3lzdGVtLCBvciBpZiBpdCYjMzk7cyBjb21wbGV0ZWx5IGluZGVwZW5kZW50IHdpdGhpbiB0aGUgTWVtQ0cgY29udGV4dC4gTGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2UgYG1tL3Ztc2Nhbi5jYCB0byBzZWFyY2ggZm9yIGBDT05GSUdfTFJVX0dFTmAgYW5kIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiBDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMi1cbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzNC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTI2ODA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjkxLVxubW0vdm1zY2FuLmM6MjY5MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2OTMtXG5tbS92bXNjYW4uYz0yNjk0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjY5Ni1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODgwPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4OTktXG5tbS92bXNjYW4uYzoyOTAwOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI5MDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjIyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBhbmQgTWVtY2cgUmVwYXJlbnRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX0xSVV9HRU5gIGlzIGVzc2VudGlhbCBmb3IgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggTFJVIGdlbmVyYXRpb24gaXMgdml0YWwgZm9yIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudC4gTm93LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoZXJlIGlzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGRlZmluZWQ/IFJpZ2h0LCBpdCYjMzk7cyBhY3R1YWxseSBpbiBgbW0vZm9saW8uY2AuIFNvLCBpZiBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBpbiBgbW0vZm9saW8uY2AsIEkgbmVlZCB0byBjaGVjayBob3cgaXQgdXNlcyBgQ09ORklHX01FTUNHYC4gVGltZSB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgaG93IHRoZSBtZW1vcnkgY2dyb3VwIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3RzIHdpdGggdGhlIGZvbGlvIGltcGxlbWVudGF0aW9uLiBUaGlzIG1pZ2h0IHByb3ZpZGUgZnVydGhlciBpbnNpZ2h0cyBpbnRvIHdoZXRoZXIgYW5kIGhvdyBgQ09ORklHX0xSVV9HRU5gIGlzIHVzZWQgaW4gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiBDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9mb2xpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZvbGlvLmM9MTEwNz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZm9saW8uYy0xMTE4LVxubW0vZm9saW8uYzoxMTE5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2ZvbGlvLmMtMTEyMC1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgUGF0aHMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX01FTUNHYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50IGhlcmUuIE5vIHF1ZXN0aW9uIGFib3V0IGl0LiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYENPTkZJR19MUlVfR0VOYCBpcyBhbHNvIG5lY2Vzc2FyeS4gVGhlIHBhdGNoIHRvdWNoZXMgYm90aCBgbHJ1dmVjX3JlcGFyZW50X2xydWAgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCwgd2hpY2ggYXJlIHVzZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYGxydV9nZW5fZW5hYmxlZCgpYCBpcyB0cnVlIG9yIGZhbHNlLiBTaW5jZSB3ZSYjMzk7cmUgbW9kaWZ5aW5nIGJvdGggZnVuY3Rpb25zLCBmdXp6aW5nIHdpdGgganVzdCBgQ09ORklHX01FTUNHYCBzaG91bGQgYmUgZW5vdWdoIHRvIGV4ZXJjaXNlIHRoZSBgbHJ1dmVjX3JlcGFyZW50X2xydWAgcGFydC4gQnV0LCB0byBoaXQgdGhlIG90aGVyIHBhdGgsIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCwgd2UgbmVlZCBgQ09ORklHX0xSVV9HRU5gIGVuYWJsZWQgYXMgd2VsbC4gQmVzdCB0byBpbmNsdWRlIGJvdGggZm9yIGZ1bGwgY292ZXJhZ2UuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGV2ZW4gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gQWgsIHllcywgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMg4oCTIHRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc3l6a2FsbGVyIHRhcmdldCwgc28gdGhhdCYjMzk7cyBnb29kIG5ld3MuCgpUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuCgpXYWl0LCBpcyBgbHJ1X3JlcGFyZW50X21lbWNnYCBleHBvcnRlZCBvciBqdXN0IG5vdCBzdGF0aWM/IEl0JiMzOTtzIG5vdCBzdGF0aWMuIE9rYXkuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBPaCwgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIGlzIHN0YXRpYywgYnV0IHRoYXQmIzM5O3MganVzdCBhIGNhbGxlci4gU28sIEkmIzM5O2xsIGp1c3QgdXNlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgYXMgdGhlIHRhcmdldHMuCgpGaW5hbGx5LCBJIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyB0aGUgb25seSBjYWxsZXIgb2YgYGxydXZlY19yZXBhcmVudF9scnVgLiBKdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydXZlY19yZXBhcmVudF9scnUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9mb2xpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZvbGlvLmM9MTEwNz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZm9saW8uYy0xMTE5LSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2ZvbGlvLmM6MTEyMDpzdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbm1tL2ZvbGlvLmMtMTEyMS1cdFx0XHRcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG4tLVxubW0vZm9saW8uYz0xMTQ2PXZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbi0tXG5tbS9mb2xpby5jLTExNTQtXHRmb3JfZWFjaF9scnUobHJ1KVxubW0vZm9saW8uYzoxMTU1Olx0XHRscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpO1xubW0vZm9saW8uYy0xMTU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGxydV9yZXBhcmVudF9tZW1jZ2AgYW5kIGBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2dgKioKClJpZ2h0LCBzbyBgbHJ1X3JlcGFyZW50X21lbWNnYCBzZWVtcyB0byBiZSB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIGl0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3MuIE5vdywgSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIGFib3V0IHRoYXQsIHNvIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIGlzIGluZGVlZCB0aGUgKnNvbGUqIGNhbGxlciBvZiBgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnYC4gTm8gc2Vuc2UgaW4gbWFraW5nIGFzc3VtcHRpb25zLCBldmVuIGlmIHRoZSBjb2RlIGluaXRpYWxseSBzdWdnZXN0cyB0aGF0LiBOZWVkIHRvIGJlIGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGVkZ2UgY2FzZXMgbHVya2luZyBhcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDU4OC0gKi9cbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ1OTAtXHRcdFx0XHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcbi0tXG5tbS92bXNjYW4uYz00NjIwPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDYzMS1cdFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspXG5tbS92bXNjYW4uYzo0NjMyOlx0XHRcdF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIHppZCwgdHlwZSk7XG5tbS92bXNjYW4uYy00NjMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBNZW1vcnkgQ29udHJvbCBHcm91cCBSZXBhcmVudGluZyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gY2FsbGluZyB0aGUgcmVwYXJlbnRpbmcgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmb2N1c2luZyBteSBhbmFseXNpcy4gR2l2ZW4gdGhhdCwgbXkgcHJpbWFyeSBhcmVhcyBvZiBpbnZlc3RpZ2F0aW9uIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQ6CgoqICAgYGxydV9yZXBhcmVudF9tZW1jZ2AgKHRoZSB0YXJnZXQgb2YgdGhlIGNhbGwpCiogICBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgKHRoZSBjYWxsZXIsIG9idmlvdXNseSkKCk5vdywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgd2lsbCBiZSBpbXBhY3RpbmcgdGhpcyBjb2RlIHBhdGguIFNwZWNpZmljYWxseSwgYE1FTUNHYCBhbmQgYExSVV9HRU5gLiBCdXQgd2FpdC4uLiBpcyBgTFJVX0dFTmAgdGhlICphY3R1YWwqIGNvbmZpZyBzeW1ib2w/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSB2ZXJpZnkgdGhlIGV4YWN0IGNvbmZpZyBuYW1lcyBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNy1cbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYExSVV9HRU5gIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgYExSVV9HRU5gIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGNvbmZpZyBuYW1lOyBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoYXQuCgpOb3csIGxldCYjMzk7cyB1bnBhY2sgdGhlIGZ1enppbmcgcmF0aW9uYWxlLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGJlaGF2ZXMgd2l0aCByZWdhcmQgdG8gTFJVIHNpemUgYWNjb3VudGluZyB3aGVuIGEgY2hpbGQgbWVtY2cgZGllcyBhbmQgaXMgcmVwYXJlbnRlZC4gSW5zdGVhZCBvZiBtZXJlbHkgY29weWluZyB0aGUgTFJVIHNpemUsIGl0IG5vdyBjb3JyZWN0bHkgbW92ZXMgaXQgdG8gdGhlIHBhcmVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW504oCUc3BlY2lmaWNhbGx5LCBtZW1jZy4gV2Uga25vdyB0aGlzIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdGhlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggbWFrZXMgaXQgYSBjcml0aWNhbCBhbmQgcmVhY2hhYmxlIHBhdGggZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciB1bmNvdmVyaW5nIHN1YnRsZSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycywgZXNwZWNpYWxseSB3aXRoIGVkZ2UgY2FzZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQuCgpCZWZvcmUgSSBnbyB0b28gZmFyLCBJIHNob3VsZCBqdXN0IHF1aWNrbHkgZG91YmxlIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgbmVlZGVkLCBhbnkgcG90ZW50aWFsIGNvbmZpZyBkZXBlbmRlbmNpZXMuLi4gTGV0IG1lIHNlZS4uLiBgTUVNQ0dgIGRvZXNuJiMzOTt0IHNlZW0gdG8gZGVwZW5kIG9uIGFueXRoaW5nIHVudXN1YWwsIHNvIHdlIHNob3VsZCBiZSBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIE1FTUNHJiMzOTtzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBgTUVNQ0dgIHJlbGllcyBvbiBgQ0dST1VQU2AuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9uLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBpdC4gQmVzdCBwbGFjZSB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzIGxpa2UgdGhlc2UgaXMgdXN1YWxseSBgaW5pdC9LY29uZmlnYC4gTGV0JiMzOTtzIG5hdmlnYXRlIHRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgYGNvbmZpZyBNRU1DR2AgcmV2ZWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBhdCBhIGNvbmZpZ3VyYXRpb24gbGV2ZWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyBzaG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMTIKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBuYXZpZ2F0aW5nIHRoaXMgY29uZmlndXJhdGlvbiBtYXplIGFuZCBpdCBsb29rcyBsaWtlIGBNRU1DR2AgaXMgbmVzdGVkIHdpdGhpbiBgbWVudWNvbmZpZyBDR1JPVVBTYCwgcmlnaHQ/IFRoYXQmIzM5O3MgZmFpcmx5IHN0YW5kYXJkLCBzbyBpdCYjMzk7cyBhIHNhZmUgYmV0IHRoYXQgYENHUk9VUFNgIGlzIGEgcHJlcmVxdWlzaXRlIGhlcmUuIE5vdywgc2luY2UgSSYjMzk7bSBoZXJlLCBtaWdodCBhcyB3ZWxsIGluY2x1ZGUgYm90aCBgTUVNQ0dgIGFuZCBgTFJVX0dFTmAuICBUaGV5IGxpa2VseSBwbGF5IG5pY2VseSB0b2dldGhlciBpbiB0aGlzIGNvbnRleHQuIEFuZCBJIGJlbGlldmUgdGhhdCBjb3ZlcnMgdGhlIHByZXJlcXVpc2l0ZXMuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGFwcGx5IHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDssCiAgICAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBvZmZsaW5pbmcgbG9naWMgdG8gcHJvcGVybHkgbW92ZSBMUlUgc2l6ZSBhY2NvdW50aW5nIGZyb20gYSBkeWluZyBjaGlsZCBtZW1jZyB0byBpdHMgcGFyZW50LCBpbnN0ZWFkIG9mIGp1c3QgY29weWluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgY2hpbGQgbWVtY2cgZnJvbSByZXRhaW5pbmcgbm9uLXplcm8gTFJVIHNpemVzIGFmdGVyIHJlcGFyZW50aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtY2cpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggaXMgYSByZWFjaGFibGUgYW5kIGltcG9ydGFudCBwYXRoIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWVtb3J5IGNncm91cCBMUlUgc2l6ZSByZXBhcmVudGluZyBieSBzdWJ0cmFjdGluZyB0aGUgbW92ZWQgc2l6ZSBmcm9tIHRoZSBjaGlsZCBscnV2ZWMuIFRoaXMgcHJldmVudHMgdGhlIGR5aW5nIGNoaWxkIGZyb20gZGVzY3JpYmluZyBmb2xpb3MgaXQgbm8gbG9uZ2VyIG93bnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIGFjY291bnRpbmcgdXBkYXRlcywgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmQ2ZWQ0MDI4YWExYzg2NmFhMDdkZjc0Y2Y2YzRiMmNkZDhkOTQwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDAzOjM5OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0xMTMwLDcgJiM0MzsxMTMwLDE2IEBAIHN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLAogCWZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCk7CiAKJiM0MzsJCWlmICghc2l6ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZm9saW9zIGFyZSBhY2NvdW50ZWQgdG8gdGhlIHBhcmVudCBmcm9tIG5vdyBvbiwgc28gdGhlCiYjNDM7CQkgKiBzaXplIGhhcyB0byBiZSBtb3ZlZCwgbm90IGp1c3QgY29waWVkLiBMZWF2aW5nIGl0IGJlaGluZAomIzQzOwkJICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4KJiM0MzsJCSAqLwogCQltZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7CiYjNDM7CQltZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGZlN2YwYzUyYTE4YzAuLjU2MWVlZWM1NjI4Y2IgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00NjM1LDcgJiM0Mzs0NjM1LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsCiAJCWZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7CiAJCQl1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpOwogCiYjNDM7CQkJaWYgKCFzaXplKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQkvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqLwogCQkJbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpOwomIzQzOwkJCW1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTsKIAkJfQogCX0KIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODEKCQkJCQkJCW91dHB1dDogMTE3CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIExSVSBTaXplIEFjY291bnRpbmcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiBpc3N1ZSBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIGFjY291bnRpbmcgZHVyaW5nIHJlcGFyZW50aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBhbmQgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBJIHNlZSB0aGUgY29yZSBvZiB0aGUgZml4IGlzIHRoZSBhZGRpdGlvbiBvZiBgaWYgKCFzaXplKSBjb250aW51ZTtgIGFuZCB0aGVuIGRlY3JlbWVudGluZyB0aGUgY2hpbGQgbHJ1dmVjIHNpemUgdXNpbmcgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gVGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNvcnJlY3Rpb24gdG8gaG93IExSVSBzaXplcyBhcmUgdHJhY2tlZCB3aGVuIG1lbW9yeSBpcyBiZWluZyBtb3ZlZCBiZXR3ZWVuIGNncm91cHMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgZml4IGlzIHRhcmdldGVkIGF0IHBvdGVudGlhbCB1bmRlcmZsb3dzIG9yIGluZmluaXRlIGxvb3BzIHRoYXQgY291bGQgdHJpZ2dlciBpbmNvcnJlY3QgcmVjbGFpbSBiZWhhdmlvci4gRnJvbSB0aGUgZGVzY3JpcHRpb24sIHRoZSBidWcgbGllcyBpbiBwb3RlbnRpYWxseSBpbmNvcnJlY3QgTFJVIHNpemVzLiBUaGF0IHJpbmdzIHRydWUuIFRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBjb3VsZCBiZSBjYXVnaHQgd2l0aCBvdGhlciB0b29scyBsaWtlIEtBU0FOIG9yIHRoZSBzdGFuZGFyZCBjaGVja3MsIGxpa2UgcGFnZSBhbGxvY2F0b3IgY2hlY2tzLCBvciBWTV9CVUdfT04sIGJ1dCBLTVNBTiwgc3BlY2lmaWNhbGx5LCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgdHJpcHBlZCB1cCBoZXJlLiBUaGVyZSYjMzk7cyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIGltbWVkaWF0ZSByaXNrIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTbywgZ2l2ZW4gbXkgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBhIGNsZWFuIGZpeCB3aXRoIG5vIG9idmlvdXMgS01TQU4gY29uY2VybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIG1lbW9yeSBjZ3JvdXAgTFJVIHNpemUgcmVwYXJlbnRpbmcgYnkgc3VidHJhY3RpbmcgdGhlIG1vdmVkIHNpemUgZnJvbSB0aGUgY2hpbGQgbHJ1dmVjLiBUaGlzIHByZXZlbnRzIHRoZSBkeWluZyBjaGlsZCBmcm9tIGRlc2NyaWJpbmcgZm9saW9zIGl0IG5vIGxvbmdlciBvd25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHNpbXBsZSBhcml0aG1ldGljIGFuZCBhY2NvdW50aW5nIHVwZGF0ZXMsIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIHJlcGFyZW50aW5nIGJ5IHN1YnRyYWN0aW5nIHRoZSBtb3ZlZCBzaXplIGZyb20gdGhlIGNoaWxkIGxydXZlYy4gVGhpcyBwcmV2ZW50cyB0aGUgZHlpbmcgY2hpbGQgZnJvbSBkZXNjcmliaW5nIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgYWNjb3VudGluZyB1cGRhdGVzLCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzozOTo0MC4xOTkxMzkzMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM5NTI0ODQwNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X3JlcGFyZW50X21lbWNnXCIsXG4gICAgXCJscnVfZ2VuX3JlcGFyZW50X21lbWNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIHJlcGFyZW50aW5nIGJ5IHN1YnRyYWN0aW5nIHRoZSBtb3ZlZCBzaXplIGZyb20gdGhlIGNoaWxkIGxydXZlYy4gVGhpcyBwcmV2ZW50cyB0aGUgZHlpbmcgY2hpbGQgZnJvbSBkZXNjcmliaW5nIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgYWNjb3VudGluZyB1cGRhdGVzLCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzozOTo0MC4xOTkxNDYwMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQ1MzA0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDZlZDQwMjhhYTFjODY2YWEwN2RmNzRjZjZjNGIyY2RkOGQ5NDBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDIyIDAzOjM5OjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXFxuaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDRcXG4tLS0gYS9tbS9mb2xpby5jXFxuKysrIGIvbW0vZm9saW8uY1xcbkBAIC0xMTMwLDcgKzExMzAsMTYgQEAgc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuIFxcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCk7XFxuIFxcbitcXHRcXHRpZiAoIXNpemUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIGZvbGlvcyBhcmUgYWNjb3VudGVkIHRvIHRoZSBwYXJlbnQgZnJvbSBub3cgb24sIHNvIHRoZVxcbitcXHRcXHQgKiBzaXplIGhhcyB0byBiZSBtb3ZlZCwgbm90IGp1c3QgY29waWVkLiBMZWF2aW5nIGl0IGJlaGluZFxcbitcXHRcXHQgKiBtYWtlcyB0aGUgZHlpbmcgY2hpbGQgZGVzY3JpYmUgZm9saW9zIGl0IG5vIGxvbmdlciBvd25zLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbitcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGZlN2YwYzUyYTE4YzAuLjU2MWVlZWM1NjI4Y2IgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00NjM1LDcgKzQ2MzUsMTIgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcXG4gXFx0XFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcXG4gXFxuK1xcdFxcdFxcdGlmICghc2l6ZSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xcbiBcXHRcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XFxuK1xcdFxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6Mzk6NDEuNzA0MzQ0OTI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc0OTkwNDcxMzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9yZXBhcmVudF9tZW1jZ1wiLFxuICAgIFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDZlZDQwMjhhYTFjODY2YWEwN2RmNzRjZjZjNGIyY2RkOGQ5NDBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDM6Mzk6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbisrKyBiL21tL2ZvbGlvLmNcbkBAIC0xMTMwLDcgKzExMzAsMTYgQEAgc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4gXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuIFxuK1x0XHRpZiAoIXNpemUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBmb2xpb3MgYXJlIGFjY291bnRlZCB0byB0aGUgcGFyZW50IGZyb20gbm93IG9uLCBzbyB0aGVcbitcdFx0ICogc2l6ZSBoYXMgdG8gYmUgbW92ZWQsIG5vdCBqdXN0IGNvcGllZC4gTGVhdmluZyBpdCBiZWhpbmRcbitcdFx0ICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy5cbitcdFx0ICovXG4gXHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbitcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmZTdmMGM1MmExOGMwLi41NjFlZWVjNTYyOGNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDYzNSw3ICs0NjM1LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gXHRcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcbiBcbitcdFx0XHRpZiAoIXNpemUpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xuIFx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbitcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG4gXHRcdH1cbiBcdH1cbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzozOTo0MS43MDQzNDY2NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk1MzA3MDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQncyB0d2Vha2luZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIG1lbW9yeSBjZ3JvdXBzLCBvciBtZW1jZ3MuIEl0J3MgdG91Y2hpbmcgYG1tL2ZvbGlvLmNgIGFuZCBgbW0vdm1zY2FuLmNgLCBhbmQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIHVwZGF0ZXMgdG8gYGxydXZlY19yZXBhcmVudF9scnVgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuIFRoZXkncmUgYWRkaW5nIGEgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBjYWxsLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGEgbW9yZSBwcmVjaXNlIGFwcHJvYWNoIHRvIGFjY291bnRpbmcgZHVyaW5nIHRoZSBMUlUgcmVwYXJlbnRpbmcgcHJvY2VzcyBpbnN0ZWFkIG9mIGEgc2ltcGxlIGNvcHkuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGZ1bmN0aW9uYWwgY2hhbmdlLCBwZXJoYXBzIGNvcnJlY3RpbmcgYW4gYWNjb3VudGluZyBpc3N1ZSBvciBpbXByb3ZpbmcgdGhlIGFjY3VyYWN5IG9mIG1lbW9yeSB1c2FnZSB0cmFja2luZy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbmQgd2hlcmUgdGhleSdyZSBjYWxsZWQuIEkgc2VlIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBpcyBpbiBgbW0vZm9saW8uY2AgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpcyBpbiBgbW0vdm1zY2FuLmNgLiBBbHJpZ2h0LCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBtaWdodCBiZSBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9yZXBhcmVudF9scnV2ZWNgIG9yIHBvc3NpYmx5IGV2ZW4gYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLiBUaGF0IHNlZW1zIGxvZ2ljYWwsIGJ1dCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gSSdsbCBzZWFyY2ggdGhlIGNvZGUgYmFzZSBmb3IgdGhlc2UgZnVuY3Rpb24gbmFtZXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciB1c2FnZSBhbmQgaG93IHRoaXMgbmV3IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgY2FsbCBmaXRzIGludG8gdGhlIGxhcmdlciBtZW1jZyBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MDoyOS42NTc0MTk2ODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MjQ3MTk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnV2ZWNfcmVwYXJlbnRfbHJ1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MTEwNz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9mb2xpby5jLTExMTktI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2ZvbGlvLmM6MTEyMDpzdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG5tbS9mb2xpby5jLTExMjEtXFx0XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL2ZvbGlvLmM9MTE0Nj12b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS9mb2xpby5jLTExNTQtXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG5tbS9mb2xpby5jOjExNTU6XFx0XFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcXG5tbS9mb2xpby5jLTExNTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MDozMS41OTk4OTY1ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA2NjYwODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIENhbGwgU3RhY2s6IGBscnVfcmVwYXJlbnRfbWVtY2dgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyB0aGUgZnVuY3Rpb24gbWFraW5nIHRoaXMgY2FsbC4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2UsIEkgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyAqYXJvdW5kKiB0aGF0IGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYW5kIHdoYXQgaXQgY2FsbHMuXG5cblRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgYm90aCBgbHJ1X3JlcGFyZW50X21lbWNnYCBhbmQgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBUaGlzIHNlYXJjaCB3aWxsIHJldmVhbCB0aGUgYnJvYWRlciBjYWxsIGdyYXBoIGFuZCBoaWdobGlnaHQgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMuIEJ5IGV4cGxvcmluZyB0aGVzZSBmdW5jdGlvbnMsIEkgY2FuIHJlY29uc3RydWN0IHRoZSBjb250cm9sIGZsb3cgYW5kIGVzdGFibGlzaCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoZSBhaW0gaXMgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSByb2xlIGFuZCBpbXBhY3Qgb2YgYGxydV9yZXBhcmVudF9tZW1jZ2Agd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MDozNC44MDY1NTk0MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTQ3NDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfcmVwYXJlbnRfbWVtY2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9NDY5PXN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc2LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0Nzc6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00NzgtI2VuZGlmXFxuLS1cXG5tbS9mb2xpby5jPTExMjA9c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuLS1cXG5tbS9mb2xpby5jLTExNDUtXFxubW0vZm9saW8uYzoxMTQ2OnZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG5tbS9mb2xpby5jLTExNDcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5Ny1cXHRcXHR9IGVsc2Uge1xcbm1tL21lbWNvbnRyb2wuYzoyOTg6XFx0XFx0XFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxubW0vbWVtY29udHJvbC5jLTI5OS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAzOjQwOjM2LjYwODAzOTE4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODkzNjUyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGxydV9yZXBhcmVudF9tZW1jZ2AqKlxuXG5Pa2F5LCBzbyBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBlaXRoZXIgYG1lbWNnX3JlcGFyZW50X29iamNnc2Agb3IgYSByZWxhdGVkIGZ1bmN0aW9uLCBsaWtlbHkgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgdHJhY2UgcG9pbnRzIG1lIGRpcmVjdGx5IHRvIGBtbS9tZW1jb250cm9sLmM6Mjk4OiBscnVfcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtgLiBHb29kLCB0aGF0J3MgcHJlY2lzZS4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbGwgbmVlZCB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2AgYXJvdW5kIGxpbmUgMjk4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBjb250ZXh0IGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZ3Jhc3Agd2hhdCdzIGhhcHBlbmluZyBkdXJpbmcgdGhpcyByZXBhcmVudGluZyBvcGVyYXRpb24uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODU0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDA6NDEuMzk3NDA2ODkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gMjgxOlxcdFxcdGludCBuaWQ7XFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdGZvcl9lYWNoX25vZGUobmlkKSB7XFxuIDI4NDpcXHRyZXRyeTpcXG4gMjg1OlxcdFxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcXG4gMjg2OlxcdFxcdFxcdFxcdG1heF9scnVfZ2VuX21lbWNnKHBhcmVudCwgbmlkKTtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0XFx0cmVwYXJlbnRfbG9ja3MobWVtY2csIHBhcmVudCwgbmlkKTtcXG4gMjg5OlxcdFxcbiAyOTA6XFx0XFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxuIDI5MTpcXHRcXHRcXHRcXHRpZiAoIXJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2cocGFyZW50LCBuaWQpKSB7XFxuIDI5MjpcXHRcXHRcXHRcXHRcXHRyZXBhcmVudF91bmxvY2tzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDI5NTpcXHRcXHRcXHRcXHR9XFxuIDI5NjpcXHRcXHRcXHRcXHRscnVfZ2VuX3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDI5NzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyOTg6XFx0XFx0XFx0XFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDI5OTpcXHRcXHRcXHR9XFxuIDMwMDpcXHRcXG4gMzAxOlxcdFxcdFxcdG9iamNnID0gX19tZW1jZ19yZXBhcmVudF9vYmpjZ3MobWVtY2csIHBhcmVudCwgbmlkKTtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0XFx0cmVwYXJlbnRfdW5sb2NrcyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbiAzMDQ6XFx0XFxuIDMwNTpcXHRcXHRcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNm9iamNnLVxcdTAwM2VyZWZjbnQpO1xcbiAzMDY6XFx0XFx0fVxcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcXG4gMzA5OlxcdH1cXG4gMzEwOlxcdFxcbiAzMTE6XFx0LypcXG4gMzEyOlxcdCAqIEEgbG90IG9mIHRoZSBjYWxscyB0byB0aGUgY2FjaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlXFxuIDMxMzpcXHQgKiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgdGhlIGNhbGxzIHRvIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKCkgYXJlXFxuIDMxNDpcXHQgKiBjb25kaXRpb25hbCB0byB0aGlzIHN0YXRpYyBicmFuY2gsIHdlJ2xsIGhhdmUgdG8gYWxsb3cgbW9kdWxlcyB0aGF0IGRvZXNcXG4gMzE1OlxcdCAqIGttZW1fY2FjaGVfYWxsb2MgYW5kIHRoZSBzdWNoIHRvIHNlZSB0aGlzIHN5bWJvbCBhcyB3ZWxsXFxuIDMxNjpcXHQgKi9cXG4gMzE3OlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIDMxODpcXHRFWFBPUlRfU1lNQk9MKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XFxuIDMyMTpcXHRFWFBPUlRfU1lNQk9MKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XFxuIDMyMjpcXHRcXG4gMzIzOlxcdC8qKlxcbiAzMjQ6XFx0ICogZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8gLSBhY3F1aXJlIGEgY3NzIG9mIHRoZSBtZW1jZyBhc3NvY2lhdGVkIHdpdGggYSBmb2xpb1xcbiAzMjU6XFx0ICogQGZvbGlvOiBmb2xpbyBvZiBpbnRlcmVzdFxcbiAzMjY6XFx0ICpcXG4gMzI3OlxcdCAqIElmIG1lbWNnIGlzIGJvdW5kIHRvIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgY3NzIG9mIHRoZSBtZW1jZyBhc3NvY2lhdGVkXFxuIDMyODpcXHQgKiB3aXRoIEBmb2xpbyBpcyByZXR1cm5lZC4gIFRoZSByZXR1cm5lZCBjc3MgcmVtYWlucyBhc3NvY2lhdGVkIHdpdGggQGZvbGlvXFxuIDMyOTpcXHQgKiB1bnRpbCBpdCBpcyByZWxlYXNlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDA6NDEuMzk3NjI3MjkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI1NDE4MjEyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRnVuY3Rpb24gTmFtZSBWZXJpZmljYXRpb24qKlxuXG5IbW0sIGlzIGl0IGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgPyBUaGF0IHNlZW1zLi4uIHZhZ3VlbHkgZmFtaWxpYXIsIGJ1dCBJJ20gbm90IGVudGlyZWx5IGNvbmZpZGVudC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlJ3MgbG9naWMsIGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBmdW5jdGlvbidzIHByZWNpc2UgbmFtZS4gSSBuZWVkIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgZnVuY3Rpb24uIEEgc2ltcGxlIHR5cG8gYXQgdGhpcyBsZXZlbCBjb3VsZCBsZWFkIG1lIGRvd24gYSByYWJiaXQgaG9sZSBmb3IgaG91cnMuIExldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHksIGp1c3QgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDE6MDMuOTM5NDUwNTYyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxODUwNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnX3JlcGFyZW50X29iamNnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTk2PXN0YXRpYyBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2Nncm91cF9hbGxvYyh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIxNC1cXG5tbS9tZW1jb250cm9sLmM6MjE1OnN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtMjE2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3MD1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfdW5sb2NrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc2LVxcbm1tL21lbWNvbnRyb2wuYzoyNzc6c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtMjc4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMDAtXFxubW0vbWVtY29udHJvbC5jOjMwMTpcXHRcXHRvYmpjZyA9IF9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxubW0vbWVtY29udHJvbC5jLTMwMi1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzQ4PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzY0LVxcdCAqL1xcbm1tL21lbWNvbnRyb2wuYzo0MzY1OlxcdG1lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQzNjYtXFx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUzOTQ9dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0MDgtICpcXG5tbS9tZW1jb250cm9sLmM6NTQwOTogKiBtZW1jZ19yZXBhcmVudF9vYmpjZ3MoKSByZXBhcmVudHMgYSBkeWluZyBjZ3JvdXAgb25lIG5vZGUgYXQgYSB0aW1lOiB0aGVcXG5tbS9tZW1jb250cm9sLmMtNTQxMC0gKiBmb2xpb3Mgb24gdGhhdCBub2RlJ3MgTFJVIGxpc3RzIG1vdmUgdG8gdGhlIHBhcmVudCBhbmQgdGhhdCBub2RlJ3Mgb2JqY2cgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDE6MDYuMDkxMzA4NzA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NjAzNjkxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IENncm91cCBPZmZsaW5pbmcgQnVnZml4KipcblxuT2theSwgc28gdGhpcyBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZHVyaW5nIGEgbWVtb3J5IGNncm91cCdzIGRlc3RydWN0aW9uIG9yIG9mZmxpbmluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBjcml0aWNhbCBhcmVhIOKAkyB0aGUgdGVhcmRvd24gb2YgbWVtb3J5IHJlc291cmNlcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGZsYXc6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBwcm9wYWdhdGVkIHRvIHRoZSBjaGlsZCBjZ3JvdXAgZHVyaW5nIHRoaXMgb2ZmbGluaW5nLCB3aGljaCBtZWFucyB0aGUgTFJVIHNpemVzIHdlcmVuJ3QgZ2V0dGluZyB1cGRhdGVkIGNvcnJlY3RseSBvbiB0aGUgY2hpbGRyZW4sIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGFjY291bnRpbmcgb2YgbWVtb3J5IHV0aWxpemF0aW9uLiBUaGF0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgb2ZmbGluaW5nIHBhdGguXG5cbklzIHRoaXMgZnV6ei13b3J0aHk/IEFic29sdXRlbHkhIFRoaXMgaXMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2F1dGlvdXMuXG5cbk5vdywgd2hhdCBmdW5jdGlvbnMgYXJlIG1vc3QgcmVsZXZhbnQ/IEknZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2U6IGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIHRvIGNvbmZpcm0gaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBpdCBpcy4gVGhhdCdzIG5vdCB0b28gc3VycHJpc2luZyBnaXZlbiB0aGUgY29udGV4dCBvZiBpdCBiZWluZyBhIGNvcmUgY29tcG9uZW50LiBOb3csIGhvdyBhYm91dCBgbHJ1X3JlcGFyZW50X21lbWNnYD8gQWgsIGl0J3Mgbm9uLXN0YXRpYy4gTWFrZXMgc2Vuc2UsIGJlY2F1c2UgaXQncyByZXNwb25zaWJsZSBmb3IgTFJVIHVwZGF0ZXMgYW5kIG1heSBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cy4gTGFzdGx5LCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AsIGxldCdzIGNoZWNrIGl0IGluIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgcGxhbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBXZSBuZWVkIHRvIGJlIGVzcGVjaWFsbHkgY2FyZWZ1bCBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBwYXJlbnQgYW5kIGNoaWxkIGNncm91cHMgZHVyaW5nIG9mZmxpbmluZyB0byBlbnN1cmUgbWVtb3J5IGFjY291bnRpbmcgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyMiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MToxNC41NTE2ODA4MDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDYyNjI3MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwMT1ib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwMjp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzUzPXN0YXRpYyBpbmxpbmVcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1NDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzU1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTUtXFx0XFx0XFx0fVxcbm1tL21lbWNvbnRyb2wuYzoyOTY6XFx0XFx0XFx0bHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbm1tL21lbWNvbnRyb2wuYy0yOTctXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NTg4LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYy00NTkwLVxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYxOS1cXG5tbS92bXNjYW4uYzo0NjIwOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYyMS17XFxuLS1cXG5tbS92bXNjYW4uYy00NjMxLVxcdFxcdGZvciAodHlwZSA9IDA7IHR5cGUgXFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspXFxubW0vdm1zY2FuLmM6NDYzMjpcXHRcXHRcXHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xcbm1tL3Ztc2Nhbi5jLTQ2MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAzOjQxOjE1Ljk5Nzk0NzkwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc5MTU1NjY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGFyZW4ndCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHNwYXJrcyBhIHF1ZXN0aW9uIGFib3V0IGhvdyB0aGV5IGFyZSB1dGlsaXplZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRoYXQgdXN1YWxseSBpbXBsaWVzIHNvbWUgZXh0ZXJuYWwgYWNjZXNzIG9yIGNhbGwsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIGlzIGtleS5cblxuKipEaXZpbmcgaW50byB0aGUgRGVwZW5kZW5jaWVzKipcblxuSSdtIHRoaW5raW5nLCBcIndoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWNlc3NhcnkgZm9yIHRoZXNlIGd1eXMgdG8gZXZlbiBleGlzdCBvciBmdW5jdGlvbj9cIiBgQ09ORklHX01FTUNHYCBmZWVscyBsaWtlIHRoZSBtb3N0IG9idmlvdXMgYW5kIGxpa2VseSBjYW5kaWRhdGUuIFRoYXQncyBhbG1vc3QgYSBnaXZlbiwgaXNuJ3QgaXQ/IFNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBzZWVtIGluaGVyZW50bHkgdGllZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuXG5cblRvIGJlIGNlcnRhaW4sIGFuZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgbW0vZm9saW8uY2AgdG8gc2VlIGhvdyBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBhY3R1YWxseSB1c2VkLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXBzIGFuZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBleHRlbnQgb2YgdGhlaXIgaW1wYWN0IGFuZCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MjowNS43ODk1MDczMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTk4NDc2NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X3JlcGFyZW50X21lbWNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oPTQ2OT1zdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ3Ni0jaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDc3OnZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc4LSNlbmRpZlxcbi0tXFxubW0vZm9saW8uYz0xMTIwPXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcbi0tXFxubW0vZm9saW8uYy0xMTQ1LVxcbm1tL2ZvbGlvLmM6MTE0Njp2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vZm9saW8uYy0xMTQ3LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTctXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1jb250cm9sLmM6Mjk4OlxcdFxcdFxcdGxydV9yZXBhcmVudF9tZW1jZyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbm1tL21lbWNvbnRyb2wuYy0yOTktXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MjowOC42MDkzNTg5NDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNzQyMDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBscnVfZ2VuX3JlcGFyZW50X21lbWNnIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIGlzIGRlZmluaXRlbHkgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgaXMgYENPTkZJR19MUlVfR0VOYCByZWxhdGVkIHRvIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGRpZyBpbnRvLiBVbmRlcnN0YW5kaW5nIHRoYXQgZGVwZW5kZW5jeSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBmdW5jdGlvbiBpcyBkb2luZywgYW5kIHdoYXQgdHJpZ2dlcnMgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MjoxMi45MTY3ODE4MzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjQ3NzM5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwMT1ib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwMjp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzUzPXN0YXRpYyBpbmxpbmVcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1NDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzU1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTUtXFx0XFx0XFx0fVxcbm1tL21lbWNvbnRyb2wuYzoyOTY6XFx0XFx0XFx0bHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbm1tL21lbWNvbnRyb2wuYy0yOTctXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NTg4LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYy00NTkwLVxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYxOS1cXG5tbS92bXNjYW4uYzo0NjIwOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYyMS17XFxuLS1cXG5tbS92bXNjYW4uYy00NjMxLVxcdFxcdGZvciAodHlwZSA9IDA7IHR5cGUgXFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspXFxubW0vdm1zY2FuLmM6NDYzMjpcXHRcXHRcXHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xcbm1tL3Ztc2Nhbi5jLTQ2MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAzOjQyOjE0LjM4MTU2MTA0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjA3MTM0MDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gc29tZXRoaW5nIG1lbW9yeS1yZWxhdGVkLCBhbmQgdGhlIGBtbXpvbmUuaGAgaGVhZGVyIGZpbGUgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlZ2lvbiBhcm91bmQgbGluZSA3MDIuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGtleSBmdW5jdGlvbnMgZm9yIHpvbmUgbWFuYWdlbWVudCBhcmUgZGVmaW5lZCBvciByZWZlcmVuY2VkLCB3aGljaCBpcyBpbXBvcnRhbnQgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIG9yZ2FuaXphdGlvbiB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSSdtIGhvcGluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBnb2luZyB3cm9uZyBieSBjaGVja2luZyBvdXQgdGhhdCBzcGVjaWZpYyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjc0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDM6MjAuNDUyOTA1MDQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5MDpcXHR2b2lkIGxydV9nZW5faW5pdF9wZ2RhdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTtcXG4gNjkxOlxcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbiA2OTI6XFx0Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0dm9pZCBscnVfZ2VuX2luaXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gNjk1OlxcdHZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIDY5NjpcXHR2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIDY5NzpcXHR2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiA2OTg6XFx0dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gNjk5OlxcdHZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG4gNzAwOlxcdHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG4gNzAxOlxcdGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xcbiA3MDI6XFx0dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XFxuIDcwMzpcXHRcXG4gNzA0OlxcdCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbiA3MDU6XFx0XFxuIDcwNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuIDcwNzpcXHR7XFxuIDcwODpcXHR9XFxuIDcwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDM6MjAuNDUzMDMxMzMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjU4ODQ3NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTFJVIEdlbmVyYXRpb24gYW5kIE1lbWNnIFJlcGFyZW50aW5nIExvZ2ljKipcblxuT2theSwgc28gdGhlIHBhdGNoIGRvY3VtZW50YXRpb24gaW5kaWNhdGVzIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuIFRoYXQgbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gdGhpcyBpcyBhIGJpdCBjb25mdXNpbmcuIEl0IGxvb2tzIGxpa2UgYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgY2FsbGVkIHdoZW4gYGxydV9nZW5fZW5hYmxlZCgpYCBpcyAqZmFsc2UqLiBBbmQgdGhlbiwgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGxydV9nZW5fZW5hYmxlZCgpYCBpcyB0cnVlLiBJdCBzZWVtcyBsaWtlIGJvdGggYXJlIGJlaW5nIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2gsIHdoaWNoIHN1Z2dlc3RzIGFuIGludGVycGxheSBiZXR3ZWVuIHRoZSB0d28gZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbSBiZXR0ZXIuXG5cbkknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9mb2xpby5jYCBhcm91bmQgbGluZSAxMTIwLiBUaGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgbG9jYXRpb24gZm9yIHRoZSByZWxldmFudCBjb2RlLCBiYXNlZCBvbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZXNlIGNhbGxzIHRoZXJlLiBIb3BlZnVsbHkgdGhpcyB3aWxsIG1ha2UgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyBjbGVhcmVyLCBhbmQgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2Vuc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MzozNy4xMTE4ODE5MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZm9saW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTE1OlxcdFxcdH1cXG4xMTE2OlxcdFxcdGZiYXRjaC1cXHUwMDNlbnIgPSBqO1xcbjExMTc6XFx0fVxcbjExMTg6XFx0XFxuMTExOTpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuMTEyMDpcXHRzdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4xMTIxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXFxuMTEyMjpcXHRcXHRcXHRcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IG5pZClcXG4xMTIzOlxcdHtcXG4xMTI0OlxcdFxcdGludCB6aWQ7XFxuMTEyNTpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4xMTI2OlxcdFxcbjExMjc6XFx0XFx0aWYgKGxydSAhPSBMUlVfVU5FVklDVEFCTEUpXFxuMTEyODpcXHRcXHRcXHRsaXN0X3NwbGljZV90YWlsX2luaXQoXFx1MDAyNmNoaWxkX2xydXZlYy1cXHUwMDNlbGlzdHNbbHJ1XSwgXFx1MDAyNnBhcmVudF9scnV2ZWMtXFx1MDAzZWxpc3RzW2xydV0pO1xcbjExMjk6XFx0XFxuMTEzMDpcXHRcXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSkge1xcbjExMzE6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcXG4xMTMyOlxcdFxcbjExMzM6XFx0XFx0XFx0aWYgKCFzaXplKVxcbjExMzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdFxcdC8qXFxuMTEzNzpcXHRcXHRcXHQgKiBUaGUgZm9saW9zIGFyZSBhY2NvdW50ZWQgdG8gdGhlIHBhcmVudCBmcm9tIG5vdyBvbiwgc28gdGhlXFxuMTEzODpcXHRcXHRcXHQgKiBzaXplIGhhcyB0byBiZSBtb3ZlZCwgbm90IGp1c3QgY29waWVkLiBMZWF2aW5nIGl0IGJlaGluZFxcbjExMzk6XFx0XFx0XFx0ICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy5cXG4xMTQwOlxcdFxcdFxcdCAqL1xcbjExNDE6XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbjExNDI6XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xcbjExNDM6XFx0XFx0fVxcbjExNDQ6XFx0fVxcbjExNDU6XFx0XFxuMTE0NjpcXHR2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuMTE0NzpcXHR7XFxuMTE0ODpcXHRcXHRlbnVtIGxydV9saXN0IGxydTtcXG4xMTQ5OlxcdFxcdHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgKnBhcmVudF9scnV2ZWM7XFxuMTE1MDpcXHRcXG4xMTUxOlxcdFxcdGNoaWxkX2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEobmlkKSk7XFxuMTE1MjpcXHRcXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XFxuMTE1MzpcXHRcXG4xMTU0OlxcdFxcdGZvcl9lYWNoX2xydShscnUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAzOjQzOjM3LjExMTk3NDgyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY3ODYzODAxOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTFJVIFJlcGFyZW50aW5nIGluIE1lbWNnKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgTFJVIHJlcGFyZW50aW5nIHdvcmtzIHdpdGhpbiB0aGUgbWVtY2cgZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGRpcmVjdGx5IHRpZWQgdG8gYENPTkZJR19NRU1DR2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2Agc2VlbXMgdG8gYmUgZ2F0ZWQgYnkgYENPTkZJR19MUlVfR0VOYCwgKmFuZCogSSBwcmVzdW1lLCBgQ09ORklHX01FTUNHYCBhcyB3ZWxsLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gR2l2ZW4gdGhhdCBjb250ZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgY3JpdGljYWwgbG9naWMgcmVzaWRlcy4gSSdsbCBoZWFkIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNDYyMC4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaXNzZWN0aW5nIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODowNC45NzU3ODAwOThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2MTU6XFx0XFx0XFx0XFx0X191cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1ICsgcGFyZW50X2xydV9hY3RpdmUsIHpvbmUsIG5yX3BhZ2VzKTtcXG40NjE2OlxcdFxcdFxcdH1cXG40NjE3OlxcdFxcdH1cXG40NjE4OlxcdH1cXG40NjE5OlxcdFxcbjQ2MjA6XFx0dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG40NjIxOlxcdHtcXG40NjIyOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgKnBhcmVudF9scnV2ZWM7XFxuNDYyMzpcXHRcXHRpbnQgdHlwZSwgemlkO1xcbjQ2MjQ6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuNDYyNTpcXHRcXHRlbnVtIGxydV9saXN0IGxydTtcXG40NjI2OlxcdFxcbjQ2Mjc6XFx0XFx0Y2hpbGRfbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG40NjI4OlxcdFxcdHBhcmVudF9scnV2ZWMgPSBnZXRfbHJ1dmVjKHBhcmVudCwgbmlkKTtcXG40NjI5OlxcdFxcbjQ2MzA6XFx0XFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpXFxuNDYzMTpcXHRcXHRcXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxcbjQ2MzI6XFx0XFx0XFx0XFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcXG40NjMzOlxcdFxcbjQ2MzQ6XFx0XFx0Zm9yX2VhY2hfbHJ1KGxydSkge1xcbjQ2MzU6XFx0XFx0XFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcXG40NjM2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCk7XFxuNDYzNzpcXHRcXG40NjM4OlxcdFxcdFxcdFxcdGlmICghc2l6ZSlcXG40NjM5OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ2NDA6XFx0XFxuNDY0MTpcXHRcXHRcXHRcXHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xcbjQ2NDI6XFx0XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbjQ2NDM6XFx0XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xcbjQ2NDQ6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODowNC45NzYyMjQwOThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyMDU0NTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIENvZGUgZm9yIE1lbWNnIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gRmlyc3QsIGxldCdzIHZlcmlmeSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZXZlbiBjb21waWxlZCBpbiB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQuIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBpdCBkb2VzLCBhbmQgaXQncyB0YWtpbmcgYSBgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYCBhcyBpdHMgaW5wdXQgd2hpY2ggc2VlbXMgbG9naWNhbC4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBjb25maXJtIHRoYXQgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBndWFyZCBpcyBwcmVzZW50IGFyb3VuZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiwganVzdCB0byBlbnN1cmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMganVzdCBiYXNpYyBkaWxpZ2VuY2UsIGJ1dCBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgdW5kZXIgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MDkuNTk2NzcyMDgyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ5OTg3MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmZGVmIENPTkZJR19NRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yMDM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDktXFxubW0vdm1zY2FuLmM6MjEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMTEtXFxuLS1cXG5tbS92bXNjYW4uYz0yNzQ0PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3NDctXFxubW0vdm1zY2FuLmM6Mjc0ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjc0OS1cXHRpZiAobWVtY2cpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5MDI9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MDgtXFxubW0vdm1zY2FuLmM6MjkwOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkxMC1cXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz0yOTQyPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTQ4LVxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZWxydV9nZW4ubGlzdCkpO1xcbm1tL3Ztc2Nhbi5jOjI5NDk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5NTAtXFx0Vk1fV0FSTl9PTl9PTkNFKG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5Njk9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzctXFxubW0vdm1zY2FuLmM6Mjk3ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjk3OS1cXHRtZW1jZyA9IG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnO1xcbi0tXFxubW0vdm1zY2FuLmMtMzAwMS1cXG5tbS92bXNjYW4uYzozMDAyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDAzLVxcdG1lbV9jZ3JvdXBfcHV0KG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDctXFxubW0vdm1zY2FuLmM6MzAwODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzAwOS12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzODI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00NDI3LVxcbm1tL3Ztc2Nhbi5jOjQ0Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTQ0MjktXFxuLS1cXG5tbS92bXNjYW4uYz01NjA1PXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NjE4LVxcbm1tL3Ztc2Nhbi5jOjU2MTk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTU2MjAtXFx0XFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9NTg3MT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg5MC1cXG5tbS92bXNjYW4uYzo1ODkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01ODkyLVxcbi0tXFxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MTEtXFxubW0vdm1zY2FuLmM6NjgxMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNjgxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MTAuOTQ2NzYzODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDg1MDMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIExSVSBHZW5lcmF0aW9uIGFuZCBNZW1DZyBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIGF0IGxpbmUgNDQyOC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBpdCAqYWxzbyogcmVsaWVzIG9uIGBDT05GSUdfTFJVX0dFTmAuIEkgbmVlZCB0byBjb25maXJtIGlmIGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gdGhlIExSVSBHZW5lcmF0aW9uIHN5c3RlbSwgb3IgaWYgaXQncyBjb21wbGV0ZWx5IGluZGVwZW5kZW50IHdpdGhpbiB0aGUgTWVtQ0cgY29udGV4dC4gTGV0J3MgZ28gYWhlYWQgYW5kIGNyb3NzLXJlZmVyZW5jZSBgbW0vdm1zY2FuLmNgIHRvIHNlYXJjaCBmb3IgYENPTkZJR19MUlVfR0VOYCBhbmQgY2xhcmlmeSB0aGF0IGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDM5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MTUuMTExNjE3MDY0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzNDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmRlZiBDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMi1cXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODM0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yNjkxLVxcbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtMjY5My1cXG5tbS92bXNjYW4uYz0yNjk0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYy0yNjk2LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4OTktXFxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjkwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MTUuMTU2NTU3MTY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTU0NDQ1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBhbmQgTWVtY2cgUmVwYXJlbnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwgZm9yIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggTFJVIGdlbmVyYXRpb24gaXMgdml0YWwgZm9yIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudC4gTm93LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoZXJlIGlzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGRlZmluZWQ/IFJpZ2h0LCBpdCdzIGFjdHVhbGx5IGluIGBtbS9mb2xpby5jYC4gU28sIGlmIGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGluIGBtbS9mb2xpby5jYCwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB1c2VzIGBDT05GSUdfTUVNQ0dgLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIHNlZSBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gaW1wbGVtZW50YXRpb24uIFRoaXMgbWlnaHQgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gd2hldGhlciBhbmQgaG93IGBDT05GSUdfTFJVX0dFTmAgaXMgdXNlZCBpbiB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MTkuMTcyMDAzNjk1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyMjQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmRlZiBDT05GSUdfTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZm9saW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9mb2xpby5jPTExMDc9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbi0tXFxubW0vZm9saW8uYy0xMTE4LVxcbm1tL2ZvbGlvLmM6MTExOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZm9saW8uYy0xMTIwLXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODoxOS4yMTgwMjgzNTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxMzk5MTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBQYXRocyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX01FTUNHYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50IGhlcmUuIE5vIHF1ZXN0aW9uIGFib3V0IGl0LiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYENPTkZJR19MUlVfR0VOYCBpcyBhbHNvIG5lY2Vzc2FyeS4gVGhlIHBhdGNoIHRvdWNoZXMgYm90aCBgbHJ1dmVjX3JlcGFyZW50X2xydWAgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCwgd2hpY2ggYXJlIHVzZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYGxydV9nZW5fZW5hYmxlZCgpYCBpcyB0cnVlIG9yIGZhbHNlLiBTaW5jZSB3ZSdyZSBtb2RpZnlpbmcgYm90aCBmdW5jdGlvbnMsIGZ1enppbmcgd2l0aCBqdXN0IGBDT05GSUdfTUVNQ0dgIHNob3VsZCBiZSBlbm91Z2ggdG8gZXhlcmNpc2UgdGhlIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBwYXJ0LiBCdXQsIHRvIGhpdCB0aGUgb3RoZXIgcGF0aCwgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLCB3ZSBuZWVkIGBDT05GSUdfTFJVX0dFTmAgZW5hYmxlZCBhcyB3ZWxsLiBCZXN0IHRvIGluY2x1ZGUgYm90aCBmb3IgZnVsbCBjb3ZlcmFnZS5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBldmVuIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UuIEFoLCB5ZXMsIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIG1lbW9yeSBjZ3JvdXBzIOKAkyB0aGF0J3MgdGhlIGtleS4gVGhhdCdzIGEgY2xhc3NpYyBzeXprYWxsZXIgdGFyZ2V0LCBzbyB0aGF0J3MgZ29vZCBuZXdzLlxuXG5UaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuXG5cbldhaXQsIGlzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGV4cG9ydGVkIG9yIGp1c3Qgbm90IHN0YXRpYz8gSXQncyBub3Qgc3RhdGljLiBPa2F5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gT2gsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBpcyBzdGF0aWMsIGJ1dCB0aGF0J3MganVzdCBhIGNhbGxlci4gU28sIEknbGwganVzdCB1c2UgYGxydV9yZXBhcmVudF9tZW1jZ2AgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBhcyB0aGUgdGFyZ2V0cy5cblxuRmluYWxseSwgSSBuZWVkIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YC4gSnVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODoyNS44MzIwMjI4NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMDM3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1dmVjX3JlcGFyZW50X2xydVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9mb2xpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MTEwNz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9mb2xpby5jLTExMTktI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2ZvbGlvLmM6MTEyMDpzdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG5tbS9mb2xpby5jLTExMjEtXFx0XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL2ZvbGlvLmM9MTE0Nj12b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS9mb2xpby5jLTExNTQtXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG5tbS9mb2xpby5jOjExNTU6XFx0XFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcXG5tbS9mb2xpby5jLTExNTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODoyNS44NzgyMzYwNTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNTgxODQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBscnVfcmVwYXJlbnRfbWVtY2dgIGFuZCBgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnYCoqXG5cblJpZ2h0LCBzbyBgbHJ1X3JlcGFyZW50X21lbWNnYCBzZWVtcyB0byBiZSB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIGl0LiBUaGF0J3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncy4gTm93LCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgYWJvdXQgdGhhdCwgc28gbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgaXMgaW5kZWVkIHRoZSAqc29sZSogY2FsbGVyIG9mIGBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBObyBzZW5zZSBpbiBtYWtpbmcgYXNzdW1wdGlvbnMsIGV2ZW4gaWYgdGhlIGNvZGUgaW5pdGlhbGx5IHN1Z2dlc3RzIHRoYXQuIE5lZWQgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBlZGdlIGNhc2VzIGx1cmtpbmcgYXJvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA1OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjI5LjkwNDA1NzIyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NDc2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19scnVfZ2VuX3JlcGFyZW50X21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NTg4LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYy00NTkwLVxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbi0tXFxubW0vdm1zY2FuLmM9NDYyMD12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYzMS1cXHRcXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxcbm1tL3Ztc2Nhbi5jOjQ2MzI6XFx0XFx0XFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcXG5tbS92bXNjYW4uYy00NjMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODoyOS45NDk3MTMxMDdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5NDc3Mjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBNZW1vcnkgQ29udHJvbCBHcm91cCBSZXBhcmVudGluZyoqXG5cbk9rYXksIHNvIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpcyB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIHRoZSByZXBhcmVudGluZyBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNpbmcgbXkgYW5hbHlzaXMuIEdpdmVuIHRoYXQsIG15IHByaW1hcnkgYXJlYXMgb2YgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmUgY2VudGVyZWQgYXJvdW5kOlxuXG4qICAgYGxydV9yZXBhcmVudF9tZW1jZ2AgKHRoZSB0YXJnZXQgb2YgdGhlIGNhbGwpXG4qICAgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgICh0aGUgY2FsbGVyLCBvYnZpb3VzbHkpXG5cbk5vdywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgd2lsbCBiZSBpbXBhY3RpbmcgdGhpcyBjb2RlIHBhdGguIFNwZWNpZmljYWxseSwgYE1FTUNHYCBhbmQgYExSVV9HRU5gLiBCdXQgd2FpdC4uLiBpcyBgTFJVX0dFTmAgdGhlICphY3R1YWwqIGNvbmZpZyBzeW1ib2w/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIHZlcmlmeSB0aGUgZXhhY3QgY29uZmlnIG5hbWVzIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODozNy4yNDQ0ODg5MDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTM5NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkzPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwNDpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNS1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEyLVxcbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDE0LVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE4LVxcbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyMC1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjctXFxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjM3LjI5MTAzNjU5MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk4MTc2OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBMUlVfR0VOYCBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgYExSVV9HRU5gIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGNvbmZpZyBuYW1lOyBJJ20gc2F0aXNmaWVkIHdpdGggdGhhdC5cblxuTm93LCBsZXQncyB1bnBhY2sgdGhlIGZ1enppbmcgcmF0aW9uYWxlLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGJlaGF2ZXMgd2l0aCByZWdhcmQgdG8gTFJVIHNpemUgYWNjb3VudGluZyB3aGVuIGEgY2hpbGQgbWVtY2cgZGllcyBhbmQgaXMgcmVwYXJlbnRlZC4gSW5zdGVhZCBvZiBtZXJlbHkgY29weWluZyB0aGUgTFJVIHNpemUsIGl0IG5vdyBjb3JyZWN0bHkgbW92ZXMgaXQgdG8gdGhlIHBhcmVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW504oCUc3BlY2lmaWNhbGx5LCBtZW1jZy4gV2Uga25vdyB0aGlzIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdGhlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggbWFrZXMgaXQgYSBjcml0aWNhbCBhbmQgcmVhY2hhYmxlIHBhdGggZm9yIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHVuY292ZXJpbmcgc3VidGxlIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLCBlc3BlY2lhbGx5IHdpdGggZWRnZSBjYXNlcyBpbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuQmVmb3JlIEkgZ28gdG9vIGZhciwgSSBzaG91bGQganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgbmVlZGVkLCBhbnkgcG90ZW50aWFsIGNvbmZpZyBkZXBlbmRlbmNpZXMuLi4gTGV0IG1lIHNlZS4uLiBgTUVNQ0dgIGRvZXNuJ3Qgc2VlbSB0byBkZXBlbmQgb24gYW55dGhpbmcgdW51c3VhbCwgc28gd2Ugc2hvdWxkIGJlIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjQxLjk4OTIxNTc0N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NzU0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODo0Mi4wMzM5OTY0NzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4MDk0ODg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBNRU1DRydzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBNRU1DR2AgcmVsaWVzIG9uIGBDR1JPVVBTYC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgYXNzdW1wdGlvbiwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gaXQuIEJlc3QgcGxhY2UgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcyBsaWtlIHRoZXNlIGlzIHVzdWFsbHkgYGluaXQvS2NvbmZpZ2AuIExldCdzIG5hdmlnYXRlIHRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgYGNvbmZpZyBNRU1DR2AgcmV2ZWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBhdCBhIGNvbmZpZ3VyYXRpb24gbGV2ZWwuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHNob3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6NDYuNzE0OTQ3ODg2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MDpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwODE6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDg0OlxcdFxcbjEwODU6XFx0Y29uZmlnIE1FTUNHXFxuMTA4NjpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDg3OlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDg4OlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4OTpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA5MDpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDkxOlxcdFxcdGhlbHBcXG4xMDkyOlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjQ2LjcxNTA2ODAxN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODIxNTU0NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIG5hdmlnYXRpbmcgdGhpcyBjb25maWd1cmF0aW9uIG1hemUgYW5kIGl0IGxvb2tzIGxpa2UgYE1FTUNHYCBpcyBuZXN0ZWQgd2l0aGluIGBtZW51Y29uZmlnIENHUk9VUFNgLCByaWdodD8gVGhhdCdzIGZhaXJseSBzdGFuZGFyZCwgc28gaXQncyBhIHNhZmUgYmV0IHRoYXQgYENHUk9VUFNgIGlzIGEgcHJlcmVxdWlzaXRlIGhlcmUuIE5vdywgc2luY2UgSSdtIGhlcmUsIG1pZ2h0IGFzIHdlbGwgaW5jbHVkZSBib3RoIGBNRU1DR2AgYW5kIGBMUlVfR0VOYC4gIFRoZXkgbGlrZWx5IHBsYXkgbmljZWx5IHRvZ2V0aGVyIGluIHRoaXMgY29udGV4dC4gQW5kIEkgYmVsaWV2ZSB0aGF0IGNvdmVycyB0aGUgcHJlcmVxdWlzaXRlcy5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGFwcGx5IHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxMiwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjUxLjUzNjYyNTAzOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDMxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9yZXBhcmVudF9tZW1jZ1wiLFxuICAgIFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X3JlcGFyZW50X21lbWNnXCIsXG4gICAgXCJscnVfZ2VuX3JlcGFyZW50X21lbWNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBvZmZsaW5pbmcgbG9naWMgdG8gcHJvcGVybHkgbW92ZSBMUlUgc2l6ZSBhY2NvdW50aW5nIGZyb20gYSBkeWluZyBjaGlsZCBtZW1jZyB0byBpdHMgcGFyZW50LCBpbnN0ZWFkIG9mIGp1c3QgY29weWluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgY2hpbGQgbWVtY2cgZnJvbSByZXRhaW5pbmcgbm9uLXplcm8gTFJVIHNpemVzIGFmdGVyIHJlcGFyZW50aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtY2cpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggaXMgYSByZWFjaGFibGUgYW5kIGltcG9ydGFudCBwYXRoIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjUxLjYwOTA2MjQ2OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MTE0OTA4MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6NTEuNjA5NDk4OTU4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4ODExNDQ2NzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWVtb3J5IGNncm91cCBMUlUgc2l6ZSByZXBhcmVudGluZyBieSBzdWJ0cmFjdGluZyB0aGUgbW92ZWQgc2l6ZSBmcm9tIHRoZSBjaGlsZCBscnV2ZWMuIFRoaXMgcHJldmVudHMgdGhlIGR5aW5nIGNoaWxkIGZyb20gZGVzY3JpYmluZyBmb2xpb3MgaXQgbm8gbG9uZ2VyIG93bnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIGFjY291bnRpbmcgdXBkYXRlcywgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDZlZDQwMjhhYTFjODY2YWEwN2RmNzRjZjZjNGIyY2RkOGQ5NDBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDM6Mzk6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbisrKyBiL21tL2ZvbGlvLmNcbkBAIC0xMTMwLDcgKzExMzAsMTYgQEAgc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4gXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuIFxuK1x0XHRpZiAoIXNpemUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBmb2xpb3MgYXJlIGFjY291bnRlZCB0byB0aGUgcGFyZW50IGZyb20gbm93IG9uLCBzbyB0aGVcbitcdFx0ICogc2l6ZSBoYXMgdG8gYmUgbW92ZWQsIG5vdCBqdXN0IGNvcGllZC4gTGVhdmluZyBpdCBiZWhpbmRcbitcdFx0ICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy5cbitcdFx0ICovXG4gXHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbitcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmZTdmMGM1MmExOGMwLi41NjFlZWVjNTYyOGNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDYzNSw3ICs0NjM1LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gXHRcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcbiBcbitcdFx0XHRpZiAoIXNpemUpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xuIFx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbitcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG4gXHRcdH1cbiBcdH1cbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODo1MS42MDk0OTk3NzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg4MTE0NDQ3NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIExSVSBTaXplIEFjY291bnRpbmcgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIGluIG1lbW9yeSBjZ3JvdXAgTFJVIHNpemUgYWNjb3VudGluZyBkdXJpbmcgcmVwYXJlbnRpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gYGxydXZlY19yZXBhcmVudF9scnVgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdGhlIGFkZGl0aW9uIG9mIGBpZiAoIXNpemUpIGNvbnRpbnVlO2AgYW5kIHRoZW4gZGVjcmVtZW50aW5nIHRoZSBjaGlsZCBscnV2ZWMgc2l6ZSB1c2luZyBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLiBUaGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY29ycmVjdGlvbiB0byBob3cgTFJVIHNpemVzIGFyZSB0cmFja2VkIHdoZW4gbWVtb3J5IGlzIGJlaW5nIG1vdmVkIGJldHdlZW4gY2dyb3Vwcy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGZpeCBpcyB0YXJnZXRlZCBhdCBwb3RlbnRpYWwgdW5kZXJmbG93cyBvciBpbmZpbml0ZSBsb29wcyB0aGF0IGNvdWxkIHRyaWdnZXIgaW5jb3JyZWN0IHJlY2xhaW0gYmVoYXZpb3IuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCB0aGUgYnVnIGxpZXMgaW4gcG90ZW50aWFsbHkgaW5jb3JyZWN0IExSVSBzaXplcy4gVGhhdCByaW5ncyB0cnVlLiBUaGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgY291bGQgYmUgY2F1Z2h0IHdpdGggb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiBvciB0aGUgc3RhbmRhcmQgY2hlY2tzLCBsaWtlIHBhZ2UgYWxsb2NhdG9yIGNoZWNrcywgb3IgVk1fQlVHX09OLCBidXQgS01TQU4sIHNwZWNpZmljYWxseSwgaXNuJ3QgZ29pbmcgdG8gYmUgdHJpcHBlZCB1cCBoZXJlLiBUaGVyZSdzIG5vdGhpbmcgaW4gdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mbyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUncyBubyBpbW1lZGlhdGUgcmlzayBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgZ2l2ZW4gbXkgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEl0J3MgYSBjbGVhbiBmaXggd2l0aCBubyBvYnZpb3VzIEtNU0FOIGNvbmNlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgxLCJPdXRwdXRUb2tlbnMiOjExNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjExOjU5LjcyMzk1MDc3N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWVtb3J5IGNncm91cCBMUlUgc2l6ZSByZXBhcmVudGluZyBieSBzdWJ0cmFjdGluZyB0aGUgbW92ZWQgc2l6ZSBmcm9tIHRoZSBjaGlsZCBscnV2ZWMuIFRoaXMgcHJldmVudHMgdGhlIGR5aW5nIGNoaWxkIGZyb20gZGVzY3JpYmluZyBmb2xpb3MgaXQgbm8gbG9uZ2VyIG93bnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIGFjY291bnRpbmcgdXBkYXRlcywgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIHJlcGFyZW50aW5nIGJ5IHN1YnRyYWN0aW5nIHRoZSBtb3ZlZCBzaXplIGZyb20gdGhlIGNoaWxkIGxydXZlYy4gVGhpcyBwcmV2ZW50cyB0aGUgZHlpbmcgY2hpbGQgZnJvbSBkZXNjcmliaW5nIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgYWNjb3VudGluZyB1cGRhdGVzLCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx8mww[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 02:58:49 +0000 UTC FinishedAt: 2026-08-22 04:12:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "903c1cf6dff9964e71eda98a39e2e5d442050472", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "903c1cf6dff9964e71eda98a39e2e5d442050472", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN" ], "series_id": "fdfbab82-b839-4345-ba4a-a144db0658fc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_reparent_memcg", "lru_gen_reparent_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDssCiAgICAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIHJlcGFyZW50aW5nIGJ5IHN1YnRyYWN0aW5nIHRoZSBtb3ZlZCBzaXplIGZyb20gdGhlIGNoaWxkIGxydXZlYy4gVGhpcyBwcmV2ZW50cyB0aGUgZHlpbmcgY2hpbGQgZnJvbSBkZXNjcmliaW5nIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgYWNjb3VudGluZyB1cGRhdGVzLCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY2dyb3VwIG9mZmxpbmluZyBsb2dpYyB0byBwcm9wZXJseSBtb3ZlIExSVSBzaXplIGFjY291bnRpbmcgZnJvbSBhIGR5aW5nIGNoaWxkIG1lbWNnIHRvIGl0cyBwYXJlbnQsIGluc3RlYWQgb2YganVzdCBjb3B5aW5nIGl0LiBUaGlzIHByZXZlbnRzIHRoZSBjaGlsZCBtZW1jZyBmcm9tIHJldGFpbmluZyBub24temVybyBMUlUgc2l6ZXMgYWZ0ZXIgcmVwYXJlbnRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtZW1jZykgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIG1lbW9yeSBjZ3JvdXBzLCB3aGljaCBpcyBhIHJlYWNoYWJsZSBhbmQgaW1wb3J0YW50IHBhdGggdG8gZnV6ei4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZkNmVkNDAyOGFhMWM4NjZhYTA3ZGY3NGNmNmM0YjJjZGQ4ZDk0MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwMzozOTozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvLmNcbkBAIC0xMTMwLDcgJiM0MzsxMTMwLDE2IEBAIHN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxuIFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcbiBcbiYjNDM7XHRcdGlmICghc2l6ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBmb2xpb3MgYXJlIGFjY291bnRlZCB0byB0aGUgcGFyZW50IGZyb20gbm93IG9uLCBzbyB0aGVcbiYjNDM7XHRcdCAqIHNpemUgaGFzIHRvIGJlIG1vdmVkLCBub3QganVzdCBjb3BpZWQuIExlYXZpbmcgaXQgYmVoaW5kXG4mIzQzO1x0XHQgKiBtYWtlcyB0aGUgZHlpbmcgY2hpbGQgZGVzY3JpYmUgZm9saW9zIGl0IG5vIGxvbmdlciBvd25zLlxuJiM0MztcdFx0ICovXG4gXHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbiYjNDM7XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmU3ZjBjNTJhMThjMC4uNTYxZWVlYzU2MjhjYiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTQ2MzUsNyAmIzQzOzQ2MzUsMTIgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcbiBcdFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuIFxuJiM0MztcdFx0XHRpZiAoIXNpemUpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xuIFx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbiYjNDM7XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xuIFx0XHR9XG4gXHR9XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjI5bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmQ2ZWQ0MDI4YWExYzg2NmFhMDdkZjc0Y2Y2YzRiMmNkZDhkOTQwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDAzOjM5OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0xMTMwLDcgJiM0MzsxMTMwLDE2IEBAIHN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLAogCWZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCk7CiAKJiM0MzsJCWlmICghc2l6ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZm9saW9zIGFyZSBhY2NvdW50ZWQgdG8gdGhlIHBhcmVudCBmcm9tIG5vdyBvbiwgc28gdGhlCiYjNDM7CQkgKiBzaXplIGhhcyB0byBiZSBtb3ZlZCwgbm90IGp1c3QgY29waWVkLiBMZWF2aW5nIGl0IGJlaGluZAomIzQzOwkJICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4KJiM0MzsJCSAqLwogCQltZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7CiYjNDM7CQltZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGZlN2YwYzUyYTE4YzAuLjU2MWVlZWM1NjI4Y2IgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00NjM1LDcgJiM0Mzs0NjM1LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsCiAJCWZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7CiAJCQl1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpOwogCiYjNDM7CQkJaWYgKCFzaXplKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQkvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqLwogCQkJbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpOwomIzQzOwkJCW1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTsKIAkJfQogCX0KIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0d2Vha2luZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIG1lbW9yeSBjZ3JvdXBzLCBvciBtZW1jZ3MuIEl0JiMzOTtzIHRvdWNoaW5nIGBtbS9mb2xpby5jYCBhbmQgYG1tL3Ztc2Nhbi5jYCwgYW5kIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSB1cGRhdGVzIHRvIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBhbmQgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBUaGV5JiMzOTtyZSBhZGRpbmcgYSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGNhbGwsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBtb3JlIHByZWNpc2UgYXBwcm9hY2ggdG8gYWNjb3VudGluZyBkdXJpbmcgdGhlIExSVSByZXBhcmVudGluZyBwcm9jZXNzIGluc3RlYWQgb2YgYSBzaW1wbGUgY29weS4gVGhpcyBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2UsIHBlcmhhcHMgY29ycmVjdGluZyBhbiBhY2NvdW50aW5nIGlzc3VlIG9yIGltcHJvdmluZyB0aGUgYWNjdXJhY3kgb2YgbWVtb3J5IHVzYWdlIHRyYWNraW5nLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbmQgd2hlcmUgdGhleSYjMzk7cmUgY2FsbGVkLiBJIHNlZSBgbHJ1dmVjX3JlcGFyZW50X2xydWAgaXMgaW4gYG1tL2ZvbGlvLmNgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgaXMgaW4gYG1tL3Ztc2Nhbi5jYC4gQWxyaWdodCwgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnRleHQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgbHJ1dmVjX3JlcGFyZW50X2xydWAgbWlnaHQgYmUgY2FsbGVkIGZyb20gYG1lbV9jZ3JvdXBfcmVwYXJlbnRfbHJ1dmVjYCBvciBwb3NzaWJseSBldmVuIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYC4gVGhhdCBzZWVtcyBsb2dpY2FsLCBidXQgbGV0JiMzOTtzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGUgYmFzZSBmb3IgdGhlc2UgZnVuY3Rpb24gbmFtZXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciB1c2FnZSBhbmQgaG93IHRoaXMgbmV3IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgY2FsbCBmaXRzIGludG8gdGhlIGxhcmdlciBtZW1jZyBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1dmVjX3JlcGFyZW50X2xydSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTExMDc9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL2ZvbGlvLmMtMTExOS0jaWZkZWYgQ09ORklHX01FTUNHXG5tbS9mb2xpby5jOjExMjA6c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG5tbS9mb2xpby5jLTExMjEtXHRcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxuLS1cbm1tL2ZvbGlvLmM9MTE0Nj12b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vZm9saW8uYy0xMTU0LVx0Zm9yX2VhY2hfbHJ1KGxydSlcbm1tL2ZvbGlvLmM6MTE1NTpcdFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcbm1tL2ZvbGlvLmMtMTE1Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYGxydV9yZXBhcmVudF9tZW1jZ2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyB0aGUgZnVuY3Rpb24gbWFraW5nIHRoaXMgY2FsbC4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gTm93LCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nICphcm91bmQqIHRoYXQgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYW5kIHdoYXQgaXQgY2FsbHMuCgpUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gaW5pdGlhdGUgYSBzZWFyY2ggZm9yIGJvdGggYGxydV9yZXBhcmVudF9tZW1jZ2AgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYC4gVGhpcyBzZWFyY2ggd2lsbCByZXZlYWwgdGhlIGJyb2FkZXIgY2FsbCBncmFwaCBhbmQgaGlnaGxpZ2h0IGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBCeSBleHBsb3JpbmcgdGhlc2UgZnVuY3Rpb25zLCBJIGNhbiByZWNvbnN0cnVjdCB0aGUgY29udHJvbCBmbG93IGFuZCBlc3RhYmxpc2ggdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBUaGUgYWltIGlzIHRvIHRob3JvdWdobHkgYW5hbHl6ZSB0aGUgcm9sZSBhbmQgaW1wYWN0IG9mIGBscnVfcmVwYXJlbnRfbWVtY2dgIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD00Njk9c3RhdGljIGlubGluZSBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc2LSNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ3Nzp2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc4LSNlbmRpZlxuLS1cbm1tL2ZvbGlvLmM9MTEyMD1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9mb2xpby5jLTExNDUtXG5tbS9mb2xpby5jOjExNDY6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vZm9saW8uYy0xMTQ3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI5Ny1cdFx0fSBlbHNlIHtcbm1tL21lbWNvbnRyb2wuYzoyOTg6XHRcdFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG5tbS9tZW1jb250cm9sLmMtMjk5LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqRGVjb25zdHJ1Y3RpbmcgYGxydV9yZXBhcmVudF9tZW1jZ2AqKgoKT2theSwgc28gYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgYmVpbmcgY2FsbGVkIGZyb20gZWl0aGVyIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIG9yIGEgcmVsYXRlZCBmdW5jdGlvbiwgbGlrZWx5IHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhlIHRyYWNlIHBvaW50cyBtZSBkaXJlY3RseSB0byBgbW0vbWVtY29udHJvbC5jOjI5ODogbHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7YC4gR29vZCwgdGhhdCYjMzk7cyBwcmVjaXNlLiBOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2AgYXJvdW5kIGxpbmUgMjk4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBjb250ZXh0IGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZ3Jhc3Agd2hhdCYjMzk7cyBoYXBwZW5pbmcgZHVyaW5nIHRoaXMgcmVwYXJlbnRpbmcgb3BlcmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiAyODE6XHRcdGludCBuaWQ7XG4gMjgyOlx0XG4gMjgzOlx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuIDI4NDpcdHJldHJ5OlxuIDI4NTpcdFx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXG4gMjg2Olx0XHRcdFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xuIDI4NzpcdFxuIDI4ODpcdFx0XHRyZXBhcmVudF9sb2NrcyhtZW1jZywgcGFyZW50LCBuaWQpO1xuIDI4OTpcdFxuIDI5MDpcdFx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbiAyOTE6XHRcdFx0XHRpZiAoIXJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2cocGFyZW50LCBuaWQpKSB7XG4gMjkyOlx0XHRcdFx0XHRyZXBhcmVudF91bmxvY2tzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMjkzOlx0XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiAyOTQ6XHRcdFx0XHRcdGdvdG8gcmV0cnk7XG4gMjk1Olx0XHRcdFx0fVxuIDI5NjpcdFx0XHRcdGxydV9nZW5fcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtcbiAyOTc6XHRcdFx0fSBlbHNlIHtcbiAyOTg6XHRcdFx0XHRscnVfcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtcbiAyOTk6XHRcdFx0fVxuIDMwMDpcdFxuIDMwMTpcdFx0XHRvYmpjZyA9IF9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMzAyOlx0XG4gMzAzOlx0XHRcdHJlcGFyZW50X3VubG9ja3MobWVtY2csIHBhcmVudCwgbmlkKTtcbiAzMDQ6XHRcbiAzMDU6XHRcdFx0cGVyY3B1X3JlZl9raWxsKFx1MDAyNm9iamNnLVx1MDAzZXJlZmNudCk7XG4gMzA2Olx0XHR9XG4gMzA3Olx0XG4gMzA4Olx0XHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbiAzMDk6XHR9XG4gMzEwOlx0XG4gMzExOlx0LypcbiAzMTI6XHQgKiBBIGxvdCBvZiB0aGUgY2FsbHMgdG8gdGhlIGNhY2hlIGFsbG9jYXRpb24gZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZVxuIDMxMzpcdCAqIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBTaW5jZSB0aGUgY2FsbHMgdG8gbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soKSBhcmVcbiAzMTQ6XHQgKiBjb25kaXRpb25hbCB0byB0aGlzIHN0YXRpYyBicmFuY2gsIHdlJiMzOTtsbCBoYXZlIHRvIGFsbG93IG1vZHVsZXMgdGhhdCBkb2VzXG4gMzE1Olx0ICoga21lbV9jYWNoZV9hbGxvYyBhbmQgdGhlIHN1Y2ggdG8gc2VlIHRoaXMgc3ltYm9sIGFzIHdlbGxcbiAzMTY6XHQgKi9cbiAzMTc6XHRERUZJTkVfU1RBVElDX0tFWV9GQUxTRShtZW1jZ19rbWVtX29ubGluZV9rZXkpO1xuIDMxODpcdEVYUE9SVF9TWU1CT0wobWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcbiAzMTk6XHRcbiAzMjA6XHRERUZJTkVfU1RBVElDX0tFWV9GQUxTRShtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xuIDMyMTpcdEVYUE9SVF9TWU1CT0wobWVtY2dfYnBmX2VuYWJsZWRfa2V5KTtcbiAzMjI6XHRcbiAzMjM6XHQvKipcbiAzMjQ6XHQgKiBnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyAtIGFjcXVpcmUgYSBjc3Mgb2YgdGhlIG1lbWNnIGFzc29jaWF0ZWQgd2l0aCBhIGZvbGlvXG4gMzI1Olx0ICogQGZvbGlvOiBmb2xpbyBvZiBpbnRlcmVzdFxuIDMyNjpcdCAqXG4gMzI3Olx0ICogSWYgbWVtY2cgaXMgYm91bmQgdG8gdGhlIGRlZmF1bHQgaGllcmFyY2h5LCBjc3Mgb2YgdGhlIG1lbWNnIGFzc29jaWF0ZWRcbiAzMjg6XHQgKiB3aXRoIEBmb2xpbyBpcyByZXR1cm5lZC4gIFRoZSByZXR1cm5lZCBjc3MgcmVtYWlucyBhc3NvY2lhdGVkIHdpdGggQGZvbGlvXG4gMzI5Olx0ICogdW50aWwgaXQgaXMgcmVsZWFzZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRnVuY3Rpb24gTmFtZSBWZXJpZmljYXRpb24qKgoKSG1tLCBpcyBpdCBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYD8gVGhhdCBzZWVtcy4uLiB2YWd1ZWx5IGZhbWlsaWFyLCBidXQgSSYjMzk7bSBub3QgZW50aXJlbHkgY29uZmlkZW50LiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUmIzM5O3MgbG9naWMsIGl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgZnVuY3Rpb24mIzM5O3MgcHJlY2lzZSBuYW1lLiBJIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGluZGVlZCB0aGUgY29ycmVjdCBmdW5jdGlvbi4gQSBzaW1wbGUgdHlwbyBhdCB0aGlzIGxldmVsIGNvdWxkIGxlYWQgbWUgZG93biBhIHJhYmJpdCBob2xlIGZvciBob3Vycy4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHksIGp1c3QgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfcmVwYXJlbnRfb2JqY2dzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xOTY9c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpfY2dyb3VwX2FsbG9jKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTIxNC1cbm1tL21lbWNvbnRyb2wuYzoyMTU6c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTIxNi1cdFx0XHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzA9c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3VubG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzYtXG5tbS9tZW1jb250cm9sLmM6Mjc3OnN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtMjc4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzAwLVxubW0vbWVtY29udHJvbC5jOjMwMTpcdFx0b2JqY2cgPSBfX21lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZywgcGFyZW50LCBuaWQpO1xubW0vbWVtY29udHJvbC5jLTMwMi1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDM0OD1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNjQtXHQgKi9cbm1tL21lbWNvbnRyb2wuYzo0MzY1Olx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00MzY2LVx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01Mzk0PXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQwOC0gKlxubW0vbWVtY29udHJvbC5jOjU0MDk6ICogbWVtY2dfcmVwYXJlbnRfb2JqY2dzKCkgcmVwYXJlbnRzIGEgZHlpbmcgY2dyb3VwIG9uZSBub2RlIGF0IGEgdGltZTogdGhlXG5tbS9tZW1jb250cm9sLmMtNTQxMC0gKiBmb2xpb3Mgb24gdGhhdCBub2RlJiMzOTtzIExSVSBsaXN0cyBtb3ZlIHRvIHRoZSBwYXJlbnQgYW5kIHRoYXQgbm9kZSYjMzk7cyBvYmpjZyBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjIyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBDZ3JvdXAgT2ZmbGluaW5nIEJ1Z2ZpeCoqCgpPa2F5LCBzbyB0aGlzIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBkdXJpbmcgYSBtZW1vcnkgY2dyb3VwJiMzOTtzIGRlc3RydWN0aW9uIG9yIG9mZmxpbmluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBjcml0aWNhbCBhcmVhIOKAkyB0aGUgdGVhcmRvd24gb2YgbWVtb3J5IHJlc291cmNlcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGZsYXc6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgcHJvcGFnYXRlZCB0byB0aGUgY2hpbGQgY2dyb3VwIGR1cmluZyB0aGlzIG9mZmxpbmluZywgd2hpY2ggbWVhbnMgdGhlIExSVSBzaXplcyB3ZXJlbiYjMzk7dCBnZXR0aW5nIHVwZGF0ZWQgY29ycmVjdGx5IG9uIHRoZSBjaGlsZHJlbiwgd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgYWNjb3VudGluZyBvZiBtZW1vcnkgdXRpbGl6YXRpb24uIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgb2ZmbGluaW5nIHBhdGguCgpJcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5ISBUaGlzIGlzIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhdXRpb3VzLgoKTm93LCB3aGF0IGZ1bmN0aW9ucyBhcmUgbW9zdCByZWxldmFudD8gSSYjMzk7ZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2U6IGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgdG8gY29uZmlybSBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBpdCBpcy4gVGhhdCYjMzk7cyBub3QgdG9vIHN1cnByaXNpbmcgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgaXQgYmVpbmcgYSBjb3JlIGNvbXBvbmVudC4gTm93LCBob3cgYWJvdXQgYGxydV9yZXBhcmVudF9tZW1jZ2A/IEFoLCBpdCYjMzk7cyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSwgYmVjYXVzZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgTFJVIHVwZGF0ZXMgYW5kIG1heSBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cy4gTGFzdGx5LCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AsIGxldCYjMzk7cyBjaGVjayBpdCBpbiBgbW0vdm1zY2FuLmNgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuCgpUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBwbGFuIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIFdlIG5lZWQgdG8gYmUgZXNwZWNpYWxseSBjYXJlZnVsIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHBhcmVudCBhbmQgY2hpbGQgY2dyb3VwcyBkdXJpbmcgb2ZmbGluaW5nIHRvIGVuc3VyZSBtZW1vcnkgYWNjb3VudGluZyBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9NzAxPWJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MDI6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwMy1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTc1Mz1zdGF0aWMgaW5saW5lXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1NDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NTUte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjk1LVx0XHRcdH1cbm1tL21lbWNvbnRyb2wuYzoyOTY6XHRcdFx0bHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhtZW1jZywgcGFyZW50LCBuaWQpO1xubW0vbWVtY29udHJvbC5jLTI5Ny1cdFx0fSBlbHNlIHtcbi0tXG5tbS92bXNjYW4uYz00NTQ4PXZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ1ODgtICovXG5tbS92bXNjYW4uYzo0NTg5OnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG5tbS92bXNjYW4uYy00NTkwLVx0XHRcdFx0ICAgICBpbnQgem9uZSwgaW50IHR5cGUpXG4tLVxubW0vdm1zY2FuLmMtNDYxOS1cbm1tL3Ztc2Nhbi5jOjQ2MjA6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2MjEte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2MzEtXHRcdGZvciAodHlwZSA9IDA7IHR5cGUgXHUwMDNjIEFOT05fQU5EX0ZJTEU7IHR5cGUmIzQzOyYjNDM7KVxubW0vdm1zY2FuLmM6NDYzMjpcdFx0XHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xubW0vdm1zY2FuLmMtNDYzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGFyZW4mIzM5O3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSBxdWVzdGlvbiBhYm91dCBob3cgdGhleSBhcmUgdXRpbGl6ZWQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBUaGF0IHVzdWFsbHkgaW1wbGllcyBzb21lIGV4dGVybmFsIGFjY2VzcyBvciBjYWxsLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGRlcGVuZGVuY2llcyBpcyBrZXkuCgoqKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMqKgoKSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciB0aGVzZSBndXlzIHRvIGV2ZW4gZXhpc3Qgb3IgZnVuY3Rpb24/JiMzNDsgYENPTkZJR19NRU1DR2AgZmVlbHMgbGlrZSB0aGUgbW9zdCBvYnZpb3VzIGFuZCBsaWtlbHkgY2FuZGlkYXRlLiBUaGF0JiMzOTtzIGFsbW9zdCBhIGdpdmVuLCBpc24mIzM5O3QgaXQ/IFNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBzZWVtIGluaGVyZW50bHkgdGllZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuCgpUbyBiZSBjZXJ0YWluLCBhbmQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGluIGBtbS9mb2xpby5jYCB0byBzZWUgaG93IGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGFjdHVhbGx5IHVzZWQuIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBleHRlbnQgb2YgdGhlaXIgaW1wYWN0IGFuZCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD00Njk9c3RhdGljIGlubGluZSBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc2LSNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ3Nzp2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc4LSNlbmRpZlxuLS1cbm1tL2ZvbGlvLmM9MTEyMD1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9mb2xpby5jLTExNDUtXG5tbS9mb2xpby5jOjExNDY6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vZm9saW8uYy0xMTQ3LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI5Ny1cdFx0fSBlbHNlIHtcbm1tL21lbWNvbnRyb2wuYzoyOTg6XHRcdFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG5tbS9tZW1jb250cm9sLmMtMjk5LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBscnVfZ2VuX3JlcGFyZW50X21lbWNnIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpcyBkZWZpbml0ZWx5IGluIGBtbS92bXNjYW4uY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBpcyBgQ09ORklHX0xSVV9HRU5gIHJlbGF0ZWQgdG8gYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGRpZyBpbnRvLiBVbmRlcnN0YW5kaW5nIHRoYXQgZGVwZW5kZW5jeSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBmdW5jdGlvbiBpcyBkb2luZywgYW5kIHdoYXQgdHJpZ2dlcnMgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDE9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwMjp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzAzLVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzUzPXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzU0OnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc1NS17XG4tLVxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTUtXHRcdFx0fVxubW0vbWVtY29udHJvbC5jOjI5NjpcdFx0XHRscnVfZ2VuX3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG5tbS9tZW1jb250cm9sLmMtMjk3LVx0XHR9IGVsc2Uge1xuLS1cbm1tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDU4OC0gKi9cbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ1OTAtXHRcdFx0XHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcbi0tXG5tbS92bXNjYW4uYy00NjE5LVxubW0vdm1zY2FuLmM6NDYyMDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYyMS17XG4tLVxubW0vdm1zY2FuLmMtNDYzMS1cdFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspXG5tbS92bXNjYW4uYzo0NjMyOlx0XHRcdF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIHppZCwgdHlwZSk7XG5tbS92bXNjYW4uYy00NjMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgbWVtb3J5LXJlbGF0ZWQsIGFuZCB0aGUgYG1tem9uZS5oYCBoZWFkZXIgZmlsZSBmZWVscyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlZ2lvbiBhcm91bmQgbGluZSA3MDIuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgc29tZSBrZXkgZnVuY3Rpb25zIGZvciB6b25lIG1hbmFnZW1lbnQgYXJlIGRlZmluZWQgb3IgcmVmZXJlbmNlZCwgd2hpY2ggaXMgaW1wb3J0YW50IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBvcmdhbml6YXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IG1pZ2h0IGJlIGdvaW5nIHdyb25nIGJ5IGNoZWNraW5nIG91dCB0aGF0IHNwZWNpZmljIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbXpvbmUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjkwOlx0dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCk7XG4gNjkxOlx0dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gNjkyOlx0Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcbiA2OTM6XHRcbiA2OTQ6XHR2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIDY5NTpcdHZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gNjk2Olx0dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIDY5NzpcdHZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gNjk4Olx0dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiA2OTk6XHR2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG4gNzAwOlx0dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIDcwMTpcdGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIDcwMjpcdHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuIDcwMzpcdFxuIDcwNDpcdCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIDcwNTpcdFxuIDcwNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiA3MDc6XHR7XG4gNzA4Olx0fVxuIDcwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTFJVIEdlbmVyYXRpb24gYW5kIE1lbWNnIFJlcGFyZW50aW5nIExvZ2ljKioKCk9rYXksIHNvIHRoZSBwYXRjaCBkb2N1bWVudGF0aW9uIGluZGljYXRlcyB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBmb3IgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBUaGF0IG1ha2VzIHNlbnNlLiBXYWl0IGEgbWludXRlLi4uIHRoaXMgaXMgYSBiaXQgY29uZnVzaW5nLiBJdCBsb29rcyBsaWtlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGNhbGxlZCB3aGVuIGBscnVfZ2VuX2VuYWJsZWQoKWAgaXMgKmZhbHNlKi4gQW5kIHRoZW4sIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGBscnVfZ2VuX2VuYWJsZWQoKWAgaXMgdHJ1ZS4gSXQgc2VlbXMgbGlrZSBib3RoIGFyZSBiZWluZyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLCB3aGljaCBzdWdnZXN0cyBhbiBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgdHdvIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZW0gYmV0dGVyLgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9mb2xpby5jYCBhcm91bmQgbGluZSAxMTIwLiBUaGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgbG9jYXRpb24gZm9yIHRoZSByZWxldmFudCBjb2RlLCBiYXNlZCBvbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZXNlIGNhbGxzIHRoZXJlLiBIb3BlZnVsbHkgdGhpcyB3aWxsIG1ha2UgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyBjbGVhcmVyLCBhbmQgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2Vuc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZm9saW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExNTpcdFx0fVxuMTExNjpcdFx0ZmJhdGNoLVx1MDAzZW5yID0gajtcbjExMTc6XHR9XG4xMTE4Olx0XG4xMTE5Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuMTEyMDpcdHN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxuMTEyMTpcdFx0XHRcdFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbjExMjI6XHRcdFx0XHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgbmlkKVxuMTEyMzpcdHtcbjExMjQ6XHRcdGludCB6aWQ7XG4xMTI1Olx0XHRzdHJ1Y3Qgem9uZSAqem9uZTtcbjExMjY6XHRcbjExMjc6XHRcdGlmIChscnUgIT0gTFJVX1VORVZJQ1RBQkxFKVxuMTEyODpcdFx0XHRsaXN0X3NwbGljZV90YWlsX2luaXQoXHUwMDI2Y2hpbGRfbHJ1dmVjLVx1MDAzZWxpc3RzW2xydV0sIFx1MDAyNnBhcmVudF9scnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XSk7XG4xMTI5Olx0XG4xMTMwOlx0XHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSkge1xuMTEzMTpcdFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuMTEzMjpcdFxuMTEzMzpcdFx0XHRpZiAoIXNpemUpXG4xMTM0Olx0XHRcdFx0Y29udGludWU7XG4xMTM1Olx0XG4xMTM2Olx0XHRcdC8qXG4xMTM3Olx0XHRcdCAqIFRoZSBmb2xpb3MgYXJlIGFjY291bnRlZCB0byB0aGUgcGFyZW50IGZyb20gbm93IG9uLCBzbyB0aGVcbjExMzg6XHRcdFx0ICogc2l6ZSBoYXMgdG8gYmUgbW92ZWQsIG5vdCBqdXN0IGNvcGllZC4gTGVhdmluZyBpdCBiZWhpbmRcbjExMzk6XHRcdFx0ICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy5cbjExNDA6XHRcdFx0ICovXG4xMTQxOlx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbjExNDI6XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xuMTE0MzpcdFx0fVxuMTE0NDpcdH1cbjExNDU6XHRcbjExNDY6XHR2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4xMTQ3Olx0e1xuMTE0ODpcdFx0ZW51bSBscnVfbGlzdCBscnU7XG4xMTQ5Olx0XHRzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsICpwYXJlbnRfbHJ1dmVjO1xuMTE1MDpcdFxuMTE1MTpcdFx0Y2hpbGRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIE5PREVfREFUQShuaWQpKTtcbjExNTI6XHRcdHBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTtcbjExNTM6XHRcbjExNTQ6XHRcdGZvcl9lYWNoX2xydShscnUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4yNG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBMUlUgUmVwYXJlbnRpbmcgaW4gTWVtY2cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IExSVSByZXBhcmVudGluZyB3b3JrcyB3aXRoaW4gdGhlIG1lbWNnIGZyYW1ld29yay4gSXQgbG9va3MgbGlrZSBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBkaXJlY3RseSB0aWVkIHRvIGBDT05GSUdfTUVNQ0dgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiwgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIHNlZW1zIHRvIGJlIGdhdGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAsICphbmQqIEkgcHJlc3VtZSwgYENPTkZJR19NRU1DR2AgYXMgd2VsbC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAuIEdpdmVuIHRoYXQgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIGNyaXRpY2FsIGxvZ2ljIHJlc2lkZXMuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbW0vdm1zY2FuLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0NjIwLiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpc3NlY3RpbmcgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2MTU6XHRcdFx0XHRfX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUgJiM0MzsgcGFyZW50X2xydV9hY3RpdmUsIHpvbmUsIG5yX3BhZ2VzKTtcbjQ2MTY6XHRcdFx0fVxuNDYxNzpcdFx0fVxuNDYxODpcdH1cbjQ2MTk6XHRcbjQ2MjA6XHR2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuNDYyMTpcdHtcbjQ2MjI6XHRcdHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgKnBhcmVudF9scnV2ZWM7XG40NjIzOlx0XHRpbnQgdHlwZSwgemlkO1xuNDYyNDpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG40NjI1Olx0XHRlbnVtIGxydV9saXN0IGxydTtcbjQ2MjY6XHRcbjQ2Mjc6XHRcdGNoaWxkX2xydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG40NjI4Olx0XHRwYXJlbnRfbHJ1dmVjID0gZ2V0X2xydXZlYyhwYXJlbnQsIG5pZCk7XG40NjI5Olx0XG40NjMwOlx0XHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSlcbjQ2MzE6XHRcdFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspXG40NjMyOlx0XHRcdFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcbjQ2MzM6XHRcbjQ2MzQ6XHRcdGZvcl9lYWNoX2xydShscnUpIHtcbjQ2MzU6XHRcdFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcbjQ2MzY6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuNDYzNzpcdFxuNDYzODpcdFx0XHRcdGlmICghc2l6ZSlcbjQ2Mzk6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNDY0MDpcdFxuNDY0MTpcdFx0XHRcdC8qIE1vdmUgdGhlIGFjY291bnRpbmcsIGRvIG5vdCBkdXBsaWNhdGUgaXQuICovXG40NjQyOlx0XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xuNDY0MzpcdFx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcbjQ2NDQ6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQ29kZSBmb3IgTWVtY2cgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gRmlyc3QsIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGV2ZW4gY29tcGlsZWQgaW4gd2hlbiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLiBBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgaXQgZG9lcywgYW5kIGl0JiMzOTtzIHRha2luZyBhIGBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2dgIGFzIGl0cyBpbnB1dCB3aGljaCBzZWVtcyBsb2dpY2FsLiBOb3csIHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBjb25maXJtIHRoYXQgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBndWFyZCBpcyBwcmVzZW50IGFyb3VuZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiwganVzdCB0byBlbnN1cmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMganVzdCBiYXNpYyBkaWxpZ2VuY2UsIGJ1dCBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgdW5kZXIgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiBDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMDM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjA5LVxubW0vdm1zY2FuLmM6MjEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIxMS1cbi0tXG5tbS92bXNjYW4uYz0yNzQ0PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yNzQ3LVxubW0vdm1zY2FuLmM6Mjc0ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yNzQ5LVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9MjkwMj1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MDgtXG5tbS92bXNjYW4uYzoyOTA5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MTAtXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9Mjk0Mj12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NDgtXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzoyOTQ5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5NTAtXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjk2OT12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NzctXG5tbS92bXNjYW4uYzoyOTc4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5NzktXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMzAwMS1cbm1tL3Ztc2Nhbi5jOjMwMDI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMzAwMy1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMDctXG5tbS92bXNjYW4uYzozMDA4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwMDktdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDM4Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00NDI3LVxubW0vdm1zY2FuLmM6NDQyODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00NDI5LVxuLS1cbm1tL3Ztc2Nhbi5jPTU2MDU9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NjE4LVxubW0vdm1zY2FuLmM6NTYxOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01NjIwLVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NTg3MT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4OTAtXG5tbS92bXNjYW4uYzo1ODkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU4OTItXG4tLVxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02ODExLVxubW0vdm1zY2FuLmM6NjgxMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02ODEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTFJVIEdlbmVyYXRpb24gYW5kIE1lbUNnIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmZGVmIENPTkZJR19NRU1DR2AgYXQgbGluZSA0NDI4LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIGl0ICphbHNvKiByZWxpZXMgb24gYENPTkZJR19MUlVfR0VOYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiB0aGUgTFJVIEdlbmVyYXRpb24gc3lzdGVtLCBvciBpZiBpdCYjMzk7cyBjb21wbGV0ZWx5IGluZGVwZW5kZW50IHdpdGhpbiB0aGUgTWVtQ0cgY29udGV4dC4gTGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBjcm9zcy1yZWZlcmVuY2UgYG1tL3Ztc2Nhbi5jYCB0byBzZWFyY2ggZm9yIGBDT05GSUdfTFJVX0dFTmAgYW5kIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiBDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMi1cbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzNC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTI2ODA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjkxLVxubW0vdm1zY2FuLmM6MjY5MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2OTMtXG5tbS92bXNjYW4uYz0yNjk0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjY5Ni1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODgwPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4OTktXG5tbS92bXNjYW4uYzoyOTAwOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI5MDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjIyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBhbmQgTWVtY2cgUmVwYXJlbnRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX0xSVV9HRU5gIGlzIGVzc2VudGlhbCBmb3IgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggTFJVIGdlbmVyYXRpb24gaXMgdml0YWwgZm9yIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudC4gTm93LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoZXJlIGlzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGRlZmluZWQ/IFJpZ2h0LCBpdCYjMzk7cyBhY3R1YWxseSBpbiBgbW0vZm9saW8uY2AuIFNvLCBpZiBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBpbiBgbW0vZm9saW8uY2AsIEkgbmVlZCB0byBjaGVjayBob3cgaXQgdXNlcyBgQ09ORklHX01FTUNHYC4gVGltZSB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgaG93IHRoZSBtZW1vcnkgY2dyb3VwIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3RzIHdpdGggdGhlIGZvbGlvIGltcGxlbWVudGF0aW9uLiBUaGlzIG1pZ2h0IHByb3ZpZGUgZnVydGhlciBpbnNpZ2h0cyBpbnRvIHdoZXRoZXIgYW5kIGhvdyBgQ09ORklHX0xSVV9HRU5gIGlzIHVzZWQgaW4gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiBDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9mb2xpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZvbGlvLmM9MTEwNz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZm9saW8uYy0xMTE4LVxubW0vZm9saW8uYzoxMTE5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2ZvbGlvLmMtMTEyMC1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgUGF0aHMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX01FTUNHYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50IGhlcmUuIE5vIHF1ZXN0aW9uIGFib3V0IGl0LiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYENPTkZJR19MUlVfR0VOYCBpcyBhbHNvIG5lY2Vzc2FyeS4gVGhlIHBhdGNoIHRvdWNoZXMgYm90aCBgbHJ1dmVjX3JlcGFyZW50X2xydWAgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCwgd2hpY2ggYXJlIHVzZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYGxydV9nZW5fZW5hYmxlZCgpYCBpcyB0cnVlIG9yIGZhbHNlLiBTaW5jZSB3ZSYjMzk7cmUgbW9kaWZ5aW5nIGJvdGggZnVuY3Rpb25zLCBmdXp6aW5nIHdpdGgganVzdCBgQ09ORklHX01FTUNHYCBzaG91bGQgYmUgZW5vdWdoIHRvIGV4ZXJjaXNlIHRoZSBgbHJ1dmVjX3JlcGFyZW50X2xydWAgcGFydC4gQnV0LCB0byBoaXQgdGhlIG90aGVyIHBhdGgsIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCwgd2UgbmVlZCBgQ09ORklHX0xSVV9HRU5gIGVuYWJsZWQgYXMgd2VsbC4gQmVzdCB0byBpbmNsdWRlIGJvdGggZm9yIGZ1bGwgY292ZXJhZ2UuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGV2ZW4gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gQWgsIHllcywgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMg4oCTIHRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc3l6a2FsbGVyIHRhcmdldCwgc28gdGhhdCYjMzk7cyBnb29kIG5ld3MuCgpUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuCgpXYWl0LCBpcyBgbHJ1X3JlcGFyZW50X21lbWNnYCBleHBvcnRlZCBvciBqdXN0IG5vdCBzdGF0aWM/IEl0JiMzOTtzIG5vdCBzdGF0aWMuIE9rYXkuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBPaCwgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIGlzIHN0YXRpYywgYnV0IHRoYXQmIzM5O3MganVzdCBhIGNhbGxlci4gU28sIEkmIzM5O2xsIGp1c3QgdXNlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgYXMgdGhlIHRhcmdldHMuCgpGaW5hbGx5LCBJIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyB0aGUgb25seSBjYWxsZXIgb2YgYGxydXZlY19yZXBhcmVudF9scnVgLiBKdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydXZlY19yZXBhcmVudF9scnUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9mb2xpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZvbGlvLmM9MTEwNz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZm9saW8uYy0xMTE5LSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2ZvbGlvLmM6MTEyMDpzdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbm1tL2ZvbGlvLmMtMTEyMS1cdFx0XHRcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG4tLVxubW0vZm9saW8uYz0xMTQ2PXZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbi0tXG5tbS9mb2xpby5jLTExNTQtXHRmb3JfZWFjaF9scnUobHJ1KVxubW0vZm9saW8uYzoxMTU1Olx0XHRscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpO1xubW0vZm9saW8uYy0xMTU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGxydV9yZXBhcmVudF9tZW1jZ2AgYW5kIGBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2dgKioKClJpZ2h0LCBzbyBgbHJ1X3JlcGFyZW50X21lbWNnYCBzZWVtcyB0byBiZSB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIGl0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3MuIE5vdywgSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIGFib3V0IHRoYXQsIHNvIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIGlzIGluZGVlZCB0aGUgKnNvbGUqIGNhbGxlciBvZiBgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnYC4gTm8gc2Vuc2UgaW4gbWFraW5nIGFzc3VtcHRpb25zLCBldmVuIGlmIHRoZSBjb2RlIGluaXRpYWxseSBzdWdnZXN0cyB0aGF0LiBOZWVkIHRvIGJlIGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGVkZ2UgY2FzZXMgbHVya2luZyBhcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDU4OC0gKi9cbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ1OTAtXHRcdFx0XHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcbi0tXG5tbS92bXNjYW4uYz00NjIwPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDYzMS1cdFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspXG5tbS92bXNjYW4uYzo0NjMyOlx0XHRcdF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIHppZCwgdHlwZSk7XG5tbS92bXNjYW4uYy00NjMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBNZW1vcnkgQ29udHJvbCBHcm91cCBSZXBhcmVudGluZyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gY2FsbGluZyB0aGUgcmVwYXJlbnRpbmcgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmb2N1c2luZyBteSBhbmFseXNpcy4gR2l2ZW4gdGhhdCwgbXkgcHJpbWFyeSBhcmVhcyBvZiBpbnZlc3RpZ2F0aW9uIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQ6CgoqICAgYGxydV9yZXBhcmVudF9tZW1jZ2AgKHRoZSB0YXJnZXQgb2YgdGhlIGNhbGwpCiogICBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgKHRoZSBjYWxsZXIsIG9idmlvdXNseSkKCk5vdywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgd2lsbCBiZSBpbXBhY3RpbmcgdGhpcyBjb2RlIHBhdGguIFNwZWNpZmljYWxseSwgYE1FTUNHYCBhbmQgYExSVV9HRU5gLiBCdXQgd2FpdC4uLiBpcyBgTFJVX0dFTmAgdGhlICphY3R1YWwqIGNvbmZpZyBzeW1ib2w/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYG1tL0tjb25maWdgIGZpbGUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBHb3R0YSB2ZXJpZnkgdGhlIGV4YWN0IGNvbmZpZyBuYW1lcyBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNy1cbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYExSVV9HRU5gIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgYExSVV9HRU5gIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGNvbmZpZyBuYW1lOyBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoYXQuCgpOb3csIGxldCYjMzk7cyB1bnBhY2sgdGhlIGZ1enppbmcgcmF0aW9uYWxlLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGJlaGF2ZXMgd2l0aCByZWdhcmQgdG8gTFJVIHNpemUgYWNjb3VudGluZyB3aGVuIGEgY2hpbGQgbWVtY2cgZGllcyBhbmQgaXMgcmVwYXJlbnRlZC4gSW5zdGVhZCBvZiBtZXJlbHkgY29weWluZyB0aGUgTFJVIHNpemUsIGl0IG5vdyBjb3JyZWN0bHkgbW92ZXMgaXQgdG8gdGhlIHBhcmVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW504oCUc3BlY2lmaWNhbGx5LCBtZW1jZy4gV2Uga25vdyB0aGlzIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdGhlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggbWFrZXMgaXQgYSBjcml0aWNhbCBhbmQgcmVhY2hhYmxlIHBhdGggZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciB1bmNvdmVyaW5nIHN1YnRsZSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycywgZXNwZWNpYWxseSB3aXRoIGVkZ2UgY2FzZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQuCgpCZWZvcmUgSSBnbyB0b28gZmFyLCBJIHNob3VsZCBqdXN0IHF1aWNrbHkgZG91YmxlIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgbmVlZGVkLCBhbnkgcG90ZW50aWFsIGNvbmZpZyBkZXBlbmRlbmNpZXMuLi4gTGV0IG1lIHNlZS4uLiBgTUVNQ0dgIGRvZXNuJiMzOTt0IHNlZW0gdG8gZGVwZW5kIG9uIGFueXRoaW5nIHVudXN1YWwsIHNvIHdlIHNob3VsZCBiZSBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIE1FTUNHJiMzOTtzIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBgTUVNQ0dgIHJlbGllcyBvbiBgQ0dST1VQU2AuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9uLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBpdC4gQmVzdCBwbGFjZSB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzIGxpa2UgdGhlc2UgaXMgdXN1YWxseSBgaW5pdC9LY29uZmlnYC4gTGV0JiMzOTtzIG5hdmlnYXRlIHRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgYGNvbmZpZyBNRU1DR2AgcmV2ZWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBhdCBhIGNvbmZpZ3VyYXRpb24gbGV2ZWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyBzaG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMTIKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBuYXZpZ2F0aW5nIHRoaXMgY29uZmlndXJhdGlvbiBtYXplIGFuZCBpdCBsb29rcyBsaWtlIGBNRU1DR2AgaXMgbmVzdGVkIHdpdGhpbiBgbWVudWNvbmZpZyBDR1JPVVBTYCwgcmlnaHQ/IFRoYXQmIzM5O3MgZmFpcmx5IHN0YW5kYXJkLCBzbyBpdCYjMzk7cyBhIHNhZmUgYmV0IHRoYXQgYENHUk9VUFNgIGlzIGEgcHJlcmVxdWlzaXRlIGhlcmUuIE5vdywgc2luY2UgSSYjMzk7bSBoZXJlLCBtaWdodCBhcyB3ZWxsIGluY2x1ZGUgYm90aCBgTUVNQ0dgIGFuZCBgTFJVX0dFTmAuICBUaGV5IGxpa2VseSBwbGF5IG5pY2VseSB0b2dldGhlciBpbiB0aGlzIGNvbnRleHQuIEFuZCBJIGJlbGlldmUgdGhhdCBjb3ZlcnMgdGhlIHByZXJlcXVpc2l0ZXMuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGFwcGx5IHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9yZXBhcmVudF9tZW1jZyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X3JlcGFyZW50X21lbWNnJiMzNDssCiAgICAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBvZmZsaW5pbmcgbG9naWMgdG8gcHJvcGVybHkgbW92ZSBMUlUgc2l6ZSBhY2NvdW50aW5nIGZyb20gYSBkeWluZyBjaGlsZCBtZW1jZyB0byBpdHMgcGFyZW50LCBpbnN0ZWFkIG9mIGp1c3QgY29weWluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgY2hpbGQgbWVtY2cgZnJvbSByZXRhaW5pbmcgbm9uLXplcm8gTFJVIHNpemVzIGFmdGVyIHJlcGFyZW50aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtY2cpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggaXMgYSByZWFjaGFibGUgYW5kIGltcG9ydGFudCBwYXRoIHRvIGZ1enouJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDQ6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWVtb3J5IGNncm91cCBMUlUgc2l6ZSByZXBhcmVudGluZyBieSBzdWJ0cmFjdGluZyB0aGUgbW92ZWQgc2l6ZSBmcm9tIHRoZSBjaGlsZCBscnV2ZWMuIFRoaXMgcHJldmVudHMgdGhlIGR5aW5nIGNoaWxkIGZyb20gZGVzY3JpYmluZyBmb2xpb3MgaXQgbm8gbG9uZ2VyIG93bnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIGFjY291bnRpbmcgdXBkYXRlcywgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmQ2ZWQ0MDI4YWExYzg2NmFhMDdkZjc0Y2Y2YzRiMmNkZDhkOTQwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDAzOjM5OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0xMTMwLDcgJiM0MzsxMTMwLDE2IEBAIHN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLAogCWZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCk7CiAKJiM0MzsJCWlmICghc2l6ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZm9saW9zIGFyZSBhY2NvdW50ZWQgdG8gdGhlIHBhcmVudCBmcm9tIG5vdyBvbiwgc28gdGhlCiYjNDM7CQkgKiBzaXplIGhhcyB0byBiZSBtb3ZlZCwgbm90IGp1c3QgY29waWVkLiBMZWF2aW5nIGl0IGJlaGluZAomIzQzOwkJICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4KJiM0MzsJCSAqLwogCQltZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7CiYjNDM7CQltZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGZlN2YwYzUyYTE4YzAuLjU2MWVlZWM1NjI4Y2IgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00NjM1LDcgJiM0Mzs0NjM1LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsCiAJCWZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7CiAJCQl1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpOwogCiYjNDM7CQkJaWYgKCFzaXplKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQkvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqLwogCQkJbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpOwomIzQzOwkJCW1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTsKIAkJfQogCX0KIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODEKCQkJCQkJCW91dHB1dDogMTE3CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIExSVSBTaXplIEFjY291bnRpbmcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiBpc3N1ZSBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIGFjY291bnRpbmcgZHVyaW5nIHJlcGFyZW50aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBhbmQgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBJIHNlZSB0aGUgY29yZSBvZiB0aGUgZml4IGlzIHRoZSBhZGRpdGlvbiBvZiBgaWYgKCFzaXplKSBjb250aW51ZTtgIGFuZCB0aGVuIGRlY3JlbWVudGluZyB0aGUgY2hpbGQgbHJ1dmVjIHNpemUgdXNpbmcgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gVGhpcyBsb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGNvcnJlY3Rpb24gdG8gaG93IExSVSBzaXplcyBhcmUgdHJhY2tlZCB3aGVuIG1lbW9yeSBpcyBiZWluZyBtb3ZlZCBiZXR3ZWVuIGNncm91cHMuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgZml4IGlzIHRhcmdldGVkIGF0IHBvdGVudGlhbCB1bmRlcmZsb3dzIG9yIGluZmluaXRlIGxvb3BzIHRoYXQgY291bGQgdHJpZ2dlciBpbmNvcnJlY3QgcmVjbGFpbSBiZWhhdmlvci4gRnJvbSB0aGUgZGVzY3JpcHRpb24sIHRoZSBidWcgbGllcyBpbiBwb3RlbnRpYWxseSBpbmNvcnJlY3QgTFJVIHNpemVzLiBUaGF0IHJpbmdzIHRydWUuIFRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBjb3VsZCBiZSBjYXVnaHQgd2l0aCBvdGhlciB0b29scyBsaWtlIEtBU0FOIG9yIHRoZSBzdGFuZGFyZCBjaGVja3MsIGxpa2UgcGFnZSBhbGxvY2F0b3IgY2hlY2tzLCBvciBWTV9CVUdfT04sIGJ1dCBLTVNBTiwgc3BlY2lmaWNhbGx5LCBpc24mIzM5O3QgZ29pbmcgdG8gYmUgdHJpcHBlZCB1cCBoZXJlLiBUaGVyZSYjMzk7cyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIGltbWVkaWF0ZSByaXNrIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTbywgZ2l2ZW4gbXkgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBhIGNsZWFuIGZpeCB3aXRoIG5vIG9idmlvdXMgS01TQU4gY29uY2VybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGFjY291bnRpbmcgYnVnIGluIG1lbW9yeSBjZ3JvdXAgTFJVIHNpemUgcmVwYXJlbnRpbmcgYnkgc3VidHJhY3RpbmcgdGhlIG1vdmVkIHNpemUgZnJvbSB0aGUgY2hpbGQgbHJ1dmVjLiBUaGlzIHByZXZlbnRzIHRoZSBkeWluZyBjaGlsZCBmcm9tIGRlc2NyaWJpbmcgZm9saW9zIGl0IG5vIGxvbmdlciBvd25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHNpbXBsZSBhcml0aG1ldGljIGFuZCBhY2NvdW50aW5nIHVwZGF0ZXMsIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIHJlcGFyZW50aW5nIGJ5IHN1YnRyYWN0aW5nIHRoZSBtb3ZlZCBzaXplIGZyb20gdGhlIGNoaWxkIGxydXZlYy4gVGhpcyBwcmV2ZW50cyB0aGUgZHlpbmcgY2hpbGQgZnJvbSBkZXNjcmliaW5nIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgYWNjb3VudGluZyB1cGRhdGVzLCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzozOTo0MC4xOTkxMzkzMzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM5NTI0ODQwNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X3JlcGFyZW50X21lbWNnXCIsXG4gICAgXCJscnVfZ2VuX3JlcGFyZW50X21lbWNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIHJlcGFyZW50aW5nIGJ5IHN1YnRyYWN0aW5nIHRoZSBtb3ZlZCBzaXplIGZyb20gdGhlIGNoaWxkIGxydXZlYy4gVGhpcyBwcmV2ZW50cyB0aGUgZHlpbmcgY2hpbGQgZnJvbSBkZXNjcmliaW5nIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgYWNjb3VudGluZyB1cGRhdGVzLCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzozOTo0MC4xOTkxNDYwMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQ1MzA0NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDZlZDQwMjhhYTFjODY2YWEwN2RmNzRjZjZjNGIyY2RkOGQ5NDBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDIyIDAzOjM5OjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXFxuaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDRcXG4tLS0gYS9tbS9mb2xpby5jXFxuKysrIGIvbW0vZm9saW8uY1xcbkBAIC0xMTMwLDcgKzExMzAsMTYgQEAgc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuIFxcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCk7XFxuIFxcbitcXHRcXHRpZiAoIXNpemUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIGZvbGlvcyBhcmUgYWNjb3VudGVkIHRvIHRoZSBwYXJlbnQgZnJvbSBub3cgb24sIHNvIHRoZVxcbitcXHRcXHQgKiBzaXplIGhhcyB0byBiZSBtb3ZlZCwgbm90IGp1c3QgY29waWVkLiBMZWF2aW5nIGl0IGJlaGluZFxcbitcXHRcXHQgKiBtYWtlcyB0aGUgZHlpbmcgY2hpbGQgZGVzY3JpYmUgZm9saW9zIGl0IG5vIGxvbmdlciBvd25zLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbitcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGZlN2YwYzUyYTE4YzAuLjU2MWVlZWM1NjI4Y2IgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00NjM1LDcgKzQ2MzUsMTIgQEAgdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcXG4gXFx0XFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcXG4gXFxuK1xcdFxcdFxcdGlmICghc2l6ZSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xcbiBcXHRcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XFxuK1xcdFxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6Mzk6NDEuNzA0MzQ0OTI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc0OTkwNDcxMzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9yZXBhcmVudF9tZW1jZ1wiLFxuICAgIFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDZlZDQwMjhhYTFjODY2YWEwN2RmNzRjZjZjNGIyY2RkOGQ5NDBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDM6Mzk6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbisrKyBiL21tL2ZvbGlvLmNcbkBAIC0xMTMwLDcgKzExMzAsMTYgQEAgc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4gXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuIFxuK1x0XHRpZiAoIXNpemUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBmb2xpb3MgYXJlIGFjY291bnRlZCB0byB0aGUgcGFyZW50IGZyb20gbm93IG9uLCBzbyB0aGVcbitcdFx0ICogc2l6ZSBoYXMgdG8gYmUgbW92ZWQsIG5vdCBqdXN0IGNvcGllZC4gTGVhdmluZyBpdCBiZWhpbmRcbitcdFx0ICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy5cbitcdFx0ICovXG4gXHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbitcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmZTdmMGM1MmExOGMwLi41NjFlZWVjNTYyOGNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDYzNSw3ICs0NjM1LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gXHRcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcbiBcbitcdFx0XHRpZiAoIXNpemUpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xuIFx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbitcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG4gXHRcdH1cbiBcdH1cbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzozOTo0MS43MDQzNDY2NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk1MzA3MDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQncyB0d2Vha2luZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIG1lbW9yeSBjZ3JvdXBzLCBvciBtZW1jZ3MuIEl0J3MgdG91Y2hpbmcgYG1tL2ZvbGlvLmNgIGFuZCBgbW0vdm1zY2FuLmNgLCBhbmQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIHVwZGF0ZXMgdG8gYGxydXZlY19yZXBhcmVudF9scnVgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuIFRoZXkncmUgYWRkaW5nIGEgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBjYWxsLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGEgbW9yZSBwcmVjaXNlIGFwcHJvYWNoIHRvIGFjY291bnRpbmcgZHVyaW5nIHRoZSBMUlUgcmVwYXJlbnRpbmcgcHJvY2VzcyBpbnN0ZWFkIG9mIGEgc2ltcGxlIGNvcHkuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGZ1bmN0aW9uYWwgY2hhbmdlLCBwZXJoYXBzIGNvcnJlY3RpbmcgYW4gYWNjb3VudGluZyBpc3N1ZSBvciBpbXByb3ZpbmcgdGhlIGFjY3VyYWN5IG9mIG1lbW9yeSB1c2FnZSB0cmFja2luZy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbmQgd2hlcmUgdGhleSdyZSBjYWxsZWQuIEkgc2VlIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBpcyBpbiBgbW0vZm9saW8uY2AgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpcyBpbiBgbW0vdm1zY2FuLmNgLiBBbHJpZ2h0LCBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxpbmcgY29udGV4dC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBtaWdodCBiZSBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9yZXBhcmVudF9scnV2ZWNgIG9yIHBvc3NpYmx5IGV2ZW4gYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLiBUaGF0IHNlZW1zIGxvZ2ljYWwsIGJ1dCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gSSdsbCBzZWFyY2ggdGhlIGNvZGUgYmFzZSBmb3IgdGhlc2UgZnVuY3Rpb24gbmFtZXMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciB1c2FnZSBhbmQgaG93IHRoaXMgbmV3IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgY2FsbCBmaXRzIGludG8gdGhlIGxhcmdlciBtZW1jZyBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MDoyOS42NTc0MTk2ODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MjQ3MTk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnV2ZWNfcmVwYXJlbnRfbHJ1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MTEwNz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9mb2xpby5jLTExMTktI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2ZvbGlvLmM6MTEyMDpzdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG5tbS9mb2xpby5jLTExMjEtXFx0XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL2ZvbGlvLmM9MTE0Nj12b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS9mb2xpby5jLTExNTQtXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG5tbS9mb2xpby5jOjExNTU6XFx0XFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcXG5tbS9mb2xpby5jLTExNTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MDozMS41OTk4OTY1ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA2NjYwODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIENhbGwgU3RhY2s6IGBscnVfcmVwYXJlbnRfbWVtY2dgKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyB0aGUgZnVuY3Rpb24gbWFraW5nIHRoaXMgY2FsbC4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2UsIEkgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyAqYXJvdW5kKiB0aGF0IGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYW5kIHdoYXQgaXQgY2FsbHMuXG5cblRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgYm90aCBgbHJ1X3JlcGFyZW50X21lbWNnYCBhbmQgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBUaGlzIHNlYXJjaCB3aWxsIHJldmVhbCB0aGUgYnJvYWRlciBjYWxsIGdyYXBoIGFuZCBoaWdobGlnaHQgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMuIEJ5IGV4cGxvcmluZyB0aGVzZSBmdW5jdGlvbnMsIEkgY2FuIHJlY29uc3RydWN0IHRoZSBjb250cm9sIGZsb3cgYW5kIGVzdGFibGlzaCB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFRoZSBhaW0gaXMgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoZSByb2xlIGFuZCBpbXBhY3Qgb2YgYGxydV9yZXBhcmVudF9tZW1jZ2Agd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MDozNC44MDY1NTk0MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTQ3NDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfcmVwYXJlbnRfbWVtY2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9NDY5PXN0YXRpYyBpbmxpbmUgaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc2LSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0Nzc6dm9pZCBscnVfcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00NzgtI2VuZGlmXFxuLS1cXG5tbS9mb2xpby5jPTExMjA9c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXFxuLS1cXG5tbS9mb2xpby5jLTExNDUtXFxubW0vZm9saW8uYzoxMTQ2OnZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG5tbS9mb2xpby5jLTExNDcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5Ny1cXHRcXHR9IGVsc2Uge1xcbm1tL21lbWNvbnRyb2wuYzoyOTg6XFx0XFx0XFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxubW0vbWVtY29udHJvbC5jLTI5OS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAzOjQwOjM2LjYwODAzOTE4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODkzNjUyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGxydV9yZXBhcmVudF9tZW1jZ2AqKlxuXG5Pa2F5LCBzbyBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBlaXRoZXIgYG1lbWNnX3JlcGFyZW50X29iamNnc2Agb3IgYSByZWxhdGVkIGZ1bmN0aW9uLCBsaWtlbHkgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgdHJhY2UgcG9pbnRzIG1lIGRpcmVjdGx5IHRvIGBtbS9tZW1jb250cm9sLmM6Mjk4OiBscnVfcmVwYXJlbnRfbWVtY2cobWVtY2csIHBhcmVudCwgbmlkKTtgLiBHb29kLCB0aGF0J3MgcHJlY2lzZS4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbGwgbmVlZCB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wuY2AgYXJvdW5kIGxpbmUgMjk4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBjb250ZXh0IGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZ3Jhc3Agd2hhdCdzIGhhcHBlbmluZyBkdXJpbmcgdGhpcyByZXBhcmVudGluZyBvcGVyYXRpb24uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODU0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDA6NDEuMzk3NDA2ODkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gMjgxOlxcdFxcdGludCBuaWQ7XFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdGZvcl9lYWNoX25vZGUobmlkKSB7XFxuIDI4NDpcXHRyZXRyeTpcXG4gMjg1OlxcdFxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcXG4gMjg2OlxcdFxcdFxcdFxcdG1heF9scnVfZ2VuX21lbWNnKHBhcmVudCwgbmlkKTtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0XFx0cmVwYXJlbnRfbG9ja3MobWVtY2csIHBhcmVudCwgbmlkKTtcXG4gMjg5OlxcdFxcbiAyOTA6XFx0XFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxuIDI5MTpcXHRcXHRcXHRcXHRpZiAoIXJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2cocGFyZW50LCBuaWQpKSB7XFxuIDI5MjpcXHRcXHRcXHRcXHRcXHRyZXBhcmVudF91bmxvY2tzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDI5NTpcXHRcXHRcXHRcXHR9XFxuIDI5NjpcXHRcXHRcXHRcXHRscnVfZ2VuX3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDI5NzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyOTg6XFx0XFx0XFx0XFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDI5OTpcXHRcXHRcXHR9XFxuIDMwMDpcXHRcXG4gMzAxOlxcdFxcdFxcdG9iamNnID0gX19tZW1jZ19yZXBhcmVudF9vYmpjZ3MobWVtY2csIHBhcmVudCwgbmlkKTtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0XFx0cmVwYXJlbnRfdW5sb2NrcyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbiAzMDQ6XFx0XFxuIDMwNTpcXHRcXHRcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNm9iamNnLVxcdTAwM2VyZWZjbnQpO1xcbiAzMDY6XFx0XFx0fVxcbiAzMDc6XFx0XFxuIDMwODpcXHRcXHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcXG4gMzA5OlxcdH1cXG4gMzEwOlxcdFxcbiAzMTE6XFx0LypcXG4gMzEyOlxcdCAqIEEgbG90IG9mIHRoZSBjYWxscyB0byB0aGUgY2FjaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlXFxuIDMxMzpcXHQgKiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgdGhlIGNhbGxzIHRvIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKCkgYXJlXFxuIDMxNDpcXHQgKiBjb25kaXRpb25hbCB0byB0aGlzIHN0YXRpYyBicmFuY2gsIHdlJ2xsIGhhdmUgdG8gYWxsb3cgbW9kdWxlcyB0aGF0IGRvZXNcXG4gMzE1OlxcdCAqIGttZW1fY2FjaGVfYWxsb2MgYW5kIHRoZSBzdWNoIHRvIHNlZSB0aGlzIHN5bWJvbCBhcyB3ZWxsXFxuIDMxNjpcXHQgKi9cXG4gMzE3OlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIDMxODpcXHRFWFBPUlRfU1lNQk9MKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XFxuIDMyMTpcXHRFWFBPUlRfU1lNQk9MKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XFxuIDMyMjpcXHRcXG4gMzIzOlxcdC8qKlxcbiAzMjQ6XFx0ICogZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8gLSBhY3F1aXJlIGEgY3NzIG9mIHRoZSBtZW1jZyBhc3NvY2lhdGVkIHdpdGggYSBmb2xpb1xcbiAzMjU6XFx0ICogQGZvbGlvOiBmb2xpbyBvZiBpbnRlcmVzdFxcbiAzMjY6XFx0ICpcXG4gMzI3OlxcdCAqIElmIG1lbWNnIGlzIGJvdW5kIHRvIHRoZSBkZWZhdWx0IGhpZXJhcmNoeSwgY3NzIG9mIHRoZSBtZW1jZyBhc3NvY2lhdGVkXFxuIDMyODpcXHQgKiB3aXRoIEBmb2xpbyBpcyByZXR1cm5lZC4gIFRoZSByZXR1cm5lZCBjc3MgcmVtYWlucyBhc3NvY2lhdGVkIHdpdGggQGZvbGlvXFxuIDMyOTpcXHQgKiB1bnRpbCBpdCBpcyByZWxlYXNlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDA6NDEuMzk3NjI3MjkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI1NDE4MjEyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRnVuY3Rpb24gTmFtZSBWZXJpZmljYXRpb24qKlxuXG5IbW0sIGlzIGl0IGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgPyBUaGF0IHNlZW1zLi4uIHZhZ3VlbHkgZmFtaWxpYXIsIGJ1dCBJJ20gbm90IGVudGlyZWx5IGNvbmZpZGVudC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlJ3MgbG9naWMsIGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBmdW5jdGlvbidzIHByZWNpc2UgbmFtZS4gSSBuZWVkIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgZnVuY3Rpb24uIEEgc2ltcGxlIHR5cG8gYXQgdGhpcyBsZXZlbCBjb3VsZCBsZWFkIG1lIGRvd24gYSByYWJiaXQgaG9sZSBmb3IgaG91cnMuIExldCdzIHZlcmlmeSB0aGF0IHF1aWNrbHksIGp1c3QgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDE6MDMuOTM5NDUwNTYyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUxODUwNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnX3JlcGFyZW50X29iamNnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTk2PXN0YXRpYyBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqX2Nncm91cF9hbGxvYyh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIxNC1cXG5tbS9tZW1jb250cm9sLmM6MjE1OnN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtMjE2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3MD1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfdW5sb2NrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc2LVxcbm1tL21lbWNvbnRyb2wuYzoyNzc6c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtMjc4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMDAtXFxubW0vbWVtY29udHJvbC5jOjMwMTpcXHRcXHRvYmpjZyA9IF9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxubW0vbWVtY29udHJvbC5jLTMwMi1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzQ4PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzY0LVxcdCAqL1xcbm1tL21lbWNvbnRyb2wuYzo0MzY1OlxcdG1lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQzNjYtXFx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUzOTQ9dm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0MDgtICpcXG5tbS9tZW1jb250cm9sLmM6NTQwOTogKiBtZW1jZ19yZXBhcmVudF9vYmpjZ3MoKSByZXBhcmVudHMgYSBkeWluZyBjZ3JvdXAgb25lIG5vZGUgYXQgYSB0aW1lOiB0aGVcXG5tbS9tZW1jb250cm9sLmMtNTQxMC0gKiBmb2xpb3Mgb24gdGhhdCBub2RlJ3MgTFJVIGxpc3RzIG1vdmUgdG8gdGhlIHBhcmVudCBhbmQgdGhhdCBub2RlJ3Mgb2JqY2cgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDE6MDYuMDkxMzA4NzA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NjAzNjkxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IENncm91cCBPZmZsaW5pbmcgQnVnZml4KipcblxuT2theSwgc28gdGhpcyBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZHVyaW5nIGEgbWVtb3J5IGNncm91cCdzIGRlc3RydWN0aW9uIG9yIG9mZmxpbmluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBjcml0aWNhbCBhcmVhIOKAkyB0aGUgdGVhcmRvd24gb2YgbWVtb3J5IHJlc291cmNlcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGZsYXc6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgd2Fzbid0IGJlaW5nIGNvcnJlY3RseSBwcm9wYWdhdGVkIHRvIHRoZSBjaGlsZCBjZ3JvdXAgZHVyaW5nIHRoaXMgb2ZmbGluaW5nLCB3aGljaCBtZWFucyB0aGUgTFJVIHNpemVzIHdlcmVuJ3QgZ2V0dGluZyB1cGRhdGVkIGNvcnJlY3RseSBvbiB0aGUgY2hpbGRyZW4sIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGFjY291bnRpbmcgb2YgbWVtb3J5IHV0aWxpemF0aW9uLiBUaGF0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgb2ZmbGluaW5nIHBhdGguXG5cbklzIHRoaXMgZnV6ei13b3J0aHk/IEFic29sdXRlbHkhIFRoaXMgaXMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2F1dGlvdXMuXG5cbk5vdywgd2hhdCBmdW5jdGlvbnMgYXJlIG1vc3QgcmVsZXZhbnQ/IEknZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2U6IGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIHRvIGNvbmZpcm0gaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBpdCBpcy4gVGhhdCdzIG5vdCB0b28gc3VycHJpc2luZyBnaXZlbiB0aGUgY29udGV4dCBvZiBpdCBiZWluZyBhIGNvcmUgY29tcG9uZW50LiBOb3csIGhvdyBhYm91dCBgbHJ1X3JlcGFyZW50X21lbWNnYD8gQWgsIGl0J3Mgbm9uLXN0YXRpYy4gTWFrZXMgc2Vuc2UsIGJlY2F1c2UgaXQncyByZXNwb25zaWJsZSBmb3IgTFJVIHVwZGF0ZXMgYW5kIG1heSBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cy4gTGFzdGx5LCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AsIGxldCdzIGNoZWNrIGl0IGluIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgcGxhbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBXZSBuZWVkIHRvIGJlIGVzcGVjaWFsbHkgY2FyZWZ1bCBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBwYXJlbnQgYW5kIGNoaWxkIGNncm91cHMgZHVyaW5nIG9mZmxpbmluZyB0byBlbnN1cmUgbWVtb3J5IGFjY291bnRpbmcgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyMiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MToxNC41NTE2ODA4MDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDYyNjI3MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwMT1ib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwMjp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzUzPXN0YXRpYyBpbmxpbmVcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1NDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzU1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTUtXFx0XFx0XFx0fVxcbm1tL21lbWNvbnRyb2wuYzoyOTY6XFx0XFx0XFx0bHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbm1tL21lbWNvbnRyb2wuYy0yOTctXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NTg4LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYy00NTkwLVxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYxOS1cXG5tbS92bXNjYW4uYzo0NjIwOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYyMS17XFxuLS1cXG5tbS92bXNjYW4uYy00NjMxLVxcdFxcdGZvciAodHlwZSA9IDA7IHR5cGUgXFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspXFxubW0vdm1zY2FuLmM6NDYzMjpcXHRcXHRcXHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xcbm1tL3Ztc2Nhbi5jLTQ2MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAzOjQxOjE1Ljk5Nzk0NzkwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc5MTU1NjY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMsIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBhbmQgYGxydV9yZXBhcmVudF9tZW1jZ2AsIGFyZW4ndCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHNwYXJrcyBhIHF1ZXN0aW9uIGFib3V0IGhvdyB0aGV5IGFyZSB1dGlsaXplZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRoYXQgdXN1YWxseSBpbXBsaWVzIHNvbWUgZXh0ZXJuYWwgYWNjZXNzIG9yIGNhbGwsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgZGVwZW5kZW5jaWVzIGlzIGtleS5cblxuKipEaXZpbmcgaW50byB0aGUgRGVwZW5kZW5jaWVzKipcblxuSSdtIHRoaW5raW5nLCBcIndoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWNlc3NhcnkgZm9yIHRoZXNlIGd1eXMgdG8gZXZlbiBleGlzdCBvciBmdW5jdGlvbj9cIiBgQ09ORklHX01FTUNHYCBmZWVscyBsaWtlIHRoZSBtb3N0IG9idmlvdXMgYW5kIGxpa2VseSBjYW5kaWRhdGUuIFRoYXQncyBhbG1vc3QgYSBnaXZlbiwgaXNuJ3QgaXQ/IFNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBzZWVtIGluaGVyZW50bHkgdGllZCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuXG5cblRvIGJlIGNlcnRhaW4sIGFuZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgbW0vZm9saW8uY2AgdG8gc2VlIGhvdyBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBhY3R1YWxseSB1c2VkLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXBzIGFuZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBleHRlbnQgb2YgdGhlaXIgaW1wYWN0IGFuZCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbXBvbmVudHMgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MjowNS43ODk1MDczMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTk4NDc2NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X3JlcGFyZW50X21lbWNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oPTQ2OT1zdGF0aWMgaW5saW5lIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ3Ni0jaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDc3OnZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDc4LSNlbmRpZlxcbi0tXFxubW0vZm9saW8uYz0xMTIwPXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcbi0tXFxubW0vZm9saW8uYy0xMTQ1LVxcbm1tL2ZvbGlvLmM6MTE0Njp2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vZm9saW8uYy0xMTQ3LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTctXFx0XFx0fSBlbHNlIHtcXG5tbS9tZW1jb250cm9sLmM6Mjk4OlxcdFxcdFxcdGxydV9yZXBhcmVudF9tZW1jZyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbm1tL21lbWNvbnRyb2wuYy0yOTktXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MjowOC42MDkzNTg5NDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNzQyMDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBscnVfZ2VuX3JlcGFyZW50X21lbWNnIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIGlzIGRlZmluaXRlbHkgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgaXMgYENPTkZJR19MUlVfR0VOYCByZWxhdGVkIHRvIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGRpZyBpbnRvLiBVbmRlcnN0YW5kaW5nIHRoYXQgZGVwZW5kZW5jeSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBmdW5jdGlvbiBpcyBkb2luZywgYW5kIHdoYXQgdHJpZ2dlcnMgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MjoxMi45MTY3ODE4MzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjQ3NzM5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwMT1ib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwMjp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzUzPXN0YXRpYyBpbmxpbmVcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1NDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzU1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNzc9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yOTUtXFx0XFx0XFx0fVxcbm1tL21lbWNvbnRyb2wuYzoyOTY6XFx0XFx0XFx0bHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbm1tL21lbWNvbnRyb2wuYy0yOTctXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NTg4LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYy00NTkwLVxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYxOS1cXG5tbS92bXNjYW4uYzo0NjIwOnZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDYyMS17XFxuLS1cXG5tbS92bXNjYW4uYy00NjMxLVxcdFxcdGZvciAodHlwZSA9IDA7IHR5cGUgXFx1MDAzYyBBTk9OX0FORF9GSUxFOyB0eXBlKyspXFxubW0vdm1zY2FuLmM6NDYzMjpcXHRcXHRcXHRfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCB6aWQsIHR5cGUpO1xcbm1tL3Ztc2Nhbi5jLTQ2MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAzOjQyOjE0LjM4MTU2MTA0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjA3MTM0MDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gc29tZXRoaW5nIG1lbW9yeS1yZWxhdGVkLCBhbmQgdGhlIGBtbXpvbmUuaGAgaGVhZGVyIGZpbGUgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHJlZ2lvbiBhcm91bmQgbGluZSA3MDIuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGtleSBmdW5jdGlvbnMgZm9yIHpvbmUgbWFuYWdlbWVudCBhcmUgZGVmaW5lZCBvciByZWZlcmVuY2VkLCB3aGljaCBpcyBpbXBvcnRhbnQgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIG9yZ2FuaXphdGlvbiB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSSdtIGhvcGluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBnb2luZyB3cm9uZyBieSBjaGVja2luZyBvdXQgdGhhdCBzcGVjaWZpYyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjc0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDM6MjAuNDUyOTA1MDQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5MDpcXHR2b2lkIGxydV9nZW5faW5pdF9wZ2RhdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTtcXG4gNjkxOlxcdHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbiA2OTI6XFx0Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0dm9pZCBscnVfZ2VuX2luaXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gNjk1OlxcdHZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIDY5NjpcXHR2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuIDY5NzpcXHR2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiA2OTg6XFx0dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gNjk5OlxcdHZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG4gNzAwOlxcdHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG4gNzAxOlxcdGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xcbiA3MDI6XFx0dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XFxuIDcwMzpcXHRcXG4gNzA0OlxcdCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbiA3MDU6XFx0XFxuIDcwNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuIDcwNzpcXHR7XFxuIDcwODpcXHR9XFxuIDcwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDM6NDM6MjAuNDUzMDMxMzMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjU4ODQ3NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTFJVIEdlbmVyYXRpb24gYW5kIE1lbWNnIFJlcGFyZW50aW5nIExvZ2ljKipcblxuT2theSwgc28gdGhlIHBhdGNoIGRvY3VtZW50YXRpb24gaW5kaWNhdGVzIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuIFRoYXQgbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gdGhpcyBpcyBhIGJpdCBjb25mdXNpbmcuIEl0IGxvb2tzIGxpa2UgYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgY2FsbGVkIHdoZW4gYGxydV9nZW5fZW5hYmxlZCgpYCBpcyAqZmFsc2UqLiBBbmQgdGhlbiwgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGxydV9nZW5fZW5hYmxlZCgpYCBpcyB0cnVlLiBJdCBzZWVtcyBsaWtlIGJvdGggYXJlIGJlaW5nIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2gsIHdoaWNoIHN1Z2dlc3RzIGFuIGludGVycGxheSBiZXR3ZWVuIHRoZSB0d28gZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbSBiZXR0ZXIuXG5cbkknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9mb2xpby5jYCBhcm91bmQgbGluZSAxMTIwLiBUaGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgbG9jYXRpb24gZm9yIHRoZSByZWxldmFudCBjb2RlLCBiYXNlZCBvbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZXNlIGNhbGxzIHRoZXJlLiBIb3BlZnVsbHkgdGhpcyB3aWxsIG1ha2UgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyBjbGVhcmVyLCBhbmQgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgc2Vuc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMzo0MzozNy4xMTE4ODE5MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZm9saW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTE1OlxcdFxcdH1cXG4xMTE2OlxcdFxcdGZiYXRjaC1cXHUwMDNlbnIgPSBqO1xcbjExMTc6XFx0fVxcbjExMTg6XFx0XFxuMTExOTpcXHQjaWZkZWYgQ09ORklHX01FTUNHXFxuMTEyMDpcXHRzdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4xMTIxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXFxuMTEyMjpcXHRcXHRcXHRcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IG5pZClcXG4xMTIzOlxcdHtcXG4xMTI0OlxcdFxcdGludCB6aWQ7XFxuMTEyNTpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4xMTI2OlxcdFxcbjExMjc6XFx0XFx0aWYgKGxydSAhPSBMUlVfVU5FVklDVEFCTEUpXFxuMTEyODpcXHRcXHRcXHRsaXN0X3NwbGljZV90YWlsX2luaXQoXFx1MDAyNmNoaWxkX2xydXZlYy1cXHUwMDNlbGlzdHNbbHJ1XSwgXFx1MDAyNnBhcmVudF9scnV2ZWMtXFx1MDAzZWxpc3RzW2xydV0pO1xcbjExMjk6XFx0XFxuMTEzMDpcXHRcXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSkge1xcbjExMzE6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcXG4xMTMyOlxcdFxcbjExMzM6XFx0XFx0XFx0aWYgKCFzaXplKVxcbjExMzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdFxcdC8qXFxuMTEzNzpcXHRcXHRcXHQgKiBUaGUgZm9saW9zIGFyZSBhY2NvdW50ZWQgdG8gdGhlIHBhcmVudCBmcm9tIG5vdyBvbiwgc28gdGhlXFxuMTEzODpcXHRcXHRcXHQgKiBzaXplIGhhcyB0byBiZSBtb3ZlZCwgbm90IGp1c3QgY29waWVkLiBMZWF2aW5nIGl0IGJlaGluZFxcbjExMzk6XFx0XFx0XFx0ICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy5cXG4xMTQwOlxcdFxcdFxcdCAqL1xcbjExNDE6XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbjExNDI6XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xcbjExNDM6XFx0XFx0fVxcbjExNDQ6XFx0fVxcbjExNDU6XFx0XFxuMTE0NjpcXHR2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuMTE0NzpcXHR7XFxuMTE0ODpcXHRcXHRlbnVtIGxydV9saXN0IGxydTtcXG4xMTQ5OlxcdFxcdHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgKnBhcmVudF9scnV2ZWM7XFxuMTE1MDpcXHRcXG4xMTUxOlxcdFxcdGNoaWxkX2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBOT0RFX0RBVEEobmlkKSk7XFxuMTE1MjpcXHRcXHRwYXJlbnRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMocGFyZW50LCBOT0RFX0RBVEEobmlkKSk7XFxuMTE1MzpcXHRcXG4xMTU0OlxcdFxcdGZvcl9lYWNoX2xydShscnUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAzOjQzOjM3LjExMTk3NDgyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY3ODYzODAxOTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTFJVIFJlcGFyZW50aW5nIGluIE1lbWNnKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgTFJVIHJlcGFyZW50aW5nIHdvcmtzIHdpdGhpbiB0aGUgbWVtY2cgZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGRpcmVjdGx5IHRpZWQgdG8gYENPTkZJR19NRU1DR2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2Agc2VlbXMgdG8gYmUgZ2F0ZWQgYnkgYENPTkZJR19MUlVfR0VOYCwgKmFuZCogSSBwcmVzdW1lLCBgQ09ORklHX01FTUNHYCBhcyB3ZWxsLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gR2l2ZW4gdGhhdCBjb250ZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgY3JpdGljYWwgbG9naWMgcmVzaWRlcy4gSSdsbCBoZWFkIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNDYyMC4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaXNzZWN0aW5nIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODowNC45NzU3ODAwOThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2MTU6XFx0XFx0XFx0XFx0X191cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1ICsgcGFyZW50X2xydV9hY3RpdmUsIHpvbmUsIG5yX3BhZ2VzKTtcXG40NjE2OlxcdFxcdFxcdH1cXG40NjE3OlxcdFxcdH1cXG40NjE4OlxcdH1cXG40NjE5OlxcdFxcbjQ2MjA6XFx0dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG40NjIxOlxcdHtcXG40NjIyOlxcdFxcdHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgKnBhcmVudF9scnV2ZWM7XFxuNDYyMzpcXHRcXHRpbnQgdHlwZSwgemlkO1xcbjQ2MjQ6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuNDYyNTpcXHRcXHRlbnVtIGxydV9saXN0IGxydTtcXG40NjI2OlxcdFxcbjQ2Mjc6XFx0XFx0Y2hpbGRfbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG40NjI4OlxcdFxcdHBhcmVudF9scnV2ZWMgPSBnZXRfbHJ1dmVjKHBhcmVudCwgbmlkKTtcXG40NjI5OlxcdFxcbjQ2MzA6XFx0XFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpXFxuNDYzMTpcXHRcXHRcXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxcbjQ2MzI6XFx0XFx0XFx0XFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcXG40NjMzOlxcdFxcbjQ2MzQ6XFx0XFx0Zm9yX2VhY2hfbHJ1KGxydSkge1xcbjQ2MzU6XFx0XFx0XFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIE5PREVfREFUQShuaWQpLCB6aWQsIE1BWF9OUl9aT05FUyAtIDEpIHtcXG40NjM2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCk7XFxuNDYzNzpcXHRcXG40NjM4OlxcdFxcdFxcdFxcdGlmICghc2l6ZSlcXG40NjM5OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjQ2NDA6XFx0XFxuNDY0MTpcXHRcXHRcXHRcXHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xcbjQ2NDI6XFx0XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbjQ2NDM6XFx0XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xcbjQ2NDQ6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODowNC45NzYyMjQwOThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyMDU0NTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIENvZGUgZm9yIE1lbWNnIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gRmlyc3QsIGxldCdzIHZlcmlmeSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZXZlbiBjb21waWxlZCBpbiB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQuIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBpdCBkb2VzLCBhbmQgaXQncyB0YWtpbmcgYSBgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYCBhcyBpdHMgaW5wdXQgd2hpY2ggc2VlbXMgbG9naWNhbC4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBjb25maXJtIHRoYXQgdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHYCBndWFyZCBpcyBwcmVzZW50IGFyb3VuZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiwganVzdCB0byBlbnN1cmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIFRoaXMgaXMganVzdCBiYXNpYyBkaWxpZ2VuY2UsIGJ1dCBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgdW5kZXIgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MDkuNTk2NzcyMDgyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ5OTg3MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmZGVmIENPTkZJR19NRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yMDM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDktXFxubW0vdm1zY2FuLmM6MjEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMTEtXFxuLS1cXG5tbS92bXNjYW4uYz0yNzQ0PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3NDctXFxubW0vdm1zY2FuLmM6Mjc0ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjc0OS1cXHRpZiAobWVtY2cpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5MDI9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MDgtXFxubW0vdm1zY2FuLmM6MjkwOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkxMC1cXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz0yOTQyPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTQ4LVxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZWxydV9nZW4ubGlzdCkpO1xcbm1tL3Ztc2Nhbi5jOjI5NDk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5NTAtXFx0Vk1fV0FSTl9PTl9PTkNFKG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5Njk9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NzctXFxubW0vdm1zY2FuLmM6Mjk3ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjk3OS1cXHRtZW1jZyA9IG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnO1xcbi0tXFxubW0vdm1zY2FuLmMtMzAwMS1cXG5tbS92bXNjYW4uYzozMDAyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDAzLVxcdG1lbV9jZ3JvdXBfcHV0KG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDctXFxubW0vdm1zY2FuLmM6MzAwODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzAwOS12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzODI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00NDI3LVxcbm1tL3Ztc2Nhbi5jOjQ0Mjg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTQ0MjktXFxuLS1cXG5tbS92bXNjYW4uYz01NjA1PXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NjE4LVxcbm1tL3Ztc2Nhbi5jOjU2MTk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTU2MjAtXFx0XFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9NTg3MT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg5MC1cXG5tbS92bXNjYW4uYzo1ODkxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01ODkyLVxcbi0tXFxubW0vdm1zY2FuLmM9Njc2OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MTEtXFxubW0vdm1zY2FuLmM6NjgxMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNjgxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MTAuOTQ2NzYzODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDg1MDMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIExSVSBHZW5lcmF0aW9uIGFuZCBNZW1DZyBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIGZ1bmN0aW9uLiBJIHNlZSBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYCNpZmRlZiBDT05GSUdfTUVNQ0dgIGF0IGxpbmUgNDQyOC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBpdCAqYWxzbyogcmVsaWVzIG9uIGBDT05GSUdfTFJVX0dFTmAuIEkgbmVlZCB0byBjb25maXJtIGlmIGl0IGhhcyBhIGRlcGVuZGVuY3kgb24gdGhlIExSVSBHZW5lcmF0aW9uIHN5c3RlbSwgb3IgaWYgaXQncyBjb21wbGV0ZWx5IGluZGVwZW5kZW50IHdpdGhpbiB0aGUgTWVtQ0cgY29udGV4dC4gTGV0J3MgZ28gYWhlYWQgYW5kIGNyb3NzLXJlZmVyZW5jZSBgbW0vdm1zY2FuLmNgIHRvIHNlYXJjaCBmb3IgYENPTkZJR19MUlVfR0VOYCBhbmQgY2xhcmlmeSB0aGF0IGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDM5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MTUuMTExNjE3MDY0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzNDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmRlZiBDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMi1cXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODM0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yNjkxLVxcbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtMjY5My1cXG5tbS92bXNjYW4uYz0yNjk0PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYy0yNjk2LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4OTktXFxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjkwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MTUuMTU2NTU3MTY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTU0NDQ1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBMUlUgR2VuZXJhdGlvbiBhbmQgTWVtY2cgUmVwYXJlbnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwgZm9yIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggTFJVIGdlbmVyYXRpb24gaXMgdml0YWwgZm9yIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudC4gTm93LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoZXJlIGlzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGRlZmluZWQ/IFJpZ2h0LCBpdCdzIGFjdHVhbGx5IGluIGBtbS9mb2xpby5jYC4gU28sIGlmIGBscnVfcmVwYXJlbnRfbWVtY2dgIGlzIGluIGBtbS9mb2xpby5jYCwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB1c2VzIGBDT05GSUdfTUVNQ0dgLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGZpbGUgYW5kIHNlZSBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gaW1wbGVtZW50YXRpb24uIFRoaXMgbWlnaHQgcHJvdmlkZSBmdXJ0aGVyIGluc2lnaHRzIGludG8gd2hldGhlciBhbmQgaG93IGBDT05GSUdfTFJVX0dFTmAgaXMgdXNlZCBpbiB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6MTkuMTcyMDAzNjk1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyMjQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmRlZiBDT05GSUdfTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZm9saW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9mb2xpby5jPTExMDc9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbi0tXFxubW0vZm9saW8uYy0xMTE4LVxcbm1tL2ZvbGlvLmM6MTExOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZm9saW8uYy0xMTIwLXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODoxOS4yMTgwMjgzNTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxMzk5MTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBQYXRocyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX01FTUNHYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50IGhlcmUuIE5vIHF1ZXN0aW9uIGFib3V0IGl0LiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYENPTkZJR19MUlVfR0VOYCBpcyBhbHNvIG5lY2Vzc2FyeS4gVGhlIHBhdGNoIHRvdWNoZXMgYm90aCBgbHJ1dmVjX3JlcGFyZW50X2xydWAgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCwgd2hpY2ggYXJlIHVzZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYGxydV9nZW5fZW5hYmxlZCgpYCBpcyB0cnVlIG9yIGZhbHNlLiBTaW5jZSB3ZSdyZSBtb2RpZnlpbmcgYm90aCBmdW5jdGlvbnMsIGZ1enppbmcgd2l0aCBqdXN0IGBDT05GSUdfTUVNQ0dgIHNob3VsZCBiZSBlbm91Z2ggdG8gZXhlcmNpc2UgdGhlIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YCBwYXJ0LiBCdXQsIHRvIGhpdCB0aGUgb3RoZXIgcGF0aCwgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgLCB3ZSBuZWVkIGBDT05GSUdfTFJVX0dFTmAgZW5hYmxlZCBhcyB3ZWxsLiBCZXN0IHRvIGluY2x1ZGUgYm90aCBmb3IgZnVsbCBjb3ZlcmFnZS5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgbHJ1X3JlcGFyZW50X21lbWNnYCBpcyBldmVuIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UuIEFoLCB5ZXMsIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIG1lbW9yeSBjZ3JvdXBzIOKAkyB0aGF0J3MgdGhlIGtleS4gVGhhdCdzIGEgY2xhc3NpYyBzeXprYWxsZXIgdGFyZ2V0LCBzbyB0aGF0J3MgZ29vZCBuZXdzLlxuXG5UaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBscnVfcmVwYXJlbnRfbWVtY2dgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuXG5cbldhaXQsIGlzIGBscnVfcmVwYXJlbnRfbWVtY2dgIGV4cG9ydGVkIG9yIGp1c3Qgbm90IHN0YXRpYz8gSXQncyBub3Qgc3RhdGljLiBPa2F5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gT2gsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBpcyBzdGF0aWMsIGJ1dCB0aGF0J3MganVzdCBhIGNhbGxlci4gU28sIEknbGwganVzdCB1c2UgYGxydV9yZXBhcmVudF9tZW1jZ2AgYW5kIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBhcyB0aGUgdGFyZ2V0cy5cblxuRmluYWxseSwgSSBuZWVkIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGxydV9yZXBhcmVudF9tZW1jZ2AgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGBscnV2ZWNfcmVwYXJlbnRfbHJ1YC4gSnVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODoyNS44MzIwMjI4NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMDM3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1dmVjX3JlcGFyZW50X2xydVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9mb2xpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MTEwNz12b2lkIGZvbGlvX2JhdGNoX3JlbW92ZV9leGNlcHRpb25hbHMoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9mb2xpby5jLTExMTktI2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2ZvbGlvLmM6MTEyMDpzdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG5tbS9mb2xpby5jLTExMjEtXFx0XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL2ZvbGlvLmM9MTE0Nj12b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS9mb2xpby5jLTExNTQtXFx0Zm9yX2VhY2hfbHJ1KGxydSlcXG5tbS9mb2xpby5jOjExNTU6XFx0XFx0bHJ1dmVjX3JlcGFyZW50X2xydShjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIGxydSwgbmlkKTtcXG5tbS9mb2xpby5jLTExNTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODoyNS44NzgyMzYwNTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNTgxODQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBscnVfcmVwYXJlbnRfbWVtY2dgIGFuZCBgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnYCoqXG5cblJpZ2h0LCBzbyBgbHJ1X3JlcGFyZW50X21lbWNnYCBzZWVtcyB0byBiZSB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIGl0LiBUaGF0J3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncy4gTm93LCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgYWJvdXQgdGhhdCwgc28gbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AgaXMgaW5kZWVkIHRoZSAqc29sZSogY2FsbGVyIG9mIGBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2dgLiBObyBzZW5zZSBpbiBtYWtpbmcgYXNzdW1wdGlvbnMsIGV2ZW4gaWYgdGhlIGNvZGUgaW5pdGlhbGx5IHN1Z2dlc3RzIHRoYXQuIE5lZWQgdG8gYmUgY2VydGFpbiB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBlZGdlIGNhc2VzIGx1cmtpbmcgYXJvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA1OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjI5LjkwNDA1NzIyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NDc2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19scnVfZ2VuX3JlcGFyZW50X21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ1NDg9dm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NTg4LSAqL1xcbm1tL3Ztc2Nhbi5jOjQ1ODk6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYy00NTkwLVxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbi0tXFxubW0vdm1zY2FuLmM9NDYyMD12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDYzMS1cXHRcXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxcbm1tL3Ztc2Nhbi5jOjQ2MzI6XFx0XFx0XFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcXG5tbS92bXNjYW4uYy00NjMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODoyOS45NDk3MTMxMDdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5NDc3Mjg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBNZW1vcnkgQ29udHJvbCBHcm91cCBSZXBhcmVudGluZyoqXG5cbk9rYXksIHNvIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCBpcyB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIHRoZSByZXBhcmVudGluZyBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNpbmcgbXkgYW5hbHlzaXMuIEdpdmVuIHRoYXQsIG15IHByaW1hcnkgYXJlYXMgb2YgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmUgY2VudGVyZWQgYXJvdW5kOlxuXG4qICAgYGxydV9yZXBhcmVudF9tZW1jZ2AgKHRoZSB0YXJnZXQgb2YgdGhlIGNhbGwpXG4qICAgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgICh0aGUgY2FsbGVyLCBvYnZpb3VzbHkpXG5cbk5vdywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgd2lsbCBiZSBpbXBhY3RpbmcgdGhpcyBjb2RlIHBhdGguIFNwZWNpZmljYWxseSwgYE1FTUNHYCBhbmQgYExSVV9HRU5gLiBCdXQgd2FpdC4uLiBpcyBgTFJVX0dFTmAgdGhlICphY3R1YWwqIGNvbmZpZyBzeW1ib2w/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIHZlcmlmeSB0aGUgZXhhY3QgY29uZmlnIG5hbWVzIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODozNy4yNDQ0ODg5MDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTM5NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkzPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwNDpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNS1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEyLVxcbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDE0LVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE4LVxcbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyMC1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjctXFxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjM3LjI5MTAzNjU5MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk4MTc2OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBMUlVfR0VOYCBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgYExSVV9HRU5gIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGNvbmZpZyBuYW1lOyBJJ20gc2F0aXNmaWVkIHdpdGggdGhhdC5cblxuTm93LCBsZXQncyB1bnBhY2sgdGhlIGZ1enppbmcgcmF0aW9uYWxlLiBUaGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGJlaGF2ZXMgd2l0aCByZWdhcmQgdG8gTFJVIHNpemUgYWNjb3VudGluZyB3aGVuIGEgY2hpbGQgbWVtY2cgZGllcyBhbmQgaXMgcmVwYXJlbnRlZC4gSW5zdGVhZCBvZiBtZXJlbHkgY29weWluZyB0aGUgTFJVIHNpemUsIGl0IG5vdyBjb3JyZWN0bHkgbW92ZXMgaXQgdG8gdGhlIHBhcmVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW504oCUc3BlY2lmaWNhbGx5LCBtZW1jZy4gV2Uga25vdyB0aGlzIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdGhlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBvZiBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggbWFrZXMgaXQgYSBjcml0aWNhbCBhbmQgcmVhY2hhYmxlIHBhdGggZm9yIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHVuY292ZXJpbmcgc3VidGxlIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLCBlc3BlY2lhbGx5IHdpdGggZWRnZSBjYXNlcyBpbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuQmVmb3JlIEkgZ28gdG9vIGZhciwgSSBzaG91bGQganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgbmVlZGVkLCBhbnkgcG90ZW50aWFsIGNvbmZpZyBkZXBlbmRlbmNpZXMuLi4gTGV0IG1lIHNlZS4uLiBgTUVNQ0dgIGRvZXNuJ3Qgc2VlbSB0byBkZXBlbmQgb24gYW55dGhpbmcgdW51c3VhbCwgc28gd2Ugc2hvdWxkIGJlIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjQxLjk4OTIxNTc0N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NzU0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODo0Mi4wMzM5OTY0NzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4MDk0ODg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBNRU1DRydzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBNRU1DR2AgcmVsaWVzIG9uIGBDR1JPVVBTYC4gVGhhdCdzIGEgZnVuZGFtZW50YWwgYXNzdW1wdGlvbiwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gaXQuIEJlc3QgcGxhY2UgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcyBsaWtlIHRoZXNlIGlzIHVzdWFsbHkgYGluaXQvS2NvbmZpZ2AuIExldCdzIG5hdmlnYXRlIHRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgYGNvbmZpZyBNRU1DR2AgcmV2ZWFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBhdCBhIGNvbmZpZ3VyYXRpb24gbGV2ZWwuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHNob3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6NDYuNzE0OTQ3ODg2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MDpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwODE6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDg0OlxcdFxcbjEwODU6XFx0Y29uZmlnIE1FTUNHXFxuMTA4NjpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDg3OlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDg4OlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4OTpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA5MDpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDkxOlxcdFxcdGhlbHBcXG4xMDkyOlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjQ2LjcxNTA2ODAxN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODIxNTU0NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIG5hdmlnYXRpbmcgdGhpcyBjb25maWd1cmF0aW9uIG1hemUgYW5kIGl0IGxvb2tzIGxpa2UgYE1FTUNHYCBpcyBuZXN0ZWQgd2l0aGluIGBtZW51Y29uZmlnIENHUk9VUFNgLCByaWdodD8gVGhhdCdzIGZhaXJseSBzdGFuZGFyZCwgc28gaXQncyBhIHNhZmUgYmV0IHRoYXQgYENHUk9VUFNgIGlzIGEgcHJlcmVxdWlzaXRlIGhlcmUuIE5vdywgc2luY2UgSSdtIGhlcmUsIG1pZ2h0IGFzIHdlbGwgaW5jbHVkZSBib3RoIGBNRU1DR2AgYW5kIGBMUlVfR0VOYC4gIFRoZXkgbGlrZWx5IHBsYXkgbmljZWx5IHRvZ2V0aGVyIGluIHRoaXMgY29udGV4dC4gQW5kIEkgYmVsaWV2ZSB0aGF0IGNvdmVycyB0aGUgcHJlcmVxdWlzaXRlcy5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGFwcGx5IHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxMiwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjUxLjUzNjYyNTAzOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDMxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9yZXBhcmVudF9tZW1jZ1wiLFxuICAgIFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgb2ZmbGluaW5nIGxvZ2ljIHRvIHByb3Blcmx5IG1vdmUgTFJVIHNpemUgYWNjb3VudGluZyBmcm9tIGEgZHlpbmcgY2hpbGQgbWVtY2cgdG8gaXRzIHBhcmVudCwgaW5zdGVhZCBvZiBqdXN0IGNvcHlpbmcgaXQuIFRoaXMgcHJldmVudHMgdGhlIGNoaWxkIG1lbWNnIGZyb20gcmV0YWluaW5nIG5vbi16ZXJvIExSVSBzaXplcyBhZnRlciByZXBhcmVudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbWNnKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgbWVtb3J5IGNncm91cHMsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGFuZCBpbXBvcnRhbnQgcGF0aCB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X3JlcGFyZW50X21lbWNnXCIsXG4gICAgXCJscnVfZ2VuX3JlcGFyZW50X21lbWNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBvZmZsaW5pbmcgbG9naWMgdG8gcHJvcGVybHkgbW92ZSBMUlUgc2l6ZSBhY2NvdW50aW5nIGZyb20gYSBkeWluZyBjaGlsZCBtZW1jZyB0byBpdHMgcGFyZW50LCBpbnN0ZWFkIG9mIGp1c3QgY29weWluZyBpdC4gVGhpcyBwcmV2ZW50cyB0aGUgY2hpbGQgbWVtY2cgZnJvbSByZXRhaW5pbmcgbm9uLXplcm8gTFJVIHNpemVzIGFmdGVyIHJlcGFyZW50aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtY2cpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggaXMgYSByZWFjaGFibGUgYW5kIGltcG9ydGFudCBwYXRoIHRvIGZ1enouXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjA4OjUxLjYwOTA2MjQ2OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MTE0OTA4MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDQ6MDg6NTEuNjA5NDk4OTU4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4ODExNDQ2NzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWVtb3J5IGNncm91cCBMUlUgc2l6ZSByZXBhcmVudGluZyBieSBzdWJ0cmFjdGluZyB0aGUgbW92ZWQgc2l6ZSBmcm9tIHRoZSBjaGlsZCBscnV2ZWMuIFRoaXMgcHJldmVudHMgdGhlIGR5aW5nIGNoaWxkIGZyb20gZGVzY3JpYmluZyBmb2xpb3MgaXQgbm8gbG9uZ2VyIG93bnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIGFjY291bnRpbmcgdXBkYXRlcywgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDZlZDQwMjhhYTFjODY2YWEwN2RmNzRjZjZjNGIyY2RkOGQ5NDBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDM6Mzk6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTljNDc3MTIwYjlhOC4uYzAyZGNlYTljMDNjMiAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbisrKyBiL21tL2ZvbGlvLmNcbkBAIC0xMTMwLDcgKzExMzAsMTYgQEAgc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4gXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgTk9ERV9EQVRBKG5pZCksIHppZCwgTUFYX05SX1pPTkVTIC0gMSkge1xuIFx0XHR1bnNpZ25lZCBsb25nIHNpemUgPSBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQpO1xuIFxuK1x0XHRpZiAoIXNpemUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBmb2xpb3MgYXJlIGFjY291bnRlZCB0byB0aGUgcGFyZW50IGZyb20gbm93IG9uLCBzbyB0aGVcbitcdFx0ICogc2l6ZSBoYXMgdG8gYmUgbW92ZWQsIG5vdCBqdXN0IGNvcGllZC4gTGVhdmluZyBpdCBiZWhpbmRcbitcdFx0ICogbWFrZXMgdGhlIGR5aW5nIGNoaWxkIGRlc2NyaWJlIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy5cbitcdFx0ICovXG4gXHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbitcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmZTdmMGM1MmExOGMwLi41NjFlZWVjNTYyOGNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDYzNSw3ICs0NjM1LDEyIEBAIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXG4gXHRcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBOT0RFX0RBVEEobmlkKSwgemlkLCBNQVhfTlJfWk9ORVMgLSAxKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkKTtcbiBcbitcdFx0XHRpZiAoIXNpemUpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xuIFx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbitcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG4gXHRcdH1cbiBcdH1cbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwNDowODo1MS42MDk0OTk3NzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg4MTE0NDQ3NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIExSVSBTaXplIEFjY291bnRpbmcgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIGluIG1lbW9yeSBjZ3JvdXAgTFJVIHNpemUgYWNjb3VudGluZyBkdXJpbmcgcmVwYXJlbnRpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gYGxydXZlY19yZXBhcmVudF9scnVgIGFuZCBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AuIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdGhlIGFkZGl0aW9uIG9mIGBpZiAoIXNpemUpIGNvbnRpbnVlO2AgYW5kIHRoZW4gZGVjcmVtZW50aW5nIHRoZSBjaGlsZCBscnV2ZWMgc2l6ZSB1c2luZyBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLiBUaGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY29ycmVjdGlvbiB0byBob3cgTFJVIHNpemVzIGFyZSB0cmFja2VkIHdoZW4gbWVtb3J5IGlzIGJlaW5nIG1vdmVkIGJldHdlZW4gY2dyb3Vwcy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGZpeCBpcyB0YXJnZXRlZCBhdCBwb3RlbnRpYWwgdW5kZXJmbG93cyBvciBpbmZpbml0ZSBsb29wcyB0aGF0IGNvdWxkIHRyaWdnZXIgaW5jb3JyZWN0IHJlY2xhaW0gYmVoYXZpb3IuIEZyb20gdGhlIGRlc2NyaXB0aW9uLCB0aGUgYnVnIGxpZXMgaW4gcG90ZW50aWFsbHkgaW5jb3JyZWN0IExSVSBzaXplcy4gVGhhdCByaW5ncyB0cnVlLiBUaGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgY291bGQgYmUgY2F1Z2h0IHdpdGggb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiBvciB0aGUgc3RhbmRhcmQgY2hlY2tzLCBsaWtlIHBhZ2UgYWxsb2NhdG9yIGNoZWNrcywgb3IgVk1fQlVHX09OLCBidXQgS01TQU4sIHNwZWNpZmljYWxseSwgaXNuJ3QgZ29pbmcgdG8gYmUgdHJpcHBlZCB1cCBoZXJlLiBUaGVyZSdzIG5vdGhpbmcgaW4gdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mbyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlZm9yZSwgdGhlcmUncyBubyBpbW1lZGlhdGUgcmlzayBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgZ2l2ZW4gbXkgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEl0J3MgYSBjbGVhbiBmaXggd2l0aCBubyBvYnZpb3VzIEtNU0FOIGNvbmNlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgxLCJPdXRwdXRUb2tlbnMiOjExNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA0OjExOjU5LjcyMzk1MDc3N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gYWNjb3VudGluZyBidWcgaW4gbWVtb3J5IGNncm91cCBMUlUgc2l6ZSByZXBhcmVudGluZyBieSBzdWJ0cmFjdGluZyB0aGUgbW92ZWQgc2l6ZSBmcm9tIHRoZSBjaGlsZCBscnV2ZWMuIFRoaXMgcHJldmVudHMgdGhlIGR5aW5nIGNoaWxkIGZyb20gZGVzY3JpYmluZyBmb2xpb3MgaXQgbm8gbG9uZ2VyIG93bnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgc2ltcGxlIGFyaXRobWV0aWMgYW5kIGFjY291bnRpbmcgdXBkYXRlcywgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBhY2NvdW50aW5nIGJ1ZyBpbiBtZW1vcnkgY2dyb3VwIExSVSBzaXplIHJlcGFyZW50aW5nIGJ5IHN1YnRyYWN0aW5nIHRoZSBtb3ZlZCBzaXplIGZyb20gdGhlIGNoaWxkIGxydXZlYy4gVGhpcyBwcmV2ZW50cyB0aGUgZHlpbmcgY2hpbGQgZnJvbSBkZXNjcmliaW5nIGZvbGlvcyBpdCBubyBsb25nZXIgb3ducy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBzaW1wbGUgYXJpdGhtZXRpYyBhbmQgYWNjb3VudGluZyB1cGRhdGVzLCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx8mww[1] Phase: Succeeded StartedAt: 2026-08-22 04:12:05 +0000 UTC FinishedAt: 2026-08-22 04:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 04:12:05 +0000 UTC FinishedAt: 2026-08-22 04:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2] Phase: Succeeded StartedAt: 2026-08-22 04:12:05 +0000 UTC FinishedAt: 2026-08-22 07:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 04:12:05 +0000 UTC FinishedAt: 2026-08-22 07:57:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 04:12:05 +0000 UTC FinishedAt: 2026-08-22 04:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 04:12:05 +0000 UTC FinishedAt: 2026-08-22 04:12:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowx8mww/series-workflowx8mww-convert-artifact-19187756/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 04:12:15 +0000 UTC FinishedAt: 2026-08-22 04:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 04:12:15 +0000 UTC FinishedAt: 2026-08-22 04:29:05 +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:*6e998b26-0e90-4613-8612-e314cfd14e0a,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-workflowx8mww/series-workflowx8mww-convert-artifact-19187756/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": "b1eea2d8-5782-46ed-835d-6e73355a3176", "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-workflowx8mww/series-workflowx8mww-build-action-3404189274/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 04:12:15 +0000 UTC FinishedAt: 2026-08-22 04:28:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6e998b26-0e90-4613-8612-e314cfd14e0a,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-workflowx8mww/series-workflowx8mww-convert-artifact-19187756/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": "b1eea2d8-5782-46ed-835d-6e73355a3176", "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-workflowx8mww/series-workflowx8mww-build-action-3404189274/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 04:29:05 +0000 UTC FinishedAt: 2026-08-22 04:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 04:29:05 +0000 UTC FinishedAt: 2026-08-22 04:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 04:29:05 +0000 UTC FinishedAt: 2026-08-22 04:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 04:29:05 +0000 UTC FinishedAt: 2026-08-22 04:29:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowx8mww/series-workflowx8mww-convert-artifact-2891166955/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 04:29:15 +0000 UTC FinishedAt: 2026-08-22 04:31:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 04:29:15 +0000 UTC FinishedAt: 2026-08-22 04:31:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1eea2d8-5782-46ed-835d-6e73355a3176,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-workflowx8mww/series-workflowx8mww-build-action-3404189274/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-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 04:31:28 +0000 UTC FinishedAt: 2026-08-22 04:31:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 04:31:28 +0000 UTC FinishedAt: 2026-08-22 04:31:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 04:31:28 +0000 UTC FinishedAt: 2026-08-22 04:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 04:31:28 +0000 UTC FinishedAt: 2026-08-22 04:48:10 +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:*6e998b26-0e90-4613-8612-e314cfd14e0a,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-workflowx8mww/series-workflowx8mww-convert-artifact-2891166955/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": "4f613406-bf01-476a-a5e4-77e1bd9f58e3", "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-workflowx8mww/series-workflowx8mww-build-action-176747023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 04:31:28 +0000 UTC FinishedAt: 2026-08-22 04:48:00 +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:*6e998b26-0e90-4613-8612-e314cfd14e0a,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-workflowx8mww/series-workflowx8mww-convert-artifact-2891166955/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": "4f613406-bf01-476a-a5e4-77e1bd9f58e3", "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-workflowx8mww/series-workflowx8mww-build-action-176747023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 04:48:10 +0000 UTC FinishedAt: 2026-08-22 04:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 04:48:10 +0000 UTC FinishedAt: 2026-08-22 04:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 04:48:10 +0000 UTC FinishedAt: 2026-08-22 04:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 04:48:10 +0000 UTC FinishedAt: 2026-08-22 04:49:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f613406-bf01-476a-a5e4-77e1bd9f58e3,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-workflowx8mww/series-workflowx8mww-build-action-176747023/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-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 04:50:06 +0000 UTC FinishedAt: 2026-08-22 07:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 04:50:06 +0000 UTC FinishedAt: 2026-08-22 07:57:07 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},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:*b1eea2d8-5782-46ed-835d-6e73355a3176,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f613406-bf01-476a-a5e4-77e1bd9f58e3,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-workflowx8mww/series-workflowx8mww-build-action-3404189274/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-workflowx8mww/series-workflowx8mww-build-action-176747023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 04:50:06 +0000 UTC FinishedAt: 2026-08-22 04:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 04:50:06 +0000 UTC FinishedAt: 2026-08-22 04:50:11 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},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-workflowx8mww/series-workflowx8mww-convert-artifact-4000018180/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 04:50:06 +0000 UTC FinishedAt: 2026-08-22 04:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 04:50:06 +0000 UTC FinishedAt: 2026-08-22 04:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 04:50:06 +0000 UTC FinishedAt: 2026-08-22 04:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 04:50:17 +0000 UTC FinishedAt: 2026-08-22 07:57:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx8mww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_reparent_memcg","lru_gen_reparent_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"903c1cf6dff9964e71eda98a39e2e5d442050472","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN"],"series_id":"fdfbab82-b839-4345-ba4a-a144db0658fc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 04:50:17 +0000 UTC FinishedAt: 2026-08-22 07:56:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1eea2d8-5782-46ed-835d-6e73355a3176,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f613406-bf01-476a-a5e4-77e1bd9f58e3,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-workflowx8mww/series-workflowx8mww-build-action-3404189274/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-workflowx8mww/series-workflowx8mww-build-action-176747023/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-workflowx8mww/series-workflowx8mww-convert-artifact-4000018180/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,}