Name: series-workflowjsn6s Phase: Succeeded StartedAt: 2026-08-26 08:02:09 +0000 UTC FinishedAt: 2026-08-26 12:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[0] Phase: Succeeded StartedAt: 2026-08-26 08:02:09 +0000 UTC FinishedAt: 2026-08-26 08:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 08:02:09 +0000 UTC FinishedAt: 2026-08-26 08:36:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e366c15e1610ef11d0717ecd875ae63050282676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e366c15e1610ef11d0717ecd875ae63050282676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "f129603d-b433-415f-945b-025f8881fee1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "workingset_eviction", "workingset_test_recent", "workingset_refault" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dvcmtpbmdzZXRfZXZpY3Rpb24mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgTFJVIGdlbmVyYXRpb24gd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWRqdXN0aW5nIGhvdyBzaGFkb3cgdG9rZW5zIGFyZSBwYWNrZWQgYW5kIHVucGFja2VkIHRvIGluY2x1ZGUgZXZpY3Rpb24gdGltZXN0YW1wcyBhbmQgc2VxdWVuY2UgbnVtYmVycy4gQWxsIG5ldyB2YXJpYWJsZXMgaW50cm9kdWNlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdGF0ZSAoZS5nLiwgYGppZmZpZXNgLCBgdG9rZW5gLCBgbHJ1Z2VuLVx1MDAzZW1heF9zZXFgKSBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2Q1ODUyMDkyNzJkODdlZTk3MzE4NzU5NTU2YjNlZTFhYTc3NTFlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjI1OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggMDdlNjgzNmQwNTAyMC4uZTU1ZTVhNzVhY2I5ZiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtMTk5LDYgJiM0MzsxOTksMjggQEBcbiAgKi9cbiBzdGF0aWMgdW5zaWduZWQgaW50IGJ1Y2tldF9vcmRlcltBTk9OX0FORF9GSUxFXSBfX3JlYWRfbW9zdGx5O1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU5cbiYjNDM7LypcbiYjNDM7ICogTFJVX0dFTiBzaGFkb3cgdG9rZW4gbGF5b3V0IHdpdGhpbiB0aGUgZXZpY3Rpb24gZmllbGQgKGxvdyB0byBoaWdoKTpcbiYjNDM7ICogICBMUlVfUkVGU19XSURUSCBiaXRzOiByZWZzXG4mIzQzOyAqICAgRVZJQ1RfU0VRX1dJRFRIIGJpdHM6IG1pbl9zZXFcbiYjNDM7ICogICBFVklDVF9UU19XSURUSCBiaXRzOiBldmljdGlvbiB0aW1lIGluIGppZmZpZXNcbiYjNDM7ICpcbiYjNDM7ICogU2l6ZSB0aGUgbGF5b3V0IGZvciB0aGUgdGlnaHRlciBhbm9uIG1hc2sgc28gdGhlIHRva2VuIGZpdHMgYm90aCBmaWxlIGFuZFxuJiM0MzsgKiBhbm9uIHNoYWRvd3MuIEtlZXAgYXQgbGVhc3QgMTYgYml0cyBmb3IgbWluX3NlcSBzbyB0aGUgc2FtZS1scnV2ZWMgcmVjZW5jeVxuJiM0MzsgKiBjaGVjayBkb2VzIG5vdCB3cmFwIGF0IHRoZSBtdWNoIHNob3J0ZXIgTFJVX0dFTl9XSURUSCBpbnRlcnZhbC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRVZJQ1RJT05fQklUU1x0XHQoQklUU19QRVJfTE9ORyAtIEVWSUNUSU9OX1NISUZUX0FOT04pXG4mIzQzOyNkZWZpbmUgRVZJQ1RfUEFZTE9BRF9CSVRTXHQoRVZJQ1RJT05fQklUUyAtIExSVV9SRUZTX1dJRFRIKVxuJiM0MzsjZGVmaW5lIEVWSUNUX1RTX1dJRFRIXHRcdChFVklDVF9QQVlMT0FEX0JJVFMgXHUwMDNlIDQwID8gMjQgOiBcXFxuJiM0MztcdFx0XHRcdCBFVklDVF9QQVlMT0FEX0JJVFMgXHUwMDNlIDE2ID8gXFxcbiYjNDM7XHRcdFx0XHQgRVZJQ1RfUEFZTE9BRF9CSVRTIC0gMTYgOiAwKVxuJiM0MzsjZGVmaW5lIEVWSUNUX1NFUV9XSURUSFx0XHQoRVZJQ1RfUEFZTE9BRF9CSVRTIC0gRVZJQ1RfVFNfV0lEVEgpXG4mIzQzOyNkZWZpbmUgRVZJQ1RfVFNfUEdPRkZcdFx0KExSVV9SRUZTX1dJRFRIICYjNDM7IEVWSUNUX1NFUV9XSURUSClcbiYjNDM7I2RlZmluZSBFVklDVF9TRVFfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgRVZJQ1RfU0VRX1dJRFRIKSAtIDEpXG4mIzQzOyNkZWZpbmUgRVZJQ1RfVFNfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgRVZJQ1RfVFNfV0lEVEgpIC0gMSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyB2b2lkICpwYWNrX3NoYWRvdyhpbnQgbWVtY2dpZCwgcGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBldmljdGlvbixcbiBcdFx0XHQgYm9vbCB3b3JraW5nc2V0LCBib29sIGZpbGUpXG4ge1xuQEAgLTI1MCwxMyAmIzQzOzI3MiwxOSBAQCBzdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0QlVJTERfQlVHX09OKExSVV9HRU5fV0lEVEggJiM0MzsgTFJVX1JFRlNfV0lEVEggXHUwMDNlXG4gXHRcdCAgICAgQklUU19QRVJfTE9ORyAtIG1heChFVklDVElPTl9TSElGVCwgRVZJQ1RJT05fU0hJRlRfQU5PTikpO1xuJiM0MztcdEJVSUxEX0JVR19PTihFVklDVF9UU19XSURUSCBcdTAwM2M9IDApO1xuJiM0MztcdEJVSUxEX0JVR19PTihFVklDVF9TRVFfV0lEVEggXHUwMDNjIDE2KTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfV0lEVEggJiM0MzsgRVZJQ1RfU0VRX1dJRFRIICYjNDM7XG4mIzQzO1x0XHQgICAgIEVWSUNUX1RTX1dJRFRIICE9IEVWSUNUSU9OX0JJVFMpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuIFx0bHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdG1pbl9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dG9rZW4gPSAobWluX3NlcSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHwgbWF4KHJlZnMgLSAxLCAwKTtcbiYjNDM7XHR0b2tlbiA9ICgobWluX3NlcSBcdTAwMjYgRVZJQ1RfU0VRX01BU0spIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19XSURUSCkgfFxuJiM0MztcdFx0bWF4KHJlZnMgLSAxLCAwKTtcbiYjNDM7XHR0b2tlbiB8PSAoamlmZmllcyBcdTAwMjYgRVZJQ1RfVFNfTUFTSykgXHUwMDNjXHUwMDNjIEVWSUNUX1RTX1BHT0ZGO1xuIFxuIFx0aGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKG1pbl9zZXEpO1xuIFx0YXRvbWljX2xvbmdfYWRkKGRlbHRhLCBcdTAwMjZscnVnZW4tXHUwMDNlZXZpY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7XG5AQCAtMjc1LDE4ICYjNDM7MzAzLDIxIEBAIHN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxuIHtcbiBcdGludCBtZW1jZ19pZDtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRva2VuX3NlcTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4gXG4mIzQzO1x0KHZvaWQpZmlsZTtcbiYjNDM7XG4gXHR1bnBhY2tfc2hhZG93KHNoYWRvdywgXHUwMDI2bWVtY2dfaWQsIFx1MDAyNnBnZGF0LCB0b2tlbiwgd29ya2luZ3NldCk7XG4gXG4gXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnX2lkKTtcbiBcdCpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuIFxuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgoKmxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0bWF4X3NlcSBcdTAwMjY9IChmaWxlID8gRVZJQ1RJT05fTUFTSyA6IEVWSUNUSU9OX01BU0tfQU5PTikgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1dJRFRIO1xuJiM0MztcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKSBcdTAwMjYgRVZJQ1RfU0VRX01BU0s7XG4mIzQzO1x0dG9rZW5fc2VxID0gKCp0b2tlbiBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEgpIFx1MDAyNiBFVklDVF9TRVFfTUFTSztcbiBcbi1cdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCAqdG9rZW4gXHUwMDNlXHUwMDNlIExSVV9SRUZTX1dJRFRIKSBcdTAwM2MgTUFYX05SX0dFTlM7XG4mIzQzO1x0cmV0dXJuIGFic19kaWZmKG1heF9zZXEsIHRva2VuX3NlcSkgXHUwMDNjIE1BWF9OUl9HRU5TO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuQEAgLTI5NSw3ICYjNDM7MzI2LDEwIEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpbnQgaGlzdCwgdGllciwgcmVmcztcbiBcdGJvb2wgd29ya2luZ3NldDtcbiBcdHVuc2lnbmVkIGxvbmcgdG9rZW47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBldmljdF90cywgcmVmYXVsdF9kaXN0YW5jZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsIG1pZGRsZV9zZXEsIGJpcnRoLCB3aW5kb3dfYWdlO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuJiM0MztcdHN0cnVjdCBscnV2ZWMgKmRzdF9scnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuO1xuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMzAzLDggJiM0MzszMzcsMjcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbiBcdHJlY2VudCA9IGxydV9nZW5fdGVzdF9yZWNlbnQoc2hhZG93LCBcdTAwMjZscnV2ZWMsIFx1MDAyNnRva2VuLCBcdTAwMjZ3b3JraW5nc2V0LCB0eXBlKTtcbi1cdGlmIChscnV2ZWMgIT0gZm9saW9fbHJ1dmVjKGZvbGlvKSlcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0ZHN0X2xydXZlYyA9IGZvbGlvX2xydXZlYyhmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmIChscnV2ZWMgIT0gZHN0X2xydXZlYykge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIG1pbl9zZXEgdmFsdWVzIGZyb20gZGlmZmVyZW50IGxydXZlY3MgYXJlIG5vdCBjb21wYXJhYmxlLlxuJiM0MztcdFx0ICogSnVkZ2UgYSBjcm9zcy1tZW1jZyByZWZhdWx0IGJ5IHdoZXRoZXIgaXQgaGFwcGVuZWQgd2l0aGluXG4mIzQzO1x0XHQgKiB0aGUgYWdlIG9mIHRoZSBtaWRkbGUgZ2VuZXJhdGlvbiBpbiB0aGUgZGVzdGluYXRpb25cbiYjNDM7XHRcdCAqIGxydXZlYyYjMzk7cyBNQVhfTlJfR0VOUyB3aW5kb3cuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGxydXZlYyA9IGRzdF9scnV2ZWM7XG4mIzQzO1x0XHRscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuJiM0MztcdFx0bWF4X3NlcSA9IFJFQURfT05DRShscnVnZW4tXHUwMDNlbWF4X3NlcSk7XG4mIzQzO1x0XHRtaWRkbGVfc2VxID0gbWF4X3NlcSAtIE1BWF9OUl9HRU5TIC8gMjtcbiYjNDM7XHRcdGJpcnRoID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW2xydV9nZW5fZnJvbV9zZXEobWlkZGxlX3NlcSldKTtcbiYjNDM7XHRcdHdpbmRvd19hZ2UgPSBqaWZmaWVzIC0gYmlydGg7XG4mIzQzO1xuJiM0MztcdFx0ZXZpY3RfdHMgPSAodG9rZW4gXHUwMDNlXHUwMDNlIEVWSUNUX1RTX1BHT0ZGKSBcdTAwMjYgRVZJQ1RfVFNfTUFTSztcbiYjNDM7XHRcdHJlZmF1bHRfZGlzdGFuY2UgPSAoKGppZmZpZXMgXHUwMDI2IEVWSUNUX1RTX01BU0spIC0gZXZpY3RfdHMpIFx1MDAyNlxuJiM0MztcdFx0XHRcdCAgIEVWSUNUX1RTX01BU0s7XG4mIzQzO1x0XHRyZWNlbnQgPSByZWZhdWx0X2Rpc3RhbmNlIFx1MDAzYz0gd2luZG93X2FnZTtcbiYjNDM7XHR9XG4gXG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRUZBVUxUX0JBU0UgJiM0MzsgdHlwZSwgZGVsdGEpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dvcmtpbmdzZXRfZXZpY3Rpb24mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2Q1ODUyMDkyNzJkODdlZTk3MzE4NzU5NTU2YjNlZTFhYTc3NTFlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA4OjI1OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IDA3ZTY4MzZkMDUwMjAuLmU1NWU1YTc1YWNiOWYgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTE5OSw2ICYjNDM7MTk5LDI4IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnVja2V0X29yZGVyW0FOT05fQU5EX0ZJTEVdIF9fcmVhZF9tb3N0bHk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsvKgomIzQzOyAqIExSVV9HRU4gc2hhZG93IHRva2VuIGxheW91dCB3aXRoaW4gdGhlIGV2aWN0aW9uIGZpZWxkIChsb3cgdG8gaGlnaCk6CiYjNDM7ICogICBMUlVfUkVGU19XSURUSCBiaXRzOiByZWZzCiYjNDM7ICogICBFVklDVF9TRVFfV0lEVEggYml0czogbWluX3NlcQomIzQzOyAqICAgRVZJQ1RfVFNfV0lEVEggYml0czogZXZpY3Rpb24gdGltZSBpbiBqaWZmaWVzCiYjNDM7ICoKJiM0MzsgKiBTaXplIHRoZSBsYXlvdXQgZm9yIHRoZSB0aWdodGVyIGFub24gbWFzayBzbyB0aGUgdG9rZW4gZml0cyBib3RoIGZpbGUgYW5kCiYjNDM7ICogYW5vbiBzaGFkb3dzLiBLZWVwIGF0IGxlYXN0IDE2IGJpdHMgZm9yIG1pbl9zZXEgc28gdGhlIHNhbWUtbHJ1dmVjIHJlY2VuY3kKJiM0MzsgKiBjaGVjayBkb2VzIG5vdCB3cmFwIGF0IHRoZSBtdWNoIHNob3J0ZXIgTFJVX0dFTl9XSURUSCBpbnRlcnZhbC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEVWSUNUSU9OX0JJVFMJCShCSVRTX1BFUl9MT05HIC0gRVZJQ1RJT05fU0hJRlRfQU5PTikKJiM0MzsjZGVmaW5lIEVWSUNUX1BBWUxPQURfQklUUwkoRVZJQ1RJT05fQklUUyAtIExSVV9SRUZTX1dJRFRIKQomIzQzOyNkZWZpbmUgRVZJQ1RfVFNfV0lEVEgJCShFVklDVF9QQVlMT0FEX0JJVFMgJmd0OyA0MCA/IDI0IDogXAomIzQzOwkJCQkgRVZJQ1RfUEFZTE9BRF9CSVRTICZndDsgMTYgPyBcCiYjNDM7CQkJCSBFVklDVF9QQVlMT0FEX0JJVFMgLSAxNiA6IDApCiYjNDM7I2RlZmluZSBFVklDVF9TRVFfV0lEVEgJCShFVklDVF9QQVlMT0FEX0JJVFMgLSBFVklDVF9UU19XSURUSCkKJiM0MzsjZGVmaW5lIEVWSUNUX1RTX1BHT0ZGCQkoTFJVX1JFRlNfV0lEVEggJiM0MzsgRVZJQ1RfU0VRX1dJRFRIKQomIzQzOyNkZWZpbmUgRVZJQ1RfU0VRX01BU0sJCSgoMVVMICZsdDsmbHQ7IEVWSUNUX1NFUV9XSURUSCkgLSAxKQomIzQzOyNkZWZpbmUgRVZJQ1RfVFNfTUFTSwkJKCgxVUwgJmx0OyZsdDsgRVZJQ1RfVFNfV0lEVEgpIC0gMSkKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyB2b2lkICpwYWNrX3NoYWRvdyhpbnQgbWVtY2dpZCwgcGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBldmljdGlvbiwKIAkJCSBib29sIHdvcmtpbmdzZXQsIGJvb2wgZmlsZSkKIHsKQEAgLTI1MCwxMyAmIzQzOzI3MiwxOSBAQCBzdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJQlVJTERfQlVHX09OKExSVV9HRU5fV0lEVEggJiM0MzsgTFJVX1JFRlNfV0lEVEggJmd0OwogCQkgICAgIEJJVFNfUEVSX0xPTkcgLSBtYXgoRVZJQ1RJT05fU0hJRlQsIEVWSUNUSU9OX1NISUZUX0FOT04pKTsKJiM0MzsJQlVJTERfQlVHX09OKEVWSUNUX1RTX1dJRFRIICZsdDs9IDApOwomIzQzOwlCVUlMRF9CVUdfT04oRVZJQ1RfU0VRX1dJRFRIICZsdDsgMTYpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfV0lEVEggJiM0MzsgRVZJQ1RfU0VRX1dJRFRIICYjNDM7CiYjNDM7CQkgICAgIEVWSUNUX1RTX1dJRFRIICE9IEVWSUNUSU9OX0JJVFMpOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CiAJbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAltaW5fc2VxID0gUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7Ci0JdG9rZW4gPSAobWluX3NlcSAmbHQ7Jmx0OyBMUlVfUkVGU19XSURUSCkgfCBtYXgocmVmcyAtIDEsIDApOwomIzQzOwl0b2tlbiA9ICgobWluX3NlcSAmYW1wOyBFVklDVF9TRVFfTUFTSykgJmx0OyZsdDsgTFJVX1JFRlNfV0lEVEgpIHwKJiM0MzsJCW1heChyZWZzIC0gMSwgMCk7CiYjNDM7CXRva2VuIHw9IChqaWZmaWVzICZhbXA7IEVWSUNUX1RTX01BU0spICZsdDsmbHQ7IEVWSUNUX1RTX1BHT0ZGOwogCiAJaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKG1pbl9zZXEpOwogCWF0b21pY19sb25nX2FkZChkZWx0YSwgJmFtcDtscnVnZW4tJmd0O2V2aWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0pOwpAQCAtMjc1LDE4ICYjNDM7MzAzLDIxIEBAIHN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLAogewogCWludCBtZW1jZ19pZDsKIAl1bnNpZ25lZCBsb25nIG1heF9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdG9rZW5fc2VxOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwogCiYjNDM7CSh2b2lkKWZpbGU7CiYjNDM7CiAJdW5wYWNrX3NoYWRvdyhzaGFkb3csICZhbXA7bWVtY2dfaWQsICZhbXA7cGdkYXQsIHRva2VuLCB3b3JraW5nc2V0KTsKIAogCW1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpOwogCSpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwogCi0JbWF4X3NlcSA9IFJFQURfT05DRSgoKmxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKLQltYXhfc2VxICZhbXA7PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pICZndDsmZ3Q7IExSVV9SRUZTX1dJRFRIOwomIzQzOwltYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpICZhbXA7IEVWSUNUX1NFUV9NQVNLOwomIzQzOwl0b2tlbl9zZXEgPSAoKnRva2VuICZndDsmZ3Q7IExSVV9SRUZTX1dJRFRIKSAmYW1wOyBFVklDVF9TRVFfTUFTSzsKIAotCXJldHVybiBhYnNfZGlmZihtYXhfc2VxLCAqdG9rZW4gJmd0OyZndDsgTFJVX1JFRlNfV0lEVEgpICZsdDsgTUFYX05SX0dFTlM7CiYjNDM7CXJldHVybiBhYnNfZGlmZihtYXhfc2VxLCB0b2tlbl9zZXEpICZsdDsgTUFYX05SX0dFTlM7CiB9CiAKIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCkBAIC0yOTUsNyAmIzQzOzMyNiwxMCBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWludCBoaXN0LCB0aWVyLCByZWZzOwogCWJvb2wgd29ya2luZ3NldDsKIAl1bnNpZ25lZCBsb25nIHRva2VuOwomIzQzOwl1bnNpZ25lZCBsb25nIGV2aWN0X3RzLCByZWZhdWx0X2Rpc3RhbmNlOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9zZXEsIG1pZGRsZV9zZXEsIGJpcnRoLCB3aW5kb3dfYWdlOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKJiM0MzsJc3RydWN0IGxydXZlYyAqZHN0X2xydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuOwogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKQEAgLTMwMyw4ICYjNDM7MzM3LDI3IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJcmVjZW50ID0gbHJ1X2dlbl90ZXN0X3JlY2VudChzaGFkb3csICZhbXA7bHJ1dmVjLCAmYW1wO3Rva2VuLCAmYW1wO3dvcmtpbmdzZXQsIHR5cGUpOwotCWlmIChscnV2ZWMgIT0gZm9saW9fbHJ1dmVjKGZvbGlvKSkKLQkJZ290byB1bmxvY2s7CiYjNDM7CWRzdF9scnV2ZWMgPSBmb2xpb19scnV2ZWMoZm9saW8pOwomIzQzOwomIzQzOwlpZiAobHJ1dmVjICE9IGRzdF9scnV2ZWMpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBtaW5fc2VxIHZhbHVlcyBmcm9tIGRpZmZlcmVudCBscnV2ZWNzIGFyZSBub3QgY29tcGFyYWJsZS4KJiM0MzsJCSAqIEp1ZGdlIGEgY3Jvc3MtbWVtY2cgcmVmYXVsdCBieSB3aGV0aGVyIGl0IGhhcHBlbmVkIHdpdGhpbgomIzQzOwkJICogdGhlIGFnZSBvZiB0aGUgbWlkZGxlIGdlbmVyYXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uCiYjNDM7CQkgKiBscnV2ZWMmIzM5O3MgTUFYX05SX0dFTlMgd2luZG93LgomIzQzOwkJICovCiYjNDM7CQlscnV2ZWMgPSBkc3RfbHJ1dmVjOwomIzQzOwkJbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJCW1heF9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLSZndDttYXhfc2VxKTsKJiM0MzsJCW1pZGRsZV9zZXEgPSBtYXhfc2VxIC0gTUFYX05SX0dFTlMgLyAyOwomIzQzOwkJYmlydGggPSBSRUFEX09OQ0UobHJ1Z2VuLSZndDt0aW1lc3RhbXBzW2xydV9nZW5fZnJvbV9zZXEobWlkZGxlX3NlcSldKTsKJiM0MzsJCXdpbmRvd19hZ2UgPSBqaWZmaWVzIC0gYmlydGg7CiYjNDM7CiYjNDM7CQlldmljdF90cyA9ICh0b2tlbiAmZ3Q7Jmd0OyBFVklDVF9UU19QR09GRikgJmFtcDsgRVZJQ1RfVFNfTUFTSzsKJiM0MzsJCXJlZmF1bHRfZGlzdGFuY2UgPSAoKGppZmZpZXMgJmFtcDsgRVZJQ1RfVFNfTUFTSykgLSBldmljdF90cykgJmFtcDsKJiM0MzsJCQkJICAgRVZJQ1RfVFNfTUFTSzsKJiM0MzsJCXJlY2VudCA9IHJlZmF1bHRfZGlzdGFuY2UgJmx0Oz0gd2luZG93X2FnZTsKJiM0MzsJfQogCiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVGQVVMVF9CQVNFICYjNDM7IHR5cGUsIGRlbHRhKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBtbS93b3JraW5nc2V0LmNgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBteSBleWVicm93cyBiZWNhdXNlIHRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBwbGF5aW5nIHdpdGggdGhlIHdvcmtpbmdzZXQgbG9naWMsIHdoaWNoIGlzIG9idmlvdXNseSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBzb21lIG5ldyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBgQ09ORklHX0xSVV9HRU5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgY29uZmlnIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBscnVfZ2VuX2V2aWN0aW9uYCwgYGxydV9nZW5fdGVzdF9yZWNlbnRgLCBhbmQgYGxydV9nZW5fcmVmYXVsdGAuIFRob3NlIGFyZSBhbGwga2V5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIExSVSBhbmQgd29ya2luZ3NldCBldmljdGlvbi9yZWZhdWx0IHByb2Nlc3MuIE15IGd1dCBzYXlzIHRoaXMgaGFzIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wYWN0LiBEZXBlbmRpbmcgb24gaG93IGBDT05GSUdfTFJVX0dFTmAgaXMgdXNlZCwgaXQgY291bGQgZHJhbWF0aWNhbGx5IGFsdGVyIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcGFnZSBldmljdGlvbiwgb3IsIHBlcmhhcHMsIHJlZmF1bHQgdHJhY2tpbmcuCgpGaXJzdCBzdGVwOiBJIG5lZWQgdG8gZ28gZGlnIGludG8gYG1tL0tjb25maWdgIG9yIHNvbWV3aGVyZSBzaW1pbGFyIHRvIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmN5IGNoYWluIGZvciBgQ09ORklHX0xSVV9HRU5gIGxvb2tzIGxpa2UuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dCBmb3IgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJiMzOTttIGhvcGluZyBJIGNhbiBzdXNzIG91dCBpZiBpdCYjMzk7cyBhIG5ldyBmZWF0dXJlIG9yIGEgcmVmaW5lbWVudCBvZiBhbiBleGlzdGluZyBvbmUuIFRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IGNhcmVmdWxseSBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTQyMD1lbmRpZiAjIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xNDIyLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQyNC1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQzMS1cbm1tL0tjb25maWc6MTQzMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MzMtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDM3LVxubW0vS2NvbmZpZzoxNDM4OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MzktXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQ0Ni1cbm1tL0tjb25maWc6MTQ0Nzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQ0OC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uIEV4cGxvcmF0aW9uKioKClJpZ2h0LCBzbyBgTFJVX0dFTmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBrZXkgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgc2V0dGluZyBgTFJVX0dFTmAgYWxvbmUgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlIExSVSBnZW5lcmF0aW9uIHByb2Nlc3MsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGFkZGl0aW9uYWwgZmxhZywgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgTFJVX0dFTl9FTkFCTEVEYCwgdGhhdCBhbHNvIG5lZWRzIHRvIGJlIHNldC4gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgaXMgY3JpdGljYWwgZm9yIHByb3BlciBpbXBsZW1lbnRhdGlvbiBhbmQgZXhwZWN0ZWQgYmVoYXZpb3Igb3V0IG9mIHRoZSBib3guIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0MjM9Y29uZmlnIExSVV9HRU5cbi0tXG5tbS9LY29uZmlnLTE0MzEtXG5tbS9LY29uZmlnOjE0MzI6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDMzLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgTFJVX0dFTl9FTkFCTEVEKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGBMUlVfR0VOX0VOQUJMRURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldCB1cC4gVGhlIGZpcnN0IHBsYWNlIHRvIGxvb2ssIGFzIGFsd2F5cywgaXMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCB0aGF0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgd2hhdCBpdHMgZGVmYXVsdCBzZXR0aW5nIGlzLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IGZvciB3aHkgd2UgYXJlIGxvb2tpbmcgYXQgdGhpcywgYW5kIHdoYXQgd2UgbWlnaHQgZG8gd2l0aCB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRlbmRpZiAjIFVTRVJGQVVMVEZEXG4xNDIxOlx0XG4xNDIyOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MjM6XHRjb25maWcgTFJVX0dFTlxuMTQyNDpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDI1Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTQyNjpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDI3Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0Mjg6XHRcdGhlbHBcbjE0Mjk6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDMwOlx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MzE6XHRcbjE0MzI6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDMzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDM0Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MzU6XHRcdGhlbHBcbjE0MzY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQzNzpcdFxuMTQzODpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDM5Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDAKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uIGFuZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgTFJVIGdlbmVyYXRpb24gc3R1ZmYuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhvc2UgYXJlIHRoZSBrZXlzIHRvIGNvbnRyb2xsaW5nIHRoaXMgZmVhdHVyZS4gTm93LCB0aGUgbWVhdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQuIEkmIzM5O20gbG9va2luZyBhdCBgbHJ1X2dlbl9ldmljdGlvbmAsIGBscnVfZ2VuX3Rlc3RfcmVjZW50YCwgYW5kIGBscnVfZ2VuX3JlZmF1bHRgLiBJIGtub3cgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aGV5IGFyZSBob3VzZWQgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBicm9hZGVyIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXkmIzM5O3JlIGludGVncmF0ZWQgYW5kIGhvdyB0aGUgb3ZlcmFsbCBMUlUgZ2VuZXJhdGlvbiBsb2dpYyBpcyBhY3R1YWxseSB1c2VkIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fZXZpY3Rpb258bHJ1X2dlbl90ZXN0X3JlY2VudHxscnVfZ2VuX3JlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTIzNT1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTI1Ni1cbm1tL3dvcmtpbmdzZXQuYzoyNTc6c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3dvcmtpbmdzZXQuYy0yNTgte1xuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMDAtICovXG5tbS93b3JraW5nc2V0LmM6MzAxOnN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxubW0vd29ya2luZ3NldC5jLTMwMi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnRva2VuLCBib29sICp3b3JraW5nc2V0LCBib29sIGZpbGUpXG4tLVxubW0vd29ya2luZ3NldC5jLTMyMi1cbm1tL3dvcmtpbmdzZXQuYzozMjM6c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbm1tL3dvcmtpbmdzZXQuYy0zMjQte1xuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMzgtXG5tbS93b3JraW5nc2V0LmM6MzM5Olx0cmVjZW50ID0gbHJ1X2dlbl90ZXN0X3JlY2VudChzaGFkb3csIFx1MDAyNmxydXZlYywgXHUwMDI2dG9rZW4sIFx1MDAyNndvcmtpbmdzZXQsIHR5cGUpO1xubW0vd29ya2luZ3NldC5jLTM0MC1cdGRzdF9scnV2ZWMgPSBmb2xpb19scnV2ZWMoZm9saW8pO1xuLS1cbm1tL3dvcmtpbmdzZXQuYy0zODktXG5tbS93b3JraW5nc2V0LmM6MzkwOnN0YXRpYyB2b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS93b3JraW5nc2V0LmMtMzkxLXtcbi0tXG5tbS93b3JraW5nc2V0LmMtMzk0LVxubW0vd29ya2luZ3NldC5jOjM5NTpzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYyxcbm1tL3dvcmtpbmdzZXQuYy0zOTYtXHRcdFx0XHR1bnNpZ25lZCBsb25nICp0b2tlbiwgYm9vbCAqd29ya2luZ3NldCwgYm9vbCBmaWxlKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy00MDAtXG5tbS93b3JraW5nc2V0LmM6NDAxOnN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNDAyLXtcbi0tXG5tbS93b3JraW5nc2V0LmM9NDQzPXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbi0tXG5tbS93b3JraW5nc2V0LmMtNDU2LVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxubW0vd29ya2luZ3NldC5jOjQ1NzpcdFx0cmV0dXJuIGxydV9nZW5fZXZpY3Rpb24oZm9saW8pO1xubW0vd29ya2luZ3NldC5jLTQ1OC1cbi0tXG5tbS93b3JraW5nc2V0LmM9NDgxPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbi0tXG5tbS93b3JraW5nc2V0LmMtNDk2LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS93b3JraW5nc2V0LmM6NDk3Olx0XHRyZWNlbnQgPSBscnVfZ2VuX3Rlc3RfcmVjZW50KHNoYWRvdywgXHUwMDI2ZXZpY3Rpb25fbHJ1dmVjLCBcdTAwMjZldmljdGlvbixcbm1tL3dvcmtpbmdzZXQuYy00OTgtXHRcdFx0XHRcdCAgICAgd29ya2luZ3NldCwgZmlsZSk7XG4tLVxubW0vd29ya2luZ3NldC5jPTU5OT12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTYwOS1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xubW0vd29ya2luZ3NldC5jOjYxMDpcdFx0bHJ1X2dlbl9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xubW0vd29ya2luZ3NldC5jLTYxMS1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzI0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBlbnRyeSBwb2ludHMsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgV29ya2luZ3NldCBNZWNoYW5pY3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB3b3JraW5nc2V0IHN0dWZmIGlzIGZ1bmN0aW9uaW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgc3lzdGVtIGJlZ2lucyBpdHMgd29ya2luZ3NldCBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIGxpc3Qgb2YgZW50cnkgcG9pbnRzIHRvIGV4YW1pbmUgaXM6IGB3b3JraW5nc2V0X2V2aWN0aW9uYCwgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHRoZSBjb3JlIG9wZXJhdGlvbnMuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZWlyIGluZmx1ZW5jZS4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBwdXJlbHkgaW50ZXJuYWwsIHBlcmhhcHMgb25seSB1c2VkIHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZSwgb3IgYXJlIHRoZXkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gTW9yZSBpbXBvcnRhbnRseSwgYXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdXNpbmcgdGhlbT8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBtdWNoIG9mIGEgZGVzaWduIGNoYW5nZSBpbXBsZW1lbnRpbmcgYSBuZXcgZmVhdHVyZSBpbiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHF1ZXN0aW9uIEkgbmVlZCBhbnN3ZXJlZCBiZWZvcmUgSSBkaWcgZGVlcGVyLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9ldmljdGlvbnx3b3JraW5nc2V0X3Rlc3RfcmVjZW50fHdvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9OTUwPWludCBmaWxlbWFwX2FkZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9maWxlbWFwLmMtOTgxLVx0XHRpZiAoIShnZnAgXHUwMDI2IF9fR0ZQX1dSSVRFKSBcdTAwMjZcdTAwMjYgc2hhZG93KVxubW0vZmlsZW1hcC5jOjk4MjpcdFx0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG5tbS9maWxlbWFwLmMtOTgzLVx0XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmM9NDU4MD1zdGF0aWMgdm9pZCBmaWxlbWFwX2NhY2hlc3RhdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtNDY1MS0jZW5kaWZcbm1tL2ZpbGVtYXAuYzo0NjUyOlx0XHRcdGlmICh3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgdHJ1ZSwgXHUwMDI2d29ya2luZ3NldCwgZmFsc2UpKVxubW0vZmlsZW1hcC5jLTQ2NTMtXHRcdFx0XHRjcy1cdTAwM2Vucl9yZWNlbnRseV9ldmljdGVkICYjNDM7PSBucl9wYWdlcztcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2ND1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWVtY2cxX3N0YXRfbmFtZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3My1cdFwmIzM0O3dyaXRlYmFja1wmIzM0Oyxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc0Olx0XCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2Fub25cJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3NTpcdFwmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9maWxlXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jLTE4NzYtI2lmZGVmIENPTkZJR19TV0FQXG4tLVxubW0vbWVtY29udHJvbC5jPTE1NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU4NC1cdC8qIFRoZSBtZW1vcnkgZXZlbnRzICovXG5tbS9tZW1jb250cm9sLmM6MTU4NTpcdHsgXCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2Fub25cJiMzNDssXHRXT1JLSU5HU0VUX1JFRkFVTFRfQU5PTlx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1ODY6XHR7IFwmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9maWxlXCYjMzQ7LFx0V09SS0lOR1NFVF9SRUZBVUxUX0ZJTEVcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTg3LVx0eyBcJiMzNDt3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cJiMzNDssXHRXT1JLSU5HU0VUX0FDVElWQVRFX0FOT05cdH0sXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTQ2NT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfcHJlcGFyZV9hbmRfYWRkKHN3cF9lbnRyeV90IGVudHJ5LFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MDAtXHRpZiAoc2hhZG93KVxubW0vc3dhcF9zdGF0ZS5jOjUwMTpcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xubW0vc3dhcF9zdGF0ZS5jLTUwMi1cbi0tXG5tbS92bXNjYW4uYz02ODY9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTc0MC1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbm1tL3Ztc2Nhbi5jOjc0MTpcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xubW0vdm1zY2FuLmMtNzQyLVx0XHRtZW1jZzFfc3dhcG91dChmb2xpbywgc3dhcCk7XG4tLVxubW0vdm1zY2FuLmMtNzY2LVx0XHQgICAgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjYgIWRheF9tYXBwaW5nKG1hcHBpbmcpKVxubW0vdm1zY2FuLmM6NzY3Olx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG5tbS92bXNjYW4uYy03NjgtXHRcdF9fZmlsZW1hcF9yZW1vdmVfZm9saW8oZm9saW8sIHNoYWRvdyk7XG4tLVxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMjMxLVx0W0koV09SS0lOR1NFVF9OT0RFUyldXHRcdFx0PSBcJiMzNDt3b3JraW5nc2V0X25vZGVzXCYjMzQ7LFxubW0vdm1zdGF0LmM6MTIzMjpcdFtJKFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OKV1cdFx0PSBcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfYW5vblwmIzM0Oyxcbm1tL3Ztc3RhdC5jOjEyMzM6XHRbSShXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSldXHRcdD0gXCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXG5tbS92bXN0YXQuYy0xMjM0LVx0W0koV09SS0lOR1NFVF9BQ1RJVkFURV9BTk9OKV1cdFx0PSBcJiMzNDt3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cJiMzNDssXG4tLVxubW0vd29ya2luZ3NldC5jPTQxNz12b2lkIHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5tbS93b3JraW5nc2V0LmMtNDM1LS8qKlxubW0vd29ya2luZ3NldC5jOjQzNjogKiB3b3JraW5nc2V0X2V2aWN0aW9uIC0gbm90ZSB0aGUgZXZpY3Rpb24gb2YgYSBmb2xpbyBmcm9tIG1lbW9yeVxubW0vd29ya2luZ3NldC5jLTQzNy0gKiBAdGFyZ2V0X21lbWNnOiB0aGUgY2dyb3VwIHRoYXQgaXMgY2F1c2luZyB0aGUgcmVjbGFpbVxuLS1cbm1tL3dvcmtpbmdzZXQuYy00NDItICovXG5tbS93b3JraW5nc2V0LmM6NDQzOnZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbm1tL3dvcmtpbmdzZXQuYy00NDQte1xuLS1cbm1tL3dvcmtpbmdzZXQuYy00NjktLyoqXG5tbS93b3JraW5nc2V0LmM6NDcwOiAqIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQgLSB0ZXN0cyBpZiB0aGUgc2hhZG93IGVudHJ5IGlzIGZvciBhIGZvbGlvIHRoYXQgd2FzXG5tbS93b3JraW5nc2V0LmMtNDcxLSAqIHJlY2VudGx5IGV2aWN0ZWQuIEFsc28gZmlsbHMgaW4gQHdvcmtpbmdzZXQgd2l0aCB0aGUgdmFsdWUgdW5wYWNrZWQgZnJvbVxuLS1cbm1tL3dvcmtpbmdzZXQuYy00ODAtICovXG5tbS93b3JraW5nc2V0LmM6NDgxOmJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbm1tL3dvcmtpbmdzZXQuYy00ODItXHRcdFx0XHRib29sIGZsdXNoKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy01MzItXHQgKlxubW0vd29ya2luZ3NldC5jOjUzMzpcdCAqIE5vdGUgdGhhdCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KCkgaXRzZWxmIG1pZ2h0IGJlIGNhbGxlZCBpbiBSQ1UgcmVhZFxubW0vd29ya2luZ3NldC5jLTUzNC1cdCAqIHNlY3Rpb24gKGZvciBlLmcsIGluIGNhY2hlc3RhdCkgLSB0aGVzZSBjYWxsZXJzIG5lZWQgdG8gc2tpcCBmbHVzaGluZ1xuLS1cbm1tL3dvcmtpbmdzZXQuYy01OTAtLyoqXG5tbS93b3JraW5nc2V0LmM6NTkxOiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU5Mi0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNTk4LSAqL1xubW0vd29ya2luZ3NldC5jOjU5OTp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNjAwLXtcbi0tXG5tbS93b3JraW5nc2V0LmMtNjI3LVxubW0vd29ya2luZ3NldC5jOjYyODpcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxubW0vd29ya2luZ3NldC5jLTYyOS1cdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSByZWFsbHkgY3JpdGljYWwga2VybmVsIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBmcm9tIHRoZSBoZWFydCBvZiBtZW1vcnkgbWFuYWdlbWVudDogYGZpbGVtYXBgLCBgc3dhcF9zdGF0ZWAsIGFuZCBgdm1zY2FuYC4gVGhpcyBpcyBkZWVwIGluIHRoZSBjb3JlLCB0aGUgc3R1ZmYgdGhhdCAqcmVhbGx5KiBtYXR0ZXJzIGZvciBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS4gSSBzZWUgdGhhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgc2hhZG93IHRva2VuIGlzIGFycmFuZ2VkIGZvciBgQ09ORklHX0xSVV9HRU5gLCBob3cgaXQmIzM5O3MgcGFja2VkIGFuZCB1bnBhY2tlZC4gSW50ZXJlc3RpbmcsIGl0JiMzOTtzIGFkZGluZyBgRVZJQ1RfVFNfV0lEVEhgIGFuZCBgRVZJQ1RfU0VRX1dJRFRIYCB0byB0aGUgdG9rZW4sIGFuZCB1c2VzIGBqaWZmaWVzYCB0byBrZWVwIHRyYWNrIG9mIGV2aWN0aW9uIHRpbWUuIFRoYXQgcG9pbnRzIHRvIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSBtdWx0aS1nZW4gTFJVIHdvcmtpbmdzZXQgdHJhY2tpbmcgZnVuY3Rpb25zLgoKR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgY29yZSBuYXR1cmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBiZSB2ZXJ5IHRob3JvdWdoLgoKSSYjMzk7bGwga2VlcCBhIGNsb3NlIGV5ZSBvbiBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGFzIGtleSBhcmVhcyB0byB3YXRjaC4KCkZpcnN0LCBJIHNob3VsZCBjb25maXJtIGBMUlVfR0VOYCBpcyBlbmFibGVkIGJ5IGNoZWNraW5nIGBMUlVfR0VOX0VOQUJMRURgLgoKVGhlbiwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVwZW5kZW5jaWVzOyBgZGVwZW5kcyBvbiBNTVVgLCBgZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQYCBhbGwgc2VlbSBzdGFuZGFyZCwgYnV0IEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGV5IGFyZSBub3QgYWZmZWN0ZWQuCgpGaW5hbGx5LCBJIHdpbGwgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhbHNvIGJlIGFkZGVkIG9yIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0MjA9ZW5kaWYgIyBVU0VSRkFVTFRGRFxuLS1cbm1tL0tjb25maWctMTQyMi0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDIzOmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MjQtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MzEtXG5tbS9LY29uZmlnOjE0MzI6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDMzLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQzNy1cbm1tL0tjb25maWc6MTQzODpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDM5LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0NDYtXG5tbS9LY29uZmlnOjE0NDc6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0NDgtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMzQKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIE1HTFJVLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgZW5zdXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIGFyZSBhZGRlZCB0byBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW1wYWN0cy4gTGV0JiMzOTtzIGxvb2sgYXQgYHdvcmtpbmdzZXRfZXZpY3Rpb25gLCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCB0byBzZWUgaWYgdGhleSBhcmUgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gUXVpY2tseSBjaGVja2luZyB0aGUgY29kZSwgdGhleSYjMzk7cmUgZGVmaW5lZCBpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhleSYjMzk7cmUgKm5vdCogc3RhdGljLCBhbmQgdGhleSYjMzk7cmUgKm5vdCogaW5saW5lZCwgc28gdGhleSBhcmUgZGVmaW5pdGVseSBwcmltZSBjYW5kaWRhdGVzIHRvIGZvY3VzIG9uLiBUaGV5IGFyZSBleHBvcnRlZCBvciBnbG9iYWwgZnVuY3Rpb25zLiBHb29kLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIGFueXRoaW5nIGVsc2UuIEFoLCBgbHJ1X2dlbl9ldmljdGlvbmAsIGBscnVfZ2VuX3Rlc3RfcmVjZW50YCwgYW5kIGBscnVfZ2VuX3JlZmF1bHRgIGFyZSBzdGF0aWMsIHNvIHRob3NlIGFyZSBub3QgdGhlIGZvY3VzLiBTbyB0aGUgcGF0Y2ggaXMgZm9jdXNlZCBvbiBjaGFuZ2VzIHRvIGBtbS93b3JraW5nc2V0LmNgLgoKT2theSwgdGltZSB0byBzdW1tYXJpemUgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBNR0xSVSYjMzk7cyB3b3JraW5nc2V0IHRyYWNraW5nIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCYjMzk7cyBhbHRlcmluZyB0aGUgJiMzNDtzaGFkb3cgdG9rZW4mIzM0OyBkYXRhIHN0cnVjdHVyZSwgYWRkaW5nIGZpZWxkcyBmb3IgZXZpY3Rpb24gdGltZSAoaW4gamlmZmllcywgaW1wb3J0YW50IGZvciB0aW1pbmcpIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBUaGUgcGF0Y2ggdXBkYXRlcyBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGNvcmUsIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiwgZGVlcGx5IGNvbm5lY3RlZCB0byBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHN0YW5kYXJkIG1lbW9yeSBwcmVzc3VyZSwgYW5kIGlzIGludm9sdmVkIGluIGZpbGUgYW5kIHN3YXAgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGZ1enppbmcuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4gVGhlIG1vc3QgaW1wb3J0YW50IGBGb2N1c1N5bWJvbHNgIGFyZSBkZWZpbml0ZWx5IGB3b3JraW5nc2V0X2V2aWN0aW9uYCwgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuIEZpbmFsbHksIHdlIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYExSVV9HRU5gLCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgYmVjYXVzZSB0aGF0IGlzIHRoZSBiYXNlbGluZSBuZWVkZWQgZm9yIHRoaXMgdG8gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dvcmtpbmdzZXRfZXZpY3Rpb24mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dvcmtpbmdzZXRfZXZpY3Rpb24mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgaG93IHNoYWRvdyB0b2tlbnMgYXJlIHBhY2tlZCBhbmQgdW5wYWNrZWQgdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lc3RhbXBzIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBBbGwgbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0YXRlIChlLmcuLCBgamlmZmllc2AsIGB0b2tlbmAsIGBscnVnZW4tXHUwMDNlbWF4X3NlcWApIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDU4NTIwOTI3MmQ4N2VlOTczMTg3NTk1NTZiM2VlMWFhNzc1MWVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMDg6MjU6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggMDdlNjgzNmQwNTAyMC4uZTU1ZTVhNzVhY2I5ZiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtMTk5LDYgJiM0MzsxOTksMjggQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBidWNrZXRfb3JkZXJbQU5PTl9BTkRfRklMRV0gX19yZWFkX21vc3RseTsKIAomIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTgomIzQzOy8qCiYjNDM7ICogTFJVX0dFTiBzaGFkb3cgdG9rZW4gbGF5b3V0IHdpdGhpbiB0aGUgZXZpY3Rpb24gZmllbGQgKGxvdyB0byBoaWdoKToKJiM0MzsgKiAgIExSVV9SRUZTX1dJRFRIIGJpdHM6IHJlZnMKJiM0MzsgKiAgIEVWSUNUX1NFUV9XSURUSCBiaXRzOiBtaW5fc2VxCiYjNDM7ICogICBFVklDVF9UU19XSURUSCBiaXRzOiBldmljdGlvbiB0aW1lIGluIGppZmZpZXMKJiM0MzsgKgomIzQzOyAqIFNpemUgdGhlIGxheW91dCBmb3IgdGhlIHRpZ2h0ZXIgYW5vbiBtYXNrIHNvIHRoZSB0b2tlbiBmaXRzIGJvdGggZmlsZSBhbmQKJiM0MzsgKiBhbm9uIHNoYWRvd3MuIEtlZXAgYXQgbGVhc3QgMTYgYml0cyBmb3IgbWluX3NlcSBzbyB0aGUgc2FtZS1scnV2ZWMgcmVjZW5jeQomIzQzOyAqIGNoZWNrIGRvZXMgbm90IHdyYXAgYXQgdGhlIG11Y2ggc2hvcnRlciBMUlVfR0VOX1dJRFRIIGludGVydmFsLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRVZJQ1RJT05fQklUUwkJKEJJVFNfUEVSX0xPTkcgLSBFVklDVElPTl9TSElGVF9BTk9OKQomIzQzOyNkZWZpbmUgRVZJQ1RfUEFZTE9BRF9CSVRTCShFVklDVElPTl9CSVRTIC0gTFJVX1JFRlNfV0lEVEgpCiYjNDM7I2RlZmluZSBFVklDVF9UU19XSURUSAkJKEVWSUNUX1BBWUxPQURfQklUUyAmZ3Q7IDQwID8gMjQgOiBcCiYjNDM7CQkJCSBFVklDVF9QQVlMT0FEX0JJVFMgJmd0OyAxNiA/IFwKJiM0MzsJCQkJIEVWSUNUX1BBWUxPQURfQklUUyAtIDE2IDogMCkKJiM0MzsjZGVmaW5lIEVWSUNUX1NFUV9XSURUSAkJKEVWSUNUX1BBWUxPQURfQklUUyAtIEVWSUNUX1RTX1dJRFRIKQomIzQzOyNkZWZpbmUgRVZJQ1RfVFNfUEdPRkYJCShMUlVfUkVGU19XSURUSCAmIzQzOyBFVklDVF9TRVFfV0lEVEgpCiYjNDM7I2RlZmluZSBFVklDVF9TRVFfTUFTSwkJKCgxVUwgJmx0OyZsdDsgRVZJQ1RfU0VRX1dJRFRIKSAtIDEpCiYjNDM7I2RlZmluZSBFVklDVF9UU19NQVNLCQkoKDFVTCAmbHQ7Jmx0OyBFVklDVF9UU19XSURUSCkgLSAxKQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIHZvaWQgKnBhY2tfc2hhZG93KGludCBtZW1jZ2lkLCBwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIGV2aWN0aW9uLAogCQkJIGJvb2wgd29ya2luZ3NldCwgYm9vbCBmaWxlKQogewpAQCAtMjUwLDEzICYjNDM7MjcyLDE5IEBAIHN0YXRpYyB2b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAlCVUlMRF9CVUdfT04oTFJVX0dFTl9XSURUSCAmIzQzOyBMUlVfUkVGU19XSURUSCAmZ3Q7CiAJCSAgICAgQklUU19QRVJfTE9ORyAtIG1heChFVklDVElPTl9TSElGVCwgRVZJQ1RJT05fU0hJRlRfQU5PTikpOwomIzQzOwlCVUlMRF9CVUdfT04oRVZJQ1RfVFNfV0lEVEggJmx0Oz0gMCk7CiYjNDM7CUJVSUxEX0JVR19PTihFVklDVF9TRVFfV0lEVEggJmx0OyAxNik7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19XSURUSCAmIzQzOyBFVklDVF9TRVFfV0lEVEggJiM0MzsKJiM0MzsJCSAgICAgRVZJQ1RfVFNfV0lEVEggIT0gRVZJQ1RJT05fQklUUyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKIAlscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCW1pbl9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl0b2tlbiA9IChtaW5fc2VxICZsdDsmbHQ7IExSVV9SRUZTX1dJRFRIKSB8IG1heChyZWZzIC0gMSwgMCk7CiYjNDM7CXRva2VuID0gKChtaW5fc2VxICZhbXA7IEVWSUNUX1NFUV9NQVNLKSAmbHQ7Jmx0OyBMUlVfUkVGU19XSURUSCkgfAomIzQzOwkJbWF4KHJlZnMgLSAxLCAwKTsKJiM0MzsJdG9rZW4gfD0gKGppZmZpZXMgJmFtcDsgRVZJQ1RfVFNfTUFTSykgJmx0OyZsdDsgRVZJQ1RfVFNfUEdPRkY7CiAKIAloaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobWluX3NlcSk7CiAJYXRvbWljX2xvbmdfYWRkKGRlbHRhLCAmYW1wO2xydWdlbi0mZ3Q7ZXZpY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7CkBAIC0yNzUsMTggJiM0MzszMDMsMjEgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsCiB7CiAJaW50IG1lbWNnX2lkOwogCXVuc2lnbmVkIGxvbmcgbWF4X3NlcTsKJiM0MzsJdW5zaWduZWQgbG9uZyB0b2tlbl9zZXE7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CiAKJiM0MzsJKHZvaWQpZmlsZTsKJiM0MzsKIAl1bnBhY2tfc2hhZG93KHNoYWRvdywgJmFtcDttZW1jZ19pZCwgJmFtcDtwZ2RhdCwgdG9rZW4sIHdvcmtpbmdzZXQpOwogCiAJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7CiAJKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CiAKLQltYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpOwotCW1heF9zZXEgJmFtcDs9IChmaWxlID8gRVZJQ1RJT05fTUFTSyA6IEVWSUNUSU9OX01BU0tfQU5PTikgJmd0OyZndDsgTFJVX1JFRlNfV0lEVEg7CiYjNDM7CW1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSkgJmFtcDsgRVZJQ1RfU0VRX01BU0s7CiYjNDM7CXRva2VuX3NlcSA9ICgqdG9rZW4gJmd0OyZndDsgTFJVX1JFRlNfV0lEVEgpICZhbXA7IEVWSUNUX1NFUV9NQVNLOwogCi0JcmV0dXJuIGFic19kaWZmKG1heF9zZXEsICp0b2tlbiAmZ3Q7Jmd0OyBMUlVfUkVGU19XSURUSCkgJmx0OyBNQVhfTlJfR0VOUzsKJiM0MzsJcmV0dXJuIGFic19kaWZmKG1heF9zZXEsIHRva2VuX3NlcSkgJmx0OyBNQVhfTlJfR0VOUzsKIH0KIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKQEAgLTI5NSw3ICYjNDM7MzI2LDEwIEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiAJaW50IGhpc3QsIHRpZXIsIHJlZnM7CiAJYm9vbCB3b3JraW5nc2V0OwogCXVuc2lnbmVkIGxvbmcgdG9rZW47CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXZpY3RfdHMsIHJlZmF1bHRfZGlzdGFuY2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgbWlkZGxlX3NlcSwgYmlydGgsIHdpbmRvd19hZ2U7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwomIzQzOwlzdHJ1Y3QgbHJ1dmVjICpkc3RfbHJ1dmVjOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47CiAJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtMzAzLDggJiM0MzszMzcsMjcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlyZWNlbnQgPSBscnVfZ2VuX3Rlc3RfcmVjZW50KHNoYWRvdywgJmFtcDtscnV2ZWMsICZhbXA7dG9rZW4sICZhbXA7d29ya2luZ3NldCwgdHlwZSk7Ci0JaWYgKGxydXZlYyAhPSBmb2xpb19scnV2ZWMoZm9saW8pKQotCQlnb3RvIHVubG9jazsKJiM0MzsJZHN0X2xydXZlYyA9IGZvbGlvX2xydXZlYyhmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChscnV2ZWMgIT0gZHN0X2xydXZlYykgewomIzQzOwkJLyoKJiM0MzsJCSAqIG1pbl9zZXEgdmFsdWVzIGZyb20gZGlmZmVyZW50IGxydXZlY3MgYXJlIG5vdCBjb21wYXJhYmxlLgomIzQzOwkJICogSnVkZ2UgYSBjcm9zcy1tZW1jZyByZWZhdWx0IGJ5IHdoZXRoZXIgaXQgaGFwcGVuZWQgd2l0aGluCiYjNDM7CQkgKiB0aGUgYWdlIG9mIHRoZSBtaWRkbGUgZ2VuZXJhdGlvbiBpbiB0aGUgZGVzdGluYXRpb24KJiM0MzsJCSAqIGxydXZlYyYjMzk7cyBNQVhfTlJfR0VOUyB3aW5kb3cuCiYjNDM7CQkgKi8KJiM0MzsJCWxydXZlYyA9IGRzdF9scnV2ZWM7CiYjNDM7CQlscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwkJbWF4X3NlcSA9IFJFQURfT05DRShscnVnZW4tJmd0O21heF9zZXEpOwomIzQzOwkJbWlkZGxlX3NlcSA9IG1heF9zZXEgLSBNQVhfTlJfR0VOUyAvIDI7CiYjNDM7CQliaXJ0aCA9IFJFQURfT05DRShscnVnZW4tJmd0O3RpbWVzdGFtcHNbbHJ1X2dlbl9mcm9tX3NlcShtaWRkbGVfc2VxKV0pOwomIzQzOwkJd2luZG93X2FnZSA9IGppZmZpZXMgLSBiaXJ0aDsKJiM0MzsKJiM0MzsJCWV2aWN0X3RzID0gKHRva2VuICZndDsmZ3Q7IEVWSUNUX1RTX1BHT0ZGKSAmYW1wOyBFVklDVF9UU19NQVNLOwomIzQzOwkJcmVmYXVsdF9kaXN0YW5jZSA9ICgoamlmZmllcyAmYW1wOyBFVklDVF9UU19NQVNLKSAtIGV2aWN0X3RzKSAmYW1wOwomIzQzOwkJCQkgICBFVklDVF9UU19NQVNLOwomIzQzOwkJcmVjZW50ID0gcmVmYXVsdF9kaXN0YW5jZSAmbHQ7PSB3aW5kb3dfYWdlOwomIzQzOwl9CiAKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRUZBVUxUX0JBU0UgJiM0MzsgdHlwZSwgZGVsdGEpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA1CgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMUlUgR2VuZXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbW0vd29ya2luZ3NldC5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGl0JiMzOTtzIGFsbCBhYm91dCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHR3ZWFraW5nIHRoZSBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuIEl0JiMzOTtzIHVzaW5nIGJpdHdpc2Ugb3BlcmF0aW9ucyBhbmQgbmV3IG1hY3JvcyB0byBoYW5kbGUgdGhlIGBMUlVfR0VOYCBzaGFkb3cgdG9rZW4gbGF5b3V0LiBUaGlzIG1haW5seSBpbXBhY3RzIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX2V2aWN0aW9uYCwgYGxydV9nZW5fdGVzdF9yZWNlbnRgLCBhbmQgYGxydV9nZW5fcmVmYXVsdGAuCgpMb29raW5nIGNsb3NlciwgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgbWFuaXB1bGF0aW5nIHZhcmlhYmxlcyBsaWtlIGB0b2tlbmAsIGBtaW5fc2VxYCwgYGppZmZpZXNgLCBgbWF4X3NlcWAsIGB0b2tlbl9zZXFgLCBgZXZpY3RfdHNgLCBgcmVmYXVsdF9kaXN0YW5jZWAsIGV0Yy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nIGhlcmUsIGFuZCBjcnVjaWFsbHksIG5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl04oCZcyBhbGwgaW50ZXJuYWwsIGFuZCB0aGUgbG9naWMgcmVsaWVzIG9uIGVzdGFibGlzaGVkIHZhbHVlcyBkZXJpdmVkIGZyb20gYGppZmZpZXNgLCBleGlzdGluZyBzZXF1ZW5jZSBudW1iZXJzLCBhbmQsIGltcG9ydGFudGx5LCB0aGUgYHRva2VuYC4KCk15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBIb3dldmVyLCB0aGUgbW9yZSBJIGRpZywgSSBzZWUgdGhhdCBpc24mIzM5O3QgYSBwcm9ibGVtLiBBbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgcHVsbGluZyB2YWx1ZXMgZnJvbSB0aGluZ3MgbGlrZSBgamlmZmllc2AsIGB0b2tlbmAsIGFuZCBgbHJ1Z2VuLSZndDttYXhfc2VxYC4gIFdhaXQsIGB0b2tlbmAgY29tZXMgZnJvbSBgdW5wYWNrX3NoYWRvd2AsIHdoaWNoIHVucGFja3MgdGhlIGBzaGFkb3dgIGFyZ3VtZW50LCBwYXNzZWQgYXMgYHZvaWQgKmAuIExldCBtZSBjb25maXJtIHRoYXQgYHVucGFja19zaGFkb3dgIGlzIHNhZmUuIEFoLCBpdCB1bnBhY2tzIHRoZSBzaGFkb3cgZGF0YSBhbmQgaXQgaXMgYWxzbyBhbiBleGlzdGluZyBmdW5jdGlvbi4KCk9rYXksIGNoZWNraW5nIHRoZSBzcGVjaWZpY3Mgb2YgYGxydV9nZW5fcmVmYXVsdGAgYWdhaW4sIEkgc2VlIHRoYXQgbG9jYWwgdmFyaWFibGVzIGxpa2UgYGV2aWN0X3RzYCwgYHJlZmF1bHRfZGlzdGFuY2VgLCBgbWF4X3NlcWAsIGFuZCBzbyBvbiBhcmUgYWxsIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gYmVmb3JlIHRoZWlyIHVzZS4gVGhlIGNydWNpYWwgY2FsY3VsYXRpb24gb2YgYHJlZmF1bHRfZGlzdGFuY2VgIGRlcGVuZHMgb24gYGppZmZpZXNgIGFuZCBhIHZhbHVlIGV4dHJhY3RlZCBmcm9tIGB0b2tlbmAgaXRzZWxmLCBib3RoIGluaXRpYWxpemVkLgoKYGBgYwoJdW5zaWduZWQgbG9uZyBldmljdF90cywgcmVmYXVsdF9kaXN0YW5jZTsKCXVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgbWlkZGxlX3NlcSwgYmlydGgsIHdpbmRvd19hZ2U7CmBgYAoKYGBgYwoJCW1heF9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLSZndDttYXhfc2VxKTsKCQltaWRkbGVfc2VxID0gbWF4X3NlcSAtIE1BWF9OUl9HRU5TIC8gMjsKCQliaXJ0aCA9IFJFQURfT05DRShscnVnZW4tJmd0O3RpbWVzdGFtcHNbbHJ1X2dlbl9mcm9tX3NlcShtaWRkbGVfc2VxKV0pOwoJCXdpbmRvd19hZ2UgPSBqaWZmaWVzIC0gYmlydGg7CgoJCWV2aWN0X3RzID0gKHRva2VuICZndDsmZ3Q7IEVWSUNUX1RTX1BHT0ZGKSAmYW1wOyBFVklDVF9UU19NQVNLOwoJCXJlZmF1bHRfZGlzdGFuY2UgPSAoKGppZmZpZXMgJmFtcDsgRVZJQ1RfVFNfTUFTSykgLSBldmljdF90cykgJmFtcDsKCQkJCSAgIEVWSUNUX1RTX01BU0s7CgkJcmVjZW50ID0gcmVmYXVsdF9kaXN0YW5jZSAmbHQ7PSB3aW5kb3dfYWdlOwpgYGAKClRoaXMgY29uZmlybXMgaXQuICBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlIGhlcmUsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGNvbmNlcm5pbmcgaXNzdWVzLiBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgZ2l2ZW4gdGhlIHBhdGNoJiMzOTtzIHNjb3BlLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgaG93IHNoYWRvdyB0b2tlbnMgYXJlIHBhY2tlZCBhbmQgdW5wYWNrZWQgdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lc3RhbXBzIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBBbGwgbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0YXRlIChlLmcuLCBgamlmZmllc2AsIGB0b2tlbmAsIGBscnVnZW4tXHUwMDNlbWF4X3NlcWApIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIExSVSBnZW5lcmF0aW9uIHdvcmtpbmdzZXQgcmVmYXVsdCBsb2dpYywgc3BlY2lmaWNhbGx5IGFkanVzdGluZyBob3cgc2hhZG93IHRva2VucyBhcmUgcGFja2VkIGFuZCB1bnBhY2tlZCB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWVzdGFtcHMgYW5kIHNlcXVlbmNlIG51bWJlcnMuIEFsbCBuZXcgdmFyaWFibGVzIGludHJvZHVjZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcgc3RhdGUgKGUuZy4sIGBqaWZmaWVzYCwgYHRva2VuYCwgYGxydWdlbi1cdTAwM2VtYXhfc2VxYCkgYmVmb3JlIHVzZS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjI1OjU1Ljk5NTc1Mzg2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzI1OTYzMjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3b3JraW5nc2V0X2V2aWN0aW9uXCIsXG4gICAgXCJ3b3JraW5nc2V0X3Rlc3RfcmVjZW50XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgaG93IHNoYWRvdyB0b2tlbnMgYXJlIHBhY2tlZCBhbmQgdW5wYWNrZWQgdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lc3RhbXBzIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBBbGwgbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0YXRlIChlLmcuLCBgamlmZmllc2AsIGB0b2tlbmAsIGBscnVnZW4tXFx1MDAzZW1heF9zZXFgKSBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHdvcmtpbmdzZXQgdHJhY2tpbmcgbG9naWMgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIEl0IGNoYW5nZXMgdGhlIGxheW91dCBvZiB0aGUgc2hhZG93IHRva2VuIHRvIGluY2x1ZGUgZXZpY3Rpb24gdGltZSAoamlmZmllcykgYW5kIHNlcXVlbmNlIG51bWJlciwgYW5kIHVwZGF0ZXMgdGhlIGV2aWN0aW9uLCByZWNlbnQgdGVzdCwgYW5kIHJlZmF1bHQgbG9naWMgdG8gdXNlIHRoZXNlIG5ldyBmaWVsZHMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgdGhhdCBhZmZlY3RzIHBhZ2UgcmVjbGFpbSBhbmQgd29ya2luZ3NldCBlc3RpbWF0aW9uLiBJdCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG1lbW9yeSBwcmVzc3VyZSBhbmQgZmlsZS9zd2FwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjI1OjU1Ljk5NTc1OTAwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4MzgzMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2Q1ODUyMDkyNzJkODdlZTk3MzE4NzU5NTU2YjNlZTFhYTc3NTFlZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwODoyNTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcXG5pbmRleCAwN2U2ODM2ZDA1MDIwLi5lNTVlNWE3NWFjYjlmIDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC0xOTksNiArMTk5LDI4IEBAXFxuICAqL1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IGJ1Y2tldF9vcmRlcltBTk9OX0FORF9GSUxFXSBfX3JlYWRfbW9zdGx5O1xcbiBcXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXFxuKy8qXFxuKyAqIExSVV9HRU4gc2hhZG93IHRva2VuIGxheW91dCB3aXRoaW4gdGhlIGV2aWN0aW9uIGZpZWxkIChsb3cgdG8gaGlnaCk6XFxuKyAqICAgTFJVX1JFRlNfV0lEVEggYml0czogcmVmc1xcbisgKiAgIEVWSUNUX1NFUV9XSURUSCBiaXRzOiBtaW5fc2VxXFxuKyAqICAgRVZJQ1RfVFNfV0lEVEggYml0czogZXZpY3Rpb24gdGltZSBpbiBqaWZmaWVzXFxuKyAqXFxuKyAqIFNpemUgdGhlIGxheW91dCBmb3IgdGhlIHRpZ2h0ZXIgYW5vbiBtYXNrIHNvIHRoZSB0b2tlbiBmaXRzIGJvdGggZmlsZSBhbmRcXG4rICogYW5vbiBzaGFkb3dzLiBLZWVwIGF0IGxlYXN0IDE2IGJpdHMgZm9yIG1pbl9zZXEgc28gdGhlIHNhbWUtbHJ1dmVjIHJlY2VuY3lcXG4rICogY2hlY2sgZG9lcyBub3Qgd3JhcCBhdCB0aGUgbXVjaCBzaG9ydGVyIExSVV9HRU5fV0lEVEggaW50ZXJ2YWwuXFxuKyAqL1xcbisjZGVmaW5lIEVWSUNUSU9OX0JJVFNcXHRcXHQoQklUU19QRVJfTE9ORyAtIEVWSUNUSU9OX1NISUZUX0FOT04pXFxuKyNkZWZpbmUgRVZJQ1RfUEFZTE9BRF9CSVRTXFx0KEVWSUNUSU9OX0JJVFMgLSBMUlVfUkVGU19XSURUSClcXG4rI2RlZmluZSBFVklDVF9UU19XSURUSFxcdFxcdChFVklDVF9QQVlMT0FEX0JJVFMgXFx1MDAzZSA0MCA/IDI0IDogXFxcXFxcbitcXHRcXHRcXHRcXHQgRVZJQ1RfUEFZTE9BRF9CSVRTIFxcdTAwM2UgMTYgPyBcXFxcXFxuK1xcdFxcdFxcdFxcdCBFVklDVF9QQVlMT0FEX0JJVFMgLSAxNiA6IDApXFxuKyNkZWZpbmUgRVZJQ1RfU0VRX1dJRFRIXFx0XFx0KEVWSUNUX1BBWUxPQURfQklUUyAtIEVWSUNUX1RTX1dJRFRIKVxcbisjZGVmaW5lIEVWSUNUX1RTX1BHT0ZGXFx0XFx0KExSVV9SRUZTX1dJRFRIICsgRVZJQ1RfU0VRX1dJRFRIKVxcbisjZGVmaW5lIEVWSUNUX1NFUV9NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgRVZJQ1RfU0VRX1dJRFRIKSAtIDEpXFxuKyNkZWZpbmUgRVZJQ1RfVFNfTUFTS1xcdFxcdCgoMVVMIFxcdTAwM2NcXHUwMDNjIEVWSUNUX1RTX1dJRFRIKSAtIDEpXFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIHZvaWQgKnBhY2tfc2hhZG93KGludCBtZW1jZ2lkLCBwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIGV2aWN0aW9uLFxcbiBcXHRcXHRcXHQgYm9vbCB3b3JraW5nc2V0LCBib29sIGZpbGUpXFxuIHtcXG5AQCAtMjUwLDEzICsyNzIsMTkgQEAgc3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihMUlVfR0VOX1dJRFRIICsgTFJVX1JFRlNfV0lEVEggXFx1MDAzZVxcbiBcXHRcXHQgICAgIEJJVFNfUEVSX0xPTkcgLSBtYXgoRVZJQ1RJT05fU0hJRlQsIEVWSUNUSU9OX1NISUZUX0FOT04pKTtcXG4rXFx0QlVJTERfQlVHX09OKEVWSUNUX1RTX1dJRFRIIFxcdTAwM2M9IDApO1xcbitcXHRCVUlMRF9CVUdfT04oRVZJQ1RfU0VRX1dJRFRIIFxcdTAwM2MgMTYpO1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfV0lEVEggKyBFVklDVF9TRVFfV0lEVEggK1xcbitcXHRcXHQgICAgIEVWSUNUX1RTX1dJRFRIICE9IEVWSUNUSU9OX0JJVFMpO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4gXFx0bHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbiBcXHRtaW5fc2VxID0gUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLVxcdHRva2VuID0gKG1pbl9zZXEgXFx1MDAzY1xcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHwgbWF4KHJlZnMgLSAxLCAwKTtcXG4rXFx0dG9rZW4gPSAoKG1pbl9zZXEgXFx1MDAyNiBFVklDVF9TRVFfTUFTSykgXFx1MDAzY1xcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHxcXG4rXFx0XFx0bWF4KHJlZnMgLSAxLCAwKTtcXG4rXFx0dG9rZW4gfD0gKGppZmZpZXMgXFx1MDAyNiBFVklDVF9UU19NQVNLKSBcXHUwMDNjXFx1MDAzYyBFVklDVF9UU19QR09GRjtcXG4gXFxuIFxcdGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShtaW5fc2VxKTtcXG4gXFx0YXRvbWljX2xvbmdfYWRkKGRlbHRhLCBcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcXG5AQCAtMjc1LDE4ICszMDMsMjEgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXFxuIHtcXG4gXFx0aW50IG1lbWNnX2lkO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdG9rZW5fc2VxO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XFxuIFxcbitcXHQodm9pZClmaWxlO1xcbitcXG4gXFx0dW5wYWNrX3NoYWRvdyhzaGFkb3csIFxcdTAwMjZtZW1jZ19pZCwgXFx1MDAyNnBnZGF0LCB0b2tlbiwgd29ya2luZ3NldCk7XFxuIFxcbiBcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnX2lkKTtcXG4gXFx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuIFxcbi1cXHRtYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRtYXhfc2VxIFxcdTAwMjY9IChmaWxlID8gRVZJQ1RJT05fTUFTSyA6IEVWSUNUSU9OX01BU0tfQU5PTikgXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfV0lEVEg7XFxuK1xcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWF4X3NlcSkgXFx1MDAyNiBFVklDVF9TRVFfTUFTSztcXG4rXFx0dG9rZW5fc2VxID0gKCp0b2tlbiBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19XSURUSCkgXFx1MDAyNiBFVklDVF9TRVFfTUFTSztcXG4gXFxuLVxcdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCAqdG9rZW4gXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfV0lEVEgpIFxcdTAwM2MgTUFYX05SX0dFTlM7XFxuK1xcdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCB0b2tlbl9zZXEpIFxcdTAwM2MgTUFYX05SX0dFTlM7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuQEAgLTI5NSw3ICszMjYsMTAgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0aW50IGhpc3QsIHRpZXIsIHJlZnM7XFxuIFxcdGJvb2wgd29ya2luZ3NldDtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b2tlbjtcXG4rXFx0dW5zaWduZWQgbG9uZyBldmljdF90cywgcmVmYXVsdF9kaXN0YW5jZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxLCBtaWRkbGVfc2VxLCBiaXJ0aCwgd2luZG93X2FnZTtcXG4gXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbitcXHRzdHJ1Y3QgbHJ1dmVjICpkc3RfbHJ1dmVjO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuO1xcbiBcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbkBAIC0zMDMsOCArMzM3LDI3IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFxuIFxcdHJlY2VudCA9IGxydV9nZW5fdGVzdF9yZWNlbnQoc2hhZG93LCBcXHUwMDI2bHJ1dmVjLCBcXHUwMDI2dG9rZW4sIFxcdTAwMjZ3b3JraW5nc2V0LCB0eXBlKTtcXG4tXFx0aWYgKGxydXZlYyAhPSBmb2xpb19scnV2ZWMoZm9saW8pKVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0ZHN0X2xydXZlYyA9IGZvbGlvX2xydXZlYyhmb2xpbyk7XFxuK1xcbitcXHRpZiAobHJ1dmVjICE9IGRzdF9scnV2ZWMpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogbWluX3NlcSB2YWx1ZXMgZnJvbSBkaWZmZXJlbnQgbHJ1dmVjcyBhcmUgbm90IGNvbXBhcmFibGUuXFxuK1xcdFxcdCAqIEp1ZGdlIGEgY3Jvc3MtbWVtY2cgcmVmYXVsdCBieSB3aGV0aGVyIGl0IGhhcHBlbmVkIHdpdGhpblxcbitcXHRcXHQgKiB0aGUgYWdlIG9mIHRoZSBtaWRkbGUgZ2VuZXJhdGlvbiBpbiB0aGUgZGVzdGluYXRpb25cXG4rXFx0XFx0ICogbHJ1dmVjJ3MgTUFYX05SX0dFTlMgd2luZG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bHJ1dmVjID0gZHN0X2xydXZlYztcXG4rXFx0XFx0bHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHRcXHRtYXhfc2VxID0gUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbWF4X3NlcSk7XFxuK1xcdFxcdG1pZGRsZV9zZXEgPSBtYXhfc2VxIC0gTUFYX05SX0dFTlMgLyAyO1xcbitcXHRcXHRiaXJ0aCA9IFJFQURfT05DRShscnVnZW4tXFx1MDAzZXRpbWVzdGFtcHNbbHJ1X2dlbl9mcm9tX3NlcShtaWRkbGVfc2VxKV0pO1xcbitcXHRcXHR3aW5kb3dfYWdlID0gamlmZmllcyAtIGJpcnRoO1xcbitcXG4rXFx0XFx0ZXZpY3RfdHMgPSAodG9rZW4gXFx1MDAzZVxcdTAwM2UgRVZJQ1RfVFNfUEdPRkYpIFxcdTAwMjYgRVZJQ1RfVFNfTUFTSztcXG4rXFx0XFx0cmVmYXVsdF9kaXN0YW5jZSA9ICgoamlmZmllcyBcXHUwMDI2IEVWSUNUX1RTX01BU0spIC0gZXZpY3RfdHMpIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgRVZJQ1RfVFNfTUFTSztcXG4rXFx0XFx0cmVjZW50ID0gcmVmYXVsdF9kaXN0YW5jZSBcXHUwMDNjPSB3aW5kb3dfYWdlO1xcbitcXHR9XFxuIFxcbiBcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRUZBVUxUX0JBU0UgKyB0eXBlLCBkZWx0YSk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODoyNTo1Ni42NjUwOTMwNzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNzM1MTU0OTExMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid29ya2luZ3NldF9ldmljdGlvblwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDU4NTIwOTI3MmQ4N2VlOTczMTg3NTk1NTZiM2VlMWFhNzc1MWVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDg6MjU6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDA3ZTY4MzZkMDUwMjAuLmU1NWU1YTc1YWNiOWYgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTE5OSw2ICsxOTksMjggQEBcbiAgKi9cbiBzdGF0aWMgdW5zaWduZWQgaW50IGJ1Y2tldF9vcmRlcltBTk9OX0FORF9GSUxFXSBfX3JlYWRfbW9zdGx5O1xuIFxuKyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuKy8qXG4rICogTFJVX0dFTiBzaGFkb3cgdG9rZW4gbGF5b3V0IHdpdGhpbiB0aGUgZXZpY3Rpb24gZmllbGQgKGxvdyB0byBoaWdoKTpcbisgKiAgIExSVV9SRUZTX1dJRFRIIGJpdHM6IHJlZnNcbisgKiAgIEVWSUNUX1NFUV9XSURUSCBiaXRzOiBtaW5fc2VxXG4rICogICBFVklDVF9UU19XSURUSCBiaXRzOiBldmljdGlvbiB0aW1lIGluIGppZmZpZXNcbisgKlxuKyAqIFNpemUgdGhlIGxheW91dCBmb3IgdGhlIHRpZ2h0ZXIgYW5vbiBtYXNrIHNvIHRoZSB0b2tlbiBmaXRzIGJvdGggZmlsZSBhbmRcbisgKiBhbm9uIHNoYWRvd3MuIEtlZXAgYXQgbGVhc3QgMTYgYml0cyBmb3IgbWluX3NlcSBzbyB0aGUgc2FtZS1scnV2ZWMgcmVjZW5jeVxuKyAqIGNoZWNrIGRvZXMgbm90IHdyYXAgYXQgdGhlIG11Y2ggc2hvcnRlciBMUlVfR0VOX1dJRFRIIGludGVydmFsLlxuKyAqL1xuKyNkZWZpbmUgRVZJQ1RJT05fQklUU1x0XHQoQklUU19QRVJfTE9ORyAtIEVWSUNUSU9OX1NISUZUX0FOT04pXG4rI2RlZmluZSBFVklDVF9QQVlMT0FEX0JJVFNcdChFVklDVElPTl9CSVRTIC0gTFJVX1JFRlNfV0lEVEgpXG4rI2RlZmluZSBFVklDVF9UU19XSURUSFx0XHQoRVZJQ1RfUEFZTE9BRF9CSVRTIFx1MDAzZSA0MCA/IDI0IDogXFxcbitcdFx0XHRcdCBFVklDVF9QQVlMT0FEX0JJVFMgXHUwMDNlIDE2ID8gXFxcbitcdFx0XHRcdCBFVklDVF9QQVlMT0FEX0JJVFMgLSAxNiA6IDApXG4rI2RlZmluZSBFVklDVF9TRVFfV0lEVEhcdFx0KEVWSUNUX1BBWUxPQURfQklUUyAtIEVWSUNUX1RTX1dJRFRIKVxuKyNkZWZpbmUgRVZJQ1RfVFNfUEdPRkZcdFx0KExSVV9SRUZTX1dJRFRIICsgRVZJQ1RfU0VRX1dJRFRIKVxuKyNkZWZpbmUgRVZJQ1RfU0VRX01BU0tcdFx0KCgxVUwgXHUwMDNjXHUwMDNjIEVWSUNUX1NFUV9XSURUSCkgLSAxKVxuKyNkZWZpbmUgRVZJQ1RfVFNfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgRVZJQ1RfVFNfV0lEVEgpIC0gMSlcbisjZW5kaWZcbitcbiBzdGF0aWMgdm9pZCAqcGFja19zaGFkb3coaW50IG1lbWNnaWQsIHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgZXZpY3Rpb24sXG4gXHRcdFx0IGJvb2wgd29ya2luZ3NldCwgYm9vbCBmaWxlKVxuIHtcbkBAIC0yNTAsMTMgKzI3MiwxOSBAQCBzdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0QlVJTERfQlVHX09OKExSVV9HRU5fV0lEVEggKyBMUlVfUkVGU19XSURUSCBcdTAwM2VcbiBcdFx0ICAgICBCSVRTX1BFUl9MT05HIC0gbWF4KEVWSUNUSU9OX1NISUZULCBFVklDVElPTl9TSElGVF9BTk9OKSk7XG4rXHRCVUlMRF9CVUdfT04oRVZJQ1RfVFNfV0lEVEggXHUwMDNjPSAwKTtcbitcdEJVSUxEX0JVR19PTihFVklDVF9TRVFfV0lEVEggXHUwMDNjIDE2KTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19XSURUSCArIEVWSUNUX1NFUV9XSURUSCArXG4rXHRcdCAgICAgRVZJQ1RfVFNfV0lEVEggIT0gRVZJQ1RJT05fQklUUyk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiBcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4gXHRscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0bWluX3NlcSA9IFJFQURfT05DRShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR0b2tlbiA9IChtaW5fc2VxIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19XSURUSCkgfCBtYXgocmVmcyAtIDEsIDApO1xuK1x0dG9rZW4gPSAoKG1pbl9zZXEgXHUwMDI2IEVWSUNUX1NFUV9NQVNLKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHxcbitcdFx0bWF4KHJlZnMgLSAxLCAwKTtcbitcdHRva2VuIHw9IChqaWZmaWVzIFx1MDAyNiBFVklDVF9UU19NQVNLKSBcdTAwM2NcdTAwM2MgRVZJQ1RfVFNfUEdPRkY7XG4gXG4gXHRoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobWluX3NlcSk7XG4gXHRhdG9taWNfbG9uZ19hZGQoZGVsdGEsIFx1MDAyNmxydWdlbi1cdTAwM2VldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcbkBAIC0yNzUsMTggKzMwMywyMSBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYyxcbiB7XG4gXHRpbnQgbWVtY2dfaWQ7XG4gXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4rXHR1bnNpZ25lZCBsb25nIHRva2VuX3NlcTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4gXG4rXHQodm9pZClmaWxlO1xuK1xuIFx0dW5wYWNrX3NoYWRvdyhzaGFkb3csIFx1MDAyNm1lbWNnX2lkLCBcdTAwMjZwZ2RhdCwgdG9rZW4sIHdvcmtpbmdzZXQpO1xuIFxuIFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7XG4gXHQqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbiBcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbi1cdG1heF9zZXEgXHUwMDI2PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19XSURUSDtcbitcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKSBcdTAwMjYgRVZJQ1RfU0VRX01BU0s7XG4rXHR0b2tlbl9zZXEgPSAoKnRva2VuIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19XSURUSCkgXHUwMDI2IEVWSUNUX1NFUV9NQVNLO1xuIFxuLVx0cmV0dXJuIGFic19kaWZmKG1heF9zZXEsICp0b2tlbiBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEgpIFx1MDAzYyBNQVhfTlJfR0VOUztcbitcdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCB0b2tlbl9zZXEpIFx1MDAzYyBNQVhfTlJfR0VOUztcbiB9XG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbkBAIC0yOTUsNyArMzI2LDEwIEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpbnQgaGlzdCwgdGllciwgcmVmcztcbiBcdGJvb2wgd29ya2luZ3NldDtcbiBcdHVuc2lnbmVkIGxvbmcgdG9rZW47XG4rXHR1bnNpZ25lZCBsb25nIGV2aWN0X3RzLCByZWZhdWx0X2Rpc3RhbmNlO1xuK1x0dW5zaWduZWQgbG9uZyBtYXhfc2VxLCBtaWRkbGVfc2VxLCBiaXJ0aCwgd2luZG93X2FnZTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbitcdHN0cnVjdCBscnV2ZWMgKmRzdF9scnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuO1xuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMzAzLDggKzMzNywyNyBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuIFx0cmVjZW50ID0gbHJ1X2dlbl90ZXN0X3JlY2VudChzaGFkb3csIFx1MDAyNmxydXZlYywgXHUwMDI2dG9rZW4sIFx1MDAyNndvcmtpbmdzZXQsIHR5cGUpO1xuLVx0aWYgKGxydXZlYyAhPSBmb2xpb19scnV2ZWMoZm9saW8pKVxuLVx0XHRnb3RvIHVubG9jaztcbitcdGRzdF9scnV2ZWMgPSBmb2xpb19scnV2ZWMoZm9saW8pO1xuK1xuK1x0aWYgKGxydXZlYyAhPSBkc3RfbHJ1dmVjKSB7XG4rXHRcdC8qXG4rXHRcdCAqIG1pbl9zZXEgdmFsdWVzIGZyb20gZGlmZmVyZW50IGxydXZlY3MgYXJlIG5vdCBjb21wYXJhYmxlLlxuK1x0XHQgKiBKdWRnZSBhIGNyb3NzLW1lbWNnIHJlZmF1bHQgYnkgd2hldGhlciBpdCBoYXBwZW5lZCB3aXRoaW5cbitcdFx0ICogdGhlIGFnZSBvZiB0aGUgbWlkZGxlIGdlbmVyYXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uXG4rXHRcdCAqIGxydXZlYydzIE1BWF9OUl9HRU5TIHdpbmRvdy5cbitcdFx0ICovXG4rXHRcdGxydXZlYyA9IGRzdF9scnV2ZWM7XG4rXHRcdGxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRcdG1heF9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1heF9zZXEpO1xuK1x0XHRtaWRkbGVfc2VxID0gbWF4X3NlcSAtIE1BWF9OUl9HRU5TIC8gMjtcbitcdFx0YmlydGggPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZXRpbWVzdGFtcHNbbHJ1X2dlbl9mcm9tX3NlcShtaWRkbGVfc2VxKV0pO1xuK1x0XHR3aW5kb3dfYWdlID0gamlmZmllcyAtIGJpcnRoO1xuK1xuK1x0XHRldmljdF90cyA9ICh0b2tlbiBcdTAwM2VcdTAwM2UgRVZJQ1RfVFNfUEdPRkYpIFx1MDAyNiBFVklDVF9UU19NQVNLO1xuK1x0XHRyZWZhdWx0X2Rpc3RhbmNlID0gKChqaWZmaWVzIFx1MDAyNiBFVklDVF9UU19NQVNLKSAtIGV2aWN0X3RzKSBcdTAwMjZcbitcdFx0XHRcdCAgIEVWSUNUX1RTX01BU0s7XG4rXHRcdHJlY2VudCA9IHJlZmF1bHRfZGlzdGFuY2UgXHUwMDNjPSB3aW5kb3dfYWdlO1xuK1x0fVxuIFxuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVGQVVMVF9CQVNFICsgdHlwZSwgZGVsdGEpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MjU6NTYuNjY1MDk1MzQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4ODg0NzUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaGl0dGluZyBgbW0vd29ya2luZ3NldC5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgbXkgZXllYnJvd3MgYmVjYXVzZSB0aGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQncyBwbGF5aW5nIHdpdGggdGhlIHdvcmtpbmdzZXQgbG9naWMsIHdoaWNoIGlzIG9idmlvdXNseSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBzb21lIG5ldyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBgQ09ORklHX0xSVV9HRU5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgY29uZmlnIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgYGxydV9nZW5fZXZpY3Rpb25gLCBgbHJ1X2dlbl90ZXN0X3JlY2VudGAsIGFuZCBgbHJ1X2dlbl9yZWZhdWx0YC4gVGhvc2UgYXJlIGFsbCBrZXkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgTFJVIGFuZCB3b3JraW5nc2V0IGV2aWN0aW9uL3JlZmF1bHQgcHJvY2Vzcy4gTXkgZ3V0IHNheXMgdGhpcyBoYXMgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBpbXBhY3QuIERlcGVuZGluZyBvbiBob3cgYENPTkZJR19MUlVfR0VOYCBpcyB1c2VkLCBpdCBjb3VsZCBkcmFtYXRpY2FsbHkgYWx0ZXIgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBwYWdlIGV2aWN0aW9uLCBvciwgcGVyaGFwcywgcmVmYXVsdCB0cmFja2luZy5cblxuRmlyc3Qgc3RlcDogSSBuZWVkIHRvIGdvIGRpZyBpbnRvIGBtbS9LY29uZmlnYCBvciBzb21ld2hlcmUgc2ltaWxhciB0byBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmb3IgYENPTkZJR19MUlVfR0VOYCBsb29rcyBsaWtlLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdpZGVyIGNvbnRleHQgZm9yIHRoaXMgY2hhbmdlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSdtIGhvcGluZyBJIGNhbiBzdXNzIG91dCBpZiBpdCdzIGEgbmV3IGZlYXR1cmUgb3IgYSByZWZpbmVtZW50IG9mIGFuIGV4aXN0aW5nIG9uZS4gVGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgY2FyZWZ1bGx5IEkgbmVlZCB0byByZXZpZXcgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODoyNjowMi4xNTM5NDY4NTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDg2NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MjA9ZW5kaWYgIyBVU0VSRkFVTFRGRFxcbi0tXFxubW0vS2NvbmZpZy0xNDIyLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDIzOmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDI0LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MzEtXFxubW0vS2NvbmZpZzoxNDMyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MzMtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MzctXFxubW0vS2NvbmZpZzoxNDM4OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDM5LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQ0Ni1cXG5tbS9LY29uZmlnOjE0NDc6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDQ4LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MjY6MDIuMjcxMDQxMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY4NjcwNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkxSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24qKlxuXG5SaWdodCwgc28gYExSVV9HRU5gIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24ga2V5IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgc2V0dGluZyBgTFJVX0dFTmAgYWxvbmUgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlIExSVSBnZW5lcmF0aW9uIHByb2Nlc3MsIG9yIGlmIHRoZXJlJ3MgYW4gYWRkaXRpb25hbCBmbGFnLCBwZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBMUlVfR0VOX0VOQUJMRURgLCB0aGF0IGFsc28gbmVlZHMgdG8gYmUgc2V0LiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBjcml0aWNhbCBmb3IgcHJvcGVyIGltcGxlbWVudGF0aW9uIGFuZCBleHBlY3RlZCBiZWhhdmlvciBvdXQgb2YgdGhlIGJveC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjI2OjA1LjkzOTcxNTQyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ1ODY4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5fRU5BQkxFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDIzPWNvbmZpZyBMUlVfR0VOXFxuLS1cXG5tbS9LY29uZmlnLTE0MzEtXFxubW0vS2NvbmZpZzoxNDMyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MzMtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjI2OjA2LjMwNDMwOTI1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjg2Njg0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBMUlVfR0VOX0VOQUJMRUQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBgTFJVX0dFTl9FTkFCTEVEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQgdXAuIFRoZSBmaXJzdCBwbGFjZSB0byBsb29rLCBhcyBhbHdheXMsIGlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IGl0cyBkZWZhdWx0IHNldHRpbmcgaXMuIFRoaXMgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgZm9yIHdoeSB3ZSBhcmUgbG9va2luZyBhdCB0aGlzLCBhbmQgd2hhdCB3ZSBtaWdodCBkbyB3aXRoIHRoaXMgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MjY6MDkuNDcyOTgwMjUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRlbmRpZiAjIFVTRVJGQVVMVEZEXFxuMTQyMTpcXHRcXG4xNDIyOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQyMzpcXHRjb25maWcgTFJVX0dFTlxcbjE0MjQ6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDI1OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQyNjpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQyNzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDI4OlxcdFxcdGhlbHBcXG4xNDI5OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQzMDpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDMxOlxcdFxcbjE0MzI6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MzM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQzNDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDM1OlxcdFxcdGhlbHBcXG4xNDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0Mzc6XFx0XFxuMTQzODpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0Mzk6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODoyNjowOS40NzMxMjE1MTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzczNjgxMDkzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24gYW5kIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTFJVIGdlbmVyYXRpb24gc3R1ZmYuIEknbSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaG9zZSBhcmUgdGhlIGtleXMgdG8gY29udHJvbGxpbmcgdGhpcyBmZWF0dXJlLiBOb3csIHRoZSBtZWF0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBzZWVtcyB0byBiZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZC4gSSdtIGxvb2tpbmcgYXQgYGxydV9nZW5fZXZpY3Rpb25gLCBgbHJ1X2dlbl90ZXN0X3JlY2VudGAsIGFuZCBgbHJ1X2dlbl9yZWZhdWx0YC4gSSBrbm93IHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhleSBhcmUgaG91c2VkIGluIGBtbS93b3JraW5nc2V0LmNgLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYnJvYWRlciBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGV5J3JlIGludGVncmF0ZWQgYW5kIGhvdyB0aGUgb3ZlcmFsbCBMUlUgZ2VuZXJhdGlvbiBsb2dpYyBpcyBhY3R1YWxseSB1c2VkIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDAsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjMxOjQ2Ljg0MTIzNDkzN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyODc5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fZXZpY3Rpb258bHJ1X2dlbl90ZXN0X3JlY2VudHxscnVfZ2VuX3JlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vd29ya2luZ3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3dvcmtpbmdzZXQuYz0yMzU9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTI1Ni1cXG5tbS93b3JraW5nc2V0LmM6MjU3OnN0YXRpYyB2b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vd29ya2luZ3NldC5jLTI1OC17XFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzAwLSAqL1xcbm1tL3dvcmtpbmdzZXQuYzozMDE6c3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXFxubW0vd29ya2luZ3NldC5jLTMwMi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICp0b2tlbiwgYm9vbCAqd29ya2luZ3NldCwgYm9vbCBmaWxlKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMyMi1cXG5tbS93b3JraW5nc2V0LmM6MzIzOnN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxubW0vd29ya2luZ3NldC5jLTMyNC17XFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzM4LVxcbm1tL3dvcmtpbmdzZXQuYzozMzk6XFx0cmVjZW50ID0gbHJ1X2dlbl90ZXN0X3JlY2VudChzaGFkb3csIFxcdTAwMjZscnV2ZWMsIFxcdTAwMjZ0b2tlbiwgXFx1MDAyNndvcmtpbmdzZXQsIHR5cGUpO1xcbm1tL3dvcmtpbmdzZXQuYy0zNDAtXFx0ZHN0X2xydXZlYyA9IGZvbGlvX2xydXZlYyhmb2xpbyk7XFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzg5LVxcbm1tL3dvcmtpbmdzZXQuYzozOTA6c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS93b3JraW5nc2V0LmMtMzkxLXtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0zOTQtXFxubW0vd29ya2luZ3NldC5jOjM5NTpzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYyxcXG5tbS93b3JraW5nc2V0LmMtMzk2LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnRva2VuLCBib29sICp3b3JraW5nc2V0LCBib29sIGZpbGUpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDAwLVxcbm1tL3dvcmtpbmdzZXQuYzo0MDE6c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG5tbS93b3JraW5nc2V0LmMtNDAyLXtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00NDM9dm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTQ1Ni1cXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vd29ya2luZ3NldC5jOjQ1NzpcXHRcXHRyZXR1cm4gbHJ1X2dlbl9ldmljdGlvbihmb2xpbyk7XFxubW0vd29ya2luZ3NldC5jLTQ1OC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00ODE9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTQ5Ni1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vd29ya2luZ3NldC5jOjQ5NzpcXHRcXHRyZWNlbnQgPSBscnVfZ2VuX3Rlc3RfcmVjZW50KHNoYWRvdywgXFx1MDAyNmV2aWN0aW9uX2xydXZlYywgXFx1MDAyNmV2aWN0aW9uLFxcbm1tL3dvcmtpbmdzZXQuYy00OTgtXFx0XFx0XFx0XFx0XFx0ICAgICB3b3JraW5nc2V0LCBmaWxlKTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01OTk9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTYwOS1cXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcXG5tbS93b3JraW5nc2V0LmM6NjEwOlxcdFxcdGxydV9nZW5fcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG5tbS93b3JraW5nc2V0LmMtNjExLVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MzE6NDcuMzk0MTIxNDQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTgzMDY0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGVudHJ5IHBvaW50cywgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFdvcmtpbmdzZXQgTWVjaGFuaWNzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHdvcmtpbmdzZXQgc3R1ZmYgaXMgZnVuY3Rpb25pbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBzeXN0ZW0gYmVnaW5zIGl0cyB3b3JraW5nc2V0IG1hbmFnZW1lbnQuIE15IGluaXRpYWwgbGlzdCBvZiBlbnRyeSBwb2ludHMgdG8gZXhhbWluZSBpczogYHdvcmtpbmdzZXRfZXZpY3Rpb25gLCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgdGhlIGNvcmUgb3BlcmF0aW9ucy5cblxuTm93LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZWlyIGluZmx1ZW5jZS4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBwdXJlbHkgaW50ZXJuYWwsIHBlcmhhcHMgb25seSB1c2VkIHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZSwgb3IgYXJlIHRoZXkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gTW9yZSBpbXBvcnRhbnRseSwgYXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdXNpbmcgdGhlbT8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBtdWNoIG9mIGEgZGVzaWduIGNoYW5nZSBpbXBsZW1lbnRpbmcgYSBuZXcgZmVhdHVyZSBpbiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUuIFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkIGJlZm9yZSBJIGRpZyBkZWVwZXIuIExldCdzIHNlZSBpZiBJIGNhbiBmaWd1cmUgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODozMTo1MS43OTI0MzAyOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDUzNTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3b3JraW5nc2V0X2V2aWN0aW9ufHdvcmtpbmdzZXRfdGVzdF9yZWNlbnR8d29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9OTUwPWludCBmaWxlbWFwX2FkZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy05ODEtXFx0XFx0aWYgKCEoZ2ZwIFxcdTAwMjYgX19HRlBfV1JJVEUpIFxcdTAwMjZcXHUwMDI2IHNoYWRvdylcXG5tbS9maWxlbWFwLmM6OTgyOlxcdFxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG5tbS9maWxlbWFwLmMtOTgzLVxcdFxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jPTQ1ODA9c3RhdGljIHZvaWQgZmlsZW1hcF9jYWNoZXN0YXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtNDY1MS0jZW5kaWZcXG5tbS9maWxlbWFwLmM6NDY1MjpcXHRcXHRcXHRpZiAod29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIHRydWUsIFxcdTAwMjZ3b3JraW5nc2V0LCBmYWxzZSkpXFxubW0vZmlsZW1hcC5jLTQ2NTMtXFx0XFx0XFx0XFx0Y3MtXFx1MDAzZW5yX3JlY2VudGx5X2V2aWN0ZWQgKz0gbnJfcGFnZXM7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2ND1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWVtY2cxX3N0YXRfbmFtZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODczLVxcdFxcXCJ3cml0ZWJhY2tcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc0OlxcdFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfYW5vblxcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjE4NzU6XFx0XFxcIndvcmtpbmdzZXRfcmVmYXVsdF9maWxlXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ni0jaWZkZWYgQ09ORklHX1NXQVBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTU4NC1cXHQvKiBUaGUgbWVtb3J5IGV2ZW50cyAqL1xcbm1tL21lbWNvbnRyb2wuYzoxNTg1OlxcdHsgXFxcIndvcmtpbmdzZXRfcmVmYXVsdF9hbm9uXFxcIixcXHRXT1JLSU5HU0VUX1JFRkFVTFRfQU5PTlxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1ODY6XFx0eyBcXFwid29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcXFwiLFxcdFdPUktJTkdTRVRfUkVGQVVMVF9GSUxFXFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmMtMTU4Ny1cXHR7IFxcXCJ3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cXFwiLFxcdFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTlxcdH0sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDY1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9wcmVwYXJlX2FuZF9hZGQoc3dwX2VudHJ5X3QgZW50cnksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTAwLVxcdGlmIChzaGFkb3cpXFxubW0vc3dhcF9zdGF0ZS5jOjUwMTpcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxubW0vc3dhcF9zdGF0ZS5jLTUwMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4Nj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NDAtXFx0XFx0aWYgKHJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxcbm1tL3Ztc2Nhbi5jOjc0MTpcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTc0Mi1cXHRcXHRtZW1jZzFfc3dhcG91dChmb2xpbywgc3dhcCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NjYtXFx0XFx0ICAgICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXFx1MDAyNlxcdTAwMjYgIWRheF9tYXBwaW5nKG1hcHBpbmcpKVxcbm1tL3Ztc2Nhbi5jOjc2NzpcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTc2OC1cXHRcXHRfX2ZpbGVtYXBfcmVtb3ZlX2ZvbGlvKGZvbGlvLCBzaGFkb3cpO1xcbi0tXFxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTEyMzEtXFx0W0koV09SS0lOR1NFVF9OT0RFUyldXFx0XFx0XFx0PSBcXFwid29ya2luZ3NldF9ub2Rlc1xcXCIsXFxubW0vdm1zdGF0LmM6MTIzMjpcXHRbSShXT1JLSU5HU0VUX1JFRkFVTFRfQU5PTildXFx0XFx0PSBcXFwid29ya2luZ3NldF9yZWZhdWx0X2Fub25cXFwiLFxcbm1tL3Ztc3RhdC5jOjEyMzM6XFx0W0koV09SS0lOR1NFVF9SRUZBVUxUX0ZJTEUpXVxcdFxcdD0gXFxcIndvcmtpbmdzZXRfcmVmYXVsdF9maWxlXFxcIixcXG5tbS92bXN0YXQuYy0xMjM0LVxcdFtJKFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTildXFx0XFx0PSBcXFwid29ya2luZ3NldF9hY3RpdmF0ZV9hbm9uXFxcIixcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00MTc9dm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDM1LS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo0MzY6ICogd29ya2luZ3NldF9ldmljdGlvbiAtIG5vdGUgdGhlIGV2aWN0aW9uIG9mIGEgZm9saW8gZnJvbSBtZW1vcnlcXG5tbS93b3JraW5nc2V0LmMtNDM3LSAqIEB0YXJnZXRfbWVtY2c6IHRoZSBjZ3JvdXAgdGhhdCBpcyBjYXVzaW5nIHRoZSByZWNsYWltXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDQyLSAqL1xcbm1tL3dvcmtpbmdzZXQuYzo0NDM6dm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxcbm1tL3dvcmtpbmdzZXQuYy00NDQte1xcbi0tXFxubW0vd29ya2luZ3NldC5jLTQ2OS0vKipcXG5tbS93b3JraW5nc2V0LmM6NDcwOiAqIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQgLSB0ZXN0cyBpZiB0aGUgc2hhZG93IGVudHJ5IGlzIGZvciBhIGZvbGlvIHRoYXQgd2FzXFxubW0vd29ya2luZ3NldC5jLTQ3MS0gKiByZWNlbnRseSBldmljdGVkLiBBbHNvIGZpbGxzIGluIEB3b3JraW5nc2V0IHdpdGggdGhlIHZhbHVlIHVucGFja2VkIGZyb21cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy00ODAtICovXFxubW0vd29ya2luZ3NldC5jOjQ4MTpib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxubW0vd29ya2luZ3NldC5jLTQ4Mi1cXHRcXHRcXHRcXHRib29sIGZsdXNoKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTUzMi1cXHQgKlxcbm1tL3dvcmtpbmdzZXQuYzo1MzM6XFx0ICogTm90ZSB0aGF0IHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoKSBpdHNlbGYgbWlnaHQgYmUgY2FsbGVkIGluIFJDVSByZWFkXFxubW0vd29ya2luZ3NldC5jLTUzNC1cXHQgKiBzZWN0aW9uIChmb3IgZS5nLCBpbiBjYWNoZXN0YXQpIC0gdGhlc2UgY2FsbGVycyBuZWVkIHRvIHNraXAgZmx1c2hpbmdcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01OTAtLyoqXFxubW0vd29ya2luZ3NldC5jOjU5MTogKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cXG5tbS93b3JraW5nc2V0LmMtNTkyLSAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU5OC0gKi9cXG5tbS93b3JraW5nc2V0LmM6NTk5OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG5tbS93b3JraW5nc2V0LmMtNjAwLXtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02MjctXFxubW0vd29ya2luZ3NldC5jOjYyODpcXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcXHUwMDI2d29ya2luZ3NldCwgdHJ1ZSkpXFxubW0vd29ya2luZ3NldC5jLTYyOS1cXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MzE6NTEuOTEyOTcwODc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjgwNTcwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHJlYWxseSBjcml0aWNhbCBrZXJuZWwgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGZyb20gdGhlIGhlYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50OiBgZmlsZW1hcGAsIGBzd2FwX3N0YXRlYCwgYW5kIGB2bXNjYW5gLiBUaGlzIGlzIGRlZXAgaW4gdGhlIGNvcmUsIHRoZSBzdHVmZiB0aGF0ICpyZWFsbHkqIG1hdHRlcnMgZm9yIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHRoZSBzaGFkb3cgdG9rZW4gaXMgYXJyYW5nZWQgZm9yIGBDT05GSUdfTFJVX0dFTmAsIGhvdyBpdCdzIHBhY2tlZCBhbmQgdW5wYWNrZWQuIEludGVyZXN0aW5nLCBpdCdzIGFkZGluZyBgRVZJQ1RfVFNfV0lEVEhgIGFuZCBgRVZJQ1RfU0VRX1dJRFRIYCB0byB0aGUgdG9rZW4sIGFuZCB1c2VzIGBqaWZmaWVzYCB0byBrZWVwIHRyYWNrIG9mIGV2aWN0aW9uIHRpbWUuIFRoYXQgcG9pbnRzIHRvIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSBtdWx0aS1nZW4gTFJVIHdvcmtpbmdzZXQgdHJhY2tpbmcgZnVuY3Rpb25zLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byBwcmlvcml0aXplIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGJlIHZlcnkgdGhvcm91Z2guXG5cbkknbGwga2VlcCBhIGNsb3NlIGV5ZSBvbiBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGFzIGtleSBhcmVhcyB0byB3YXRjaC5cblxuRmlyc3QsIEkgc2hvdWxkIGNvbmZpcm0gYExSVV9HRU5gIGlzIGVuYWJsZWQgYnkgY2hlY2tpbmcgYExSVV9HRU5fRU5BQkxFRGAuXG5cblRoZW4sIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llczsgYGRlcGVuZHMgb24gTU1VYCwgYGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUGAgYWxsIHNlZW0gc3RhbmRhcmQsIGJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhleSBhcmUgbm90IGFmZmVjdGVkLlxuXG5GaW5hbGx5LCBJIHdpbGwgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhbHNvIGJlIGFkZGVkIG9yIG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjA4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjMxOjU4LjY0MTAzMDcyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MTk1NzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDIwPWVuZGlmICMgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTQyMi0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQyNC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDMxLVxcbm1tL0tjb25maWc6MTQzMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDMzLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDM3LVxcbm1tL0tjb25maWc6MTQzODpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQzOS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0NDYtXFxubW0vS2NvbmZpZzoxNDQ3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQ0OC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjMyOjAwLjgxMjk5Mjg5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjEyMjg4NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBNR0xSVS4gVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgZW5zdXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIGFyZSBhZGRlZCB0byBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGltcGFjdHMuIExldCdzIGxvb2sgYXQgYHdvcmtpbmdzZXRfZXZpY3Rpb25gLCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCB0byBzZWUgaWYgdGhleSBhcmUgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gUXVpY2tseSBjaGVja2luZyB0aGUgY29kZSwgdGhleSdyZSBkZWZpbmVkIGluIGBtbS93b3JraW5nc2V0LmNgLiBUaGV5J3JlICpub3QqIHN0YXRpYywgYW5kIHRoZXkncmUgKm5vdCogaW5saW5lZCwgc28gdGhleSBhcmUgZGVmaW5pdGVseSBwcmltZSBjYW5kaWRhdGVzIHRvIGZvY3VzIG9uLiBUaGV5IGFyZSBleHBvcnRlZCBvciBnbG9iYWwgZnVuY3Rpb25zLiBHb29kLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJIGRpZG4ndCBtaXNzIGFueXRoaW5nIGVsc2UuIEFoLCBgbHJ1X2dlbl9ldmljdGlvbmAsIGBscnVfZ2VuX3Rlc3RfcmVjZW50YCwgYW5kIGBscnVfZ2VuX3JlZmF1bHRgIGFyZSBzdGF0aWMsIHNvIHRob3NlIGFyZSBub3QgdGhlIGZvY3VzLiBTbyB0aGUgcGF0Y2ggaXMgZm9jdXNlZCBvbiBjaGFuZ2VzIHRvIGBtbS93b3JraW5nc2V0LmNgLlxuXG5Pa2F5LCB0aW1lIHRvIHN1bW1hcml6ZSB0aGUgaW1wbGljYXRpb25zLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IE1HTFJVJ3Mgd29ya2luZ3NldCB0cmFja2luZyB3b3Jrcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vd29ya2luZ3NldC5jYC4gSXQncyBhbHRlcmluZyB0aGUgXCJzaGFkb3cgdG9rZW5cIiBkYXRhIHN0cnVjdHVyZSwgYWRkaW5nIGZpZWxkcyBmb3IgZXZpY3Rpb24gdGltZSAoaW4gamlmZmllcywgaW1wb3J0YW50IGZvciB0aW1pbmcpIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBUaGUgcGF0Y2ggdXBkYXRlcyBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGNvcmUsIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiwgZGVlcGx5IGNvbm5lY3RlZCB0byBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQncyB0cmlnZ2VyZWQgYnkgc3RhbmRhcmQgbWVtb3J5IHByZXNzdXJlLCBhbmQgaXMgaW52b2x2ZWQgaW4gZmlsZSBhbmQgc3dhcCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIFRoZSBtb3N0IGltcG9ydGFudCBgRm9jdXNTeW1ib2xzYCBhcmUgZGVmaW5pdGVseSBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBGaW5hbGx5LCB3ZSBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBMUlVfR0VOYCwgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGJlY2F1c2UgdGhhdCBpcyB0aGUgYmFzZWxpbmUgbmVlZGVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDM0LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODozMjoxMC4wMjUyODQwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI5NTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid29ya2luZ3NldF9ldmljdGlvblwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndvcmtpbmdzZXRfZXZpY3Rpb25cIixcbiAgICBcIndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgd29ya2luZ3NldCB0cmFja2luZyBsb2dpYyBpbiBgbW0vd29ya2luZ3NldC5jYC4gSXQgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIHRoZSBzaGFkb3cgdG9rZW4gdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lIChqaWZmaWVzKSBhbmQgc2VxdWVuY2UgbnVtYmVyLCBhbmQgdXBkYXRlcyB0aGUgZXZpY3Rpb24sIHJlY2VudCB0ZXN0LCBhbmQgcmVmYXVsdCBsb2dpYyB0byB1c2UgdGhlc2UgbmV3IGZpZWxkcy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSB0aGF0IGFmZmVjdHMgcGFnZSByZWNsYWltIGFuZCB3b3JraW5nc2V0IGVzdGltYXRpb24uIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbWVtb3J5IHByZXNzdXJlIGFuZCBmaWxlL3N3YXAgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MzI6MTAuMTgwNTg5NjU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkwNzQ3ODUxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODozMjoxMC4xODMzMjU1MThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjM5MDcyMDQ1NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgTFJVIGdlbmVyYXRpb24gd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWRqdXN0aW5nIGhvdyBzaGFkb3cgdG9rZW5zIGFyZSBwYWNrZWQgYW5kIHVucGFja2VkIHRvIGluY2x1ZGUgZXZpY3Rpb24gdGltZXN0YW1wcyBhbmQgc2VxdWVuY2UgbnVtYmVycy4gQWxsIG5ldyB2YXJpYWJsZXMgaW50cm9kdWNlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdGF0ZSAoZS5nLiwgYGppZmZpZXNgLCBgdG9rZW5gLCBgbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxYCkgYmVmb3JlIHVzZS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Q1ODUyMDkyNzJkODdlZTk3MzE4NzU5NTU2YjNlZTFhYTc3NTFlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjI1OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCAwN2U2ODM2ZDA1MDIwLi5lNTVlNWE3NWFjYjlmIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC0xOTksNiArMTk5LDI4IEBAXG4gICovXG4gc3RhdGljIHVuc2lnbmVkIGludCBidWNrZXRfb3JkZXJbQU5PTl9BTkRfRklMRV0gX19yZWFkX21vc3RseTtcbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKlxuKyAqIExSVV9HRU4gc2hhZG93IHRva2VuIGxheW91dCB3aXRoaW4gdGhlIGV2aWN0aW9uIGZpZWxkIChsb3cgdG8gaGlnaCk6XG4rICogICBMUlVfUkVGU19XSURUSCBiaXRzOiByZWZzXG4rICogICBFVklDVF9TRVFfV0lEVEggYml0czogbWluX3NlcVxuKyAqICAgRVZJQ1RfVFNfV0lEVEggYml0czogZXZpY3Rpb24gdGltZSBpbiBqaWZmaWVzXG4rICpcbisgKiBTaXplIHRoZSBsYXlvdXQgZm9yIHRoZSB0aWdodGVyIGFub24gbWFzayBzbyB0aGUgdG9rZW4gZml0cyBib3RoIGZpbGUgYW5kXG4rICogYW5vbiBzaGFkb3dzLiBLZWVwIGF0IGxlYXN0IDE2IGJpdHMgZm9yIG1pbl9zZXEgc28gdGhlIHNhbWUtbHJ1dmVjIHJlY2VuY3lcbisgKiBjaGVjayBkb2VzIG5vdCB3cmFwIGF0IHRoZSBtdWNoIHNob3J0ZXIgTFJVX0dFTl9XSURUSCBpbnRlcnZhbC5cbisgKi9cbisjZGVmaW5lIEVWSUNUSU9OX0JJVFNcdFx0KEJJVFNfUEVSX0xPTkcgLSBFVklDVElPTl9TSElGVF9BTk9OKVxuKyNkZWZpbmUgRVZJQ1RfUEFZTE9BRF9CSVRTXHQoRVZJQ1RJT05fQklUUyAtIExSVV9SRUZTX1dJRFRIKVxuKyNkZWZpbmUgRVZJQ1RfVFNfV0lEVEhcdFx0KEVWSUNUX1BBWUxPQURfQklUUyBcdTAwM2UgNDAgPyAyNCA6IFxcXG4rXHRcdFx0XHQgRVZJQ1RfUEFZTE9BRF9CSVRTIFx1MDAzZSAxNiA/IFxcXG4rXHRcdFx0XHQgRVZJQ1RfUEFZTE9BRF9CSVRTIC0gMTYgOiAwKVxuKyNkZWZpbmUgRVZJQ1RfU0VRX1dJRFRIXHRcdChFVklDVF9QQVlMT0FEX0JJVFMgLSBFVklDVF9UU19XSURUSClcbisjZGVmaW5lIEVWSUNUX1RTX1BHT0ZGXHRcdChMUlVfUkVGU19XSURUSCArIEVWSUNUX1NFUV9XSURUSClcbisjZGVmaW5lIEVWSUNUX1NFUV9NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBFVklDVF9TRVFfV0lEVEgpIC0gMSlcbisjZGVmaW5lIEVWSUNUX1RTX01BU0tcdFx0KCgxVUwgXHUwMDNjXHUwMDNjIEVWSUNUX1RTX1dJRFRIKSAtIDEpXG4rI2VuZGlmXG4rXG4gc3RhdGljIHZvaWQgKnBhY2tfc2hhZG93KGludCBtZW1jZ2lkLCBwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIGV2aWN0aW9uLFxuIFx0XHRcdCBib29sIHdvcmtpbmdzZXQsIGJvb2wgZmlsZSlcbiB7XG5AQCAtMjUwLDEzICsyNzIsMTkgQEAgc3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdEJVSUxEX0JVR19PTihMUlVfR0VOX1dJRFRIICsgTFJVX1JFRlNfV0lEVEggXHUwMDNlXG4gXHRcdCAgICAgQklUU19QRVJfTE9ORyAtIG1heChFVklDVElPTl9TSElGVCwgRVZJQ1RJT05fU0hJRlRfQU5PTikpO1xuK1x0QlVJTERfQlVHX09OKEVWSUNUX1RTX1dJRFRIIFx1MDAzYz0gMCk7XG4rXHRCVUlMRF9CVUdfT04oRVZJQ1RfU0VRX1dJRFRIIFx1MDAzYyAxNik7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfV0lEVEggKyBFVklDVF9TRVFfV0lEVEggK1xuK1x0XHQgICAgIEVWSUNUX1RTX1dJRFRIICE9IEVWSUNUSU9OX0JJVFMpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuIFx0bHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdG1pbl9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dG9rZW4gPSAobWluX3NlcSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHwgbWF4KHJlZnMgLSAxLCAwKTtcbitcdHRva2VuID0gKChtaW5fc2VxIFx1MDAyNiBFVklDVF9TRVFfTUFTSykgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1dJRFRIKSB8XG4rXHRcdG1heChyZWZzIC0gMSwgMCk7XG4rXHR0b2tlbiB8PSAoamlmZmllcyBcdTAwMjYgRVZJQ1RfVFNfTUFTSykgXHUwMDNjXHUwMDNjIEVWSUNUX1RTX1BHT0ZGO1xuIFxuIFx0aGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKG1pbl9zZXEpO1xuIFx0YXRvbWljX2xvbmdfYWRkKGRlbHRhLCBcdTAwMjZscnVnZW4tXHUwMDNlZXZpY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7XG5AQCAtMjc1LDE4ICszMDMsMjEgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXG4ge1xuIFx0aW50IG1lbWNnX2lkO1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuK1x0dW5zaWduZWQgbG9uZyB0b2tlbl9zZXE7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0O1xuIFxuK1x0KHZvaWQpZmlsZTtcbitcbiBcdHVucGFja19zaGFkb3coc2hhZG93LCBcdTAwMjZtZW1jZ19pZCwgXHUwMDI2cGdkYXQsIHRva2VuLCB3b3JraW5nc2V0KTtcbiBcbiBcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpO1xuIFx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4gXG4tXHRtYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRtYXhfc2VxIFx1MDAyNj0gKGZpbGUgPyBFVklDVElPTl9NQVNLIDogRVZJQ1RJT05fTUFTS19BTk9OKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEg7XG4rXHRtYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSkgXHUwMDI2IEVWSUNUX1NFUV9NQVNLO1xuK1x0dG9rZW5fc2VxID0gKCp0b2tlbiBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEgpIFx1MDAyNiBFVklDVF9TRVFfTUFTSztcbiBcbi1cdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCAqdG9rZW4gXHUwMDNlXHUwMDNlIExSVV9SRUZTX1dJRFRIKSBcdTAwM2MgTUFYX05SX0dFTlM7XG4rXHRyZXR1cm4gYWJzX2RpZmYobWF4X3NlcSwgdG9rZW5fc2VxKSBcdTAwM2MgTUFYX05SX0dFTlM7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5AQCAtMjk1LDcgKzMyNiwxMCBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0aW50IGhpc3QsIHRpZXIsIHJlZnM7XG4gXHRib29sIHdvcmtpbmdzZXQ7XG4gXHR1bnNpZ25lZCBsb25nIHRva2VuO1xuK1x0dW5zaWduZWQgbG9uZyBldmljdF90cywgcmVmYXVsdF9kaXN0YW5jZTtcbitcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgbWlkZGxlX3NlcSwgYmlydGgsIHdpbmRvd19hZ2U7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4rXHRzdHJ1Y3QgbHJ1dmVjICpkc3RfbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuQEAgLTMwMyw4ICszMzcsMjcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbiBcdHJlY2VudCA9IGxydV9nZW5fdGVzdF9yZWNlbnQoc2hhZG93LCBcdTAwMjZscnV2ZWMsIFx1MDAyNnRva2VuLCBcdTAwMjZ3b3JraW5nc2V0LCB0eXBlKTtcbi1cdGlmIChscnV2ZWMgIT0gZm9saW9fbHJ1dmVjKGZvbGlvKSlcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRkc3RfbHJ1dmVjID0gZm9saW9fbHJ1dmVjKGZvbGlvKTtcbitcbitcdGlmIChscnV2ZWMgIT0gZHN0X2xydXZlYykge1xuK1x0XHQvKlxuK1x0XHQgKiBtaW5fc2VxIHZhbHVlcyBmcm9tIGRpZmZlcmVudCBscnV2ZWNzIGFyZSBub3QgY29tcGFyYWJsZS5cbitcdFx0ICogSnVkZ2UgYSBjcm9zcy1tZW1jZyByZWZhdWx0IGJ5IHdoZXRoZXIgaXQgaGFwcGVuZWQgd2l0aGluXG4rXHRcdCAqIHRoZSBhZ2Ugb2YgdGhlIG1pZGRsZSBnZW5lcmF0aW9uIGluIHRoZSBkZXN0aW5hdGlvblxuK1x0XHQgKiBscnV2ZWMncyBNQVhfTlJfR0VOUyB3aW5kb3cuXG4rXHRcdCAqL1xuK1x0XHRscnV2ZWMgPSBkc3RfbHJ1dmVjO1xuK1x0XHRscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuK1x0XHRtYXhfc2VxID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2VtYXhfc2VxKTtcbitcdFx0bWlkZGxlX3NlcSA9IG1heF9zZXEgLSBNQVhfTlJfR0VOUyAvIDI7XG4rXHRcdGJpcnRoID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW2xydV9nZW5fZnJvbV9zZXEobWlkZGxlX3NlcSldKTtcbitcdFx0d2luZG93X2FnZSA9IGppZmZpZXMgLSBiaXJ0aDtcbitcbitcdFx0ZXZpY3RfdHMgPSAodG9rZW4gXHUwMDNlXHUwMDNlIEVWSUNUX1RTX1BHT0ZGKSBcdTAwMjYgRVZJQ1RfVFNfTUFTSztcbitcdFx0cmVmYXVsdF9kaXN0YW5jZSA9ICgoamlmZmllcyBcdTAwMjYgRVZJQ1RfVFNfTUFTSykgLSBldmljdF90cykgXHUwMDI2XG4rXHRcdFx0XHQgICBFVklDVF9UU19NQVNLO1xuK1x0XHRyZWNlbnQgPSByZWZhdWx0X2Rpc3RhbmNlIFx1MDAzYz0gd2luZG93X2FnZTtcbitcdH1cbiBcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX1JFRkFVTFRfQkFTRSArIHR5cGUsIGRlbHRhKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjMyOjEwLjE4MzMyNzA0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzkwNzIwMjU0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTFJVIEdlbmVyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBtbS93b3JraW5nc2V0LmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgaXQncyBhbGwgYWJvdXQgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0d2Vha2luZyB0aGUgTFJVIGdlbmVyYXRpb24gd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLiBJdCdzIHVzaW5nIGJpdHdpc2Ugb3BlcmF0aW9ucyBhbmQgbmV3IG1hY3JvcyB0byBoYW5kbGUgdGhlIGBMUlVfR0VOYCBzaGFkb3cgdG9rZW4gbGF5b3V0LiBUaGlzIG1haW5seSBpbXBhY3RzIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX2V2aWN0aW9uYCwgYGxydV9nZW5fdGVzdF9yZWNlbnRgLCBhbmQgYGxydV9nZW5fcmVmYXVsdGAuXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBtYW5pcHVsYXRpbmcgdmFyaWFibGVzIGxpa2UgYHRva2VuYCwgYG1pbl9zZXFgLCBgamlmZmllc2AsIGBtYXhfc2VxYCwgYHRva2VuX3NlcWAsIGBldmljdF90c2AsIGByZWZhdWx0X2Rpc3RhbmNlYCwgZXRjLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBoYXBwZW5pbmcgaGVyZSwgYW5kIGNydWNpYWxseSwgbm90aGluZyBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXTigJlzIGFsbCBpbnRlcm5hbCwgYW5kIHRoZSBsb2dpYyByZWxpZXMgb24gZXN0YWJsaXNoZWQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgamlmZmllc2AsIGV4aXN0aW5nIHNlcXVlbmNlIG51bWJlcnMsIGFuZCwgaW1wb3J0YW50bHksIHRoZSBgdG9rZW5gLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4gd2FzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSG93ZXZlciwgdGhlIG1vcmUgSSBkaWcsIEkgc2VlIHRoYXQgaXNuJ3QgYSBwcm9ibGVtLiBBbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgcHVsbGluZyB2YWx1ZXMgZnJvbSB0aGluZ3MgbGlrZSBgamlmZmllc2AsIGB0b2tlbmAsIGFuZCBgbHJ1Z2VuLVx1MDAzZW1heF9zZXFgLiAgV2FpdCwgYHRva2VuYCBjb21lcyBmcm9tIGB1bnBhY2tfc2hhZG93YCwgd2hpY2ggdW5wYWNrcyB0aGUgYHNoYWRvd2AgYXJndW1lbnQsIHBhc3NlZCBhcyBgdm9pZCAqYC4gTGV0IG1lIGNvbmZpcm0gdGhhdCBgdW5wYWNrX3NoYWRvd2AgaXMgc2FmZS4gQWgsIGl0IHVucGFja3MgdGhlIHNoYWRvdyBkYXRhIGFuZCBpdCBpcyBhbHNvIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLlxuXG5Pa2F5LCBjaGVja2luZyB0aGUgc3BlY2lmaWNzIG9mIGBscnVfZ2VuX3JlZmF1bHRgIGFnYWluLCBJIHNlZSB0aGF0IGxvY2FsIHZhcmlhYmxlcyBsaWtlIGBldmljdF90c2AsIGByZWZhdWx0X2Rpc3RhbmNlYCwgYG1heF9zZXFgLCBhbmQgc28gb24gYXJlIGFsbCBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGJlZm9yZSB0aGVpciB1c2UuIFRoZSBjcnVjaWFsIGNhbGN1bGF0aW9uIG9mIGByZWZhdWx0X2Rpc3RhbmNlYCBkZXBlbmRzIG9uIGBqaWZmaWVzYCBhbmQgYSB2YWx1ZSBleHRyYWN0ZWQgZnJvbSBgdG9rZW5gIGl0c2VsZiwgYm90aCBpbml0aWFsaXplZC5cblxuYGBgY1xuXHR1bnNpZ25lZCBsb25nIGV2aWN0X3RzLCByZWZhdWx0X2Rpc3RhbmNlO1xuXHR1bnNpZ25lZCBsb25nIG1heF9zZXEsIG1pZGRsZV9zZXEsIGJpcnRoLCB3aW5kb3dfYWdlO1xuYGBgXG5cbmBgYGNcblx0XHRtYXhfc2VxID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2VtYXhfc2VxKTtcblx0XHRtaWRkbGVfc2VxID0gbWF4X3NlcSAtIE1BWF9OUl9HRU5TIC8gMjtcblx0XHRiaXJ0aCA9IFJFQURfT05DRShscnVnZW4tXHUwMDNldGltZXN0YW1wc1tscnVfZ2VuX2Zyb21fc2VxKG1pZGRsZV9zZXEpXSk7XG5cdFx0d2luZG93X2FnZSA9IGppZmZpZXMgLSBiaXJ0aDtcblxuXHRcdGV2aWN0X3RzID0gKHRva2VuIFx1MDAzZVx1MDAzZSBFVklDVF9UU19QR09GRikgXHUwMDI2IEVWSUNUX1RTX01BU0s7XG5cdFx0cmVmYXVsdF9kaXN0YW5jZSA9ICgoamlmZmllcyBcdTAwMjYgRVZJQ1RfVFNfTUFTSykgLSBldmljdF90cykgXHUwMDI2XG5cdFx0XHRcdCAgIEVWSUNUX1RTX01BU0s7XG5cdFx0cmVjZW50ID0gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdpbmRvd19hZ2U7XG5gYGBcblxuVGhpcyBjb25maXJtcyBpdC4gIEknbSBjb25maWRlbnQgdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlIGhlcmUsIGFuZCBJIGRvbid0IHNlZSBhbnkgb3RoZXIgY29uY2VybmluZyBpc3N1ZXMuIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBnaXZlbiB0aGUgcGF0Y2gncyBzY29wZS4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA1LCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjM2OjA5LjI1NTM1NTIxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIExSVSBnZW5lcmF0aW9uIHdvcmtpbmdzZXQgcmVmYXVsdCBsb2dpYywgc3BlY2lmaWNhbGx5IGFkanVzdGluZyBob3cgc2hhZG93IHRva2VucyBhcmUgcGFja2VkIGFuZCB1bnBhY2tlZCB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWVzdGFtcHMgYW5kIHNlcXVlbmNlIG51bWJlcnMuIEFsbCBuZXcgdmFyaWFibGVzIGludHJvZHVjZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcgc3RhdGUgKGUuZy4sIGBqaWZmaWVzYCwgYHRva2VuYCwgYGxydWdlbi1cXHUwMDNlbWF4X3NlcWApIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgaG93IHNoYWRvdyB0b2tlbnMgYXJlIHBhY2tlZCBhbmQgdW5wYWNrZWQgdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lc3RhbXBzIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBBbGwgbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0YXRlIChlLmcuLCBgamlmZmllc2AsIGB0b2tlbmAsIGBscnVnZW4tXFx1MDAzZW1heF9zZXFgKSBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjsn6s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 08:02:09 +0000 UTC FinishedAt: 2026-08-26 08:36:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e366c15e1610ef11d0717ecd875ae63050282676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e366c15e1610ef11d0717ecd875ae63050282676", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "f129603d-b433-415f-945b-025f8881fee1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "workingset_eviction", "workingset_test_recent", "workingset_refault" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dvcmtpbmdzZXRfZXZpY3Rpb24mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgTFJVIGdlbmVyYXRpb24gd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWRqdXN0aW5nIGhvdyBzaGFkb3cgdG9rZW5zIGFyZSBwYWNrZWQgYW5kIHVucGFja2VkIHRvIGluY2x1ZGUgZXZpY3Rpb24gdGltZXN0YW1wcyBhbmQgc2VxdWVuY2UgbnVtYmVycy4gQWxsIG5ldyB2YXJpYWJsZXMgaW50cm9kdWNlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdGF0ZSAoZS5nLiwgYGppZmZpZXNgLCBgdG9rZW5gLCBgbHJ1Z2VuLVx1MDAzZW1heF9zZXFgKSBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2Q1ODUyMDkyNzJkODdlZTk3MzE4NzU5NTU2YjNlZTFhYTc3NTFlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjI1OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggMDdlNjgzNmQwNTAyMC4uZTU1ZTVhNzVhY2I5ZiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtMTk5LDYgJiM0MzsxOTksMjggQEBcbiAgKi9cbiBzdGF0aWMgdW5zaWduZWQgaW50IGJ1Y2tldF9vcmRlcltBTk9OX0FORF9GSUxFXSBfX3JlYWRfbW9zdGx5O1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU5cbiYjNDM7LypcbiYjNDM7ICogTFJVX0dFTiBzaGFkb3cgdG9rZW4gbGF5b3V0IHdpdGhpbiB0aGUgZXZpY3Rpb24gZmllbGQgKGxvdyB0byBoaWdoKTpcbiYjNDM7ICogICBMUlVfUkVGU19XSURUSCBiaXRzOiByZWZzXG4mIzQzOyAqICAgRVZJQ1RfU0VRX1dJRFRIIGJpdHM6IG1pbl9zZXFcbiYjNDM7ICogICBFVklDVF9UU19XSURUSCBiaXRzOiBldmljdGlvbiB0aW1lIGluIGppZmZpZXNcbiYjNDM7ICpcbiYjNDM7ICogU2l6ZSB0aGUgbGF5b3V0IGZvciB0aGUgdGlnaHRlciBhbm9uIG1hc2sgc28gdGhlIHRva2VuIGZpdHMgYm90aCBmaWxlIGFuZFxuJiM0MzsgKiBhbm9uIHNoYWRvd3MuIEtlZXAgYXQgbGVhc3QgMTYgYml0cyBmb3IgbWluX3NlcSBzbyB0aGUgc2FtZS1scnV2ZWMgcmVjZW5jeVxuJiM0MzsgKiBjaGVjayBkb2VzIG5vdCB3cmFwIGF0IHRoZSBtdWNoIHNob3J0ZXIgTFJVX0dFTl9XSURUSCBpbnRlcnZhbC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRVZJQ1RJT05fQklUU1x0XHQoQklUU19QRVJfTE9ORyAtIEVWSUNUSU9OX1NISUZUX0FOT04pXG4mIzQzOyNkZWZpbmUgRVZJQ1RfUEFZTE9BRF9CSVRTXHQoRVZJQ1RJT05fQklUUyAtIExSVV9SRUZTX1dJRFRIKVxuJiM0MzsjZGVmaW5lIEVWSUNUX1RTX1dJRFRIXHRcdChFVklDVF9QQVlMT0FEX0JJVFMgXHUwMDNlIDQwID8gMjQgOiBcXFxuJiM0MztcdFx0XHRcdCBFVklDVF9QQVlMT0FEX0JJVFMgXHUwMDNlIDE2ID8gXFxcbiYjNDM7XHRcdFx0XHQgRVZJQ1RfUEFZTE9BRF9CSVRTIC0gMTYgOiAwKVxuJiM0MzsjZGVmaW5lIEVWSUNUX1NFUV9XSURUSFx0XHQoRVZJQ1RfUEFZTE9BRF9CSVRTIC0gRVZJQ1RfVFNfV0lEVEgpXG4mIzQzOyNkZWZpbmUgRVZJQ1RfVFNfUEdPRkZcdFx0KExSVV9SRUZTX1dJRFRIICYjNDM7IEVWSUNUX1NFUV9XSURUSClcbiYjNDM7I2RlZmluZSBFVklDVF9TRVFfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgRVZJQ1RfU0VRX1dJRFRIKSAtIDEpXG4mIzQzOyNkZWZpbmUgRVZJQ1RfVFNfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgRVZJQ1RfVFNfV0lEVEgpIC0gMSlcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyB2b2lkICpwYWNrX3NoYWRvdyhpbnQgbWVtY2dpZCwgcGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBldmljdGlvbixcbiBcdFx0XHQgYm9vbCB3b3JraW5nc2V0LCBib29sIGZpbGUpXG4ge1xuQEAgLTI1MCwxMyAmIzQzOzI3MiwxOSBAQCBzdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0QlVJTERfQlVHX09OKExSVV9HRU5fV0lEVEggJiM0MzsgTFJVX1JFRlNfV0lEVEggXHUwMDNlXG4gXHRcdCAgICAgQklUU19QRVJfTE9ORyAtIG1heChFVklDVElPTl9TSElGVCwgRVZJQ1RJT05fU0hJRlRfQU5PTikpO1xuJiM0MztcdEJVSUxEX0JVR19PTihFVklDVF9UU19XSURUSCBcdTAwM2M9IDApO1xuJiM0MztcdEJVSUxEX0JVR19PTihFVklDVF9TRVFfV0lEVEggXHUwMDNjIDE2KTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfV0lEVEggJiM0MzsgRVZJQ1RfU0VRX1dJRFRIICYjNDM7XG4mIzQzO1x0XHQgICAgIEVWSUNUX1RTX1dJRFRIICE9IEVWSUNUSU9OX0JJVFMpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuIFx0bHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdG1pbl9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dG9rZW4gPSAobWluX3NlcSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHwgbWF4KHJlZnMgLSAxLCAwKTtcbiYjNDM7XHR0b2tlbiA9ICgobWluX3NlcSBcdTAwMjYgRVZJQ1RfU0VRX01BU0spIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19XSURUSCkgfFxuJiM0MztcdFx0bWF4KHJlZnMgLSAxLCAwKTtcbiYjNDM7XHR0b2tlbiB8PSAoamlmZmllcyBcdTAwMjYgRVZJQ1RfVFNfTUFTSykgXHUwMDNjXHUwMDNjIEVWSUNUX1RTX1BHT0ZGO1xuIFxuIFx0aGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKG1pbl9zZXEpO1xuIFx0YXRvbWljX2xvbmdfYWRkKGRlbHRhLCBcdTAwMjZscnVnZW4tXHUwMDNlZXZpY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7XG5AQCAtMjc1LDE4ICYjNDM7MzAzLDIxIEBAIHN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxuIHtcbiBcdGludCBtZW1jZ19pZDtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRva2VuX3NlcTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4gXG4mIzQzO1x0KHZvaWQpZmlsZTtcbiYjNDM7XG4gXHR1bnBhY2tfc2hhZG93KHNoYWRvdywgXHUwMDI2bWVtY2dfaWQsIFx1MDAyNnBnZGF0LCB0b2tlbiwgd29ya2luZ3NldCk7XG4gXG4gXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnX2lkKTtcbiBcdCpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuIFxuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgoKmxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0bWF4X3NlcSBcdTAwMjY9IChmaWxlID8gRVZJQ1RJT05fTUFTSyA6IEVWSUNUSU9OX01BU0tfQU5PTikgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1dJRFRIO1xuJiM0MztcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKSBcdTAwMjYgRVZJQ1RfU0VRX01BU0s7XG4mIzQzO1x0dG9rZW5fc2VxID0gKCp0b2tlbiBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEgpIFx1MDAyNiBFVklDVF9TRVFfTUFTSztcbiBcbi1cdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCAqdG9rZW4gXHUwMDNlXHUwMDNlIExSVV9SRUZTX1dJRFRIKSBcdTAwM2MgTUFYX05SX0dFTlM7XG4mIzQzO1x0cmV0dXJuIGFic19kaWZmKG1heF9zZXEsIHRva2VuX3NlcSkgXHUwMDNjIE1BWF9OUl9HRU5TO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuQEAgLTI5NSw3ICYjNDM7MzI2LDEwIEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpbnQgaGlzdCwgdGllciwgcmVmcztcbiBcdGJvb2wgd29ya2luZ3NldDtcbiBcdHVuc2lnbmVkIGxvbmcgdG9rZW47XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBldmljdF90cywgcmVmYXVsdF9kaXN0YW5jZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1heF9zZXEsIG1pZGRsZV9zZXEsIGJpcnRoLCB3aW5kb3dfYWdlO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuJiM0MztcdHN0cnVjdCBscnV2ZWMgKmRzdF9scnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuO1xuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMzAzLDggJiM0MzszMzcsMjcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbiBcdHJlY2VudCA9IGxydV9nZW5fdGVzdF9yZWNlbnQoc2hhZG93LCBcdTAwMjZscnV2ZWMsIFx1MDAyNnRva2VuLCBcdTAwMjZ3b3JraW5nc2V0LCB0eXBlKTtcbi1cdGlmIChscnV2ZWMgIT0gZm9saW9fbHJ1dmVjKGZvbGlvKSlcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0ZHN0X2xydXZlYyA9IGZvbGlvX2xydXZlYyhmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmIChscnV2ZWMgIT0gZHN0X2xydXZlYykge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIG1pbl9zZXEgdmFsdWVzIGZyb20gZGlmZmVyZW50IGxydXZlY3MgYXJlIG5vdCBjb21wYXJhYmxlLlxuJiM0MztcdFx0ICogSnVkZ2UgYSBjcm9zcy1tZW1jZyByZWZhdWx0IGJ5IHdoZXRoZXIgaXQgaGFwcGVuZWQgd2l0aGluXG4mIzQzO1x0XHQgKiB0aGUgYWdlIG9mIHRoZSBtaWRkbGUgZ2VuZXJhdGlvbiBpbiB0aGUgZGVzdGluYXRpb25cbiYjNDM7XHRcdCAqIGxydXZlYyYjMzk7cyBNQVhfTlJfR0VOUyB3aW5kb3cuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGxydXZlYyA9IGRzdF9scnV2ZWM7XG4mIzQzO1x0XHRscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuJiM0MztcdFx0bWF4X3NlcSA9IFJFQURfT05DRShscnVnZW4tXHUwMDNlbWF4X3NlcSk7XG4mIzQzO1x0XHRtaWRkbGVfc2VxID0gbWF4X3NlcSAtIE1BWF9OUl9HRU5TIC8gMjtcbiYjNDM7XHRcdGJpcnRoID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW2xydV9nZW5fZnJvbV9zZXEobWlkZGxlX3NlcSldKTtcbiYjNDM7XHRcdHdpbmRvd19hZ2UgPSBqaWZmaWVzIC0gYmlydGg7XG4mIzQzO1xuJiM0MztcdFx0ZXZpY3RfdHMgPSAodG9rZW4gXHUwMDNlXHUwMDNlIEVWSUNUX1RTX1BHT0ZGKSBcdTAwMjYgRVZJQ1RfVFNfTUFTSztcbiYjNDM7XHRcdHJlZmF1bHRfZGlzdGFuY2UgPSAoKGppZmZpZXMgXHUwMDI2IEVWSUNUX1RTX01BU0spIC0gZXZpY3RfdHMpIFx1MDAyNlxuJiM0MztcdFx0XHRcdCAgIEVWSUNUX1RTX01BU0s7XG4mIzQzO1x0XHRyZWNlbnQgPSByZWZhdWx0X2Rpc3RhbmNlIFx1MDAzYz0gd2luZG93X2FnZTtcbiYjNDM7XHR9XG4gXG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRUZBVUxUX0JBU0UgJiM0MzsgdHlwZSwgZGVsdGEpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dvcmtpbmdzZXRfZXZpY3Rpb24mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2Q1ODUyMDkyNzJkODdlZTk3MzE4NzU5NTU2YjNlZTFhYTc3NTFlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA4OjI1OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IDA3ZTY4MzZkMDUwMjAuLmU1NWU1YTc1YWNiOWYgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTE5OSw2ICYjNDM7MTk5LDI4IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnVja2V0X29yZGVyW0FOT05fQU5EX0ZJTEVdIF9fcmVhZF9tb3N0bHk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsvKgomIzQzOyAqIExSVV9HRU4gc2hhZG93IHRva2VuIGxheW91dCB3aXRoaW4gdGhlIGV2aWN0aW9uIGZpZWxkIChsb3cgdG8gaGlnaCk6CiYjNDM7ICogICBMUlVfUkVGU19XSURUSCBiaXRzOiByZWZzCiYjNDM7ICogICBFVklDVF9TRVFfV0lEVEggYml0czogbWluX3NlcQomIzQzOyAqICAgRVZJQ1RfVFNfV0lEVEggYml0czogZXZpY3Rpb24gdGltZSBpbiBqaWZmaWVzCiYjNDM7ICoKJiM0MzsgKiBTaXplIHRoZSBsYXlvdXQgZm9yIHRoZSB0aWdodGVyIGFub24gbWFzayBzbyB0aGUgdG9rZW4gZml0cyBib3RoIGZpbGUgYW5kCiYjNDM7ICogYW5vbiBzaGFkb3dzLiBLZWVwIGF0IGxlYXN0IDE2IGJpdHMgZm9yIG1pbl9zZXEgc28gdGhlIHNhbWUtbHJ1dmVjIHJlY2VuY3kKJiM0MzsgKiBjaGVjayBkb2VzIG5vdCB3cmFwIGF0IHRoZSBtdWNoIHNob3J0ZXIgTFJVX0dFTl9XSURUSCBpbnRlcnZhbC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEVWSUNUSU9OX0JJVFMJCShCSVRTX1BFUl9MT05HIC0gRVZJQ1RJT05fU0hJRlRfQU5PTikKJiM0MzsjZGVmaW5lIEVWSUNUX1BBWUxPQURfQklUUwkoRVZJQ1RJT05fQklUUyAtIExSVV9SRUZTX1dJRFRIKQomIzQzOyNkZWZpbmUgRVZJQ1RfVFNfV0lEVEgJCShFVklDVF9QQVlMT0FEX0JJVFMgJmd0OyA0MCA/IDI0IDogXAomIzQzOwkJCQkgRVZJQ1RfUEFZTE9BRF9CSVRTICZndDsgMTYgPyBcCiYjNDM7CQkJCSBFVklDVF9QQVlMT0FEX0JJVFMgLSAxNiA6IDApCiYjNDM7I2RlZmluZSBFVklDVF9TRVFfV0lEVEgJCShFVklDVF9QQVlMT0FEX0JJVFMgLSBFVklDVF9UU19XSURUSCkKJiM0MzsjZGVmaW5lIEVWSUNUX1RTX1BHT0ZGCQkoTFJVX1JFRlNfV0lEVEggJiM0MzsgRVZJQ1RfU0VRX1dJRFRIKQomIzQzOyNkZWZpbmUgRVZJQ1RfU0VRX01BU0sJCSgoMVVMICZsdDsmbHQ7IEVWSUNUX1NFUV9XSURUSCkgLSAxKQomIzQzOyNkZWZpbmUgRVZJQ1RfVFNfTUFTSwkJKCgxVUwgJmx0OyZsdDsgRVZJQ1RfVFNfV0lEVEgpIC0gMSkKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyB2b2lkICpwYWNrX3NoYWRvdyhpbnQgbWVtY2dpZCwgcGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBldmljdGlvbiwKIAkJCSBib29sIHdvcmtpbmdzZXQsIGJvb2wgZmlsZSkKIHsKQEAgLTI1MCwxMyAmIzQzOzI3MiwxOSBAQCBzdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJQlVJTERfQlVHX09OKExSVV9HRU5fV0lEVEggJiM0MzsgTFJVX1JFRlNfV0lEVEggJmd0OwogCQkgICAgIEJJVFNfUEVSX0xPTkcgLSBtYXgoRVZJQ1RJT05fU0hJRlQsIEVWSUNUSU9OX1NISUZUX0FOT04pKTsKJiM0MzsJQlVJTERfQlVHX09OKEVWSUNUX1RTX1dJRFRIICZsdDs9IDApOwomIzQzOwlCVUlMRF9CVUdfT04oRVZJQ1RfU0VRX1dJRFRIICZsdDsgMTYpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfV0lEVEggJiM0MzsgRVZJQ1RfU0VRX1dJRFRIICYjNDM7CiYjNDM7CQkgICAgIEVWSUNUX1RTX1dJRFRIICE9IEVWSUNUSU9OX0JJVFMpOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CiAJbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAltaW5fc2VxID0gUkVBRF9PTkNFKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7Ci0JdG9rZW4gPSAobWluX3NlcSAmbHQ7Jmx0OyBMUlVfUkVGU19XSURUSCkgfCBtYXgocmVmcyAtIDEsIDApOwomIzQzOwl0b2tlbiA9ICgobWluX3NlcSAmYW1wOyBFVklDVF9TRVFfTUFTSykgJmx0OyZsdDsgTFJVX1JFRlNfV0lEVEgpIHwKJiM0MzsJCW1heChyZWZzIC0gMSwgMCk7CiYjNDM7CXRva2VuIHw9IChqaWZmaWVzICZhbXA7IEVWSUNUX1RTX01BU0spICZsdDsmbHQ7IEVWSUNUX1RTX1BHT0ZGOwogCiAJaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKG1pbl9zZXEpOwogCWF0b21pY19sb25nX2FkZChkZWx0YSwgJmFtcDtscnVnZW4tJmd0O2V2aWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0pOwpAQCAtMjc1LDE4ICYjNDM7MzAzLDIxIEBAIHN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLAogewogCWludCBtZW1jZ19pZDsKIAl1bnNpZ25lZCBsb25nIG1heF9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdG9rZW5fc2VxOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwogCiYjNDM7CSh2b2lkKWZpbGU7CiYjNDM7CiAJdW5wYWNrX3NoYWRvdyhzaGFkb3csICZhbXA7bWVtY2dfaWQsICZhbXA7cGdkYXQsIHRva2VuLCB3b3JraW5nc2V0KTsKIAogCW1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpOwogCSpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwogCi0JbWF4X3NlcSA9IFJFQURfT05DRSgoKmxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKLQltYXhfc2VxICZhbXA7PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pICZndDsmZ3Q7IExSVV9SRUZTX1dJRFRIOwomIzQzOwltYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpICZhbXA7IEVWSUNUX1NFUV9NQVNLOwomIzQzOwl0b2tlbl9zZXEgPSAoKnRva2VuICZndDsmZ3Q7IExSVV9SRUZTX1dJRFRIKSAmYW1wOyBFVklDVF9TRVFfTUFTSzsKIAotCXJldHVybiBhYnNfZGlmZihtYXhfc2VxLCAqdG9rZW4gJmd0OyZndDsgTFJVX1JFRlNfV0lEVEgpICZsdDsgTUFYX05SX0dFTlM7CiYjNDM7CXJldHVybiBhYnNfZGlmZihtYXhfc2VxLCB0b2tlbl9zZXEpICZsdDsgTUFYX05SX0dFTlM7CiB9CiAKIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCkBAIC0yOTUsNyAmIzQzOzMyNiwxMCBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWludCBoaXN0LCB0aWVyLCByZWZzOwogCWJvb2wgd29ya2luZ3NldDsKIAl1bnNpZ25lZCBsb25nIHRva2VuOwomIzQzOwl1bnNpZ25lZCBsb25nIGV2aWN0X3RzLCByZWZhdWx0X2Rpc3RhbmNlOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heF9zZXEsIG1pZGRsZV9zZXEsIGJpcnRoLCB3aW5kb3dfYWdlOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKJiM0MzsJc3RydWN0IGxydXZlYyAqZHN0X2xydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuOwogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKQEAgLTMwMyw4ICYjNDM7MzM3LDI3IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJcmVjZW50ID0gbHJ1X2dlbl90ZXN0X3JlY2VudChzaGFkb3csICZhbXA7bHJ1dmVjLCAmYW1wO3Rva2VuLCAmYW1wO3dvcmtpbmdzZXQsIHR5cGUpOwotCWlmIChscnV2ZWMgIT0gZm9saW9fbHJ1dmVjKGZvbGlvKSkKLQkJZ290byB1bmxvY2s7CiYjNDM7CWRzdF9scnV2ZWMgPSBmb2xpb19scnV2ZWMoZm9saW8pOwomIzQzOwomIzQzOwlpZiAobHJ1dmVjICE9IGRzdF9scnV2ZWMpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBtaW5fc2VxIHZhbHVlcyBmcm9tIGRpZmZlcmVudCBscnV2ZWNzIGFyZSBub3QgY29tcGFyYWJsZS4KJiM0MzsJCSAqIEp1ZGdlIGEgY3Jvc3MtbWVtY2cgcmVmYXVsdCBieSB3aGV0aGVyIGl0IGhhcHBlbmVkIHdpdGhpbgomIzQzOwkJICogdGhlIGFnZSBvZiB0aGUgbWlkZGxlIGdlbmVyYXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uCiYjNDM7CQkgKiBscnV2ZWMmIzM5O3MgTUFYX05SX0dFTlMgd2luZG93LgomIzQzOwkJICovCiYjNDM7CQlscnV2ZWMgPSBkc3RfbHJ1dmVjOwomIzQzOwkJbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKJiM0MzsJCW1heF9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLSZndDttYXhfc2VxKTsKJiM0MzsJCW1pZGRsZV9zZXEgPSBtYXhfc2VxIC0gTUFYX05SX0dFTlMgLyAyOwomIzQzOwkJYmlydGggPSBSRUFEX09OQ0UobHJ1Z2VuLSZndDt0aW1lc3RhbXBzW2xydV9nZW5fZnJvbV9zZXEobWlkZGxlX3NlcSldKTsKJiM0MzsJCXdpbmRvd19hZ2UgPSBqaWZmaWVzIC0gYmlydGg7CiYjNDM7CiYjNDM7CQlldmljdF90cyA9ICh0b2tlbiAmZ3Q7Jmd0OyBFVklDVF9UU19QR09GRikgJmFtcDsgRVZJQ1RfVFNfTUFTSzsKJiM0MzsJCXJlZmF1bHRfZGlzdGFuY2UgPSAoKGppZmZpZXMgJmFtcDsgRVZJQ1RfVFNfTUFTSykgLSBldmljdF90cykgJmFtcDsKJiM0MzsJCQkJICAgRVZJQ1RfVFNfTUFTSzsKJiM0MzsJCXJlY2VudCA9IHJlZmF1bHRfZGlzdGFuY2UgJmx0Oz0gd2luZG93X2FnZTsKJiM0MzsJfQogCiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVGQVVMVF9CQVNFICYjNDM7IHR5cGUsIGRlbHRhKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBtbS93b3JraW5nc2V0LmNgLiBSaWdodCBhd2F5LCB0aGF0IHJhaXNlcyBteSBleWVicm93cyBiZWNhdXNlIHRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBwbGF5aW5nIHdpdGggdGhlIHdvcmtpbmdzZXQgbG9naWMsIHdoaWNoIGlzIG9idmlvdXNseSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBzb21lIG5ldyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBgQ09ORklHX0xSVV9HRU5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgY29uZmlnIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIHRvdWNoaW5nIGBscnVfZ2VuX2V2aWN0aW9uYCwgYGxydV9nZW5fdGVzdF9yZWNlbnRgLCBhbmQgYGxydV9nZW5fcmVmYXVsdGAuIFRob3NlIGFyZSBhbGwga2V5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIExSVSBhbmQgd29ya2luZ3NldCBldmljdGlvbi9yZWZhdWx0IHByb2Nlc3MuIE15IGd1dCBzYXlzIHRoaXMgaGFzIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wYWN0LiBEZXBlbmRpbmcgb24gaG93IGBDT05GSUdfTFJVX0dFTmAgaXMgdXNlZCwgaXQgY291bGQgZHJhbWF0aWNhbGx5IGFsdGVyIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcGFnZSBldmljdGlvbiwgb3IsIHBlcmhhcHMsIHJlZmF1bHQgdHJhY2tpbmcuCgpGaXJzdCBzdGVwOiBJIG5lZWQgdG8gZ28gZGlnIGludG8gYG1tL0tjb25maWdgIG9yIHNvbWV3aGVyZSBzaW1pbGFyIHRvIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmN5IGNoYWluIGZvciBgQ09ORklHX0xSVV9HRU5gIGxvb2tzIGxpa2UuIEtub3dpbmcgdGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dCBmb3IgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJiMzOTttIGhvcGluZyBJIGNhbiBzdXNzIG91dCBpZiBpdCYjMzk7cyBhIG5ldyBmZWF0dXJlIG9yIGEgcmVmaW5lbWVudCBvZiBhbiBleGlzdGluZyBvbmUuIFRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IGNhcmVmdWxseSBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTQyMD1lbmRpZiAjIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xNDIyLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQyNC1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQzMS1cbm1tL0tjb25maWc6MTQzMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MzMtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDM3LVxubW0vS2NvbmZpZzoxNDM4OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MzktXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQ0Ni1cbm1tL0tjb25maWc6MTQ0Nzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQ0OC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzc5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uIEV4cGxvcmF0aW9uKioKClJpZ2h0LCBzbyBgTFJVX0dFTmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBrZXkgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgc2V0dGluZyBgTFJVX0dFTmAgYWxvbmUgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlIExSVSBnZW5lcmF0aW9uIHByb2Nlc3MsIG9yIGlmIHRoZXJlJiMzOTtzIGFuIGFkZGl0aW9uYWwgZmxhZywgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgTFJVX0dFTl9FTkFCTEVEYCwgdGhhdCBhbHNvIG5lZWRzIHRvIGJlIHNldC4gVW5kZXJzdGFuZGluZyB0aGlzIGRlcGVuZGVuY3kgaXMgY3JpdGljYWwgZm9yIHByb3BlciBpbXBsZW1lbnRhdGlvbiBhbmQgZXhwZWN0ZWQgYmVoYXZpb3Igb3V0IG9mIHRoZSBib3guIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0MjM9Y29uZmlnIExSVV9HRU5cbi0tXG5tbS9LY29uZmlnLTE0MzEtXG5tbS9LY29uZmlnOjE0MzI6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDMzLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgTFJVX0dFTl9FTkFCTEVEKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGBMUlVfR0VOX0VOQUJMRURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldCB1cC4gVGhlIGZpcnN0IHBsYWNlIHRvIGxvb2ssIGFzIGFsd2F5cywgaXMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCB0aGF0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgd2hhdCBpdHMgZGVmYXVsdCBzZXR0aW5nIGlzLiBUaGlzIHNob3VsZCBxdWlja2x5IGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IGZvciB3aHkgd2UgYXJlIGxvb2tpbmcgYXQgdGhpcywgYW5kIHdoYXQgd2UgbWlnaHQgZG8gd2l0aCB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRlbmRpZiAjIFVTRVJGQVVMVEZEXG4xNDIxOlx0XG4xNDIyOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MjM6XHRjb25maWcgTFJVX0dFTlxuMTQyNDpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDI1Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTQyNjpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDI3Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0Mjg6XHRcdGhlbHBcbjE0Mjk6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDMwOlx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MzE6XHRcbjE0MzI6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDMzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDM0Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MzU6XHRcdGhlbHBcbjE0MzY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQzNzpcdFxuMTQzODpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDM5Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDAKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uIGFuZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgTFJVIGdlbmVyYXRpb24gc3R1ZmYuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYC4gVGhvc2UgYXJlIHRoZSBrZXlzIHRvIGNvbnRyb2xsaW5nIHRoaXMgZmVhdHVyZS4gTm93LCB0aGUgbWVhdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQuIEkmIzM5O20gbG9va2luZyBhdCBgbHJ1X2dlbl9ldmljdGlvbmAsIGBscnVfZ2VuX3Rlc3RfcmVjZW50YCwgYW5kIGBscnVfZ2VuX3JlZmF1bHRgLiBJIGtub3cgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIGFuZCB0aGV5IGFyZSBob3VzZWQgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2Ugd2hlcmUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBicm9hZGVyIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXkmIzM5O3JlIGludGVncmF0ZWQgYW5kIGhvdyB0aGUgb3ZlcmFsbCBMUlUgZ2VuZXJhdGlvbiBsb2dpYyBpcyBhY3R1YWxseSB1c2VkIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fZXZpY3Rpb258bHJ1X2dlbl90ZXN0X3JlY2VudHxscnVfZ2VuX3JlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTIzNT1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTI1Ni1cbm1tL3dvcmtpbmdzZXQuYzoyNTc6c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3dvcmtpbmdzZXQuYy0yNTgte1xuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMDAtICovXG5tbS93b3JraW5nc2V0LmM6MzAxOnN0YXRpYyBib29sIGxydV9nZW5fdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBzdHJ1Y3QgbHJ1dmVjICoqbHJ1dmVjLFxubW0vd29ya2luZ3NldC5jLTMwMi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnRva2VuLCBib29sICp3b3JraW5nc2V0LCBib29sIGZpbGUpXG4tLVxubW0vd29ya2luZ3NldC5jLTMyMi1cbm1tL3dvcmtpbmdzZXQuYzozMjM6c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbm1tL3dvcmtpbmdzZXQuYy0zMjQte1xuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMzgtXG5tbS93b3JraW5nc2V0LmM6MzM5Olx0cmVjZW50ID0gbHJ1X2dlbl90ZXN0X3JlY2VudChzaGFkb3csIFx1MDAyNmxydXZlYywgXHUwMDI2dG9rZW4sIFx1MDAyNndvcmtpbmdzZXQsIHR5cGUpO1xubW0vd29ya2luZ3NldC5jLTM0MC1cdGRzdF9scnV2ZWMgPSBmb2xpb19scnV2ZWMoZm9saW8pO1xuLS1cbm1tL3dvcmtpbmdzZXQuYy0zODktXG5tbS93b3JraW5nc2V0LmM6MzkwOnN0YXRpYyB2b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS93b3JraW5nc2V0LmMtMzkxLXtcbi0tXG5tbS93b3JraW5nc2V0LmMtMzk0LVxubW0vd29ya2luZ3NldC5jOjM5NTpzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYyxcbm1tL3dvcmtpbmdzZXQuYy0zOTYtXHRcdFx0XHR1bnNpZ25lZCBsb25nICp0b2tlbiwgYm9vbCAqd29ya2luZ3NldCwgYm9vbCBmaWxlKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy00MDAtXG5tbS93b3JraW5nc2V0LmM6NDAxOnN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNDAyLXtcbi0tXG5tbS93b3JraW5nc2V0LmM9NDQzPXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbi0tXG5tbS93b3JraW5nc2V0LmMtNDU2LVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxubW0vd29ya2luZ3NldC5jOjQ1NzpcdFx0cmV0dXJuIGxydV9nZW5fZXZpY3Rpb24oZm9saW8pO1xubW0vd29ya2luZ3NldC5jLTQ1OC1cbi0tXG5tbS93b3JraW5nc2V0LmM9NDgxPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbi0tXG5tbS93b3JraW5nc2V0LmMtNDk2LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG5tbS93b3JraW5nc2V0LmM6NDk3Olx0XHRyZWNlbnQgPSBscnVfZ2VuX3Rlc3RfcmVjZW50KHNoYWRvdywgXHUwMDI2ZXZpY3Rpb25fbHJ1dmVjLCBcdTAwMjZldmljdGlvbixcbm1tL3dvcmtpbmdzZXQuYy00OTgtXHRcdFx0XHRcdCAgICAgd29ya2luZ3NldCwgZmlsZSk7XG4tLVxubW0vd29ya2luZ3NldC5jPTU5OT12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTYwOS1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xubW0vd29ya2luZ3NldC5jOjYxMDpcdFx0bHJ1X2dlbl9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xubW0vd29ya2luZ3NldC5jLTYxMS1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzI0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBlbnRyeSBwb2ludHMsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgV29ya2luZ3NldCBNZWNoYW5pY3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB3b3JraW5nc2V0IHN0dWZmIGlzIGZ1bmN0aW9uaW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgc3lzdGVtIGJlZ2lucyBpdHMgd29ya2luZ3NldCBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIGxpc3Qgb2YgZW50cnkgcG9pbnRzIHRvIGV4YW1pbmUgaXM6IGB3b3JraW5nc2V0X2V2aWN0aW9uYCwgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHRoZSBjb3JlIG9wZXJhdGlvbnMuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZWlyIGluZmx1ZW5jZS4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBwdXJlbHkgaW50ZXJuYWwsIHBlcmhhcHMgb25seSB1c2VkIHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZSwgb3IgYXJlIHRoZXkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gTW9yZSBpbXBvcnRhbnRseSwgYXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdXNpbmcgdGhlbT8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBtdWNoIG9mIGEgZGVzaWduIGNoYW5nZSBpbXBsZW1lbnRpbmcgYSBuZXcgZmVhdHVyZSBpbiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHF1ZXN0aW9uIEkgbmVlZCBhbnN3ZXJlZCBiZWZvcmUgSSBkaWcgZGVlcGVyLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpZ3VyZSB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9ldmljdGlvbnx3b3JraW5nc2V0X3Rlc3RfcmVjZW50fHdvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9OTUwPWludCBmaWxlbWFwX2FkZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9maWxlbWFwLmMtOTgxLVx0XHRpZiAoIShnZnAgXHUwMDI2IF9fR0ZQX1dSSVRFKSBcdTAwMjZcdTAwMjYgc2hhZG93KVxubW0vZmlsZW1hcC5jOjk4MjpcdFx0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG5tbS9maWxlbWFwLmMtOTgzLVx0XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmM9NDU4MD1zdGF0aWMgdm9pZCBmaWxlbWFwX2NhY2hlc3RhdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtNDY1MS0jZW5kaWZcbm1tL2ZpbGVtYXAuYzo0NjUyOlx0XHRcdGlmICh3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgdHJ1ZSwgXHUwMDI2d29ya2luZ3NldCwgZmFsc2UpKVxubW0vZmlsZW1hcC5jLTQ2NTMtXHRcdFx0XHRjcy1cdTAwM2Vucl9yZWNlbnRseV9ldmljdGVkICYjNDM7PSBucl9wYWdlcztcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2ND1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWVtY2cxX3N0YXRfbmFtZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3My1cdFwmIzM0O3dyaXRlYmFja1wmIzM0Oyxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc0Olx0XCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2Fub25cJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3NTpcdFwmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9maWxlXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jLTE4NzYtI2lmZGVmIENPTkZJR19TV0FQXG4tLVxubW0vbWVtY29udHJvbC5jPTE1NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTU4NC1cdC8qIFRoZSBtZW1vcnkgZXZlbnRzICovXG5tbS9tZW1jb250cm9sLmM6MTU4NTpcdHsgXCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2Fub25cJiMzNDssXHRXT1JLSU5HU0VUX1JFRkFVTFRfQU5PTlx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1ODY6XHR7IFwmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9maWxlXCYjMzQ7LFx0V09SS0lOR1NFVF9SRUZBVUxUX0ZJTEVcdFx0fSxcbm1tL21lbWNvbnRyb2wuYy0xNTg3LVx0eyBcJiMzNDt3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cJiMzNDssXHRXT1JLSU5HU0VUX0FDVElWQVRFX0FOT05cdH0sXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTQ2NT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfcHJlcGFyZV9hbmRfYWRkKHN3cF9lbnRyeV90IGVudHJ5LFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MDAtXHRpZiAoc2hhZG93KVxubW0vc3dhcF9zdGF0ZS5jOjUwMTpcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xubW0vc3dhcF9zdGF0ZS5jLTUwMi1cbi0tXG5tbS92bXNjYW4uYz02ODY9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3Ztc2Nhbi5jLTc0MC1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbm1tL3Ztc2Nhbi5jOjc0MTpcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xubW0vdm1zY2FuLmMtNzQyLVx0XHRtZW1jZzFfc3dhcG91dChmb2xpbywgc3dhcCk7XG4tLVxubW0vdm1zY2FuLmMtNzY2LVx0XHQgICAgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjYgIWRheF9tYXBwaW5nKG1hcHBpbmcpKVxubW0vdm1zY2FuLmM6NzY3Olx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG5tbS92bXNjYW4uYy03NjgtXHRcdF9fZmlsZW1hcF9yZW1vdmVfZm9saW8oZm9saW8sIHNoYWRvdyk7XG4tLVxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMjMxLVx0W0koV09SS0lOR1NFVF9OT0RFUyldXHRcdFx0PSBcJiMzNDt3b3JraW5nc2V0X25vZGVzXCYjMzQ7LFxubW0vdm1zdGF0LmM6MTIzMjpcdFtJKFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OKV1cdFx0PSBcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfYW5vblwmIzM0Oyxcbm1tL3Ztc3RhdC5jOjEyMzM6XHRbSShXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSldXHRcdD0gXCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXG5tbS92bXN0YXQuYy0xMjM0LVx0W0koV09SS0lOR1NFVF9BQ1RJVkFURV9BTk9OKV1cdFx0PSBcJiMzNDt3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cJiMzNDssXG4tLVxubW0vd29ya2luZ3NldC5jPTQxNz12b2lkIHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbi0tXG5tbS93b3JraW5nc2V0LmMtNDM1LS8qKlxubW0vd29ya2luZ3NldC5jOjQzNjogKiB3b3JraW5nc2V0X2V2aWN0aW9uIC0gbm90ZSB0aGUgZXZpY3Rpb24gb2YgYSBmb2xpbyBmcm9tIG1lbW9yeVxubW0vd29ya2luZ3NldC5jLTQzNy0gKiBAdGFyZ2V0X21lbWNnOiB0aGUgY2dyb3VwIHRoYXQgaXMgY2F1c2luZyB0aGUgcmVjbGFpbVxuLS1cbm1tL3dvcmtpbmdzZXQuYy00NDItICovXG5tbS93b3JraW5nc2V0LmM6NDQzOnZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbm1tL3dvcmtpbmdzZXQuYy00NDQte1xuLS1cbm1tL3dvcmtpbmdzZXQuYy00NjktLyoqXG5tbS93b3JraW5nc2V0LmM6NDcwOiAqIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQgLSB0ZXN0cyBpZiB0aGUgc2hhZG93IGVudHJ5IGlzIGZvciBhIGZvbGlvIHRoYXQgd2FzXG5tbS93b3JraW5nc2V0LmMtNDcxLSAqIHJlY2VudGx5IGV2aWN0ZWQuIEFsc28gZmlsbHMgaW4gQHdvcmtpbmdzZXQgd2l0aCB0aGUgdmFsdWUgdW5wYWNrZWQgZnJvbVxuLS1cbm1tL3dvcmtpbmdzZXQuYy00ODAtICovXG5tbS93b3JraW5nc2V0LmM6NDgxOmJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbm1tL3dvcmtpbmdzZXQuYy00ODItXHRcdFx0XHRib29sIGZsdXNoKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy01MzItXHQgKlxubW0vd29ya2luZ3NldC5jOjUzMzpcdCAqIE5vdGUgdGhhdCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KCkgaXRzZWxmIG1pZ2h0IGJlIGNhbGxlZCBpbiBSQ1UgcmVhZFxubW0vd29ya2luZ3NldC5jLTUzNC1cdCAqIHNlY3Rpb24gKGZvciBlLmcsIGluIGNhY2hlc3RhdCkgLSB0aGVzZSBjYWxsZXJzIG5lZWQgdG8gc2tpcCBmbHVzaGluZ1xuLS1cbm1tL3dvcmtpbmdzZXQuYy01OTAtLyoqXG5tbS93b3JraW5nc2V0LmM6NTkxOiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU5Mi0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNTk4LSAqL1xubW0vd29ya2luZ3NldC5jOjU5OTp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNjAwLXtcbi0tXG5tbS93b3JraW5nc2V0LmMtNjI3LVxubW0vd29ya2luZ3NldC5jOjYyODpcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxubW0vd29ya2luZ3NldC5jLTYyOS1cdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSByZWFsbHkgY3JpdGljYWwga2VybmVsIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBmcm9tIHRoZSBoZWFydCBvZiBtZW1vcnkgbWFuYWdlbWVudDogYGZpbGVtYXBgLCBgc3dhcF9zdGF0ZWAsIGFuZCBgdm1zY2FuYC4gVGhpcyBpcyBkZWVwIGluIHRoZSBjb3JlLCB0aGUgc3R1ZmYgdGhhdCAqcmVhbGx5KiBtYXR0ZXJzIGZvciBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS4gSSBzZWUgdGhhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgc2hhZG93IHRva2VuIGlzIGFycmFuZ2VkIGZvciBgQ09ORklHX0xSVV9HRU5gLCBob3cgaXQmIzM5O3MgcGFja2VkIGFuZCB1bnBhY2tlZC4gSW50ZXJlc3RpbmcsIGl0JiMzOTtzIGFkZGluZyBgRVZJQ1RfVFNfV0lEVEhgIGFuZCBgRVZJQ1RfU0VRX1dJRFRIYCB0byB0aGUgdG9rZW4sIGFuZCB1c2VzIGBqaWZmaWVzYCB0byBrZWVwIHRyYWNrIG9mIGV2aWN0aW9uIHRpbWUuIFRoYXQgcG9pbnRzIHRvIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSBtdWx0aS1nZW4gTFJVIHdvcmtpbmdzZXQgdHJhY2tpbmcgZnVuY3Rpb25zLgoKR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgY29yZSBuYXR1cmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBiZSB2ZXJ5IHRob3JvdWdoLgoKSSYjMzk7bGwga2VlcCBhIGNsb3NlIGV5ZSBvbiBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGFzIGtleSBhcmVhcyB0byB3YXRjaC4KCkZpcnN0LCBJIHNob3VsZCBjb25maXJtIGBMUlVfR0VOYCBpcyBlbmFibGVkIGJ5IGNoZWNraW5nIGBMUlVfR0VOX0VOQUJMRURgLgoKVGhlbiwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVwZW5kZW5jaWVzOyBgZGVwZW5kcyBvbiBNTVVgLCBgZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQYCBhbGwgc2VlbSBzdGFuZGFyZCwgYnV0IEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGV5IGFyZSBub3QgYWZmZWN0ZWQuCgpGaW5hbGx5LCBJIHdpbGwgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhbHNvIGJlIGFkZGVkIG9yIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0MjA9ZW5kaWYgIyBVU0VSRkFVTFRGRFxuLS1cbm1tL0tjb25maWctMTQyMi0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDIzOmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MjQtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MzEtXG5tbS9LY29uZmlnOjE0MzI6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDMzLVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQzNy1cbm1tL0tjb25maWc6MTQzODpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDM5LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0NDYtXG5tbS9LY29uZmlnOjE0NDc6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0NDgtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMzQKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIE1HTFJVLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgZW5zdXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIGFyZSBhZGRlZCB0byBgRW5hYmxlQ29uZmlnc2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW1wYWN0cy4gTGV0JiMzOTtzIGxvb2sgYXQgYHdvcmtpbmdzZXRfZXZpY3Rpb25gLCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCB0byBzZWUgaWYgdGhleSBhcmUgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gUXVpY2tseSBjaGVja2luZyB0aGUgY29kZSwgdGhleSYjMzk7cmUgZGVmaW5lZCBpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhleSYjMzk7cmUgKm5vdCogc3RhdGljLCBhbmQgdGhleSYjMzk7cmUgKm5vdCogaW5saW5lZCwgc28gdGhleSBhcmUgZGVmaW5pdGVseSBwcmltZSBjYW5kaWRhdGVzIHRvIGZvY3VzIG9uLiBUaGV5IGFyZSBleHBvcnRlZCBvciBnbG9iYWwgZnVuY3Rpb25zLiBHb29kLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIGFueXRoaW5nIGVsc2UuIEFoLCBgbHJ1X2dlbl9ldmljdGlvbmAsIGBscnVfZ2VuX3Rlc3RfcmVjZW50YCwgYW5kIGBscnVfZ2VuX3JlZmF1bHRgIGFyZSBzdGF0aWMsIHNvIHRob3NlIGFyZSBub3QgdGhlIGZvY3VzLiBTbyB0aGUgcGF0Y2ggaXMgZm9jdXNlZCBvbiBjaGFuZ2VzIHRvIGBtbS93b3JraW5nc2V0LmNgLgoKT2theSwgdGltZSB0byBzdW1tYXJpemUgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBNR0xSVSYjMzk7cyB3b3JraW5nc2V0IHRyYWNraW5nIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCYjMzk7cyBhbHRlcmluZyB0aGUgJiMzNDtzaGFkb3cgdG9rZW4mIzM0OyBkYXRhIHN0cnVjdHVyZSwgYWRkaW5nIGZpZWxkcyBmb3IgZXZpY3Rpb24gdGltZSAoaW4gamlmZmllcywgaW1wb3J0YW50IGZvciB0aW1pbmcpIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBUaGUgcGF0Y2ggdXBkYXRlcyBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGNvcmUsIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiwgZGVlcGx5IGNvbm5lY3RlZCB0byBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHN0YW5kYXJkIG1lbW9yeSBwcmVzc3VyZSwgYW5kIGlzIGludm9sdmVkIGluIGZpbGUgYW5kIHN3YXAgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGZ1enppbmcuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4gVGhlIG1vc3QgaW1wb3J0YW50IGBGb2N1c1N5bWJvbHNgIGFyZSBkZWZpbml0ZWx5IGB3b3JraW5nc2V0X2V2aWN0aW9uYCwgYHdvcmtpbmdzZXRfdGVzdF9yZWNlbnRgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdGAuIEZpbmFsbHksIHdlIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYExSVV9HRU5gLCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgYmVjYXVzZSB0aGF0IGlzIHRoZSBiYXNlbGluZSBuZWVkZWQgZm9yIHRoaXMgdG8gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dvcmtpbmdzZXRfZXZpY3Rpb24mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dvcmtpbmdzZXRfZXZpY3Rpb24mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF90ZXN0X3JlY2VudCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgaG93IHNoYWRvdyB0b2tlbnMgYXJlIHBhY2tlZCBhbmQgdW5wYWNrZWQgdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lc3RhbXBzIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBBbGwgbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0YXRlIChlLmcuLCBgamlmZmllc2AsIGB0b2tlbmAsIGBscnVnZW4tXHUwMDNlbWF4X3NlcWApIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDU4NTIwOTI3MmQ4N2VlOTczMTg3NTk1NTZiM2VlMWFhNzc1MWVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMDg6MjU6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggMDdlNjgzNmQwNTAyMC4uZTU1ZTVhNzVhY2I5ZiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtMTk5LDYgJiM0MzsxOTksMjggQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBidWNrZXRfb3JkZXJbQU5PTl9BTkRfRklMRV0gX19yZWFkX21vc3RseTsKIAomIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTgomIzQzOy8qCiYjNDM7ICogTFJVX0dFTiBzaGFkb3cgdG9rZW4gbGF5b3V0IHdpdGhpbiB0aGUgZXZpY3Rpb24gZmllbGQgKGxvdyB0byBoaWdoKToKJiM0MzsgKiAgIExSVV9SRUZTX1dJRFRIIGJpdHM6IHJlZnMKJiM0MzsgKiAgIEVWSUNUX1NFUV9XSURUSCBiaXRzOiBtaW5fc2VxCiYjNDM7ICogICBFVklDVF9UU19XSURUSCBiaXRzOiBldmljdGlvbiB0aW1lIGluIGppZmZpZXMKJiM0MzsgKgomIzQzOyAqIFNpemUgdGhlIGxheW91dCBmb3IgdGhlIHRpZ2h0ZXIgYW5vbiBtYXNrIHNvIHRoZSB0b2tlbiBmaXRzIGJvdGggZmlsZSBhbmQKJiM0MzsgKiBhbm9uIHNoYWRvd3MuIEtlZXAgYXQgbGVhc3QgMTYgYml0cyBmb3IgbWluX3NlcSBzbyB0aGUgc2FtZS1scnV2ZWMgcmVjZW5jeQomIzQzOyAqIGNoZWNrIGRvZXMgbm90IHdyYXAgYXQgdGhlIG11Y2ggc2hvcnRlciBMUlVfR0VOX1dJRFRIIGludGVydmFsLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRVZJQ1RJT05fQklUUwkJKEJJVFNfUEVSX0xPTkcgLSBFVklDVElPTl9TSElGVF9BTk9OKQomIzQzOyNkZWZpbmUgRVZJQ1RfUEFZTE9BRF9CSVRTCShFVklDVElPTl9CSVRTIC0gTFJVX1JFRlNfV0lEVEgpCiYjNDM7I2RlZmluZSBFVklDVF9UU19XSURUSAkJKEVWSUNUX1BBWUxPQURfQklUUyAmZ3Q7IDQwID8gMjQgOiBcCiYjNDM7CQkJCSBFVklDVF9QQVlMT0FEX0JJVFMgJmd0OyAxNiA/IFwKJiM0MzsJCQkJIEVWSUNUX1BBWUxPQURfQklUUyAtIDE2IDogMCkKJiM0MzsjZGVmaW5lIEVWSUNUX1NFUV9XSURUSAkJKEVWSUNUX1BBWUxPQURfQklUUyAtIEVWSUNUX1RTX1dJRFRIKQomIzQzOyNkZWZpbmUgRVZJQ1RfVFNfUEdPRkYJCShMUlVfUkVGU19XSURUSCAmIzQzOyBFVklDVF9TRVFfV0lEVEgpCiYjNDM7I2RlZmluZSBFVklDVF9TRVFfTUFTSwkJKCgxVUwgJmx0OyZsdDsgRVZJQ1RfU0VRX1dJRFRIKSAtIDEpCiYjNDM7I2RlZmluZSBFVklDVF9UU19NQVNLCQkoKDFVTCAmbHQ7Jmx0OyBFVklDVF9UU19XSURUSCkgLSAxKQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIHZvaWQgKnBhY2tfc2hhZG93KGludCBtZW1jZ2lkLCBwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIGV2aWN0aW9uLAogCQkJIGJvb2wgd29ya2luZ3NldCwgYm9vbCBmaWxlKQogewpAQCAtMjUwLDEzICYjNDM7MjcyLDE5IEBAIHN0YXRpYyB2b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAlCVUlMRF9CVUdfT04oTFJVX0dFTl9XSURUSCAmIzQzOyBMUlVfUkVGU19XSURUSCAmZ3Q7CiAJCSAgICAgQklUU19QRVJfTE9ORyAtIG1heChFVklDVElPTl9TSElGVCwgRVZJQ1RJT05fU0hJRlRfQU5PTikpOwomIzQzOwlCVUlMRF9CVUdfT04oRVZJQ1RfVFNfV0lEVEggJmx0Oz0gMCk7CiYjNDM7CUJVSUxEX0JVR19PTihFVklDVF9TRVFfV0lEVEggJmx0OyAxNik7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19XSURUSCAmIzQzOyBFVklDVF9TRVFfV0lEVEggJiM0MzsKJiM0MzsJCSAgICAgRVZJQ1RfVFNfV0lEVEggIT0gRVZJQ1RJT05fQklUUyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKIAlscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCW1pbl9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl0b2tlbiA9IChtaW5fc2VxICZsdDsmbHQ7IExSVV9SRUZTX1dJRFRIKSB8IG1heChyZWZzIC0gMSwgMCk7CiYjNDM7CXRva2VuID0gKChtaW5fc2VxICZhbXA7IEVWSUNUX1NFUV9NQVNLKSAmbHQ7Jmx0OyBMUlVfUkVGU19XSURUSCkgfAomIzQzOwkJbWF4KHJlZnMgLSAxLCAwKTsKJiM0MzsJdG9rZW4gfD0gKGppZmZpZXMgJmFtcDsgRVZJQ1RfVFNfTUFTSykgJmx0OyZsdDsgRVZJQ1RfVFNfUEdPRkY7CiAKIAloaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobWluX3NlcSk7CiAJYXRvbWljX2xvbmdfYWRkKGRlbHRhLCAmYW1wO2xydWdlbi0mZ3Q7ZXZpY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7CkBAIC0yNzUsMTggJiM0MzszMDMsMjEgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsCiB7CiAJaW50IG1lbWNnX2lkOwogCXVuc2lnbmVkIGxvbmcgbWF4X3NlcTsKJiM0MzsJdW5zaWduZWQgbG9uZyB0b2tlbl9zZXE7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CiAKJiM0MzsJKHZvaWQpZmlsZTsKJiM0MzsKIAl1bnBhY2tfc2hhZG93KHNoYWRvdywgJmFtcDttZW1jZ19pZCwgJmFtcDtwZ2RhdCwgdG9rZW4sIHdvcmtpbmdzZXQpOwogCiAJbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7CiAJKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CiAKLQltYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpOwotCW1heF9zZXEgJmFtcDs9IChmaWxlID8gRVZJQ1RJT05fTUFTSyA6IEVWSUNUSU9OX01BU0tfQU5PTikgJmd0OyZndDsgTFJVX1JFRlNfV0lEVEg7CiYjNDM7CW1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSkgJmFtcDsgRVZJQ1RfU0VRX01BU0s7CiYjNDM7CXRva2VuX3NlcSA9ICgqdG9rZW4gJmd0OyZndDsgTFJVX1JFRlNfV0lEVEgpICZhbXA7IEVWSUNUX1NFUV9NQVNLOwogCi0JcmV0dXJuIGFic19kaWZmKG1heF9zZXEsICp0b2tlbiAmZ3Q7Jmd0OyBMUlVfUkVGU19XSURUSCkgJmx0OyBNQVhfTlJfR0VOUzsKJiM0MzsJcmV0dXJuIGFic19kaWZmKG1heF9zZXEsIHRva2VuX3NlcSkgJmx0OyBNQVhfTlJfR0VOUzsKIH0KIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKQEAgLTI5NSw3ICYjNDM7MzI2LDEwIEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiAJaW50IGhpc3QsIHRpZXIsIHJlZnM7CiAJYm9vbCB3b3JraW5nc2V0OwogCXVuc2lnbmVkIGxvbmcgdG9rZW47CiYjNDM7CXVuc2lnbmVkIGxvbmcgZXZpY3RfdHMsIHJlZmF1bHRfZGlzdGFuY2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgbWlkZGxlX3NlcSwgYmlydGgsIHdpbmRvd19hZ2U7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwomIzQzOwlzdHJ1Y3QgbHJ1dmVjICpkc3RfbHJ1dmVjOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47CiAJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtMzAzLDggJiM0MzszMzcsMjcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlyZWNlbnQgPSBscnVfZ2VuX3Rlc3RfcmVjZW50KHNoYWRvdywgJmFtcDtscnV2ZWMsICZhbXA7dG9rZW4sICZhbXA7d29ya2luZ3NldCwgdHlwZSk7Ci0JaWYgKGxydXZlYyAhPSBmb2xpb19scnV2ZWMoZm9saW8pKQotCQlnb3RvIHVubG9jazsKJiM0MzsJZHN0X2xydXZlYyA9IGZvbGlvX2xydXZlYyhmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChscnV2ZWMgIT0gZHN0X2xydXZlYykgewomIzQzOwkJLyoKJiM0MzsJCSAqIG1pbl9zZXEgdmFsdWVzIGZyb20gZGlmZmVyZW50IGxydXZlY3MgYXJlIG5vdCBjb21wYXJhYmxlLgomIzQzOwkJICogSnVkZ2UgYSBjcm9zcy1tZW1jZyByZWZhdWx0IGJ5IHdoZXRoZXIgaXQgaGFwcGVuZWQgd2l0aGluCiYjNDM7CQkgKiB0aGUgYWdlIG9mIHRoZSBtaWRkbGUgZ2VuZXJhdGlvbiBpbiB0aGUgZGVzdGluYXRpb24KJiM0MzsJCSAqIGxydXZlYyYjMzk7cyBNQVhfTlJfR0VOUyB3aW5kb3cuCiYjNDM7CQkgKi8KJiM0MzsJCWxydXZlYyA9IGRzdF9scnV2ZWM7CiYjNDM7CQlscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwomIzQzOwkJbWF4X3NlcSA9IFJFQURfT05DRShscnVnZW4tJmd0O21heF9zZXEpOwomIzQzOwkJbWlkZGxlX3NlcSA9IG1heF9zZXEgLSBNQVhfTlJfR0VOUyAvIDI7CiYjNDM7CQliaXJ0aCA9IFJFQURfT05DRShscnVnZW4tJmd0O3RpbWVzdGFtcHNbbHJ1X2dlbl9mcm9tX3NlcShtaWRkbGVfc2VxKV0pOwomIzQzOwkJd2luZG93X2FnZSA9IGppZmZpZXMgLSBiaXJ0aDsKJiM0MzsKJiM0MzsJCWV2aWN0X3RzID0gKHRva2VuICZndDsmZ3Q7IEVWSUNUX1RTX1BHT0ZGKSAmYW1wOyBFVklDVF9UU19NQVNLOwomIzQzOwkJcmVmYXVsdF9kaXN0YW5jZSA9ICgoamlmZmllcyAmYW1wOyBFVklDVF9UU19NQVNLKSAtIGV2aWN0X3RzKSAmYW1wOwomIzQzOwkJCQkgICBFVklDVF9UU19NQVNLOwomIzQzOwkJcmVjZW50ID0gcmVmYXVsdF9kaXN0YW5jZSAmbHQ7PSB3aW5kb3dfYWdlOwomIzQzOwl9CiAKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRUZBVUxUX0JBU0UgJiM0MzsgdHlwZSwgZGVsdGEpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA1CgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMUlUgR2VuZXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbW0vd29ya2luZ3NldC5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGl0JiMzOTtzIGFsbCBhYm91dCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHR3ZWFraW5nIHRoZSBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMuIEl0JiMzOTtzIHVzaW5nIGJpdHdpc2Ugb3BlcmF0aW9ucyBhbmQgbmV3IG1hY3JvcyB0byBoYW5kbGUgdGhlIGBMUlVfR0VOYCBzaGFkb3cgdG9rZW4gbGF5b3V0LiBUaGlzIG1haW5seSBpbXBhY3RzIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX2V2aWN0aW9uYCwgYGxydV9nZW5fdGVzdF9yZWNlbnRgLCBhbmQgYGxydV9nZW5fcmVmYXVsdGAuCgpMb29raW5nIGNsb3NlciwgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgbWFuaXB1bGF0aW5nIHZhcmlhYmxlcyBsaWtlIGB0b2tlbmAsIGBtaW5fc2VxYCwgYGppZmZpZXNgLCBgbWF4X3NlcWAsIGB0b2tlbl9zZXFgLCBgZXZpY3RfdHNgLCBgcmVmYXVsdF9kaXN0YW5jZWAsIGV0Yy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaGFwcGVuaW5nIGhlcmUsIGFuZCBjcnVjaWFsbHksIG5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl04oCZcyBhbGwgaW50ZXJuYWwsIGFuZCB0aGUgbG9naWMgcmVsaWVzIG9uIGVzdGFibGlzaGVkIHZhbHVlcyBkZXJpdmVkIGZyb20gYGppZmZpZXNgLCBleGlzdGluZyBzZXF1ZW5jZSBudW1iZXJzLCBhbmQsIGltcG9ydGFudGx5LCB0aGUgYHRva2VuYC4KCk15IGluaXRpYWwgY29uY2VybiB3YXMgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBIb3dldmVyLCB0aGUgbW9yZSBJIGRpZywgSSBzZWUgdGhhdCBpc24mIzM5O3QgYSBwcm9ibGVtLiBBbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgcHVsbGluZyB2YWx1ZXMgZnJvbSB0aGluZ3MgbGlrZSBgamlmZmllc2AsIGB0b2tlbmAsIGFuZCBgbHJ1Z2VuLSZndDttYXhfc2VxYC4gIFdhaXQsIGB0b2tlbmAgY29tZXMgZnJvbSBgdW5wYWNrX3NoYWRvd2AsIHdoaWNoIHVucGFja3MgdGhlIGBzaGFkb3dgIGFyZ3VtZW50LCBwYXNzZWQgYXMgYHZvaWQgKmAuIExldCBtZSBjb25maXJtIHRoYXQgYHVucGFja19zaGFkb3dgIGlzIHNhZmUuIEFoLCBpdCB1bnBhY2tzIHRoZSBzaGFkb3cgZGF0YSBhbmQgaXQgaXMgYWxzbyBhbiBleGlzdGluZyBmdW5jdGlvbi4KCk9rYXksIGNoZWNraW5nIHRoZSBzcGVjaWZpY3Mgb2YgYGxydV9nZW5fcmVmYXVsdGAgYWdhaW4sIEkgc2VlIHRoYXQgbG9jYWwgdmFyaWFibGVzIGxpa2UgYGV2aWN0X3RzYCwgYHJlZmF1bHRfZGlzdGFuY2VgLCBgbWF4X3NlcWAsIGFuZCBzbyBvbiBhcmUgYWxsIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgZnVuY3Rpb24gYmVmb3JlIHRoZWlyIHVzZS4gVGhlIGNydWNpYWwgY2FsY3VsYXRpb24gb2YgYHJlZmF1bHRfZGlzdGFuY2VgIGRlcGVuZHMgb24gYGppZmZpZXNgIGFuZCBhIHZhbHVlIGV4dHJhY3RlZCBmcm9tIGB0b2tlbmAgaXRzZWxmLCBib3RoIGluaXRpYWxpemVkLgoKYGBgYwoJdW5zaWduZWQgbG9uZyBldmljdF90cywgcmVmYXVsdF9kaXN0YW5jZTsKCXVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgbWlkZGxlX3NlcSwgYmlydGgsIHdpbmRvd19hZ2U7CmBgYAoKYGBgYwoJCW1heF9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLSZndDttYXhfc2VxKTsKCQltaWRkbGVfc2VxID0gbWF4X3NlcSAtIE1BWF9OUl9HRU5TIC8gMjsKCQliaXJ0aCA9IFJFQURfT05DRShscnVnZW4tJmd0O3RpbWVzdGFtcHNbbHJ1X2dlbl9mcm9tX3NlcShtaWRkbGVfc2VxKV0pOwoJCXdpbmRvd19hZ2UgPSBqaWZmaWVzIC0gYmlydGg7CgoJCWV2aWN0X3RzID0gKHRva2VuICZndDsmZ3Q7IEVWSUNUX1RTX1BHT0ZGKSAmYW1wOyBFVklDVF9UU19NQVNLOwoJCXJlZmF1bHRfZGlzdGFuY2UgPSAoKGppZmZpZXMgJmFtcDsgRVZJQ1RfVFNfTUFTSykgLSBldmljdF90cykgJmFtcDsKCQkJCSAgIEVWSUNUX1RTX01BU0s7CgkJcmVjZW50ID0gcmVmYXVsdF9kaXN0YW5jZSAmbHQ7PSB3aW5kb3dfYWdlOwpgYGAKClRoaXMgY29uZmlybXMgaXQuICBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlIGhlcmUsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IG90aGVyIGNvbmNlcm5pbmcgaXNzdWVzLiBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgZ2l2ZW4gdGhlIHBhdGNoJiMzOTtzIHNjb3BlLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgaG93IHNoYWRvdyB0b2tlbnMgYXJlIHBhY2tlZCBhbmQgdW5wYWNrZWQgdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lc3RhbXBzIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBBbGwgbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0YXRlIChlLmcuLCBgamlmZmllc2AsIGB0b2tlbmAsIGBscnVnZW4tXHUwMDNlbWF4X3NlcWApIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIExSVSBnZW5lcmF0aW9uIHdvcmtpbmdzZXQgcmVmYXVsdCBsb2dpYywgc3BlY2lmaWNhbGx5IGFkanVzdGluZyBob3cgc2hhZG93IHRva2VucyBhcmUgcGFja2VkIGFuZCB1bnBhY2tlZCB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWVzdGFtcHMgYW5kIHNlcXVlbmNlIG51bWJlcnMuIEFsbCBuZXcgdmFyaWFibGVzIGludHJvZHVjZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcgc3RhdGUgKGUuZy4sIGBqaWZmaWVzYCwgYHRva2VuYCwgYGxydWdlbi1cdTAwM2VtYXhfc2VxYCkgYmVmb3JlIHVzZS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjI1OjU1Ljk5NTc1Mzg2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzI1OTYzMjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3b3JraW5nc2V0X2V2aWN0aW9uXCIsXG4gICAgXCJ3b3JraW5nc2V0X3Rlc3RfcmVjZW50XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgaG93IHNoYWRvdyB0b2tlbnMgYXJlIHBhY2tlZCBhbmQgdW5wYWNrZWQgdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lc3RhbXBzIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBBbGwgbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0YXRlIChlLmcuLCBgamlmZmllc2AsIGB0b2tlbmAsIGBscnVnZW4tXFx1MDAzZW1heF9zZXFgKSBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHdvcmtpbmdzZXQgdHJhY2tpbmcgbG9naWMgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIEl0IGNoYW5nZXMgdGhlIGxheW91dCBvZiB0aGUgc2hhZG93IHRva2VuIHRvIGluY2x1ZGUgZXZpY3Rpb24gdGltZSAoamlmZmllcykgYW5kIHNlcXVlbmNlIG51bWJlciwgYW5kIHVwZGF0ZXMgdGhlIGV2aWN0aW9uLCByZWNlbnQgdGVzdCwgYW5kIHJlZmF1bHQgbG9naWMgdG8gdXNlIHRoZXNlIG5ldyBmaWVsZHMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgdGhhdCBhZmZlY3RzIHBhZ2UgcmVjbGFpbSBhbmQgd29ya2luZ3NldCBlc3RpbWF0aW9uLiBJdCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG1lbW9yeSBwcmVzc3VyZSBhbmQgZmlsZS9zd2FwIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjI1OjU1Ljk5NTc1OTAwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4MzgzMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2Q1ODUyMDkyNzJkODdlZTk3MzE4NzU5NTU2YjNlZTFhYTc3NTFlZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwODoyNTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcXG5pbmRleCAwN2U2ODM2ZDA1MDIwLi5lNTVlNWE3NWFjYjlmIDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC0xOTksNiArMTk5LDI4IEBAXFxuICAqL1xcbiBzdGF0aWMgdW5zaWduZWQgaW50IGJ1Y2tldF9vcmRlcltBTk9OX0FORF9GSUxFXSBfX3JlYWRfbW9zdGx5O1xcbiBcXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXFxuKy8qXFxuKyAqIExSVV9HRU4gc2hhZG93IHRva2VuIGxheW91dCB3aXRoaW4gdGhlIGV2aWN0aW9uIGZpZWxkIChsb3cgdG8gaGlnaCk6XFxuKyAqICAgTFJVX1JFRlNfV0lEVEggYml0czogcmVmc1xcbisgKiAgIEVWSUNUX1NFUV9XSURUSCBiaXRzOiBtaW5fc2VxXFxuKyAqICAgRVZJQ1RfVFNfV0lEVEggYml0czogZXZpY3Rpb24gdGltZSBpbiBqaWZmaWVzXFxuKyAqXFxuKyAqIFNpemUgdGhlIGxheW91dCBmb3IgdGhlIHRpZ2h0ZXIgYW5vbiBtYXNrIHNvIHRoZSB0b2tlbiBmaXRzIGJvdGggZmlsZSBhbmRcXG4rICogYW5vbiBzaGFkb3dzLiBLZWVwIGF0IGxlYXN0IDE2IGJpdHMgZm9yIG1pbl9zZXEgc28gdGhlIHNhbWUtbHJ1dmVjIHJlY2VuY3lcXG4rICogY2hlY2sgZG9lcyBub3Qgd3JhcCBhdCB0aGUgbXVjaCBzaG9ydGVyIExSVV9HRU5fV0lEVEggaW50ZXJ2YWwuXFxuKyAqL1xcbisjZGVmaW5lIEVWSUNUSU9OX0JJVFNcXHRcXHQoQklUU19QRVJfTE9ORyAtIEVWSUNUSU9OX1NISUZUX0FOT04pXFxuKyNkZWZpbmUgRVZJQ1RfUEFZTE9BRF9CSVRTXFx0KEVWSUNUSU9OX0JJVFMgLSBMUlVfUkVGU19XSURUSClcXG4rI2RlZmluZSBFVklDVF9UU19XSURUSFxcdFxcdChFVklDVF9QQVlMT0FEX0JJVFMgXFx1MDAzZSA0MCA/IDI0IDogXFxcXFxcbitcXHRcXHRcXHRcXHQgRVZJQ1RfUEFZTE9BRF9CSVRTIFxcdTAwM2UgMTYgPyBcXFxcXFxuK1xcdFxcdFxcdFxcdCBFVklDVF9QQVlMT0FEX0JJVFMgLSAxNiA6IDApXFxuKyNkZWZpbmUgRVZJQ1RfU0VRX1dJRFRIXFx0XFx0KEVWSUNUX1BBWUxPQURfQklUUyAtIEVWSUNUX1RTX1dJRFRIKVxcbisjZGVmaW5lIEVWSUNUX1RTX1BHT0ZGXFx0XFx0KExSVV9SRUZTX1dJRFRIICsgRVZJQ1RfU0VRX1dJRFRIKVxcbisjZGVmaW5lIEVWSUNUX1NFUV9NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgRVZJQ1RfU0VRX1dJRFRIKSAtIDEpXFxuKyNkZWZpbmUgRVZJQ1RfVFNfTUFTS1xcdFxcdCgoMVVMIFxcdTAwM2NcXHUwMDNjIEVWSUNUX1RTX1dJRFRIKSAtIDEpXFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIHZvaWQgKnBhY2tfc2hhZG93KGludCBtZW1jZ2lkLCBwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIGV2aWN0aW9uLFxcbiBcXHRcXHRcXHQgYm9vbCB3b3JraW5nc2V0LCBib29sIGZpbGUpXFxuIHtcXG5AQCAtMjUwLDEzICsyNzIsMTkgQEAgc3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihMUlVfR0VOX1dJRFRIICsgTFJVX1JFRlNfV0lEVEggXFx1MDAzZVxcbiBcXHRcXHQgICAgIEJJVFNfUEVSX0xPTkcgLSBtYXgoRVZJQ1RJT05fU0hJRlQsIEVWSUNUSU9OX1NISUZUX0FOT04pKTtcXG4rXFx0QlVJTERfQlVHX09OKEVWSUNUX1RTX1dJRFRIIFxcdTAwM2M9IDApO1xcbitcXHRCVUlMRF9CVUdfT04oRVZJQ1RfU0VRX1dJRFRIIFxcdTAwM2MgMTYpO1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfV0lEVEggKyBFVklDVF9TRVFfV0lEVEggK1xcbitcXHRcXHQgICAgIEVWSUNUX1RTX1dJRFRIICE9IEVWSUNUSU9OX0JJVFMpO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4gXFx0bHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbiBcXHRtaW5fc2VxID0gUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLVxcdHRva2VuID0gKG1pbl9zZXEgXFx1MDAzY1xcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHwgbWF4KHJlZnMgLSAxLCAwKTtcXG4rXFx0dG9rZW4gPSAoKG1pbl9zZXEgXFx1MDAyNiBFVklDVF9TRVFfTUFTSykgXFx1MDAzY1xcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHxcXG4rXFx0XFx0bWF4KHJlZnMgLSAxLCAwKTtcXG4rXFx0dG9rZW4gfD0gKGppZmZpZXMgXFx1MDAyNiBFVklDVF9UU19NQVNLKSBcXHUwMDNjXFx1MDAzYyBFVklDVF9UU19QR09GRjtcXG4gXFxuIFxcdGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShtaW5fc2VxKTtcXG4gXFx0YXRvbWljX2xvbmdfYWRkKGRlbHRhLCBcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcXG5AQCAtMjc1LDE4ICszMDMsMjEgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXFxuIHtcXG4gXFx0aW50IG1lbWNnX2lkO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdG9rZW5fc2VxO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XFxuIFxcbitcXHQodm9pZClmaWxlO1xcbitcXG4gXFx0dW5wYWNrX3NoYWRvdyhzaGFkb3csIFxcdTAwMjZtZW1jZ19pZCwgXFx1MDAyNnBnZGF0LCB0b2tlbiwgd29ya2luZ3NldCk7XFxuIFxcbiBcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKG1lbWNnX2lkKTtcXG4gXFx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuIFxcbi1cXHRtYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRtYXhfc2VxIFxcdTAwMjY9IChmaWxlID8gRVZJQ1RJT05fTUFTSyA6IEVWSUNUSU9OX01BU0tfQU5PTikgXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfV0lEVEg7XFxuK1xcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWF4X3NlcSkgXFx1MDAyNiBFVklDVF9TRVFfTUFTSztcXG4rXFx0dG9rZW5fc2VxID0gKCp0b2tlbiBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19XSURUSCkgXFx1MDAyNiBFVklDVF9TRVFfTUFTSztcXG4gXFxuLVxcdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCAqdG9rZW4gXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfV0lEVEgpIFxcdTAwM2MgTUFYX05SX0dFTlM7XFxuK1xcdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCB0b2tlbl9zZXEpIFxcdTAwM2MgTUFYX05SX0dFTlM7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuQEAgLTI5NSw3ICszMjYsMTAgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0aW50IGhpc3QsIHRpZXIsIHJlZnM7XFxuIFxcdGJvb2wgd29ya2luZ3NldDtcXG4gXFx0dW5zaWduZWQgbG9uZyB0b2tlbjtcXG4rXFx0dW5zaWduZWQgbG9uZyBldmljdF90cywgcmVmYXVsdF9kaXN0YW5jZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxLCBtaWRkbGVfc2VxLCBiaXJ0aCwgd2luZG93X2FnZTtcXG4gXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbitcXHRzdHJ1Y3QgbHJ1dmVjICpkc3RfbHJ1dmVjO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuO1xcbiBcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbkBAIC0zMDMsOCArMzM3LDI3IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFxuIFxcdHJlY2VudCA9IGxydV9nZW5fdGVzdF9yZWNlbnQoc2hhZG93LCBcXHUwMDI2bHJ1dmVjLCBcXHUwMDI2dG9rZW4sIFxcdTAwMjZ3b3JraW5nc2V0LCB0eXBlKTtcXG4tXFx0aWYgKGxydXZlYyAhPSBmb2xpb19scnV2ZWMoZm9saW8pKVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0ZHN0X2xydXZlYyA9IGZvbGlvX2xydXZlYyhmb2xpbyk7XFxuK1xcbitcXHRpZiAobHJ1dmVjICE9IGRzdF9scnV2ZWMpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogbWluX3NlcSB2YWx1ZXMgZnJvbSBkaWZmZXJlbnQgbHJ1dmVjcyBhcmUgbm90IGNvbXBhcmFibGUuXFxuK1xcdFxcdCAqIEp1ZGdlIGEgY3Jvc3MtbWVtY2cgcmVmYXVsdCBieSB3aGV0aGVyIGl0IGhhcHBlbmVkIHdpdGhpblxcbitcXHRcXHQgKiB0aGUgYWdlIG9mIHRoZSBtaWRkbGUgZ2VuZXJhdGlvbiBpbiB0aGUgZGVzdGluYXRpb25cXG4rXFx0XFx0ICogbHJ1dmVjJ3MgTUFYX05SX0dFTlMgd2luZG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bHJ1dmVjID0gZHN0X2xydXZlYztcXG4rXFx0XFx0bHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbitcXHRcXHRtYXhfc2VxID0gUkVBRF9PTkNFKGxydWdlbi1cXHUwMDNlbWF4X3NlcSk7XFxuK1xcdFxcdG1pZGRsZV9zZXEgPSBtYXhfc2VxIC0gTUFYX05SX0dFTlMgLyAyO1xcbitcXHRcXHRiaXJ0aCA9IFJFQURfT05DRShscnVnZW4tXFx1MDAzZXRpbWVzdGFtcHNbbHJ1X2dlbl9mcm9tX3NlcShtaWRkbGVfc2VxKV0pO1xcbitcXHRcXHR3aW5kb3dfYWdlID0gamlmZmllcyAtIGJpcnRoO1xcbitcXG4rXFx0XFx0ZXZpY3RfdHMgPSAodG9rZW4gXFx1MDAzZVxcdTAwM2UgRVZJQ1RfVFNfUEdPRkYpIFxcdTAwMjYgRVZJQ1RfVFNfTUFTSztcXG4rXFx0XFx0cmVmYXVsdF9kaXN0YW5jZSA9ICgoamlmZmllcyBcXHUwMDI2IEVWSUNUX1RTX01BU0spIC0gZXZpY3RfdHMpIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgRVZJQ1RfVFNfTUFTSztcXG4rXFx0XFx0cmVjZW50ID0gcmVmYXVsdF9kaXN0YW5jZSBcXHUwMDNjPSB3aW5kb3dfYWdlO1xcbitcXHR9XFxuIFxcbiBcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRUZBVUxUX0JBU0UgKyB0eXBlLCBkZWx0YSk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODoyNTo1Ni42NjUwOTMwNzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNzM1MTU0OTExMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid29ya2luZ3NldF9ldmljdGlvblwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDU4NTIwOTI3MmQ4N2VlOTczMTg3NTk1NTZiM2VlMWFhNzc1MWVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDg6MjU6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDA3ZTY4MzZkMDUwMjAuLmU1NWU1YTc1YWNiOWYgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTE5OSw2ICsxOTksMjggQEBcbiAgKi9cbiBzdGF0aWMgdW5zaWduZWQgaW50IGJ1Y2tldF9vcmRlcltBTk9OX0FORF9GSUxFXSBfX3JlYWRfbW9zdGx5O1xuIFxuKyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuKy8qXG4rICogTFJVX0dFTiBzaGFkb3cgdG9rZW4gbGF5b3V0IHdpdGhpbiB0aGUgZXZpY3Rpb24gZmllbGQgKGxvdyB0byBoaWdoKTpcbisgKiAgIExSVV9SRUZTX1dJRFRIIGJpdHM6IHJlZnNcbisgKiAgIEVWSUNUX1NFUV9XSURUSCBiaXRzOiBtaW5fc2VxXG4rICogICBFVklDVF9UU19XSURUSCBiaXRzOiBldmljdGlvbiB0aW1lIGluIGppZmZpZXNcbisgKlxuKyAqIFNpemUgdGhlIGxheW91dCBmb3IgdGhlIHRpZ2h0ZXIgYW5vbiBtYXNrIHNvIHRoZSB0b2tlbiBmaXRzIGJvdGggZmlsZSBhbmRcbisgKiBhbm9uIHNoYWRvd3MuIEtlZXAgYXQgbGVhc3QgMTYgYml0cyBmb3IgbWluX3NlcSBzbyB0aGUgc2FtZS1scnV2ZWMgcmVjZW5jeVxuKyAqIGNoZWNrIGRvZXMgbm90IHdyYXAgYXQgdGhlIG11Y2ggc2hvcnRlciBMUlVfR0VOX1dJRFRIIGludGVydmFsLlxuKyAqL1xuKyNkZWZpbmUgRVZJQ1RJT05fQklUU1x0XHQoQklUU19QRVJfTE9ORyAtIEVWSUNUSU9OX1NISUZUX0FOT04pXG4rI2RlZmluZSBFVklDVF9QQVlMT0FEX0JJVFNcdChFVklDVElPTl9CSVRTIC0gTFJVX1JFRlNfV0lEVEgpXG4rI2RlZmluZSBFVklDVF9UU19XSURUSFx0XHQoRVZJQ1RfUEFZTE9BRF9CSVRTIFx1MDAzZSA0MCA/IDI0IDogXFxcbitcdFx0XHRcdCBFVklDVF9QQVlMT0FEX0JJVFMgXHUwMDNlIDE2ID8gXFxcbitcdFx0XHRcdCBFVklDVF9QQVlMT0FEX0JJVFMgLSAxNiA6IDApXG4rI2RlZmluZSBFVklDVF9TRVFfV0lEVEhcdFx0KEVWSUNUX1BBWUxPQURfQklUUyAtIEVWSUNUX1RTX1dJRFRIKVxuKyNkZWZpbmUgRVZJQ1RfVFNfUEdPRkZcdFx0KExSVV9SRUZTX1dJRFRIICsgRVZJQ1RfU0VRX1dJRFRIKVxuKyNkZWZpbmUgRVZJQ1RfU0VRX01BU0tcdFx0KCgxVUwgXHUwMDNjXHUwMDNjIEVWSUNUX1NFUV9XSURUSCkgLSAxKVxuKyNkZWZpbmUgRVZJQ1RfVFNfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgRVZJQ1RfVFNfV0lEVEgpIC0gMSlcbisjZW5kaWZcbitcbiBzdGF0aWMgdm9pZCAqcGFja19zaGFkb3coaW50IG1lbWNnaWQsIHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgZXZpY3Rpb24sXG4gXHRcdFx0IGJvb2wgd29ya2luZ3NldCwgYm9vbCBmaWxlKVxuIHtcbkBAIC0yNTAsMTMgKzI3MiwxOSBAQCBzdGF0aWMgdm9pZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0QlVJTERfQlVHX09OKExSVV9HRU5fV0lEVEggKyBMUlVfUkVGU19XSURUSCBcdTAwM2VcbiBcdFx0ICAgICBCSVRTX1BFUl9MT05HIC0gbWF4KEVWSUNUSU9OX1NISUZULCBFVklDVElPTl9TSElGVF9BTk9OKSk7XG4rXHRCVUlMRF9CVUdfT04oRVZJQ1RfVFNfV0lEVEggXHUwMDNjPSAwKTtcbitcdEJVSUxEX0JVR19PTihFVklDVF9TRVFfV0lEVEggXHUwMDNjIDE2KTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19XSURUSCArIEVWSUNUX1NFUV9XSURUSCArXG4rXHRcdCAgICAgRVZJQ1RfVFNfV0lEVEggIT0gRVZJQ1RJT05fQklUUyk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiBcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4gXHRscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0bWluX3NlcSA9IFJFQURfT05DRShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR0b2tlbiA9IChtaW5fc2VxIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19XSURUSCkgfCBtYXgocmVmcyAtIDEsIDApO1xuK1x0dG9rZW4gPSAoKG1pbl9zZXEgXHUwMDI2IEVWSUNUX1NFUV9NQVNLKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHxcbitcdFx0bWF4KHJlZnMgLSAxLCAwKTtcbitcdHRva2VuIHw9IChqaWZmaWVzIFx1MDAyNiBFVklDVF9UU19NQVNLKSBcdTAwM2NcdTAwM2MgRVZJQ1RfVFNfUEdPRkY7XG4gXG4gXHRoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobWluX3NlcSk7XG4gXHRhdG9taWNfbG9uZ19hZGQoZGVsdGEsIFx1MDAyNmxydWdlbi1cdTAwM2VldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTtcbkBAIC0yNzUsMTggKzMwMywyMSBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYyxcbiB7XG4gXHRpbnQgbWVtY2dfaWQ7XG4gXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4rXHR1bnNpZ25lZCBsb25nIHRva2VuX3NlcTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4gXG4rXHQodm9pZClmaWxlO1xuK1xuIFx0dW5wYWNrX3NoYWRvdyhzaGFkb3csIFx1MDAyNm1lbWNnX2lkLCBcdTAwMjZwZ2RhdCwgdG9rZW4sIHdvcmtpbmdzZXQpO1xuIFxuIFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChtZW1jZ19pZCk7XG4gXHQqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbiBcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbi1cdG1heF9zZXEgXHUwMDI2PSAoZmlsZSA/IEVWSUNUSU9OX01BU0sgOiBFVklDVElPTl9NQVNLX0FOT04pIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19XSURUSDtcbitcdG1heF9zZXEgPSBSRUFEX09OQ0UoKCpscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKSBcdTAwMjYgRVZJQ1RfU0VRX01BU0s7XG4rXHR0b2tlbl9zZXEgPSAoKnRva2VuIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19XSURUSCkgXHUwMDI2IEVWSUNUX1NFUV9NQVNLO1xuIFxuLVx0cmV0dXJuIGFic19kaWZmKG1heF9zZXEsICp0b2tlbiBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEgpIFx1MDAzYyBNQVhfTlJfR0VOUztcbitcdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCB0b2tlbl9zZXEpIFx1MDAzYyBNQVhfTlJfR0VOUztcbiB9XG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbkBAIC0yOTUsNyArMzI2LDEwIEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpbnQgaGlzdCwgdGllciwgcmVmcztcbiBcdGJvb2wgd29ya2luZ3NldDtcbiBcdHVuc2lnbmVkIGxvbmcgdG9rZW47XG4rXHR1bnNpZ25lZCBsb25nIGV2aWN0X3RzLCByZWZhdWx0X2Rpc3RhbmNlO1xuK1x0dW5zaWduZWQgbG9uZyBtYXhfc2VxLCBtaWRkbGVfc2VxLCBiaXJ0aCwgd2luZG93X2FnZTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbitcdHN0cnVjdCBscnV2ZWMgKmRzdF9scnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuO1xuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtMzAzLDggKzMzNywyNyBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuIFx0cmVjZW50ID0gbHJ1X2dlbl90ZXN0X3JlY2VudChzaGFkb3csIFx1MDAyNmxydXZlYywgXHUwMDI2dG9rZW4sIFx1MDAyNndvcmtpbmdzZXQsIHR5cGUpO1xuLVx0aWYgKGxydXZlYyAhPSBmb2xpb19scnV2ZWMoZm9saW8pKVxuLVx0XHRnb3RvIHVubG9jaztcbitcdGRzdF9scnV2ZWMgPSBmb2xpb19scnV2ZWMoZm9saW8pO1xuK1xuK1x0aWYgKGxydXZlYyAhPSBkc3RfbHJ1dmVjKSB7XG4rXHRcdC8qXG4rXHRcdCAqIG1pbl9zZXEgdmFsdWVzIGZyb20gZGlmZmVyZW50IGxydXZlY3MgYXJlIG5vdCBjb21wYXJhYmxlLlxuK1x0XHQgKiBKdWRnZSBhIGNyb3NzLW1lbWNnIHJlZmF1bHQgYnkgd2hldGhlciBpdCBoYXBwZW5lZCB3aXRoaW5cbitcdFx0ICogdGhlIGFnZSBvZiB0aGUgbWlkZGxlIGdlbmVyYXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uXG4rXHRcdCAqIGxydXZlYydzIE1BWF9OUl9HRU5TIHdpbmRvdy5cbitcdFx0ICovXG4rXHRcdGxydXZlYyA9IGRzdF9scnV2ZWM7XG4rXHRcdGxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4rXHRcdG1heF9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1heF9zZXEpO1xuK1x0XHRtaWRkbGVfc2VxID0gbWF4X3NlcSAtIE1BWF9OUl9HRU5TIC8gMjtcbitcdFx0YmlydGggPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZXRpbWVzdGFtcHNbbHJ1X2dlbl9mcm9tX3NlcShtaWRkbGVfc2VxKV0pO1xuK1x0XHR3aW5kb3dfYWdlID0gamlmZmllcyAtIGJpcnRoO1xuK1xuK1x0XHRldmljdF90cyA9ICh0b2tlbiBcdTAwM2VcdTAwM2UgRVZJQ1RfVFNfUEdPRkYpIFx1MDAyNiBFVklDVF9UU19NQVNLO1xuK1x0XHRyZWZhdWx0X2Rpc3RhbmNlID0gKChqaWZmaWVzIFx1MDAyNiBFVklDVF9UU19NQVNLKSAtIGV2aWN0X3RzKSBcdTAwMjZcbitcdFx0XHRcdCAgIEVWSUNUX1RTX01BU0s7XG4rXHRcdHJlY2VudCA9IHJlZmF1bHRfZGlzdGFuY2UgXHUwMDNjPSB3aW5kb3dfYWdlO1xuK1x0fVxuIFxuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVGQVVMVF9CQVNFICsgdHlwZSwgZGVsdGEpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MjU6NTYuNjY1MDk1MzQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4ODg0NzUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaGl0dGluZyBgbW0vd29ya2luZ3NldC5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgbXkgZXllYnJvd3MgYmVjYXVzZSB0aGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQncyBwbGF5aW5nIHdpdGggdGhlIHdvcmtpbmdzZXQgbG9naWMsIHdoaWNoIGlzIG9idmlvdXNseSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBzb21lIG5ldyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBgQ09ORklHX0xSVV9HRU5gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgY29uZmlnIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgYGxydV9nZW5fZXZpY3Rpb25gLCBgbHJ1X2dlbl90ZXN0X3JlY2VudGAsIGFuZCBgbHJ1X2dlbl9yZWZhdWx0YC4gVGhvc2UgYXJlIGFsbCBrZXkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgTFJVIGFuZCB3b3JraW5nc2V0IGV2aWN0aW9uL3JlZmF1bHQgcHJvY2Vzcy4gTXkgZ3V0IHNheXMgdGhpcyBoYXMgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBpbXBhY3QuIERlcGVuZGluZyBvbiBob3cgYENPTkZJR19MUlVfR0VOYCBpcyB1c2VkLCBpdCBjb3VsZCBkcmFtYXRpY2FsbHkgYWx0ZXIgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBwYWdlIGV2aWN0aW9uLCBvciwgcGVyaGFwcywgcmVmYXVsdCB0cmFja2luZy5cblxuRmlyc3Qgc3RlcDogSSBuZWVkIHRvIGdvIGRpZyBpbnRvIGBtbS9LY29uZmlnYCBvciBzb21ld2hlcmUgc2ltaWxhciB0byBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmb3IgYENPTkZJR19MUlVfR0VOYCBsb29rcyBsaWtlLiBLbm93aW5nIHRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdpZGVyIGNvbnRleHQgZm9yIHRoaXMgY2hhbmdlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSdtIGhvcGluZyBJIGNhbiBzdXNzIG91dCBpZiBpdCdzIGEgbmV3IGZlYXR1cmUgb3IgYSByZWZpbmVtZW50IG9mIGFuIGV4aXN0aW5nIG9uZS4gVGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgY2FyZWZ1bGx5IEkgbmVlZCB0byByZXZpZXcgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODoyNjowMi4xNTM5NDY4NTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDg2NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MjA9ZW5kaWYgIyBVU0VSRkFVTFRGRFxcbi0tXFxubW0vS2NvbmZpZy0xNDIyLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDIzOmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDI0LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MzEtXFxubW0vS2NvbmZpZzoxNDMyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MzMtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MzctXFxubW0vS2NvbmZpZzoxNDM4OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDM5LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQ0Ni1cXG5tbS9LY29uZmlnOjE0NDc6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDQ4LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MjY6MDIuMjcxMDQxMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY4NjcwNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkxSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24gRXhwbG9yYXRpb24qKlxuXG5SaWdodCwgc28gYExSVV9HRU5gIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24ga2V5IHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgc2V0dGluZyBgTFJVX0dFTmAgYWxvbmUgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlIExSVSBnZW5lcmF0aW9uIHByb2Nlc3MsIG9yIGlmIHRoZXJlJ3MgYW4gYWRkaXRpb25hbCBmbGFnLCBwZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBMUlVfR0VOX0VOQUJMRURgLCB0aGF0IGFsc28gbmVlZHMgdG8gYmUgc2V0LiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBjcml0aWNhbCBmb3IgcHJvcGVyIGltcGxlbWVudGF0aW9uIGFuZCBleHBlY3RlZCBiZWhhdmlvciBvdXQgb2YgdGhlIGJveC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjI2OjA1LjkzOTcxNTQyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ1ODY4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5fRU5BQkxFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDIzPWNvbmZpZyBMUlVfR0VOXFxuLS1cXG5tbS9LY29uZmlnLTE0MzEtXFxubW0vS2NvbmZpZzoxNDMyOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MzMtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjI2OjA2LjMwNDMwOTI1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjg2Njg0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBMUlVfR0VOX0VOQUJMRUQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBgTFJVX0dFTl9FTkFCTEVEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQgdXAuIFRoZSBmaXJzdCBwbGFjZSB0byBsb29rLCBhcyBhbHdheXMsIGlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IGl0cyBkZWZhdWx0IHNldHRpbmcgaXMuIFRoaXMgc2hvdWxkIHF1aWNrbHkgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgZm9yIHdoeSB3ZSBhcmUgbG9va2luZyBhdCB0aGlzLCBhbmQgd2hhdCB3ZSBtaWdodCBkbyB3aXRoIHRoaXMgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MjY6MDkuNDcyOTgwMjUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRlbmRpZiAjIFVTRVJGQVVMVEZEXFxuMTQyMTpcXHRcXG4xNDIyOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQyMzpcXHRjb25maWcgTFJVX0dFTlxcbjE0MjQ6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDI1OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQyNjpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQyNzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDI4OlxcdFxcdGhlbHBcXG4xNDI5OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQzMDpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDMxOlxcdFxcbjE0MzI6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MzM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQzNDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDM1OlxcdFxcdGhlbHBcXG4xNDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0Mzc6XFx0XFxuMTQzODpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0Mzk6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODoyNjowOS40NzMxMjE1MTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzczNjgxMDkzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIExSVSBHZW5lcmF0aW9uIENvbmZpZ3VyYXRpb24gYW5kIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTFJVIGdlbmVyYXRpb24gc3R1ZmYuIEknbSBmb2N1c2luZyBvbiB0aGUgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaG9zZSBhcmUgdGhlIGtleXMgdG8gY29udHJvbGxpbmcgdGhpcyBmZWF0dXJlLiBOb3csIHRoZSBtZWF0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBzZWVtcyB0byBiZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZC4gSSdtIGxvb2tpbmcgYXQgYGxydV9nZW5fZXZpY3Rpb25gLCBgbHJ1X2dlbl90ZXN0X3JlY2VudGAsIGFuZCBgbHJ1X2dlbl9yZWZhdWx0YC4gSSBrbm93IHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhleSBhcmUgaG91c2VkIGluIGBtbS93b3JraW5nc2V0LmNgLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYnJvYWRlciBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGV5J3JlIGludGVncmF0ZWQgYW5kIGhvdyB0aGUgb3ZlcmFsbCBMUlUgZ2VuZXJhdGlvbiBsb2dpYyBpcyBhY3R1YWxseSB1c2VkIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDAsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjMxOjQ2Ljg0MTIzNDkzN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyODc5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fZXZpY3Rpb258bHJ1X2dlbl90ZXN0X3JlY2VudHxscnVfZ2VuX3JlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vd29ya2luZ3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3dvcmtpbmdzZXQuYz0yMzU9c3RhdGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2RhdGFfdCAqKnBnZGF0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTI1Ni1cXG5tbS93b3JraW5nc2V0LmM6MjU3OnN0YXRpYyB2b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vd29ya2luZ3NldC5jLTI1OC17XFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzAwLSAqL1xcbm1tL3dvcmtpbmdzZXQuYzozMDE6c3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXFxubW0vd29ya2luZ3NldC5jLTMwMi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICp0b2tlbiwgYm9vbCAqd29ya2luZ3NldCwgYm9vbCBmaWxlKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMyMi1cXG5tbS93b3JraW5nc2V0LmM6MzIzOnN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxubW0vd29ya2luZ3NldC5jLTMyNC17XFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzM4LVxcbm1tL3dvcmtpbmdzZXQuYzozMzk6XFx0cmVjZW50ID0gbHJ1X2dlbl90ZXN0X3JlY2VudChzaGFkb3csIFxcdTAwMjZscnV2ZWMsIFxcdTAwMjZ0b2tlbiwgXFx1MDAyNndvcmtpbmdzZXQsIHR5cGUpO1xcbm1tL3dvcmtpbmdzZXQuYy0zNDAtXFx0ZHN0X2xydXZlYyA9IGZvbGlvX2xydXZlYyhmb2xpbyk7XFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzg5LVxcbm1tL3dvcmtpbmdzZXQuYzozOTA6c3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS93b3JraW5nc2V0LmMtMzkxLXtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0zOTQtXFxubW0vd29ya2luZ3NldC5jOjM5NTpzdGF0aWMgYm9vbCBscnVfZ2VuX3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgc3RydWN0IGxydXZlYyAqKmxydXZlYyxcXG5tbS93b3JraW5nc2V0LmMtMzk2LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnRva2VuLCBib29sICp3b3JraW5nc2V0LCBib29sIGZpbGUpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDAwLVxcbm1tL3dvcmtpbmdzZXQuYzo0MDE6c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG5tbS93b3JraW5nc2V0LmMtNDAyLXtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00NDM9dm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTQ1Ni1cXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vd29ya2luZ3NldC5jOjQ1NzpcXHRcXHRyZXR1cm4gbHJ1X2dlbl9ldmljdGlvbihmb2xpbyk7XFxubW0vd29ya2luZ3NldC5jLTQ1OC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00ODE9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxcbi0tXFxubW0vd29ya2luZ3NldC5jLTQ5Ni1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxubW0vd29ya2luZ3NldC5jOjQ5NzpcXHRcXHRyZWNlbnQgPSBscnVfZ2VuX3Rlc3RfcmVjZW50KHNoYWRvdywgXFx1MDAyNmV2aWN0aW9uX2xydXZlYywgXFx1MDAyNmV2aWN0aW9uLFxcbm1tL3dvcmtpbmdzZXQuYy00OTgtXFx0XFx0XFx0XFx0XFx0ICAgICB3b3JraW5nc2V0LCBmaWxlKTtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01OTk9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTYwOS1cXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcXG5tbS93b3JraW5nc2V0LmM6NjEwOlxcdFxcdGxydV9nZW5fcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG5tbS93b3JraW5nc2V0LmMtNjExLVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MzE6NDcuMzk0MTIxNDQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTgzMDY0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGVudHJ5IHBvaW50cywgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFdvcmtpbmdzZXQgTWVjaGFuaWNzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHdvcmtpbmdzZXQgc3R1ZmYgaXMgZnVuY3Rpb25pbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBzeXN0ZW0gYmVnaW5zIGl0cyB3b3JraW5nc2V0IG1hbmFnZW1lbnQuIE15IGluaXRpYWwgbGlzdCBvZiBlbnRyeSBwb2ludHMgdG8gZXhhbWluZSBpczogYHdvcmtpbmdzZXRfZXZpY3Rpb25gLCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgdGhlIGNvcmUgb3BlcmF0aW9ucy5cblxuTm93LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZWlyIGluZmx1ZW5jZS4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBwdXJlbHkgaW50ZXJuYWwsIHBlcmhhcHMgb25seSB1c2VkIHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZSwgb3IgYXJlIHRoZXkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gTW9yZSBpbXBvcnRhbnRseSwgYXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdXNpbmcgdGhlbT8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBtdWNoIG9mIGEgZGVzaWduIGNoYW5nZSBpbXBsZW1lbnRpbmcgYSBuZXcgZmVhdHVyZSBpbiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUuIFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkIGJlZm9yZSBJIGRpZyBkZWVwZXIuIExldCdzIHNlZSBpZiBJIGNhbiBmaWd1cmUgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODozMTo1MS43OTI0MzAyOThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDUzNTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3b3JraW5nc2V0X2V2aWN0aW9ufHdvcmtpbmdzZXRfdGVzdF9yZWNlbnR8d29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9OTUwPWludCBmaWxlbWFwX2FkZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy05ODEtXFx0XFx0aWYgKCEoZ2ZwIFxcdTAwMjYgX19HRlBfV1JJVEUpIFxcdTAwMjZcXHUwMDI2IHNoYWRvdylcXG5tbS9maWxlbWFwLmM6OTgyOlxcdFxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG5tbS9maWxlbWFwLmMtOTgzLVxcdFxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jPTQ1ODA9c3RhdGljIHZvaWQgZmlsZW1hcF9jYWNoZXN0YXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9maWxlbWFwLmMtNDY1MS0jZW5kaWZcXG5tbS9maWxlbWFwLmM6NDY1MjpcXHRcXHRcXHRpZiAod29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIHRydWUsIFxcdTAwMjZ3b3JraW5nc2V0LCBmYWxzZSkpXFxubW0vZmlsZW1hcC5jLTQ2NTMtXFx0XFx0XFx0XFx0Y3MtXFx1MDAzZW5yX3JlY2VudGx5X2V2aWN0ZWQgKz0gbnJfcGFnZXM7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2ND1zdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWVtY2cxX3N0YXRfbmFtZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODczLVxcdFxcXCJ3cml0ZWJhY2tcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc0OlxcdFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfYW5vblxcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjE4NzU6XFx0XFxcIndvcmtpbmdzZXRfcmVmYXVsdF9maWxlXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ni0jaWZkZWYgQ09ORklHX1NXQVBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTU4NC1cXHQvKiBUaGUgbWVtb3J5IGV2ZW50cyAqL1xcbm1tL21lbWNvbnRyb2wuYzoxNTg1OlxcdHsgXFxcIndvcmtpbmdzZXRfcmVmYXVsdF9hbm9uXFxcIixcXHRXT1JLSU5HU0VUX1JFRkFVTFRfQU5PTlxcdFxcdH0sXFxubW0vbWVtY29udHJvbC5jOjE1ODY6XFx0eyBcXFwid29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcXFwiLFxcdFdPUktJTkdTRVRfUkVGQVVMVF9GSUxFXFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmMtMTU4Ny1cXHR7IFxcXCJ3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cXFwiLFxcdFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTlxcdH0sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDY1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9wcmVwYXJlX2FuZF9hZGQoc3dwX2VudHJ5X3QgZW50cnksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTAwLVxcdGlmIChzaGFkb3cpXFxubW0vc3dhcF9zdGF0ZS5jOjUwMTpcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxubW0vc3dhcF9zdGF0ZS5jLTUwMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4Nj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03NDAtXFx0XFx0aWYgKHJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxcbm1tL3Ztc2Nhbi5jOjc0MTpcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTc0Mi1cXHRcXHRtZW1jZzFfc3dhcG91dChmb2xpbywgc3dhcCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NjYtXFx0XFx0ICAgICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXFx1MDAyNlxcdTAwMjYgIWRheF9tYXBwaW5nKG1hcHBpbmcpKVxcbm1tL3Ztc2Nhbi5jOjc2NzpcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTc2OC1cXHRcXHRfX2ZpbGVtYXBfcmVtb3ZlX2ZvbGlvKGZvbGlvLCBzaGFkb3cpO1xcbi0tXFxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTEyMzEtXFx0W0koV09SS0lOR1NFVF9OT0RFUyldXFx0XFx0XFx0PSBcXFwid29ya2luZ3NldF9ub2Rlc1xcXCIsXFxubW0vdm1zdGF0LmM6MTIzMjpcXHRbSShXT1JLSU5HU0VUX1JFRkFVTFRfQU5PTildXFx0XFx0PSBcXFwid29ya2luZ3NldF9yZWZhdWx0X2Fub25cXFwiLFxcbm1tL3Ztc3RhdC5jOjEyMzM6XFx0W0koV09SS0lOR1NFVF9SRUZBVUxUX0ZJTEUpXVxcdFxcdD0gXFxcIndvcmtpbmdzZXRfcmVmYXVsdF9maWxlXFxcIixcXG5tbS92bXN0YXQuYy0xMjM0LVxcdFtJKFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTildXFx0XFx0PSBcXFwid29ya2luZ3NldF9hY3RpdmF0ZV9hbm9uXFxcIixcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz00MTc9dm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDM1LS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo0MzY6ICogd29ya2luZ3NldF9ldmljdGlvbiAtIG5vdGUgdGhlIGV2aWN0aW9uIG9mIGEgZm9saW8gZnJvbSBtZW1vcnlcXG5tbS93b3JraW5nc2V0LmMtNDM3LSAqIEB0YXJnZXRfbWVtY2c6IHRoZSBjZ3JvdXAgdGhhdCBpcyBjYXVzaW5nIHRoZSByZWNsYWltXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDQyLSAqL1xcbm1tL3dvcmtpbmdzZXQuYzo0NDM6dm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxcbm1tL3dvcmtpbmdzZXQuYy00NDQte1xcbi0tXFxubW0vd29ya2luZ3NldC5jLTQ2OS0vKipcXG5tbS93b3JraW5nc2V0LmM6NDcwOiAqIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQgLSB0ZXN0cyBpZiB0aGUgc2hhZG93IGVudHJ5IGlzIGZvciBhIGZvbGlvIHRoYXQgd2FzXFxubW0vd29ya2luZ3NldC5jLTQ3MS0gKiByZWNlbnRseSBldmljdGVkLiBBbHNvIGZpbGxzIGluIEB3b3JraW5nc2V0IHdpdGggdGhlIHZhbHVlIHVucGFja2VkIGZyb21cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy00ODAtICovXFxubW0vd29ya2luZ3NldC5jOjQ4MTpib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxubW0vd29ya2luZ3NldC5jLTQ4Mi1cXHRcXHRcXHRcXHRib29sIGZsdXNoKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTUzMi1cXHQgKlxcbm1tL3dvcmtpbmdzZXQuYzo1MzM6XFx0ICogTm90ZSB0aGF0IHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoKSBpdHNlbGYgbWlnaHQgYmUgY2FsbGVkIGluIFJDVSByZWFkXFxubW0vd29ya2luZ3NldC5jLTUzNC1cXHQgKiBzZWN0aW9uIChmb3IgZS5nLCBpbiBjYWNoZXN0YXQpIC0gdGhlc2UgY2FsbGVycyBuZWVkIHRvIHNraXAgZmx1c2hpbmdcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01OTAtLyoqXFxubW0vd29ya2luZ3NldC5jOjU5MTogKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cXG5tbS93b3JraW5nc2V0LmMtNTkyLSAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU5OC0gKi9cXG5tbS93b3JraW5nc2V0LmM6NTk5OnZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG5tbS93b3JraW5nc2V0LmMtNjAwLXtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02MjctXFxubW0vd29ya2luZ3NldC5jOjYyODpcXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcXHUwMDI2d29ya2luZ3NldCwgdHJ1ZSkpXFxubW0vd29ya2luZ3NldC5jLTYyOS1cXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MzE6NTEuOTEyOTcwODc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjgwNTcwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHJlYWxseSBjcml0aWNhbCBrZXJuZWwgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGZyb20gdGhlIGhlYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50OiBgZmlsZW1hcGAsIGBzd2FwX3N0YXRlYCwgYW5kIGB2bXNjYW5gLiBUaGlzIGlzIGRlZXAgaW4gdGhlIGNvcmUsIHRoZSBzdHVmZiB0aGF0ICpyZWFsbHkqIG1hdHRlcnMgZm9yIHN5c3RlbSBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlLiBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgaG93IHRoZSBzaGFkb3cgdG9rZW4gaXMgYXJyYW5nZWQgZm9yIGBDT05GSUdfTFJVX0dFTmAsIGhvdyBpdCdzIHBhY2tlZCBhbmQgdW5wYWNrZWQuIEludGVyZXN0aW5nLCBpdCdzIGFkZGluZyBgRVZJQ1RfVFNfV0lEVEhgIGFuZCBgRVZJQ1RfU0VRX1dJRFRIYCB0byB0aGUgdG9rZW4sIGFuZCB1c2VzIGBqaWZmaWVzYCB0byBrZWVwIHRyYWNrIG9mIGV2aWN0aW9uIHRpbWUuIFRoYXQgcG9pbnRzIHRvIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSBtdWx0aS1nZW4gTFJVIHdvcmtpbmdzZXQgdHJhY2tpbmcgZnVuY3Rpb25zLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byBwcmlvcml0aXplIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGJlIHZlcnkgdGhvcm91Z2guXG5cbkknbGwga2VlcCBhIGNsb3NlIGV5ZSBvbiBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIGFzIGtleSBhcmVhcyB0byB3YXRjaC5cblxuRmlyc3QsIEkgc2hvdWxkIGNvbmZpcm0gYExSVV9HRU5gIGlzIGVuYWJsZWQgYnkgY2hlY2tpbmcgYExSVV9HRU5fRU5BQkxFRGAuXG5cblRoZW4sIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llczsgYGRlcGVuZHMgb24gTU1VYCwgYGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUGAgYWxsIHNlZW0gc3RhbmRhcmQsIGJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhleSBhcmUgbm90IGFmZmVjdGVkLlxuXG5GaW5hbGx5LCBJIHdpbGwgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhbHNvIGJlIGFkZGVkIG9yIG1vZGlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjA4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjMxOjU4LjY0MTAzMDcyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MTk1NzM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDIwPWVuZGlmICMgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTQyMi0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQyNC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDMxLVxcbm1tL0tjb25maWc6MTQzMjpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDMzLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDM3LVxcbm1tL0tjb25maWc6MTQzODpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQzOS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0NDYtXFxubW0vS2NvbmZpZzoxNDQ3OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQ0OC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjMyOjAwLjgxMjk5Mjg5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjEyMjg4NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBNR0xSVS4gVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgZW5zdXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIGFyZSBhZGRlZCB0byBgRW5hYmxlQ29uZmlnc2AuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGltcGFjdHMuIExldCdzIGxvb2sgYXQgYHdvcmtpbmdzZXRfZXZpY3Rpb25gLCBgd29ya2luZ3NldF90ZXN0X3JlY2VudGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCB0byBzZWUgaWYgdGhleSBhcmUgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gUXVpY2tseSBjaGVja2luZyB0aGUgY29kZSwgdGhleSdyZSBkZWZpbmVkIGluIGBtbS93b3JraW5nc2V0LmNgLiBUaGV5J3JlICpub3QqIHN0YXRpYywgYW5kIHRoZXkncmUgKm5vdCogaW5saW5lZCwgc28gdGhleSBhcmUgZGVmaW5pdGVseSBwcmltZSBjYW5kaWRhdGVzIHRvIGZvY3VzIG9uLiBUaGV5IGFyZSBleHBvcnRlZCBvciBnbG9iYWwgZnVuY3Rpb25zLiBHb29kLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJIGRpZG4ndCBtaXNzIGFueXRoaW5nIGVsc2UuIEFoLCBgbHJ1X2dlbl9ldmljdGlvbmAsIGBscnVfZ2VuX3Rlc3RfcmVjZW50YCwgYW5kIGBscnVfZ2VuX3JlZmF1bHRgIGFyZSBzdGF0aWMsIHNvIHRob3NlIGFyZSBub3QgdGhlIGZvY3VzLiBTbyB0aGUgcGF0Y2ggaXMgZm9jdXNlZCBvbiBjaGFuZ2VzIHRvIGBtbS93b3JraW5nc2V0LmNgLlxuXG5Pa2F5LCB0aW1lIHRvIHN1bW1hcml6ZSB0aGUgaW1wbGljYXRpb25zLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IE1HTFJVJ3Mgd29ya2luZ3NldCB0cmFja2luZyB3b3Jrcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vd29ya2luZ3NldC5jYC4gSXQncyBhbHRlcmluZyB0aGUgXCJzaGFkb3cgdG9rZW5cIiBkYXRhIHN0cnVjdHVyZSwgYWRkaW5nIGZpZWxkcyBmb3IgZXZpY3Rpb24gdGltZSAoaW4gamlmZmllcywgaW1wb3J0YW50IGZvciB0aW1pbmcpIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBUaGUgcGF0Y2ggdXBkYXRlcyBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGNvcmUsIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiwgZGVlcGx5IGNvbm5lY3RlZCB0byBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQncyB0cmlnZ2VyZWQgYnkgc3RhbmRhcmQgbWVtb3J5IHByZXNzdXJlLCBhbmQgaXMgaW52b2x2ZWQgaW4gZmlsZSBhbmQgc3dhcCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIFRoZSBtb3N0IGltcG9ydGFudCBgRm9jdXNTeW1ib2xzYCBhcmUgZGVmaW5pdGVseSBgd29ya2luZ3NldF9ldmljdGlvbmAsIGB3b3JraW5nc2V0X3Rlc3RfcmVjZW50YCwgYW5kIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBGaW5hbGx5LCB3ZSBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBMUlVfR0VOYCwgYW5kIGBMUlVfR0VOX0VOQUJMRURgIGJlY2F1c2UgdGhhdCBpcyB0aGUgYmFzZWxpbmUgbmVlZGVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDM0LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODozMjoxMC4wMjUyODQwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI5NTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid29ya2luZ3NldF9ldmljdGlvblwiLFxuICAgIFwid29ya2luZ3NldF90ZXN0X3JlY2VudFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSB3b3JraW5nc2V0IHRyYWNraW5nIGxvZ2ljIGluIGBtbS93b3JraW5nc2V0LmNgLiBJdCBjaGFuZ2VzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYWRvdyB0b2tlbiB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWUgKGppZmZpZXMpIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB1cGRhdGVzIHRoZSBldmljdGlvbiwgcmVjZW50IHRlc3QsIGFuZCByZWZhdWx0IGxvZ2ljIHRvIHVzZSB0aGVzZSBuZXcgZmllbGRzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHRoYXQgYWZmZWN0cyBwYWdlIHJlY2xhaW0gYW5kIHdvcmtpbmdzZXQgZXN0aW1hdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbGUvc3dhcCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndvcmtpbmdzZXRfZXZpY3Rpb25cIixcbiAgICBcIndvcmtpbmdzZXRfdGVzdF9yZWNlbnRcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgd29ya2luZ3NldCB0cmFja2luZyBsb2dpYyBpbiBgbW0vd29ya2luZ3NldC5jYC4gSXQgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIHRoZSBzaGFkb3cgdG9rZW4gdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lIChqaWZmaWVzKSBhbmQgc2VxdWVuY2UgbnVtYmVyLCBhbmQgdXBkYXRlcyB0aGUgZXZpY3Rpb24sIHJlY2VudCB0ZXN0LCBhbmQgcmVmYXVsdCBsb2dpYyB0byB1c2UgdGhlc2UgbmV3IGZpZWxkcy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSB0aGF0IGFmZmVjdHMgcGFnZSByZWNsYWltIGFuZCB3b3JraW5nc2V0IGVzdGltYXRpb24uIEl0IGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbWVtb3J5IHByZXNzdXJlIGFuZCBmaWxlL3N3YXAgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDg6MzI6MTAuMTgwNTg5NjU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkwNzQ3ODUxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwODozMjoxMC4xODMzMjU1MThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjM5MDcyMDQ1NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgTFJVIGdlbmVyYXRpb24gd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWRqdXN0aW5nIGhvdyBzaGFkb3cgdG9rZW5zIGFyZSBwYWNrZWQgYW5kIHVucGFja2VkIHRvIGluY2x1ZGUgZXZpY3Rpb24gdGltZXN0YW1wcyBhbmQgc2VxdWVuY2UgbnVtYmVycy4gQWxsIG5ldyB2YXJpYWJsZXMgaW50cm9kdWNlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdGF0ZSAoZS5nLiwgYGppZmZpZXNgLCBgdG9rZW5gLCBgbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxYCkgYmVmb3JlIHVzZS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Q1ODUyMDkyNzJkODdlZTk3MzE4NzU5NTU2YjNlZTFhYTc3NTFlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDA4OjI1OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCAwN2U2ODM2ZDA1MDIwLi5lNTVlNWE3NWFjYjlmIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC0xOTksNiArMTk5LDI4IEBAXG4gICovXG4gc3RhdGljIHVuc2lnbmVkIGludCBidWNrZXRfb3JkZXJbQU5PTl9BTkRfRklMRV0gX19yZWFkX21vc3RseTtcbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKlxuKyAqIExSVV9HRU4gc2hhZG93IHRva2VuIGxheW91dCB3aXRoaW4gdGhlIGV2aWN0aW9uIGZpZWxkIChsb3cgdG8gaGlnaCk6XG4rICogICBMUlVfUkVGU19XSURUSCBiaXRzOiByZWZzXG4rICogICBFVklDVF9TRVFfV0lEVEggYml0czogbWluX3NlcVxuKyAqICAgRVZJQ1RfVFNfV0lEVEggYml0czogZXZpY3Rpb24gdGltZSBpbiBqaWZmaWVzXG4rICpcbisgKiBTaXplIHRoZSBsYXlvdXQgZm9yIHRoZSB0aWdodGVyIGFub24gbWFzayBzbyB0aGUgdG9rZW4gZml0cyBib3RoIGZpbGUgYW5kXG4rICogYW5vbiBzaGFkb3dzLiBLZWVwIGF0IGxlYXN0IDE2IGJpdHMgZm9yIG1pbl9zZXEgc28gdGhlIHNhbWUtbHJ1dmVjIHJlY2VuY3lcbisgKiBjaGVjayBkb2VzIG5vdCB3cmFwIGF0IHRoZSBtdWNoIHNob3J0ZXIgTFJVX0dFTl9XSURUSCBpbnRlcnZhbC5cbisgKi9cbisjZGVmaW5lIEVWSUNUSU9OX0JJVFNcdFx0KEJJVFNfUEVSX0xPTkcgLSBFVklDVElPTl9TSElGVF9BTk9OKVxuKyNkZWZpbmUgRVZJQ1RfUEFZTE9BRF9CSVRTXHQoRVZJQ1RJT05fQklUUyAtIExSVV9SRUZTX1dJRFRIKVxuKyNkZWZpbmUgRVZJQ1RfVFNfV0lEVEhcdFx0KEVWSUNUX1BBWUxPQURfQklUUyBcdTAwM2UgNDAgPyAyNCA6IFxcXG4rXHRcdFx0XHQgRVZJQ1RfUEFZTE9BRF9CSVRTIFx1MDAzZSAxNiA/IFxcXG4rXHRcdFx0XHQgRVZJQ1RfUEFZTE9BRF9CSVRTIC0gMTYgOiAwKVxuKyNkZWZpbmUgRVZJQ1RfU0VRX1dJRFRIXHRcdChFVklDVF9QQVlMT0FEX0JJVFMgLSBFVklDVF9UU19XSURUSClcbisjZGVmaW5lIEVWSUNUX1RTX1BHT0ZGXHRcdChMUlVfUkVGU19XSURUSCArIEVWSUNUX1NFUV9XSURUSClcbisjZGVmaW5lIEVWSUNUX1NFUV9NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBFVklDVF9TRVFfV0lEVEgpIC0gMSlcbisjZGVmaW5lIEVWSUNUX1RTX01BU0tcdFx0KCgxVUwgXHUwMDNjXHUwMDNjIEVWSUNUX1RTX1dJRFRIKSAtIDEpXG4rI2VuZGlmXG4rXG4gc3RhdGljIHZvaWQgKnBhY2tfc2hhZG93KGludCBtZW1jZ2lkLCBwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIGV2aWN0aW9uLFxuIFx0XHRcdCBib29sIHdvcmtpbmdzZXQsIGJvb2wgZmlsZSlcbiB7XG5AQCAtMjUwLDEzICsyNzIsMTkgQEAgc3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdEJVSUxEX0JVR19PTihMUlVfR0VOX1dJRFRIICsgTFJVX1JFRlNfV0lEVEggXHUwMDNlXG4gXHRcdCAgICAgQklUU19QRVJfTE9ORyAtIG1heChFVklDVElPTl9TSElGVCwgRVZJQ1RJT05fU0hJRlRfQU5PTikpO1xuK1x0QlVJTERfQlVHX09OKEVWSUNUX1RTX1dJRFRIIFx1MDAzYz0gMCk7XG4rXHRCVUlMRF9CVUdfT04oRVZJQ1RfU0VRX1dJRFRIIFx1MDAzYyAxNik7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfV0lEVEggKyBFVklDVF9TRVFfV0lEVEggK1xuK1x0XHQgICAgIEVWSUNUX1RTX1dJRFRIICE9IEVWSUNUSU9OX0JJVFMpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuIFx0bHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdG1pbl9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dG9rZW4gPSAobWluX3NlcSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfV0lEVEgpIHwgbWF4KHJlZnMgLSAxLCAwKTtcbitcdHRva2VuID0gKChtaW5fc2VxIFx1MDAyNiBFVklDVF9TRVFfTUFTSykgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1dJRFRIKSB8XG4rXHRcdG1heChyZWZzIC0gMSwgMCk7XG4rXHR0b2tlbiB8PSAoamlmZmllcyBcdTAwMjYgRVZJQ1RfVFNfTUFTSykgXHUwMDNjXHUwMDNjIEVWSUNUX1RTX1BHT0ZGO1xuIFxuIFx0aGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKG1pbl9zZXEpO1xuIFx0YXRvbWljX2xvbmdfYWRkKGRlbHRhLCBcdTAwMjZscnVnZW4tXHUwMDNlZXZpY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7XG5AQCAtMjc1LDE4ICszMDMsMjEgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIHN0cnVjdCBscnV2ZWMgKipscnV2ZWMsXG4ge1xuIFx0aW50IG1lbWNnX2lkO1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuK1x0dW5zaWduZWQgbG9uZyB0b2tlbl9zZXE7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0O1xuIFxuK1x0KHZvaWQpZmlsZTtcbitcbiBcdHVucGFja19zaGFkb3coc2hhZG93LCBcdTAwMjZtZW1jZ19pZCwgXHUwMDI2cGdkYXQsIHRva2VuLCB3b3JraW5nc2V0KTtcbiBcbiBcdG1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQobWVtY2dfaWQpO1xuIFx0KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4gXG4tXHRtYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRtYXhfc2VxIFx1MDAyNj0gKGZpbGUgPyBFVklDVElPTl9NQVNLIDogRVZJQ1RJT05fTUFTS19BTk9OKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEg7XG4rXHRtYXhfc2VxID0gUkVBRF9PTkNFKCgqbHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSkgXHUwMDI2IEVWSUNUX1NFUV9NQVNLO1xuK1x0dG9rZW5fc2VxID0gKCp0b2tlbiBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfV0lEVEgpIFx1MDAyNiBFVklDVF9TRVFfTUFTSztcbiBcbi1cdHJldHVybiBhYnNfZGlmZihtYXhfc2VxLCAqdG9rZW4gXHUwMDNlXHUwMDNlIExSVV9SRUZTX1dJRFRIKSBcdTAwM2MgTUFYX05SX0dFTlM7XG4rXHRyZXR1cm4gYWJzX2RpZmYobWF4X3NlcSwgdG9rZW5fc2VxKSBcdTAwM2MgTUFYX05SX0dFTlM7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5AQCAtMjk1LDcgKzMyNiwxMCBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0aW50IGhpc3QsIHRpZXIsIHJlZnM7XG4gXHRib29sIHdvcmtpbmdzZXQ7XG4gXHR1bnNpZ25lZCBsb25nIHRva2VuO1xuK1x0dW5zaWduZWQgbG9uZyBldmljdF90cywgcmVmYXVsdF9kaXN0YW5jZTtcbitcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgbWlkZGxlX3NlcSwgYmlydGgsIHdpbmRvd19hZ2U7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4rXHRzdHJ1Y3QgbHJ1dmVjICpkc3RfbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbjtcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuQEAgLTMwMyw4ICszMzcsMjcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbiBcdHJlY2VudCA9IGxydV9nZW5fdGVzdF9yZWNlbnQoc2hhZG93LCBcdTAwMjZscnV2ZWMsIFx1MDAyNnRva2VuLCBcdTAwMjZ3b3JraW5nc2V0LCB0eXBlKTtcbi1cdGlmIChscnV2ZWMgIT0gZm9saW9fbHJ1dmVjKGZvbGlvKSlcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRkc3RfbHJ1dmVjID0gZm9saW9fbHJ1dmVjKGZvbGlvKTtcbitcbitcdGlmIChscnV2ZWMgIT0gZHN0X2xydXZlYykge1xuK1x0XHQvKlxuK1x0XHQgKiBtaW5fc2VxIHZhbHVlcyBmcm9tIGRpZmZlcmVudCBscnV2ZWNzIGFyZSBub3QgY29tcGFyYWJsZS5cbitcdFx0ICogSnVkZ2UgYSBjcm9zcy1tZW1jZyByZWZhdWx0IGJ5IHdoZXRoZXIgaXQgaGFwcGVuZWQgd2l0aGluXG4rXHRcdCAqIHRoZSBhZ2Ugb2YgdGhlIG1pZGRsZSBnZW5lcmF0aW9uIGluIHRoZSBkZXN0aW5hdGlvblxuK1x0XHQgKiBscnV2ZWMncyBNQVhfTlJfR0VOUyB3aW5kb3cuXG4rXHRcdCAqL1xuK1x0XHRscnV2ZWMgPSBkc3RfbHJ1dmVjO1xuK1x0XHRscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuK1x0XHRtYXhfc2VxID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2VtYXhfc2VxKTtcbitcdFx0bWlkZGxlX3NlcSA9IG1heF9zZXEgLSBNQVhfTlJfR0VOUyAvIDI7XG4rXHRcdGJpcnRoID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2V0aW1lc3RhbXBzW2xydV9nZW5fZnJvbV9zZXEobWlkZGxlX3NlcSldKTtcbitcdFx0d2luZG93X2FnZSA9IGppZmZpZXMgLSBiaXJ0aDtcbitcbitcdFx0ZXZpY3RfdHMgPSAodG9rZW4gXHUwMDNlXHUwMDNlIEVWSUNUX1RTX1BHT0ZGKSBcdTAwMjYgRVZJQ1RfVFNfTUFTSztcbitcdFx0cmVmYXVsdF9kaXN0YW5jZSA9ICgoamlmZmllcyBcdTAwMjYgRVZJQ1RfVFNfTUFTSykgLSBldmljdF90cykgXHUwMDI2XG4rXHRcdFx0XHQgICBFVklDVF9UU19NQVNLO1xuK1x0XHRyZWNlbnQgPSByZWZhdWx0X2Rpc3RhbmNlIFx1MDAzYz0gd2luZG93X2FnZTtcbitcdH1cbiBcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX1JFRkFVTFRfQkFTRSArIHR5cGUsIGRlbHRhKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjMyOjEwLjE4MzMyNzA0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzkwNzIwMjU0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTFJVIEdlbmVyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBtbS93b3JraW5nc2V0LmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgaXQncyBhbGwgYWJvdXQgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0d2Vha2luZyB0aGUgTFJVIGdlbmVyYXRpb24gd29ya2luZ3NldCByZWZhdWx0IGxvZ2ljLiBJdCdzIHVzaW5nIGJpdHdpc2Ugb3BlcmF0aW9ucyBhbmQgbmV3IG1hY3JvcyB0byBoYW5kbGUgdGhlIGBMUlVfR0VOYCBzaGFkb3cgdG9rZW4gbGF5b3V0LiBUaGlzIG1haW5seSBpbXBhY3RzIGZ1bmN0aW9ucyBsaWtlIGBscnVfZ2VuX2V2aWN0aW9uYCwgYGxydV9nZW5fdGVzdF9yZWNlbnRgLCBhbmQgYGxydV9nZW5fcmVmYXVsdGAuXG5cbkxvb2tpbmcgY2xvc2VyLCB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBtYW5pcHVsYXRpbmcgdmFyaWFibGVzIGxpa2UgYHRva2VuYCwgYG1pbl9zZXFgLCBgamlmZmllc2AsIGBtYXhfc2VxYCwgYHRva2VuX3NlcWAsIGBldmljdF90c2AsIGByZWZhdWx0X2Rpc3RhbmNlYCwgZXRjLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBoYXBwZW5pbmcgaGVyZSwgYW5kIGNydWNpYWxseSwgbm90aGluZyBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXTigJlzIGFsbCBpbnRlcm5hbCwgYW5kIHRoZSBsb2dpYyByZWxpZXMgb24gZXN0YWJsaXNoZWQgdmFsdWVzIGRlcml2ZWQgZnJvbSBgamlmZmllc2AsIGV4aXN0aW5nIHNlcXVlbmNlIG51bWJlcnMsIGFuZCwgaW1wb3J0YW50bHksIHRoZSBgdG9rZW5gLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4gd2FzIGFib3V0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSG93ZXZlciwgdGhlIG1vcmUgSSBkaWcsIEkgc2VlIHRoYXQgaXNuJ3QgYSBwcm9ibGVtLiBBbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgcHVsbGluZyB2YWx1ZXMgZnJvbSB0aGluZ3MgbGlrZSBgamlmZmllc2AsIGB0b2tlbmAsIGFuZCBgbHJ1Z2VuLVx1MDAzZW1heF9zZXFgLiAgV2FpdCwgYHRva2VuYCBjb21lcyBmcm9tIGB1bnBhY2tfc2hhZG93YCwgd2hpY2ggdW5wYWNrcyB0aGUgYHNoYWRvd2AgYXJndW1lbnQsIHBhc3NlZCBhcyBgdm9pZCAqYC4gTGV0IG1lIGNvbmZpcm0gdGhhdCBgdW5wYWNrX3NoYWRvd2AgaXMgc2FmZS4gQWgsIGl0IHVucGFja3MgdGhlIHNoYWRvdyBkYXRhIGFuZCBpdCBpcyBhbHNvIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLlxuXG5Pa2F5LCBjaGVja2luZyB0aGUgc3BlY2lmaWNzIG9mIGBscnVfZ2VuX3JlZmF1bHRgIGFnYWluLCBJIHNlZSB0aGF0IGxvY2FsIHZhcmlhYmxlcyBsaWtlIGBldmljdF90c2AsIGByZWZhdWx0X2Rpc3RhbmNlYCwgYG1heF9zZXFgLCBhbmQgc28gb24gYXJlIGFsbCBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGJlZm9yZSB0aGVpciB1c2UuIFRoZSBjcnVjaWFsIGNhbGN1bGF0aW9uIG9mIGByZWZhdWx0X2Rpc3RhbmNlYCBkZXBlbmRzIG9uIGBqaWZmaWVzYCBhbmQgYSB2YWx1ZSBleHRyYWN0ZWQgZnJvbSBgdG9rZW5gIGl0c2VsZiwgYm90aCBpbml0aWFsaXplZC5cblxuYGBgY1xuXHR1bnNpZ25lZCBsb25nIGV2aWN0X3RzLCByZWZhdWx0X2Rpc3RhbmNlO1xuXHR1bnNpZ25lZCBsb25nIG1heF9zZXEsIG1pZGRsZV9zZXEsIGJpcnRoLCB3aW5kb3dfYWdlO1xuYGBgXG5cbmBgYGNcblx0XHRtYXhfc2VxID0gUkVBRF9PTkNFKGxydWdlbi1cdTAwM2VtYXhfc2VxKTtcblx0XHRtaWRkbGVfc2VxID0gbWF4X3NlcSAtIE1BWF9OUl9HRU5TIC8gMjtcblx0XHRiaXJ0aCA9IFJFQURfT05DRShscnVnZW4tXHUwMDNldGltZXN0YW1wc1tscnVfZ2VuX2Zyb21fc2VxKG1pZGRsZV9zZXEpXSk7XG5cdFx0d2luZG93X2FnZSA9IGppZmZpZXMgLSBiaXJ0aDtcblxuXHRcdGV2aWN0X3RzID0gKHRva2VuIFx1MDAzZVx1MDAzZSBFVklDVF9UU19QR09GRikgXHUwMDI2IEVWSUNUX1RTX01BU0s7XG5cdFx0cmVmYXVsdF9kaXN0YW5jZSA9ICgoamlmZmllcyBcdTAwMjYgRVZJQ1RfVFNfTUFTSykgLSBldmljdF90cykgXHUwMDI2XG5cdFx0XHRcdCAgIEVWSUNUX1RTX01BU0s7XG5cdFx0cmVjZW50ID0gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdpbmRvd19hZ2U7XG5gYGBcblxuVGhpcyBjb25maXJtcyBpdC4gIEknbSBjb25maWRlbnQgdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlIGhlcmUsIGFuZCBJIGRvbid0IHNlZSBhbnkgb3RoZXIgY29uY2VybmluZyBpc3N1ZXMuIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBnaXZlbiB0aGUgcGF0Y2gncyBzY29wZS4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzA1LCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA4OjM2OjA5LjI1NTM1NTIxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIExSVSBnZW5lcmF0aW9uIHdvcmtpbmdzZXQgcmVmYXVsdCBsb2dpYywgc3BlY2lmaWNhbGx5IGFkanVzdGluZyBob3cgc2hhZG93IHRva2VucyBhcmUgcGFja2VkIGFuZCB1bnBhY2tlZCB0byBpbmNsdWRlIGV2aWN0aW9uIHRpbWVzdGFtcHMgYW5kIHNlcXVlbmNlIG51bWJlcnMuIEFsbCBuZXcgdmFyaWFibGVzIGludHJvZHVjZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcgc3RhdGUgKGUuZy4sIGBqaWZmaWVzYCwgYHRva2VuYCwgYGxydWdlbi1cXHUwMDNlbWF4X3NlcWApIGJlZm9yZSB1c2UuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBMUlUgZ2VuZXJhdGlvbiB3b3JraW5nc2V0IHJlZmF1bHQgbG9naWMsIHNwZWNpZmljYWxseSBhZGp1c3RpbmcgaG93IHNoYWRvdyB0b2tlbnMgYXJlIHBhY2tlZCBhbmQgdW5wYWNrZWQgdG8gaW5jbHVkZSBldmljdGlvbiB0aW1lc3RhbXBzIGFuZCBzZXF1ZW5jZSBudW1iZXJzLiBBbGwgbmV3IHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0YXRlIChlLmcuLCBgamlmZmllc2AsIGB0b2tlbmAsIGBscnVnZW4tXFx1MDAzZW1heF9zZXFgKSBiZWZvcmUgdXNlLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjsn6s[1] Phase: Succeeded StartedAt: 2026-08-26 08:36:39 +0000 UTC FinishedAt: 2026-08-26 08:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 08:36:39 +0000 UTC FinishedAt: 2026-08-26 08:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2] Phase: Succeeded StartedAt: 2026-08-26 08:36:39 +0000 UTC FinishedAt: 2026-08-26 12:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 08:36:39 +0000 UTC FinishedAt: 2026-08-26 12:14:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 08:36:39 +0000 UTC FinishedAt: 2026-08-26 08:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 08:36:39 +0000 UTC FinishedAt: 2026-08-26 08:36:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjsn6s/series-workflowjsn6s-convert-artifact-2574195781/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 08:36:49 +0000 UTC FinishedAt: 2026-08-26 08:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 08:36:49 +0000 UTC FinishedAt: 2026-08-26 08:52:48 +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:*37ca5604-39aa-4e9f-8ef4-4d99d7c97760,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-workflowjsn6s/series-workflowjsn6s-convert-artifact-2574195781/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": "400e442d-95fe-44bd-a81b-d5dd9c6ec72d", "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-workflowjsn6s/series-workflowjsn6s-build-action-1081066219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 08:36:49 +0000 UTC FinishedAt: 2026-08-26 08:52:38 +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:*37ca5604-39aa-4e9f-8ef4-4d99d7c97760,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-workflowjsn6s/series-workflowjsn6s-convert-artifact-2574195781/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": "400e442d-95fe-44bd-a81b-d5dd9c6ec72d", "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-workflowjsn6s/series-workflowjsn6s-build-action-1081066219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 08:52:48 +0000 UTC FinishedAt: 2026-08-26 08:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 08:52:48 +0000 UTC FinishedAt: 2026-08-26 08:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 08:52:48 +0000 UTC FinishedAt: 2026-08-26 08:52:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 08:52:48 +0000 UTC FinishedAt: 2026-08-26 08:52:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjsn6s/series-workflowjsn6s-convert-artifact-39095328/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 08:52:58 +0000 UTC FinishedAt: 2026-08-26 08:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 08:52:58 +0000 UTC FinishedAt: 2026-08-26 08:54:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*400e442d-95fe-44bd-a81b-d5dd9c6ec72d,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-workflowjsn6s/series-workflowjsn6s-build-action-1081066219/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-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 08:54:43 +0000 UTC FinishedAt: 2026-08-26 08:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 08:54:43 +0000 UTC FinishedAt: 2026-08-26 08:54:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 08:54:43 +0000 UTC FinishedAt: 2026-08-26 09:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 08:54:43 +0000 UTC FinishedAt: 2026-08-26 09:10:45 +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:*37ca5604-39aa-4e9f-8ef4-4d99d7c97760,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-workflowjsn6s/series-workflowjsn6s-convert-artifact-39095328/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": "c16b4078-6a74-4ca0-be30-577132466c53", "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-workflowjsn6s/series-workflowjsn6s-build-action-712344028/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 08:54:43 +0000 UTC FinishedAt: 2026-08-26 09:10:35 +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:*37ca5604-39aa-4e9f-8ef4-4d99d7c97760,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-workflowjsn6s/series-workflowjsn6s-convert-artifact-39095328/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": "c16b4078-6a74-4ca0-be30-577132466c53", "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-workflowjsn6s/series-workflowjsn6s-build-action-712344028/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 09:10:45 +0000 UTC FinishedAt: 2026-08-26 09:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 09:10:45 +0000 UTC FinishedAt: 2026-08-26 09:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 09:10:45 +0000 UTC FinishedAt: 2026-08-26 09:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 09:10:45 +0000 UTC FinishedAt: 2026-08-26 09:12:32 +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:*c16b4078-6a74-4ca0-be30-577132466c53,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-workflowjsn6s/series-workflowjsn6s-build-action-712344028/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-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 09:12:42 +0000 UTC FinishedAt: 2026-08-26 12:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 09:12:42 +0000 UTC FinishedAt: 2026-08-26 12:14:40 +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":["workingset_eviction","workingset_test_recent","workingset_refault"],"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:*400e442d-95fe-44bd-a81b-d5dd9c6ec72d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c16b4078-6a74-4ca0-be30-577132466c53,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-workflowjsn6s/series-workflowjsn6s-build-action-1081066219/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-workflowjsn6s/series-workflowjsn6s-build-action-712344028/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 09:12:42 +0000 UTC FinishedAt: 2026-08-26 09:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 09:12:42 +0000 UTC FinishedAt: 2026-08-26 09:12:46 +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":["workingset_eviction","workingset_test_recent","workingset_refault"],"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-workflowjsn6s/series-workflowjsn6s-convert-artifact-2400285305/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 09:12:42 +0000 UTC FinishedAt: 2026-08-26 09:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 09:12:42 +0000 UTC FinishedAt: 2026-08-26 09:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 09:12:42 +0000 UTC FinishedAt: 2026-08-26 09:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 09:12:52 +0000 UTC FinishedAt: 2026-08-26 12:14:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjsn6s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["workingset_eviction","workingset_test_recent","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e366c15e1610ef11d0717ecd875ae63050282676","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"f129603d-b433-415f-945b-025f8881fee1","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 09:12:52 +0000 UTC FinishedAt: 2026-08-26 12:14:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*400e442d-95fe-44bd-a81b-d5dd9c6ec72d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c16b4078-6a74-4ca0-be30-577132466c53,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-workflowjsn6s/series-workflowjsn6s-build-action-1081066219/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-workflowjsn6s/series-workflowjsn6s-build-action-712344028/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-workflowjsn6s/series-workflowjsn6s-convert-artifact-2400285305/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,}