Name: series-workflowpt2gg Phase: Succeeded StartedAt: 2026-09-10 03:48:05 +0000 UTC FinishedAt: 2026-09-10 07:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[0] Phase: Succeeded StartedAt: 2026-09-10 03:48:05 +0000 UTC FinishedAt: 2026-09-10 04:09:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 03:48:05 +0000 UTC FinishedAt: 2026-09-10 04:09:22 +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": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVMEM" ], "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": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVMEM" ], "series_id": "d8f3b30a-6212-4a43-bfc2-4b845fd7cf59" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "generic_access_phys" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVk1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKTpcbjEuIEl0IGNsYW1wcyAmIzM5O2xlbiYjMzk7IHRvICYjMzk7UEFHRV9TSVpFIC0gb2Zmc2V0JiMzOTsgYW5kIHJlZHVjZXMgdGhlIGlvcmVtYXBfcHJvdCgpIG1hcHBpbmcgc2l6ZSB0byBQQUdFX1NJWkUgYmVjYXVzZSBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgb25seSByZXNvbHZlcyBhbmQgdmFsaWRhdGVzIGEgc2luZ2xlIHBhZ2UvUEZOIGF0IGEgdGltZS5cbjIuIEl0IGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgc2hpZnQgb3ZlcmZsb3cgd2hlbiBjb21wYXJpbmcgcGh5c19hZGRyIGFnYWluc3QgYXJncy5wZm4gYnkgY2FzdGluZyBhcmdzLnBmbiB0byByZXNvdXJjZV9zaXplX3QuXG5cblRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIHBoeXNpY2FsIHBhZ2UgbWFwcGluZyBib3VuZHMgYW5kIGFyaXRobWV0aWMgdHlwZSBzaXppbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbCBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgY29uY2VybnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1vcnkuYykgdG8gY29uc3RyYWluIHBoeXNpY2FsIGFjY2VzcyBsZW5ndGhzIHRvIHNpbmdsZS1wYWdlIGJvdW5kYXJpZXMgYW5kIGZpeCB0eXBlIGNhc3RpbmcgZm9yIFBGTiBzaGlmdHMuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlbW90ZSBWTSBhY2Nlc3MgKGUuZy4sIHZpYSBwdHJhY2UsIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2LCBvciAvcHJvYy8kcGlkL21lbSkgdG8gcGh5c2ljYWwgSS9PIG1hcHBpbmdzIHN1Y2ggYXMgL2Rldi9tZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNDMwMThiODc4OWEwYWE5ZDRkMTUyNTQwOGVmYTY0MDg1NjI5NDZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDQ6MDg6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMy4uNzRmZGYyOWM5YzdlOCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTY5NzQsNiAmIzQzOzY5NzQsMTIgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGJvb2wgd3JpdGFibGU7XG4gXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCYjMzk7cyB3aGF0IGZvbGxvd19wZm5tYXBfc3RhcnQoKVxuJiM0MztcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbiYjNDM7XG4gcmV0cnk6XG4gXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNjk4NSw3ICYjNDM7Njk5MSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7XG4mIzQzO1x0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xuIFx0aWYgKCFtYWRkcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNjk5Myw3ICYjNDM7Njk5OSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiYjNDM7XHQgICAgKHBoeXNfYWRkciAhPSAoKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpIHx8XG4gXHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XG4gXHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuIFx0XHRpb3VubWFwKG1hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1vcnkuYykgdG8gY29uc3RyYWluIHBoeXNpY2FsIGFjY2VzcyBsZW5ndGhzIHRvIHNpbmdsZS1wYWdlIGJvdW5kYXJpZXMgYW5kIGZpeCB0eXBlIGNhc3RpbmcgZm9yIFBGTiBzaGlmdHMuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlbW90ZSBWTSBhY2Nlc3MgKGUuZy4sIHZpYSBwdHJhY2UsIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2LCBvciAvcHJvYy8kcGlkL21lbSkgdG8gcGh5c2ljYWwgSS9PIG1hcHBpbmdzIHN1Y2ggYXMgL2Rldi9tZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNDMwMThiODc4OWEwYWE5ZDRkMTUyNTQwOGVmYTY0MDg1NjI5NDZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDQ6MDg6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGZmMzM4YzJhYmU5MjMuLjc0ZmRmMjljOWM3ZTggMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC02OTc0LDYgJiM0Mzs2OTc0LDEyIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJYm9vbCB3cml0YWJsZTsKIAlzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9OwogCiYjNDM7CS8qCiYjNDM7CSAqIExpbWl0IGFjY2VzcyB0byBvbmUgcGFnZSBhdCBhIHRpbWUsIGFzIHRoYXQmIzM5O3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KCkKJiM0MzsJICogZ3VhcmFudGVlczsgZXhwZWN0IHRoZSBjYWxsZXIgdG8gcmV0cnkgdG8gcmVhZCBsYXJnZXIgcmFuZ2VzLgomIzQzOwkgKi8KJiM0MzsJbGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7CiYjNDM7CiByZXRyeToKIAlpZiAoZm9sbG93X3Bmbm1hcF9zdGFydCgmYW1wO2FyZ3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY5ODUsNyAmIzQzOzY5OTEsNyBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWlmICgod3JpdGUgJmFtcDsgRk9MTF9XUklURSkgJmFtcDsmYW1wOyAhd3JpdGFibGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX0FMSUdOKGxlbiAmIzQzOyBvZmZzZXQpLCBwcm90KTsKJiM0MzsJbWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpOwogCWlmICghbWFkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC02OTkzLDcgJiM0Mzs2OTk5LDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJZ290byBvdXRfdW5tYXA7CiAKIAlpZiAoKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChhcmdzLnBncHJvdCkpIHx8Ci0JICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQpKSB8fAomIzQzOwkgICAgKHBoeXNfYWRkciAhPSAoKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSkgfHwKIAkgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7CiAJCWZvbGxvd19wZm5tYXBfZW5kKCZhbXA7YXJncyk7CiAJCWlvdW5tYXAobWFkZHIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgQWZmZWN0ZWQgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgYW5kLCBjcnVjaWFsbHksIHdoZXJlIGl0JiMzOTtzIG1ha2luZyBjaGFuZ2VzLiBSaWdodCwgc28gaXQmIzM5O3MgdG91Y2hpbmcgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24uIE5vdywgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCB6ZXJvIGluIGFyb3VuZCBsaW5lIDY5NzQgaW4gYG1tL21lbW9yeS5jYC4gSSBuZWVkIHRvIHNlZSB0aGUgZnVuY3Rpb24gaW4gYWN0aW9uLiBXaG8mIzM5O3MgY2FsbGluZyBpdD8gV2hhdCBhcmUgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIGRvaW5nPyBHZXR0aW5nIGEgZmVlbCBmb3IgdGhlIGNvbnRyb2wgZmxvdyBpcyBlc3NlbnRpYWwsIGFzIGlzIHVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIG9mIHRoaXMgcGFydGljdWxhciBtb2RpZmljYXRpb24uIE5lZWQgdG8gYnVpbGQgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIGJlZm9yZSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5NjA6XHQgKiBAd3JpdGU6IHNldCB0byBGT0xMX1dSSVRFIHdoZW4gd3JpdGluZywgb3RoZXJ3aXNlIHJlYWRpbmdcbjY5NjE6XHQgKlxuNjk2MjpcdCAqIFRoaXMgaXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBcdTAwMjZ2bV9vcGVyYXRpb25zX3N0cnVjdC5hY2Nlc3MgZm9yIGFuXG42OTYzOlx0ICogaW9tZW0gbWFwcGluZy4gVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtKCkgd2hlbiB0aGUgQHZtYSBpc1xuNjk2NDpcdCAqIG5vdCBwYWdlIGJhc2VkLlxuNjk2NTpcdCAqL1xuNjk2NjpcdGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG42OTY3Olx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXG42OTY4Olx0e1xuNjk2OTpcdFx0cmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkcjtcbjY5NzA6XHRcdHBncHJvdF90IHByb3QgPSBfX3BncHJvdCgwKTtcbjY5NzE6XHRcdHZvaWQgX19pb21lbSAqbWFkZHI7XG42OTcyOlx0XHRpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcik7XG42OTczOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbjY5NzQ6XHRcdGJvb2wgd3JpdGFibGU7XG42OTc1Olx0XHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xuNjk3NjpcdFxuNjk3NzpcdFx0LypcbjY5Nzg6XHRcdCAqIExpbWl0IGFjY2VzcyB0byBvbmUgcGFnZSBhdCBhIHRpbWUsIGFzIHRoYXQmIzM5O3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KClcbjY5Nzk6XHRcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cbjY5ODA6XHRcdCAqL1xuNjk4MTpcdFx0bGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7XG42OTgyOlx0XG42OTgzOlx0cmV0cnk6XG42OTg0Olx0XHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbjY5ODU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42OTg2Olx0XHRwcm90ID0gYXJncy5wZ3Byb3Q7XG42OTg3Olx0XHRwaHlzX2FkZHIgPSAocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuNjk4ODpcdFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuNjk4OTpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG42OTkwOlx0XG42OTkxOlx0XHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuNjk5MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY5OTM6XHRcbjY5OTQ6XHRcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbjY5OTU6XHRcdGlmICghbWFkZHIpXG42OTk2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNjk5NzpcdFxuNjk5ODpcdFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG42OTk5Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xuNzAwMDpcdFxuNzAwMTpcdFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuNzAwMjpcdFx0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxuNzAwMzpcdFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xuNzAwNDpcdFx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbjcwMDU6XHRcdFx0aW91bm1hcChtYWRkcik7XG43MDA2Olx0XHRcdGdvdG8gcmV0cnk7XG43MDA3Olx0XHR9XG43MDA4Olx0XG43MDA5Olx0XHRpZiAod3JpdGUpXG43MDEwOlx0XHRcdG1lbWNweV90b2lvKG1hZGRyICYjNDM7IG9mZnNldCwgYnVmLCBsZW4pO1xuNzAxMTpcdFx0ZWxzZVxuNzAxMjpcdFx0XHRtZW1jcHlfZnJvbWlvKGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBsZW4pO1xuNzAxMzpcdFx0cmV0ID0gbGVuO1xuNzAxNDpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG43MDE1Olx0b3V0X3VubWFwOlxuNzAxNjpcdFx0aW91bm1hcChtYWRkcik7XG43MDE3Olx0XG43MDE4Olx0XHRyZXR1cm4gcmV0O1xuNzAxOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgS2VybmVsIFVzYWdlIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqIG9yICpyZWZlcmVuY2VkKi4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MgZnJhbWV3b3JrLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzLCBvYnZpb3VzbHksIGJ1dCBhbHNvIGFueSBkYXRhIHN0cnVjdHVyZXMgb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBpdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGNhbGxzLCBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLCBvciBtYXliZSBldmVuIHVzYWdlIHdpdGhpbiBtYWNyb3M/IFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpdHMgb3ZlcmFsbCBpbXBhY3QuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIC0gYGdyZXBgLCBgY3Njb3BlYCwgYGNsYW5nZGAgLSB0byB0cmFjayBpdCBhbGwgZG93bi4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGlzIGNsZWFyIGFuZCBJIGNhbiBuYXJyb3cgZG93biB0aGUgcG90ZW50aWFsbHkgcmVsZXZhbnQgZmlsZXMgcXVpY2tseS4gVGhpcyBzaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbiwgYnV0IHlvdSBuZXZlciBrbm93IHdoYXQgc3VycHJpc2VzIHRoZSBrZXJuZWwgaG9sZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL2NkeC9jZHguYy02NjMtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jZHgvY2R4LmM6NjY0Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL2NkeC9jZHguYy02NjUtI2VuZGlmXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jaGFyL21lbS5jOjMyMTpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIyLSNlbmRpZlxuLS1cbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDYtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jOjgwNzpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwOC0jZW5kaWZcbi0tXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL3BjaS9tbWFwLmMtMTktI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9wY2kvbW1hcC5jOjIwOlx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL3BjaS9tbWFwLmMtMjEtI2VuZGlmXG4tLVxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcbmRyaXZlcnMvdWlvL3Vpby5jLTczNy0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzg6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOS0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NzgzPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTgzNS1cdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxuaW5jbHVkZS9saW51eC9tbS5oOjgzNjpcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xuaW5jbHVkZS9saW51eC9tbS5oLTgzNy1cdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMxMzA9Y29weV9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKTtcbmluY2x1ZGUvbGludXgvbW0uaDozMTMxOmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzEzMi1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7XG4tLVxubW0vbWVtb3J5LmM9Njk1MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XG4tLVxubW0vbWVtb3J5LmMtNjk1NC0vKipcbm1tL21lbW9yeS5jOjY5NTU6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXG5tbS9tZW1vcnkuYy02OTU2LSAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXG4tLVxubW0vbWVtb3J5LmMtNjk2NS0gKi9cbm1tL21lbW9yeS5jOjY5NjY6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTY5NjctXHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXG4tLVxubW0vbWVtb3J5LmMtNzAxOS19XG5tbS9tZW1vcnkuYzo3MDIwOkVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xubW0vbWVtb3J5LmMtNzAyMS0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTYzMj1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjg0LVx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjY4NTpcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODYtXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MDkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBY2Nlc3MgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzIHdvcmtzIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBpbnZvbHZlZCB3aXRoIHRoaW5ncyBsaWtlIGAvZGV2L21lbWAgbW1hcCBvcGVyYXRpb25zIGluIGBkcml2ZXJzL2NoYXIvbWVtLmNgLCBQQ0kgbWVtb3J5IG1hcHBpbmcgaW4gYGRyaXZlcnMvcGNpL21tYXAuY2AsIGFuZCBsaWtlbHkgVUlPLiBJJiMzOTttIHNlZWluZyBhIGNvbm5lY3Rpb24gdG8gYGFjY2Vzc19wcm9jZXNzX3ZtYCwgYHB0cmFjZWAsIGFuZCBgL3Byb2MvcGlkL21lbWAgYmVjYXVzZSB0aGVzZSBhbGwgYXR0ZW1wdCB0byByZWFkL3dyaXRlIG1lbW9yeSB0aGF0JiMzOTtzIGJlZW4gbWFwcGVkIHRvIGAvZGV2L21lbWAgb3IgUENJIEkvTyBtZW1vcnkuIFRoZSB0cmFpbCBsZWFkcyB0aHJvdWdoIGBhY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAgYW5kIGV2ZW50dWFsbHkgaGl0cyBgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2VzcyguLi4pYC4gVGhhdCYjMzk7cyB0aGUgY29yZS4gTm93IEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGBIQVZFX0lPUkVNQVBfUFJPVGAgaXMgZGVmaW5lZCBpbiBLY29uZmlnLiBJdCYjMzk7cyBhbHNvIHdvcnRoIG15IHRpbWUgdG8gbG9vayBhdCBob3cgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGl0c2VsZiBpcyBndWFyZGVkIHdpdGhpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyBhbmQgcHJvdGVjdGlvbnMgc3Vycm91bmRpbmcgdGhpcywgYW5kIGhvdyBpdCBoYW5kbGVzIHZhcmlvdXMgbWVtb3J5IHR5cGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL2NkeC9jZHguYzo2NjM6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jZHgvY2R4LmMtNjY0LVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcbmRyaXZlcnMvY2hhci9tZW0uYzozMjA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jaGFyL21lbS5jLTMyMS1cdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXG4tLVxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jOjgwNjojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA3LVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG4tLVxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xuZHJpdmVycy9wY2kvbW1hcC5jOjE5OiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvcGNpL21tYXAuYy0yMC1cdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuLS1cbmRyaXZlcnMvdWlvL3Vpby5jPTczNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb19waHlzaWNhbF92bV9vcHMgPSB7XG5kcml2ZXJzL3Vpby91aW8uYzo3Mzc6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy91aW8vdWlvLmMtNzM4LVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG4tLVxubW0vbWVtb3J5LmM9Njk1MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XG5tbS9tZW1vcnkuYy02OTUyLVxubW0vbWVtb3J5LmM6Njk1MzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5tbS9tZW1vcnkuYy02OTU0LS8qKlxuLS1cbm1tL21lbW9yeS5jPTcwMjY9c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy03MDY5LVx0XHRcdGJ5dGVzID0gMDtcbm1tL21lbW9yeS5jOjcwNzA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxubW0vbWVtb3J5LmMtNzA3MS1cdFx0XHRpZiAodm1hLVx1MDAzZXZtX29wcyBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3MpXG4tLVxubW0vbWVtb3J5LmM9NzE1MD1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtNzE3OS1cdFx0XHQgKiBUcmVhdCBhcyBhIHRvdGFsIGZhaWx1cmUgZm9yIG5vdyB1bnRpbCB3ZSBkZWNpZGUgaG93XG5tbS9tZW1vcnkuYzo3MTgwOlx0XHRcdCAqIHRvIGhhbmRsZSB0aGUgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGNhc2UgYW5kXG5tbS9tZW1vcnkuYy03MTgxLVx0XHRcdCAqIHN0YWNrIGV4cGFuc2lvbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBIQVZFX0lPUkVNQVBfUFJPVGAgbWFjcm8gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2VzOiB0aGUgYGFyY2gvYCBkaXJlY3RvcmllcywgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdGhhdCBjb250cm9sIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9yIGZlYXR1cmUtZmxhZyBkZWZpbml0aW9ucyByZXNpZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGVmaW5lLCBpbiB0aGlzIGNvbnRleHQsIHRvIGNvbnRpbnVlIG15IHdvcmsuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhyb3VnaCB0aGUgY29tbW9uIGxvY2F0aW9ucyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBVkVfSU9SRU1BUF9QUk9UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MjU4PWNvbmZpZyBVU0VSX1JFVFVSTl9OT1RJRklFUlxuLS1cbmFyY2gvS2NvbmZpZy0yNjQtXG5hcmNoL0tjb25maWc6MjY1OmNvbmZpZyBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9LY29uZmlnLTI2Ni1cdGJvb2xcbi0tXG5hcmNoL2FyYy9LY29uZmlnPTY9Y29uZmlnIEFSQ1xuLS1cbmFyY2gvYXJjL0tjb25maWctMzgtXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xuYXJjaC9hcmMvS2NvbmZpZzozOTpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9hcmMvS2NvbmZpZy00MC1cdHNlbGVjdCBIQVZFX0tFUk5FTF9HWklQXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTIwOS1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQvS2NvbmZpZzoyMTA6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMTEtXHRzZWxlY3QgSEFWRV9JUlFfVElNRV9BQ0NPVU5USU5HXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1Ny1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU4Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1OS1cdHNlbGVjdCBIQVZFX0lSUV9FWElUX09OX0lSUV9TVEFDS1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy03Ni1cdHNlbGVjdCBIQVZFX0dDQ19QTFVHSU5TXG5hcmNoL21pcHMvS2NvbmZpZzo3NzpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9taXBzL0tjb25maWctNzgtXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI2Mi1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcdFx0aWYgUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IChQUENfQk9PSzNTIHx8IFBQQ184eHgpXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyNjM6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI2NC1cdHNlbGVjdCBIQVZFX0lSUV9USU1FX0FDQ09VTlRJTkdcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTExNS1cdHNlbGVjdCBHRU5FUklDX0lPUkVNQVAgaWYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWc6MTE2Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTExNy1cdHNlbGVjdCBHRU5FUklDX0lSUV9JUEkgaWYgU01QXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0yMTgtXHRzZWxlY3QgSEFWRV9HRU5FUklDX1ZEU09cbmFyY2gvczM5MC9LY29uZmlnOjIxOTpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBQQ0lcbmFyY2gvczM5MC9LY29uZmlnLTIyMC1cdHNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMlxuLS1cbmFyY2gvc2gvS2NvbmZpZz0yPWNvbmZpZyBTVVBFUkhcbi0tXG5hcmNoL3NoL0tjb25maWctNDMtXHRzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UXG5hcmNoL3NoL0tjb25maWc6NDQ6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VIFx1MDAyNlx1MDAyNiAhWDJUTEJcbmFyY2gvc2gvS2NvbmZpZy00NS1cdHNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMlxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMjQ4LVx0c2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVFxuYXJjaC94ODYvS2NvbmZpZzoyNDk6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gveDg2L0tjb25maWctMjUwLVx0c2VsZWN0IEhBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLXHRpZiBYODZfNjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEkvTyBSZW1hcHBpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBgSEFWRV9JT1JFTUFQX1BST1RgIHNlbGVjdGlvbiwgd2hpY2ggaXMgdXNlZCBhY3Jvc3MgdmFyaW91cyBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2LCBhcm02NCwgYW5kIG90aGVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24uIExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKRmlyc3QsIHRoZXkmIzM5O3JlIHVzaW5nIGBtaW5fdGAgdG8gbGltaXQgdGhlIGFjY2VzcyBsZW5ndGguIGBsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtgIFRoYXQgbWFrZXMgc2Vuc2UuIFdlIGRvbiYjMzk7dCB3YW50IHRvIG92ZXJmbG93IHRoZSBwYWdlLgoKU2Vjb25kLCB0aGUgaW50ZXJlc3RpbmcgYml0OiB0aGV5JiMzOTt2ZSByZXBsYWNlZCBhIGBQQUdFX0FMSUdOYCBvcGVyYXRpb24gd2l0aCBgaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtgLiBJbml0aWFsbHksIGl0IHNlZW1zIHRoYXQgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBhbGlnbm1lbnQgbGVuZ3RoLCB3aGVyZSBpdCB3YXMgYWxpZ25pbmcgdG8gdGhlIG5leHQgcGFnZSBib3JkZXIuIFRoZSBgaW9yZW1hcF9wcm90YCBjYWxsIHNwZWNpZmljYWxseSBtYXBzIGEgc2luZ2xlIHBhZ2UgaW5zdGVhZCwgdG8gYWxpZ24gdG8gd2hhdCBpcyBuZWVkZWQuCgpGaW5hbGx5LCB0aGUgYWRkZWQgY2hlY2sgaXMgaW1wb3J0YW50LiBUaGlzIGxpbmU6IGAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQpKWAgKGFkZGVkIGNhc3QgdG8gcHJldmVudCAzMi1iaXQgb3ZlcmZsb3cgLyBmaXggdHlwZSkuIFRoaXMgY2FzdCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcHJldmVudCBhIDMyLWJpdCBvdmVyZmxvdyBpc3N1ZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGZyb20gdGhlIHBhZ2UgZnJhbWUgbnVtYmVyLCBtYWtpbmcgdGhlIGNvbXBhcmlzb24gcm9idXN0LiBJdCYjMzk7cyBhIGNsZWFuIHdheSB0byBlbnN1cmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWF0Y2hlcyB3aGF0JiMzOTtzIGV4cGVjdGVkIGdpdmVuIHRoZSBgYXJncy5wZm5gLgoKTm93LCBJIG5lZWQgdG8gdHJhY2UgaG93IGBfX2FjY2Vzc19yZW1vdGVfdm1gIGludGVyYWN0cyB3aXRoIHRoaXMgYHZtYS0mZ3Q7dm1fb3BzLSZndDthY2Nlc3NgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgb3BlcmF0aW9ucyB1c2UgdGhpcyByZW1hcHBlZCByZWdpb24uIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBmb3IgdGhlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzAyNTpcdCAqL1xuNzAyNjpcdHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MDI3Olx0XHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuNzAyODpcdHtcbjcwMjk6XHRcdHZvaWQgKm9sZF9idWYgPSBidWY7XG43MDMwOlx0XHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEU7XG43MDMxOlx0XG43MDMyOlx0XHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxuNzAzMzpcdFx0XHRyZXR1cm4gMDtcbjcwMzQ6XHRcbjcwMzU6XHRcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cbjcwMzY6XHRcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XG43MDM3Olx0XG43MDM4Olx0XHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXG43MDM5Olx0XHRpZiAoIXZtYV9sb29rdXAobW0sIGFkZHIpIFx1MDAyNlx1MDAyNiAhZXhwYW5kX3N0YWNrKG1tLCBhZGRyKSlcbjcwNDA6XHRcdFx0cmV0dXJuIDA7XG43MDQxOlx0XG43MDQyOlx0XHQvKiBpZ25vcmUgZXJyb3JzLCBqdXN0IGNoZWNrIGhvdyBtdWNoIHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgKi9cbjcwNDM6XHRcdHdoaWxlIChsZW4pIHtcbjcwNDQ6XHRcdFx0aW50IGJ5dGVzLCBvZmZzZXQ7XG43MDQ1Olx0XHRcdHZvaWQgKm1hZGRyO1xuNzA0NjpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNzA0NzpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XG43MDQ4Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxuNzA0OTpcdFx0XHRcdFx0XHRcdFx0ICAgICBndXBfZmxhZ3MsIFx1MDAyNnZtYSk7XG43MDUwOlx0XG43MDUxOlx0XHRcdGlmIChJU19FUlIocGFnZSkpIHtcbjcwNTI6XHRcdFx0XHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXG43MDUzOlx0XHRcdFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG43MDU0Olx0XHRcdFx0aWYgKCF2bWEpIHtcbjcwNTU6XHRcdFx0XHRcdHZtYSA9IGV4cGFuZF9zdGFjayhtbSwgYWRkcik7XG43MDU2Olx0XG43MDU3Olx0XHRcdFx0XHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xuNzA1ODpcdFx0XHRcdFx0aWYgKCF2bWEpXG43MDU5Olx0XHRcdFx0XHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRcdFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cbjcwNjI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNzA2MzpcdFx0XHRcdH1cbjcwNjQ6XHRcbjcwNjU6XHRcdFx0XHQvKlxuNzA2NjpcdFx0XHRcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXG43MDY3Olx0XHRcdFx0ICogd2UgY2FuIGFjY2VzcyB1c2luZyBzbGlnaHRseSBkaWZmZXJlbnQgY29kZS5cbjcwNjg6XHRcdFx0XHQgKi9cbjcwNjk6XHRcdFx0XHRieXRlcyA9IDA7XG43MDcwOlx0I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuNzA3MTpcdFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbjcwNzI6XHRcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG43MDczOlx0XHRcdFx0XHRcdFx0XHQgICAgbGVuLCB3cml0ZSk7XG43MDc0Olx0I2VuZGlmXG43MDc1Olx0XHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbjcwNzY6XHRcdFx0XHRcdGJyZWFrO1xuNzA3NzpcdFx0XHR9IGVsc2Uge1xuNzA3ODpcdFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbjcwNzk6XHRcdFx0XHRieXRlcyA9IGxlbjtcbjcwODA6XHRcdFx0XHRvZmZzZXQgPSBhZGRyIFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xuNzA4MTpcdFx0XHRcdGlmIChieXRlcyBcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcbjcwODI6XHRcdFx0XHRcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcbjcwODM6XHRcbjcwODQ6XHRcdFx0XHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XG43MDg1Olx0XHRcdFx0aWYgKHdyaXRlKSB7XG43MDg2Olx0XHRcdFx0XHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MDg3Olx0XHRcdFx0XHRcdFx0ICBtYWRkciAmIzQzOyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpO1xuNzA4ODpcdFx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eV9sb2NrKGZvbGlvKTtcbjcwODk6XHRcdFx0XHR9IGVsc2Uge1xuNzA5MDpcdFx0XHRcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MDkxOlx0XHRcdFx0XHRcdFx0ICAgIGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBieXRlcyk7XG43MDkyOlx0XHRcdFx0fVxuNzA5MzpcdFx0XHRcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xuNzA5NDpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBtbS9tZW1vcnkuY2AgLSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AqKgoKT2theSwgaGVyZSB3ZSBnbywgZGlnZ2luZyBpbnRvIGBtbS9tZW1vcnkuY2AuIFRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7SXMgdGhpcyByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSwgd29ydGggbXkgdGltZSBmdXp6aW5nPyYjMzQ7IExvb2tpbmcgYXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpcyBkZWZpbml0ZWx5IGluIHNjb3BlLiBUaGF0JiMzOTtzIGEgZ3JlZW4gbGlnaHQuCgpOb3csIGlzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBUaGlua2luZyB0aHJvdWdoIHRoZSBjb21tb24gYXR0YWNrIHN1cmZhY2UsIGAvZGV2L21lbWAgbGVhcHMgdG8gbWluZCwgZXNwZWNpYWxseSBpZiBgQ09ORklHX0RFVk1FTWAgaXMgZW5hYmxlZC4gQSB1c2VyIHByb2Nlc3MgY2FuIG9wZW4gYC9kZXYvbWVtYCwgYG1tYXAoKWAgdGhhdCBzdWNrZXIsIGFuZCB0aGVuIHVzZSB0b29scyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCwgYHByb2Nlc3Nfdm1fd3JpdGV2YCwgYHB0cmFjZWAgY2FsbHMsIG9yIGV2ZW4gbWVzcyB3aXRoIGAvcHJvYy8mbHQ7cGlkJmd0Oy9tZW1gIHRvIHJlYWQgb3Igd3JpdGUgdGhlIG1hcHBlZCBtZW1vcnkuIFRoaXMgaXMgY2xhc3NpYyEgQW55IG90aGVyIGBhY2Nlc3NfcmVtb3RlX3ZtYCBjYWxsZXIgaXMgaW4gc2NvcGUgdG9vLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBub3QganVzdCBgQ09ORklHX0RFVk1FTWA7IGBDT05GSUdfVUlPYCBhbHNvIG9wZW5zIGRvb3JzLCBhbmQgZXZlbiBqdXN0IGBDT05GSUdfTU1VYCBvciwgY3J1Y2lhbGx5LCBgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UYC4gSGFuZyBvbiwgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgaXMgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJvb2xlYW4sIHNlbGVjdGVkIGJ5IHNvbWV0aGluZyBsaWtlIFg4Ni4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNvdXJjZS4KCk9rYXksIGluc2lkZSBgbW0vbWVtb3J5LmNgLCB0aGVyZSBpdCBpcyEgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIGd1YXJkZWQgYnkgdGhhdCBgI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAuIEFuZCwganVzdCB0byBiZSBzdXJlLCBgL2Rldi9tZW1gIGl0c2VsZiB1dGlsaXplcyBgREVWTUVNYC4gTGV0JiMzOTtzIHRha2UgYSBxdWljayBwZWFrIGF0IGBkcml2ZXJzL2NoYXIvbWVtLmNgIHRvIGNvbmZpcm0gdGhlIGZsb3cuIEdvb2Qgc3R1ZmYsIHRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1hcF9tZW1fb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2hhci9tZW0uYz0zMTM9c3RhdGljIGlubGluZSBpbnQgcHJpdmF0ZV9tYXBwaW5nX29rKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jLTMxOC1cbmRyaXZlcnMvY2hhci9tZW0uYzozMTk6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7XG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIwLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Rcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzI1PXN0YXRpYyBpbnQgbW1hcF9tZW1fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbmRyaXZlcnMvY2hhci9tZW0uYy0zNTUtXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzU2Olx0ZGVzYy1cdTAwM2V2bV9vcHMgPSBcdTAwMjZtbWFwX21lbV9vcHM7XG5kcml2ZXJzL2NoYXIvbWVtLmMtMzU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcwMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19ERVZNRU0gaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYENPTkZJR19ERVZNRU1gIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBmdW5jdGlvbiB3aGljaCBJIGFscmVhZHkga25vdyBpcyByZWxhdGVkIHRvIGFsbG93aW5nIGRpcmVjdCBtZW1vcnkgYWNjZXNzLCBpcyB0byBjaGVjayB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhhdCBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFNvLCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2NoYXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLCBhbmQgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhpcyBvcHRpb24mIzM5O3MgbGlrZWx5IHR1Y2tlZCBpbiB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLi4uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZNRU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jaGFyL0tjb25maWc9MjQ5PWNvbmZpZyBOU0NfR1BJT1xuLS1cbmRyaXZlcnMvY2hhci9LY29uZmlnLTI1OC1cbmRyaXZlcnMvY2hhci9LY29uZmlnOjI1OTpjb25maWcgREVWTUVNXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0Oy9kZXYvbWVtIHZpcnR1YWwgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzcKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdCBTdW1tYXJ5KioKCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGlzIGZ1enppbmcgYW5hbHlzaXMuIEZpcnN0LCBjb25maXJtaW5nIGBIQVZFX0lPUkVNQVBfUFJPVGA6IHRoYXQmIzM5O3MgYXV0b21hdGljYWxseSBlbmFibGVkIG9uIGFtZDY0IHRoYW5rcyB0byBgQ09ORklHX1g4NmAsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLiBOZXh0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgYXJlIGNsZWFyLiBgREVWTUVNYCBpcyB0aGUga2V5LCBhbmQgaXQmIzM5O3MgcmlnaHQgd2hlcmUgd2UgZXhwZWN0IGl0IGluIGBkcml2ZXJzL2NoYXIvS2NvbmZpZ2AuIGBDT05GSUdfVUlPYCBpcyBhbHNvIHByZXNlbnQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gYERFVk1FTWAgKmlzKiBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIHJpZ2h0PyBZZXAsIHRoYXQmIzM5O3MgYSBzb2xpZCBlbmFibGUuCgpOb3csIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCYjMzk7cyB0aGUgYmVzdCB0YXJnZXQgZnVuY3Rpb24/IGBnZW5lcmljX2FjY2Vzc19waHlzYCBqdW1wcyBvdXQuIFRoYXQmIzM5O3MgKnRoZSogZnVuY3Rpb24gbW9kaWZpZWQgaW4gYG1tL21lbW9yeS5jYC4gQnV0IGlzIGl0IHRoZSAqcmlnaHQqIG9uZT8gSXMgaXQgdWJpcXVpdG91cywgb3IgaXMgaXQgc3BlY2lmaWM/IEFoLCBpdCYjMzk7cyBzcGVjaWZpYy4gSXQmIzM5O3Mgb25seSBoaXQgd2hlbiBkZWFsaW5nIHdpdGggcmVtb3RlIFZNIGFjY2VzcyB1c2luZyBub24tcGFnZS1iYXNlZCBWTUFzIOKAkyBsaWtlLCBzYXksIGAvZGV2L21lbWAgb3IgcGh5c2ljYWwgbWFwcGluZ3MuIENvdWxkIHdlIGJyb2FkZW4gdGhlIG5ldCB0byBpbmNsdWRlIHNvbWV0aGluZyBsaWtlIGBfX2FjY2Vzc19yZW1vdGVfdm1gLCBgYWNjZXNzX3JlbW90ZV92bWAsIG9yIGBhY2Nlc3NfcHJvY2Vzc192bWA/IFBvc3NpYmx5LCBidXQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIHRoZSBvbmUgKmRpcmVjdGx5KiBhbHRlcmVkLCBzbyBsZXQmIzM5O3Mgc3RpY2sgd2l0aCB0aGF0IGZvciBub3cuIEFuZCBubyBvdGhlciBmdW5jdGlvbnMgaW4gYG1tL21lbW9yeS5jYCB3ZXJlIGNoYW5nZWQsIHNvIHdlIGFyZSBnb29kLgoKTGV0JiMzOTtzIHJldmlldyB0aGUgRm9jdXNTeW1ib2xzIHJ1bGVzLiAmIzM0O1NwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LiYjMzQ7IGBnZW5lcmljX2FjY2Vzc19waHlzYCAqbmFpbGVkKiBpdC4gSXQmIzM5O3Mgbm9uLXViaXF1aXRvdXMsIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgc3BlY2lmaWNhbGx5IGltcGxlbWVudHMgdGhlIGxvZ2ljIGJlaW5nIGFsdGVyZWQuIFRoaXMgaXMgYSBwZXJmZWN0IGZpdC4KCkNhbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agc3RhbmQgYWxvbmUgYXMgdGhlIGZvY3VzIHN5bWJvbD8gQWJzb2x1dGVseSwgeWVzLCBpdCYjMzk7cyBpZGVhbC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBhbGwgb3VyIGNyaXRlcmlhIGFyZSBtZXQuCgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUsIG5vIHF1ZXN0aW9uLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgREVWTUVNYCAob3IgZW1wdHkvREVWTUVNLCBhcyBoYXZpbmcgJiMzNDtERVZNRU0mIzM0OyBlbmFibGVzIC9kZXYvbWVtIHdoaWNoIGlzIHRoZSBwcmltYXJ5IHVzZXIgb2YgYGdlbmVyaWNfYWNjZXNzX3BoeXNgKS4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuCiogICBgUmVhc29uaW5nYDogQ29uY2lzZSwgc3BlY2lmaWMgZXhwbGFuYXRpb24gb2YgdGhlIGZ1enppbmcgdmVyZGljdDogVGhpcyBpcyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKT2theSwgdGhhdCYjMzk7cyBhbGwgdGhlIGluZm8gd2UgbmVlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1vcnkuYykgdG8gY29uc3RyYWluIHBoeXNpY2FsIGFjY2VzcyBsZW5ndGhzIHRvIHNpbmdsZS1wYWdlIGJvdW5kYXJpZXMgYW5kIGZpeCB0eXBlIGNhc3RpbmcgZm9yIFBGTiBzaGlmdHMuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlbW90ZSBWTSBhY2Nlc3MgKGUuZy4sIHZpYSBwdHJhY2UsIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2LCBvciAvcHJvYy8kcGlkL21lbSkgdG8gcGh5c2ljYWwgSS9PIG1hcHBpbmdzIHN1Y2ggYXMgL2Rldi9tZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVk1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbW9yeS5jKSB0byBjb25zdHJhaW4gcGh5c2ljYWwgYWNjZXNzIGxlbmd0aHMgdG8gc2luZ2xlLXBhZ2UgYm91bmRhcmllcyBhbmQgZml4IHR5cGUgY2FzdGluZyBmb3IgUEZOIHNoaWZ0cy4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVtb3RlIFZNIGFjY2VzcyAoZS5nLiwgdmlhIHB0cmFjZSwgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYsIG9yIC9wcm9jLyRwaWQvbWVtKSB0byBwaHlzaWNhbCBJL08gbWFwcGluZ3Mgc3VjaCBhcyAvZGV2L21lbSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpOlxuMS4gSXQgY2xhbXBzICYjMzk7bGVuJiMzOTsgdG8gJiMzOTtQQUdFX1NJWkUgLSBvZmZzZXQmIzM5OyBhbmQgcmVkdWNlcyB0aGUgaW9yZW1hcF9wcm90KCkgbWFwcGluZyBzaXplIHRvIFBBR0VfU0laRSBiZWNhdXNlIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBvbmx5IHJlc29sdmVzIGFuZCB2YWxpZGF0ZXMgYSBzaW5nbGUgcGFnZS9QRk4gYXQgYSB0aW1lLlxuMi4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBzaGlmdCBvdmVyZmxvdyB3aGVuIGNvbXBhcmluZyBwaHlzX2FkZHIgYWdhaW5zdCBhcmdzLnBmbiBieSBjYXN0aW5nIGFyZ3MucGZuIHRvIHJlc291cmNlX3NpemVfdC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGJvdW5kcyBhbmQgYXJpdGhtZXRpYyB0eXBlIHNpemluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjb25jZXJucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MzAxOGI4Nzg5YTBhYTlkNGQxNTI1NDA4ZWZhNjQwODU2Mjk0NmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwNDowODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZmYzMzhjMmFiZTkyMy4uNzRmZGYyOWM5YzdlOCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTY5NzQsNiAmIzQzOzY5NzQsMTIgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlib29sIHdyaXRhYmxlOwogCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07CiAKJiM0MzsJLyoKJiM0MzsJICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCYjMzk7cyB3aGF0IGZvbGxvd19wZm5tYXBfc3RhcnQoKQomIzQzOwkgKiBndWFyYW50ZWVzOyBleHBlY3QgdGhlIGNhbGxlciB0byByZXRyeSB0byByZWFkIGxhcmdlciByYW5nZXMuCiYjNDM7CSAqLwomIzQzOwlsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKJiM0MzsKIHJldHJ5OgogCWlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KCZhbXA7YXJncykpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjk4NSw3ICYjNDM7Njk5MSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCh3cml0ZSAmYW1wOyBGT0xMX1dSSVRFKSAmYW1wOyZhbXA7ICF3cml0YWJsZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltYWRkciA9IGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfQUxJR04obGVuICYjNDM7IG9mZnNldCksIHByb3QpOwomIzQzOwltYWRkciA9IGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfU0laRSwgcHJvdCk7CiAJaWYgKCFtYWRkcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTY5OTMsNyAmIzQzOzY5OTksNyBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlnb3RvIG91dF91bm1hcDsKIAogCWlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHwKLQkgICAgKHBoeXNfYWRkciAhPSAoYXJncy5wZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpIHx8CiYjNDM7CSAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQpKSB8fAogCSAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHsKIAkJZm9sbG93X3Bmbm1hcF9lbmQoJmFtcDthcmdzKTsKIAkJaW91bm1hcChtYWRkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggYW5kIGRlY2lkZSBpZiB3ZSBuZWVkIEtNU0FOIGZ1enppbmcgaW4gYWRkaXRpb24gdG8gdGhlIGV4aXN0aW5nIEtBU0FOIGZ1enppbmcuIExldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2ggc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhpcyByZXF1ZXN0IGFnYWluc3Qgb3VyIHNhZmV0eSBhbmQgZHVhbC11c2UgZ3VpZGVsaW5lcy4gVGhpcyBsb29rcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIHNvZnR3YXJlIG1haW50ZW5hbmNlLCBwYXRjaCByZXZpZXcsIHNwZWNpZmljYWxseSBjaG9vc2luZyBhIG1lbW9yeSBzYW5pdGl6ZXIuIERlZmluaXRlbHkgYSBkZWZlbnNpdmUgYWN0aW9uLCBjb21wbGV0ZWx5IGJlbmlnbiwgZm9jdXNlZCBvbiBRQS4gTm8gcmVkIGZsYWdzIGhlcmUg4oCTIG5vIG1hbHdhcmUsIG5vIGV4cGxvaXQgZ2VuZXJhdGlvbiwgbm90aGluZyByZW1vdGVseSBtYWxpY2lvdXMuIERlZmluaXRlbHkgYSBiZW5pZ24vc2FmZSBjbGFzc2lmaWNhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSB0ZWNobmljYWwgZGV0YWlscy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGRpZmYgc2VlbXMgdG8gYmUgaW4gYG1tL21lbW9yeS5jYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGZ1bmN0aW9uLiBJIHNob3VsZCBwdWxsIHVwIHRoZSBkaWZmIGFuZCByZWFsbHkgZGlnIGluLCBwcm9iYWJseSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gc2VhcmNoIHdpdGhpbiBgbW0vbWVtb3J5LmNgIGZvciB0aGF0IGZ1bmN0aW9uLCBzbyBJIGNhbiBzZWUgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMgYW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZXZhbHVhdGlvbiBzdGFydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz02OTUxPUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbi0tXG5tbS9tZW1vcnkuYy02OTU0LS8qKlxubW0vbWVtb3J5LmM6Njk1NTogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3Ncbm1tL21lbW9yeS5jLTY5NTYtICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3Ncbi0tXG5tbS9tZW1vcnkuYy02OTY1LSAqL1xubW0vbWVtb3J5LmM6Njk2NjppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtNjk2Ny1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbi0tXG5tbS9tZW1vcnkuYy03MDE5LX1cbm1tL21lbW9yeS5jOjcwMjA6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG5tbS9tZW1vcnkuYy03MDIxLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgRGVlcCBpbnRvIGBnZW5lcmljX2FjY2Vzc19waHlzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIFRpbWUgdG8gdW5kZXJzdGFuZCB0aGlzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBmdW5jdGlvbiBhbmQgaXRzIGNvbnRleHQgdGhvcm91Z2hseS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIGVudGlyZSBzb3VyY2UgY29kZSDigJMgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgaXRzIGNhbGxlcnMsIGFuZCB0aGUgY29kZSBzdXJyb3VuZGluZyBpdC4gSSB3YW50IHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBub3QganVzdCBzbmlwcGV0cy4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgKnN1cHBvc2VkKiB0byBiZSB1c2VkIGFuZCAqaG93KiBpdCYjMzk7cyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGluZGl2aWR1YWwgbGluZXM7IGl0JiMzOTtzIGFib3V0IHNlZWluZyB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEtub3dpbmcgdGhlIGZ1bGwgY29udGV4dCBpcyBjcnVjaWFsIGZvciBhIHJvYnVzdCBhbmFseXNpcy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncywgb3IgY2xldmVyIGltcGxlbWVudGF0aW9ucywgdGhhdCBhcmUgaW1tZWRpYXRlbHkgb2J2aW91cyB0byBhbiBleHBlcnQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBieSBleGFtaW5pbmcgYWxsIHRoZSByZWxhdGVkIGNvZGUgYXQgb25jZSwgSSBjYW4gbW9yZSBlZmZlY3RpdmVseSBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgYWxsIHdvcmtzIHRvZ2V0aGVyLCBhbmQgSSB3aWxsIGJlIGFibGUgdG8gbWFrZSBhIG1vcmUgYWNjdXJhdGUgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Njk1NDpcdC8qKlxuNjk1NTpcdCAqIGdlbmVyaWNfYWNjZXNzX3BoeXMgLSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBpb21lbSBtbWFwIGFjY2Vzc1xuNjk1NjpcdCAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXG42OTU3Olx0ICogQGFkZHI6IHVzZXJzcGFjZSBhZGRyZXNzLCBub3QgcmVsYXRpdmUgb2Zmc2V0IHdpdGhpbiBAdm1hXG42OTU4Olx0ICogQGJ1ZjogYnVmZmVyIHRvIHJlYWQvd3JpdGVcbjY5NTk6XHQgKiBAbGVuOiBsZW5ndGggb2YgdHJhbnNmZXJcbjY5NjA6XHQgKiBAd3JpdGU6IHNldCB0byBGT0xMX1dSSVRFIHdoZW4gd3JpdGluZywgb3RoZXJ3aXNlIHJlYWRpbmdcbjY5NjE6XHQgKlxuNjk2MjpcdCAqIFRoaXMgaXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBcdTAwMjZ2bV9vcGVyYXRpb25zX3N0cnVjdC5hY2Nlc3MgZm9yIGFuXG42OTYzOlx0ICogaW9tZW0gbWFwcGluZy4gVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtKCkgd2hlbiB0aGUgQHZtYSBpc1xuNjk2NDpcdCAqIG5vdCBwYWdlIGJhc2VkLlxuNjk2NTpcdCAqL1xuNjk2NjpcdGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG42OTY3Olx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXG42OTY4Olx0e1xuNjk2OTpcdFx0cmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkcjtcbjY5NzA6XHRcdHBncHJvdF90IHByb3QgPSBfX3BncHJvdCgwKTtcbjY5NzE6XHRcdHZvaWQgX19pb21lbSAqbWFkZHI7XG42OTcyOlx0XHRpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcik7XG42OTczOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbjY5NzQ6XHRcdGJvb2wgd3JpdGFibGU7XG42OTc1Olx0XHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xuNjk3NjpcdFxuNjk3NzpcdFx0LypcbjY5Nzg6XHRcdCAqIExpbWl0IGFjY2VzcyB0byBvbmUgcGFnZSBhdCBhIHRpbWUsIGFzIHRoYXQmIzM5O3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KClcbjY5Nzk6XHRcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cbjY5ODA6XHRcdCAqL1xuNjk4MTpcdFx0bGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7XG42OTgyOlx0XG42OTgzOlx0cmV0cnk6XG42OTg0Olx0XHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbjY5ODU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42OTg2Olx0XHRwcm90ID0gYXJncy5wZ3Byb3Q7XG42OTg3Olx0XHRwaHlzX2FkZHIgPSAocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuNjk4ODpcdFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuNjk4OTpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG42OTkwOlx0XG42OTkxOlx0XHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuNjk5MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY5OTM6XHRcbjY5OTQ6XHRcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbjY5OTU6XHRcdGlmICghbWFkZHIpXG42OTk2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNjk5NzpcdFxuNjk5ODpcdFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG42OTk5Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xuNzAwMDpcdFxuNzAwMTpcdFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuNzAwMjpcdFx0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxuNzAwMzpcdFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xuNzAwNDpcdFx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbjcwMDU6XHRcdFx0aW91bm1hcChtYWRkcik7XG43MDA2Olx0XHRcdGdvdG8gcmV0cnk7XG43MDA3Olx0XHR9XG43MDA4Olx0XG43MDA5Olx0XHRpZiAod3JpdGUpXG43MDEwOlx0XHRcdG1lbWNweV90b2lvKG1hZGRyICYjNDM7IG9mZnNldCwgYnVmLCBsZW4pO1xuNzAxMTpcdFx0ZWxzZVxuNzAxMjpcdFx0XHRtZW1jcHlfZnJvbWlvKGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBsZW4pO1xuNzAxMzpcdFx0cmV0ID0gbGVuO1xuNzAxNDpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG43MDE1Olx0b3V0X3VubWFwOlxuNzAxNjpcdFx0aW91bm1hcChtYWRkcik7XG43MDE3Olx0XG43MDE4Olx0XHRyZXR1cm4gcmV0O1xuNzAxOTpcdH1cbjcwMjA6XHRFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcbjcwMjE6XHQjZW5kaWZcbjcwMjI6XHRcbjcwMjM6XHQvKlxuNzAyNDpcdCAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MmIzM5OyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuNzAyNTpcdCAqL1xuNzAyNjpcdHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MDI3Olx0XHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuNzAyODpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm1gKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGB2bV9vcHMtJmd0O2FjY2Vzc2AgY2FsbGJhY2sgdXNlZCBmb3IgSS9PIG1lbW9yeSBtYXBwaW5ncyDigJMgdGhpbmdzIGxpa2UgVXNlci1zcGFjZSBJL08gb3IgVmlydHVhbCBGdW5jdGlvbiBJL08sIHRoYXQga2luZCBvZiBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBfX2FjY2Vzc19yZW1vdGVfdm1gLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cuCgpMZXQgbWUgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBvcGVuIHVwIGBtbS9tZW1vcnkuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDcwMjYuIEhvcGVmdWxseSwgSSBjYW4gZmluZCB3aGVyZSBgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2Vzc2AgaXMgY2FsbGVkIGZyb20gYF9fYWNjZXNzX3JlbW90ZV92bWAgYW5kIGhvdyB0aGF0IGNhbGwgaXMgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWNoYW5pY3Mgb2YgdGhlc2UgbWVtb3J5IGFjY2VzcyBvcGVyYXRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzAyNTpcdCAqL1xuNzAyNjpcdHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MDI3Olx0XHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuNzAyODpcdHtcbjcwMjk6XHRcdHZvaWQgKm9sZF9idWYgPSBidWY7XG43MDMwOlx0XHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEU7XG43MDMxOlx0XG43MDMyOlx0XHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxuNzAzMzpcdFx0XHRyZXR1cm4gMDtcbjcwMzQ6XHRcbjcwMzU6XHRcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cbjcwMzY6XHRcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XG43MDM3Olx0XG43MDM4Olx0XHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXG43MDM5Olx0XHRpZiAoIXZtYV9sb29rdXAobW0sIGFkZHIpIFx1MDAyNlx1MDAyNiAhZXhwYW5kX3N0YWNrKG1tLCBhZGRyKSlcbjcwNDA6XHRcdFx0cmV0dXJuIDA7XG43MDQxOlx0XG43MDQyOlx0XHQvKiBpZ25vcmUgZXJyb3JzLCBqdXN0IGNoZWNrIGhvdyBtdWNoIHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgKi9cbjcwNDM6XHRcdHdoaWxlIChsZW4pIHtcbjcwNDQ6XHRcdFx0aW50IGJ5dGVzLCBvZmZzZXQ7XG43MDQ1Olx0XHRcdHZvaWQgKm1hZGRyO1xuNzA0NjpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNzA0NzpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XG43MDQ4Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxuNzA0OTpcdFx0XHRcdFx0XHRcdFx0ICAgICBndXBfZmxhZ3MsIFx1MDAyNnZtYSk7XG43MDUwOlx0XG43MDUxOlx0XHRcdGlmIChJU19FUlIocGFnZSkpIHtcbjcwNTI6XHRcdFx0XHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXG43MDUzOlx0XHRcdFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG43MDU0Olx0XHRcdFx0aWYgKCF2bWEpIHtcbjcwNTU6XHRcdFx0XHRcdHZtYSA9IGV4cGFuZF9zdGFjayhtbSwgYWRkcik7XG43MDU2Olx0XG43MDU3Olx0XHRcdFx0XHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xuNzA1ODpcdFx0XHRcdFx0aWYgKCF2bWEpXG43MDU5Olx0XHRcdFx0XHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRcdFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cbjcwNjI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNzA2MzpcdFx0XHRcdH1cbjcwNjQ6XHRcbjcwNjU6XHRcdFx0XHQvKlxuNzA2NjpcdFx0XHRcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXG43MDY3Olx0XHRcdFx0ICogd2UgY2FuIGFjY2VzcyB1c2luZyBzbGlnaHRseSBkaWZmZXJlbnQgY29kZS5cbjcwNjg6XHRcdFx0XHQgKi9cbjcwNjk6XHRcdFx0XHRieXRlcyA9IDA7XG43MDcwOlx0I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuNzA3MTpcdFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbjcwNzI6XHRcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG43MDczOlx0XHRcdFx0XHRcdFx0XHQgICAgbGVuLCB3cml0ZSk7XG43MDc0Olx0I2VuZGlmXG43MDc1Olx0XHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbjcwNzY6XHRcdFx0XHRcdGJyZWFrO1xuNzA3NzpcdFx0XHR9IGVsc2Uge1xuNzA3ODpcdFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbjcwNzk6XHRcdFx0XHRieXRlcyA9IGxlbjtcbjcwODA6XHRcdFx0XHRvZmZzZXQgPSBhZGRyIFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xuNzA4MTpcdFx0XHRcdGlmIChieXRlcyBcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcbjcwODI6XHRcdFx0XHRcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcbjcwODM6XHRcbjcwODQ6XHRcdFx0XHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XG43MDg1Olx0XHRcdFx0aWYgKHdyaXRlKSB7XG43MDg2Olx0XHRcdFx0XHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MDg3Olx0XHRcdFx0XHRcdFx0ICBtYWRkciAmIzQzOyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpO1xuNzA4ODpcdFx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eV9sb2NrKGZvbGlvKTtcbjcwODk6XHRcdFx0XHR9IGVsc2Uge1xuNzA5MDpcdFx0XHRcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MDkxOlx0XHRcdFx0XHRcdFx0ICAgIGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBieXRlcyk7XG43MDkyOlx0XHRcdFx0fVxuNzA5MzpcdFx0XHRcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xuNzA5NDpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjMKCQkJCQkJCW91dHB1dDogMTk5CgkJCQkJCQl0aG91Z2h0czogMTA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEFjY2VzcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBfX2FjY2Vzc19yZW1vdGVfdm1gIGlzIGxvb3BpbmcsIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgYW5kIHRoZW4gYWR2YW5jaW5nIGJ1ZmZlcnMgYW5kIGxlbmd0aHMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZC4gVGhlIGtleSBoZXJlIGlzIHdoYXQgY2hhbmdlZCBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuICBJIHNlZSB0aHJlZSBjcml0aWNhbCBtb2RpZmljYXRpb25zOgoKMS4gIFdlJiMzOTt2ZSBsaW1pdGVkIGFjY2VzcyB0byBvbmUgcGFnZSBhdCBhIHRpbWUuIFRoaXMgbWFrZXMgc2Vuc2U7IGBmb2xsb3dfcGZubWFwX3N0YXJ0KClgIG9ubHkgZ3VhcmFudGVlcyBhIHNpbmdsZSBwYWdlJiMzOTtzIGludGVncml0eSwgc28gaGFuZGxpbmcgbXVsdGktcGFnZSBvcGVyYXRpb25zIHJlcXVpcmVzIHJldHJ5aW5nIG9uIHRoZSBjYWxsZXImIzM5O3MgZW5kLCBhbmQgdGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLgoyLiAgYGlvcmVtYXBfcHJvdGAgbm93IGNvbnNpc3RlbnRseSBtYXBzIGBQQUdFX1NJWkVgIGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYWxpZ25pbmcgYmFzZWQgb24gbGVuZ3RoLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCjMuICBBIDMyLWJpdCBzaGlmdCBvdmVyZmxvdyBhbmQgdHlwZSBjYXN0IGlzc3VlIHdpdGggYGFyZ3MucGZuICZsdDsmbHQ7IFBBR0VfU0hJRlRgIHdhcyBhZGRyZXNzZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBidWcgZml4LCBlbnN1cmluZyBwcm9wZXIgcGh5c2ljYWwgYWRkcmVzcyBjYWxjdWxhdGlvbiwgZXNwZWNpYWxseSBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcyB3aXRoIGxhcmdlIHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9ucy4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWxpZ25pbmcgdGhlIGFjY2VzcyBzaXplIHdpdGggd2hhdCBgZm9sbG93X3Bmbm1hcF9zdGFydGAgY2FuIHJlbGlhYmx5IHZhbGlkYXRlLiAgUHJldmlvdXNseSwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGNvdWxkIG1hcCBhbmQgY29weSBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgcGFnZSB0aGF0IHdhcyBjaGVja2VkLiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgb25seSB2ZXJpZmllcyBvbmUgUFRFL1BGTi4gTm93LCBjbGFtcGluZyBgbGVuYCB0byB0aGUgcGFnZSBzaXplIHJlc3RyaWN0cyB0aGUgYWNjZXNzIGFuZCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEl0IGVuc3VyZXMgd2UmIzM5O3JlIG9ubHkgb3BlcmF0aW5nIHdpdGhpbiB0aGUgc2luZ2xlIHBhZ2UgdGhhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuIFRoaXMsIGNvbWJpbmVkIHdpdGggdGhlIGBQQUdFX1NJWkVgIHJlbWFwcGluZyBhbmQgdGhlIG92ZXJmbG93IGZpeCwgbWFrZXMgdGhpcyBhIHJvYnVzdCBzb2x1dGlvbi4KCk5vdywgbGV0JiMzOTtzIGV2YWx1YXRlIHRoaXMgYWdhaW5zdCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNyaXRlcmlhLiAgVGhlIGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgZm91ciBjb25kaXRpb25zLgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOiBObywgbm8ga2VybmVsIGRhdGEgaXMgYmVpbmcgbGVha2VkLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6ICBObywgVGhlIGBmb2xsb3dfcGZubWFwX2FyZ3NgIHN0cnVjdCBzZWVtcyB0byBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOiBObyBjb21wbGV4IGFsbG9jYXRpb25zIG9jY3VyLgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCByZWFkczogV2l0aCBgbWVtY3B5X3RvaW9gIHdyaXRpbmcgZnJvbSB0aGUgYnVmZmVyIGFuZCBgbWVtY3B5X2Zyb21pb2AgcmVhZGluZyBpbnRvIHRoZSBidWZmZXIsIGNsYW1waW5nIGBsZW5gICpyZXN0cmljdHMqIGFjY2VzcywgYXZvaWRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpcyB0aGUgZml4LiBUaGUgb3JpZ2luYWwsIHBvdGVudGlhbGx5IHVuYm91bmRlZCBjb3B5IGlzIG5vdyByZXN0cmljdGVkLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhpcyBwYXRjaCAqcHJldmVudHMqIHRoZSBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIEtNU0FOIGNvbmNlcm5zLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCB3ZXJlIHRoZXJlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIEtBU0FOIGlzc3Vlcy4gVGhpcyBpcyBhIGZpeCwgbm90IGEgbmV3IHZ1bG5lcmFiaWxpdHkuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gVGhlIHBhdGNoIGlzIHNvdW5kLiBJJiMzOTtsbCBwcm92aWRlIHRoZSBmaW5hbCByZXNwb25zZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpOlxuMS4gSXQgY2xhbXBzICYjMzk7bGVuJiMzOTsgdG8gJiMzOTtQQUdFX1NJWkUgLSBvZmZzZXQmIzM5OyBhbmQgcmVkdWNlcyB0aGUgaW9yZW1hcF9wcm90KCkgbWFwcGluZyBzaXplIHRvIFBBR0VfU0laRSBiZWNhdXNlIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBvbmx5IHJlc29sdmVzIGFuZCB2YWxpZGF0ZXMgYSBzaW5nbGUgcGFnZS9QRk4gYXQgYSB0aW1lLlxuMi4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBzaGlmdCBvdmVyZmxvdyB3aGVuIGNvbXBhcmluZyBwaHlzX2FkZHIgYWdhaW5zdCBhcmdzLnBmbiBieSBjYXN0aW5nIGFyZ3MucGZuIHRvIHJlc291cmNlX3NpemVfdC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGJvdW5kcyBhbmQgYXJpdGhtZXRpYyB0eXBlIHNpemluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjb25jZXJucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpOlxuMS4gSXQgY2xhbXBzICYjMzk7bGVuJiMzOTsgdG8gJiMzOTtQQUdFX1NJWkUgLSBvZmZzZXQmIzM5OyBhbmQgcmVkdWNlcyB0aGUgaW9yZW1hcF9wcm90KCkgbWFwcGluZyBzaXplIHRvIFBBR0VfU0laRSBiZWNhdXNlIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBvbmx5IHJlc29sdmVzIGFuZCB2YWxpZGF0ZXMgYSBzaW5nbGUgcGFnZS9QRk4gYXQgYSB0aW1lLlxuMi4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBzaGlmdCBvdmVyZmxvdyB3aGVuIGNvbXBhcmluZyBwaHlzX2FkZHIgYWdhaW5zdCBhcmdzLnBmbiBieSBjYXN0aW5nIGFyZ3MucGZuIHRvIHJlc291cmNlX3NpemVfdC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGJvdW5kcyBhbmQgYXJpdGhtZXRpYyB0eXBlIHNpemluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjb25jZXJucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MDEuOTg0ODUyMzU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1MTM4NzQ2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWTUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiBnZW5lcmljX2FjY2Vzc19waHlzKCk6XFxuMS4gSXQgY2xhbXBzICdsZW4nIHRvICdQQUdFX1NJWkUgLSBvZmZzZXQnIGFuZCByZWR1Y2VzIHRoZSBpb3JlbWFwX3Byb3QoKSBtYXBwaW5nIHNpemUgdG8gUEFHRV9TSVpFIGJlY2F1c2UgZm9sbG93X3Bmbm1hcF9zdGFydCgpIG9ubHkgcmVzb2x2ZXMgYW5kIHZhbGlkYXRlcyBhIHNpbmdsZSBwYWdlL1BGTiBhdCBhIHRpbWUuXFxuMi4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBzaGlmdCBvdmVyZmxvdyB3aGVuIGNvbXBhcmluZyBwaHlzX2FkZHIgYWdhaW5zdCBhcmdzLnBmbiBieSBjYXN0aW5nIGFyZ3MucGZuIHRvIHJlc291cmNlX3NpemVfdC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgd2l0aCBwaHlzaWNhbCBwYWdlIG1hcHBpbmcgYm91bmRzIGFuZCBhcml0aG1ldGljIHR5cGUgc2l6aW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBrZXJuZWwgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGNvbmNlcm5zIGFyZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1vcnkuYykgdG8gY29uc3RyYWluIHBoeXNpY2FsIGFjY2VzcyBsZW5ndGhzIHRvIHNpbmdsZS1wYWdlIGJvdW5kYXJpZXMgYW5kIGZpeCB0eXBlIGNhc3RpbmcgZm9yIFBGTiBzaGlmdHMuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlbW90ZSBWTSBhY2Nlc3MgKGUuZy4sIHZpYSBwdHJhY2UsIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2LCBvciAvcHJvYy8kcGlkL21lbSkgdG8gcGh5c2ljYWwgSS9PIG1hcHBpbmdzIHN1Y2ggYXMgL2Rldi9tZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjAxLjk4NDg1ODA5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NzU3ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjQzMDE4Yjg3ODlhMGFhOWQ0ZDE1MjU0MDhlZmE2NDA4NTYyOTQ2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDowODowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZmYzMzhjMmFiZTkyMy4uNzRmZGYyOWM5YzdlOCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTY5NzQsNiArNjk3NCwxMiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRib29sIHdyaXRhYmxlO1xcbiBcXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCdzIHdoYXQgZm9sbG93X3Bmbm1hcF9zdGFydCgpXFxuK1xcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cXG4rXFx0ICovXFxuK1xcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xcbitcXG4gcmV0cnk6XFxuIFxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTY5ODUsNyArNjk5MSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGlmICgod3JpdGUgXFx1MDAyNiBGT0xMX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiAhd3JpdGFibGUpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX0FMSUdOKGxlbiArIG9mZnNldCksIHByb3QpO1xcbitcXHRtYWRkciA9IGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfU0laRSwgcHJvdCk7XFxuIFxcdGlmICghbWFkZHIpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtNjk5Myw3ICs2OTk5LDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0Z290byBvdXRfdW5tYXA7XFxuIFxcbiBcXHRpZiAoKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChhcmdzLnBncHJvdCkpIHx8XFxuLVxcdCAgICAocGh5c19hZGRyICE9IChhcmdzLnBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSkgfHxcXG4rXFx0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpIHx8XFxuIFxcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcXG4gXFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbiBcXHRcXHRpb3VubWFwKG1hZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MDIuNDcxMzQzOTI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTg0NTY2ODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbW9yeS5jKSB0byBjb25zdHJhaW4gcGh5c2ljYWwgYWNjZXNzIGxlbmd0aHMgdG8gc2luZ2xlLXBhZ2UgYm91bmRhcmllcyBhbmQgZml4IHR5cGUgY2FzdGluZyBmb3IgUEZOIHNoaWZ0cy4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVtb3RlIFZNIGFjY2VzcyAoZS5nLiwgdmlhIHB0cmFjZSwgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYsIG9yIC9wcm9jLyRwaWQvbWVtKSB0byBwaHlzaWNhbCBJL08gbWFwcGluZ3Mgc3VjaCBhcyAvZGV2L21lbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNDMwMThiODc4OWEwYWE5ZDRkMTUyNTQwOGVmYTY0MDg1NjI5NDZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDQ6MDg6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBmZjMzOGMyYWJlOTIzLi43NGZkZjI5YzljN2U4IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNjk3NCw2ICs2OTc0LDEyIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRib29sIHdyaXRhYmxlO1xuIFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiBcbitcdC8qXG4rXHQgKiBMaW1pdCBhY2Nlc3MgdG8gb25lIHBhZ2UgYXQgYSB0aW1lLCBhcyB0aGF0J3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KClcbitcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cbitcdCAqL1xuK1x0bGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7XG4rXG4gcmV0cnk6XG4gXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNjk4NSw3ICs2OTkxLDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICgod3JpdGUgXHUwMDI2IEZPTExfV1JJVEUpIFx1MDAyNlx1MDAyNiAhd3JpdGFibGUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX0FMSUdOKGxlbiArIG9mZnNldCksIHByb3QpO1xuK1x0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xuIFx0aWYgKCFtYWRkcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNjk5Myw3ICs2OTk5LDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0Z290byBvdXRfdW5tYXA7XG4gXG4gXHRpZiAoKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChhcmdzLnBncHJvdCkpIHx8XG4tXHQgICAgKHBoeXNfYWRkciAhPSAoYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxuK1x0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxuIFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xuIFx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbiBcdFx0aW91bm1hcChtYWRkcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODowMi40NzEzNDU0MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5OTAzNDM3OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIEFmZmVjdGVkIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQsIGNydWNpYWxseSwgd2hlcmUgaXQncyBtYWtpbmcgY2hhbmdlcy4gUmlnaHQsIHNvIGl0J3MgdG91Y2hpbmcgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24uIE5vdywgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJ2xsIHplcm8gaW4gYXJvdW5kIGxpbmUgNjk3NCBpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiBpbiBhY3Rpb24uIFdobydzIGNhbGxpbmcgaXQ/IFdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBkb2luZz8gR2V0dGluZyBhIGZlZWwgZm9yIHRoZSBjb250cm9sIGZsb3cgaXMgZXNzZW50aWFsLCBhcyBpcyB1bmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBvZiB0aGlzIHBhcnRpY3VsYXIgbW9kaWZpY2F0aW9uLiBOZWVkIHRvIGJ1aWxkIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBiZWZvcmUgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MTIuMzc0Nzg1ODI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY5NjA6XFx0ICogQHdyaXRlOiBzZXQgdG8gRk9MTF9XUklURSB3aGVuIHdyaXRpbmcsIG90aGVyd2lzZSByZWFkaW5nXFxuNjk2MTpcXHQgKlxcbjY5NjI6XFx0ICogVGhpcyBpcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIFxcdTAwMjZ2bV9vcGVyYXRpb25zX3N0cnVjdC5hY2Nlc3MgZm9yIGFuXFxuNjk2MzpcXHQgKiBpb21lbSBtYXBwaW5nLiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0oKSB3aGVuIHRoZSBAdm1hIGlzXFxuNjk2NDpcXHQgKiBub3QgcGFnZSBiYXNlZC5cXG42OTY1OlxcdCAqL1xcbjY5NjY6XFx0aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG42OTY3OlxcdFxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxcbjY5Njg6XFx0e1xcbjY5Njk6XFx0XFx0cmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkcjtcXG42OTcwOlxcdFxcdHBncHJvdF90IHByb3QgPSBfX3BncHJvdCgwKTtcXG42OTcxOlxcdFxcdHZvaWQgX19pb21lbSAqbWFkZHI7XFxuNjk3MjpcXHRcXHRpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcik7XFxuNjk3MzpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG42OTc0OlxcdFxcdGJvb2wgd3JpdGFibGU7XFxuNjk3NTpcXHRcXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xcbjY5NzY6XFx0XFxuNjk3NzpcXHRcXHQvKlxcbjY5Nzg6XFx0XFx0ICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCdzIHdoYXQgZm9sbG93X3Bmbm1hcF9zdGFydCgpXFxuNjk3OTpcXHRcXHQgKiBndWFyYW50ZWVzOyBleHBlY3QgdGhlIGNhbGxlciB0byByZXRyeSB0byByZWFkIGxhcmdlciByYW5nZXMuXFxuNjk4MDpcXHRcXHQgKi9cXG42OTgxOlxcdFxcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xcbjY5ODI6XFx0XFxuNjk4MzpcXHRyZXRyeTpcXG42OTg0OlxcdFxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG42OTg1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjY5ODY6XFx0XFx0cHJvdCA9IGFyZ3MucGdwcm90O1xcbjY5ODc6XFx0XFx0cGh5c19hZGRyID0gKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbjY5ODg6XFx0XFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xcbjY5ODk6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjY5OTA6XFx0XFxuNjk5MTpcXHRcXHRpZiAoKHdyaXRlIFxcdTAwMjYgRk9MTF9XUklURSkgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKVxcbjY5OTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjk5MzpcXHRcXG42OTk0OlxcdFxcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcXG42OTk1OlxcdFxcdGlmICghbWFkZHIpXFxuNjk5NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG42OTk3OlxcdFxcbjY5OTg6XFx0XFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbjY5OTk6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxuNzAwMDpcXHRcXG43MDAxOlxcdFxcdGlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHxcXG43MDAyOlxcdFxcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxcbjcwMDM6XFx0XFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xcbjcwMDQ6XFx0XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcwMDU6XFx0XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzAwNjpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjcwMDc6XFx0XFx0fVxcbjcwMDg6XFx0XFxuNzAwOTpcXHRcXHRpZiAod3JpdGUpXFxuNzAxMDpcXHRcXHRcXHRtZW1jcHlfdG9pbyhtYWRkciArIG9mZnNldCwgYnVmLCBsZW4pO1xcbjcwMTE6XFx0XFx0ZWxzZVxcbjcwMTI6XFx0XFx0XFx0bWVtY3B5X2Zyb21pbyhidWYsIG1hZGRyICsgb2Zmc2V0LCBsZW4pO1xcbjcwMTM6XFx0XFx0cmV0ID0gbGVuO1xcbjcwMTQ6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcwMTU6XFx0b3V0X3VubWFwOlxcbjcwMTY6XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzAxNzpcXHRcXG43MDE4OlxcdFxcdHJldHVybiByZXQ7XFxuNzAxOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjEyLjM3NTA3MTYzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODg3NzgyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBVc2FnZSBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCogb3IgKnJlZmVyZW5jZWQqLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzIGZyYW1ld29yay4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzLCBvYnZpb3VzbHksIGJ1dCBhbHNvIGFueSBkYXRhIHN0cnVjdHVyZXMgb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBpdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGNhbGxzLCBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLCBvciBtYXliZSBldmVuIHVzYWdlIHdpdGhpbiBtYWNyb3M/IFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpdHMgb3ZlcmFsbCBpbXBhY3QuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgLSBgZ3JlcGAsIGBjc2NvcGVgLCBgY2xhbmdkYCAtIHRvIHRyYWNrIGl0IGFsbCBkb3duLiBIb3BlZnVsbHksIHRoZSBuYW1pbmcgaXMgY2xlYXIgYW5kIEkgY2FuIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWxseSByZWxldmFudCBmaWxlcyBxdWlja2x5LiBUaGlzIHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBpbnZlc3RpZ2F0aW9uLCBidXQgeW91IG5ldmVyIGtub3cgd2hhdCBzdXJwcmlzZXMgdGhlIGtlcm5lbCBob2xkcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM3MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MTQuNDYzODUzODk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzUyNzMzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9jZHgvY2R4LmMtNjYzLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NkeC9jZHguYzo2NjQ6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9jZHgvY2R4LmMtNjY1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIwLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzIxOlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXFxuZHJpdmVycy9jaGFyL21lbS5jLTMyMi0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA2LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA3OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDgtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9wY2kvbW1hcC5jLTE5LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL3BjaS9tbWFwLmM6MjA6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9wY2kvbW1hcC5jLTIxLSNlbmRpZlxcbi0tXFxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3Vpby91aW8uYy03MzctI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvdWlvL3Vpby5jOjczODpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL3Vpby91aW8uYy03MzktI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NzgzPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtODM1LVxcdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxcbmluY2x1ZGUvbGludXgvbW0uaDo4MzY6XFx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXFxuaW5jbHVkZS9saW51eC9tbS5oLTgzNy1cXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMxMzA9Y29weV9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzEzMTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMTMyLVxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY5NTE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xcbi0tXFxubW0vbWVtb3J5LmMtNjk1NC0vKipcXG5tbS9tZW1vcnkuYzo2OTU1OiAqIGdlbmVyaWNfYWNjZXNzX3BoeXMgLSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBpb21lbSBtbWFwIGFjY2Vzc1xcbm1tL21lbW9yeS5jLTY5NTYtICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3NcXG4tLVxcbm1tL21lbW9yeS5jLTY5NjUtICovXFxubW0vbWVtb3J5LmM6Njk2NjppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21lbW9yeS5jLTY5NjctXFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXFxuLS1cXG5tbS9tZW1vcnkuYy03MDE5LX1cXG5tbS9tZW1vcnkuYzo3MDIwOkVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xcbm1tL21lbW9yeS5jLTcwMjEtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTYzMj1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODQtXFx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDo2ODU6XFx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODYtXFx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MTYuNjM5MTM3NzAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3MjA3NzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFjY2VzcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzIHdvcmtzIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQncyBjbGVhciB0aGF0IGl0J3MgaW52b2x2ZWQgd2l0aCB0aGluZ3MgbGlrZSBgL2Rldi9tZW1gIG1tYXAgb3BlcmF0aW9ucyBpbiBgZHJpdmVycy9jaGFyL21lbS5jYCwgUENJIG1lbW9yeSBtYXBwaW5nIGluIGBkcml2ZXJzL3BjaS9tbWFwLmNgLCBhbmQgbGlrZWx5IFVJTy4gSSdtIHNlZWluZyBhIGNvbm5lY3Rpb24gdG8gYGFjY2Vzc19wcm9jZXNzX3ZtYCwgYHB0cmFjZWAsIGFuZCBgL3Byb2MvcGlkL21lbWAgYmVjYXVzZSB0aGVzZSBhbGwgYXR0ZW1wdCB0byByZWFkL3dyaXRlIG1lbW9yeSB0aGF0J3MgYmVlbiBtYXBwZWQgdG8gYC9kZXYvbWVtYCBvciBQQ0kgSS9PIG1lbW9yeS4gVGhlIHRyYWlsIGxlYWRzIHRocm91Z2ggYGFjY2Vzc19yZW1vdGVfdm1gIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgZXZlbnR1YWxseSBoaXRzIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcyguLi4pYC4gVGhhdCdzIHRoZSBjb3JlLiBOb3cgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBgSEFWRV9JT1JFTUFQX1BST1RgIGlzIGRlZmluZWQgaW4gS2NvbmZpZy4gSXQncyBhbHNvIHdvcnRoIG15IHRpbWUgdG8gbG9vayBhdCBob3cgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGl0c2VsZiBpcyBndWFyZGVkIHdpdGhpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyBhbmQgcHJvdGVjdGlvbnMgc3Vycm91bmRpbmcgdGhpcywgYW5kIGhvdyBpdCBoYW5kbGVzIHZhcmlvdXMgbWVtb3J5IHR5cGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzA5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjIyLjAxMTIxNzU0MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MDk1ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9jZHgvY2R4LmM6NjYzOiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NkeC9jZHguYy02NjQtXFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYzozMjA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjEtXFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA2OiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA3LVxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbi0tXFxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xcbmRyaXZlcnMvcGNpL21tYXAuYzoxOTojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9wY2kvbW1hcC5jLTIwLVxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbi0tXFxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzc6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOC1cXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG4tLVxcbm1tL21lbW9yeS5jPTY5NTE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xcbm1tL21lbW9yeS5jLTY5NTItXFxubW0vbWVtb3J5LmM6Njk1MzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxubW0vbWVtb3J5LmMtNjk1NC0vKipcXG4tLVxcbm1tL21lbW9yeS5jPTcwMjY9c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTcwNjktXFx0XFx0XFx0Ynl0ZXMgPSAwO1xcbm1tL21lbW9yeS5jOjcwNzA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbm1tL21lbW9yeS5jLTcwNzEtXFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MpXFxuLS1cXG5tbS9tZW1vcnkuYz03MTUwPXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTcxNzktXFx0XFx0XFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xcbm1tL21lbW9yeS5jOjcxODA6XFx0XFx0XFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcXG5tbS9tZW1vcnkuYy03MTgxLVxcdFxcdFxcdCAqIHN0YWNrIGV4cGFuc2lvbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MjMuNzY1MzE4MjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3Mjk4NDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYEhBVkVfSU9SRU1BUF9QUk9UYCBtYWNybyBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBwbGFjZXM6IHRoZSBgYXJjaC9gIGRpcmVjdG9yaWVzLCBhbmQgdGhlIGBLY29uZmlnYCBmaWxlcyB0aGF0IGNvbnRyb2wgdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvciBmZWF0dXJlLWZsYWcgZGVmaW5pdGlvbnMgcmVzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRlZmluZSwgaW4gdGhpcyBjb250ZXh0LCB0byBjb250aW51ZSBteSB3b3JrLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhyb3VnaCB0aGUgY29tbW9uIGxvY2F0aW9ucyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODoyNS42MzgzMDU1NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODMzNjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0lPUkVNQVBfUFJPVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0yNTg9Y29uZmlnIFVTRVJfUkVUVVJOX05PVElGSUVSXFxuLS1cXG5hcmNoL0tjb25maWctMjY0LVxcbmFyY2gvS2NvbmZpZzoyNjU6Y29uZmlnIEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9LY29uZmlnLTI2Ni1cXHRib29sXFxuLS1cXG5hcmNoL2FyYy9LY29uZmlnPTY9Y29uZmlnIEFSQ1xcbi0tXFxuYXJjaC9hcmMvS2NvbmZpZy0zOC1cXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xcbmFyY2gvYXJjL0tjb25maWc6Mzk6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9hcmMvS2NvbmZpZy00MC1cXHRzZWxlY3QgSEFWRV9LRVJORUxfR1pJUFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMjA5LVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L0tjb25maWc6MjEwOlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMTEtXFx0c2VsZWN0IEhBVkVfSVJRX1RJTUVfQUNDT1VOVElOR1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTU3LVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1ODpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1OS1cXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTc2LVxcdHNlbGVjdCBIQVZFX0dDQ19QTFVHSU5TXFxuYXJjaC9taXBzL0tjb25maWc6Nzc6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9taXBzL0tjb25maWctNzgtXFx0c2VsZWN0IEhBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjYyLVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcXHRcXHRpZiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiAoUFBDX0JPT0szUyB8fCBQUENfOHh4KVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjI2MzpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yNjQtXFx0c2VsZWN0IEhBVkVfSVJRX1RJTUVfQUNDT1VOVElOR1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExNS1cXHRzZWxlY3QgR0VORVJJQ19JT1JFTUFQIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMTY6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTctXFx0c2VsZWN0IEdFTkVSSUNfSVJRX0lQSSBpZiBTTVBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0yMTgtXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19WRFNPXFxuYXJjaC9zMzkwL0tjb25maWc6MjE5OlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBQQ0lcXG5hcmNoL3MzOTAvS2NvbmZpZy0yMjAtXFx0c2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyXFxuLS1cXG5hcmNoL3NoL0tjb25maWc9Mj1jb25maWcgU1VQRVJIXFxuLS1cXG5hcmNoL3NoL0tjb25maWctNDMtXFx0c2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVFxcbmFyY2gvc2gvS2NvbmZpZzo0NDpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VIFxcdTAwMjZcXHUwMDI2ICFYMlRMQlxcbmFyY2gvc2gvS2NvbmZpZy00NS1cXHRzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yNDgtXFx0c2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVFxcbmFyY2gveDg2L0tjb25maWc6MjQ5OlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxcbmFyY2gveDg2L0tjb25maWctMjUwLVxcdHNlbGVjdCBIQVZFX0lSUV9FWElUX09OX0lSUV9TVEFDS1xcdGlmIFg4Nl82NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODoyNS45MjY2NTAzNjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAxOTU3NzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEkvTyBSZW1hcHBpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYEhBVkVfSU9SRU1BUF9QUk9UYCBzZWxlY3Rpb24sIHdoaWNoIGlzIHVzZWQgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyBsaWtlIHg4NiwgYXJtNjQsIGFuZCBvdGhlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGZ1bmN0aW9uLiBMZXQncyBicmVhayBpdCBkb3duOlxuXG5GaXJzdCwgdGhleSdyZSB1c2luZyBgbWluX3RgIHRvIGxpbWl0IHRoZSBhY2Nlc3MgbGVuZ3RoLiBgbGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7YCBUaGF0IG1ha2VzIHNlbnNlLiBXZSBkb24ndCB3YW50IHRvIG92ZXJmbG93IHRoZSBwYWdlLlxuXG5TZWNvbmQsIHRoZSBpbnRlcmVzdGluZyBiaXQ6IHRoZXkndmUgcmVwbGFjZWQgYSBgUEFHRV9BTElHTmAgb3BlcmF0aW9uIHdpdGggYGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfU0laRSwgcHJvdCk7YC4gSW5pdGlhbGx5LCBpdCBzZWVtcyB0aGF0IHRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgYWxpZ25tZW50IGxlbmd0aCwgd2hlcmUgaXQgd2FzIGFsaWduaW5nIHRvIHRoZSBuZXh0IHBhZ2UgYm9yZGVyLiBUaGUgYGlvcmVtYXBfcHJvdGAgY2FsbCBzcGVjaWZpY2FsbHkgbWFwcyBhIHNpbmdsZSBwYWdlIGluc3RlYWQsIHRvIGFsaWduIHRvIHdoYXQgaXMgbmVlZGVkLlxuXG5GaW5hbGx5LCB0aGUgYWRkZWQgY2hlY2sgaXMgaW1wb3J0YW50LiBUaGlzIGxpbmU6IGAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSlgIChhZGRlZCBjYXN0IHRvIHByZXZlbnQgMzItYml0IG92ZXJmbG93IC8gZml4IHR5cGUpLiBUaGlzIGNhc3Qgc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHByZXZlbnQgYSAzMi1iaXQgb3ZlcmZsb3cgaXNzdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHRoZSBwYWdlIGZyYW1lIG51bWJlciwgbWFraW5nIHRoZSBjb21wYXJpc29uIHJvYnVzdC4gSXQncyBhIGNsZWFuIHdheSB0byBlbnN1cmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWF0Y2hlcyB3aGF0J3MgZXhwZWN0ZWQgZ2l2ZW4gdGhlIGBhcmdzLnBmbmAuXG5cbk5vdywgSSBuZWVkIHRvIHRyYWNlIGhvdyBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpbnRlcmFjdHMgd2l0aCB0aGlzIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzc2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmlydHVhbCBtZW1vcnkgYXJlYSBvcGVyYXRpb25zIHVzZSB0aGlzIHJlbWFwcGVkIHJlZ2lvbi4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbnRleHQgZm9yIHRoZSBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MjguOTQ2MjMwMzA3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDI1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDI1OlxcdCAqL1xcbjcwMjY6XFx0c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MDI3OlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG43MDI4OlxcdHtcXG43MDI5OlxcdFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuNzAzMDpcXHRcXHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXFx1MDAyNiBGT0xMX1dSSVRFO1xcbjcwMzE6XFx0XFxuNzAzMjpcXHRcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxcbjcwMzM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzAzNDpcXHRcXG43MDM1OlxcdFxcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cXG43MDM2OlxcdFxcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XFxuNzAzNzpcXHRcXG43MDM4OlxcdFxcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cXG43MDM5OlxcdFxcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXFx1MDAyNlxcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXFxuNzA0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MDQxOlxcdFxcbjcwNDI6XFx0XFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXFxuNzA0MzpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzA0NDpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldDtcXG43MDQ1OlxcdFxcdFxcdHZvaWQgKm1hZGRyO1xcbjcwNDY6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG43MDQ3OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcXG43MDQ4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxcbjcwNDk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBndXBfZmxhZ3MsIFxcdTAwMjZ2bWEpO1xcbjcwNTA6XFx0XFxuNzA1MTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzA1MjpcXHRcXHRcXHRcXHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXFxuNzA1MzpcXHRcXHRcXHRcXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcXG43MDU0OlxcdFxcdFxcdFxcdGlmICghdm1hKSB7XFxuNzA1NTpcXHRcXHRcXHRcXHRcXHR2bWEgPSBleHBhbmRfc3RhY2sobW0sIGFkZHIpO1xcbjcwNTY6XFx0XFxuNzA1NzpcXHRcXHRcXHRcXHRcXHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xcbjcwNTg6XFx0XFx0XFx0XFx0XFx0aWYgKCF2bWEpXFxuNzA1OTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG43MDYwOlxcdFxcbjcwNjE6XFx0XFx0XFx0XFx0XFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cXG43MDYyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcwNjM6XFx0XFx0XFx0XFx0fVxcbjcwNjQ6XFx0XFxuNzA2NTpcXHRcXHRcXHRcXHQvKlxcbjcwNjY6XFx0XFx0XFx0XFx0ICogQ2hlY2sgaWYgdGhpcyBpcyBhIFZNX0lPIHwgVk1fUEZOTUFQIFZNQSwgd2hpY2hcXG43MDY3OlxcdFxcdFxcdFxcdCAqIHdlIGNhbiBhY2Nlc3MgdXNpbmcgc2xpZ2h0bHkgZGlmZmVyZW50IGNvZGUuXFxuNzA2ODpcXHRcXHRcXHRcXHQgKi9cXG43MDY5OlxcdFxcdFxcdFxcdGJ5dGVzID0gMDtcXG43MDcwOlxcdCNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG43MDcxOlxcdFxcdFxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX29wcyBcXHUwMDI2XFx1MDAyNiB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlYWNjZXNzKVxcbjcwNzI6XFx0XFx0XFx0XFx0XFx0Ynl0ZXMgPSB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlYWNjZXNzKHZtYSwgYWRkciwgYnVmLFxcbjcwNzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGxlbiwgd3JpdGUpO1xcbjcwNzQ6XFx0I2VuZGlmXFxuNzA3NTpcXHRcXHRcXHRcXHRpZiAoYnl0ZXMgXFx1MDAzYz0gMClcXG43MDc2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjcwNzc6XFx0XFx0XFx0fSBlbHNlIHtcXG43MDc4OlxcdFxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG43MDc5OlxcdFxcdFxcdFxcdGJ5dGVzID0gbGVuO1xcbjcwODA6XFx0XFx0XFx0XFx0b2Zmc2V0ID0gYWRkciBcXHUwMDI2IChQQUdFX1NJWkUtMSk7XFxuNzA4MTpcXHRcXHRcXHRcXHRpZiAoYnl0ZXMgXFx1MDAzZSBQQUdFX1NJWkUtb2Zmc2V0KVxcbjcwODI6XFx0XFx0XFx0XFx0XFx0Ynl0ZXMgPSBQQUdFX1NJWkUtb2Zmc2V0O1xcbjcwODM6XFx0XFxuNzA4NDpcXHRcXHRcXHRcXHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XFxuNzA4NTpcXHRcXHRcXHRcXHRpZiAod3JpdGUpIHtcXG43MDg2OlxcdFxcdFxcdFxcdFxcdGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkcixcXG43MDg3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbWFkZHIgKyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpO1xcbjcwODg6XFx0XFx0XFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eV9sb2NrKGZvbGlvKTtcXG43MDg5OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuNzA5MDpcXHRcXHRcXHRcXHRcXHRjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkcixcXG43MDkxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBidWYsIG1hZGRyICsgb2Zmc2V0LCBieXRlcyk7XFxuNzA5MjpcXHRcXHRcXHRcXHR9XFxuNzA5MzpcXHRcXHRcXHRcXHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcXG43MDk0OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MjguOTQ2NjA0NzM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyOTM3MTc5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBtbS9tZW1vcnkuY2AgLSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AqKlxuXG5Pa2F5LCBoZXJlIHdlIGdvLCBkaWdnaW5nIGludG8gYG1tL21lbW9yeS5jYC4gVGhlIGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cywgXCJJcyB0aGlzIHJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlLCB3b3J0aCBteSB0aW1lIGZ1enppbmc/XCIgTG9va2luZyBhdCB0aGUgZnV6emluZyBndWlkZWxpbmVzLCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGRlZmluaXRlbHkgaW4gc2NvcGUuIFRoYXQncyBhIGdyZWVuIGxpZ2h0LlxuXG5Ob3csIGlzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBUaGlua2luZyB0aHJvdWdoIHRoZSBjb21tb24gYXR0YWNrIHN1cmZhY2UsIGAvZGV2L21lbWAgbGVhcHMgdG8gbWluZCwgZXNwZWNpYWxseSBpZiBgQ09ORklHX0RFVk1FTWAgaXMgZW5hYmxlZC4gQSB1c2VyIHByb2Nlc3MgY2FuIG9wZW4gYC9kZXYvbWVtYCwgYG1tYXAoKWAgdGhhdCBzdWNrZXIsIGFuZCB0aGVuIHVzZSB0b29scyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCwgYHByb2Nlc3Nfdm1fd3JpdGV2YCwgYHB0cmFjZWAgY2FsbHMsIG9yIGV2ZW4gbWVzcyB3aXRoIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtYCB0byByZWFkIG9yIHdyaXRlIHRoZSBtYXBwZWQgbWVtb3J5LiBUaGlzIGlzIGNsYXNzaWMhIEFueSBvdGhlciBgYWNjZXNzX3JlbW90ZV92bWAgY2FsbGVyIGlzIGluIHNjb3BlIHRvby5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J3Mgbm90IGp1c3QgYENPTkZJR19ERVZNRU1gOyBgQ09ORklHX1VJT2AgYWxzbyBvcGVucyBkb29ycywgYW5kIGV2ZW4ganVzdCBgQ09ORklHX01NVWAgb3IsIGNydWNpYWxseSwgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAuIEhhbmcgb24sIGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgIGlzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBib29sZWFuLCBzZWxlY3RlZCBieSBzb21ldGhpbmcgbGlrZSBYODYuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzb3VyY2UuXG5cbk9rYXksIGluc2lkZSBgbW0vbWVtb3J5LmNgLCB0aGVyZSBpdCBpcyEgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIGd1YXJkZWQgYnkgdGhhdCBgI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAuIEFuZCwganVzdCB0byBiZSBzdXJlLCBgL2Rldi9tZW1gIGl0c2VsZiB1dGlsaXplcyBgREVWTUVNYC4gTGV0J3MgdGFrZSBhIHF1aWNrIHBlYWsgYXQgYGRyaXZlcnMvY2hhci9tZW0uY2AgdG8gY29uZmlybSB0aGUgZmxvdy4gR29vZCBzdHVmZiwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjU0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MzMuMjQwMzI2MjkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ2OTQwNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tYXBfbWVtX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NoYXIvbWVtLmM9MzEzPXN0YXRpYyBpbmxpbmUgaW50IHByaXZhdGVfbWFwcGluZ19vayhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jLTMxOC1cXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzE5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jPTMyNT1zdGF0aWMgaW50IG1tYXBfbWVtX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYy0zNTUtXFxuZHJpdmVycy9jaGFyL21lbS5jOjM1NjpcXHRkZXNjLVxcdTAwM2V2bV9vcHMgPSBcXHUwMDI2bW1hcF9tZW1fb3BzO1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjM1LjU4NzI3NDMzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODUyNzIzMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIENPTkZJR19ERVZNRU0gaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgQ09ORklHX0RFVk1FTWAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBpdHMgZnVuY3Rpb24gd2hpY2ggSSBhbHJlYWR5IGtub3cgaXMgcmVsYXRlZCB0byBhbGxvd2luZyBkaXJlY3QgbWVtb3J5IGFjY2VzcywgaXMgdG8gY2hlY2sgdGhlIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFRoYXQgZmVlbHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTbywgSSdsbCBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2NoYXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBhbnl0aGluZyByZWxhdGVkIHRvIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycywgYW5kIGdpdmVuIG15IGV4cGVyaWVuY2UsIHRoaXMgb3B0aW9uJ3MgbGlrZWx5IHR1Y2tlZCBpbiB0aGVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmaWxlIHJldmVhbHMuLi4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MDEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODo0MC40NDAwMDE2ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTg5Nzk4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVk1FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NoYXIvS2NvbmZpZz0yNDk9Y29uZmlnIE5TQ19HUElPXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNTgtXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjU5OmNvbmZpZyBERVZNRU1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiL2Rldi9tZW0gdmlydHVhbCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NDIuNTU4OTg4OTIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NDM3NzgyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0IFN1bW1hcnkqKlxuXG5Pa2F5LCBsZXQncyBzb2xpZGlmeSB0aGlzIGZ1enppbmcgYW5hbHlzaXMuIEZpcnN0LCBjb25maXJtaW5nIGBIQVZFX0lPUkVNQVBfUFJPVGA6IHRoYXQncyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgb24gYW1kNjQgdGhhbmtzIHRvIGBDT05GSUdfWDg2YCwgc28gd2UncmUgZ29vZCB0aGVyZS4gTmV4dCwgbGV0J3MgbWFrZSBzdXJlIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgYXJlIGNsZWFyLiBgREVWTUVNYCBpcyB0aGUga2V5LCBhbmQgaXQncyByaWdodCB3aGVyZSB3ZSBleHBlY3QgaXQgaW4gYGRyaXZlcnMvY2hhci9LY29uZmlnYC4gYENPTkZJR19VSU9gIGlzIGFsc28gcHJlc2VudC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBgREVWTUVNYCAqaXMqIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiwgcmlnaHQ/IFllcCwgdGhhdCdzIGEgc29saWQgZW5hYmxlLlxuXG5Ob3csIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCdzIHRoZSBiZXN0IHRhcmdldCBmdW5jdGlvbj8gYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGp1bXBzIG91dC4gVGhhdCdzICp0aGUqIGZ1bmN0aW9uIG1vZGlmaWVkIGluIGBtbS9tZW1vcnkuY2AuIEJ1dCBpcyBpdCB0aGUgKnJpZ2h0KiBvbmU/IElzIGl0IHViaXF1aXRvdXMsIG9yIGlzIGl0IHNwZWNpZmljPyBBaCwgaXQncyBzcGVjaWZpYy4gSXQncyBvbmx5IGhpdCB3aGVuIGRlYWxpbmcgd2l0aCByZW1vdGUgVk0gYWNjZXNzIHVzaW5nIG5vbi1wYWdlLWJhc2VkIFZNQXMg4oCTIGxpa2UsIHNheSwgYC9kZXYvbWVtYCBvciBwaHlzaWNhbCBtYXBwaW5ncy4gQ291bGQgd2UgYnJvYWRlbiB0aGUgbmV0IHRvIGluY2x1ZGUgc29tZXRoaW5nIGxpa2UgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGBhY2Nlc3NfcmVtb3RlX3ZtYCwgb3IgYGFjY2Vzc19wcm9jZXNzX3ZtYD8gUG9zc2libHksIGJ1dCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXMgdGhlIG9uZSAqZGlyZWN0bHkqIGFsdGVyZWQsIHNvIGxldCdzIHN0aWNrIHdpdGggdGhhdCBmb3Igbm93LiBBbmQgbm8gb3RoZXIgZnVuY3Rpb25zIGluIGBtbS9tZW1vcnkuY2Agd2VyZSBjaGFuZ2VkLCBzbyB3ZSBhcmUgZ29vZC5cblxuTGV0J3MgcmV2aWV3IHRoZSBGb2N1c1N5bWJvbHMgcnVsZXMuIFwiU3BlY2lmaWNhbGx5IGltcGxlbWVudHMgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXCIgYGdlbmVyaWNfYWNjZXNzX3BoeXNgICpuYWlsZWQqIGl0LiBJdCdzIG5vbi11YmlxdWl0b3VzLCBkaXJlY3RseSBtb2RpZmllZCwgYW5kIHNwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkLiBUaGlzIGlzIGEgcGVyZmVjdCBmaXQuXG5cbkNhbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agc3RhbmQgYWxvbmUgYXMgdGhlIGZvY3VzIHN5bWJvbD8gQWJzb2x1dGVseSwgeWVzLCBpdCdzIGlkZWFsLiBMZXQncyBtYWtlIHN1cmUgYWxsIG91ciBjcml0ZXJpYSBhcmUgbWV0LlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWUsIG5vIHF1ZXN0aW9uLlxuKiAgIGBFbmFibGVDb25maWdzYDogYERFVk1FTWAgKG9yIGVtcHR5L0RFVk1FTSwgYXMgaGF2aW5nIFwiREVWTUVNXCIgZW5hYmxlcyAvZGV2L21lbSB3aGljaCBpcyB0aGUgcHJpbWFyeSB1c2VyIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCkuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBnZW5lcmljX2FjY2Vzc19waHlzYC5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSwgc3BlY2lmaWMgZXhwbGFuYXRpb24gb2YgdGhlIGZ1enppbmcgdmVyZGljdDogVGhpcyBpcyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5Pa2F5LCB0aGF0J3MgYWxsIHRoZSBpbmZvIHdlIG5lZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3NywiT3V0cHV0VG9rZW5zIjoxMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NDguMjAyNzY5MTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MjM3ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbW9yeS5jKSB0byBjb25zdHJhaW4gcGh5c2ljYWwgYWNjZXNzIGxlbmd0aHMgdG8gc2luZ2xlLXBhZ2UgYm91bmRhcmllcyBhbmQgZml4IHR5cGUgY2FzdGluZyBmb3IgUEZOIHNoaWZ0cy4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVtb3RlIFZNIGFjY2VzcyAoZS5nLiwgdmlhIHB0cmFjZSwgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYsIG9yIC9wcm9jLyRwaWQvbWVtKSB0byBwaHlzaWNhbCBJL08gbWFwcGluZ3Mgc3VjaCBhcyAvZGV2L21lbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbW9yeS5jKSB0byBjb25zdHJhaW4gcGh5c2ljYWwgYWNjZXNzIGxlbmd0aHMgdG8gc2luZ2xlLXBhZ2UgYm91bmRhcmllcyBhbmQgZml4IHR5cGUgY2FzdGluZyBmb3IgUEZOIHNoaWZ0cy4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVtb3RlIFZNIGFjY2VzcyAoZS5nLiwgdmlhIHB0cmFjZSwgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYsIG9yIC9wcm9jLyRwaWQvbWVtKSB0byBwaHlzaWNhbCBJL08gbWFwcGluZ3Mgc3VjaCBhcyAvZGV2L21lbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NDguMzE3MDE3MDgzWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4MTY5NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjQ4LjMxNzc0MjIxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMTgwOTY2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKTpcXG4xLiBJdCBjbGFtcHMgJ2xlbicgdG8gJ1BBR0VfU0laRSAtIG9mZnNldCcgYW5kIHJlZHVjZXMgdGhlIGlvcmVtYXBfcHJvdCgpIG1hcHBpbmcgc2l6ZSB0byBQQUdFX1NJWkUgYmVjYXVzZSBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgb25seSByZXNvbHZlcyBhbmQgdmFsaWRhdGVzIGEgc2luZ2xlIHBhZ2UvUEZOIGF0IGEgdGltZS5cXG4yLiBJdCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHNoaWZ0IG92ZXJmbG93IHdoZW4gY29tcGFyaW5nIHBoeXNfYWRkciBhZ2FpbnN0IGFyZ3MucGZuIGJ5IGNhc3RpbmcgYXJncy5wZm4gdG8gcmVzb3VyY2Vfc2l6ZV90LlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIHBoeXNpY2FsIHBhZ2UgbWFwcGluZyBib3VuZHMgYW5kIGFyaXRobWV0aWMgdHlwZSBzaXppbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbCBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgY29uY2VybnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjQzMDE4Yjg3ODlhMGFhOWQ0ZDE1MjU0MDhlZmE2NDA4NTYyOTQ2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA0OjA4OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMy4uNzRmZGYyOWM5YzdlOCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTY5NzQsNiArNjk3NCwxMiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Ym9vbCB3cml0YWJsZTtcbiBcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07XG4gXG4rXHQvKlxuK1x0ICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCdzIHdoYXQgZm9sbG93X3Bmbm1hcF9zdGFydCgpXG4rXHQgKiBndWFyYW50ZWVzOyBleHBlY3QgdGhlIGNhbGxlciB0byByZXRyeSB0byByZWFkIGxhcmdlciByYW5nZXMuXG4rXHQgKi9cbitcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuK1xuIHJldHJ5OlxuIFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTY5ODUsNyArNjk5MSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcbitcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbiBcdGlmICghbWFkZHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTY5OTMsNyArNjk5OSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbitcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiBcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcbiBcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXHRcdGlvdW5tYXAobWFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NDguMzE3NzQzMzczWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjg1NTgzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZGVjaWRlIGlmIHdlIG5lZWQgS01TQU4gZnV6emluZyBpbiBhZGRpdGlvbiB0byB0aGUgZXhpc3RpbmcgS0FTQU4gZnV6emluZy4gTGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoaXMgcmVxdWVzdCBhZ2FpbnN0IG91ciBzYWZldHkgYW5kIGR1YWwtdXNlIGd1aWRlbGluZXMuIFRoaXMgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIHNvZnR3YXJlIG1haW50ZW5hbmNlLCBwYXRjaCByZXZpZXcsIHNwZWNpZmljYWxseSBjaG9vc2luZyBhIG1lbW9yeSBzYW5pdGl6ZXIuIERlZmluaXRlbHkgYSBkZWZlbnNpdmUgYWN0aW9uLCBjb21wbGV0ZWx5IGJlbmlnbiwgZm9jdXNlZCBvbiBRQS4gTm8gcmVkIGZsYWdzIGhlcmUg4oCTIG5vIG1hbHdhcmUsIG5vIGV4cGxvaXQgZ2VuZXJhdGlvbiwgbm90aGluZyByZW1vdGVseSBtYWxpY2lvdXMuIERlZmluaXRlbHkgYSBiZW5pZ24vc2FmZSBjbGFzc2lmaWNhdGlvbi5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgdGVjaG5pY2FsIGRldGFpbHMuIEkgbmVlZCB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBkaWZmIHNlZW1zIHRvIGJlIGluIGBtbS9tZW1vcnkuY2AsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBnZW5lcmljX2FjY2Vzc19waHlzYCBmdW5jdGlvbi4gSSBzaG91bGQgcHVsbCB1cCB0aGUgZGlmZiBhbmQgcmVhbGx5IGRpZyBpbiwgcHJvYmFibHkgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHNlYXJjaCB3aXRoaW4gYG1tL21lbW9yeS5jYCBmb3IgdGhhdCBmdW5jdGlvbiwgc28gSSBjYW4gc2VlIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2VzIGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZXZhbHVhdGlvbiBzdGFydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODo1OS4wMDMzMzA0OTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODYxMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfYWNjZXNzX3BoeXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9Njk1MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XFxuLS1cXG5tbS9tZW1vcnkuYy02OTU0LS8qKlxcbm1tL21lbW9yeS5jOjY5NTU6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxubW0vbWVtb3J5LmMtNjk1Ni0gKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbi0tXFxubW0vbWVtb3J5LmMtNjk2NS0gKi9cXG5tbS9tZW1vcnkuYzo2OTY2OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNjk2Ny1cXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG4tLVxcbm1tL21lbW9yeS5jLTcwMTktfVxcbm1tL21lbW9yeS5jOjcwMjA6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XFxubW0vbWVtb3J5LmMtNzAyMS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NTkuMDkzMjA0OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMTIwMjM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHBsYXlpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDpcblxuKipEaXZpbmcgRGVlcCBpbnRvIGBnZW5lcmljX2FjY2Vzc19waHlzYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIHVuZGVyc3RhbmQgdGhpcyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24gYW5kIGl0cyBjb250ZXh0IHRob3JvdWdobHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBlbnRpcmUgc291cmNlIGNvZGUg4oCTIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGl0cyBjYWxsZXJzLCBhbmQgdGhlIGNvZGUgc3Vycm91bmRpbmcgaXQuIEkgd2FudCB0aGUgY29tcGxldGUgcGljdHVyZSwgbm90IGp1c3Qgc25pcHBldHMuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgKnN1cHBvc2VkKiB0byBiZSB1c2VkIGFuZCAqaG93KiBpdCdzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFRoaXMgaXNuJ3QganVzdCBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBpbmRpdmlkdWFsIGxpbmVzOyBpdCdzIGFib3V0IHNlZWluZyB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEtub3dpbmcgdGhlIGZ1bGwgY29udGV4dCBpcyBjcnVjaWFsIGZvciBhIHJvYnVzdCBhbmFseXNpcy4gSSdtIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgcmVkIGZsYWdzLCBvciBjbGV2ZXIgaW1wbGVtZW50YXRpb25zLCB0aGF0IGFyZSBpbW1lZGlhdGVseSBvYnZpb3VzIHRvIGFuIGV4cGVydC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGJ5IGV4YW1pbmluZyBhbGwgdGhlIHJlbGF0ZWQgY29kZSBhdCBvbmNlLCBJIGNhbiBtb3JlIGVmZmVjdGl2ZWx5IGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBpdCBhbGwgd29ya3MgdG9nZXRoZXIsIGFuZCBJIHdpbGwgYmUgYWJsZSB0byBtYWtlIGEgbW9yZSBhY2N1cmF0ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDk6MDEuMjk0NDExMzQ3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTU0LFxuICBcIkxpbmVDb3VudFwiOiA3NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTU0OlxcdC8qKlxcbjY5NTU6XFx0ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxuNjk1NjpcXHQgKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbjY5NTc6XFx0ICogQGFkZHI6IHVzZXJzcGFjZSBhZGRyZXNzLCBub3QgcmVsYXRpdmUgb2Zmc2V0IHdpdGhpbiBAdm1hXFxuNjk1ODpcXHQgKiBAYnVmOiBidWZmZXIgdG8gcmVhZC93cml0ZVxcbjY5NTk6XFx0ICogQGxlbjogbGVuZ3RoIG9mIHRyYW5zZmVyXFxuNjk2MDpcXHQgKiBAd3JpdGU6IHNldCB0byBGT0xMX1dSSVRFIHdoZW4gd3JpdGluZywgb3RoZXJ3aXNlIHJlYWRpbmdcXG42OTYxOlxcdCAqXFxuNjk2MjpcXHQgKiBUaGlzIGlzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgXFx1MDAyNnZtX29wZXJhdGlvbnNfc3RydWN0LmFjY2VzcyBmb3IgYW5cXG42OTYzOlxcdCAqIGlvbWVtIG1hcHBpbmcuIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSgpIHdoZW4gdGhlIEB2bWEgaXNcXG42OTY0OlxcdCAqIG5vdCBwYWdlIGJhc2VkLlxcbjY5NjU6XFx0ICovXFxuNjk2NjpcXHRpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbjY5Njc6XFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXFxuNjk2ODpcXHR7XFxuNjk2OTpcXHRcXHRyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyO1xcbjY5NzA6XFx0XFx0cGdwcm90X3QgcHJvdCA9IF9fcGdwcm90KDApO1xcbjY5NzE6XFx0XFx0dm9pZCBfX2lvbWVtICptYWRkcjtcXG42OTcyOlxcdFxcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcXG42OTczOlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbjY5NzQ6XFx0XFx0Ym9vbCB3cml0YWJsZTtcXG42OTc1OlxcdFxcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07XFxuNjk3NjpcXHRcXG42OTc3OlxcdFxcdC8qXFxuNjk3ODpcXHRcXHQgKiBMaW1pdCBhY2Nlc3MgdG8gb25lIHBhZ2UgYXQgYSB0aW1lLCBhcyB0aGF0J3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KClcXG42OTc5OlxcdFxcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cXG42OTgwOlxcdFxcdCAqL1xcbjY5ODE6XFx0XFx0bGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7XFxuNjk4MjpcXHRcXG42OTgzOlxcdHJldHJ5OlxcbjY5ODQ6XFx0XFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbjY5ODU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjk4NjpcXHRcXHRwcm90ID0gYXJncy5wZ3Byb3Q7XFxuNjk4NzpcXHRcXHRwaHlzX2FkZHIgPSAocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuNjk4ODpcXHRcXHR3cml0YWJsZSA9IGFyZ3Mud3JpdGFibGU7XFxuNjk4OTpcXHRcXHRmb2xsb3dfcGZubWFwX2VuZChcXHUwMDI2YXJncyk7XFxuNjk5MDpcXHRcXG42OTkxOlxcdFxcdGlmICgod3JpdGUgXFx1MDAyNiBGT0xMX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiAhd3JpdGFibGUpXFxuNjk5MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42OTkzOlxcdFxcbjY5OTQ6XFx0XFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xcbjY5OTU6XFx0XFx0aWYgKCFtYWRkcilcXG42OTk2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjY5OTc6XFx0XFxuNjk5ODpcXHRcXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncykpXFxuNjk5OTpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG43MDAwOlxcdFxcbjcwMDE6XFx0XFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxcbjcwMDI6XFx0XFx0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpIHx8XFxuNzAwMzpcXHRcXHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XFxuNzAwNDpcXHRcXHRcXHRmb2xsb3dfcGZubWFwX2VuZChcXHUwMDI2YXJncyk7XFxuNzAwNTpcXHRcXHRcXHRpb3VubWFwKG1hZGRyKTtcXG43MDA2OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuNzAwNzpcXHRcXHR9XFxuNzAwODpcXHRcXG43MDA5OlxcdFxcdGlmICh3cml0ZSlcXG43MDEwOlxcdFxcdFxcdG1lbWNweV90b2lvKG1hZGRyICsgb2Zmc2V0LCBidWYsIGxlbik7XFxuNzAxMTpcXHRcXHRlbHNlXFxuNzAxMjpcXHRcXHRcXHRtZW1jcHlfZnJvbWlvKGJ1ZiwgbWFkZHIgKyBvZmZzZXQsIGxlbik7XFxuNzAxMzpcXHRcXHRyZXQgPSBsZW47XFxuNzAxNDpcXHRcXHRmb2xsb3dfcGZubWFwX2VuZChcXHUwMDI2YXJncyk7XFxuNzAxNTpcXHRvdXRfdW5tYXA6XFxuNzAxNjpcXHRcXHRpb3VubWFwKG1hZGRyKTtcXG43MDE3OlxcdFxcbjcwMTg6XFx0XFx0cmV0dXJuIHJldDtcXG43MDE5OlxcdH1cXG43MDIwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xcbjcwMjE6XFx0I2VuZGlmXFxuNzAyMjpcXHRcXG43MDIzOlxcdC8qXFxuNzAyNDpcXHQgKiBBY2Nlc3MgYW5vdGhlciBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxcbjcwMjU6XFx0ICovXFxuNzAyNjpcXHRzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbjcwMjc6XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbjcwMjg6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowOTowMS4yOTUwNTA4OTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2ODQyMjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBSaWdodCwgdGhhdCdzIHRoZSBgdm1fb3BzLVx1MDAzZWFjY2Vzc2AgY2FsbGJhY2sgdXNlZCBmb3IgSS9PIG1lbW9yeSBtYXBwaW5ncyDigJMgdGhpbmdzIGxpa2UgVXNlci1zcGFjZSBJL08gb3IgVmlydHVhbCBGdW5jdGlvbiBJL08sIHRoYXQga2luZCBvZiBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBfX2FjY2Vzc19yZW1vdGVfdm1gLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cuXG5cbkxldCBtZSBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaW1lIHRvIG9wZW4gdXAgYG1tL21lbW9yeS5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNzAyNi4gSG9wZWZ1bGx5LCBJIGNhbiBmaW5kIHdoZXJlIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzc2AgaXMgY2FsbGVkIGZyb20gYF9fYWNjZXNzX3JlbW90ZV92bWAgYW5kIGhvdyB0aGF0IGNhbGwgaXMgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWNoYW5pY3Mgb2YgdGhlc2UgbWVtb3J5IGFjY2VzcyBvcGVyYXRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDk6MDMuMzYzNDc2NzI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzcxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAyNSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzAyNTpcXHQgKi9cXG43MDI2OlxcdHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzAyNzpcXHRcXHRcXHRcXHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzAyODpcXHR7XFxuNzAyOTpcXHRcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbjcwMzA6XFx0XFx0aW50IHdyaXRlID0gZ3VwX2ZsYWdzIFxcdTAwMjYgRk9MTF9XUklURTtcXG43MDMxOlxcdFxcbjcwMzI6XFx0XFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSlcXG43MDMzOlxcdFxcdFxcdHJldHVybiAwO1xcbjcwMzQ6XFx0XFxuNzAzNTpcXHRcXHQvKiBVbnRhZyB0aGUgYWRkcmVzcyBiZWZvcmUgbG9va2luZyB1cCB0aGUgVk1BICovXFxuNzAzNjpcXHRcXHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpO1xcbjcwMzc6XFx0XFxuNzAzODpcXHRcXHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXFxuNzAzOTpcXHRcXHRpZiAoIXZtYV9sb29rdXAobW0sIGFkZHIpIFxcdTAwMjZcXHUwMDI2ICFleHBhbmRfc3RhY2sobW0sIGFkZHIpKVxcbjcwNDA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzA0MTpcXHRcXG43MDQyOlxcdFxcdC8qIGlnbm9yZSBlcnJvcnMsIGp1c3QgY2hlY2sgaG93IG11Y2ggd2FzIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCAqL1xcbjcwNDM6XFx0XFx0d2hpbGUgKGxlbikge1xcbjcwNDQ6XFx0XFx0XFx0aW50IGJ5dGVzLCBvZmZzZXQ7XFxuNzA0NTpcXHRcXHRcXHR2b2lkICptYWRkcjtcXG43MDQ2OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuNzA0NzpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XFxuNzA0ODpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGdldF91c2VyX3BhZ2Vfdm1hX3JlbW90ZShtbSwgYWRkcixcXG43MDQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZ3VwX2ZsYWdzLCBcXHUwMDI2dm1hKTtcXG43MDUwOlxcdFxcbjcwNTE6XFx0XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbjcwNTI6XFx0XFx0XFx0XFx0LyogV2UgbWlnaHQgbmVlZCB0byBleHBhbmQgdGhlIHN0YWNrIHRvIGFjY2VzcyBpdCAqL1xcbjcwNTM6XFx0XFx0XFx0XFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuNzA1NDpcXHRcXHRcXHRcXHRpZiAoIXZtYSkge1xcbjcwNTU6XFx0XFx0XFx0XFx0XFx0dm1hID0gZXhwYW5kX3N0YWNrKG1tLCBhZGRyKTtcXG43MDU2OlxcdFxcbjcwNTc6XFx0XFx0XFx0XFx0XFx0LyogbW1hcF9sb2NrIHdhcyBkcm9wcGVkIG9uIGZhaWx1cmUgKi9cXG43MDU4OlxcdFxcdFxcdFxcdFxcdGlmICghdm1hKVxcbjcwNTk6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuNzA2MDpcXHRcXG43MDYxOlxcdFxcdFxcdFxcdFxcdC8qIFRyeSBhZ2FpbiBpZiBzdGFjayBleHBhbnNpb24gd29ya2VkICovXFxuNzA2MjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MDYzOlxcdFxcdFxcdFxcdH1cXG43MDY0OlxcdFxcbjcwNjU6XFx0XFx0XFx0XFx0LypcXG43MDY2OlxcdFxcdFxcdFxcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXFxuNzA2NzpcXHRcXHRcXHRcXHQgKiB3ZSBjYW4gYWNjZXNzIHVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBjb2RlLlxcbjcwNjg6XFx0XFx0XFx0XFx0ICovXFxuNzA2OTpcXHRcXHRcXHRcXHRieXRlcyA9IDA7XFxuNzA3MDpcXHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuNzA3MTpcXHRcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2VzcylcXG43MDcyOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcXG43MDczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBsZW4sIHdyaXRlKTtcXG43MDc0OlxcdCNlbmRpZlxcbjcwNzU6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2M9IDApXFxuNzA3NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MDc3OlxcdFxcdFxcdH0gZWxzZSB7XFxuNzA3ODpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuNzA3OTpcXHRcXHRcXHRcXHRieXRlcyA9IGxlbjtcXG43MDgwOlxcdFxcdFxcdFxcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xcbjcwODE6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcXG43MDgyOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcXG43MDgzOlxcdFxcbjcwODQ6XFx0XFx0XFx0XFx0bWFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgKiBQQUdFX1NJWkUpO1xcbjcwODU6XFx0XFx0XFx0XFx0aWYgKHdyaXRlKSB7XFxuNzA4NjpcXHRcXHRcXHRcXHRcXHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzA4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1hZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTtcXG43MDg4OlxcdFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHlfbG9jayhmb2xpbyk7XFxuNzA4OTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjcwOTA6XFx0XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzA5MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjcwOTI6XFx0XFx0XFx0XFx0fVxcbjcwOTM6XFx0XFx0XFx0XFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XFxuNzA5NDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA5OjAzLjM2NTExNzQ4NloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTMzNTU0MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgQWNjZXNzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBfX2FjY2Vzc19yZW1vdGVfdm1gIGlzIGxvb3BpbmcsIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgYW5kIHRoZW4gYWR2YW5jaW5nIGJ1ZmZlcnMgYW5kIGxlbmd0aHMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZC4gVGhlIGtleSBoZXJlIGlzIHdoYXQgY2hhbmdlZCBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuICBJIHNlZSB0aHJlZSBjcml0aWNhbCBtb2RpZmljYXRpb25zOlxuXG4xLiAgV2UndmUgbGltaXRlZCBhY2Nlc3MgdG8gb25lIHBhZ2UgYXQgYSB0aW1lLiBUaGlzIG1ha2VzIHNlbnNlOyBgZm9sbG93X3Bmbm1hcF9zdGFydCgpYCBvbmx5IGd1YXJhbnRlZXMgYSBzaW5nbGUgcGFnZSdzIGludGVncml0eSwgc28gaGFuZGxpbmcgbXVsdGktcGFnZSBvcGVyYXRpb25zIHJlcXVpcmVzIHJldHJ5aW5nIG9uIHRoZSBjYWxsZXIncyBlbmQsIGFuZCB0aGF0J3MgZ29vZCBwcmFjdGljZS5cbjIuICBgaW9yZW1hcF9wcm90YCBub3cgY29uc2lzdGVudGx5IG1hcHMgYFBBR0VfU0laRWAgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBhbGlnbmluZyBiYXNlZCBvbiBsZW5ndGguIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cbjMuICBBIDMyLWJpdCBzaGlmdCBvdmVyZmxvdyBhbmQgdHlwZSBjYXN0IGlzc3VlIHdpdGggYGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUYCB3YXMgYWRkcmVzc2VkLiBUaGF0J3MgYSBjcml0aWNhbCBidWcgZml4LCBlbnN1cmluZyBwcm9wZXIgcGh5c2ljYWwgYWRkcmVzcyBjYWxjdWxhdGlvbiwgZXNwZWNpYWxseSBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcyB3aXRoIGxhcmdlIHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9ucy5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhYm91dCBhbGlnbmluZyB0aGUgYWNjZXNzIHNpemUgd2l0aCB3aGF0IGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBjYW4gcmVsaWFibHkgdmFsaWRhdGUuICBQcmV2aW91c2x5LCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgY291bGQgbWFwIGFuZCBjb3B5IGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBwYWdlIHRoYXQgd2FzIGNoZWNrZWQuIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBvbmx5IHZlcmlmaWVzIG9uZSBQVEUvUEZOLiBOb3csIGNsYW1waW5nIGBsZW5gIHRvIHRoZSBwYWdlIHNpemUgcmVzdHJpY3RzIHRoZSBhY2Nlc3MgYW5kIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS4gSXQgZW5zdXJlcyB3ZSdyZSBvbmx5IG9wZXJhdGluZyB3aXRoaW4gdGhlIHNpbmdsZSBwYWdlIHRoYXQgaGFzIGJlZW4gdmFsaWRhdGVkLiBUaGlzLCBjb21iaW5lZCB3aXRoIHRoZSBgUEFHRV9TSVpFYCByZW1hcHBpbmcgYW5kIHRoZSBvdmVyZmxvdyBmaXgsIG1ha2VzIHRoaXMgYSByb2J1c3Qgc29sdXRpb24uXG5cbk5vdywgbGV0J3MgZXZhbHVhdGUgdGhpcyBhZ2FpbnN0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgY3JpdGVyaWEuICBUaGUgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIGZvdXIgY29uZGl0aW9ucy5cblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOiBObywgbm8ga2VybmVsIGRhdGEgaXMgYmVpbmcgbGVha2VkLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOiAgTm8sIFRoZSBgZm9sbG93X3Bmbm1hcF9hcmdzYCBzdHJ1Y3Qgc2VlbXMgdG8gYmUgY29ycmVjdGx5IGluaXRpYWxpemVkLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246IE5vIGNvbXBsZXggYWxsb2NhdGlvbnMgb2NjdXIuXG40LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCByZWFkczogV2l0aCBgbWVtY3B5X3RvaW9gIHdyaXRpbmcgZnJvbSB0aGUgYnVmZmVyIGFuZCBgbWVtY3B5X2Zyb21pb2AgcmVhZGluZyBpbnRvIHRoZSBidWZmZXIsIGNsYW1waW5nIGBsZW5gICpyZXN0cmljdHMqIGFjY2VzcywgYXZvaWRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpcyB0aGUgZml4LiBUaGUgb3JpZ2luYWwsIHBvdGVudGlhbGx5IHVuYm91bmRlZCBjb3B5IGlzIG5vdyByZXN0cmljdGVkLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGlzIHBhdGNoICpwcmV2ZW50cyogdGhlIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBLTVNBTiBjb25jZXJucywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgd2VyZSB0aGVyZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBLQVNBTiBpc3N1ZXMuIFRoaXMgaXMgYSBmaXgsIG5vdCBhIG5ldyB2dWxuZXJhYmlsaXR5LlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50LiBUaGUgcGF0Y2ggaXMgc291bmQuIEknbGwgcHJvdmlkZSB0aGUgZmluYWwgcmVzcG9uc2Ugbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODYzLCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowOToxMS40OTg2NzQ4NTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpOlxcbjEuIEl0IGNsYW1wcyAnbGVuJyB0byAnUEFHRV9TSVpFIC0gb2Zmc2V0JyBhbmQgcmVkdWNlcyB0aGUgaW9yZW1hcF9wcm90KCkgbWFwcGluZyBzaXplIHRvIFBBR0VfU0laRSBiZWNhdXNlIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBvbmx5IHJlc29sdmVzIGFuZCB2YWxpZGF0ZXMgYSBzaW5nbGUgcGFnZS9QRk4gYXQgYSB0aW1lLlxcbjIuIEl0IGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgc2hpZnQgb3ZlcmZsb3cgd2hlbiBjb21wYXJpbmcgcGh5c19hZGRyIGFnYWluc3QgYXJncy5wZm4gYnkgY2FzdGluZyBhcmdzLnBmbiB0byByZXNvdXJjZV9zaXplX3QuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGJvdW5kcyBhbmQgYXJpdGhtZXRpYyB0eXBlIHNpemluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjb25jZXJucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKTpcXG4xLiBJdCBjbGFtcHMgJ2xlbicgdG8gJ1BBR0VfU0laRSAtIG9mZnNldCcgYW5kIHJlZHVjZXMgdGhlIGlvcmVtYXBfcHJvdCgpIG1hcHBpbmcgc2l6ZSB0byBQQUdFX1NJWkUgYmVjYXVzZSBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgb25seSByZXNvbHZlcyBhbmQgdmFsaWRhdGVzIGEgc2luZ2xlIHBhZ2UvUEZOIGF0IGEgdGltZS5cXG4yLiBJdCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHNoaWZ0IG92ZXJmbG93IHdoZW4gY29tcGFyaW5nIHBoeXNfYWRkciBhZ2FpbnN0IGFyZ3MucGZuIGJ5IGNhc3RpbmcgYXJncy5wZm4gdG8gcmVzb3VyY2Vfc2l6ZV90LlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIHBoeXNpY2FsIHBhZ2UgbWFwcGluZyBib3VuZHMgYW5kIGFyaXRobWV0aWMgdHlwZSBzaXppbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbCBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgY29uY2VybnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt2gg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 03:48:05 +0000 UTC FinishedAt: 2026-09-10 04:09:12 +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": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVMEM" ], "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": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVMEM" ], "series_id": "d8f3b30a-6212-4a43-bfc2-4b845fd7cf59" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "generic_access_phys" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVk1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKTpcbjEuIEl0IGNsYW1wcyAmIzM5O2xlbiYjMzk7IHRvICYjMzk7UEFHRV9TSVpFIC0gb2Zmc2V0JiMzOTsgYW5kIHJlZHVjZXMgdGhlIGlvcmVtYXBfcHJvdCgpIG1hcHBpbmcgc2l6ZSB0byBQQUdFX1NJWkUgYmVjYXVzZSBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgb25seSByZXNvbHZlcyBhbmQgdmFsaWRhdGVzIGEgc2luZ2xlIHBhZ2UvUEZOIGF0IGEgdGltZS5cbjIuIEl0IGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgc2hpZnQgb3ZlcmZsb3cgd2hlbiBjb21wYXJpbmcgcGh5c19hZGRyIGFnYWluc3QgYXJncy5wZm4gYnkgY2FzdGluZyBhcmdzLnBmbiB0byByZXNvdXJjZV9zaXplX3QuXG5cblRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIHBoeXNpY2FsIHBhZ2UgbWFwcGluZyBib3VuZHMgYW5kIGFyaXRobWV0aWMgdHlwZSBzaXppbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbCBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgY29uY2VybnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1vcnkuYykgdG8gY29uc3RyYWluIHBoeXNpY2FsIGFjY2VzcyBsZW5ndGhzIHRvIHNpbmdsZS1wYWdlIGJvdW5kYXJpZXMgYW5kIGZpeCB0eXBlIGNhc3RpbmcgZm9yIFBGTiBzaGlmdHMuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlbW90ZSBWTSBhY2Nlc3MgKGUuZy4sIHZpYSBwdHJhY2UsIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2LCBvciAvcHJvYy8kcGlkL21lbSkgdG8gcGh5c2ljYWwgSS9PIG1hcHBpbmdzIHN1Y2ggYXMgL2Rldi9tZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNDMwMThiODc4OWEwYWE5ZDRkMTUyNTQwOGVmYTY0MDg1NjI5NDZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDQ6MDg6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMy4uNzRmZGYyOWM5YzdlOCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTY5NzQsNiAmIzQzOzY5NzQsMTIgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGJvb2wgd3JpdGFibGU7XG4gXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCYjMzk7cyB3aGF0IGZvbGxvd19wZm5tYXBfc3RhcnQoKVxuJiM0MztcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbiYjNDM7XG4gcmV0cnk6XG4gXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNjk4NSw3ICYjNDM7Njk5MSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gJiM0Mzsgb2Zmc2V0KSwgcHJvdCk7XG4mIzQzO1x0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xuIFx0aWYgKCFtYWRkcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNjk5Myw3ICYjNDM7Njk5OSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiYjNDM7XHQgICAgKHBoeXNfYWRkciAhPSAoKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpIHx8XG4gXHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XG4gXHRcdGZvbGxvd19wZm5tYXBfZW5kKFx1MDAyNmFyZ3MpO1xuIFx0XHRpb3VubWFwKG1hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1vcnkuYykgdG8gY29uc3RyYWluIHBoeXNpY2FsIGFjY2VzcyBsZW5ndGhzIHRvIHNpbmdsZS1wYWdlIGJvdW5kYXJpZXMgYW5kIGZpeCB0eXBlIGNhc3RpbmcgZm9yIFBGTiBzaGlmdHMuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlbW90ZSBWTSBhY2Nlc3MgKGUuZy4sIHZpYSBwdHJhY2UsIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2LCBvciAvcHJvYy8kcGlkL21lbSkgdG8gcGh5c2ljYWwgSS9PIG1hcHBpbmdzIHN1Y2ggYXMgL2Rldi9tZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNDMwMThiODc4OWEwYWE5ZDRkMTUyNTQwOGVmYTY0MDg1NjI5NDZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDQ6MDg6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGZmMzM4YzJhYmU5MjMuLjc0ZmRmMjljOWM3ZTggMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC02OTc0LDYgJiM0Mzs2OTc0LDEyIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJYm9vbCB3cml0YWJsZTsKIAlzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9OwogCiYjNDM7CS8qCiYjNDM7CSAqIExpbWl0IGFjY2VzcyB0byBvbmUgcGFnZSBhdCBhIHRpbWUsIGFzIHRoYXQmIzM5O3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KCkKJiM0MzsJICogZ3VhcmFudGVlczsgZXhwZWN0IHRoZSBjYWxsZXIgdG8gcmV0cnkgdG8gcmVhZCBsYXJnZXIgcmFuZ2VzLgomIzQzOwkgKi8KJiM0MzsJbGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7CiYjNDM7CiByZXRyeToKIAlpZiAoZm9sbG93X3Bmbm1hcF9zdGFydCgmYW1wO2FyZ3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY5ODUsNyAmIzQzOzY5OTEsNyBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCWlmICgod3JpdGUgJmFtcDsgRk9MTF9XUklURSkgJmFtcDsmYW1wOyAhd3JpdGFibGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX0FMSUdOKGxlbiAmIzQzOyBvZmZzZXQpLCBwcm90KTsKJiM0MzsJbWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpOwogCWlmICghbWFkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC02OTkzLDcgJiM0Mzs2OTk5LDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJZ290byBvdXRfdW5tYXA7CiAKIAlpZiAoKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChhcmdzLnBncHJvdCkpIHx8Ci0JICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQpKSB8fAomIzQzOwkgICAgKHBoeXNfYWRkciAhPSAoKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSkgfHwKIAkgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7CiAJCWZvbGxvd19wZm5tYXBfZW5kKCZhbXA7YXJncyk7CiAJCWlvdW5tYXAobWFkZHIpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgQWZmZWN0ZWQgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgYW5kLCBjcnVjaWFsbHksIHdoZXJlIGl0JiMzOTtzIG1ha2luZyBjaGFuZ2VzLiBSaWdodCwgc28gaXQmIzM5O3MgdG91Y2hpbmcgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24uIE5vdywgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJiMzOTtsbCB6ZXJvIGluIGFyb3VuZCBsaW5lIDY5NzQgaW4gYG1tL21lbW9yeS5jYC4gSSBuZWVkIHRvIHNlZSB0aGUgZnVuY3Rpb24gaW4gYWN0aW9uLiBXaG8mIzM5O3MgY2FsbGluZyBpdD8gV2hhdCBhcmUgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIGRvaW5nPyBHZXR0aW5nIGEgZmVlbCBmb3IgdGhlIGNvbnRyb2wgZmxvdyBpcyBlc3NlbnRpYWwsIGFzIGlzIHVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIG9mIHRoaXMgcGFydGljdWxhciBtb2RpZmljYXRpb24uIE5lZWQgdG8gYnVpbGQgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIGJlZm9yZSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5NjA6XHQgKiBAd3JpdGU6IHNldCB0byBGT0xMX1dSSVRFIHdoZW4gd3JpdGluZywgb3RoZXJ3aXNlIHJlYWRpbmdcbjY5NjE6XHQgKlxuNjk2MjpcdCAqIFRoaXMgaXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBcdTAwMjZ2bV9vcGVyYXRpb25zX3N0cnVjdC5hY2Nlc3MgZm9yIGFuXG42OTYzOlx0ICogaW9tZW0gbWFwcGluZy4gVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtKCkgd2hlbiB0aGUgQHZtYSBpc1xuNjk2NDpcdCAqIG5vdCBwYWdlIGJhc2VkLlxuNjk2NTpcdCAqL1xuNjk2NjpcdGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG42OTY3Olx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXG42OTY4Olx0e1xuNjk2OTpcdFx0cmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkcjtcbjY5NzA6XHRcdHBncHJvdF90IHByb3QgPSBfX3BncHJvdCgwKTtcbjY5NzE6XHRcdHZvaWQgX19pb21lbSAqbWFkZHI7XG42OTcyOlx0XHRpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcik7XG42OTczOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbjY5NzQ6XHRcdGJvb2wgd3JpdGFibGU7XG42OTc1Olx0XHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xuNjk3NjpcdFxuNjk3NzpcdFx0LypcbjY5Nzg6XHRcdCAqIExpbWl0IGFjY2VzcyB0byBvbmUgcGFnZSBhdCBhIHRpbWUsIGFzIHRoYXQmIzM5O3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KClcbjY5Nzk6XHRcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cbjY5ODA6XHRcdCAqL1xuNjk4MTpcdFx0bGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7XG42OTgyOlx0XG42OTgzOlx0cmV0cnk6XG42OTg0Olx0XHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbjY5ODU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42OTg2Olx0XHRwcm90ID0gYXJncy5wZ3Byb3Q7XG42OTg3Olx0XHRwaHlzX2FkZHIgPSAocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuNjk4ODpcdFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuNjk4OTpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG42OTkwOlx0XG42OTkxOlx0XHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuNjk5MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY5OTM6XHRcbjY5OTQ6XHRcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbjY5OTU6XHRcdGlmICghbWFkZHIpXG42OTk2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNjk5NzpcdFxuNjk5ODpcdFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG42OTk5Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xuNzAwMDpcdFxuNzAwMTpcdFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuNzAwMjpcdFx0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxuNzAwMzpcdFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xuNzAwNDpcdFx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbjcwMDU6XHRcdFx0aW91bm1hcChtYWRkcik7XG43MDA2Olx0XHRcdGdvdG8gcmV0cnk7XG43MDA3Olx0XHR9XG43MDA4Olx0XG43MDA5Olx0XHRpZiAod3JpdGUpXG43MDEwOlx0XHRcdG1lbWNweV90b2lvKG1hZGRyICYjNDM7IG9mZnNldCwgYnVmLCBsZW4pO1xuNzAxMTpcdFx0ZWxzZVxuNzAxMjpcdFx0XHRtZW1jcHlfZnJvbWlvKGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBsZW4pO1xuNzAxMzpcdFx0cmV0ID0gbGVuO1xuNzAxNDpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG43MDE1Olx0b3V0X3VubWFwOlxuNzAxNjpcdFx0aW91bm1hcChtYWRkcik7XG43MDE3Olx0XG43MDE4Olx0XHRyZXR1cm4gcmV0O1xuNzAxOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgS2VybmVsIFVzYWdlIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqIG9yICpyZWZlcmVuY2VkKi4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3MgZnJhbWV3b3JrLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzLCBvYnZpb3VzbHksIGJ1dCBhbHNvIGFueSBkYXRhIHN0cnVjdHVyZXMgb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBpdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGNhbGxzLCBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLCBvciBtYXliZSBldmVuIHVzYWdlIHdpdGhpbiBtYWNyb3M/IFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpdHMgb3ZlcmFsbCBpbXBhY3QuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIC0gYGdyZXBgLCBgY3Njb3BlYCwgYGNsYW5nZGAgLSB0byB0cmFjayBpdCBhbGwgZG93bi4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGlzIGNsZWFyIGFuZCBJIGNhbiBuYXJyb3cgZG93biB0aGUgcG90ZW50aWFsbHkgcmVsZXZhbnQgZmlsZXMgcXVpY2tseS4gVGhpcyBzaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgaW52ZXN0aWdhdGlvbiwgYnV0IHlvdSBuZXZlciBrbm93IHdoYXQgc3VycHJpc2VzIHRoZSBrZXJuZWwgaG9sZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19hY2Nlc3NfcGh5cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL2NkeC9jZHguYy02NjMtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jZHgvY2R4LmM6NjY0Olx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL2NkeC9jZHguYy02NjUtI2VuZGlmXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jaGFyL21lbS5jOjMyMTpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIyLSNlbmRpZlxuLS1cbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDYtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jOjgwNzpcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jLTgwOC0jZW5kaWZcbi0tXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL3BjaS9tbWFwLmMtMTktI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9wY2kvbW1hcC5jOjIwOlx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG5kcml2ZXJzL3BjaS9tbWFwLmMtMjEtI2VuZGlmXG4tLVxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcbmRyaXZlcnMvdWlvL3Vpby5jLTczNy0jaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzg6XHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOS0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NzgzPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTgzNS1cdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxuaW5jbHVkZS9saW51eC9tbS5oOjgzNjpcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xuaW5jbHVkZS9saW51eC9tbS5oLTgzNy1cdCAqIGltcGxlbWVudGF0aW9uIHVzZWZ1bCBmb3IgYW55IGlvbWVtIG1hcHBpbmcuXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMxMzA9Y29weV9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKTtcbmluY2x1ZGUvbGludXgvbW0uaDozMTMxOmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzEzMi1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7XG4tLVxubW0vbWVtb3J5LmM9Njk1MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XG4tLVxubW0vbWVtb3J5LmMtNjk1NC0vKipcbm1tL21lbW9yeS5jOjY5NTU6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXG5tbS9tZW1vcnkuYy02OTU2LSAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXG4tLVxubW0vbWVtb3J5LmMtNjk2NS0gKi9cbm1tL21lbW9yeS5jOjY5NjY6aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTY5NjctXHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXG4tLVxubW0vbWVtb3J5LmMtNzAxOS19XG5tbS9tZW1vcnkuYzo3MDIwOkVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xubW0vbWVtb3J5LmMtNzAyMS0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTYzMj1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtNjg0LVx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjY4NTpcdCAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzLiBTZWUgYWxzbyBnZW5lcmljX2FjY2Vzc19waHlzKCkgZm9yIGEgZ2VuZXJpY1xudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODYtXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MDkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBBY2Nlc3MgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzIHdvcmtzIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBpbnZvbHZlZCB3aXRoIHRoaW5ncyBsaWtlIGAvZGV2L21lbWAgbW1hcCBvcGVyYXRpb25zIGluIGBkcml2ZXJzL2NoYXIvbWVtLmNgLCBQQ0kgbWVtb3J5IG1hcHBpbmcgaW4gYGRyaXZlcnMvcGNpL21tYXAuY2AsIGFuZCBsaWtlbHkgVUlPLiBJJiMzOTttIHNlZWluZyBhIGNvbm5lY3Rpb24gdG8gYGFjY2Vzc19wcm9jZXNzX3ZtYCwgYHB0cmFjZWAsIGFuZCBgL3Byb2MvcGlkL21lbWAgYmVjYXVzZSB0aGVzZSBhbGwgYXR0ZW1wdCB0byByZWFkL3dyaXRlIG1lbW9yeSB0aGF0JiMzOTtzIGJlZW4gbWFwcGVkIHRvIGAvZGV2L21lbWAgb3IgUENJIEkvTyBtZW1vcnkuIFRoZSB0cmFpbCBsZWFkcyB0aHJvdWdoIGBhY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYF9fYWNjZXNzX3JlbW90ZV92bWAgYW5kIGV2ZW50dWFsbHkgaGl0cyBgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2VzcyguLi4pYC4gVGhhdCYjMzk7cyB0aGUgY29yZS4gTm93IEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IGBIQVZFX0lPUkVNQVBfUFJPVGAgaXMgZGVmaW5lZCBpbiBLY29uZmlnLiBJdCYjMzk7cyBhbHNvIHdvcnRoIG15IHRpbWUgdG8gbG9vayBhdCBob3cgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGl0c2VsZiBpcyBndWFyZGVkIHdpdGhpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyBhbmQgcHJvdGVjdGlvbnMgc3Vycm91bmRpbmcgdGhpcywgYW5kIGhvdyBpdCBoYW5kbGVzIHZhcmlvdXMgbWVtb3J5IHR5cGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XG5kcml2ZXJzL2NkeC9jZHguYzo2NjM6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jZHgvY2R4LmMtNjY0LVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcbmRyaXZlcnMvY2hhci9tZW0uYzozMjA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy9jaGFyL21lbS5jLTMyMS1cdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXG4tLVxuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jPTgwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFmdV92bWFfb3BzID0ge1xuZHJpdmVycy9mcGdhL2RmbC1hZnUtbWFpbi5jOjgwNjojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA3LVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG4tLVxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xuZHJpdmVycy9wY2kvbW1hcC5jOjE5OiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcbmRyaXZlcnMvcGNpL21tYXAuYy0yMC1cdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxuLS1cbmRyaXZlcnMvdWlvL3Vpby5jPTczNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb19waHlzaWNhbF92bV9vcHMgPSB7XG5kcml2ZXJzL3Vpby91aW8uYzo3Mzc6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuZHJpdmVycy91aW8vdWlvLmMtNzM4LVx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXG4tLVxubW0vbWVtb3J5LmM9Njk1MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XG5tbS9tZW1vcnkuYy02OTUyLVxubW0vbWVtb3J5LmM6Njk1MzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXG5tbS9tZW1vcnkuYy02OTU0LS8qKlxuLS1cbm1tL21lbW9yeS5jPTcwMjY9c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy03MDY5LVx0XHRcdGJ5dGVzID0gMDtcbm1tL21lbW9yeS5jOjcwNzA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxubW0vbWVtb3J5LmMtNzA3MS1cdFx0XHRpZiAodm1hLVx1MDAzZXZtX29wcyBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3MpXG4tLVxubW0vbWVtb3J5LmM9NzE1MD1zdGF0aWMgaW50IF9fY29weV9yZW1vdGVfdm1fc3RyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtNzE3OS1cdFx0XHQgKiBUcmVhdCBhcyBhIHRvdGFsIGZhaWx1cmUgZm9yIG5vdyB1bnRpbCB3ZSBkZWNpZGUgaG93XG5tbS9tZW1vcnkuYzo3MTgwOlx0XHRcdCAqIHRvIGhhbmRsZSB0aGUgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGNhc2UgYW5kXG5tbS9tZW1vcnkuYy03MTgxLVx0XHRcdCAqIHN0YWNrIGV4cGFuc2lvbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBIQVZFX0lPUkVNQVBfUFJPVGAgbWFjcm8gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2VzOiB0aGUgYGFyY2gvYCBkaXJlY3RvcmllcywgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgdGhhdCBjb250cm9sIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9yIGZlYXR1cmUtZmxhZyBkZWZpbml0aW9ucyByZXNpZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGVmaW5lLCBpbiB0aGlzIGNvbnRleHQsIHRvIGNvbnRpbnVlIG15IHdvcmsuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhyb3VnaCB0aGUgY29tbW9uIGxvY2F0aW9ucyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBVkVfSU9SRU1BUF9QUk9UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MjU4PWNvbmZpZyBVU0VSX1JFVFVSTl9OT1RJRklFUlxuLS1cbmFyY2gvS2NvbmZpZy0yNjQtXG5hcmNoL0tjb25maWc6MjY1OmNvbmZpZyBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9LY29uZmlnLTI2Ni1cdGJvb2xcbi0tXG5hcmNoL2FyYy9LY29uZmlnPTY9Y29uZmlnIEFSQ1xuLS1cbmFyY2gvYXJjL0tjb25maWctMzgtXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xuYXJjaC9hcmMvS2NvbmZpZzozOTpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9hcmMvS2NvbmZpZy00MC1cdHNlbGVjdCBIQVZFX0tFUk5FTF9HWklQXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTIwOS1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcbmFyY2gvYXJtNjQvS2NvbmZpZzoyMTA6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMTEtXHRzZWxlY3QgSEFWRV9JUlFfVElNRV9BQ0NPVU5USU5HXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1Ny1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU4Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1OS1cdHNlbGVjdCBIQVZFX0lSUV9FWElUX09OX0lSUV9TVEFDS1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy03Ni1cdHNlbGVjdCBIQVZFX0dDQ19QTFVHSU5TXG5hcmNoL21pcHMvS2NvbmZpZzo3NzpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxuYXJjaC9taXBzL0tjb25maWctNzgtXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI2Mi1cdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcdFx0aWYgUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IChQUENfQk9PSzNTIHx8IFBQQ184eHgpXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyNjM6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTI2NC1cdHNlbGVjdCBIQVZFX0lSUV9USU1FX0FDQ09VTlRJTkdcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTExNS1cdHNlbGVjdCBHRU5FUklDX0lPUkVNQVAgaWYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWc6MTE2Olx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTExNy1cdHNlbGVjdCBHRU5FUklDX0lSUV9JUEkgaWYgU01QXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0yMTgtXHRzZWxlY3QgSEFWRV9HRU5FUklDX1ZEU09cbmFyY2gvczM5MC9LY29uZmlnOjIxOTpcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBQQ0lcbmFyY2gvczM5MC9LY29uZmlnLTIyMC1cdHNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMlxuLS1cbmFyY2gvc2gvS2NvbmZpZz0yPWNvbmZpZyBTVVBFUkhcbi0tXG5hcmNoL3NoL0tjb25maWctNDMtXHRzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UXG5hcmNoL3NoL0tjb25maWc6NDQ6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VIFx1MDAyNlx1MDAyNiAhWDJUTEJcbmFyY2gvc2gvS2NvbmZpZy00NS1cdHNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMlxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMjQ4LVx0c2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVFxuYXJjaC94ODYvS2NvbmZpZzoyNDk6XHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcbmFyY2gveDg2L0tjb25maWctMjUwLVx0c2VsZWN0IEhBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLXHRpZiBYODZfNjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEkvTyBSZW1hcHBpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBgSEFWRV9JT1JFTUFQX1BST1RgIHNlbGVjdGlvbiwgd2hpY2ggaXMgdXNlZCBhY3Jvc3MgdmFyaW91cyBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2LCBhcm02NCwgYW5kIG90aGVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24uIExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKRmlyc3QsIHRoZXkmIzM5O3JlIHVzaW5nIGBtaW5fdGAgdG8gbGltaXQgdGhlIGFjY2VzcyBsZW5ndGguIGBsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtgIFRoYXQgbWFrZXMgc2Vuc2UuIFdlIGRvbiYjMzk7dCB3YW50IHRvIG92ZXJmbG93IHRoZSBwYWdlLgoKU2Vjb25kLCB0aGUgaW50ZXJlc3RpbmcgYml0OiB0aGV5JiMzOTt2ZSByZXBsYWNlZCBhIGBQQUdFX0FMSUdOYCBvcGVyYXRpb24gd2l0aCBgaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtgLiBJbml0aWFsbHksIGl0IHNlZW1zIHRoYXQgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBhbGlnbm1lbnQgbGVuZ3RoLCB3aGVyZSBpdCB3YXMgYWxpZ25pbmcgdG8gdGhlIG5leHQgcGFnZSBib3JkZXIuIFRoZSBgaW9yZW1hcF9wcm90YCBjYWxsIHNwZWNpZmljYWxseSBtYXBzIGEgc2luZ2xlIHBhZ2UgaW5zdGVhZCwgdG8gYWxpZ24gdG8gd2hhdCBpcyBuZWVkZWQuCgpGaW5hbGx5LCB0aGUgYWRkZWQgY2hlY2sgaXMgaW1wb3J0YW50LiBUaGlzIGxpbmU6IGAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQpKWAgKGFkZGVkIGNhc3QgdG8gcHJldmVudCAzMi1iaXQgb3ZlcmZsb3cgLyBmaXggdHlwZSkuIFRoaXMgY2FzdCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcHJldmVudCBhIDMyLWJpdCBvdmVyZmxvdyBpc3N1ZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGZyb20gdGhlIHBhZ2UgZnJhbWUgbnVtYmVyLCBtYWtpbmcgdGhlIGNvbXBhcmlzb24gcm9idXN0LiBJdCYjMzk7cyBhIGNsZWFuIHdheSB0byBlbnN1cmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWF0Y2hlcyB3aGF0JiMzOTtzIGV4cGVjdGVkIGdpdmVuIHRoZSBgYXJncy5wZm5gLgoKTm93LCBJIG5lZWQgdG8gdHJhY2UgaG93IGBfX2FjY2Vzc19yZW1vdGVfdm1gIGludGVyYWN0cyB3aXRoIHRoaXMgYHZtYS0mZ3Q7dm1fb3BzLSZndDthY2Nlc3NgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgb3BlcmF0aW9ucyB1c2UgdGhpcyByZW1hcHBlZCByZWdpb24uIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoaXMgY29udGV4dCBmb3IgdGhlIGFjY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzAyNTpcdCAqL1xuNzAyNjpcdHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MDI3Olx0XHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuNzAyODpcdHtcbjcwMjk6XHRcdHZvaWQgKm9sZF9idWYgPSBidWY7XG43MDMwOlx0XHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEU7XG43MDMxOlx0XG43MDMyOlx0XHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxuNzAzMzpcdFx0XHRyZXR1cm4gMDtcbjcwMzQ6XHRcbjcwMzU6XHRcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cbjcwMzY6XHRcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XG43MDM3Olx0XG43MDM4Olx0XHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXG43MDM5Olx0XHRpZiAoIXZtYV9sb29rdXAobW0sIGFkZHIpIFx1MDAyNlx1MDAyNiAhZXhwYW5kX3N0YWNrKG1tLCBhZGRyKSlcbjcwNDA6XHRcdFx0cmV0dXJuIDA7XG43MDQxOlx0XG43MDQyOlx0XHQvKiBpZ25vcmUgZXJyb3JzLCBqdXN0IGNoZWNrIGhvdyBtdWNoIHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgKi9cbjcwNDM6XHRcdHdoaWxlIChsZW4pIHtcbjcwNDQ6XHRcdFx0aW50IGJ5dGVzLCBvZmZzZXQ7XG43MDQ1Olx0XHRcdHZvaWQgKm1hZGRyO1xuNzA0NjpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNzA0NzpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XG43MDQ4Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxuNzA0OTpcdFx0XHRcdFx0XHRcdFx0ICAgICBndXBfZmxhZ3MsIFx1MDAyNnZtYSk7XG43MDUwOlx0XG43MDUxOlx0XHRcdGlmIChJU19FUlIocGFnZSkpIHtcbjcwNTI6XHRcdFx0XHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXG43MDUzOlx0XHRcdFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG43MDU0Olx0XHRcdFx0aWYgKCF2bWEpIHtcbjcwNTU6XHRcdFx0XHRcdHZtYSA9IGV4cGFuZF9zdGFjayhtbSwgYWRkcik7XG43MDU2Olx0XG43MDU3Olx0XHRcdFx0XHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xuNzA1ODpcdFx0XHRcdFx0aWYgKCF2bWEpXG43MDU5Olx0XHRcdFx0XHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRcdFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cbjcwNjI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNzA2MzpcdFx0XHRcdH1cbjcwNjQ6XHRcbjcwNjU6XHRcdFx0XHQvKlxuNzA2NjpcdFx0XHRcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXG43MDY3Olx0XHRcdFx0ICogd2UgY2FuIGFjY2VzcyB1c2luZyBzbGlnaHRseSBkaWZmZXJlbnQgY29kZS5cbjcwNjg6XHRcdFx0XHQgKi9cbjcwNjk6XHRcdFx0XHRieXRlcyA9IDA7XG43MDcwOlx0I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuNzA3MTpcdFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbjcwNzI6XHRcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG43MDczOlx0XHRcdFx0XHRcdFx0XHQgICAgbGVuLCB3cml0ZSk7XG43MDc0Olx0I2VuZGlmXG43MDc1Olx0XHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbjcwNzY6XHRcdFx0XHRcdGJyZWFrO1xuNzA3NzpcdFx0XHR9IGVsc2Uge1xuNzA3ODpcdFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbjcwNzk6XHRcdFx0XHRieXRlcyA9IGxlbjtcbjcwODA6XHRcdFx0XHRvZmZzZXQgPSBhZGRyIFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xuNzA4MTpcdFx0XHRcdGlmIChieXRlcyBcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcbjcwODI6XHRcdFx0XHRcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcbjcwODM6XHRcbjcwODQ6XHRcdFx0XHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XG43MDg1Olx0XHRcdFx0aWYgKHdyaXRlKSB7XG43MDg2Olx0XHRcdFx0XHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MDg3Olx0XHRcdFx0XHRcdFx0ICBtYWRkciAmIzQzOyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpO1xuNzA4ODpcdFx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eV9sb2NrKGZvbGlvKTtcbjcwODk6XHRcdFx0XHR9IGVsc2Uge1xuNzA5MDpcdFx0XHRcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MDkxOlx0XHRcdFx0XHRcdFx0ICAgIGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBieXRlcyk7XG43MDkyOlx0XHRcdFx0fVxuNzA5MzpcdFx0XHRcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xuNzA5NDpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBtbS9tZW1vcnkuY2AgLSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AqKgoKT2theSwgaGVyZSB3ZSBnbywgZGlnZ2luZyBpbnRvIGBtbS9tZW1vcnkuY2AuIFRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7SXMgdGhpcyByZWFjaGFibGUgYW5kIHRoZXJlZm9yZSwgd29ydGggbXkgdGltZSBmdXp6aW5nPyYjMzQ7IExvb2tpbmcgYXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpcyBkZWZpbml0ZWx5IGluIHNjb3BlLiBUaGF0JiMzOTtzIGEgZ3JlZW4gbGlnaHQuCgpOb3csIGlzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBUaGlua2luZyB0aHJvdWdoIHRoZSBjb21tb24gYXR0YWNrIHN1cmZhY2UsIGAvZGV2L21lbWAgbGVhcHMgdG8gbWluZCwgZXNwZWNpYWxseSBpZiBgQ09ORklHX0RFVk1FTWAgaXMgZW5hYmxlZC4gQSB1c2VyIHByb2Nlc3MgY2FuIG9wZW4gYC9kZXYvbWVtYCwgYG1tYXAoKWAgdGhhdCBzdWNrZXIsIGFuZCB0aGVuIHVzZSB0b29scyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCwgYHByb2Nlc3Nfdm1fd3JpdGV2YCwgYHB0cmFjZWAgY2FsbHMsIG9yIGV2ZW4gbWVzcyB3aXRoIGAvcHJvYy8mbHQ7cGlkJmd0Oy9tZW1gIHRvIHJlYWQgb3Igd3JpdGUgdGhlIG1hcHBlZCBtZW1vcnkuIFRoaXMgaXMgY2xhc3NpYyEgQW55IG90aGVyIGBhY2Nlc3NfcmVtb3RlX3ZtYCBjYWxsZXIgaXMgaW4gc2NvcGUgdG9vLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBub3QganVzdCBgQ09ORklHX0RFVk1FTWA7IGBDT05GSUdfVUlPYCBhbHNvIG9wZW5zIGRvb3JzLCBhbmQgZXZlbiBqdXN0IGBDT05GSUdfTU1VYCBvciwgY3J1Y2lhbGx5LCBgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UYC4gSGFuZyBvbiwgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAgaXMgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJvb2xlYW4sIHNlbGVjdGVkIGJ5IHNvbWV0aGluZyBsaWtlIFg4Ni4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNvdXJjZS4KCk9rYXksIGluc2lkZSBgbW0vbWVtb3J5LmNgLCB0aGVyZSBpdCBpcyEgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIGd1YXJkZWQgYnkgdGhhdCBgI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAuIEFuZCwganVzdCB0byBiZSBzdXJlLCBgL2Rldi9tZW1gIGl0c2VsZiB1dGlsaXplcyBgREVWTUVNYC4gTGV0JiMzOTtzIHRha2UgYSBxdWljayBwZWFrIGF0IGBkcml2ZXJzL2NoYXIvbWVtLmNgIHRvIGNvbmZpcm0gdGhlIGZsb3cuIEdvb2Qgc3R1ZmYsIHRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1hcF9tZW1fb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2hhci9tZW0uYz0zMTM9c3RhdGljIGlubGluZSBpbnQgcHJpdmF0ZV9tYXBwaW5nX29rKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jLTMxOC1cbmRyaXZlcnMvY2hhci9tZW0uYzozMTk6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7XG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIwLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Rcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzI1PXN0YXRpYyBpbnQgbW1hcF9tZW1fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbmRyaXZlcnMvY2hhci9tZW0uYy0zNTUtXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzU2Olx0ZGVzYy1cdTAwM2V2bV9vcHMgPSBcdTAwMjZtbWFwX21lbV9vcHM7XG5kcml2ZXJzL2NoYXIvbWVtLmMtMzU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcwMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19ERVZNRU0gaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYENPTkZJR19ERVZNRU1gIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBmdW5jdGlvbiB3aGljaCBJIGFscmVhZHkga25vdyBpcyByZWxhdGVkIHRvIGFsbG93aW5nIGRpcmVjdCBtZW1vcnkgYWNjZXNzLCBpcyB0byBjaGVjayB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhhdCBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFNvLCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2NoYXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLCBhbmQgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhpcyBvcHRpb24mIzM5O3MgbGlrZWx5IHR1Y2tlZCBpbiB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLi4uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZNRU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jaGFyL0tjb25maWc9MjQ5PWNvbmZpZyBOU0NfR1BJT1xuLS1cbmRyaXZlcnMvY2hhci9LY29uZmlnLTI1OC1cbmRyaXZlcnMvY2hhci9LY29uZmlnOjI1OTpjb25maWcgREVWTUVNXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0Oy9kZXYvbWVtIHZpcnR1YWwgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzcKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdCBTdW1tYXJ5KioKCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGlzIGZ1enppbmcgYW5hbHlzaXMuIEZpcnN0LCBjb25maXJtaW5nIGBIQVZFX0lPUkVNQVBfUFJPVGA6IHRoYXQmIzM5O3MgYXV0b21hdGljYWxseSBlbmFibGVkIG9uIGFtZDY0IHRoYW5rcyB0byBgQ09ORklHX1g4NmAsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLiBOZXh0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgYXJlIGNsZWFyLiBgREVWTUVNYCBpcyB0aGUga2V5LCBhbmQgaXQmIzM5O3MgcmlnaHQgd2hlcmUgd2UgZXhwZWN0IGl0IGluIGBkcml2ZXJzL2NoYXIvS2NvbmZpZ2AuIGBDT05GSUdfVUlPYCBpcyBhbHNvIHByZXNlbnQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gYERFVk1FTWAgKmlzKiBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIHJpZ2h0PyBZZXAsIHRoYXQmIzM5O3MgYSBzb2xpZCBlbmFibGUuCgpOb3csIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCYjMzk7cyB0aGUgYmVzdCB0YXJnZXQgZnVuY3Rpb24/IGBnZW5lcmljX2FjY2Vzc19waHlzYCBqdW1wcyBvdXQuIFRoYXQmIzM5O3MgKnRoZSogZnVuY3Rpb24gbW9kaWZpZWQgaW4gYG1tL21lbW9yeS5jYC4gQnV0IGlzIGl0IHRoZSAqcmlnaHQqIG9uZT8gSXMgaXQgdWJpcXVpdG91cywgb3IgaXMgaXQgc3BlY2lmaWM/IEFoLCBpdCYjMzk7cyBzcGVjaWZpYy4gSXQmIzM5O3Mgb25seSBoaXQgd2hlbiBkZWFsaW5nIHdpdGggcmVtb3RlIFZNIGFjY2VzcyB1c2luZyBub24tcGFnZS1iYXNlZCBWTUFzIOKAkyBsaWtlLCBzYXksIGAvZGV2L21lbWAgb3IgcGh5c2ljYWwgbWFwcGluZ3MuIENvdWxkIHdlIGJyb2FkZW4gdGhlIG5ldCB0byBpbmNsdWRlIHNvbWV0aGluZyBsaWtlIGBfX2FjY2Vzc19yZW1vdGVfdm1gLCBgYWNjZXNzX3JlbW90ZV92bWAsIG9yIGBhY2Nlc3NfcHJvY2Vzc192bWA/IFBvc3NpYmx5LCBidXQgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIHRoZSBvbmUgKmRpcmVjdGx5KiBhbHRlcmVkLCBzbyBsZXQmIzM5O3Mgc3RpY2sgd2l0aCB0aGF0IGZvciBub3cuIEFuZCBubyBvdGhlciBmdW5jdGlvbnMgaW4gYG1tL21lbW9yeS5jYCB3ZXJlIGNoYW5nZWQsIHNvIHdlIGFyZSBnb29kLgoKTGV0JiMzOTtzIHJldmlldyB0aGUgRm9jdXNTeW1ib2xzIHJ1bGVzLiAmIzM0O1NwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LiYjMzQ7IGBnZW5lcmljX2FjY2Vzc19waHlzYCAqbmFpbGVkKiBpdC4gSXQmIzM5O3Mgbm9uLXViaXF1aXRvdXMsIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgc3BlY2lmaWNhbGx5IGltcGxlbWVudHMgdGhlIGxvZ2ljIGJlaW5nIGFsdGVyZWQuIFRoaXMgaXMgYSBwZXJmZWN0IGZpdC4KCkNhbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agc3RhbmQgYWxvbmUgYXMgdGhlIGZvY3VzIHN5bWJvbD8gQWJzb2x1dGVseSwgeWVzLCBpdCYjMzk7cyBpZGVhbC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBhbGwgb3VyIGNyaXRlcmlhIGFyZSBtZXQuCgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUsIG5vIHF1ZXN0aW9uLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgREVWTUVNYCAob3IgZW1wdHkvREVWTUVNLCBhcyBoYXZpbmcgJiMzNDtERVZNRU0mIzM0OyBlbmFibGVzIC9kZXYvbWVtIHdoaWNoIGlzIHRoZSBwcmltYXJ5IHVzZXIgb2YgYGdlbmVyaWNfYWNjZXNzX3BoeXNgKS4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuCiogICBgUmVhc29uaW5nYDogQ29uY2lzZSwgc3BlY2lmaWMgZXhwbGFuYXRpb24gb2YgdGhlIGZ1enppbmcgdmVyZGljdDogVGhpcyBpcyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKT2theSwgdGhhdCYjMzk7cyBhbGwgdGhlIGluZm8gd2UgbmVlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX2FjY2Vzc19waHlzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1vcnkuYykgdG8gY29uc3RyYWluIHBoeXNpY2FsIGFjY2VzcyBsZW5ndGhzIHRvIHNpbmdsZS1wYWdlIGJvdW5kYXJpZXMgYW5kIGZpeCB0eXBlIGNhc3RpbmcgZm9yIFBGTiBzaGlmdHMuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlbW90ZSBWTSBhY2Nlc3MgKGUuZy4sIHZpYSBwdHJhY2UsIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2LCBvciAvcHJvYy8kcGlkL21lbSkgdG8gcGh5c2ljYWwgSS9PIG1hcHBpbmdzIHN1Y2ggYXMgL2Rldi9tZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVk1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbW9yeS5jKSB0byBjb25zdHJhaW4gcGh5c2ljYWwgYWNjZXNzIGxlbmd0aHMgdG8gc2luZ2xlLXBhZ2UgYm91bmRhcmllcyBhbmQgZml4IHR5cGUgY2FzdGluZyBmb3IgUEZOIHNoaWZ0cy4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVtb3RlIFZNIGFjY2VzcyAoZS5nLiwgdmlhIHB0cmFjZSwgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYsIG9yIC9wcm9jLyRwaWQvbWVtKSB0byBwaHlzaWNhbCBJL08gbWFwcGluZ3Mgc3VjaCBhcyAvZGV2L21lbSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpOlxuMS4gSXQgY2xhbXBzICYjMzk7bGVuJiMzOTsgdG8gJiMzOTtQQUdFX1NJWkUgLSBvZmZzZXQmIzM5OyBhbmQgcmVkdWNlcyB0aGUgaW9yZW1hcF9wcm90KCkgbWFwcGluZyBzaXplIHRvIFBBR0VfU0laRSBiZWNhdXNlIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBvbmx5IHJlc29sdmVzIGFuZCB2YWxpZGF0ZXMgYSBzaW5nbGUgcGFnZS9QRk4gYXQgYSB0aW1lLlxuMi4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBzaGlmdCBvdmVyZmxvdyB3aGVuIGNvbXBhcmluZyBwaHlzX2FkZHIgYWdhaW5zdCBhcmdzLnBmbiBieSBjYXN0aW5nIGFyZ3MucGZuIHRvIHJlc291cmNlX3NpemVfdC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGJvdW5kcyBhbmQgYXJpdGhtZXRpYyB0eXBlIHNpemluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjb25jZXJucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MzAxOGI4Nzg5YTBhYTlkNGQxNTI1NDA4ZWZhNjQwODU2Mjk0NmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwNDowODowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZmYzMzhjMmFiZTkyMy4uNzRmZGYyOWM5YzdlOCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTY5NzQsNiAmIzQzOzY5NzQsMTIgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlib29sIHdyaXRhYmxlOwogCXN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07CiAKJiM0MzsJLyoKJiM0MzsJICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCYjMzk7cyB3aGF0IGZvbGxvd19wZm5tYXBfc3RhcnQoKQomIzQzOwkgKiBndWFyYW50ZWVzOyBleHBlY3QgdGhlIGNhbGxlciB0byByZXRyeSB0byByZWFkIGxhcmdlciByYW5nZXMuCiYjNDM7CSAqLwomIzQzOwlsZW4gPSBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKJiM0MzsKIHJldHJ5OgogCWlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KCZhbXA7YXJncykpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjk4NSw3ICYjNDM7Njk5MSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJaWYgKCh3cml0ZSAmYW1wOyBGT0xMX1dSSVRFKSAmYW1wOyZhbXA7ICF3cml0YWJsZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltYWRkciA9IGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfQUxJR04obGVuICYjNDM7IG9mZnNldCksIHByb3QpOwomIzQzOwltYWRkciA9IGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfU0laRSwgcHJvdCk7CiAJaWYgKCFtYWRkcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTY5OTMsNyAmIzQzOzY5OTksNyBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlnb3RvIG91dF91bm1hcDsKIAogCWlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHwKLQkgICAgKHBoeXNfYWRkciAhPSAoYXJncy5wZm4gJmx0OyZsdDsgUEFHRV9TSElGVCkpIHx8CiYjNDM7CSAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQpKSB8fAogCSAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHsKIAkJZm9sbG93X3Bmbm1hcF9lbmQoJmFtcDthcmdzKTsKIAkJaW91bm1hcChtYWRkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggYW5kIGRlY2lkZSBpZiB3ZSBuZWVkIEtNU0FOIGZ1enppbmcgaW4gYWRkaXRpb24gdG8gdGhlIGV4aXN0aW5nIEtBU0FOIGZ1enppbmcuIExldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2ggc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhpcyByZXF1ZXN0IGFnYWluc3Qgb3VyIHNhZmV0eSBhbmQgZHVhbC11c2UgZ3VpZGVsaW5lcy4gVGhpcyBsb29rcyBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIHNvZnR3YXJlIG1haW50ZW5hbmNlLCBwYXRjaCByZXZpZXcsIHNwZWNpZmljYWxseSBjaG9vc2luZyBhIG1lbW9yeSBzYW5pdGl6ZXIuIERlZmluaXRlbHkgYSBkZWZlbnNpdmUgYWN0aW9uLCBjb21wbGV0ZWx5IGJlbmlnbiwgZm9jdXNlZCBvbiBRQS4gTm8gcmVkIGZsYWdzIGhlcmUg4oCTIG5vIG1hbHdhcmUsIG5vIGV4cGxvaXQgZ2VuZXJhdGlvbiwgbm90aGluZyByZW1vdGVseSBtYWxpY2lvdXMuIERlZmluaXRlbHkgYSBiZW5pZ24vc2FmZSBjbGFzc2lmaWNhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSB0ZWNobmljYWwgZGV0YWlscy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGRpZmYgc2VlbXMgdG8gYmUgaW4gYG1tL21lbW9yeS5jYCwgYW5kIHNwZWNpZmljYWxseSB0aGUgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGZ1bmN0aW9uLiBJIHNob3VsZCBwdWxsIHVwIHRoZSBkaWZmIGFuZCByZWFsbHkgZGlnIGluLCBwcm9iYWJseSB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gc2VhcmNoIHdpdGhpbiBgbW0vbWVtb3J5LmNgIGZvciB0aGF0IGZ1bmN0aW9uLCBzbyBJIGNhbiBzZWUgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMgYW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZXZhbHVhdGlvbiBzdGFydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfYWNjZXNzX3BoeXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz02OTUxPUVYUE9SVF9TWU1CT0xfR1BMKGZvbGxvd19wZm5tYXBfZW5kKTtcbi0tXG5tbS9tZW1vcnkuYy02OTU0LS8qKlxubW0vbWVtb3J5LmM6Njk1NTogKiBnZW5lcmljX2FjY2Vzc19waHlzIC0gZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaW9tZW0gbW1hcCBhY2Nlc3Ncbm1tL21lbW9yeS5jLTY5NTYtICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3Ncbi0tXG5tbS9tZW1vcnkuYy02OTY1LSAqL1xubW0vbWVtb3J5LmM6Njk2NjppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtNjk2Ny1cdFx0XHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcbi0tXG5tbS9tZW1vcnkuYy03MDE5LX1cbm1tL21lbW9yeS5jOjcwMjA6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG5tbS9tZW1vcnkuYy03MDIxLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgRGVlcCBpbnRvIGBnZW5lcmljX2FjY2Vzc19waHlzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIFRpbWUgdG8gdW5kZXJzdGFuZCB0aGlzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBmdW5jdGlvbiBhbmQgaXRzIGNvbnRleHQgdGhvcm91Z2hseS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIGVudGlyZSBzb3VyY2UgY29kZSDigJMgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgaXRzIGNhbGxlcnMsIGFuZCB0aGUgY29kZSBzdXJyb3VuZGluZyBpdC4gSSB3YW50IHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBub3QganVzdCBzbmlwcGV0cy4gSSBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgKnN1cHBvc2VkKiB0byBiZSB1c2VkIGFuZCAqaG93KiBpdCYjMzk7cyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGluZGl2aWR1YWwgbGluZXM7IGl0JiMzOTtzIGFib3V0IHNlZWluZyB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEtub3dpbmcgdGhlIGZ1bGwgY29udGV4dCBpcyBjcnVjaWFsIGZvciBhIHJvYnVzdCBhbmFseXNpcy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncywgb3IgY2xldmVyIGltcGxlbWVudGF0aW9ucywgdGhhdCBhcmUgaW1tZWRpYXRlbHkgb2J2aW91cyB0byBhbiBleHBlcnQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBieSBleGFtaW5pbmcgYWxsIHRoZSByZWxhdGVkIGNvZGUgYXQgb25jZSwgSSBjYW4gbW9yZSBlZmZlY3RpdmVseSBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgYWxsIHdvcmtzIHRvZ2V0aGVyLCBhbmQgSSB3aWxsIGJlIGFibGUgdG8gbWFrZSBhIG1vcmUgYWNjdXJhdGUgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Njk1NDpcdC8qKlxuNjk1NTpcdCAqIGdlbmVyaWNfYWNjZXNzX3BoeXMgLSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBpb21lbSBtbWFwIGFjY2Vzc1xuNjk1NjpcdCAqIEB2bWE6IHRoZSB2bWEgdG8gYWNjZXNzXG42OTU3Olx0ICogQGFkZHI6IHVzZXJzcGFjZSBhZGRyZXNzLCBub3QgcmVsYXRpdmUgb2Zmc2V0IHdpdGhpbiBAdm1hXG42OTU4Olx0ICogQGJ1ZjogYnVmZmVyIHRvIHJlYWQvd3JpdGVcbjY5NTk6XHQgKiBAbGVuOiBsZW5ndGggb2YgdHJhbnNmZXJcbjY5NjA6XHQgKiBAd3JpdGU6IHNldCB0byBGT0xMX1dSSVRFIHdoZW4gd3JpdGluZywgb3RoZXJ3aXNlIHJlYWRpbmdcbjY5NjE6XHQgKlxuNjk2MjpcdCAqIFRoaXMgaXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBcdTAwMjZ2bV9vcGVyYXRpb25zX3N0cnVjdC5hY2Nlc3MgZm9yIGFuXG42OTYzOlx0ICogaW9tZW0gbWFwcGluZy4gVGhpcyBjYWxsYmFjayBpcyB1c2VkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtKCkgd2hlbiB0aGUgQHZtYSBpc1xuNjk2NDpcdCAqIG5vdCBwYWdlIGJhc2VkLlxuNjk2NTpcdCAqL1xuNjk2NjpcdGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG42OTY3Olx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXG42OTY4Olx0e1xuNjk2OTpcdFx0cmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkcjtcbjY5NzA6XHRcdHBncHJvdF90IHByb3QgPSBfX3BncHJvdCgwKTtcbjY5NzE6XHRcdHZvaWQgX19pb21lbSAqbWFkZHI7XG42OTcyOlx0XHRpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcik7XG42OTczOlx0XHRpbnQgcmV0ID0gLUVJTlZBTDtcbjY5NzQ6XHRcdGJvb2wgd3JpdGFibGU7XG42OTc1Olx0XHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xuNjk3NjpcdFxuNjk3NzpcdFx0LypcbjY5Nzg6XHRcdCAqIExpbWl0IGFjY2VzcyB0byBvbmUgcGFnZSBhdCBhIHRpbWUsIGFzIHRoYXQmIzM5O3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KClcbjY5Nzk6XHRcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cbjY5ODA6XHRcdCAqL1xuNjk4MTpcdFx0bGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7XG42OTgyOlx0XG42OTgzOlx0cmV0cnk6XG42OTg0Olx0XHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbjY5ODU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42OTg2Olx0XHRwcm90ID0gYXJncy5wZ3Byb3Q7XG42OTg3Olx0XHRwaHlzX2FkZHIgPSAocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuNjk4ODpcdFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xuNjk4OTpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG42OTkwOlx0XG42OTkxOlx0XHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuNjk5MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY5OTM6XHRcbjY5OTQ6XHRcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbjY5OTU6XHRcdGlmICghbWFkZHIpXG42OTk2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNjk5NzpcdFxuNjk5ODpcdFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG42OTk5Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xuNzAwMDpcdFxuNzAwMTpcdFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuNzAwMjpcdFx0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxuNzAwMzpcdFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xuNzAwNDpcdFx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbjcwMDU6XHRcdFx0aW91bm1hcChtYWRkcik7XG43MDA2Olx0XHRcdGdvdG8gcmV0cnk7XG43MDA3Olx0XHR9XG43MDA4Olx0XG43MDA5Olx0XHRpZiAod3JpdGUpXG43MDEwOlx0XHRcdG1lbWNweV90b2lvKG1hZGRyICYjNDM7IG9mZnNldCwgYnVmLCBsZW4pO1xuNzAxMTpcdFx0ZWxzZVxuNzAxMjpcdFx0XHRtZW1jcHlfZnJvbWlvKGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBsZW4pO1xuNzAxMzpcdFx0cmV0ID0gbGVuO1xuNzAxNDpcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG43MDE1Olx0b3V0X3VubWFwOlxuNzAxNjpcdFx0aW91bm1hcChtYWRkcik7XG43MDE3Olx0XG43MDE4Olx0XHRyZXR1cm4gcmV0O1xuNzAxOTpcdH1cbjcwMjA6XHRFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcbjcwMjE6XHQjZW5kaWZcbjcwMjI6XHRcbjcwMjM6XHQvKlxuNzAyNDpcdCAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MmIzM5OyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxuNzAyNTpcdCAqL1xuNzAyNjpcdHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MDI3Olx0XHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuNzAyODpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgYW5kIGBfX2FjY2Vzc19yZW1vdGVfdm1gKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBnZW5lcmljX2FjY2Vzc19waHlzYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGB2bV9vcHMtJmd0O2FjY2Vzc2AgY2FsbGJhY2sgdXNlZCBmb3IgSS9PIG1lbW9yeSBtYXBwaW5ncyDigJMgdGhpbmdzIGxpa2UgVXNlci1zcGFjZSBJL08gb3IgVmlydHVhbCBGdW5jdGlvbiBJL08sIHRoYXQga2luZCBvZiBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBfX2FjY2Vzc19yZW1vdGVfdm1gLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cuCgpMZXQgbWUgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBvcGVuIHVwIGBtbS9tZW1vcnkuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDcwMjYuIEhvcGVmdWxseSwgSSBjYW4gZmluZCB3aGVyZSBgdm1hLSZndDt2bV9vcHMtJmd0O2FjY2Vzc2AgaXMgY2FsbGVkIGZyb20gYF9fYWNjZXNzX3JlbW90ZV92bWAgYW5kIGhvdyB0aGF0IGNhbGwgaXMgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWNoYW5pY3Mgb2YgdGhlc2UgbWVtb3J5IGFjY2VzcyBvcGVyYXRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzAyNTpcdCAqL1xuNzAyNjpcdHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG43MDI3Olx0XHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuNzAyODpcdHtcbjcwMjk6XHRcdHZvaWQgKm9sZF9idWYgPSBidWY7XG43MDMwOlx0XHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXHUwMDI2IEZPTExfV1JJVEU7XG43MDMxOlx0XG43MDMyOlx0XHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxuNzAzMzpcdFx0XHRyZXR1cm4gMDtcbjcwMzQ6XHRcbjcwMzU6XHRcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cbjcwMzY6XHRcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XG43MDM3Olx0XG43MDM4Olx0XHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXG43MDM5Olx0XHRpZiAoIXZtYV9sb29rdXAobW0sIGFkZHIpIFx1MDAyNlx1MDAyNiAhZXhwYW5kX3N0YWNrKG1tLCBhZGRyKSlcbjcwNDA6XHRcdFx0cmV0dXJuIDA7XG43MDQxOlx0XG43MDQyOlx0XHQvKiBpZ25vcmUgZXJyb3JzLCBqdXN0IGNoZWNrIGhvdyBtdWNoIHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgKi9cbjcwNDM6XHRcdHdoaWxlIChsZW4pIHtcbjcwNDQ6XHRcdFx0aW50IGJ5dGVzLCBvZmZzZXQ7XG43MDQ1Olx0XHRcdHZvaWQgKm1hZGRyO1xuNzA0NjpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNzA0NzpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XG43MDQ4Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxuNzA0OTpcdFx0XHRcdFx0XHRcdFx0ICAgICBndXBfZmxhZ3MsIFx1MDAyNnZtYSk7XG43MDUwOlx0XG43MDUxOlx0XHRcdGlmIChJU19FUlIocGFnZSkpIHtcbjcwNTI6XHRcdFx0XHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXG43MDUzOlx0XHRcdFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG43MDU0Olx0XHRcdFx0aWYgKCF2bWEpIHtcbjcwNTU6XHRcdFx0XHRcdHZtYSA9IGV4cGFuZF9zdGFjayhtbSwgYWRkcik7XG43MDU2Olx0XG43MDU3Olx0XHRcdFx0XHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xuNzA1ODpcdFx0XHRcdFx0aWYgKCF2bWEpXG43MDU5Olx0XHRcdFx0XHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuNzA2MDpcdFxuNzA2MTpcdFx0XHRcdFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cbjcwNjI6XHRcdFx0XHRcdGNvbnRpbnVlO1xuNzA2MzpcdFx0XHRcdH1cbjcwNjQ6XHRcbjcwNjU6XHRcdFx0XHQvKlxuNzA2NjpcdFx0XHRcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXG43MDY3Olx0XHRcdFx0ICogd2UgY2FuIGFjY2VzcyB1c2luZyBzbGlnaHRseSBkaWZmZXJlbnQgY29kZS5cbjcwNjg6XHRcdFx0XHQgKi9cbjcwNjk6XHRcdFx0XHRieXRlcyA9IDA7XG43MDcwOlx0I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxuNzA3MTpcdFx0XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcylcbjcwNzI6XHRcdFx0XHRcdGJ5dGVzID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VhY2Nlc3Modm1hLCBhZGRyLCBidWYsXG43MDczOlx0XHRcdFx0XHRcdFx0XHQgICAgbGVuLCB3cml0ZSk7XG43MDc0Olx0I2VuZGlmXG43MDc1Olx0XHRcdFx0aWYgKGJ5dGVzIFx1MDAzYz0gMClcbjcwNzY6XHRcdFx0XHRcdGJyZWFrO1xuNzA3NzpcdFx0XHR9IGVsc2Uge1xuNzA3ODpcdFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbjcwNzk6XHRcdFx0XHRieXRlcyA9IGxlbjtcbjcwODA6XHRcdFx0XHRvZmZzZXQgPSBhZGRyIFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xuNzA4MTpcdFx0XHRcdGlmIChieXRlcyBcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcbjcwODI6XHRcdFx0XHRcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcbjcwODM6XHRcbjcwODQ6XHRcdFx0XHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XG43MDg1Olx0XHRcdFx0aWYgKHdyaXRlKSB7XG43MDg2Olx0XHRcdFx0XHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MDg3Olx0XHRcdFx0XHRcdFx0ICBtYWRkciAmIzQzOyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpO1xuNzA4ODpcdFx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eV9sb2NrKGZvbGlvKTtcbjcwODk6XHRcdFx0XHR9IGVsc2Uge1xuNzA5MDpcdFx0XHRcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXG43MDkxOlx0XHRcdFx0XHRcdFx0ICAgIGJ1ZiwgbWFkZHIgJiM0Mzsgb2Zmc2V0LCBieXRlcyk7XG43MDkyOlx0XHRcdFx0fVxuNzA5MzpcdFx0XHRcdGZvbGlvX3JlbGVhc2Vfa21hcChmb2xpbywgbWFkZHIpO1xuNzA5NDpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjMKCQkJCQkJCW91dHB1dDogMTk5CgkJCQkJCQl0aG91Z2h0czogMTA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEFjY2VzcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBfX2FjY2Vzc19yZW1vdGVfdm1gIGlzIGxvb3BpbmcsIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgYW5kIHRoZW4gYWR2YW5jaW5nIGJ1ZmZlcnMgYW5kIGxlbmd0aHMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZC4gVGhlIGtleSBoZXJlIGlzIHdoYXQgY2hhbmdlZCBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuICBJIHNlZSB0aHJlZSBjcml0aWNhbCBtb2RpZmljYXRpb25zOgoKMS4gIFdlJiMzOTt2ZSBsaW1pdGVkIGFjY2VzcyB0byBvbmUgcGFnZSBhdCBhIHRpbWUuIFRoaXMgbWFrZXMgc2Vuc2U7IGBmb2xsb3dfcGZubWFwX3N0YXJ0KClgIG9ubHkgZ3VhcmFudGVlcyBhIHNpbmdsZSBwYWdlJiMzOTtzIGludGVncml0eSwgc28gaGFuZGxpbmcgbXVsdGktcGFnZSBvcGVyYXRpb25zIHJlcXVpcmVzIHJldHJ5aW5nIG9uIHRoZSBjYWxsZXImIzM5O3MgZW5kLCBhbmQgdGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLgoyLiAgYGlvcmVtYXBfcHJvdGAgbm93IGNvbnNpc3RlbnRseSBtYXBzIGBQQUdFX1NJWkVgIGluc3RlYWQgb2YgZHluYW1pY2FsbHkgYWxpZ25pbmcgYmFzZWQgb24gbGVuZ3RoLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCjMuICBBIDMyLWJpdCBzaGlmdCBvdmVyZmxvdyBhbmQgdHlwZSBjYXN0IGlzc3VlIHdpdGggYGFyZ3MucGZuICZsdDsmbHQ7IFBBR0VfU0hJRlRgIHdhcyBhZGRyZXNzZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBidWcgZml4LCBlbnN1cmluZyBwcm9wZXIgcGh5c2ljYWwgYWRkcmVzcyBjYWxjdWxhdGlvbiwgZXNwZWNpYWxseSBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcyB3aXRoIGxhcmdlIHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9ucy4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWxpZ25pbmcgdGhlIGFjY2VzcyBzaXplIHdpdGggd2hhdCBgZm9sbG93X3Bmbm1hcF9zdGFydGAgY2FuIHJlbGlhYmx5IHZhbGlkYXRlLiAgUHJldmlvdXNseSwgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGNvdWxkIG1hcCBhbmQgY29weSBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgcGFnZSB0aGF0IHdhcyBjaGVja2VkLiBgZm9sbG93X3Bmbm1hcF9zdGFydGAgb25seSB2ZXJpZmllcyBvbmUgUFRFL1BGTi4gTm93LCBjbGFtcGluZyBgbGVuYCB0byB0aGUgcGFnZSBzaXplIHJlc3RyaWN0cyB0aGUgYWNjZXNzIGFuZCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIEl0IGVuc3VyZXMgd2UmIzM5O3JlIG9ubHkgb3BlcmF0aW5nIHdpdGhpbiB0aGUgc2luZ2xlIHBhZ2UgdGhhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuIFRoaXMsIGNvbWJpbmVkIHdpdGggdGhlIGBQQUdFX1NJWkVgIHJlbWFwcGluZyBhbmQgdGhlIG92ZXJmbG93IGZpeCwgbWFrZXMgdGhpcyBhIHJvYnVzdCBzb2x1dGlvbi4KCk5vdywgbGV0JiMzOTtzIGV2YWx1YXRlIHRoaXMgYWdhaW5zdCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNyaXRlcmlhLiAgVGhlIGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgZm91ciBjb25kaXRpb25zLgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOiBObywgbm8ga2VybmVsIGRhdGEgaXMgYmVpbmcgbGVha2VkLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6ICBObywgVGhlIGBmb2xsb3dfcGZubWFwX2FyZ3NgIHN0cnVjdCBzZWVtcyB0byBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOiBObyBjb21wbGV4IGFsbG9jYXRpb25zIG9jY3VyLgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCByZWFkczogV2l0aCBgbWVtY3B5X3RvaW9gIHdyaXRpbmcgZnJvbSB0aGUgYnVmZmVyIGFuZCBgbWVtY3B5X2Zyb21pb2AgcmVhZGluZyBpbnRvIHRoZSBidWZmZXIsIGNsYW1waW5nIGBsZW5gICpyZXN0cmljdHMqIGFjY2VzcywgYXZvaWRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpcyB0aGUgZml4LiBUaGUgb3JpZ2luYWwsIHBvdGVudGlhbGx5IHVuYm91bmRlZCBjb3B5IGlzIG5vdyByZXN0cmljdGVkLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhpcyBwYXRjaCAqcHJldmVudHMqIHRoZSBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIEtNU0FOIGNvbmNlcm5zLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCB3ZXJlIHRoZXJlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIEtBU0FOIGlzc3Vlcy4gVGhpcyBpcyBhIGZpeCwgbm90IGEgbmV3IHZ1bG5lcmFiaWxpdHkuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gVGhlIHBhdGNoIGlzIHNvdW5kLiBJJiMzOTtsbCBwcm92aWRlIHRoZSBmaW5hbCByZXNwb25zZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpOlxuMS4gSXQgY2xhbXBzICYjMzk7bGVuJiMzOTsgdG8gJiMzOTtQQUdFX1NJWkUgLSBvZmZzZXQmIzM5OyBhbmQgcmVkdWNlcyB0aGUgaW9yZW1hcF9wcm90KCkgbWFwcGluZyBzaXplIHRvIFBBR0VfU0laRSBiZWNhdXNlIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBvbmx5IHJlc29sdmVzIGFuZCB2YWxpZGF0ZXMgYSBzaW5nbGUgcGFnZS9QRk4gYXQgYSB0aW1lLlxuMi4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBzaGlmdCBvdmVyZmxvdyB3aGVuIGNvbXBhcmluZyBwaHlzX2FkZHIgYWdhaW5zdCBhcmdzLnBmbiBieSBjYXN0aW5nIGFyZ3MucGZuIHRvIHJlc291cmNlX3NpemVfdC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGJvdW5kcyBhbmQgYXJpdGhtZXRpYyB0eXBlIHNpemluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjb25jZXJucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpOlxuMS4gSXQgY2xhbXBzICYjMzk7bGVuJiMzOTsgdG8gJiMzOTtQQUdFX1NJWkUgLSBvZmZzZXQmIzM5OyBhbmQgcmVkdWNlcyB0aGUgaW9yZW1hcF9wcm90KCkgbWFwcGluZyBzaXplIHRvIFBBR0VfU0laRSBiZWNhdXNlIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBvbmx5IHJlc29sdmVzIGFuZCB2YWxpZGF0ZXMgYSBzaW5nbGUgcGFnZS9QRk4gYXQgYSB0aW1lLlxuMi4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBzaGlmdCBvdmVyZmxvdyB3aGVuIGNvbXBhcmluZyBwaHlzX2FkZHIgYWdhaW5zdCBhcmdzLnBmbiBieSBjYXN0aW5nIGFyZ3MucGZuIHRvIHJlc291cmNlX3NpemVfdC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGJvdW5kcyBhbmQgYXJpdGhtZXRpYyB0eXBlIHNpemluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjb25jZXJucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MDEuOTg0ODUyMzU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1MTM4NzQ2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWTUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdHdvIGlzc3VlcyBpbiBnZW5lcmljX2FjY2Vzc19waHlzKCk6XFxuMS4gSXQgY2xhbXBzICdsZW4nIHRvICdQQUdFX1NJWkUgLSBvZmZzZXQnIGFuZCByZWR1Y2VzIHRoZSBpb3JlbWFwX3Byb3QoKSBtYXBwaW5nIHNpemUgdG8gUEFHRV9TSVpFIGJlY2F1c2UgZm9sbG93X3Bmbm1hcF9zdGFydCgpIG9ubHkgcmVzb2x2ZXMgYW5kIHZhbGlkYXRlcyBhIHNpbmdsZSBwYWdlL1BGTiBhdCBhIHRpbWUuXFxuMi4gSXQgZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciBzaGlmdCBvdmVyZmxvdyB3aGVuIGNvbXBhcmluZyBwaHlzX2FkZHIgYWdhaW5zdCBhcmdzLnBmbiBieSBjYXN0aW5nIGFyZ3MucGZuIHRvIHJlc291cmNlX3NpemVfdC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgd2l0aCBwaHlzaWNhbCBwYWdlIG1hcHBpbmcgYm91bmRzIGFuZCBhcml0aG1ldGljIHR5cGUgc2l6aW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBrZXJuZWwgc3RydWN0dXJlIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGNvbmNlcm5zIGFyZSBkZXRlY3RlZCBieSBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9tZW1vcnkuYykgdG8gY29uc3RyYWluIHBoeXNpY2FsIGFjY2VzcyBsZW5ndGhzIHRvIHNpbmdsZS1wYWdlIGJvdW5kYXJpZXMgYW5kIGZpeCB0eXBlIGNhc3RpbmcgZm9yIFBGTiBzaGlmdHMuIFRoaXMgcmVhY2hhYmxlIGNvZGUgcGF0aCBoYW5kbGVzIHJlbW90ZSBWTSBhY2Nlc3MgKGUuZy4sIHZpYSBwdHJhY2UsIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2LCBvciAvcHJvYy8kcGlkL21lbSkgdG8gcGh5c2ljYWwgSS9PIG1hcHBpbmdzIHN1Y2ggYXMgL2Rldi9tZW0gYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjAxLjk4NDg1ODA5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NzU3ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjQzMDE4Yjg3ODlhMGFhOWQ0ZDE1MjU0MDhlZmE2NDA4NTYyOTQ2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDowODowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggZmYzMzhjMmFiZTkyMy4uNzRmZGYyOWM5YzdlOCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTY5NzQsNiArNjk3NCwxMiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRib29sIHdyaXRhYmxlO1xcbiBcXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCdzIHdoYXQgZm9sbG93X3Bmbm1hcF9zdGFydCgpXFxuK1xcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cXG4rXFx0ICovXFxuK1xcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xcbitcXG4gcmV0cnk6XFxuIFxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTY5ODUsNyArNjk5MSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdGlmICgod3JpdGUgXFx1MDAyNiBGT0xMX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiAhd3JpdGFibGUpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX0FMSUdOKGxlbiArIG9mZnNldCksIHByb3QpO1xcbitcXHRtYWRkciA9IGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfU0laRSwgcHJvdCk7XFxuIFxcdGlmICghbWFkZHIpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtNjk5Myw3ICs2OTk5LDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0Z290byBvdXRfdW5tYXA7XFxuIFxcbiBcXHRpZiAoKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChhcmdzLnBncHJvdCkpIHx8XFxuLVxcdCAgICAocGh5c19hZGRyICE9IChhcmdzLnBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSkgfHxcXG4rXFx0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpIHx8XFxuIFxcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcXG4gXFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbiBcXHRcXHRpb3VubWFwKG1hZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MDIuNDcxMzQzOTI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTg0NTY2ODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbW9yeS5jKSB0byBjb25zdHJhaW4gcGh5c2ljYWwgYWNjZXNzIGxlbmd0aHMgdG8gc2luZ2xlLXBhZ2UgYm91bmRhcmllcyBhbmQgZml4IHR5cGUgY2FzdGluZyBmb3IgUEZOIHNoaWZ0cy4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVtb3RlIFZNIGFjY2VzcyAoZS5nLiwgdmlhIHB0cmFjZSwgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYsIG9yIC9wcm9jLyRwaWQvbWVtKSB0byBwaHlzaWNhbCBJL08gbWFwcGluZ3Mgc3VjaCBhcyAvZGV2L21lbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNDMwMThiODc4OWEwYWE5ZDRkMTUyNTQwOGVmYTY0MDg1NjI5NDZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDQ6MDg6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBmZjMzOGMyYWJlOTIzLi43NGZkZjI5YzljN2U4IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNjk3NCw2ICs2OTc0LDEyIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRib29sIHdyaXRhYmxlO1xuIFx0c3RydWN0IGZvbGxvd19wZm5tYXBfYXJncyBhcmdzID0geyAudm1hID0gdm1hLCAuYWRkcmVzcyA9IGFkZHIgfTtcbiBcbitcdC8qXG4rXHQgKiBMaW1pdCBhY2Nlc3MgdG8gb25lIHBhZ2UgYXQgYSB0aW1lLCBhcyB0aGF0J3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KClcbitcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cbitcdCAqL1xuK1x0bGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7XG4rXG4gcmV0cnk6XG4gXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcdTAwMjZhcmdzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtNjk4NSw3ICs2OTkxLDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmICgod3JpdGUgXHUwMDI2IEZPTExfV1JJVEUpIFx1MDAyNlx1MDAyNiAhd3JpdGFibGUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX0FMSUdOKGxlbiArIG9mZnNldCksIHByb3QpO1xuK1x0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xuIFx0aWYgKCFtYWRkcilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNjk5Myw3ICs2OTk5LDcgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0Z290byBvdXRfdW5tYXA7XG4gXG4gXHRpZiAoKHBncHJvdF92YWwocHJvdCkgIT0gcGdwcm90X3ZhbChhcmdzLnBncHJvdCkpIHx8XG4tXHQgICAgKHBoeXNfYWRkciAhPSAoYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxuK1x0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxuIFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xuIFx0XHRmb2xsb3dfcGZubWFwX2VuZChcdTAwMjZhcmdzKTtcbiBcdFx0aW91bm1hcChtYWRkcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODowMi40NzEzNDU0MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5OTAzNDM3OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggYW5kIEFmZmVjdGVkIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQsIGNydWNpYWxseSwgd2hlcmUgaXQncyBtYWtpbmcgY2hhbmdlcy4gUmlnaHQsIHNvIGl0J3MgdG91Y2hpbmcgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24uIE5vdywgYGdlbmVyaWNfYWNjZXNzX3BoeXNgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJJ2xsIHplcm8gaW4gYXJvdW5kIGxpbmUgNjk3NCBpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiBpbiBhY3Rpb24uIFdobydzIGNhbGxpbmcgaXQ/IFdoYXQgYXJlIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBkb2luZz8gR2V0dGluZyBhIGZlZWwgZm9yIHRoZSBjb250cm9sIGZsb3cgaXMgZXNzZW50aWFsLCBhcyBpcyB1bmRlcnN0YW5kaW5nIHRoZSAqd2h5KiBvZiB0aGlzIHBhcnRpY3VsYXIgbW9kaWZpY2F0aW9uLiBOZWVkIHRvIGJ1aWxkIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBiZWZvcmUgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MTIuMzc0Nzg1ODI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY5NjA6XFx0ICogQHdyaXRlOiBzZXQgdG8gRk9MTF9XUklURSB3aGVuIHdyaXRpbmcsIG90aGVyd2lzZSByZWFkaW5nXFxuNjk2MTpcXHQgKlxcbjY5NjI6XFx0ICogVGhpcyBpcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIFxcdTAwMjZ2bV9vcGVyYXRpb25zX3N0cnVjdC5hY2Nlc3MgZm9yIGFuXFxuNjk2MzpcXHQgKiBpb21lbSBtYXBwaW5nLiBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0oKSB3aGVuIHRoZSBAdm1hIGlzXFxuNjk2NDpcXHQgKiBub3QgcGFnZSBiYXNlZC5cXG42OTY1OlxcdCAqL1xcbjY5NjY6XFx0aW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG42OTY3OlxcdFxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKVxcbjY5Njg6XFx0e1xcbjY5Njk6XFx0XFx0cmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkcjtcXG42OTcwOlxcdFxcdHBncHJvdF90IHByb3QgPSBfX3BncHJvdCgwKTtcXG42OTcxOlxcdFxcdHZvaWQgX19pb21lbSAqbWFkZHI7XFxuNjk3MjpcXHRcXHRpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcik7XFxuNjk3MzpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG42OTc0OlxcdFxcdGJvb2wgd3JpdGFibGU7XFxuNjk3NTpcXHRcXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gYWRkciB9O1xcbjY5NzY6XFx0XFxuNjk3NzpcXHRcXHQvKlxcbjY5Nzg6XFx0XFx0ICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCdzIHdoYXQgZm9sbG93X3Bmbm1hcF9zdGFydCgpXFxuNjk3OTpcXHRcXHQgKiBndWFyYW50ZWVzOyBleHBlY3QgdGhlIGNhbGxlciB0byByZXRyeSB0byByZWFkIGxhcmdlciByYW5nZXMuXFxuNjk4MDpcXHRcXHQgKi9cXG42OTgxOlxcdFxcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xcbjY5ODI6XFx0XFxuNjk4MzpcXHRyZXRyeTpcXG42OTg0OlxcdFxcdGlmIChmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKSlcXG42OTg1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjY5ODY6XFx0XFx0cHJvdCA9IGFyZ3MucGdwcm90O1xcbjY5ODc6XFx0XFx0cGh5c19hZGRyID0gKHJlc291cmNlX3NpemVfdClhcmdzLnBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbjY5ODg6XFx0XFx0d3JpdGFibGUgPSBhcmdzLndyaXRhYmxlO1xcbjY5ODk6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjY5OTA6XFx0XFxuNjk5MTpcXHRcXHRpZiAoKHdyaXRlIFxcdTAwMjYgRk9MTF9XUklURSkgXFx1MDAyNlxcdTAwMjYgIXdyaXRhYmxlKVxcbjY5OTI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjk5MzpcXHRcXG42OTk0OlxcdFxcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcXG42OTk1OlxcdFxcdGlmICghbWFkZHIpXFxuNjk5NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG42OTk3OlxcdFxcbjY5OTg6XFx0XFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbjY5OTk6XFx0XFx0XFx0Z290byBvdXRfdW5tYXA7XFxuNzAwMDpcXHRcXG43MDAxOlxcdFxcdGlmICgocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKGFyZ3MucGdwcm90KSkgfHxcXG43MDAyOlxcdFxcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKSB8fFxcbjcwMDM6XFx0XFx0ICAgICh3cml0YWJsZSAhPSBhcmdzLndyaXRhYmxlKSkge1xcbjcwMDQ6XFx0XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcwMDU6XFx0XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzAwNjpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjcwMDc6XFx0XFx0fVxcbjcwMDg6XFx0XFxuNzAwOTpcXHRcXHRpZiAod3JpdGUpXFxuNzAxMDpcXHRcXHRcXHRtZW1jcHlfdG9pbyhtYWRkciArIG9mZnNldCwgYnVmLCBsZW4pO1xcbjcwMTE6XFx0XFx0ZWxzZVxcbjcwMTI6XFx0XFx0XFx0bWVtY3B5X2Zyb21pbyhidWYsIG1hZGRyICsgb2Zmc2V0LCBsZW4pO1xcbjcwMTM6XFx0XFx0cmV0ID0gbGVuO1xcbjcwMTQ6XFx0XFx0Zm9sbG93X3Bmbm1hcF9lbmQoXFx1MDAyNmFyZ3MpO1xcbjcwMTU6XFx0b3V0X3VubWFwOlxcbjcwMTY6XFx0XFx0aW91bm1hcChtYWRkcik7XFxuNzAxNzpcXHRcXG43MDE4OlxcdFxcdHJldHVybiByZXQ7XFxuNzAxOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjEyLjM3NTA3MTYzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODg3NzgyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBVc2FnZSBvZiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCogb3IgKnJlZmVyZW5jZWQqLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzIGZyYW1ld29yay4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzLCBvYnZpb3VzbHksIGJ1dCBhbHNvIGFueSBkYXRhIHN0cnVjdHVyZXMgb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCBpdC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGNhbGxzLCBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzLCBvciBtYXliZSBldmVuIHVzYWdlIHdpdGhpbiBtYWNyb3M/IFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpdHMgb3ZlcmFsbCBpbXBhY3QuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgLSBgZ3JlcGAsIGBjc2NvcGVgLCBgY2xhbmdkYCAtIHRvIHRyYWNrIGl0IGFsbCBkb3duLiBIb3BlZnVsbHksIHRoZSBuYW1pbmcgaXMgY2xlYXIgYW5kIEkgY2FuIG5hcnJvdyBkb3duIHRoZSBwb3RlbnRpYWxseSByZWxldmFudCBmaWxlcyBxdWlja2x5LiBUaGlzIHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBpbnZlc3RpZ2F0aW9uLCBidXQgeW91IG5ldmVyIGtub3cgd2hhdCBzdXJwcmlzZXMgdGhlIGtlcm5lbCBob2xkcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM3MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MTQuNDYzODUzODk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzUyNzMzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXJpY19hY2Nlc3NfcGh5c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9jZHgvY2R4LmMtNjYzLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NkeC9jZHguYzo2NjQ6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9jZHgvY2R4LmMtNjY1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jPTMxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHtcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzIwLSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzIxOlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzXFxuZHJpdmVycy9jaGFyL21lbS5jLTMyMi0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA2LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA3OlxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYy04MDgtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3BjaS9tbWFwLmM9MTg9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9wY2kvbW1hcC5jLTE5LSNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL3BjaS9tbWFwLmM6MjA6XFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuZHJpdmVycy9wY2kvbW1hcC5jLTIxLSNlbmRpZlxcbi0tXFxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3Vpby91aW8uYy03MzctI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvdWlvL3Vpby5jOjczODpcXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG5kcml2ZXJzL3Vpby91aW8uYy03MzktI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NzgzPXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtODM1LVxcdC8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseVxcbmluY2x1ZGUvbGludXgvbW0uaDo4MzY6XFx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXFxuaW5jbHVkZS9saW51eC9tbS5oLTgzNy1cXHQgKiBpbXBsZW1lbnRhdGlvbiB1c2VmdWwgZm9yIGFueSBpb21lbSBtYXBwaW5nLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMxMzA9Y29weV9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzEzMTppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvbW0uaC0zMTMyLVxcdFxcdFxcdHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY5NTE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xcbi0tXFxubW0vbWVtb3J5LmMtNjk1NC0vKipcXG5tbS9tZW1vcnkuYzo2OTU1OiAqIGdlbmVyaWNfYWNjZXNzX3BoeXMgLSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBpb21lbSBtbWFwIGFjY2Vzc1xcbm1tL21lbW9yeS5jLTY5NTYtICogQHZtYTogdGhlIHZtYSB0byBhY2Nlc3NcXG4tLVxcbm1tL21lbW9yeS5jLTY5NjUtICovXFxubW0vbWVtb3J5LmM6Njk2NjppbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21lbW9yeS5jLTY5NjctXFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXFxuLS1cXG5tbS9tZW1vcnkuYy03MDE5LX1cXG5tbS9tZW1vcnkuYzo3MDIwOkVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xcbm1tL21lbW9yeS5jLTcwMjEtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTYzMj1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qge1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODQtXFx0LyogY2FsbGVkIGJ5IGFjY2Vzc19wcm9jZXNzX3ZtIHdoZW4gZ2V0X3VzZXJfcGFnZXMoKSBmYWlscywgdHlwaWNhbGx5XFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDo2ODU6XFx0ICogZm9yIHVzZSBieSBzcGVjaWFsIFZNQXMuIFNlZSBhbHNvIGdlbmVyaWNfYWNjZXNzX3BoeXMoKSBmb3IgYSBnZW5lcmljXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC02ODYtXFx0ICogaW1wbGVtZW50YXRpb24gdXNlZnVsIGZvciBhbnkgaW9tZW0gbWFwcGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MTYuNjM5MTM3NzAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3MjA3NzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEFjY2VzcyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzIHdvcmtzIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSXQncyBjbGVhciB0aGF0IGl0J3MgaW52b2x2ZWQgd2l0aCB0aGluZ3MgbGlrZSBgL2Rldi9tZW1gIG1tYXAgb3BlcmF0aW9ucyBpbiBgZHJpdmVycy9jaGFyL21lbS5jYCwgUENJIG1lbW9yeSBtYXBwaW5nIGluIGBkcml2ZXJzL3BjaS9tbWFwLmNgLCBhbmQgbGlrZWx5IFVJTy4gSSdtIHNlZWluZyBhIGNvbm5lY3Rpb24gdG8gYGFjY2Vzc19wcm9jZXNzX3ZtYCwgYHB0cmFjZWAsIGFuZCBgL3Byb2MvcGlkL21lbWAgYmVjYXVzZSB0aGVzZSBhbGwgYXR0ZW1wdCB0byByZWFkL3dyaXRlIG1lbW9yeSB0aGF0J3MgYmVlbiBtYXBwZWQgdG8gYC9kZXYvbWVtYCBvciBQQ0kgSS9PIG1lbW9yeS4gVGhlIHRyYWlsIGxlYWRzIHRocm91Z2ggYGFjY2Vzc19yZW1vdGVfdm1gIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgZXZlbnR1YWxseSBoaXRzIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2VzcyguLi4pYC4gVGhhdCdzIHRoZSBjb3JlLiBOb3cgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBgSEFWRV9JT1JFTUFQX1BST1RgIGlzIGRlZmluZWQgaW4gS2NvbmZpZy4gSXQncyBhbHNvIHdvcnRoIG15IHRpbWUgdG8gbG9vayBhdCBob3cgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGl0c2VsZiBpcyBndWFyZGVkIHdpdGhpbiBgbW0vbWVtb3J5LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZGl0aW9ucyBhbmQgcHJvdGVjdGlvbnMgc3Vycm91bmRpbmcgdGhpcywgYW5kIGhvdyBpdCBoYW5kbGVzIHZhcmlvdXMgbWVtb3J5IHR5cGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzA5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjIyLjAxMTIxNzU0MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0MDk1ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NkeC9jZHguYz02NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjZHhfcGh5c192bV9vcHMgPSB7XFxuZHJpdmVycy9jZHgvY2R4LmM6NjYzOiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2NkeC9jZHguYy02NjQtXFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM9MzE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYzozMjA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjEtXFx0LmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXNcXG4tLVxcbmRyaXZlcnMvZnBnYS9kZmwtYWZ1LW1haW4uYz04MDU9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhZnVfdm1hX29wcyA9IHtcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmM6ODA2OiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5kcml2ZXJzL2ZwZ2EvZGZsLWFmdS1tYWluLmMtODA3LVxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbi0tXFxuZHJpdmVycy9wY2kvbW1hcC5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX3BoeXNfdm1fb3BzID0ge1xcbmRyaXZlcnMvcGNpL21tYXAuYzoxOTojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuZHJpdmVycy9wY2kvbW1hcC5jLTIwLVxcdC5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLFxcbi0tXFxuZHJpdmVycy91aW8vdWlvLmM9NzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWlvX3BoeXNpY2FsX3ZtX29wcyA9IHtcXG5kcml2ZXJzL3Vpby91aW8uYzo3Mzc6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbmRyaXZlcnMvdWlvL3Vpby5jLTczOC1cXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cyxcXG4tLVxcbm1tL21lbW9yeS5jPTY5NTE9RVhQT1JUX1NZTUJPTF9HUEwoZm9sbG93X3Bmbm1hcF9lbmQpO1xcbm1tL21lbW9yeS5jLTY5NTItXFxubW0vbWVtb3J5LmM6Njk1MzojaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxubW0vbWVtb3J5LmMtNjk1NC0vKipcXG4tLVxcbm1tL21lbW9yeS5jPTcwMjY9c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTcwNjktXFx0XFx0XFx0Ynl0ZXMgPSAwO1xcbm1tL21lbW9yeS5jOjcwNzA6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbm1tL21lbW9yeS5jLTcwNzEtXFx0XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VhY2Nlc3MpXFxuLS1cXG5tbS9tZW1vcnkuYz03MTUwPXN0YXRpYyBpbnQgX19jb3B5X3JlbW90ZV92bV9zdHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTcxNzktXFx0XFx0XFx0ICogVHJlYXQgYXMgYSB0b3RhbCBmYWlsdXJlIGZvciBub3cgdW50aWwgd2UgZGVjaWRlIGhvd1xcbm1tL21lbW9yeS5jOjcxODA6XFx0XFx0XFx0ICogdG8gaGFuZGxlIHRoZSBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgY2FzZSBhbmRcXG5tbS9tZW1vcnkuYy03MTgxLVxcdFxcdFxcdCAqIHN0YWNrIGV4cGFuc2lvbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MjMuNzY1MzE4MjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3Mjk4NDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYEhBVkVfSU9SRU1BUF9QUk9UYCBtYWNybyBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBwbGFjZXM6IHRoZSBgYXJjaC9gIGRpcmVjdG9yaWVzLCBhbmQgdGhlIGBLY29uZmlnYCBmaWxlcyB0aGF0IGNvbnRyb2wgdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvciBmZWF0dXJlLWZsYWcgZGVmaW5pdGlvbnMgcmVzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRlZmluZSwgaW4gdGhpcyBjb250ZXh0LCB0byBjb250aW51ZSBteSB3b3JrLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhyb3VnaCB0aGUgY29tbW9uIGxvY2F0aW9ucyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODoyNS42MzgzMDU1NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODMzNjcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0lPUkVNQVBfUFJPVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0yNTg9Y29uZmlnIFVTRVJfUkVUVVJOX05PVElGSUVSXFxuLS1cXG5hcmNoL0tjb25maWctMjY0LVxcbmFyY2gvS2NvbmZpZzoyNjU6Y29uZmlnIEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9LY29uZmlnLTI2Ni1cXHRib29sXFxuLS1cXG5hcmNoL2FyYy9LY29uZmlnPTY9Y29uZmlnIEFSQ1xcbi0tXFxuYXJjaC9hcmMvS2NvbmZpZy0zOC1cXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xcbmFyY2gvYXJjL0tjb25maWc6Mzk6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9hcmMvS2NvbmZpZy00MC1cXHRzZWxlY3QgSEFWRV9LRVJORUxfR1pJUFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMjA5LVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L0tjb25maWc6MjEwOlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMTEtXFx0c2VsZWN0IEhBVkVfSVJRX1RJTUVfQUNDT1VOVElOR1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTU3LVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1ODpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE1OS1cXHRzZWxlY3QgSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0tcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTc2LVxcdHNlbGVjdCBIQVZFX0dDQ19QTFVHSU5TXFxuYXJjaC9taXBzL0tjb25maWc6Nzc6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UXFxuYXJjaC9taXBzL0tjb25maWctNzgtXFx0c2VsZWN0IEhBVkVfSVJRX0VYSVRfT05fSVJRX1NUQUNLXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjYyLVxcdHNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlRcXHRcXHRpZiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiAoUFBDX0JPT0szUyB8fCBQUENfOHh4KVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjI2MzpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1RcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yNjQtXFx0c2VsZWN0IEhBVkVfSVJRX1RJTUVfQUNDT1VOVElOR1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExNS1cXHRzZWxlY3QgR0VORVJJQ19JT1JFTUFQIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMTY6XFx0c2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTctXFx0c2VsZWN0IEdFTkVSSUNfSVJRX0lQSSBpZiBTTVBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0yMTgtXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19WRFNPXFxuYXJjaC9zMzkwL0tjb25maWc6MjE5OlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVCBpZiBQQ0lcXG5hcmNoL3MzOTAvS2NvbmZpZy0yMjAtXFx0c2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyXFxuLS1cXG5hcmNoL3NoL0tjb25maWc9Mj1jb25maWcgU1VQRVJIXFxuLS1cXG5hcmNoL3NoL0tjb25maWctNDMtXFx0c2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVFxcbmFyY2gvc2gvS2NvbmZpZzo0NDpcXHRzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VIFxcdTAwMjZcXHUwMDI2ICFYMlRMQlxcbmFyY2gvc2gvS2NvbmZpZy00NS1cXHRzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yNDgtXFx0c2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVFxcbmFyY2gveDg2L0tjb25maWc6MjQ5OlxcdHNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVFxcbmFyY2gveDg2L0tjb25maWctMjUwLVxcdHNlbGVjdCBIQVZFX0lSUV9FWElUX09OX0lSUV9TVEFDS1xcdGlmIFg4Nl82NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODoyNS45MjY2NTAzNjNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAxOTU3NzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEkvTyBSZW1hcHBpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYEhBVkVfSU9SRU1BUF9QUk9UYCBzZWxlY3Rpb24sIHdoaWNoIGlzIHVzZWQgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyBsaWtlIHg4NiwgYXJtNjQsIGFuZCBvdGhlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGZ1bmN0aW9uLiBMZXQncyBicmVhayBpdCBkb3duOlxuXG5GaXJzdCwgdGhleSdyZSB1c2luZyBgbWluX3RgIHRvIGxpbWl0IHRoZSBhY2Nlc3MgbGVuZ3RoLiBgbGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7YCBUaGF0IG1ha2VzIHNlbnNlLiBXZSBkb24ndCB3YW50IHRvIG92ZXJmbG93IHRoZSBwYWdlLlxuXG5TZWNvbmQsIHRoZSBpbnRlcmVzdGluZyBiaXQ6IHRoZXkndmUgcmVwbGFjZWQgYSBgUEFHRV9BTElHTmAgb3BlcmF0aW9uIHdpdGggYGlvcmVtYXBfcHJvdChwaHlzX2FkZHIsIFBBR0VfU0laRSwgcHJvdCk7YC4gSW5pdGlhbGx5LCBpdCBzZWVtcyB0aGF0IHRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgYWxpZ25tZW50IGxlbmd0aCwgd2hlcmUgaXQgd2FzIGFsaWduaW5nIHRvIHRoZSBuZXh0IHBhZ2UgYm9yZGVyLiBUaGUgYGlvcmVtYXBfcHJvdGAgY2FsbCBzcGVjaWZpY2FsbHkgbWFwcyBhIHNpbmdsZSBwYWdlIGluc3RlYWQsIHRvIGFsaWduIHRvIHdoYXQgaXMgbmVlZGVkLlxuXG5GaW5hbGx5LCB0aGUgYWRkZWQgY2hlY2sgaXMgaW1wb3J0YW50LiBUaGlzIGxpbmU6IGAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSlgIChhZGRlZCBjYXN0IHRvIHByZXZlbnQgMzItYml0IG92ZXJmbG93IC8gZml4IHR5cGUpLiBUaGlzIGNhc3Qgc2VlbXMgdG8gYmUgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHByZXZlbnQgYSAzMi1iaXQgb3ZlcmZsb3cgaXNzdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHRoZSBwYWdlIGZyYW1lIG51bWJlciwgbWFraW5nIHRoZSBjb21wYXJpc29uIHJvYnVzdC4gSXQncyBhIGNsZWFuIHdheSB0byBlbnN1cmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWF0Y2hlcyB3aGF0J3MgZXhwZWN0ZWQgZ2l2ZW4gdGhlIGBhcmdzLnBmbmAuXG5cbk5vdywgSSBuZWVkIHRvIHRyYWNlIGhvdyBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpbnRlcmFjdHMgd2l0aCB0aGlzIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzc2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmlydHVhbCBtZW1vcnkgYXJlYSBvcGVyYXRpb25zIHVzZSB0aGlzIHJlbWFwcGVkIHJlZ2lvbi4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbnRleHQgZm9yIHRoZSBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MjguOTQ2MjMwMzA3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDI1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDI1OlxcdCAqL1xcbjcwMjY6XFx0c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG43MDI3OlxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG43MDI4OlxcdHtcXG43MDI5OlxcdFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuNzAzMDpcXHRcXHRpbnQgd3JpdGUgPSBndXBfZmxhZ3MgXFx1MDAyNiBGT0xMX1dSSVRFO1xcbjcwMzE6XFx0XFxuNzAzMjpcXHRcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxcbjcwMzM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzAzNDpcXHRcXG43MDM1OlxcdFxcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cXG43MDM2OlxcdFxcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XFxuNzAzNzpcXHRcXG43MDM4OlxcdFxcdC8qIEF2b2lkIHRyaWdnZXJpbmcgdGhlIHRlbXBvcmFyeSB3YXJuaW5nIGluIF9fZ2V0X3VzZXJfcGFnZXMgKi9cXG43MDM5OlxcdFxcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXFx1MDAyNlxcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXFxuNzA0MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MDQxOlxcdFxcbjcwNDI6XFx0XFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXFxuNzA0MzpcXHRcXHR3aGlsZSAobGVuKSB7XFxuNzA0NDpcXHRcXHRcXHRpbnQgYnl0ZXMsIG9mZnNldDtcXG43MDQ1OlxcdFxcdFxcdHZvaWQgKm1hZGRyO1xcbjcwNDY6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG43MDQ3OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcXG43MDQ4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZ2V0X3VzZXJfcGFnZV92bWFfcmVtb3RlKG1tLCBhZGRyLFxcbjcwNDk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBndXBfZmxhZ3MsIFxcdTAwMjZ2bWEpO1xcbjcwNTA6XFx0XFxuNzA1MTpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKSB7XFxuNzA1MjpcXHRcXHRcXHRcXHQvKiBXZSBtaWdodCBuZWVkIHRvIGV4cGFuZCB0aGUgc3RhY2sgdG8gYWNjZXNzIGl0ICovXFxuNzA1MzpcXHRcXHRcXHRcXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcXG43MDU0OlxcdFxcdFxcdFxcdGlmICghdm1hKSB7XFxuNzA1NTpcXHRcXHRcXHRcXHRcXHR2bWEgPSBleHBhbmRfc3RhY2sobW0sIGFkZHIpO1xcbjcwNTY6XFx0XFxuNzA1NzpcXHRcXHRcXHRcXHRcXHQvKiBtbWFwX2xvY2sgd2FzIGRyb3BwZWQgb24gZmFpbHVyZSAqL1xcbjcwNTg6XFx0XFx0XFx0XFx0XFx0aWYgKCF2bWEpXFxuNzA1OTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG43MDYwOlxcdFxcbjcwNjE6XFx0XFx0XFx0XFx0XFx0LyogVHJ5IGFnYWluIGlmIHN0YWNrIGV4cGFuc2lvbiB3b3JrZWQgKi9cXG43MDYyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcwNjM6XFx0XFx0XFx0XFx0fVxcbjcwNjQ6XFx0XFxuNzA2NTpcXHRcXHRcXHRcXHQvKlxcbjcwNjY6XFx0XFx0XFx0XFx0ICogQ2hlY2sgaWYgdGhpcyBpcyBhIFZNX0lPIHwgVk1fUEZOTUFQIFZNQSwgd2hpY2hcXG43MDY3OlxcdFxcdFxcdFxcdCAqIHdlIGNhbiBhY2Nlc3MgdXNpbmcgc2xpZ2h0bHkgZGlmZmVyZW50IGNvZGUuXFxuNzA2ODpcXHRcXHRcXHRcXHQgKi9cXG43MDY5OlxcdFxcdFxcdFxcdGJ5dGVzID0gMDtcXG43MDcwOlxcdCNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG43MDcxOlxcdFxcdFxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX29wcyBcXHUwMDI2XFx1MDAyNiB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlYWNjZXNzKVxcbjcwNzI6XFx0XFx0XFx0XFx0XFx0Ynl0ZXMgPSB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlYWNjZXNzKHZtYSwgYWRkciwgYnVmLFxcbjcwNzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGxlbiwgd3JpdGUpO1xcbjcwNzQ6XFx0I2VuZGlmXFxuNzA3NTpcXHRcXHRcXHRcXHRpZiAoYnl0ZXMgXFx1MDAzYz0gMClcXG43MDc2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjcwNzc6XFx0XFx0XFx0fSBlbHNlIHtcXG43MDc4OlxcdFxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG43MDc5OlxcdFxcdFxcdFxcdGJ5dGVzID0gbGVuO1xcbjcwODA6XFx0XFx0XFx0XFx0b2Zmc2V0ID0gYWRkciBcXHUwMDI2IChQQUdFX1NJWkUtMSk7XFxuNzA4MTpcXHRcXHRcXHRcXHRpZiAoYnl0ZXMgXFx1MDAzZSBQQUdFX1NJWkUtb2Zmc2V0KVxcbjcwODI6XFx0XFx0XFx0XFx0XFx0Ynl0ZXMgPSBQQUdFX1NJWkUtb2Zmc2V0O1xcbjcwODM6XFx0XFxuNzA4NDpcXHRcXHRcXHRcXHRtYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSAqIFBBR0VfU0laRSk7XFxuNzA4NTpcXHRcXHRcXHRcXHRpZiAod3JpdGUpIHtcXG43MDg2OlxcdFxcdFxcdFxcdFxcdGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkcixcXG43MDg3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbWFkZHIgKyBvZmZzZXQsIGJ1ZiwgYnl0ZXMpO1xcbjcwODg6XFx0XFx0XFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eV9sb2NrKGZvbGlvKTtcXG43MDg5OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuNzA5MDpcXHRcXHRcXHRcXHRcXHRjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkcixcXG43MDkxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBidWYsIG1hZGRyICsgb2Zmc2V0LCBieXRlcyk7XFxuNzA5MjpcXHRcXHRcXHRcXHR9XFxuNzA5MzpcXHRcXHRcXHRcXHRmb2xpb19yZWxlYXNlX2ttYXAoZm9saW8sIG1hZGRyKTtcXG43MDk0OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MjguOTQ2NjA0NzM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyOTM3MTc5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBtbS9tZW1vcnkuY2AgLSBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AqKlxuXG5Pa2F5LCBoZXJlIHdlIGdvLCBkaWdnaW5nIGludG8gYG1tL21lbW9yeS5jYC4gVGhlIGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cywgXCJJcyB0aGlzIHJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlLCB3b3J0aCBteSB0aW1lIGZ1enppbmc/XCIgTG9va2luZyBhdCB0aGUgZnV6emluZyBndWlkZWxpbmVzLCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGRlZmluaXRlbHkgaW4gc2NvcGUuIFRoYXQncyBhIGdyZWVuIGxpZ2h0LlxuXG5Ob3csIGlzIGBnZW5lcmljX2FjY2Vzc19waHlzYCBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBUaGlua2luZyB0aHJvdWdoIHRoZSBjb21tb24gYXR0YWNrIHN1cmZhY2UsIGAvZGV2L21lbWAgbGVhcHMgdG8gbWluZCwgZXNwZWNpYWxseSBpZiBgQ09ORklHX0RFVk1FTWAgaXMgZW5hYmxlZC4gQSB1c2VyIHByb2Nlc3MgY2FuIG9wZW4gYC9kZXYvbWVtYCwgYG1tYXAoKWAgdGhhdCBzdWNrZXIsIGFuZCB0aGVuIHVzZSB0b29scyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCwgYHByb2Nlc3Nfdm1fd3JpdGV2YCwgYHB0cmFjZWAgY2FsbHMsIG9yIGV2ZW4gbWVzcyB3aXRoIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtYCB0byByZWFkIG9yIHdyaXRlIHRoZSBtYXBwZWQgbWVtb3J5LiBUaGlzIGlzIGNsYXNzaWMhIEFueSBvdGhlciBgYWNjZXNzX3JlbW90ZV92bWAgY2FsbGVyIGlzIGluIHNjb3BlIHRvby5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J3Mgbm90IGp1c3QgYENPTkZJR19ERVZNRU1gOyBgQ09ORklHX1VJT2AgYWxzbyBvcGVucyBkb29ycywgYW5kIGV2ZW4ganVzdCBgQ09ORklHX01NVWAgb3IsIGNydWNpYWxseSwgYENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAuIEhhbmcgb24sIGBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RgIGlzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBib29sZWFuLCBzZWxlY3RlZCBieSBzb21ldGhpbmcgbGlrZSBYODYuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzb3VyY2UuXG5cbk9rYXksIGluc2lkZSBgbW0vbWVtb3J5LmNgLCB0aGVyZSBpdCBpcyEgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGlzIGd1YXJkZWQgYnkgdGhhdCBgI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVGAuIEFuZCwganVzdCB0byBiZSBzdXJlLCBgL2Rldi9tZW1gIGl0c2VsZiB1dGlsaXplcyBgREVWTUVNYC4gTGV0J3MgdGFrZSBhIHF1aWNrIHBlYWsgYXQgYGRyaXZlcnMvY2hhci9tZW0uY2AgdG8gY29uZmlybSB0aGUgZmxvdy4gR29vZCBzdHVmZiwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjU0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6MzMuMjQwMzI2MjkyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ2OTQwNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tYXBfbWVtX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NoYXIvbWVtLmM9MzEzPXN0YXRpYyBpbmxpbmUgaW50IHByaXZhdGVfbWFwcGluZ19vayhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jLTMxOC1cXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzE5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zMjAtI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jPTMyNT1zdGF0aWMgaW50IG1tYXBfbWVtX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYy0zNTUtXFxuZHJpdmVycy9jaGFyL21lbS5jOjM1NjpcXHRkZXNjLVxcdTAwM2V2bV9vcHMgPSBcXHUwMDI2bW1hcF9tZW1fb3BzO1xcbmRyaXZlcnMvY2hhci9tZW0uYy0zNTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjM1LjU4NzI3NDMzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODUyNzIzMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIENPTkZJR19ERVZNRU0gaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgQ09ORklHX0RFVk1FTWAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBpdHMgZnVuY3Rpb24gd2hpY2ggSSBhbHJlYWR5IGtub3cgaXMgcmVsYXRlZCB0byBhbGxvd2luZyBkaXJlY3QgbWVtb3J5IGFjY2VzcywgaXMgdG8gY2hlY2sgdGhlIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFRoYXQgZmVlbHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBTbywgSSdsbCBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2NoYXIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBhbnl0aGluZyByZWxhdGVkIHRvIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycywgYW5kIGdpdmVuIG15IGV4cGVyaWVuY2UsIHRoaXMgb3B0aW9uJ3MgbGlrZWx5IHR1Y2tlZCBpbiB0aGVyZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmaWxlIHJldmVhbHMuLi4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MDEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODo0MC40NDAwMDE2ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTg5Nzk4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVk1FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NoYXIvS2NvbmZpZz0yNDk9Y29uZmlnIE5TQ19HUElPXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNTgtXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjU5OmNvbmZpZyBERVZNRU1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiL2Rldi9tZW0gdmlydHVhbCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NDIuNTU4OTg4OTIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NDM3NzgyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0IFN1bW1hcnkqKlxuXG5Pa2F5LCBsZXQncyBzb2xpZGlmeSB0aGlzIGZ1enppbmcgYW5hbHlzaXMuIEZpcnN0LCBjb25maXJtaW5nIGBIQVZFX0lPUkVNQVBfUFJPVGA6IHRoYXQncyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgb24gYW1kNjQgdGhhbmtzIHRvIGBDT05GSUdfWDg2YCwgc28gd2UncmUgZ29vZCB0aGVyZS4gTmV4dCwgbGV0J3MgbWFrZSBzdXJlIHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgYXJlIGNsZWFyLiBgREVWTUVNYCBpcyB0aGUga2V5LCBhbmQgaXQncyByaWdodCB3aGVyZSB3ZSBleHBlY3QgaXQgaW4gYGRyaXZlcnMvY2hhci9LY29uZmlnYC4gYENPTkZJR19VSU9gIGlzIGFsc28gcHJlc2VudC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBgREVWTUVNYCAqaXMqIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiwgcmlnaHQ/IFllcCwgdGhhdCdzIGEgc29saWQgZW5hYmxlLlxuXG5Ob3csIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCdzIHRoZSBiZXN0IHRhcmdldCBmdW5jdGlvbj8gYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGp1bXBzIG91dC4gVGhhdCdzICp0aGUqIGZ1bmN0aW9uIG1vZGlmaWVkIGluIGBtbS9tZW1vcnkuY2AuIEJ1dCBpcyBpdCB0aGUgKnJpZ2h0KiBvbmU/IElzIGl0IHViaXF1aXRvdXMsIG9yIGlzIGl0IHNwZWNpZmljPyBBaCwgaXQncyBzcGVjaWZpYy4gSXQncyBvbmx5IGhpdCB3aGVuIGRlYWxpbmcgd2l0aCByZW1vdGUgVk0gYWNjZXNzIHVzaW5nIG5vbi1wYWdlLWJhc2VkIFZNQXMg4oCTIGxpa2UsIHNheSwgYC9kZXYvbWVtYCBvciBwaHlzaWNhbCBtYXBwaW5ncy4gQ291bGQgd2UgYnJvYWRlbiB0aGUgbmV0IHRvIGluY2x1ZGUgc29tZXRoaW5nIGxpa2UgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGBhY2Nlc3NfcmVtb3RlX3ZtYCwgb3IgYGFjY2Vzc19wcm9jZXNzX3ZtYD8gUG9zc2libHksIGJ1dCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgaXMgdGhlIG9uZSAqZGlyZWN0bHkqIGFsdGVyZWQsIHNvIGxldCdzIHN0aWNrIHdpdGggdGhhdCBmb3Igbm93LiBBbmQgbm8gb3RoZXIgZnVuY3Rpb25zIGluIGBtbS9tZW1vcnkuY2Agd2VyZSBjaGFuZ2VkLCBzbyB3ZSBhcmUgZ29vZC5cblxuTGV0J3MgcmV2aWV3IHRoZSBGb2N1c1N5bWJvbHMgcnVsZXMuIFwiU3BlY2lmaWNhbGx5IGltcGxlbWVudHMgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXCIgYGdlbmVyaWNfYWNjZXNzX3BoeXNgICpuYWlsZWQqIGl0LiBJdCdzIG5vbi11YmlxdWl0b3VzLCBkaXJlY3RseSBtb2RpZmllZCwgYW5kIHNwZWNpZmljYWxseSBpbXBsZW1lbnRzIHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkLiBUaGlzIGlzIGEgcGVyZmVjdCBmaXQuXG5cbkNhbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2Agc3RhbmQgYWxvbmUgYXMgdGhlIGZvY3VzIHN5bWJvbD8gQWJzb2x1dGVseSwgeWVzLCBpdCdzIGlkZWFsLiBMZXQncyBtYWtlIHN1cmUgYWxsIG91ciBjcml0ZXJpYSBhcmUgbWV0LlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWUsIG5vIHF1ZXN0aW9uLlxuKiAgIGBFbmFibGVDb25maWdzYDogYERFVk1FTWAgKG9yIGVtcHR5L0RFVk1FTSwgYXMgaGF2aW5nIFwiREVWTUVNXCIgZW5hYmxlcyAvZGV2L21lbSB3aGljaCBpcyB0aGUgcHJpbWFyeSB1c2VyIG9mIGBnZW5lcmljX2FjY2Vzc19waHlzYCkuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBnZW5lcmljX2FjY2Vzc19waHlzYC5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSwgc3BlY2lmaWMgZXhwbGFuYXRpb24gb2YgdGhlIGZ1enppbmcgdmVyZGljdDogVGhpcyBpcyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5Pa2F5LCB0aGF0J3MgYWxsIHRoZSBpbmZvIHdlIG5lZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3NywiT3V0cHV0VG9rZW5zIjoxMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NDguMjAyNzY5MTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MjM3ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbW9yeS5jKSB0byBjb25zdHJhaW4gcGh5c2ljYWwgYWNjZXNzIGxlbmd0aHMgdG8gc2luZ2xlLXBhZ2UgYm91bmRhcmllcyBhbmQgZml4IHR5cGUgY2FzdGluZyBmb3IgUEZOIHNoaWZ0cy4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVtb3RlIFZNIGFjY2VzcyAoZS5nLiwgdmlhIHB0cmFjZSwgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYsIG9yIC9wcm9jLyRwaWQvbWVtKSB0byBwaHlzaWNhbCBJL08gbWFwcGluZ3Mgc3VjaCBhcyAvZGV2L21lbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX2FjY2Vzc19waHlzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL21lbW9yeS5jKSB0byBjb25zdHJhaW4gcGh5c2ljYWwgYWNjZXNzIGxlbmd0aHMgdG8gc2luZ2xlLXBhZ2UgYm91bmRhcmllcyBhbmQgZml4IHR5cGUgY2FzdGluZyBmb3IgUEZOIHNoaWZ0cy4gVGhpcyByZWFjaGFibGUgY29kZSBwYXRoIGhhbmRsZXMgcmVtb3RlIFZNIGFjY2VzcyAoZS5nLiwgdmlhIHB0cmFjZSwgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYsIG9yIC9wcm9jLyRwaWQvbWVtKSB0byBwaHlzaWNhbCBJL08gbWFwcGluZ3Mgc3VjaCBhcyAvZGV2L21lbSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NDguMzE3MDE3MDgzWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4MTY5NjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA4OjQ4LjMxNzc0MjIxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzMTgwOTY2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKTpcXG4xLiBJdCBjbGFtcHMgJ2xlbicgdG8gJ1BBR0VfU0laRSAtIG9mZnNldCcgYW5kIHJlZHVjZXMgdGhlIGlvcmVtYXBfcHJvdCgpIG1hcHBpbmcgc2l6ZSB0byBQQUdFX1NJWkUgYmVjYXVzZSBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgb25seSByZXNvbHZlcyBhbmQgdmFsaWRhdGVzIGEgc2luZ2xlIHBhZ2UvUEZOIGF0IGEgdGltZS5cXG4yLiBJdCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHNoaWZ0IG92ZXJmbG93IHdoZW4gY29tcGFyaW5nIHBoeXNfYWRkciBhZ2FpbnN0IGFyZ3MucGZuIGJ5IGNhc3RpbmcgYXJncy5wZm4gdG8gcmVzb3VyY2Vfc2l6ZV90LlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIHBoeXNpY2FsIHBhZ2UgbWFwcGluZyBib3VuZHMgYW5kIGFyaXRobWV0aWMgdHlwZSBzaXppbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbCBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgY29uY2VybnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjQzMDE4Yjg3ODlhMGFhOWQ0ZDE1MjU0MDhlZmE2NDA4NTYyOTQ2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA0OjA4OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMy4uNzRmZGYyOWM5YzdlOCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTY5NzQsNiArNjk3NCwxMiBAQCBpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0Ym9vbCB3cml0YWJsZTtcbiBcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07XG4gXG4rXHQvKlxuK1x0ICogTGltaXQgYWNjZXNzIHRvIG9uZSBwYWdlIGF0IGEgdGltZSwgYXMgdGhhdCdzIHdoYXQgZm9sbG93X3Bmbm1hcF9zdGFydCgpXG4rXHQgKiBndWFyYW50ZWVzOyBleHBlY3QgdGhlIGNhbGxlciB0byByZXRyeSB0byByZWFkIGxhcmdlciByYW5nZXMuXG4rXHQgKi9cbitcdGxlbiA9IG1pbl90KGludCwgbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuK1xuIHJldHJ5OlxuIFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTY5ODUsNyArNjk5MSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRpZiAoKHdyaXRlIFx1MDAyNiBGT0xMX1dSSVRFKSBcdTAwMjZcdTAwMjYgIXdyaXRhYmxlKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9BTElHTihsZW4gKyBvZmZzZXQpLCBwcm90KTtcbitcdG1hZGRyID0gaW9yZW1hcF9wcm90KHBoeXNfYWRkciwgUEFHRV9TSVpFLCBwcm90KTtcbiBcdGlmICghbWFkZHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTY5OTMsNyArNjk5OSw3IEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGdvdG8gb3V0X3VubWFwO1xuIFxuIFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxuLVx0ICAgIChwaHlzX2FkZHIgIT0gKGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbitcdCAgICAocGh5c19hZGRyICE9ICgocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfHxcbiBcdCAgICAod3JpdGFibGUgIT0gYXJncy53cml0YWJsZSkpIHtcbiBcdFx0Zm9sbG93X3Bmbm1hcF9lbmQoXHUwMDI2YXJncyk7XG4gXHRcdGlvdW5tYXAobWFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NDguMzE3NzQzMzczWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNjg1NTgzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBhbmQgZGVjaWRlIGlmIHdlIG5lZWQgS01TQU4gZnV6emluZyBpbiBhZGRpdGlvbiB0byB0aGUgZXhpc3RpbmcgS0FTQU4gZnV6emluZy4gTGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoaXMgcmVxdWVzdCBhZ2FpbnN0IG91ciBzYWZldHkgYW5kIGR1YWwtdXNlIGd1aWRlbGluZXMuIFRoaXMgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIHNvZnR3YXJlIG1haW50ZW5hbmNlLCBwYXRjaCByZXZpZXcsIHNwZWNpZmljYWxseSBjaG9vc2luZyBhIG1lbW9yeSBzYW5pdGl6ZXIuIERlZmluaXRlbHkgYSBkZWZlbnNpdmUgYWN0aW9uLCBjb21wbGV0ZWx5IGJlbmlnbiwgZm9jdXNlZCBvbiBRQS4gTm8gcmVkIGZsYWdzIGhlcmUg4oCTIG5vIG1hbHdhcmUsIG5vIGV4cGxvaXQgZ2VuZXJhdGlvbiwgbm90aGluZyByZW1vdGVseSBtYWxpY2lvdXMuIERlZmluaXRlbHkgYSBiZW5pZ24vc2FmZSBjbGFzc2lmaWNhdGlvbi5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgdGVjaG5pY2FsIGRldGFpbHMuIEkgbmVlZCB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBkaWZmIHNlZW1zIHRvIGJlIGluIGBtbS9tZW1vcnkuY2AsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBnZW5lcmljX2FjY2Vzc19waHlzYCBmdW5jdGlvbi4gSSBzaG91bGQgcHVsbCB1cCB0aGUgZGlmZiBhbmQgcmVhbGx5IGRpZyBpbiwgcHJvYmFibHkgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHNlYXJjaCB3aXRoaW4gYG1tL21lbW9yeS5jYCBmb3IgdGhhdCBmdW5jdGlvbiwgc28gSSBjYW4gc2VlIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2VzIGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZXZhbHVhdGlvbiBzdGFydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowODo1OS4wMDMzMzA0OTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODYxMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfYWNjZXNzX3BoeXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9Njk1MT1FWFBPUlRfU1lNQk9MX0dQTChmb2xsb3dfcGZubWFwX2VuZCk7XFxuLS1cXG5tbS9tZW1vcnkuYy02OTU0LS8qKlxcbm1tL21lbW9yeS5jOjY5NTU6ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxubW0vbWVtb3J5LmMtNjk1Ni0gKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbi0tXFxubW0vbWVtb3J5LmMtNjk2NS0gKi9cXG5tbS9tZW1vcnkuYzo2OTY2OmludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNjk2Ny1cXHRcXHRcXHR2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSlcXG4tLVxcbm1tL21lbW9yeS5jLTcwMTktfVxcbm1tL21lbW9yeS5jOjcwMjA6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XFxubW0vbWVtb3J5LmMtNzAyMS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDg6NTkuMDkzMjA0OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMTIwMjM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHBsYXlpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDpcblxuKipEaXZpbmcgRGVlcCBpbnRvIGBnZW5lcmljX2FjY2Vzc19waHlzYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaW1lIHRvIHVuZGVyc3RhbmQgdGhpcyBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgZnVuY3Rpb24gYW5kIGl0cyBjb250ZXh0IHRob3JvdWdobHkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgcmVhZC1maWxlYCB0byBncmFiIHRoZSBlbnRpcmUgc291cmNlIGNvZGUg4oCTIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGl0cyBjYWxsZXJzLCBhbmQgdGhlIGNvZGUgc3Vycm91bmRpbmcgaXQuIEkgd2FudCB0aGUgY29tcGxldGUgcGljdHVyZSwgbm90IGp1c3Qgc25pcHBldHMuIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgKnN1cHBvc2VkKiB0byBiZSB1c2VkIGFuZCAqaG93KiBpdCdzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFRoaXMgaXNuJ3QganVzdCBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBpbmRpdmlkdWFsIGxpbmVzOyBpdCdzIGFib3V0IHNlZWluZyB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEtub3dpbmcgdGhlIGZ1bGwgY29udGV4dCBpcyBjcnVjaWFsIGZvciBhIHJvYnVzdCBhbmFseXNpcy4gSSdtIGxvb2tpbmcgZm9yIGFueSBpbW1lZGlhdGUgcmVkIGZsYWdzLCBvciBjbGV2ZXIgaW1wbGVtZW50YXRpb25zLCB0aGF0IGFyZSBpbW1lZGlhdGVseSBvYnZpb3VzIHRvIGFuIGV4cGVydC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGJ5IGV4YW1pbmluZyBhbGwgdGhlIHJlbGF0ZWQgY29kZSBhdCBvbmNlLCBJIGNhbiBtb3JlIGVmZmVjdGl2ZWx5IGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBpdCBhbGwgd29ya3MgdG9nZXRoZXIsIGFuZCBJIHdpbGwgYmUgYWJsZSB0byBtYWtlIGEgbW9yZSBhY2N1cmF0ZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDk6MDEuMjk0NDExMzQ3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTU0LFxuICBcIkxpbmVDb3VudFwiOiA3NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTU0OlxcdC8qKlxcbjY5NTU6XFx0ICogZ2VuZXJpY19hY2Nlc3NfcGh5cyAtIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGlvbWVtIG1tYXAgYWNjZXNzXFxuNjk1NjpcXHQgKiBAdm1hOiB0aGUgdm1hIHRvIGFjY2Vzc1xcbjY5NTc6XFx0ICogQGFkZHI6IHVzZXJzcGFjZSBhZGRyZXNzLCBub3QgcmVsYXRpdmUgb2Zmc2V0IHdpdGhpbiBAdm1hXFxuNjk1ODpcXHQgKiBAYnVmOiBidWZmZXIgdG8gcmVhZC93cml0ZVxcbjY5NTk6XFx0ICogQGxlbjogbGVuZ3RoIG9mIHRyYW5zZmVyXFxuNjk2MDpcXHQgKiBAd3JpdGU6IHNldCB0byBGT0xMX1dSSVRFIHdoZW4gd3JpdGluZywgb3RoZXJ3aXNlIHJlYWRpbmdcXG42OTYxOlxcdCAqXFxuNjk2MjpcXHQgKiBUaGlzIGlzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgXFx1MDAyNnZtX29wZXJhdGlvbnNfc3RydWN0LmFjY2VzcyBmb3IgYW5cXG42OTYzOlxcdCAqIGlvbWVtIG1hcHBpbmcuIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSgpIHdoZW4gdGhlIEB2bWEgaXNcXG42OTY0OlxcdCAqIG5vdCBwYWdlIGJhc2VkLlxcbjY5NjU6XFx0ICovXFxuNjk2NjpcXHRpbnQgZ2VuZXJpY19hY2Nlc3NfcGh5cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbjY5Njc6XFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpXFxuNjk2ODpcXHR7XFxuNjk2OTpcXHRcXHRyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyO1xcbjY5NzA6XFx0XFx0cGdwcm90X3QgcHJvdCA9IF9fcGdwcm90KDApO1xcbjY5NzE6XFx0XFx0dm9pZCBfX2lvbWVtICptYWRkcjtcXG42OTcyOlxcdFxcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyKTtcXG42OTczOlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbjY5NzQ6XFx0XFx0Ym9vbCB3cml0YWJsZTtcXG42OTc1OlxcdFxcdHN0cnVjdCBmb2xsb3dfcGZubWFwX2FyZ3MgYXJncyA9IHsgLnZtYSA9IHZtYSwgLmFkZHJlc3MgPSBhZGRyIH07XFxuNjk3NjpcXHRcXG42OTc3OlxcdFxcdC8qXFxuNjk3ODpcXHRcXHQgKiBMaW1pdCBhY2Nlc3MgdG8gb25lIHBhZ2UgYXQgYSB0aW1lLCBhcyB0aGF0J3Mgd2hhdCBmb2xsb3dfcGZubWFwX3N0YXJ0KClcXG42OTc5OlxcdFxcdCAqIGd1YXJhbnRlZXM7IGV4cGVjdCB0aGUgY2FsbGVyIHRvIHJldHJ5IHRvIHJlYWQgbGFyZ2VyIHJhbmdlcy5cXG42OTgwOlxcdFxcdCAqL1xcbjY5ODE6XFx0XFx0bGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7XFxuNjk4MjpcXHRcXG42OTgzOlxcdHJldHJ5OlxcbjY5ODQ6XFx0XFx0aWYgKGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpKVxcbjY5ODU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjk4NjpcXHRcXHRwcm90ID0gYXJncy5wZ3Byb3Q7XFxuNjk4NzpcXHRcXHRwaHlzX2FkZHIgPSAocmVzb3VyY2Vfc2l6ZV90KWFyZ3MucGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuNjk4ODpcXHRcXHR3cml0YWJsZSA9IGFyZ3Mud3JpdGFibGU7XFxuNjk4OTpcXHRcXHRmb2xsb3dfcGZubWFwX2VuZChcXHUwMDI2YXJncyk7XFxuNjk5MDpcXHRcXG42OTkxOlxcdFxcdGlmICgod3JpdGUgXFx1MDAyNiBGT0xMX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiAhd3JpdGFibGUpXFxuNjk5MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42OTkzOlxcdFxcbjY5OTQ6XFx0XFx0bWFkZHIgPSBpb3JlbWFwX3Byb3QocGh5c19hZGRyLCBQQUdFX1NJWkUsIHByb3QpO1xcbjY5OTU6XFx0XFx0aWYgKCFtYWRkcilcXG42OTk2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjY5OTc6XFx0XFxuNjk5ODpcXHRcXHRpZiAoZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncykpXFxuNjk5OTpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG43MDAwOlxcdFxcbjcwMDE6XFx0XFx0aWYgKChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoYXJncy5wZ3Byb3QpKSB8fFxcbjcwMDI6XFx0XFx0ICAgIChwaHlzX2FkZHIgIT0gKChyZXNvdXJjZV9zaXplX3QpYXJncy5wZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpIHx8XFxuNzAwMzpcXHRcXHQgICAgKHdyaXRhYmxlICE9IGFyZ3Mud3JpdGFibGUpKSB7XFxuNzAwNDpcXHRcXHRcXHRmb2xsb3dfcGZubWFwX2VuZChcXHUwMDI2YXJncyk7XFxuNzAwNTpcXHRcXHRcXHRpb3VubWFwKG1hZGRyKTtcXG43MDA2OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuNzAwNzpcXHRcXHR9XFxuNzAwODpcXHRcXG43MDA5OlxcdFxcdGlmICh3cml0ZSlcXG43MDEwOlxcdFxcdFxcdG1lbWNweV90b2lvKG1hZGRyICsgb2Zmc2V0LCBidWYsIGxlbik7XFxuNzAxMTpcXHRcXHRlbHNlXFxuNzAxMjpcXHRcXHRcXHRtZW1jcHlfZnJvbWlvKGJ1ZiwgbWFkZHIgKyBvZmZzZXQsIGxlbik7XFxuNzAxMzpcXHRcXHRyZXQgPSBsZW47XFxuNzAxNDpcXHRcXHRmb2xsb3dfcGZubWFwX2VuZChcXHUwMDI2YXJncyk7XFxuNzAxNTpcXHRvdXRfdW5tYXA6XFxuNzAxNjpcXHRcXHRpb3VubWFwKG1hZGRyKTtcXG43MDE3OlxcdFxcbjcwMTg6XFx0XFx0cmV0dXJuIHJldDtcXG43MDE5OlxcdH1cXG43MDIwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfYWNjZXNzX3BoeXMpO1xcbjcwMjE6XFx0I2VuZGlmXFxuNzAyMjpcXHRcXG43MDIzOlxcdC8qXFxuNzAyNDpcXHQgKiBBY2Nlc3MgYW5vdGhlciBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLlxcbjcwMjU6XFx0ICovXFxuNzAyNjpcXHRzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbjcwMjc6XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxcbjcwMjg6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowOTowMS4yOTUwNTA4OTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2ODQyMjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGdlbmVyaWNfYWNjZXNzX3BoeXNgIGFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGdlbmVyaWNfYWNjZXNzX3BoeXNgLiBSaWdodCwgdGhhdCdzIHRoZSBgdm1fb3BzLVx1MDAzZWFjY2Vzc2AgY2FsbGJhY2sgdXNlZCBmb3IgSS9PIG1lbW9yeSBtYXBwaW5ncyDigJMgdGhpbmdzIGxpa2UgVXNlci1zcGFjZSBJL08gb3IgVmlydHVhbCBGdW5jdGlvbiBJL08sIHRoYXQga2luZCBvZiBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGBfX2FjY2Vzc19yZW1vdGVfdm1gLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cuXG5cbkxldCBtZSBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaW1lIHRvIG9wZW4gdXAgYG1tL21lbW9yeS5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNzAyNi4gSG9wZWZ1bGx5LCBJIGNhbiBmaW5kIHdoZXJlIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWFjY2Vzc2AgaXMgY2FsbGVkIGZyb20gYF9fYWNjZXNzX3JlbW90ZV92bWAgYW5kIGhvdyB0aGF0IGNhbGwgaXMgYmVpbmcgaGFuZGxlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWNoYW5pY3Mgb2YgdGhlc2UgbWVtb3J5IGFjY2VzcyBvcGVyYXRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6MDk6MDMuMzYzNDc2NzI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzcxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAyNSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzAyNTpcXHQgKi9cXG43MDI2OlxcdHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuNzAyNzpcXHRcXHRcXHRcXHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuNzAyODpcXHR7XFxuNzAyOTpcXHRcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbjcwMzA6XFx0XFx0aW50IHdyaXRlID0gZ3VwX2ZsYWdzIFxcdTAwMjYgRk9MTF9XUklURTtcXG43MDMxOlxcdFxcbjcwMzI6XFx0XFx0aWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSlcXG43MDMzOlxcdFxcdFxcdHJldHVybiAwO1xcbjcwMzQ6XFx0XFxuNzAzNTpcXHRcXHQvKiBVbnRhZyB0aGUgYWRkcmVzcyBiZWZvcmUgbG9va2luZyB1cCB0aGUgVk1BICovXFxuNzAzNjpcXHRcXHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpO1xcbjcwMzc6XFx0XFxuNzAzODpcXHRcXHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXFxuNzAzOTpcXHRcXHRpZiAoIXZtYV9sb29rdXAobW0sIGFkZHIpIFxcdTAwMjZcXHUwMDI2ICFleHBhbmRfc3RhY2sobW0sIGFkZHIpKVxcbjcwNDA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzA0MTpcXHRcXG43MDQyOlxcdFxcdC8qIGlnbm9yZSBlcnJvcnMsIGp1c3QgY2hlY2sgaG93IG11Y2ggd2FzIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCAqL1xcbjcwNDM6XFx0XFx0d2hpbGUgKGxlbikge1xcbjcwNDQ6XFx0XFx0XFx0aW50IGJ5dGVzLCBvZmZzZXQ7XFxuNzA0NTpcXHRcXHRcXHR2b2lkICptYWRkcjtcXG43MDQ2OlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuNzA0NzpcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IE5VTEw7XFxuNzA0ODpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGdldF91c2VyX3BhZ2Vfdm1hX3JlbW90ZShtbSwgYWRkcixcXG43MDQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZ3VwX2ZsYWdzLCBcXHUwMDI2dm1hKTtcXG43MDUwOlxcdFxcbjcwNTE6XFx0XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbjcwNTI6XFx0XFx0XFx0XFx0LyogV2UgbWlnaHQgbmVlZCB0byBleHBhbmQgdGhlIHN0YWNrIHRvIGFjY2VzcyBpdCAqL1xcbjcwNTM6XFx0XFx0XFx0XFx0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuNzA1NDpcXHRcXHRcXHRcXHRpZiAoIXZtYSkge1xcbjcwNTU6XFx0XFx0XFx0XFx0XFx0dm1hID0gZXhwYW5kX3N0YWNrKG1tLCBhZGRyKTtcXG43MDU2OlxcdFxcbjcwNTc6XFx0XFx0XFx0XFx0XFx0LyogbW1hcF9sb2NrIHdhcyBkcm9wcGVkIG9uIGZhaWx1cmUgKi9cXG43MDU4OlxcdFxcdFxcdFxcdFxcdGlmICghdm1hKVxcbjcwNTk6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuNzA2MDpcXHRcXG43MDYxOlxcdFxcdFxcdFxcdFxcdC8qIFRyeSBhZ2FpbiBpZiBzdGFjayBleHBhbnNpb24gd29ya2VkICovXFxuNzA2MjpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MDYzOlxcdFxcdFxcdFxcdH1cXG43MDY0OlxcdFxcbjcwNjU6XFx0XFx0XFx0XFx0LypcXG43MDY2OlxcdFxcdFxcdFxcdCAqIENoZWNrIGlmIHRoaXMgaXMgYSBWTV9JTyB8IFZNX1BGTk1BUCBWTUEsIHdoaWNoXFxuNzA2NzpcXHRcXHRcXHRcXHQgKiB3ZSBjYW4gYWNjZXNzIHVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBjb2RlLlxcbjcwNjg6XFx0XFx0XFx0XFx0ICovXFxuNzA2OTpcXHRcXHRcXHRcXHRieXRlcyA9IDA7XFxuNzA3MDpcXHQjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UXFxuNzA3MTpcXHRcXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2VzcylcXG43MDcyOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZixcXG43MDczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBsZW4sIHdyaXRlKTtcXG43MDc0OlxcdCNlbmRpZlxcbjcwNzU6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2M9IDApXFxuNzA3NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG43MDc3OlxcdFxcdFxcdH0gZWxzZSB7XFxuNzA3ODpcXHRcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuNzA3OTpcXHRcXHRcXHRcXHRieXRlcyA9IGxlbjtcXG43MDgwOlxcdFxcdFxcdFxcdG9mZnNldCA9IGFkZHIgXFx1MDAyNiAoUEFHRV9TSVpFLTEpO1xcbjcwODE6XFx0XFx0XFx0XFx0aWYgKGJ5dGVzIFxcdTAwM2UgUEFHRV9TSVpFLW9mZnNldClcXG43MDgyOlxcdFxcdFxcdFxcdFxcdGJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDtcXG43MDgzOlxcdFxcbjcwODQ6XFx0XFx0XFx0XFx0bWFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgKiBQQUdFX1NJWkUpO1xcbjcwODU6XFx0XFx0XFx0XFx0aWYgKHdyaXRlKSB7XFxuNzA4NjpcXHRcXHRcXHRcXHRcXHRjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzA4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1hZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTtcXG43MDg4OlxcdFxcdFxcdFxcdFxcdGZvbGlvX21hcmtfZGlydHlfbG9jayhmb2xpbyk7XFxuNzA4OTpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjcwOTA6XFx0XFx0XFx0XFx0XFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsXFxuNzA5MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgYnVmLCBtYWRkciArIG9mZnNldCwgYnl0ZXMpO1xcbjcwOTI6XFx0XFx0XFx0XFx0fVxcbjcwOTM6XFx0XFx0XFx0XFx0Zm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBtYWRkcik7XFxuNzA5NDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjA5OjAzLjM2NTExNzQ4NloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTMzNTU0MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgQWNjZXNzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBfX2FjY2Vzc19yZW1vdGVfdm1gIGlzIGxvb3BpbmcsIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgYW5kIHRoZW4gYWR2YW5jaW5nIGJ1ZmZlcnMgYW5kIGxlbmd0aHMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBieXRlcyBhY2Nlc3NlZC4gVGhlIGtleSBoZXJlIGlzIHdoYXQgY2hhbmdlZCBpbiBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AuICBJIHNlZSB0aHJlZSBjcml0aWNhbCBtb2RpZmljYXRpb25zOlxuXG4xLiAgV2UndmUgbGltaXRlZCBhY2Nlc3MgdG8gb25lIHBhZ2UgYXQgYSB0aW1lLiBUaGlzIG1ha2VzIHNlbnNlOyBgZm9sbG93X3Bmbm1hcF9zdGFydCgpYCBvbmx5IGd1YXJhbnRlZXMgYSBzaW5nbGUgcGFnZSdzIGludGVncml0eSwgc28gaGFuZGxpbmcgbXVsdGktcGFnZSBvcGVyYXRpb25zIHJlcXVpcmVzIHJldHJ5aW5nIG9uIHRoZSBjYWxsZXIncyBlbmQsIGFuZCB0aGF0J3MgZ29vZCBwcmFjdGljZS5cbjIuICBgaW9yZW1hcF9wcm90YCBub3cgY29uc2lzdGVudGx5IG1hcHMgYFBBR0VfU0laRWAgaW5zdGVhZCBvZiBkeW5hbWljYWxseSBhbGlnbmluZyBiYXNlZCBvbiBsZW5ndGguIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cbjMuICBBIDMyLWJpdCBzaGlmdCBvdmVyZmxvdyBhbmQgdHlwZSBjYXN0IGlzc3VlIHdpdGggYGFyZ3MucGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUYCB3YXMgYWRkcmVzc2VkLiBUaGF0J3MgYSBjcml0aWNhbCBidWcgZml4LCBlbnN1cmluZyBwcm9wZXIgcGh5c2ljYWwgYWRkcmVzcyBjYWxjdWxhdGlvbiwgZXNwZWNpYWxseSBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcyB3aXRoIGxhcmdlIHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9ucy5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhYm91dCBhbGlnbmluZyB0aGUgYWNjZXNzIHNpemUgd2l0aCB3aGF0IGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBjYW4gcmVsaWFibHkgdmFsaWRhdGUuICBQcmV2aW91c2x5LCBgZ2VuZXJpY19hY2Nlc3NfcGh5c2AgY291bGQgbWFwIGFuZCBjb3B5IGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBwYWdlIHRoYXQgd2FzIGNoZWNrZWQuIGBmb2xsb3dfcGZubWFwX3N0YXJ0YCBvbmx5IHZlcmlmaWVzIG9uZSBQVEUvUEZOLiBOb3csIGNsYW1waW5nIGBsZW5gIHRvIHRoZSBwYWdlIHNpemUgcmVzdHJpY3RzIHRoZSBhY2Nlc3MgYW5kIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS4gSXQgZW5zdXJlcyB3ZSdyZSBvbmx5IG9wZXJhdGluZyB3aXRoaW4gdGhlIHNpbmdsZSBwYWdlIHRoYXQgaGFzIGJlZW4gdmFsaWRhdGVkLiBUaGlzLCBjb21iaW5lZCB3aXRoIHRoZSBgUEFHRV9TSVpFYCByZW1hcHBpbmcgYW5kIHRoZSBvdmVyZmxvdyBmaXgsIG1ha2VzIHRoaXMgYSByb2J1c3Qgc29sdXRpb24uXG5cbk5vdywgbGV0J3MgZXZhbHVhdGUgdGhpcyBhZ2FpbnN0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgY3JpdGVyaWEuICBUaGUgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIGZvdXIgY29uZGl0aW9ucy5cblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOiBObywgbm8ga2VybmVsIGRhdGEgaXMgYmVpbmcgbGVha2VkLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOiAgTm8sIFRoZSBgZm9sbG93X3Bmbm1hcF9hcmdzYCBzdHJ1Y3Qgc2VlbXMgdG8gYmUgY29ycmVjdGx5IGluaXRpYWxpemVkLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246IE5vIGNvbXBsZXggYWxsb2NhdGlvbnMgb2NjdXIuXG40LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCByZWFkczogV2l0aCBgbWVtY3B5X3RvaW9gIHdyaXRpbmcgZnJvbSB0aGUgYnVmZmVyIGFuZCBgbWVtY3B5X2Zyb21pb2AgcmVhZGluZyBpbnRvIHRoZSBidWZmZXIsIGNsYW1waW5nIGBsZW5gICpyZXN0cmljdHMqIGFjY2VzcywgYXZvaWRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpcyB0aGUgZml4LiBUaGUgb3JpZ2luYWwsIHBvdGVudGlhbGx5IHVuYm91bmRlZCBjb3B5IGlzIG5vdyByZXN0cmljdGVkLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGlzIHBhdGNoICpwcmV2ZW50cyogdGhlIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBLTVNBTiBjb25jZXJucywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgd2VyZSB0aGVyZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBLQVNBTiBpc3N1ZXMuIFRoaXMgaXMgYSBmaXgsIG5vdCBhIG5ldyB2dWxuZXJhYmlsaXR5LlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50LiBUaGUgcGF0Y2ggaXMgc291bmQuIEknbGwgcHJvdmlkZSB0aGUgZmluYWwgcmVzcG9uc2Ugbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODYzLCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDowOToxMS40OTg2NzQ4NTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBpc3N1ZXMgaW4gZ2VuZXJpY19hY2Nlc3NfcGh5cygpOlxcbjEuIEl0IGNsYW1wcyAnbGVuJyB0byAnUEFHRV9TSVpFIC0gb2Zmc2V0JyBhbmQgcmVkdWNlcyB0aGUgaW9yZW1hcF9wcm90KCkgbWFwcGluZyBzaXplIHRvIFBBR0VfU0laRSBiZWNhdXNlIGZvbGxvd19wZm5tYXBfc3RhcnQoKSBvbmx5IHJlc29sdmVzIGFuZCB2YWxpZGF0ZXMgYSBzaW5nbGUgcGFnZS9QRk4gYXQgYSB0aW1lLlxcbjIuIEl0IGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgc2hpZnQgb3ZlcmZsb3cgd2hlbiBjb21wYXJpbmcgcGh5c19hZGRyIGFnYWluc3QgYXJncy5wZm4gYnkgY2FzdGluZyBhcmdzLnBmbiB0byByZXNvdXJjZV9zaXplX3QuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggcGh5c2ljYWwgcGFnZSBtYXBwaW5nIGJvdW5kcyBhbmQgYXJpdGhtZXRpYyB0eXBlIHNpemluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywga2VybmVsIHN0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjb25jZXJucyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0d28gaXNzdWVzIGluIGdlbmVyaWNfYWNjZXNzX3BoeXMoKTpcXG4xLiBJdCBjbGFtcHMgJ2xlbicgdG8gJ1BBR0VfU0laRSAtIG9mZnNldCcgYW5kIHJlZHVjZXMgdGhlIGlvcmVtYXBfcHJvdCgpIG1hcHBpbmcgc2l6ZSB0byBQQUdFX1NJWkUgYmVjYXVzZSBmb2xsb3dfcGZubWFwX3N0YXJ0KCkgb25seSByZXNvbHZlcyBhbmQgdmFsaWRhdGVzIGEgc2luZ2xlIHBhZ2UvUEZOIGF0IGEgdGltZS5cXG4yLiBJdCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHNoaWZ0IG92ZXJmbG93IHdoZW4gY29tcGFyaW5nIHBoeXNfYWRkciBhZ2FpbnN0IGFyZ3MucGZuIGJ5IGNhc3RpbmcgYXJncy5wZm4gdG8gcmVzb3VyY2Vfc2l6ZV90LlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIHBoeXNpY2FsIHBhZ2UgbWFwcGluZyBib3VuZHMgYW5kIGFyaXRobWV0aWMgdHlwZSBzaXppbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGtlcm5lbCBzdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciByZWFkcy4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgY29uY2VybnMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt2gg[1] Phase: Succeeded StartedAt: 2026-09-10 04:09:22 +0000 UTC FinishedAt: 2026-09-10 04:09:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 04:09:22 +0000 UTC FinishedAt: 2026-09-10 04:09:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2] Phase: Succeeded StartedAt: 2026-09-10 04:09:22 +0000 UTC FinishedAt: 2026-09-10 07:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:09:22 +0000 UTC FinishedAt: 2026-09-10 07:51:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:09:22 +0000 UTC FinishedAt: 2026-09-10 04:09:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:09:22 +0000 UTC FinishedAt: 2026-09-10 04:09:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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-workflowpt2gg/series-workflowpt2gg-convert-artifact-3598564100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:09:32 +0000 UTC FinishedAt: 2026-09-10 04:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:09:32 +0000 UTC FinishedAt: 2026-09-10 04:25:34 +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:*6f46b06b-9631-4ecc-a962-cd59dc2ac2c6,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-workflowpt2gg/series-workflowpt2gg-convert-artifact-3598564100/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": "a800514d-930b-4be7-a1f7-8c711a4a952f", "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-workflowpt2gg/series-workflowpt2gg-build-action-3783360578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:09:32 +0000 UTC FinishedAt: 2026-09-10 04:25:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6f46b06b-9631-4ecc-a962-cd59dc2ac2c6,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-workflowpt2gg/series-workflowpt2gg-convert-artifact-3598564100/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": "a800514d-930b-4be7-a1f7-8c711a4a952f", "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-workflowpt2gg/series-workflowpt2gg-build-action-3783360578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:25:34 +0000 UTC FinishedAt: 2026-09-10 04:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:25:34 +0000 UTC FinishedAt: 2026-09-10 04:25:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:25:34 +0000 UTC FinishedAt: 2026-09-10 04:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:25:34 +0000 UTC FinishedAt: 2026-09-10 04:25:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-workflowpt2gg/series-workflowpt2gg-convert-artifact-1740227203/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:25:44 +0000 UTC FinishedAt: 2026-09-10 04:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:25:44 +0000 UTC FinishedAt: 2026-09-10 04:27:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a800514d-930b-4be7-a1f7-8c711a4a952f,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-workflowpt2gg/series-workflowpt2gg-build-action-3783360578/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-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:27:46 +0000 UTC FinishedAt: 2026-09-10 04:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:27:46 +0000 UTC FinishedAt: 2026-09-10 04:27:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:27:46 +0000 UTC FinishedAt: 2026-09-10 04:43:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:27:46 +0000 UTC FinishedAt: 2026-09-10 04:43:39 +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:*6f46b06b-9631-4ecc-a962-cd59dc2ac2c6,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-workflowpt2gg/series-workflowpt2gg-convert-artifact-1740227203/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": "789064e5-f948-4883-b0c6-08b3baa52081", "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-workflowpt2gg/series-workflowpt2gg-build-action-1940549943/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:27:46 +0000 UTC FinishedAt: 2026-09-10 04:43:29 +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:*6f46b06b-9631-4ecc-a962-cd59dc2ac2c6,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-workflowpt2gg/series-workflowpt2gg-convert-artifact-1740227203/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": "789064e5-f948-4883-b0c6-08b3baa52081", "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-workflowpt2gg/series-workflowpt2gg-build-action-1940549943/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:43:39 +0000 UTC FinishedAt: 2026-09-10 04:43:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:43:39 +0000 UTC FinishedAt: 2026-09-10 04:43:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:43:39 +0000 UTC FinishedAt: 2026-09-10 04:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:43:39 +0000 UTC FinishedAt: 2026-09-10 04:45:16 +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:*789064e5-f948-4883-b0c6-08b3baa52081,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-workflowpt2gg/series-workflowpt2gg-build-action-1940549943/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-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:45:26 +0000 UTC FinishedAt: 2026-09-10 07:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:45:26 +0000 UTC FinishedAt: 2026-09-10 07:51:03 +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":["generic_access_phys"],"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:*a800514d-930b-4be7-a1f7-8c711a4a952f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*789064e5-f948-4883-b0c6-08b3baa52081,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-workflowpt2gg/series-workflowpt2gg-build-action-3783360578/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-workflowpt2gg/series-workflowpt2gg-build-action-1940549943/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:45:26 +0000 UTC FinishedAt: 2026-09-10 04:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:45:26 +0000 UTC FinishedAt: 2026-09-10 04:45:31 +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":["generic_access_phys"],"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-workflowpt2gg/series-workflowpt2gg-convert-artifact-182543516/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:45:26 +0000 UTC FinishedAt: 2026-09-10 04:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:45:26 +0000 UTC FinishedAt: 2026-09-10 04:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:45:26 +0000 UTC FinishedAt: 2026-09-10 04:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:45:37 +0000 UTC FinishedAt: 2026-09-10 07:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpt2gg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"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":["generic_access_phys"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVMEM"],"series_id":"d8f3b30a-6212-4a43-bfc2-4b845fd7cf59","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-09-10 04:45:37 +0000 UTC FinishedAt: 2026-09-10 07:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a800514d-930b-4be7-a1f7-8c711a4a952f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*789064e5-f948-4883-b0c6-08b3baa52081,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-workflowpt2gg/series-workflowpt2gg-build-action-3783360578/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-workflowpt2gg/series-workflowpt2gg-build-action-1940549943/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-workflowpt2gg/series-workflowpt2gg-convert-artifact-182543516/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,}