Name: series-workflowdrsnn Phase: Succeeded StartedAt: 2026-08-14 16:07:32 +0000 UTC FinishedAt: 2026-08-14 16:31:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrsnn[0] Phase: Succeeded StartedAt: 2026-08-14 16:07:32 +0000 UTC FinishedAt: 2026-08-14 16:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrsnn[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 16:07:32 +0000 UTC FinishedAt: 2026-08-14 16:17:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c7c76f9232bd34835d821f14abdc5fafc17bc938", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_DRBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c7c76f9232bd34835d821f14abdc5fafc17bc938", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_DRBD" ], "series_id": "209a2e53-576a-42fd-8556-d8609e09e6e8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "drbd_nl_get_connections_dumpit", "drbd_nl_get_status_doit", "drbd_nl_get_status_dumpit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfRFJCRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdCYjMzQ7LAogICAgJiMzNDtkcmJkX25sX2dldF9zdGF0dXNfZG9pdCYjMzQ7LAogICAgJiMzNDtkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIHdoZXJlIHNlbnNpdGl2ZSBpbml0aWFsaXplZCBkYXRhICh0aGUgRFJCRCBzaGFyZWQgc2VjcmV0KSB3YXMgZXhwb3NlZCB0byB1bnByaXZpbGVnZWQgdXNlcnMgdmlhIG5ldGxpbmsuIFRvIGZpeCB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZGAsIHdoaWNoIGNvcGllcyB0aGUgYG5ldF9jb25mYCBzdHJ1Y3QgdG8gYSBsb2NhbCBzdGFjayB2YXJpYWJsZSAoYG5jX2NsZWFuYCksIHplcm9lcyBvdXQgdGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCwgYW5kIHRoZW4gc2VyaWFsaXplcyBpdC4gXG5cbldoaWxlIGBuY19jbGVhbmAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbmNfY2xlYW4gPSAqbmNgKS4gRnVydGhlcm1vcmUsIHRoZSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgc3RydWN0IGZpZWxkLWJ5LWZpZWxkIGludG8gbmV0bGluayBhdHRyaWJ1dGVzICh1c2luZyBgbmxhX3B1dGAsIGBubGFfcHV0X3UzMmAsIGV0Yy4pIHJhdGhlciB0aGFuIGNvcHlpbmcgdGhlIHN0cnVjdCBhcyBhIHJhdyBtZW1vcnkgYmxvY2suIFRoaXMgZW5zdXJlcyB0aGF0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBuZXZlciByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkIGl0c2VsZiBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSBzZXJpYWxpemF0aW9uLlxuXG5TaW5jZSB0aGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQsIHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIGJ5IHNhbml0aXppbmcgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIHVucHJpdmlsZWdlZCB1c2Vycy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgZHVtcGl0IGFuZCBkb2l0IGhhbmRsZXJzIGluIHRoZSBEUkJEIGJsb2NrIGRldmljZSBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0N2IxZjg1YzZhYTAzODZiOTIwNzIzNGM0NGEwMzE0NmIyNzJiYmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTY6MDk6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcbmluZGV4IGY5ZmZjZDY3NjA3YjUuLmI3N2Y5MDFmYzNlZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jXG5AQCAtMzMwNiw2ICYjNDM7MzMwNiwyNiBAQCBzdGF0aWMgaW50IG5sYV9wdXRfZHJiZF9jZmdfY29udGV4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIC1FTVNHU0laRTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIG5ldF9jb25mX3RvX3NrYigpIHNlcmlhbGl6ZXMgdGhlIHNoYXJlZCBzZWNyZXQgdmVyYmF0aW0uIEFueSBwYXRoIHRoYXQgY2FuXG4mIzQzOyAqIGFuc3dlciBhIHJlcXVlc3QgZnJvbSBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBtdXN0IHBhc3MgZXhjbHVkZV9zZW5zaXRpdmUsXG4mIzQzOyAqIHNvIHRoZSBzZWNyZXQgaXMgYmxhbmtlZCBpbiBhIHByaXZhdGUgY29weSBiZWZvcmUgaXQgcmVhY2hlcyB0aGUgc2tiLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqbmMsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIGV4Y2x1ZGVfc2Vuc2l0aXZlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9jb25mIG5jX2NsZWFuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWV4Y2x1ZGVfc2Vuc2l0aXZlKVxuJiM0MztcdFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcbiYjNDM7XG4mIzQzO1x0bmNfY2xlYW4gPSAqbmM7XG4mIzQzO1x0bWVtc2V0KG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQsIDAsIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7XG4mIzQzO1x0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgXHUwMDI2bmNfY2xlYW4pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogVGhlIGdlbmVyaWMgbmV0bGluayBkdW1wIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG91dHNpZGUgdGhlIGdlbmxfbG9jaygpLCBzb1xuICAqIHRoZXkgY2Fubm90IHVzZSB0aGUgc2ltcGxlIGF0dHJpYnV0ZSBwYXJzaW5nIGNvZGUgd2hpY2ggdXNlcyBnbG9iYWxcbkBAIC0zNjIxLDcgJiM0MzszNjQxLDggQEAgaW50IGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFja1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRuZXRfY29uZiA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbiBcdFx0aWYgKG5ldF9jb25mKSB7XG4tXHRcdFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmV0X2NvbmYpO1xuJiM0MztcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmV0X2NvbmYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IWNhcGFibGUoQ0FQX1NZU19BRE1JTikpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuQEAgLTM4NDIsMTggJiM0MzszODYzLDggQEAgc3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuIFx0XHRzdHJ1Y3QgbmV0X2NvbmYgKm5jO1xuIFxuIFx0XHRuYyA9IHJjdV9kZXJlZmVyZW5jZShmaXJzdF9wZWVyX2RldmljZShkZXZpY2UpLVx1MDAzZWNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYpO1xuLVx0XHRpZiAobmMpIHtcbi1cdFx0XHRpZiAoZXhjbHVkZV9zZW5zaXRpdmUpIHtcbi1cdFx0XHRcdHN0cnVjdCBuZXRfY29uZiBuY19jbGVhbiA9ICpuYztcbi1cbi1cdFx0XHRcdG1lbXNldChuY19jbGVhbi5zaGFyZWRfc2VjcmV0LCAwLFxuLVx0XHRcdFx0ICAgICAgIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7XG4tXHRcdFx0XHRuY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbiA9IDA7XG4tXHRcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBcdTAwMjZuY19jbGVhbik7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcbi1cdFx0XHR9XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChuYylcbiYjNDM7XHRcdFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCBleGNsdWRlX3NlbnNpdGl2ZSk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG5AQCAtNDA1OCw3ICYjNDM7NDA2OSw3IEBAIHN0YXRpYyBpbnQgZ2V0X29uZV9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0c3RydWN0IG5ldF9jb25mICpuYztcbiBcbiBcdFx0XHRcdG5jID0gcmN1X2RlcmVmZXJlbmNlKGNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYpO1xuLVx0XHRcdFx0aWYgKG5jIFx1MDAyNlx1MDAyNiBuZXRfY29uZl90b19za2Ioc2tiLCBuYykgIT0gMClcbiYjNDM7XHRcdFx0XHRpZiAobmMgXHUwMDI2XHUwMDI2IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgdHJ1ZSkgIT0gMClcbiBcdFx0XHRcdFx0Z290byBjYW5jZWw7XG4gXHRcdFx0fVxuIFx0XHRcdGdvdG8gZG9uZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9EUkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0JiMzNDssCiAgICAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kb2l0JiMzNDssCiAgICAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdiMWY4NWM2YWEwMzg2YjkyMDcyMzRjNDRhMDMxNDZiMjcyYmJlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE2OjA5OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKaW5kZXggZjlmZmNkNjc2MDdiNS4uYjc3ZjkwMWZjM2VmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCkBAIC0zMzA2LDYgJiM0MzszMzA2LDI2IEBAIHN0YXRpYyBpbnQgbmxhX3B1dF9kcmJkX2NmZ19jb250ZXh0KHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAomIzQzOy8qCiYjNDM7ICogbmV0X2NvbmZfdG9fc2tiKCkgc2VyaWFsaXplcyB0aGUgc2hhcmVkIHNlY3JldCB2ZXJiYXRpbS4gQW55IHBhdGggdGhhdCBjYW4KJiM0MzsgKiBhbnN3ZXIgYSByZXF1ZXN0IGZyb20gYW4gdW5wcml2aWxlZ2VkIHByb2Nlc3MgbXVzdCBwYXNzIGV4Y2x1ZGVfc2Vuc2l0aXZlLAomIzQzOyAqIHNvIHRoZSBzZWNyZXQgaXMgYmxhbmtlZCBpbiBhIHByaXZhdGUgY29weSBiZWZvcmUgaXQgcmVhY2hlcyB0aGUgc2tiLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKm5jLAomIzQzOwkJCQkgICAgIGJvb2wgZXhjbHVkZV9zZW5zaXRpdmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2NvbmYgbmNfY2xlYW47CiYjNDM7CiYjNDM7CWlmICghZXhjbHVkZV9zZW5zaXRpdmUpCiYjNDM7CQlyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpOwomIzQzOwomIzQzOwluY19jbGVhbiA9ICpuYzsKJiM0MzsJbWVtc2V0KG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQsIDAsIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7CiYjNDM7CW5jX2NsZWFuLnNoYXJlZF9zZWNyZXRfbGVuID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsICZhbXA7bmNfY2xlYW4pOwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGUgZ2VuZXJpYyBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzIGFyZSBjYWxsZWQgb3V0c2lkZSB0aGUgZ2VubF9sb2NrKCksIHNvCiAgKiB0aGV5IGNhbm5vdCB1c2UgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcGFyc2luZyBjb2RlIHdoaWNoIHVzZXMgZ2xvYmFsCkBAIC0zNjIxLDcgJiM0MzszNjQxLDggQEAgaW50IGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjawogCQkJZ290byBvdXQ7CiAJCW5ldF9jb25mID0gcmN1X2RlcmVmZXJlbmNlKGNvbm5lY3Rpb24tJmd0O25ldF9jb25mKTsKIAkJaWYgKG5ldF9jb25mKSB7Ci0JCQllcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuZXRfY29uZik7CiYjNDM7CQkJZXJyID0gbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5ldF9jb25mLAomIzQzOwkJCQkJCQkhY2FwYWJsZShDQVBfU1lTX0FETUlOKSk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0OwogCQl9CkBAIC0zODQyLDE4ICYjNDM7Mzg2Myw4IEBAIHN0YXRpYyBpbnQgbmxhX3B1dF9zdGF0dXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwKIAkJc3RydWN0IG5ldF9jb25mICpuYzsKIAogCQluYyA9IHJjdV9kZXJlZmVyZW5jZShmaXJzdF9wZWVyX2RldmljZShkZXZpY2UpLSZndDtjb25uZWN0aW9uLSZndDtuZXRfY29uZik7Ci0JCWlmIChuYykgewotCQkJaWYgKGV4Y2x1ZGVfc2Vuc2l0aXZlKSB7Ci0JCQkJc3RydWN0IG5ldF9jb25mIG5jX2NsZWFuID0gKm5jOwotCi0JCQkJbWVtc2V0KG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQsIDAsCi0JCQkJICAgICAgIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7Ci0JCQkJbmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwOwotCQkJCWVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsICZhbXA7bmNfY2xlYW4pOwotCQkJfSBlbHNlIHsKLQkJCQllcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7Ci0JCQl9Ci0JCX0KJiM0MzsJCWlmIChuYykKJiM0MzsJCQllcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmMsIGV4Y2x1ZGVfc2Vuc2l0aXZlKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGVycikKQEAgLTQwNTgsNyAmIzQzOzQwNjksNyBAQCBzdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJCQlzdHJ1Y3QgbmV0X2NvbmYgKm5jOwogCiAJCQkJbmMgPSByY3VfZGVyZWZlcmVuY2UoY29ubmVjdGlvbi0mZ3Q7bmV0X2NvbmYpOwotCQkJCWlmIChuYyAmYW1wOyZhbXA7IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKSAhPSAwKQomIzQzOwkJCQlpZiAobmMgJmFtcDsmYW1wOyBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmMsIHRydWUpICE9IDApCiAJCQkJCWdvdG8gY2FuY2VsOwogCQkJfQogCQkJZ290byBkb25lOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRFJCRCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBgZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuY2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBmdW5jdGlvbiBjYWxsZWQgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIHNhbml0aXphdGlvbiBpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGludGVyYWN0aW9uPyBTb3VuZHMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgc2VjdXJpdHktcmVsYXRlZC4gSXQmIzM5O3MgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGNvZGUsIHdoaWNoIGlzIGdvb2QgZm9yIG1haW50YWluYWJpbGl0eSwgYW5kIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAgYW5kIGBnZXRfb25lX3N0YXR1c2AuIFRoZXNlIGFyZSBuZXRsaW5rIGZ1bmN0aW9ucywgcmlnaHQ/IEFuZCB0aGUgY29udGV4dCBpcyBEUkJELCBhIGJsb2NrIGRldmljZSBkcml2ZXIg4oCTIGEgZGlzdHJpYnV0ZWQsIHJlcGxpY2F0ZWQgb25lLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkuCgpSaWdodCwgRFJCRC4gTmV0d29yayBibG9jayBkZXZpY2UuIEdlbmVyYWxseSBtYW5hZ2VkIHZpYSBuZXRsaW5rLiBUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0bGluayBkdW1wIGZ1bmN0aW9ucyB3aGljaCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBvZiBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgYSBibG9jayBkZXZpY2UgZHJpdmVyLCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIERSQkQgaXMgcmVhY2hhYmxlLCBhbmQgZGV0ZXJtaW5lIGl0cyBjb25maWd1cmF0aW9uLCB0byBmaW5kIG91dCBpZiBpdCYjMzk7cyBldmVuIHdvcnRoIGZvY3VzaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX0RSQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZz02PWNvbW1lbnQgXCYjMzQ7RFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMgb3IgSU5FVCBub3Qgc2VsZWN0ZWRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZy04LVxuZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWc6OTpjb25maWcgQkxLX0RFVl9EUkJEXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O0RSQkQgRGlzdHJpYnV0ZWQgUmVwbGljYXRlZCBCbG9jayBEZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYmFzZWQgb24gYSBiaXQgb2YgZGlnZ2luZzoKCioqVW5kZXJzdGFuZGluZyBEUkJEIENvbm5lY3Rpb24gU3RhdHVzIGFuZCBSZXBvcnRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgIGFuZCBgZ2V0X29uZV9zdGF0dXNgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoZXNlIGFyZSBwcm9iYWJseSByZWxhdGVkIHRvIGhvdyBEUkJEIHJlcG9ydHMgYW5kIHJldHJpZXZlcyBpdHMgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiwgbGlrZWx5IHRocm91Z2ggTmV0bGluay4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgpgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCBzb3VuZHMgbGlrZSBhIE5ldGxpbmsgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkdW1wIGNvbm5lY3Rpb24tcmVsYXRlZCBkYXRhLiBUaGUgJiMzNDtkdW1waXQmIzM0OyBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBmb3IgZ2VuZXJhdGluZyBhIGNvbXBsZXRlIHNuYXBzaG90IG9yIGEgZnVsbCBsaXN0aW5nIG9mIGFsbCBhY3RpdmUgRFJCRCBjb25uZWN0aW9ucy4gVGhpcyB3b3VsZCBiZSBjcnVjaWFsIGZvciBtb25pdG9yaW5nLCB0cm91Ymxlc2hvb3RpbmcsIGFuZCBwb3RlbnRpYWxseSwgaW1wbGVtZW50aW5nIG1hbmFnZW1lbnQgdG9vbHMuIEl0IHByb2JhYmx5IHByb3ZpZGVzIGRldGFpbHMgbGlrZSBwZWVyIElQIGFkZHJlc3NlcywgcG9ydHMsIGNvbm5lY3Rpb24gc3RhdGVzIChlLmcuLCBDb25uZWN0ZWQsIERpc2Nvbm5lY3RpbmcsIGV0Yy4pLCBhbmQgbWF5YmUgZXZlbiBzb21lIHBlcmZvcm1hbmNlIG1ldHJpY3MuIEkgc3VzcGVjdCBpdCBmdW5jdGlvbnMgYXMgYSBOZXRsaW5rIGR1bXAgaGFuZGxlci4KCk9uIHRoZSBvdGhlciBoYW5kLCBgZ2V0X29uZV9zdGF0dXNgIHNlZW1zIG11Y2ggbW9yZSBmb2N1c2VkIGFuZCBncmFudWxhci4gVGhlIG5hbWUgaW1wbGllcyBpdCYjMzk7cyBkZXNpZ25lZCB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIGEgKnNpbmdsZSogRFJCRCBjb25uZWN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB1c2VkIHdoZW4gYSBzcGVjaWZpYyBjb25uZWN0aW9uJiMzOTtzIHN0YXR1cyBpcyByZXF1aXJlZCwgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgYSBxdWVyeSBvciBhIHJlc3BvbnNlIHRvIGEgbWFuYWdlbWVudCByZXF1ZXN0LiBJdCB3b3VsZCBwcm92aWRlIGtleSBpbmZvcm1hdGlvbiBsaWtlIG9wZXJhdGlvbmFsIHN0YXRlLCBlcnJvcnMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFzcGVjdHMgcmVsYXRlZCB0byB0aGF0IGNvbm5lY3Rpb24uIEl0IG1heSByZXR1cm4gdmFyaW91cyBwYXJhbWV0ZXJzLCBvciBwb2ludGVycyB0byBzdHJ1Y3RzLCBidXQgb25seSBmb3IgYSBzcGVjaWZpYywgZ2l2ZW4gY29ubmVjdGlvbi4KCkkmIzM5O2QgYmV0IHRoZXkmIzM5O3JlIGxpa2VseSBjb21wbGVtZW50YXJ5LiBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCBwcm92aWRlcyB0aGUgYnJvYWQgb3ZlcnZpZXcsIHdoaWxlIGBnZXRfb25lX3N0YXR1c2AgaXMgdGhlIHByZWNpc2lvbiB0b29sIGZvciBpbi1kZXB0aCBpbnNwZWN0aW9uIG9mIGEgc3BlY2lmaWMgY29ubmVjdGlvbi4gVGhlIHJlbGF0aW9uc2hpcCBpcyBsaWtlbHkgdGhhdCB0aGUgZHVtcCBmdW5jdGlvbiBwcm92aWRlcyBhbiBvdmVydmlldywgYW5kIGBnZXRfb25lX3N0YXR1c2AgaXMgbGlrZWx5IGNhbGxlZCBpbnRlcm5hbGx5IHRvIHJldHVybiBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgY29ubmVjdGlvbiwgb25lIGF0IGEgdGltZS4gSSYjMzk7ZCBhbHNvIGltYWdpbmUgdGhhdCBhIE5ldGxpbmsgbWVzc2FnZSB3b3VsZCBiZSB1c2VkIHRvIHRyaWdnZXIgYm90aCB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM1NDk9ZW51bSB7IFNJTkdMRV9SRVNPVVJDRSwgSVRFUkFURV9SRVNPVVJDRVMgfTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzU1MC1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzU1MTppbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzU1Mi17XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MzU5PWNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcmJkX25sX29wc1szMl0gPSB7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtNjE3LVx0XHQuY21kXHRcdD0gRFJCRF9BRE1fR0VUX0NPTk5FQ1RJT05TLFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6NjE4Olx0XHQuZHVtcGl0XHRcdD0gZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0LFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtNjE5LVx0XHQuZG9uZVx0XHQ9IGRyYmRfYWRtX2R1bXBfY29ubmVjdGlvbnNfZG9uZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaD03ND1pbnQgZHJiZF9ubF9nZXRfZGV2aWNlc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oLTc1LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg6NzY6aW50IGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtNzctXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcmVxdWVzdCwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqTXkgSW50ZXJuYWwgTW9ub2xvZ3VlIG9uIGBnZXRfb25lX3N0YXR1c2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY29uY2VwdCBoZXJlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3Qgb24gdGhlIHN1cmZhY2UuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbiBvciBwcm9jZXNzLCBsZXQmIzM5O3MgY2FsbCBpdCBgZ2V0X29uZV9zdGF0dXNgLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYW4gZXhwZXJ0LCBpc24mIzM5O3QgKndoYXQqIGl0IGRvZXMsIGJ1dCAqaG93KiBpdCYjMzk7cyBpbXBsZW1lbnRlZCBhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYmFrZWQgaW50byBpdHMgZGVzaWduLiBJcyB0aGlzIGEgc2ltcGxlIGdldHRlciwgZmV0Y2hpbmcgYSBzaW5nbGUgc3RhdHVzIGZyb20gYSBkYXRhYmFzZSBvciBhIG1vcmUgY29tcGxleCBvcmNoZXN0cmF0aW9uIG9mIG11bHRpcGxlIHNlcnZpY2VzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgdGhlIHN0YXR1cyBpcyB1cGRhdGVkIGNvbmN1cnJlbnRseT8KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZWRnZSBjYXNlczogV2hhdCBoYXBwZW5zIGlmIHRoZSByZXF1ZXN0ZWQgc3RhdHVzIGRvZXNuJiMzOTt0IGV4aXN0PyBEb2VzIGl0IHJldHVybiBhIG51bGwsIHJhaXNlIGFuIGV4Y2VwdGlvbiwgb3IgcmV0dXJuIHNvbWUga2luZCBvZiAmIzM0O25vdCBmb3VuZCYjMzQ7IG9iamVjdD8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gSG93IGFyZSBleGNlcHRpb25zIHByb3BhZ2F0ZWQgYW5kIGhhbmRsZWQgZnVydGhlciB1cCB0aGUgY2FsbCBzdGFjaz8gSXMgdGhlcmUgYW55IGNhY2hpbmcgaW52b2x2ZWQ/IElmIHNvLCB3aGF0JiMzOTtzIHRoZSBjYWNoZSBpbnZhbGlkYXRpb24gc3RyYXRlZ3k/CgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHBlcmZvcm1hbmNlOiBJcyB0aGlzIGZ1bmN0aW9uIG9wdGltaXplZCBmb3IgZnJlcXVlbnQgY2FsbHM/IERvZXMgaXQgcmVseSBvbiBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucz8gQW5kIGlmIGl0JiMzOTtzIGFzeW5jaHJvbm91cywgaXMgaXQgaGFuZGxpbmcgY29uY3VycmVuY3kgcHJvcGVybHksIHBlcmhhcHMgd2l0aCBhc3luYy9hd2FpdCwgY29yb3V0aW5lcywgb3IgdGhyZWFkaW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBib3R0bGVuZWNrIGluIHRoZSBsYXJnZXIgc3lzdGVtPyBBcmUgdGhlcmUgbG9nZ2luZyBhbmQgbW9uaXRvcmluZyBpbiBwbGFjZSB0byB0cmFjayBlcnJvcnMgYW5kIHJlc3BvbnNlIHRpbWVzPwoKVGhlIG92ZXJhbGwgc3lzdGVtIGlzIGltcG9ydGFudC4gSG93IGRvZXMgYGdldF9vbmVfc3RhdHVzYCBpbnRlcmZhY2Ugd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbGFyZ2VyIHN5c3RlbT8gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSYjMzk7bSBhbHJlYWR5IGVudmlzaW9uaW5nIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gZXh0ZXJuYWwgc2VydmljZXMgb3IgcmVzb3VyY2VzLiBBIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW5kIG1haW50YWluYWJpbGl0eS4KCkZpbmFsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGVzdGFiaWxpdHkuIElzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgd2l0aCB1bml0IHRlc3RpbmcgaW4gbWluZD8gQXJlIHRoZXJlIG1vY2thYmxlIGRlcGVuZGVuY2llcz8gV2hhdCYjMzk7cyB0aGUgcGxhbiBmb3IgaW50ZWdyYXRpb24gYW5kIHN5c3RlbSB0ZXN0cyB0aGF0IHdvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uPwoKRXNzZW50aWFsbHksIEkmIzM5O20gYWxyZWFkeSBydW5uaW5nIHRocm91Z2ggYSBtZW50YWwgY2hlY2tsaXN0IG9mIGJlc3QgcHJhY3RpY2VzIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoZSAmIzM0O3NpbXBsZSYjMzQ7IGBnZXRfb25lX3N0YXR1c2AgZnVuY3Rpb24gaXMganVzdCB0aGUgc3RhcnRpbmcgcG9pbnQ7IHRoZSByZWFsIHZhbHVlIGlzIGluIHVuZGVyc3RhbmRpbmcgaXRzIGJyb2FkZXIgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9vbmVfc3RhdHVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM5NjI9aW50IGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTg0LVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTg1OnN0YXRpYyBpbnQgZ2V0X29uZV9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTg2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQxMTEtICpcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDExMjogKiBPbmNlIHRoaW5ncyBhcmUgc2V0dXAgcHJvcGVybHksIHdlIGNhbGwgaW50byBnZXRfb25lX3N0YXR1cygpLlxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTEzLSAqL1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz00MTE0PWludCBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQxNDktXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjQxNTA6XHRrcmVmX3B1dChcdTAwMjZyZXNvdXJjZS1cdTAwM2VrcmVmLCBkcmJkX2Rlc3Ryb3lfcmVzb3VyY2UpOyAvKiBnZXRfb25lX3N0YXR1cygpIHJldmFsaWRhdGVzIHRoZSByZXNvdXJjZSAqL1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTUxLVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDE1OC1kdW1wOlxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzo0MTU5Olx0cmV0dXJuIGdldF9vbmVfc3RhdHVzKHNrYiwgY2IpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTYwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBEUkJEIE5ldGxpbmsgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGluZm9ybWF0aW9uIGxlYWsgaW4gdGhlIERSQkQgbmV0bGluayBpbnRlcmZhY2Ug4oCTIGFuIHVucHJpdmlsZWdlZCBwcm9jZXNzIGNvdWxkIHBvdGVudGlhbGx5IHNuYWcgYSBzaGFyZWQgc2VjcmV0LiBJdCYjMzk7cyBhIHNlY3VyaXR5IGZpeCwgcG90ZW50aWFsbHkgZWFybmluZyBhIENWRSwgb3IgYXQgbGVhc3QgYSBidWdmaXguIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3RyYWlnaHRmb3J3YXJkOiBzYW5pdGl6ZSB0aGUgc2hhcmVkIHNlY3JldCBpbiB0aGUgbmV0bGluayBvdXRwdXQgaWYgdGhlIHVzZXIgbGFja3MgYENBUF9TWVNfQURNSU5gLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7IFRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgaXRzZWxmIGxvb2tzIGluY3JlZGlibHkgc2ltcGxlLiBJdCYjMzk7cyBqdXN0IGNhbGxpbmcgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCBlZmZlY3RpdmVseSB6ZXJvaW5nIG91dCB0aGUgcmVsZXZhbnQgZmllbGRzLiBGcm9tIGEgbG9naWMgY29tcGxleGl0eSBwZXJzcGVjdGl2ZSwgdGhlcmUgaXNuJiMzOTt0IG11Y2ggdG8gc2luayBvdXIgdGVldGggaW50by4gSG93ZXZlciwgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIHJlYWNoYWJsZSBkcml2ZXIuIFNvLCB3aGlsZSBpdCYjMzk7cyBzaW1wbGUsIGl0JiMzOTtzIGEgbW9kaWZpY2F0aW9uIGluIGFuIGFyZWEgdGhhdCYjMzk7cyBhY2Nlc3NpYmxlLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGluc3RydWN0aW9ucyBhZ2Fpbi4uLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYuLi4mIzM0OyBBaGEhIFRoaXMgZG9lc24mIzM5O3QgZmFsbCBpbnRvICphbnkqIG9mIHRob3NlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcmllcy4gVGhpcyBhY3R1YWxseSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMvZHJpdmVycy4gT2theSwgc28gZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBpcyBtaW5vciwgd2Ugc2hvdWxkIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9dHJ1ZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHJlbGV2YW50IHN5bWJvbHMuIFRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGFyZSBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCBhbmQgYGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRgLiBJIGFtIGFsc28gaW5jbHVkaW5nIGBnZXRfb25lX3N0YXR1c2AgYmVjYXVzZSBpdCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YC4KCkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlnIGlzIGBCTEtfREVWX0RSQkRgLiBMZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayBpZiB0aGF0IGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9EUkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWc9Nj1jb21tZW50IFwmIzM0O0RSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTIG9yIElORVQgbm90IHNlbGVjdGVkXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWctOC1cbmRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnOjk6Y29uZmlnIEJMS19ERVZfRFJCRFxuZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtEUkJEIERpc3RyaWJ1dGVkIFJlcGxpY2F0ZWQgQmxvY2sgRGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEJMS19ERVZfRFJCRCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX0RSQkRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMsIHRoZSBtb2R1bGVzIGl0IHJlbGllcyB1cG9uLiBXaGF0IG90aGVyIGJsb2NrIGRldmljZSBkcml2ZXJzIGFyZSBpbnZvbHZlZD8gSXMgaXQgYSB2aXJ0dWFsIGJsb2NrIGRldmljZT8gSWYgc28sIHdoYXQgdmlydHVhbCBibG9jayBsYXllciBob29rcyBkb2VzIGl0IGVtcGxveT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGFueSBzcGVjaWZpYyBuZXR3b3JrIHByb3RvY29scyBvciBzdGFja3MgYXQgdGhlIGtlcm5lbCBsZXZlbD8gTXkgbWluZCBzdGFydHMgYnVpbGRpbmcgYSBtZW50YWwgbWFwLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsYXllcnMgaW52b2x2ZWQ6IHRoZSBnZW5lcmljIGJsb2NrIGxheWVyLCBwb3RlbnRpYWwgSS9PIHNjaGVkdWxlcnMsIHRoZSBuZXR3b3JrIGNvbXBvbmVudCBmb3IgcmVwbGljYXRpb24sIGFueSB1bmRlcmx5aW5nIHN0b3JhZ2UgZHJpdmVycy4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBgS2NvbmZpZ2AgZW50cmllcyByZWxhdGVkIHRvIERSQkQsIHRvIHNlZSB3aGF0IG1vZHVsZXMgaXQgY2FuIG9wdGlvbmFsbHkgbG9hZCBhbmQgd2hhdCBpdCB1bmNvbmRpdGlvbmFsbHkgcmVxdWlyZXMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgc3RvcmFnZSBkZXZpY2UgdHlwZXMgaXQmIzM5O3Mgb3B0aW1pemVkIGZvcj8gQXJlIHRoZXJlIGFueSBjb3JlIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIEFQSXMgaXQgZGVlcGx5IGludGVyYWN0cyB3aXRoIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgZGl2aW5nIGludG8gdGhlIHNvdXJjZSBjb2RlLCBjcm9zcy1yZWZlcmVuY2luZyBkZWZpbml0aW9ucywgYW5kIHVuZGVyc3RhbmRpbmcgaG93IGRpZmZlcmVudCBrZXJuZWwgc3Vic3lzdGVtcyBpbnRlcmFjdCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIERSQkQgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbW1lbnQgXCYjMzQ7RFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMgb3IgSU5FVCBub3Qgc2VsZWN0ZWRcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gUFJPQ19GUz0mIzM5O24mIzM5OyB8fCBJTkVUPSYjMzk7biYjMzk7XG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIEJMS19ERVZfRFJCRFxuICAxMDpcdFx0dHJpc3RhdGUgXCYjMzQ7RFJCRCBEaXN0cmlidXRlZCBSZXBsaWNhdGVkIEJsb2NrIERldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDExOlx0XHRkZXBlbmRzIG9uIFBST0NfRlMgXHUwMDI2XHUwMDI2IElORVRcbiAgMTI6XHRcdHNlbGVjdCBMUlVfQ0FDSEVcbiAgMTM6XHRcdHNlbGVjdCBDUkMzMlxuICAxNDpcdFx0aGVscFxuICAxNTpcdFxuICAxNjpcdFx0ICBOT1RFOiBJbiBvcmRlciB0byBhdXRoZW50aWNhdGUgY29ubmVjdGlvbnMgeW91IGhhdmUgdG8gc2VsZWN0XG4gIDE3Olx0XHQgIENSWVBUT19ITUFDIGFuZCBhIGhhc2ggZnVuY3Rpb24gYXMgd2VsbC5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgRFJCRCBpcyBhIHNoYXJlZC1ub3RoaW5nLCBzeW5jaHJvbm91c2x5IHJlcGxpY2F0ZWQgYmxvY2sgZGV2aWNlLiBJdFxuICAyMDpcdFx0ICBpcyBkZXNpZ25lZCB0byBzZXJ2ZSBhcyBhIGJ1aWxkaW5nIGJsb2NrIGZvciBoaWdoIGF2YWlsYWJpbGl0eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRSQkQgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgY29uZmlndXJlIHRoaXMgRFJCRCBtb2R1bGUuIFJpZ2h0LCBgQkxLX0RFVl9EUkJEYCByZWxpZXMgb24gYm90aCBgUFJPQ19GU2AgYW5kIGBJTkVUYC4gTm90IGEgc3VycHJpc2UsIGFuZCB1c3VhbGx5IGJvdGggYXJlIGVuYWJsZWQgYW55d2F5LiBUaGVyZWZvcmUsIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBhZGQgYEJMS19ERVZfRFJCRGAgZGlyZWN0bHkgdG8gbXkgRW5hYmxlQ29uZmlncy4gSXQmIzM5O3MgdGhlIG1vc3Qgc2Vuc2libGUgdGhpbmcgdG8gZG8uCgpOb3csIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgc3ltYm9sczogYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YCwgYW5kIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGAuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQuIEhvbGQgb24uLi4gSSBzZWUgdGhhdCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgIGl0c2VsZiBpc24mIzM5O3QgbW9kaWZpZWQuIFRoYXQmIzM5O3MgYSBsaXR0bGUgc3RyYW5nZS4gQnV0IEkgc2VlIHRoYXQgYG5sYV9wdXRfc3RhdHVzX2luZm9gIGlzIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20gYGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0YD8gSG1tLCB0aGF0JiMzOTtzIG5vdCB3aGF0IEkgZXhwZWN0ZWQuIEJldHRlciBjaGVjayB0aGF0IHNwZWNpZmljIGNhbGwgcGF0aCBtb3JlIGNsb3NlbHkgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbiBjYWxsIGdyYXBoIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmxhX3B1dF9zdGF0dXNfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zODEzPXN0YXRpYyBzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICp0aGVfb25seV9jb25uZWN0aW9uKHN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4MjEtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4MjI6c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODIzLVx0XHRjb25zdCBzdHJ1Y3Qgc2liX2luZm8gKnNpYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM5NjI9aW50IGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTczLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTc0Olx0ZXJyID0gbmxhX3B1dF9zdGF0dXNfaW5mbyhhZG1fY3R4LVx1MDAzZXJlcGx5X3NrYiwgYWRtX2N0eC1cdTAwM2VkZXZpY2UsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTc1LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk4NT1zdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQwODMtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjQwODQ6XHRcdGlmIChubGFfcHV0X3N0YXR1c19pbmZvKHNrYiwgZGV2aWNlLCBOVUxMKSkge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MDg1LWNhbmNlbDpcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTQ2NDM9dm9pZCBkcmJkX2JjYXN0X2V2ZW50KHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCBjb25zdCBzdHJ1Y3Qgc2liX2luZm8gKnNpYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQ2NjEtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjQ2NjI6XHRpZiAobmxhX3B1dF9zdGF0dXNfaW5mbyhtc2csIGRldmljZSwgc2liKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDY2My1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTIKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogODM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEUkJEIE5ldGxpbmsgSW50ZXJmYWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYG5sYV9wdXRfc3RhdHVzX2luZm9gIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGAsIGBnZXRfb25lX3N0YXR1c2AsIGFuZCBgZHJiZF9iY2FzdF9ldmVudGAuIFRoZSBgZ2V0X29uZV9zdGF0dXNgIGZ1bmN0aW9uIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAuIFRoaXMgZ2l2ZXMgbWUgdGhlIGVudHJ5IHBvaW50czogYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YCwgYW5kIGBkcmJkX2JjYXN0X2V2ZW50YC4gSSB3aWxsIGZvY3VzIG15IGFuYWx5c2lzIG9uIHRoZXNlIGVudHJ5IHBvaW50cy4KCkdpdmVuIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAgdG8gYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYEJMS19ERVZfRFJCRGAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgcmVsZXZhbnQgb25lLgoKQWgsIEkgbWlzc2VkIGl0IGluaXRpYWxseSBidXQgYGRyYmRfYmNhc3RfZXZlbnRgIGlzIGFsc28gYSB2YWxpZCBlbnRyeSBwb2ludC4gSSYjMzk7bGwgaW5jbHVkZSBpdC4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgc2FuaXRpemluZyB0aGUgYG5ldF9jb25mYCBzdHJ1Y3R1cmUsIHBhcnRpY3VsYXJseSB0aGUgYHNoYXJlZF9zZWNyZXRgLCB3aGVuIGl0JiMzOTtzIGJlaW5nIHNlbnQgb3ZlciB0aGUgbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIHJlcGxhY2VzIGEgY29uZGl0aW9uYWwgYmxvY2sgdG8gY2FsbCBhIG5ldyBgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZGAgZnVuY3Rpb24gd2hpY2ggc2FuaXRpemVzIHRoZSBkYXRhIGJlZm9yZSB0aGUgZGF0YSBpcyB3cml0dGVuIG91dC4gVGhpcyBoYXBwZW5zIGluIGJvdGggYG5sYV9wdXRfc3RhdHVzX2luZm9gIGFuZCBgZ2V0X29uZV9zdGF0dXNgLgoKU28sIHRoZSBwYXRjaCBhZmZlY3RzIGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgbmxhX3B1dF9zdGF0dXNfaW5mb2AsIGFuZCBgZ2V0X29uZV9zdGF0dXNgLCBhbmQgYnkgZXh0ZW5zaW9uIGFueSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBhbnkgb2YgdGhlc2UuIFRoZSBlbnRyeSBwb2ludHMgYXJlOiBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCwgYGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0YCwgYGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRgLCBhbmQgYGRyYmRfYmNhc3RfZXZlbnRgLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBzZXQ6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYCAoQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNsZWFyIHNlY3VyaXR5IGZpeC4pCiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1pdGlnYXRlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIGJ5IHNhbml0aXppbmcgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIHVucHJpdmlsZWdlZCB1c2Vycy4gSXQgYWx0ZXJzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXQmIzM0OywgJiMzNDtkcmJkX25sX2dldF9zdGF0dXNfZG9pdCYjMzQ7LCAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXQmIzM0OywgJiMzNDtkcmJkX2JjYXN0X2V2ZW50JiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7QkxLX0RFVl9EUkJEJiMzNDtdYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9EUkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0JiMzNDssCiAgICAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kb2l0JiMzNDssCiAgICAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0RSQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXQmIzM0OywKICAgICYjMzQ7ZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXQmIzM0OywKICAgICYjMzQ7ZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIGJ5IHNhbml0aXppbmcgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIHVucHJpdmlsZWdlZCB1c2Vycy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgZHVtcGl0IGFuZCBkb2l0IGhhbmRsZXJzIGluIHRoZSBEUkJEIGJsb2NrIGRldmljZSBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIHdoZXJlIHNlbnNpdGl2ZSBpbml0aWFsaXplZCBkYXRhICh0aGUgRFJCRCBzaGFyZWQgc2VjcmV0KSB3YXMgZXhwb3NlZCB0byB1bnByaXZpbGVnZWQgdXNlcnMgdmlhIG5ldGxpbmsuIFRvIGZpeCB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZGAsIHdoaWNoIGNvcGllcyB0aGUgYG5ldF9jb25mYCBzdHJ1Y3QgdG8gYSBsb2NhbCBzdGFjayB2YXJpYWJsZSAoYG5jX2NsZWFuYCksIHplcm9lcyBvdXQgdGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCwgYW5kIHRoZW4gc2VyaWFsaXplcyBpdC4gXG5cbldoaWxlIGBuY19jbGVhbmAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbmNfY2xlYW4gPSAqbmNgKS4gRnVydGhlcm1vcmUsIHRoZSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgc3RydWN0IGZpZWxkLWJ5LWZpZWxkIGludG8gbmV0bGluayBhdHRyaWJ1dGVzICh1c2luZyBgbmxhX3B1dGAsIGBubGFfcHV0X3UzMmAsIGV0Yy4pIHJhdGhlciB0aGFuIGNvcHlpbmcgdGhlIHN0cnVjdCBhcyBhIHJhdyBtZW1vcnkgYmxvY2suIFRoaXMgZW5zdXJlcyB0aGF0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBuZXZlciByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkIGl0c2VsZiBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSBzZXJpYWxpemF0aW9uLlxuXG5TaW5jZSB0aGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQsIHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0N2IxZjg1YzZhYTAzODZiOTIwNzIzNGM0NGEwMzE0NmIyNzJiYmVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTY6MDk6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYwppbmRleCBmOWZmY2Q2NzYwN2I1Li5iNzdmOTAxZmMzZWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKQEAgLTMzMDYsNiAmIzQzOzMzMDYsMjYgQEAgc3RhdGljIGludCBubGFfcHV0X2RyYmRfY2ZnX2NvbnRleHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gLUVNU0dTSVpFOwogfQogCiYjNDM7LyoKJiM0MzsgKiBuZXRfY29uZl90b19za2IoKSBzZXJpYWxpemVzIHRoZSBzaGFyZWQgc2VjcmV0IHZlcmJhdGltLiBBbnkgcGF0aCB0aGF0IGNhbgomIzQzOyAqIGFuc3dlciBhIHJlcXVlc3QgZnJvbSBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBtdXN0IHBhc3MgZXhjbHVkZV9zZW5zaXRpdmUsCiYjNDM7ICogc28gdGhlIHNlY3JldCBpcyBibGFua2VkIGluIGEgcHJpdmF0ZSBjb3B5IGJlZm9yZSBpdCByZWFjaGVzIHRoZSBza2IuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqbmMsCiYjNDM7CQkJCSAgICAgYm9vbCBleGNsdWRlX3NlbnNpdGl2ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfY29uZiBuY19jbGVhbjsKJiM0MzsKJiM0MzsJaWYgKCFleGNsdWRlX3NlbnNpdGl2ZSkKJiM0MzsJCXJldHVybiBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7CiYjNDM7CiYjNDM7CW5jX2NsZWFuID0gKm5jOwomIzQzOwltZW1zZXQobmNfY2xlYW4uc2hhcmVkX3NlY3JldCwgMCwgc2l6ZW9mKG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQpKTsKJiM0MzsJbmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgJmFtcDtuY19jbGVhbik7CiYjNDM7fQomIzQzOwogLyoKICAqIFRoZSBnZW5lcmljIG5ldGxpbmsgZHVtcCBjYWxsYmFja3MgYXJlIGNhbGxlZCBvdXRzaWRlIHRoZSBnZW5sX2xvY2soKSwgc28KICAqIHRoZXkgY2Fubm90IHVzZSB0aGUgc2ltcGxlIGF0dHJpYnV0ZSBwYXJzaW5nIGNvZGUgd2hpY2ggdXNlcyBnbG9iYWwKQEAgLTM2MjEsNyAmIzQzOzM2NDEsOCBAQCBpbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrCiAJCQlnb3RvIG91dDsKIAkJbmV0X2NvbmYgPSByY3VfZGVyZWZlcmVuY2UoY29ubmVjdGlvbi0mZ3Q7bmV0X2NvbmYpOwogCQlpZiAobmV0X2NvbmYpIHsKLQkJCWVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5ldF9jb25mKTsKJiM0MzsJCQllcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmV0X2NvbmYsCiYjNDM7CQkJCQkJCSFjYXBhYmxlKENBUF9TWVNfQURNSU4pKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7CiAJCX0KQEAgLTM4NDIsMTggJiM0MzszODYzLDggQEAgc3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLAogCQlzdHJ1Y3QgbmV0X2NvbmYgKm5jOwogCiAJCW5jID0gcmN1X2RlcmVmZXJlbmNlKGZpcnN0X3BlZXJfZGV2aWNlKGRldmljZSktJmd0O2Nvbm5lY3Rpb24tJmd0O25ldF9jb25mKTsKLQkJaWYgKG5jKSB7Ci0JCQlpZiAoZXhjbHVkZV9zZW5zaXRpdmUpIHsKLQkJCQlzdHJ1Y3QgbmV0X2NvbmYgbmNfY2xlYW4gPSAqbmM7Ci0KLQkJCQltZW1zZXQobmNfY2xlYW4uc2hhcmVkX3NlY3JldCwgMCwKLQkJCQkgICAgICAgc2l6ZW9mKG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQpKTsKLQkJCQluY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbiA9IDA7Ci0JCQkJZXJyID0gbmV0X2NvbmZfdG9fc2tiKHNrYiwgJmFtcDtuY19jbGVhbik7Ci0JCQl9IGVsc2UgewotCQkJCWVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTsKLQkJCX0KLQkJfQomIzQzOwkJaWYgKG5jKQomIzQzOwkJCWVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgZXhjbHVkZV9zZW5zaXRpdmUpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAoZXJyKQpAQCAtNDA1OCw3ICYjNDM7NDA2OSw3IEBAIHN0YXRpYyBpbnQgZ2V0X29uZV9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJCXN0cnVjdCBuZXRfY29uZiAqbmM7CiAKIAkJCQluYyA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLSZndDtuZXRfY29uZik7Ci0JCQkJaWYgKG5jICZhbXA7JmFtcDsgbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpICE9IDApCiYjNDM7CQkJCWlmIChuYyAmYW1wOyZhbXA7IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgdHJ1ZSkgIT0gMCkKIAkJCQkJZ290byBjYW5jZWw7CiAJCQl9CiAJCQlnb3RvIGRvbmU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFJCRCBQYXRjaCBmb3IgU2Vuc2l0aXZlIERhdGEgRXhwb3N1cmUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJiZF9ubC5jYCB3aXRoaW4gdGhlIERSQkQgYmxvY2sgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZXcgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgIGhlbHBlciBmdW5jdGlvbi4gSSBzZWUgaXQgdGFrZXMgYSBgc3RydWN0IG5ldF9jb25mICpuY2AgYW5kIGEgYm9vbGVhbiBmbGFnIGBleGNsdWRlX3NlbnNpdGl2ZWAuIFRoZSBnb2FsIGlzIHRvIHNhbml0aXplIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYmVmb3JlIHNlbmRpbmcgaXQgb3V0LCBwcmVzdW1hYmx5IG92ZXIgdGhlIG5ldHdvcmsuCgpSaWdodCwgc28gd2hlbiBgZXhjbHVkZV9zZW5zaXRpdmVgIGlzIHRydWUsIGl0ICpjb3BpZXMqIHRoZSBjb250ZW50cyBvZiBgKm5jYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgbmFtZWQgYG5jX2NsZWFuYCwgYW5kIHRoZW4gZXhwbGljaXRseSBjbGVhcnMgdGhlIGBzaGFyZWRfc2VjcmV0YCBhbmQgYHNoYXJlZF9zZWNyZXRfbGVuYCBmaWVsZHMuIEFmdGVyIHRoYXQsIGl0IGNhbGxzIHRoZSBvcmlnaW5hbCBgbmV0X2NvbmZfdG9fc2tiYCBmdW5jdGlvbiwgYnV0IHdpdGggYCZhbXA7bmNfY2xlYW5gLiBNYWtlcyBzZW5zZSwgcmVtb3ZpbmcgdGhlIHNlbnNpdGl2ZSBkYXRhLgoKSGFuZyBvbiBhIHNlY29uZOKApiBgbmNfY2xlYW5gIGlzICpsb2NhbCo/IEl0JiMzOTtzIG9uIHRoZSBzdGFjay4gTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhpcyBgbmNfY2xlYW4gPSAqbmM7YCBhc3NpZ25tZW50LiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4KCklmIGBzdHJ1Y3QgbmV0X2NvbmZgIGhhcyBwYWRkaW5nLCB0aGVuIHRoZSBjb3B5IG1pZ2h0IGJlIGEgc3RyYWlnaHQtdXAgbWVtY3B5LCBvciBpdCBtYXkgaW5pdGlhbGl6ZSBmaWVsZHMgaW4gYSBwZXItZmllbGQgbWFubmVyLiBJbiB0aGUgY2FzZSBvZiBhIG1lbWNweSwgdGhlbiB3aGF0ZXZlciB2YWx1ZXMgd2VyZSBpbiB0aGUgcGFkZGluZyBvZiB0aGUgb3JpZ2luYWwgYCpuY2Agd2lsbCBiZSBjb3BpZWQgaW50byBgbmNfY2xlYW5gIC0tIGlmIHRoZSBwYWRkaW5nIGhhZCB1bmluaXRpYWxpemVkIHZhbHVlcywgdGhlbiBgbmNfY2xlYW5gIHdvdWxkIGhhdmUgdGhlIHNhbWUgdW5pbml0aWFsaXplZCB2YWx1ZXMuIElmIGAqbmNgIHdhcyBmdWxseSBpbml0aWFsaXplZCAodW5saWtlbHkpLCB0aGVuIHNvIHdvdWxkIGJlIGBuY19jbGVhbmAuCgpCdXQgd2FpdOKApiBpdCYjMzk7cyBvbiB0aGUgc3RhY2suIElzIHRoZXJlIGFueSBwYWRkaW5nIGluIHRoYXQgYHN0cnVjdCBuZXRfY29uZmA/IFRoaXMgbmVlZHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBpZiB0aGUgc3RydWN0dXJlIGlzIHBhY2tlZCBvciBoYXMgc29tZSBkYXRhIGFsaWdubWVudCByZXF1aXJlbWVudHMuIEkgbmVlZCB0byBnbyBhbmQgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbmV0X2NvbmZgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBhYm91dCB0aGlzIHBvdGVudGlhbCBmb3IgZGF0YSBsZWFrYWdlLiBUaGUgcG90ZW50aWFsIGhlcmUgaXMgdGhhdCB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgb3IgZGF0YSBmcm9tIHRoZSBvcmlnaW5hbCBgKm5jYCBpcyBjb3BpZWQgYW5kIGlzIHRoZXJlZm9yZSBsZWFrZWQgdmlhIHRoZSBuZXR3b3JrIGludGVyZmFjZS4gVGhhdCB3b3VsZCBiZSBiYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuZXRfY29uZiBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oPTEzMj1zdHJ1Y3QgcmVzX29wdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oLTEzNy1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oOjEzODpzdHJ1Y3QgbmV0X2NvbmYge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtMTM5LVx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBzdHJ1Y3QgbmV0X2NvbmZgIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bGwgc2NvcGUgb2YgYHN0cnVjdCBuZXRfY29uZmAuIEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJiMzOTt2ZSByZWFsbHkgZHVnIGludG8gdGhlIHNwZWNpZmljIGZpZWxkcyBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQuIEkga25vdyBpdCYjMzk7cyBhIGNyaXRpY2FsIHN0cnVjdHVyZSBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uLCBidXQgSSB3YW50IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgcGljdHVyZSBvZiBpdHMgY2FwYWJpbGl0aWVzIGFuZCBsaW1pdGF0aW9ucyBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIHNlZSAqZXZlcnl0aGluZyog4oCTIGV2ZXJ5IG1lbWJlciwgZXZlcnkgYml0ZmllbGQsIGV2ZXJ5IGNvbW1lbnQgaWYgYXZhaWxhYmxlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcmVjZW50IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIHRoaXMgc3RydWN0LCBhcyBuZXR3b3JrIHByb3RvY29sIGRlc2lnbiBpcyBkeW5hbWljLgoKSSB3YW50IHRvIGtub3cgd2hhdCB0aGlzIHN0cnVjdCBpbmNsdWRlcywgZXNwZWNpYWxseSByZWdhcmRpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhpbmdzIGxpa2U6CgoqICAgQWRkcmVzcyBmYW1pbHkgc3VwcG9ydCAoSVB2NCwgSVB2NiwgZXRjLikKKiAgIFJvdXRpbmcgcHJvdG9jb2xzIHN1cHBvcnRlZAoqICAgUW9TIGNvbmZpZ3VyYXRpb25zCiogICBTZWN1cml0eSBvcHRpb25zCiogICBBbnkgaG9va3MgZm9yIGN1c3RvbSBuZXR3b3JrIHBvbGljaWVzCgpMZXQmIzM5O3MgZ2V0IHRoZSBmdWxsIGRlZmluaXRpb24sIGFuZCBJJiMzOTtsbCBzdGFydCBydW5uaW5nIHRocm91Z2ggaXQgcGllY2UgYnkgcGllY2UsIGNvbnNpZGVyaW5nIGl0cyBpbXBsaWNhdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgbXkgY3VycmVudCB3b3JrLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGVyZSBjb3VsZCBiZSBzb21lIGFyZWFzIHdoZXJlIEkgbmVlZCB0byBhcHBseSBhIG5ldyBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldF9jb25mIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oPTEzMj1zdHJ1Y3QgcmVzX29wdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oLTEzNy1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oOjEzODpzdHJ1Y3QgbmV0X2NvbmYge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtMTM5LVx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGRyYmRfbmxfZ2VuLmg6IExpbmUgMTM4IC0gTGV0JiMzOTtzIERpZyBJbioqCgpPa2F5LCBJJiMzOTttIHB1bGxpbmcgdXAgYGRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oYCBub3cuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHNvbWUgb2YgdGhlIGNydWNpYWwgTmV0bGluayBtZXNzYWdlIGRlZmluaXRpb25zIGFyZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lIDEzOC4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBsaWtlbHkgZGVmaW5pbmcgYSBzdHJ1Y3R1cmUsIGFuIGVudW0sIG9yIHBlcmhhcHMgZXZlbiBhIG1hY3JvIHJlbGF0ZWQgdG8gdGhlIE5ldGxpbmsgaW50ZXJmYWNlIHVzZWQgYnkgRFJCRC4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbWVzc2FnZSBmb3JtYXQgb3IgYSBrZXkgZWxlbWVudCB1c2VkIGluIHRoZSBjb21tdW5pY2F0aW9uLiBDb3VsZCBiZSBhIHZlcnNpb24gbnVtYmVyLCBhbiBhdHRyaWJ1dGUsIG9yIGEgY29tbWFuZCBjb2RlLiBMaW5lIDEzOC4uLiBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzb21ldGhpbmcgbWVhbmluZ2Z1bCBhbmQgbm90IGp1c3QgYSBjb21tZW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzg6XHRzdHJ1Y3QgbmV0X2NvbmYge1xuIDEzOTpcdFx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcbiAxNDA6XHRcdF9fdTMyIHNoYXJlZF9zZWNyZXRfbGVuO1xuIDE0MTpcdFx0Y2hhciBjcmFtX2htYWNfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcbiAxNDI6XHRcdF9fdTMyIGNyYW1faG1hY19hbGdfbGVuO1xuIDE0MzpcdFx0Y2hhciBpbnRlZ3JpdHlfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcbiAxNDQ6XHRcdF9fdTMyIGludGVncml0eV9hbGdfbGVuO1xuIDE0NTpcdFx0Y2hhciB2ZXJpZnlfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcbiAxNDY6XHRcdF9fdTMyIHZlcmlmeV9hbGdfbGVuO1xuIDE0NzpcdFx0Y2hhciBjc3Vtc19hbGdbU0hBUkVEX1NFQ1JFVF9NQVhdO1xuIDE0ODpcdFx0X191MzIgY3N1bXNfYWxnX2xlbjtcbiAxNDk6XHRcdF9fdTMyIHdpcmVfcHJvdG9jb2w7XG4gMTUwOlx0XHRfX3UzMiBjb25uZWN0X2ludDtcbiAxNTE6XHRcdF9fdTMyIHRpbWVvdXQ7XG4gMTUyOlx0XHRfX3UzMiBwaW5nX2ludDtcbiAxNTM6XHRcdF9fdTMyIHBpbmdfdGltZW87XG4gMTU0Olx0XHRfX3UzMiBzbmRidWZfc2l6ZTtcbiAxNTU6XHRcdF9fdTMyIHJjdmJ1Zl9zaXplO1xuIDE1NjpcdFx0X191MzIga29fY291bnQ7XG4gMTU3Olx0XHRfX3UzMiBtYXhfYnVmZmVycztcbiAxNTg6XHRcdF9fdTMyIG1heF9lcG9jaF9zaXplO1xuIDE1OTpcdFx0X191MzIgdW5wbHVnX3dhdGVybWFyaztcbiAxNjA6XHRcdF9fdTMyIGFmdGVyX3NiXzBwO1xuIDE2MTpcdFx0X191MzIgYWZ0ZXJfc2JfMXA7XG4gMTYyOlx0XHRfX3UzMiBhZnRlcl9zYl8ycDtcbiAxNjM6XHRcdF9fdTMyIHJyX2NvbmZsaWN0O1xuIDE2NDpcdFx0X191MzIgb25fY29uZ2VzdGlvbjtcbiAxNjU6XHRcdF9fdTMyIGNvbmdfZmlsbDtcbiAxNjY6XHRcdF9fdTMyIGNvbmdfZXh0ZW50cztcbiAxNjc6XHRcdHVuc2lnbmVkIGNoYXIgdHdvX3ByaW1hcmllcztcbiAxNjg6XHRcdHVuc2lnbmVkIGNoYXIgZGlzY2FyZF9teV9kYXRhO1xuIDE2OTpcdFx0dW5zaWduZWQgY2hhciB0Y3BfY29yaztcbiAxNzA6XHRcdHVuc2lnbmVkIGNoYXIgYWx3YXlzX2FzYnA7XG4gMTcxOlx0XHR1bnNpZ25lZCBjaGFyIHRlbnRhdGl2ZTtcbiAxNzI6XHRcdHVuc2lnbmVkIGNoYXIgdXNlX3JsZTtcbiAxNzM6XHRcdHVuc2lnbmVkIGNoYXIgY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seTtcbiAxNzQ6XHRcdF9fdTMyIHNvY2tfY2hlY2tfdGltZW87XG4gMTc1Olx0fTtcbiAxNzY6XHRcbiAxNzc6XHRzdHJ1Y3Qgc2V0X3JvbGVfcGFybXMge1xuIDE3ODpcdFx0dW5zaWduZWQgY2hhciBhc3N1bWVfdXB0b2RhdGU7XG4gMTc5Olx0fTtcbiAxODA6XHRcbiAxODE6XHRzdHJ1Y3QgcmVzaXplX3Bhcm1zIHtcbiAxODI6XHRcdF9fdTY0IHJlc2l6ZV9zaXplO1xuIDE4MzpcdFx0dW5zaWduZWQgY2hhciByZXNpemVfZm9yY2U7XG4gMTg0Olx0XHR1bnNpZ25lZCBjaGFyIG5vX3Jlc3luYztcbiAxODU6XHRcdF9fdTMyIGFsX3N0cmlwZXM7XG4gMTg2Olx0XHRfX3UzMiBhbF9zdHJpcGVfc2l6ZTtcbiAxODc6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHN0cnVjdCBuZXRfY29uZmAgTGF5b3V0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgbmV0X2NvbmZgIGRlZmluaXRpb24sIGFuZCBpdCYjMzk7cyBtYWtpbmcgbWUgdGhpbmsuIEZpcnN0LCBJIHNlZSB0aGlzIGBjaGFyIHNoYXJlZF9zZWNyZXRbU0hBUkVEX1NFQ1JFVF9NQVhdO2AgYW5kIGl0cyBsZW5ndGggZmllbGQsIGBfX3UzMiBzaGFyZWRfc2VjcmV0X2xlbjtgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIGVub3VnaC4gVGhlbiwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYGNyYW1faG1hY19hbGdgLCBgaW50ZWdyaXR5X2FsZ2AsIGB2ZXJpZnlfYWxnYCwgYW5kIGBjc3Vtc19hbGdgIOKAkyBlYWNoIHdpdGggYSBgW1NIQVJFRF9TRUNSRVRfTUFYXWAgY2hhcmFjdGVyIGFycmF5IGFuZCBhIGNvcnJlc3BvbmRpbmcgbGVuZ3RoIGZpZWxkLiBTZWVtcyBsaWtlIGEgY29uc2lzdGVudCBwYXR0ZXJuIGZvciBoYW5kbGluZyB2YXJpb3VzIGFsZ29yaXRobSBjb25maWd1cmF0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4sIHRoZXJlJiMzOTtzIGEgYmxvY2sgb2YgYF9fdTMyYCBmaWVsZHMsIHdoaWNoIGFyZSBsaWtlbHkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgc2VyaWVzIG9mIGB1bnNpZ25lZCBjaGFyYCBmbGFnczogYHR3b19wcmltYXJpZXNgLCBgZGlzY2FyZF9teV9kYXRhYCwgYW5kIHNvIG9uLiBUaGV5IGVuZCB3aXRoIGBjc3Vtc19hZnRlcl9jcmFzaF9vbmx5YC4gQW5kIHRoZW4sIHJpZ2h0IGFmdGVyIHRoYXQsIHdlIGhhdmUgYF9fdTMyIHNvY2tfY2hlY2tfdGltZW9gLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIHBhZGRpbmcuCgpHaXZlbiB0aGUgc3RydWN0dXJlLCBpZiBgU0hBUkVEX1NFQ1JFVF9NQVhgIGlzIDY0LCB3aGljaCBpcyBsaWtlbHksIHRoZSBhbGlnbm1lbnQgd291bGQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBJZiB0aG9zZSBjaGFycyBhcmUgcGFja2VkLCB0aGVyZSBhcmUgbGlrZWx5IDcgYnl0ZXMgb2YgcGFkZGluZyBiZWZvcmUgdGhlIGBfX3UzMiBzb2NrX2NoZWNrX3RpbWVvYC4gQWN0dWFsbHksIG5vLiA3IGJ5dGVzIG9mIGB1bnNpZ25lZCBjaGFyYCBwYWRkaW5nIGltcGxpZXMgMSBieXRlIG9mIHBhZGRpbmcgYWZ0ZXIgYGNzdW1zX2FmdGVyX2NyYXNoX29ubHlgLiBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoZSBhY3R1YWwgc2l6ZSBvZiBgU0hBUkVEX1NFQ1JFVF9NQVhgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTSEFSRURfU0VDUkVUX01BWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODYzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBEUkJEIEhlYWRlciBGaWxlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIERSQkQgaW50ZXJuYWxzLCBhbmQgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgd2l0aCBzb21ldGhpbmcgbGlrZSBgaW5jbHVkZS9saW51eC9kcmJkLmhgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGVmaW5pdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgYW5kIG1heWJlIHNvbWUga2V5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIHRoZSBEUkJEIG1vZHVsZSBpdHNlbGYuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50IHRvIGJlZ2luIG15IGFuYWx5c2lzLiBGcm9tIHRoZXJlLCBJIGNhbiBhbHdheXMgbmF2aWdhdGUgdG8gb3RoZXIsIG1vcmUgc3BlY2lmaWMgaGVhZGVycyBpZiBuZWVkZWQsIGJ1dCBgZHJiZC5oYCBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O2xsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4gVGltZSB0byBnZXQgY29kaW5nLi4uIGVyciwgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTSEFSRURfU0VDUkVUX01BWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvZHJiZC5oPTI1OT1lbnVtIGRyYmRfc3RhdGVfcnYge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9kcmJkLmgtMjg3LVxuaW5jbHVkZS91YXBpL2xpbnV4L2RyYmQuaDoyODg6I2RlZmluZSBTSEFSRURfU0VDUkVUX01BWCA2NFxuaW5jbHVkZS91YXBpL2xpbnV4L2RyYmQuaC0yODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgRm9vdHByaW50KioKCk9rYXksIGxldCYjMzk7cyBzZWUsIGBTSEFSRURfU0VDUkVUX01BWGAgaXMgZGVmaW5lZCBhcyA2NC4gIFRoYXQgbWVhbnMgZWFjaCBpbnN0YW5jZSBvZiB0aGF0IHNoYXJlZCBzZWNyZXQgY29tcG9uZW50IGlzIGdvaW5nIHRvIHRha2UgdXAgNjQgYnl0ZXMuICBBbmQgd2l0aGluIHRoYXQgc3RydWN0dXJlLCB0aGVyZSYjMzk7cyBhbHNvIHRoZSBsZW5ndGggd2hpY2ggYWRkcyA0IGJ5dGVzLiBUaGF0JiMzOTtzIDY4IGJ5dGVzLCBhbmQgSSBzZWUgaXQgcmVwZWF0ZWQuLi4gZml2ZSB0aW1lcywgc28gd2UmIzM5O3JlIGF0IDY4IHRpbWVzIDUgd2hpY2ggZXF1YWxzIDM0MCBieXRlcyByaWdodCBvZmYgdGhlIGJhdC4gVGhlbiwgdGhlcmUgYXJlIDE4IGBfX3UzMmAgZmllbGRzIGluIHRoZSBzdHJ1Y3Qgd2hpY2ggSSBrbm93IHdpbGwgdGFrZSB1cCA0IGJ5dGVzIGVhY2gsIGxlYWRpbmcgdG8gNzIgYnl0ZXMuIEFmdGVyIHRoYXQgd2UgaGF2ZSA3IGB1bnNpZ25lZCBjaGFyYCBmaWVsZHMgYXQgNyBieXRlcywgYW5kIHRoZW4gYSBmaW5hbCBgX191MzJgIGZpZWxkIGF0IDQgYnl0ZXMsIHNvIGEgdG90YWwgb2YgMTEgYnl0ZXMuIEhvd2V2ZXIsIGhvbGQgb24uICBUaGUgYWxpZ25tZW50ISAgQmVjYXVzZSB0aG9zZSBgdW5zaWduZWQgY2hhcmAgZmllbGRzIHByZWNlZGUgdGhlIGBfX3UzMmAgZmllbGQsIEkgc3Ryb25nbHkgc3VzcGVjdCB0aGVyZSYjMzk7cyBnb2luZyB0byBiZSBwYWRkaW5nIGluc2VydGVkIGFmdGVyIHRob3NlIGNoYXJzIHRvIGFsaWduIHRoZSBgX191MzJgLiBXaGljaCBtZWFucywgd2UgaGF2ZSBwYWRkaW5nIG9mIDEgYnl0ZS4gCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgKmVudGlyZSogc3RydWN0IGF0IG9uY2UsIG9yIGlmIGl0IGRvZXMgYSBmaWVsZC1ieS1maWVsZCBjb3B5LiBUaGlzIHdpbGwgaW5mbHVlbmNlIHRoZSBhcHByb2FjaCBJIHRha2UsIHRvIGVuc3VyZSBtZW1vcnkgaXMgaGFuZGxlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9jb25mX3RvX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zMjc0PXN0YXRpYyBpbnQgbmxhX3B1dF9kcmJkX2NmZ19jb250ZXh0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zMzA5LS8qXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjMzMTA6ICogbmV0X2NvbmZfdG9fc2tiKCkgc2VyaWFsaXplcyB0aGUgc2hhcmVkIHNlY3JldCB2ZXJiYXRpbS4gQW55IHBhdGggdGhhdCBjYW5cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxMS0gKiBhbnN3ZXIgYSByZXF1ZXN0IGZyb20gYW4gdW5wcml2aWxlZ2VkIHByb2Nlc3MgbXVzdCBwYXNzIGV4Y2x1ZGVfc2Vuc2l0aXZlLFxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxMy0gKi9cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzMxNDpzdGF0aWMgaW50IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9jb25mICpuYyxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxNS1cdFx0XHRcdCAgICAgYm9vbCBleGNsdWRlX3NlbnNpdGl2ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTMzMTktXHRpZiAoIWV4Y2x1ZGVfc2Vuc2l0aXZlKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozMzIwOlx0XHRyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zMzIxLVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMyNS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzMyNjpcdHJldHVybiBuZXRfY29uZl90b19za2Ioc2tiLCBcdTAwMjZuY19jbGVhbik7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTMzMjctfVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MzU1MT1pbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM2NDMtXHRcdGlmIChuZXRfY29uZikge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozNjQ0Olx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuZXRfY29uZixcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzY0NS1cdFx0XHRcdFx0XHRcdCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM4MjI9c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg2Ni1cdFx0aWYgKG5jKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODY3Olx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgZXhjbHVkZV9zZW5zaXRpdmUpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODY4LVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk4NT1zdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQwNzEtXHRcdFx0XHRuYyA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDA3MjpcdFx0XHRcdGlmIChuYyBcdTAwMjZcdTAwMjYgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCB0cnVlKSAhPSAwKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MDczLVx0XHRcdFx0XHRnb3RvIGNhbmNlbDtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYz0xOTY5PWludCByZXNfb3B0c190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJlc19vcHRzICpzKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTE5OTAtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoxOTkxOmludCBuZXRfY29uZl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9jb25mICpzKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMTk5Mi17XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg9MzI2PWludCBuZXRfY29uZl9udGJfZnJvbV9hdHRycyhzdHJ1Y3QgbmxhdHRyICoqKnJldF9uZXN0ZWRfYXR0cmlidXRlX3RhYmxlLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oOjMyNzppbnQgbmV0X2NvbmZfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqcyk7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC0zMjgtdm9pZCBzZXRfbmV0X2NvbmZfZGVmYXVsdHMoc3RydWN0IG5ldF9jb25mICp4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgRFJCRCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IERSQkQgaGFuZGxlcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgdHJhbnNsYXRlcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaW50byBzb21ldGhpbmcgaXQgY2FuIGFjdHVhbGx5ICp1c2UqIGZvciB0aGUgbmV0d29yayBzdGFjay4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgbmV0X2NvbmZfdG9fc2tiYCB3aXRoaW4gdGhlIGBkcmJkX25sX2dlbi5jYCBmaWxlLCBsb2NhdGVkIGluIHRoZSBibG9jayBkcml2ZXIgc2VjdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGZyb20gbmV0d29yayBjb25maWd1cmF0aW9uIGlucHV0IHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBidWZmZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcnVjaWFsIHBpZWNlIGluIHRoZSBwdXp6bGUgb2YgaG93IERSQkQgY29tbXVuaWNhdGVzIGl0cyBzdGF0ZSBhbmQgY29uZmlnIHBhcmFtZXRlcnMgb3ZlciB0aGUgbmV0d29yay4gSXTigJlzIHdoZXJlIHRoZSBoaWdoLWxldmVsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzIGFyZSBtYXJzaGFsZWQgaW50byB0aGUga2VybmVs4oCZcyBkYXRhIHN0cnVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdGVwIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24gbWVjaGFuaWNzIHdpdGhpbiBEUkJEJiMzOTtzIG5ldHdvcmtpbmcgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkgYXJlIGRvaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTkxOlx0aW50IG5ldF9jb25mX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKnMpXG4xOTkyOlx0e1xuMTk5MzpcdFx0c3RydWN0IG5sYXR0ciAqdGxhID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBEUkJEX05MQV9ORVRfQ09ORik7XG4xOTk0Olx0XG4xOTk1Olx0XHRpZiAoIXRsYSlcbjE5OTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xOTk3Olx0XG4xOTk4Olx0XHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9TSEFSRURfU0VDUkVULCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMTk5OTpcdFx0XHRcdHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gJiM0MzsgKHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXHUwMDNlc2hhcmVkX3NlY3JldCkpXG4yMDAwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAwMTpcdFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1JBTV9ITUFDX0FMRywgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCxcbjIwMDI6XHRcdFx0XHRzLVx1MDAzZWNyYW1faG1hY19hbGdfbGVuICYjNDM7IChzLVx1MDAzZWNyYW1faG1hY19hbGdfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVx1MDAzZWNyYW1faG1hY19hbGcpKVxuMjAwMzpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMDQ6XHRcdGlmIChubGFfcHV0KHNrYiwgRFJCRF9BX05FVF9DT05GX0lOVEVHUklUWV9BTEcsIG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsXG4yMDA1Olx0XHRcdFx0cy1cdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiAmIzQzOyAocy1cdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiBcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cdTAwM2VpbnRlZ3JpdHlfYWxnKSlcbjIwMDY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDA3Olx0XHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9WRVJJRllfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMjAwODpcdFx0XHRcdHMtXHUwMDNldmVyaWZ5X2FsZ19sZW4gJiM0MzsgKHMtXHUwMDNldmVyaWZ5X2FsZ19sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXHUwMDNldmVyaWZ5X2FsZykpXG4yMDA5Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxMDpcdFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMjAxMTpcdFx0XHRcdHMtXHUwMDNlY3N1bXNfYWxnX2xlbiAmIzQzOyAocy1cdTAwM2Vjc3Vtc19hbGdfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVx1MDAzZWNzdW1zX2FsZykpXG4yMDEyOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxMzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1dJUkVfUFJPVE9DT0wsIHMtXHUwMDNld2lyZV9wcm90b2NvbCkpXG4yMDE0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxNTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTk5FQ1RfSU5ULCBzLVx1MDAzZWNvbm5lY3RfaW50KSlcbjIwMTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDE3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVElNRU9VVCwgcy1cdTAwM2V0aW1lb3V0KSlcbjIwMTg6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDE5Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUElOR19JTlQsIHMtXHUwMDNlcGluZ19pbnQpKVxuMjAyMDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjE6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9QSU5HX1RJTUVPLCBzLVx1MDAzZXBpbmdfdGltZW8pKVxuMjAyMjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjM6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9TTkRCVUZfU0laRSwgcy1cdTAwM2VzbmRidWZfc2l6ZSkpXG4yMDI0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAyNTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JDVkJVRl9TSVpFLCBzLVx1MDAzZXJjdmJ1Zl9zaXplKSlcbjIwMjY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDI3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfS09fQ09VTlQsIHMtXHUwMDNla29fY291bnQpKVxuMjAyODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjk6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9NQVhfQlVGRkVSUywgcy1cdTAwM2VtYXhfYnVmZmVycykpXG4yMDMwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAzMTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX01BWF9FUE9DSF9TSVpFLCBzLVx1MDAzZW1heF9lcG9jaF9zaXplKSlcbjIwMzI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDMzOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVU5QTFVHX1dBVEVSTUFSSywgcy1cdTAwM2V1bnBsdWdfd2F0ZXJtYXJrKSlcbjIwMzQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDM1Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUZURVJfU0JfMFAsIHMtXHUwMDNlYWZ0ZXJfc2JfMHApKVxuMjAzNjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMzc6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9BRlRFUl9TQl8xUCwgcy1cdTAwM2VhZnRlcl9zYl8xcCkpXG4yMDM4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAzOTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0FGVEVSX1NCXzJQLCBzLVx1MDAzZWFmdGVyX3NiXzJwKSlcbjIwNDA6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NzMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEYXRhIENvcHlpbmcgaW4gYG5ldF9jb25mX3RvX3NrYmAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBuZXRfY29uZl90b19za2JgIGhhbmRsZXMgZGF0YSBjb3B5aW5nLiBJdCBsb29rcyBsaWtlIGl0IGRvZXNuJiMzOTt0IGRvIGEgc2ltcGxlIGBtZW1jcHlgIG9mIHRoZSBlbnRpcmUgc3RydWN0LiBTbWFydCwgYmVjYXVzZSB0aGF0IHdvdWxkIGJlIGluZWZmaWNpZW50LiBJbnN0ZWFkLCBpdCYjMzk7cyB1c2luZyBgbmxhX3B1dGAgYW5kIGBubGFfcHV0X3UzMmAgdG8gY29weSBmaWVsZHMgaW5kaXZpZHVhbGx5LiBUaGF0IG1ha2VzIHNlbnNlLCB5b3Ugb25seSBzZW5kIHdoYXQgeW91IG5lZWQuCgpBaGEhIGBubGFfcHV0X3UzMmAgaXMgZXhwbGljaXRseSBjb3B5aW5nIGp1c3QgNCBieXRlcywgc28gaXQmIzM5O3MgaGFuZGxpbmcgdGhlIDMyIGJpdCBpbnRzLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXM6IHRoZSBgbmxhX3B1dGAgaXMgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydC4gSXQgY29waWVzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gYHMtJmd0O3NoYXJlZF9zZWNyZXRgIHVzaW5nIGBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLCBzLSZndDtzaGFyZWRfc2VjcmV0X2xlbiAmIzQzOyAocy0mZ3Q7c2hhcmVkX3NlY3JldF9sZW4gJmx0OyBTSEFSRURfU0VDUkVUX01BWCkpYC4gTGV0IG1lIHBhcnNlIHRoYXQuIE9rLCBpdCYjMzk7cyBjb3B5aW5nIGVpdGhlciB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgc2hhcmVkIHNlY3JldCwgb3IgYFNIQVJFRF9TRUNSRVRfTUFYYCAod2hpY2hldmVyIGlzIHNtYWxsZXIpIHBsdXMgdGhlIG51bGwgdGVybWluYXRvciAoaWYgaXQgZml0cykuIEJhc2ljYWxseSwgaXQmIzM5O3Mgb25seSBjb3B5aW5nIHRoZSAqc3RyaW5nKiBvZiB0aGUgc2hhcmVkIHNlY3JldCwgbm90IHRoZSB3aG9sZSBwb3RlbnRpYWxseSBwYWRkZWQgc3BhY2UgYWxsb2NhdGVkIGZvciBpdCB3aXRoaW4gdGhlIHN0cnVjdCEKClRoaXMgaXMgYSBrZXkgb3B0aW1pemF0aW9uLiBJdCBhdm9pZHMgdW5uZWNlc3NhcnkgZGF0YSB0cmFuc2ZlciBhbmQga2VlcHMgdGhpbmdzIGxlYW4uIEJ1dCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7dmUgZ290IHRvIGNvbnNpZGVyIGFsbCB0aGUgb3RoZXIgZmllbGRzIGluIHRoZSBzdHJ1Y3QuIEkgbmVlZCB0byBrZWVwIHJlYWRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiB0byBzZWUgaG93IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBldmVyeXRoaW5nIGVsc2UuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgb3RoZXIgZ290Y2hhcyBvciBvcHRpbWl6YXRpb25zIEkmIzM5O3ZlIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA0MTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JSX0NPTkZMSUNULCBzLVx1MDAzZXJyX2NvbmZsaWN0KSlcbjIwNDI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDQzOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfT05fQ09OR0VTVElPTiwgcy1cdTAwM2Vvbl9jb25nZXN0aW9uKSlcbjIwNDQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDQ1Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ09OR19GSUxMLCBzLVx1MDAzZWNvbmdfZmlsbCkpXG4yMDQ2Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA0NzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTkdfRVhURU5UUywgcy1cdTAwM2Vjb25nX2V4dGVudHMpKVxuMjA0ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNDk6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RXT19QUklNQVJJRVMsIHMtXHUwMDNldHdvX3ByaW1hcmllcykpXG4yMDUwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA1MTpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfRElTQ0FSRF9NWV9EQVRBLCBzLVx1MDAzZWRpc2NhcmRfbXlfZGF0YSkpXG4yMDUyOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA1MzpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVENQX0NPUkssIHMtXHUwMDNldGNwX2NvcmspKVxuMjA1NDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNTU6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0FMV0FZU19BU0JQLCBzLVx1MDAzZWFsd2F5c19hc2JwKSlcbjIwNTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDU3Olx0XHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9URU5UQVRJVkUsIHMtXHUwMDNldGVudGF0aXZlKSlcbjIwNTg6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDU5Olx0XHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9VU0VfUkxFLCBzLVx1MDAzZXVzZV9ybGUpKVxuMjA2MDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNjE6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0NTVU1TX0FGVEVSX0NSQVNIX09OTFksIHMtXHUwMDNlY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seSkpXG4yMDYyOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA2MzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1NPQ0tfQ0hFQ0tfVElNRU8sIHMtXHUwMDNlc29ja19jaGVja190aW1lbykpXG4yMDY0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA2NTpcdFxuMjA2NjpcdFx0bmxhX25lc3RfZW5kKHNrYiwgdGxhKTtcbjIwNjc6XHRcdHJldHVybiAwO1xuMjA2ODpcdFxuMjA2OTpcdG5sYV9wdXRfZmFpbHVyZTpcbjIwNzA6XHRcdGlmICh0bGEpXG4yMDcxOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIHRsYSk7XG4yMDcyOlx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjA3MzpcdH1cbjIwNzQ6XHRcbjIwNzU6XHRpbnQgc2V0X3JvbGVfcGFybXNfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZXRfcm9sZV9wYXJtcyAqcylcbjIwNzY6XHR7XG4yMDc3Olx0XHRzdHJ1Y3QgbmxhdHRyICp0bGEgPSBubGFfbmVzdF9zdGFydChza2IsIERSQkRfTkxBX1NFVF9ST0xFX1BBUk1TKTtcbjIwNzg6XHRcbjIwNzk6XHRcdGlmICghdGxhKVxuMjA4MDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwODE6XHRcbjIwODI6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX1NFVF9ST0xFX1BBUk1TX0FTU1VNRV9VUFRPREFURSwgcy1cdTAwM2Vhc3N1bWVfdXB0b2RhdGUpKVxuMjA4MzpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwODQ6XHRcbjIwODU6XHRcdG5sYV9uZXN0X2VuZChza2IsIHRsYSk7XG4yMDg2Olx0XHRyZXR1cm4gMDtcbjIwODc6XHRcbjIwODg6XHRubGFfcHV0X2ZhaWx1cmU6XG4yMDg5Olx0XHRpZiAodGxhKVxuMjA5MDpcdFx0XHRubGFfbmVzdF9jYW5jZWwoc2tiLCB0bGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBTYW5pdGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5ldF9jb25mX3RvX3NrYmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGRvaW5nIGEgZmllbGQtYnktZmllbGQgY29weS4gTm90aGluZyB0b28gc3VycHJpc2luZyB0aGVyZS4gQnV0IHdhaXQsIHRoZW4gYG5sYV9wdXRgIGlzIGludm9sdmVkLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNvcHlpbmcgYG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsIHMtJmd0O3NoYXJlZF9zZWNyZXRfbGVuICYjNDM7IChzLSZndDtzaGFyZWRfc2VjcmV0X2xlbiAmbHQ7IFNIQVJFRF9TRUNSRVRfTUFYKSlgIGJ5dGVzIGZyb20gYHMtJmd0O3NoYXJlZF9zZWNyZXRgLiBSaWdodCwgY2xhc3NpYyBgbmxhX3B1dGAgdXNhZ2UuCgpOb3csIGlmIGBleGNsdWRlX3NlbnNpdGl2ZWAgaXMgdHJ1ZSwgdGhlIGNvZGUgemVyb2VzIG91dCBgbmNfY2xlYW4uc2hhcmVkX3NlY3JldGAgYW5kIHNldHMgYG5jX2NsZWFuLnNoYXJlZF9zZWNyZXRfbGVuYCB0byAwLiBTbywgd2hlbiBgbmxhX3B1dGAgcnVucyB3aXRoIHRoaXMgc2FuaXRpemVkIGBuY19jbGVhbmAsIGl0IHdpbGwgY29weSBgbWluX3QoaW50LCA2NCwgMCAmIzQzOyAoMCAmbHQ7IDY0KSlgLCB3aGljaCBzaW1wbGlmaWVzIHRvIGp1c3QgMSBieXRlLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGNvcHlpbmcgYSBzaW5nbGUgYnl0ZSBmcm9tIGBuY19jbGVhbi5zaGFyZWRfc2VjcmV0YC4gQW5kIHNpbmNlIHRoYXQmIzM5O3MgYmVlbiB6ZXJvZWQsIGl0JiMzOTtzIGNvcHlpbmcgYSAwIGJ5dGUuIE1ha2VzIHNlbnNlLgoKQnV0IGhvbGQgb24sIHdoYXQgYWJvdXQgYWxsIHRoZSBvdGhlciBmaWVsZHM/IFRoZSBjb2RlIGRvZXMgYSBgbmNfY2xlYW4gPSAqbmM7YCB3aGljaCBjb3BpZXMgZXZlcnl0aGluZyBmcm9tIGBuY2AgdG8gYG5jX2NsZWFuYC4gTm93IEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGBuY2AgYWZ0ZXIgaXQmIzM5O3MgYWxsb2NhdGVkLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYG5jYCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB0byBiZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXA7IEkgbmVlZCB0byBmb2xsb3cgdGhlIGFsbG9jYXRpb24gb2YgYG5ldF9jb25mYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvYy4qc2l6ZW9mLipuZXRfY29uZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipTZWFyY2hpbmcgZm9yIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb2RlIHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBtZW1vcnkgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiBkYXRhLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cnkgYW5kIHBpbnBvaW50IGl0IGRpcmVjdGx5IHVzaW5nIGEgY291cGxlIG9mIGRpZmZlcmVudCBhcHByb2FjaGVzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGluc3RhbmNlcyB3aGVyZSBga21hbGxvY2AgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBzaXplb2ZgIG9wZXJhdG9yIGNhbGN1bGF0aW9ucyB0aGF0IGludm9sdmUgYG5ldF9jb25mYC4gVGhhdCBzaG91bGQgZGlyZWN0bHkgaWRlbnRpZnkgYWxsb2NhdGlvbnMgd2l0aCB0aGUga2VybmVsIG1lbW9yeSBhbGxvY2F0b3IuIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNjb3BlIHNsaWdodGx5IGlmIHRoYXQmIzM5O3MgdG9vIHJlc3RyaWN0aXZlLiBJZiBJJiMzOTttIG5vdCBzdWNjZXNzZnVsIHdpdGggdGhlIGBrbWFsbG9jYCBzZWFyY2gsIHRoZW4gSSYjMzk7bGwgbG9vayBmb3IgZ2VuZXJhbCBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBzdWNoIGFzIGBhbGxvY2AsIGxpa2VseSBjb3VwbGVkIHdpdGggYG5ldF9jb25mYCBhcyB0aGUgZGF0YSBiZWluZyBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBzb2xpZCwgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gZmluZGluZyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2MuKm5ldF9jb25mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTIzOTU9c3RhdGljIGVudW0gZHJiZF9yZXRfY29kZVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyMzk2OmFsbG9jX2NyeXB0byhzdHJ1Y3QgY3J5cHRvICpjcnlwdG8sIHN0cnVjdCBuZXRfY29uZiAqbmV3X25ldF9jb25mKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yMzk3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0MDAtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI0MDE6XHRydiA9IGFsbG9jX3NoYXNoKFx1MDAyNmNyeXB0by1cdTAwM2Vjc3Vtc190Zm0sIG5ld19uZXRfY29uZi1cdTAwM2Vjc3Vtc19hbGcsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0MDItXHRcdFx0IEVSUl9DU1VNU19BTEcpO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQwNC1cdFx0cmV0dXJuIHJ2O1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNDA1Olx0cnYgPSBhbGxvY19zaGFzaChcdTAwMjZjcnlwdG8tXHUwMDNldmVyaWZ5X3RmbSwgbmV3X25ldF9jb25mLVx1MDAzZXZlcmlmeV9hbGcsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0MDYtXHRcdFx0IEVSUl9WRVJJRllfQUxHKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0MDgtXHRcdHJldHVybiBydjtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MjQwOTpcdHJ2ID0gYWxsb2Nfc2hhc2goXHUwMDI2Y3J5cHRvLVx1MDAzZWludGVncml0eV90Zm0sIG5ld19uZXRfY29uZi1cdTAwM2VpbnRlZ3JpdHlfYWxnLFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDEwLVx0XHRcdCBFUlJfSU5URUdSSVRZX0FMRyk7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0yNDMyPWludCBkcmJkX25sX2NoZ19uZXRfb3B0c19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDUyLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNDUzOlx0bmV3X25ldF9jb25mID0ga3phbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQ1NC1cdGlmICghbmV3X25ldF9jb25mKSB7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNTEyLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNTEzOlx0cmV0Y29kZSA9IGFsbG9jX2NyeXB0byhcdTAwMjZjcnlwdG8sIG5ld19uZXRfY29uZik7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI1MTQtXHRpZiAocmV0Y29kZSAhPSBOT19FUlJPUilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTI1ODc9aW50IGRyYmRfbmxfY29ubmVjdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNjQ0LVx0LyogYWxsb2NhdGlvbiBub3QgaW4gdGhlIElPIHBhdGgsIGRyYmRzZXR1cCAvIG5ldGxpbmsgcHJvY2VzcyBjb250ZXh0ICovXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI2NDU6XHRuZXdfbmV0X2NvbmYgPSBremFsbG9jX29iaigqbmV3X25ldF9jb25mKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjY0Ni1cdGlmICghbmV3X25ldF9jb25mKSB7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNjYzLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNjY0Olx0cmV0Y29kZSA9IGFsbG9jX2NyeXB0byhcdTAwMjZjcnlwdG8sIG5ld19uZXRfY29uZik7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI2NjUtXHRpZiAocmV0Y29kZSAhPSBOT19FUlJPUilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jPTM0NDU9c3RhdGljIGludCByZWNlaXZlX3Byb3RvY29sKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHN0cnVjdCBwYWNrZXRfaW5mbyAqcGkpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy0zNTQ5LVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYzozNTUwOlx0bmV3X25ldF9jb25mID0ga21hbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMtMzU1MS1cdGlmICghbmV3X25ldF9jb25mKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM9MzY1ND1zdGF0aWMgaW50IHJlY2VpdmVfU3luY1BhcmFtKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHN0cnVjdCBwYWNrZXRfaW5mbyAqcGkpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy0zNzk2LVx0XHRpZiAodmVyaWZ5X3RmbSB8fCBjc3Vtc190Zm0pIHtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM6Mzc5NzpcdFx0XHRuZXdfbmV0X2NvbmYgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0X2NvbmYpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy0zNzk4LVx0XHRcdGlmICghbmV3X25ldF9jb25mKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMyMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gaW4gYHJlY2VpdmVfcHJvdG9jb2xgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGByZWNlaXZlX3Byb3RvY29sYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgRFJCRCByZWNlaXZlciBjb2RlLCBhbmQgSSBzZWUgc29tZXRoaW5nIHRoYXQmIzM5O3MgbWFraW5nIG1lIHBhdXNlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB1c2luZyBga21hbGxvY19vYmooc3RydWN0IG5ldF9jb25mKWAgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBgbmV3X25ldF9jb25mYC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcmVjZWl2ZV9wcm90b2NvbGAgZnVuY3Rpb24gdG8gc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBuZXRfY29uZmAgc3RydWN0dXJlIGlzIHVzZWQgYW5kIHdoYXQgdGhpcyBtZWFucyBmb3IgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzU0MDpcdFxuMzU0MTpcdFx0XHRoYXNoX3NpemUgPSBjcnlwdG9fc2hhc2hfZGlnZXN0c2l6ZShwZWVyX2ludGVncml0eV90Zm0pO1xuMzU0MjpcdFx0XHRpbnRfZGlnX2luID0ga21hbGxvYyhoYXNoX3NpemUsIEdGUF9LRVJORUwpO1xuMzU0MzpcdFx0XHRpbnRfZGlnX3Z2ID0ga21hbGxvYyhoYXNoX3NpemUsIEdGUF9LRVJORUwpO1xuMzU0NDpcdFx0XHRpZiAoIShpbnRfZGlnX2luIFx1MDAyNlx1MDAyNiBpbnRfZGlnX3Z2KSkge1xuMzU0NTpcdFx0XHRcdGRyYmRfZXJyKGNvbm5lY3Rpb24sIFwmIzM0O0FsbG9jYXRpb24gb2YgYnVmZmVycyBmb3IgZGF0YSBpbnRlZ3JpdHkgY2hlY2tpbmcgZmFpbGVkXFxuXCYjMzQ7KTtcbjM1NDY6XHRcdFx0XHRnb3RvIGRpc2Nvbm5lY3Q7XG4zNTQ3Olx0XHRcdH1cbjM1NDg6XHRcdH1cbjM1NDk6XHRcbjM1NTA6XHRcdG5ld19uZXRfY29uZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZXRfY29uZik7XG4zNTUxOlx0XHRpZiAoIW5ld19uZXRfY29uZilcbjM1NTI6XHRcdFx0Z290byBkaXNjb25uZWN0O1xuMzU1MzpcdFxuMzU1NDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb25uZWN0aW9uLVx1MDAzZWRhdGEubXV0ZXgpO1xuMzU1NTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb25uZWN0aW9uLVx1MDAzZXJlc291cmNlLVx1MDAzZWNvbmZfdXBkYXRlKTtcbjM1NTY6XHRcdG9sZF9uZXRfY29uZiA9IGNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmY7XG4zNTU3Olx0XHQqbmV3X25ldF9jb25mID0gKm9sZF9uZXRfY29uZjtcbjM1NTg6XHRcbjM1NTk6XHRcdG5ld19uZXRfY29uZi1cdTAwM2V3aXJlX3Byb3RvY29sID0gcF9wcm90bztcbjM1NjA6XHRcdG5ld19uZXRfY29uZi1cdTAwM2VhZnRlcl9zYl8wcCA9IGNvbnZlcnRfYWZ0ZXJfc2IocF9hZnRlcl9zYl8wcCk7XG4zNTYxOlx0XHRuZXdfbmV0X2NvbmYtXHUwMDNlYWZ0ZXJfc2JfMXAgPSBjb252ZXJ0X2FmdGVyX3NiKHBfYWZ0ZXJfc2JfMXApO1xuMzU2MjpcdFx0bmV3X25ldF9jb25mLVx1MDAzZWFmdGVyX3NiXzJwID0gY29udmVydF9hZnRlcl9zYihwX2FmdGVyX3NiXzJwKTtcbjM1NjM6XHRcdG5ld19uZXRfY29uZi1cdTAwM2V0d29fcHJpbWFyaWVzID0gcF90d29fcHJpbWFyaWVzO1xuMzU2NDpcdFxuMzU2NTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYsIG5ld19uZXRfY29uZik7XG4zNTY2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29ubmVjdGlvbi1cdTAwM2VyZXNvdXJjZS1cdTAwM2Vjb25mX3VwZGF0ZSk7XG4zNTY3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29ubmVjdGlvbi1cdTAwM2VkYXRhLm11dGV4KTtcbjM1Njg6XHRcbjM1Njk6XHRcdGNyeXB0b19mcmVlX3NoYXNoKGNvbm5lY3Rpb24tXHUwMDNlcGVlcl9pbnRlZ3JpdHlfdGZtKTtcbjM1NzA6XHRcdGtmcmVlKGNvbm5lY3Rpb24tXHUwMDNlaW50X2RpZ19pbik7XG4zNTcxOlx0XHRrZnJlZShjb25uZWN0aW9uLVx1MDAzZWludF9kaWdfdnYpO1xuMzU3MjpcdFx0Y29ubmVjdGlvbi1cdTAwM2VwZWVyX2ludGVncml0eV90Zm0gPSBwZWVyX2ludGVncml0eV90Zm07XG4zNTczOlx0XHRjb25uZWN0aW9uLVx1MDAzZWludF9kaWdfaW4gPSBpbnRfZGlnX2luO1xuMzU3NDpcdFx0Y29ubmVjdGlvbi1cdTAwM2VpbnRfZGlnX3Z2ID0gaW50X2RpZ192djtcbjM1NzU6XHRcbjM1NzY6XHRcdGlmIChzdHJjbXAob2xkX25ldF9jb25mLVx1MDAzZWludGVncml0eV9hbGcsIGludGVncml0eV9hbGcpKVxuMzU3NzpcdFx0XHRkcmJkX2luZm8oY29ubmVjdGlvbiwgXCYjMzQ7cGVlciBkYXRhLWludGVncml0eS1hbGc6ICVzXFxuXCYjMzQ7LFxuMzU3ODpcdFx0XHRcdCAgaW50ZWdyaXR5X2FsZ1swXSA/IGludGVncml0eV9hbGcgOiBcJiMzNDsobm9uZSlcJiMzNDspO1xuMzU3OTpcdFxuMzU4MDpcdFx0a3ZmcmVlX3JjdV9taWdodHNsZWVwKG9sZF9uZXRfY29uZik7XG4zNTgxOlx0XHRyZXR1cm4gMDtcbjM1ODI6XHRcbjM1ODM6XHRkaXNjb25uZWN0X3JjdV91bmxvY2s6XG4zNTg0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjM1ODU6XHRkaXNjb25uZWN0OlxuMzU4NjpcdFx0Y3J5cHRvX2ZyZWVfc2hhc2gocGVlcl9pbnRlZ3JpdHlfdGZtKTtcbjM1ODc6XHRcdGtmcmVlKGludF9kaWdfaW4pO1xuMzU4ODpcdFx0a2ZyZWUoaW50X2RpZ192dik7XG4zNTg5Olx0XHRjb25uX3JlcXVlc3Rfc3RhdGUoY29ubmVjdGlvbiwgTlMoY29ubiwgQ19ESVNDT05ORUNUSU5HKSwgQ1NfSEFSRCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhZGRpbmcgQ29uY2VybnMgaW4gYG5ldF9jb25mYCBTdHJ1Y3QgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHJlY2VpdmVfcHJvdG9jb2xgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZ3JhYmJpbmcgYSBuZXcgYG5ldF9jb25mYCBzdHJ1Y3QgdXNpbmcgYGttYWxsb2Nfb2JqYC4gU2VlbXMgc3RhbmRhcmQgZW5vdWdoLiBCdXQgdGhlbiwgaXQgaW1tZWRpYXRlbHkgY29waWVzIHRoZSAqZW50aXJlKiBjb250ZW50cyBvZiBgb2xkX25ldF9jb25mYCBpbnRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgb25lIHdpdGggYCpuZXdfbmV0X2NvbmYgPSAqb2xkX25ldF9jb25mO2AuIE5vdywgd2hlcmUgaXMgYG9sZF9uZXRfY29uZmAgZXZlbiBjb21pbmcgZnJvbT8gUmlnaHQsIGl0JiMzOTtzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgaW4gYGRyYmRfbmxfY29ubmVjdF9kb2l0YCBhbmQgYGRyYmRfbmxfY2hnX25ldF9vcHRzX2RvaXRgLiBUaGF0IG1lYW5zIHRoZSBvcmlnaW5hbCBgbmV0X2NvbmZgIGlzIHplcm8taW5pdGlhbGl6ZWQuCgpTbywgdGhpcyBpbml0aWFsIGNvcHkgemVyb3Mgb3V0IHRoZSBwYWRkaW5nLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBwb3RlbnRpYWwgaXNzdWVzLiBCdXQgaXQgZ290IG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgd2hlbiBgbmNfY2xlYW4gPSAqbmM7YCBpcyB1c2VkPyBUaGF0IGxvb2tzIGxpa2UgaXQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3QgZnJvbSBgKm5jYCB3aGljaCBzaG91bGQgaW5jbHVkZSB0aGUgcGFkZGluZy4gSWYgYCpuY2AgaGFzIHplcm9lZCBwYWRkaW5nICh3aGljaCBpdCBzaG91bGQsIGZyb20gdGhlIHByZXZpb3VzIGFsbG9jYXRpb24pLCB0aGVuIGBuY19jbGVhbmAgc2hvdWxkICphbHNvKiBoYXZlIHplcm9lZCBwYWRkaW5nLiBUaGlzIGlzIGEgbG9jYWwgdmFyaWFibGUgb24gdGhlIHN0YWNrLCBub3QgdW5pbml0aWFsaXplZC4KClRoZSBuYWdnaW5nIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IGNhc2VzIHdoZXJlIGBuY19jbGVhbmAgKndvdWxkKiBlbmQgdXAgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmc/IFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyB0cmlja3kuIElmIGAqbmNgIGlzIGFzc2lnbmVkIGZpZWxkLWJ5LWZpZWxkLCB0aGVuIHRoZSBwYWRkaW5nIG1pZ2h0IG5vdCBnZXQgY29waWVkLiBTdHJ1Y3QgYXNzaWdubWVudHMgaW4gQywgZGVwZW5kaW5nIG9uIHRoZSBjb21waWxlciYjMzk7cyBvcHRpbWl6YXRpb24sIGNvdWxkIHBvdGVudGlhbGx5IGRvIHRoaXMgZmllbGQtYnktZmllbGQgY29weSwgc2tpcHBpbmcgb3ZlciB0aGUgcGFkZGluZy4gSWYgdGhhdCBoYXBwZW5zLCB0aGVuIGBuY19jbGVhbmAmIzM5O3MgcGFkZGluZyBpcyBsZWZ0IGFzIHdoYXRldmVyIGdhcmJhZ2Ugd2FzIG9uIHRoZSBzdGFjay4KClRoZW4sIHRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBuZXRfY29uZl90b19za2JgIGlzIGNhbGxlZCB3aXRoIGAmYW1wO25jX2NsZWFuYC4gTm93LCBteSB1bmRlcnN0YW5kaW5nIGlzIGBuZXRfY29uZl90b19za2JgIGNvcGllcyBmaWVsZCBieSBmaWVsZCwgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfdThgLCBhbmQgYG5sYV9wdXRgIGZvciBzdHJpbmdzLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgaXQgKmRvZXNuJiMzOTt0KiBjb3B5IHRoZSBwYWRkaW5nIGl0c2VsZiBpbnRvIHRoZSBTS0IsIHdoaWNoIGlzIGNydWNpYWwuIFNvLCBpdCBsb29rcyBsaWtlIGBuZXRfY29uZl90b19za2JgIHdvbiYjMzk7dCBsZWFrIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgaW4gdGhlICp1c3VhbCogY2FzZS4gQnV0IGxldCBtZSBkb3VibGUtY2hlY2sgYG5ldF9jb25mX3RvX3NrYmAganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTkxOlx0aW50IG5ldF9jb25mX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKnMpXG4xOTkyOlx0e1xuMTk5MzpcdFx0c3RydWN0IG5sYXR0ciAqdGxhID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBEUkJEX05MQV9ORVRfQ09ORik7XG4xOTk0Olx0XG4xOTk1Olx0XHRpZiAoIXRsYSlcbjE5OTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xOTk3Olx0XG4xOTk4Olx0XHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9TSEFSRURfU0VDUkVULCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMTk5OTpcdFx0XHRcdHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gJiM0MzsgKHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXHUwMDNlc2hhcmVkX3NlY3JldCkpXG4yMDAwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAwMTpcdFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1JBTV9ITUFDX0FMRywgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCxcbjIwMDI6XHRcdFx0XHRzLVx1MDAzZWNyYW1faG1hY19hbGdfbGVuICYjNDM7IChzLVx1MDAzZWNyYW1faG1hY19hbGdfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVx1MDAzZWNyYW1faG1hY19hbGcpKVxuMjAwMzpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMDQ6XHRcdGlmIChubGFfcHV0KHNrYiwgRFJCRF9BX05FVF9DT05GX0lOVEVHUklUWV9BTEcsIG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsXG4yMDA1Olx0XHRcdFx0cy1cdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiAmIzQzOyAocy1cdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiBcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cdTAwM2VpbnRlZ3JpdHlfYWxnKSlcbjIwMDY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDA3Olx0XHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9WRVJJRllfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMjAwODpcdFx0XHRcdHMtXHUwMDNldmVyaWZ5X2FsZ19sZW4gJiM0MzsgKHMtXHUwMDNldmVyaWZ5X2FsZ19sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXHUwMDNldmVyaWZ5X2FsZykpXG4yMDA5Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxMDpcdFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMjAxMTpcdFx0XHRcdHMtXHUwMDNlY3N1bXNfYWxnX2xlbiAmIzQzOyAocy1cdTAwM2Vjc3Vtc19hbGdfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVx1MDAzZWNzdW1zX2FsZykpXG4yMDEyOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxMzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1dJUkVfUFJPVE9DT0wsIHMtXHUwMDNld2lyZV9wcm90b2NvbCkpXG4yMDE0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxNTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTk5FQ1RfSU5ULCBzLVx1MDAzZWNvbm5lY3RfaW50KSlcbjIwMTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDE3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVElNRU9VVCwgcy1cdTAwM2V0aW1lb3V0KSlcbjIwMTg6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDE5Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUElOR19JTlQsIHMtXHUwMDNlcGluZ19pbnQpKVxuMjAyMDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjE6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9QSU5HX1RJTUVPLCBzLVx1MDAzZXBpbmdfdGltZW8pKVxuMjAyMjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjM6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9TTkRCVUZfU0laRSwgcy1cdTAwM2VzbmRidWZfc2l6ZSkpXG4yMDI0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAyNTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JDVkJVRl9TSVpFLCBzLVx1MDAzZXJjdmJ1Zl9zaXplKSlcbjIwMjY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDI3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfS09fQ09VTlQsIHMtXHUwMDNla29fY291bnQpKVxuMjAyODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjk6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9NQVhfQlVGRkVSUywgcy1cdTAwM2VtYXhfYnVmZmVycykpXG4yMDMwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAzMTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX01BWF9FUE9DSF9TSVpFLCBzLVx1MDAzZW1heF9lcG9jaF9zaXplKSlcbjIwMzI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDMzOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVU5QTFVHX1dBVEVSTUFSSywgcy1cdTAwM2V1bnBsdWdfd2F0ZXJtYXJrKSlcbjIwMzQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDM1Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUZURVJfU0JfMFAsIHMtXHUwMDNlYWZ0ZXJfc2JfMHApKVxuMjAzNjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMzc6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9BRlRFUl9TQl8xUCwgcy1cdTAwM2VhZnRlcl9zYl8xcCkpXG4yMDM4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAzOTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0FGVEVSX1NCXzJQLCBzLVx1MDAzZWFmdGVyX3NiXzJwKSlcbjIwNDA6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDQxOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUlJfQ09ORkxJQ1QsIHMtXHUwMDNlcnJfY29uZmxpY3QpKVxuMjA0MjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNDM6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9PTl9DT05HRVNUSU9OLCBzLVx1MDAzZW9uX2Nvbmdlc3Rpb24pKVxuMjA0NDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNDU6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9DT05HX0ZJTEwsIHMtXHUwMDNlY29uZ19maWxsKSlcbjIwNDY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDQ3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ09OR19FWFRFTlRTLCBzLVx1MDAzZWNvbmdfZXh0ZW50cykpXG4yMDQ4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA0OTpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVFdPX1BSSU1BUklFUywgcy1cdTAwM2V0d29fcHJpbWFyaWVzKSlcbjIwNTA6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDUxOlx0XHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9ESVNDQVJEX01ZX0RBVEEsIHMtXHUwMDNlZGlzY2FyZF9teV9kYXRhKSlcbjIwNTI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDUzOlx0XHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9UQ1BfQ09SSywgcy1cdTAwM2V0Y3BfY29yaykpXG4yMDU0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA1NTpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUxXQVlTX0FTQlAsIHMtXHUwMDNlYWx3YXlzX2FzYnApKVxuMjA1NjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNTc6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RFTlRBVElWRSwgcy1cdTAwM2V0ZW50YXRpdmUpKVxuMjA1ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNTk6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1VTRV9STEUsIHMtXHUwMDNldXNlX3JsZSkpXG4yMDYwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA2MTpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUZURVJfQ1JBU0hfT05MWSwgcy1cdTAwM2Vjc3Vtc19hZnRlcl9jcmFzaF9vbmx5KSlcbjIwNjI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDYzOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfU09DS19DSEVDS19USU1FTywgcy1cdTAwM2Vzb2NrX2NoZWNrX3RpbWVvKSlcbjIwNjQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDY1Olx0XG4yMDY2Olx0XHRubGFfbmVzdF9lbmQoc2tiLCB0bGEpO1xuMjA2NzpcdFx0cmV0dXJuIDA7XG4yMDY4Olx0XG4yMDY5Olx0bmxhX3B1dF9mYWlsdXJlOlxuMjA3MDpcdFx0aWYgKHRsYSlcbjIwNzE6XHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdGxhKTtcbjIwNzI6XHRcdHJldHVybiAtRU1TR1NJWkU7XG4yMDczOlx0fVxuMjA3NDpcdFxuMjA3NTpcdGludCBzZXRfcm9sZV9wYXJtc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNldF9yb2xlX3Bhcm1zICpzKVxuMjA3NjpcdHtcbjIwNzc6XHRcdHN0cnVjdCBubGF0dHIgKnRsYSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgRFJCRF9OTEFfU0VUX1JPTEVfUEFSTVMpO1xuMjA3ODpcdFxuMjA3OTpcdFx0aWYgKCF0bGEpXG4yMDgwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA4MTpcdFxuMjA4MjpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfU0VUX1JPTEVfUEFSTVNfQVNTVU1FX1VQVE9EQVRFLCBzLVx1MDAzZWFzc3VtZV91cHRvZGF0ZSkpXG4yMDgzOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA4NDpcdFxuMjA4NTpcdFx0bmxhX25lc3RfZW5kKHNrYiwgdGxhKTtcbjIwODY6XHRcdHJldHVybiAwO1xuMjA4NzpcdFxuMjA4ODpcdG5sYV9wdXRfZmFpbHVyZTpcbjIwODk6XHRcdGlmICh0bGEpXG4yMDkwOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIHRsYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDYwCgkJCQkJCQlvdXRwdXQ6IDI4OQoJCQkJCQkJdGhvdWdodHM6IDIwNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhlIGNvZGUgc2VlbXMgdG8gY29weSBmaWVsZHMgb25lIGJ5IG9uZSwgbm90IHRoZSB3aG9sZSBzdHJ1Y3R1cmUuIEl0IHVzZXMgYG5sYV9wdXRgIGZvciBzdHJpbmdzIGFuZCBkZXRlcm1pbmVzIHRoZSBsZW5ndGggY2FyZWZ1bGx5LCBidXQgaXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoYXQgaGFwcGVucyBpZiBgc2hhcmVkX3NlY3JldF9sZW5gIGlzIHplcm8uIEl0IGNhbiBjb3B5IDEgYnl0ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB0aGUgc3RydWN0dXJlIGlzIG5vdCBpbml0aWFsaXplZCEgSG93ZXZlciwgYSBzYW5pdGl6ZWQgdmVyc2lvbiBleHBsaWNpdGx5IHplcm9lcyB0aGUgc2hhcmVkIHNlY3JldCBhbmQgc2V0cyBgc2hhcmVkX3NlY3JldF9sZW5gIHRvIHplcm8uIFRoaXMgbWVhbnMgaXQgb25seSBjb3BpZXMgYSB6ZXJvIGJ5dGUuCgpJIHRob3VnaHQgYWJvdXQgb3RoZXIgZmllbGRzLiBJZiB0aGUgb3JpZ2luYWwgYG5ldF9jb25mYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIHNvIGlzIHRoZSBjb3B5LiBUaGUgb3JpZ2luYWwgYG5ldF9jb25mYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIG9yIGBrbWFsbG9jX29iamAsIHdoaWNoIGVpdGhlciBmdWxseSBpbml0aWFsaXplcyBpdCB0byB6ZXJvIG9yIGlzIGNvcGllZCBmcm9tIGFub3RoZXIgaW5pdGlhbGl6ZWQgc3RydWN0LgoKSSBjb25zaWRlcmVkIHBhZGRpbmcsIGJ1dCB0aGUgYG5sYV9wdXRgIGZ1bmN0aW9ucyBkb24mIzM5O3QgY29weSBzdHJ1Y3QgcGFkZGluZy4gVGhlc2UgdXNlIGBubGFfcmVzZXJ2ZWAgdG8gemVybyBvdXQgcGFkZGluZyBhZGRlZCB0byB0aGUgc2tiLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQuCgpUaGUgcGF0Y2ggaXRzZWxmIHJlcGxhY2VzIGNvZGUgdGhhdCB3YXMgY29uZGl0aW9uYWxseSBsZWFraW5nIHRoZSBzaGFyZWQgc2VjcmV0IHRvIHVzZXIgc3BhY2Ugd2l0aCBhIGNhbGwgdG8gYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLiBUaGUgbmV3IHZlcnNpb24gaXMgYWxzbyB1c2VkIGluIG90aGVyIHBsYWNlcy4gVGhpcyBpcyBhIGZpeCBmb3IgYW4gaW5mb3JtYXRpb24gbGVhaywgd2hlcmUgaW5pdGlhbGl6ZWQgc2Vuc2l0aXZlIGRhdGEgd2FzIGJlaW5nIHNlbnQgd2hlbiBpdCBzaG91bGRuJiMzOTt0IGhhdmUgYmVlbi4gVGhpcyBpcyBhIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuIEtNU0FOIGRldGVjdHMgdGhlIGxhdHRlciwgYnV0IG5vdCB0aGUgZm9ybWVyLgoKVGhlIGNvZGUgY29waWVzIHRoZSBgbmV0X2NvbmZgIHN0cnVjdCB0byBgbmNfY2xlYW5gLCBidXQgYG5jX2NsZWFuYCBpcyBvbiB0aGUgc3RhY2sgYW5kIGluaXRpYWxpemVkIGJ5IGEgZGlyZWN0IGFzc2lnbm1lbnQgb2YgdGhlIGluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24gY29waWVzIGZpZWxkIGJ5IGZpZWxkLCBub3QgdGhlIHdob2xlIHN0cnVjdCwgd2hpY2ggbWVhbnMgdGhlIHBhZGRpbmcgaXMgbm90IGNvcGllZC4gRXZlbiBpZiB0aGUgcGFkZGluZyB3YXMgdW5pbml0aWFsaXplZCwgaXQgaXMgbm90IHJlYWQuIEl0IHVzZXMgYHMtJmd0O3NoYXJlZF9zZWNyZXRgLCBgcy0mZ3Q7Y3JhbV9obWFjX2FsZ2AsIGV0Yy4gZGlyZWN0bHk7IGl0IGRvZXNuJiMzOTt0IGFjY2VzcyBwYWRkaW5nLgoKTG9va2luZyBhdCB0aGUgcnVsZXMsIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IG1vZGlmeWluZyBrZXJuZWwgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBmaXhpbmcgYSBsb2dpYyBidWcgYWJvdXQgZXhwb3NpbmcgaW5pdGlhbGl6ZWQgc2Vuc2l0aXZlIGRhdGEsIG5vdCBpbnRyb2R1Y2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIHdyaXRlLgoKVGhlIHBhdGNoIHVzZXMgdGhlIGBubGFfcHV0YCBmdW5jdGlvbiBpbiBhIHdheSB0aGF0IGNvdWxkIHJlYWQgdGhlIGZpcnN0IGJ5dGUgb2YgYHNoYXJlZF9zZWNyZXRgLCBhbmQgaWYgdGhlIGxlbmd0aCBpcyB6ZXJvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBhcnJheSBpcyByZWFkLiBJbiB0aGUgc2FuaXRpemVkIHZlcnNpb24sIHRoZSBzaGFyZWQgc2VjcmV0IGFycmF5IGlzIGV4cGxpY2l0bHkgemVyb2VkIGJlZm9yZSBjb3B5aW5nLiBUaGUgb3RoZXIgYnl0ZXMgY29waWVkIGFyZSBpbml0aWFsaXplZC4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQgZml4ZXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLiAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLioqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzZW5zaXRpdmUgaW5pdGlhbGl6ZWQgZGF0YSAodGhlIERSQkQgc2hhcmVkIHNlY3JldCkgd2FzIGV4cG9zZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXJzIHZpYSBuZXRsaW5rLiBUbyBmaXggdGhpcywgdGhlIHBhdGNoIGludHJvZHVjZXMgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCB3aGljaCBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgKGBuY19jbGVhbmApLCB6ZXJvZXMgb3V0IHRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQsIGFuZCB0aGVuIHNlcmlhbGl6ZXMgaXQuIFxuXG5XaGlsZSBgbmNfY2xlYW5gIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYG5jX2NsZWFuID0gKm5jYCkuIEZ1cnRoZXJtb3JlLCB0aGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBgbmV0X2NvbmZfdG9fc2tiYCBjb3BpZXMgdGhlIHN0cnVjdCBmaWVsZC1ieS1maWVsZCBpbnRvIG5ldGxpbmsgYXR0cmlidXRlcyAodXNpbmcgYG5sYV9wdXRgLCBgbmxhX3B1dF91MzJgLCBldGMuKSByYXRoZXIgdGhhbiBjb3B5aW5nIHRoZSBzdHJ1Y3QgYXMgYSByYXcgbWVtb3J5IGJsb2NrLiBUaGlzIGVuc3VyZXMgdGhhdCBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCBpdHNlbGYgaXMgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgc2VyaWFsaXphdGlvbi5cblxuU2luY2UgdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWssIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLCBzdGFuZGFyZCBLQVNBTiBhbmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzZW5zaXRpdmUgaW5pdGlhbGl6ZWQgZGF0YSAodGhlIERSQkQgc2hhcmVkIHNlY3JldCkgd2FzIGV4cG9zZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXJzIHZpYSBuZXRsaW5rLiBUbyBmaXggdGhpcywgdGhlIHBhdGNoIGludHJvZHVjZXMgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCB3aGljaCBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgKGBuY19jbGVhbmApLCB6ZXJvZXMgb3V0IHRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQsIGFuZCB0aGVuIHNlcmlhbGl6ZXMgaXQuIFxuXG5XaGlsZSBgbmNfY2xlYW5gIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYG5jX2NsZWFuID0gKm5jYCkuIEZ1cnRoZXJtb3JlLCB0aGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBgbmV0X2NvbmZfdG9fc2tiYCBjb3BpZXMgdGhlIHN0cnVjdCBmaWVsZC1ieS1maWVsZCBpbnRvIG5ldGxpbmsgYXR0cmlidXRlcyAodXNpbmcgYG5sYV9wdXRgLCBgbmxhX3B1dF91MzJgLCBldGMuKSByYXRoZXIgdGhhbiBjb3B5aW5nIHRoZSBzdHJ1Y3QgYXMgYSByYXcgbWVtb3J5IGJsb2NrLiBUaGlzIGVuc3VyZXMgdGhhdCBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCBpdHNlbGYgaXMgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgc2VyaWFsaXphdGlvbi5cblxuU2luY2UgdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWssIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLCBzdGFuZGFyZCBLQVNBTiBhbmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MDk6MjQuNzY0OTA5Mzk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDY4MjQwNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfRFJCRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdFwiLFxuICAgIFwiZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRcIixcbiAgICBcImRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzZW5zaXRpdmUgaW5pdGlhbGl6ZWQgZGF0YSAodGhlIERSQkQgc2hhcmVkIHNlY3JldCkgd2FzIGV4cG9zZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXJzIHZpYSBuZXRsaW5rLiBUbyBmaXggdGhpcywgdGhlIHBhdGNoIGludHJvZHVjZXMgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCB3aGljaCBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgKGBuY19jbGVhbmApLCB6ZXJvZXMgb3V0IHRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQsIGFuZCB0aGVuIHNlcmlhbGl6ZXMgaXQuIFxcblxcbldoaWxlIGBuY19jbGVhbmAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbmNfY2xlYW4gPSAqbmNgKS4gRnVydGhlcm1vcmUsIHRoZSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgc3RydWN0IGZpZWxkLWJ5LWZpZWxkIGludG8gbmV0bGluayBhdHRyaWJ1dGVzICh1c2luZyBgbmxhX3B1dGAsIGBubGFfcHV0X3UzMmAsIGV0Yy4pIHJhdGhlciB0aGFuIGNvcHlpbmcgdGhlIHN0cnVjdCBhcyBhIHJhdyBtZW1vcnkgYmxvY2suIFRoaXMgZW5zdXJlcyB0aGF0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBuZXZlciByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkIGl0c2VsZiBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSBzZXJpYWxpemF0aW9uLlxcblxcblNpbmNlIHRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyByYXRoZXIgdGhhbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZCwgc3RhbmRhcmQgS0FTQU4gYW5kIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjowOToyNC43NjQ5MzIxMzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDc3MzYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3YjFmODVjNmFhMDM4NmI5MjA3MjM0YzQ0YTAzMTQ2YjI3MmJiZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTY6MDk6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcXG5pbmRleCBmOWZmY2Q2NzYwN2I1Li5iNzdmOTAxZmMzZWY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jXFxuQEAgLTMzMDYsNiArMzMwNiwyNiBAQCBzdGF0aWMgaW50IG5sYV9wdXRfZHJiZF9jZmdfY29udGV4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiB9XFxuIFxcbisvKlxcbisgKiBuZXRfY29uZl90b19za2IoKSBzZXJpYWxpemVzIHRoZSBzaGFyZWQgc2VjcmV0IHZlcmJhdGltLiBBbnkgcGF0aCB0aGF0IGNhblxcbisgKiBhbnN3ZXIgYSByZXF1ZXN0IGZyb20gYW4gdW5wcml2aWxlZ2VkIHByb2Nlc3MgbXVzdCBwYXNzIGV4Y2x1ZGVfc2Vuc2l0aXZlLFxcbisgKiBzbyB0aGUgc2VjcmV0IGlzIGJsYW5rZWQgaW4gYSBwcml2YXRlIGNvcHkgYmVmb3JlIGl0IHJlYWNoZXMgdGhlIHNrYi5cXG4rICovXFxuK3N0YXRpYyBpbnQgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKm5jLFxcbitcXHRcXHRcXHRcXHQgICAgIGJvb2wgZXhjbHVkZV9zZW5zaXRpdmUpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9jb25mIG5jX2NsZWFuO1xcbitcXG4rXFx0aWYgKCFleGNsdWRlX3NlbnNpdGl2ZSlcXG4rXFx0XFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcXG4rXFxuK1xcdG5jX2NsZWFuID0gKm5jO1xcbitcXHRtZW1zZXQobmNfY2xlYW4uc2hhcmVkX3NlY3JldCwgMCwgc2l6ZW9mKG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQpKTtcXG4rXFx0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xcbitcXG4rXFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIFxcdTAwMjZuY19jbGVhbik7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoZSBnZW5lcmljIG5ldGxpbmsgZHVtcCBjYWxsYmFja3MgYXJlIGNhbGxlZCBvdXRzaWRlIHRoZSBnZW5sX2xvY2soKSwgc29cXG4gICogdGhleSBjYW5ub3QgdXNlIHRoZSBzaW1wbGUgYXR0cmlidXRlIHBhcnNpbmcgY29kZSB3aGljaCB1c2VzIGdsb2JhbFxcbkBAIC0zNjIxLDcgKzM2NDEsOCBAQCBpbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRuZXRfY29uZiA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVxcdTAwM2VuZXRfY29uZik7XFxuIFxcdFxcdGlmIChuZXRfY29uZikge1xcbi1cXHRcXHRcXHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuZXRfY29uZik7XFxuK1xcdFxcdFxcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuZXRfY29uZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IWNhcGFibGUoQ0FQX1NZU19BRE1JTikpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbkBAIC0zODQyLDE4ICszODYzLDggQEAgc3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbiBcXHRcXHRzdHJ1Y3QgbmV0X2NvbmYgKm5jO1xcbiBcXG4gXFx0XFx0bmMgPSByY3VfZGVyZWZlcmVuY2UoZmlyc3RfcGVlcl9kZXZpY2UoZGV2aWNlKS1cXHUwMDNlY29ubmVjdGlvbi1cXHUwMDNlbmV0X2NvbmYpO1xcbi1cXHRcXHRpZiAobmMpIHtcXG4tXFx0XFx0XFx0aWYgKGV4Y2x1ZGVfc2Vuc2l0aXZlKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfY29uZiBuY19jbGVhbiA9ICpuYztcXG4tXFxuLVxcdFxcdFxcdFxcdG1lbXNldChuY19jbGVhbi5zaGFyZWRfc2VjcmV0LCAwLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQpKTtcXG4tXFx0XFx0XFx0XFx0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xcbi1cXHRcXHRcXHRcXHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBcXHUwMDI2bmNfY2xlYW4pO1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAobmMpXFxuK1xcdFxcdFxcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgZXhjbHVkZV9zZW5zaXRpdmUpO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRpZiAoZXJyKVxcbkBAIC00MDU4LDcgKzQwNjksNyBAQCBzdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9jb25mICpuYztcXG4gXFxuIFxcdFxcdFxcdFxcdG5jID0gcmN1X2RlcmVmZXJlbmNlKGNvbm5lY3Rpb24tXFx1MDAzZW5ldF9jb25mKTtcXG4tXFx0XFx0XFx0XFx0aWYgKG5jIFxcdTAwMjZcXHUwMDI2IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKSAhPSAwKVxcbitcXHRcXHRcXHRcXHRpZiAobmMgXFx1MDAyNlxcdTAwMjYgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCB0cnVlKSAhPSAwKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGNhbmNlbDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRnb3RvIGRvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjA5OjI1LjI0MDQ5Mjk0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIxMjgzMjA1MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0RSQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRcIixcbiAgICBcImRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0XCIsXG4gICAgXCJkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2IxZjg1YzZhYTAzODZiOTIwNzIzNGM0NGEwMzE0NmIyNzJiYmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTY6MDk6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuY1xuaW5kZXggZjlmZmNkNjc2MDdiNS4uYjc3ZjkwMWZjM2VmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcbkBAIC0zMzA2LDYgKzMzMDYsMjYgQEAgc3RhdGljIGludCBubGFfcHV0X2RyYmRfY2ZnX2NvbnRleHQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAtRU1TR1NJWkU7XG4gfVxuIFxuKy8qXG4rICogbmV0X2NvbmZfdG9fc2tiKCkgc2VyaWFsaXplcyB0aGUgc2hhcmVkIHNlY3JldCB2ZXJiYXRpbS4gQW55IHBhdGggdGhhdCBjYW5cbisgKiBhbnN3ZXIgYSByZXF1ZXN0IGZyb20gYW4gdW5wcml2aWxlZ2VkIHByb2Nlc3MgbXVzdCBwYXNzIGV4Y2x1ZGVfc2Vuc2l0aXZlLFxuKyAqIHNvIHRoZSBzZWNyZXQgaXMgYmxhbmtlZCBpbiBhIHByaXZhdGUgY29weSBiZWZvcmUgaXQgcmVhY2hlcyB0aGUgc2tiLlxuKyAqL1xuK3N0YXRpYyBpbnQgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKm5jLFxuK1x0XHRcdFx0ICAgICBib29sIGV4Y2x1ZGVfc2Vuc2l0aXZlKVxuK3tcbitcdHN0cnVjdCBuZXRfY29uZiBuY19jbGVhbjtcbitcbitcdGlmICghZXhjbHVkZV9zZW5zaXRpdmUpXG4rXHRcdHJldHVybiBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7XG4rXG4rXHRuY19jbGVhbiA9ICpuYztcbitcdG1lbXNldChuY19jbGVhbi5zaGFyZWRfc2VjcmV0LCAwLCBzaXplb2YobmNfY2xlYW4uc2hhcmVkX3NlY3JldCkpO1xuK1x0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xuK1xuK1x0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIFx1MDAyNm5jX2NsZWFuKTtcbit9XG4rXG4gLypcbiAgKiBUaGUgZ2VuZXJpYyBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzIGFyZSBjYWxsZWQgb3V0c2lkZSB0aGUgZ2VubF9sb2NrKCksIHNvXG4gICogdGhleSBjYW5ub3QgdXNlIHRoZSBzaW1wbGUgYXR0cmlidXRlIHBhcnNpbmcgY29kZSB3aGljaCB1c2VzIGdsb2JhbFxuQEAgLTM2MjEsNyArMzY0MSw4IEBAIGludCBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2tcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0bmV0X2NvbmYgPSByY3VfZGVyZWZlcmVuY2UoY29ubmVjdGlvbi1cdTAwM2VuZXRfY29uZik7XG4gXHRcdGlmIChuZXRfY29uZikge1xuLVx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5ldF9jb25mKTtcbitcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmV0X2NvbmYsXG4rXHRcdFx0XHRcdFx0XHQhY2FwYWJsZShDQVBfU1lTX0FETUlOKSk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5AQCAtMzg0MiwxOCArMzg2Myw4IEBAIHN0YXRpYyBpbnQgbmxhX3B1dF9zdGF0dXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcbiBcdFx0c3RydWN0IG5ldF9jb25mICpuYztcbiBcbiBcdFx0bmMgPSByY3VfZGVyZWZlcmVuY2UoZmlyc3RfcGVlcl9kZXZpY2UoZGV2aWNlKS1cdTAwM2Vjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbi1cdFx0aWYgKG5jKSB7XG4tXHRcdFx0aWYgKGV4Y2x1ZGVfc2Vuc2l0aXZlKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbmV0X2NvbmYgbmNfY2xlYW4gPSAqbmM7XG4tXG4tXHRcdFx0XHRtZW1zZXQobmNfY2xlYW4uc2hhcmVkX3NlY3JldCwgMCxcbi1cdFx0XHRcdCAgICAgICBzaXplb2YobmNfY2xlYW4uc2hhcmVkX3NlY3JldCkpO1xuLVx0XHRcdFx0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xuLVx0XHRcdFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiKHNrYiwgXHUwMDI2bmNfY2xlYW4pO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRcdGlmIChuYylcbitcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmMsIGV4Y2x1ZGVfc2Vuc2l0aXZlKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aWYgKGVycilcbkBAIC00MDU4LDcgKzQwNjksNyBAQCBzdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0XHRcdHN0cnVjdCBuZXRfY29uZiAqbmM7XG4gXG4gXHRcdFx0XHRuYyA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbi1cdFx0XHRcdGlmIChuYyBcdTAwMjZcdTAwMjYgbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpICE9IDApXG4rXHRcdFx0XHRpZiAobmMgXHUwMDI2XHUwMDI2IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgdHJ1ZSkgIT0gMClcbiBcdFx0XHRcdFx0Z290byBjYW5jZWw7XG4gXHRcdFx0fVxuIFx0XHRcdGdvdG8gZG9uZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjA5OjI1LjI0MDQ5NDIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjgyMDk2MDE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERSQkQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgYWZmZWN0aW5nIGBkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jYC4gTG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIGEgZnVuY3Rpb24gY2FsbGVkIGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIOKAkyBzYW5pdGl6YXRpb24gaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBpbnRlcmFjdGlvbj8gU291bmRzIGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IHNlY3VyaXR5LXJlbGF0ZWQuIEl0J3MgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGNvZGUsIHdoaWNoIGlzIGdvb2QgZm9yIG1haW50YWluYWJpbGl0eSwgYW5kIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAgYW5kIGBnZXRfb25lX3N0YXR1c2AuIFRoZXNlIGFyZSBuZXRsaW5rIGZ1bmN0aW9ucywgcmlnaHQ/IEFuZCB0aGUgY29udGV4dCBpcyBEUkJELCBhIGJsb2NrIGRldmljZSBkcml2ZXIg4oCTIGEgZGlzdHJpYnV0ZWQsIHJlcGxpY2F0ZWQgb25lLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkuXG5cblJpZ2h0LCBEUkJELiBOZXR3b3JrIGJsb2NrIGRldmljZS4gR2VuZXJhbGx5IG1hbmFnZWQgdmlhIG5ldGxpbmsuIFRoZSBwYXRjaCBtb2RpZmllcyBuZXRsaW5rIGR1bXAgZnVuY3Rpb25zIHdoaWNoIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHBvdGVudGlhbCBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBhIGJsb2NrIGRldmljZSBkcml2ZXIsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgRFJCRCBpcyByZWFjaGFibGUsIGFuZCBkZXRlcm1pbmUgaXRzIGNvbmZpZ3VyYXRpb24sIHRvIGZpbmQgb3V0IGlmIGl0J3MgZXZlbiB3b3J0aCBmb2N1c2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEyOjEyLjA2MTQ1Nzk4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE1MDQ0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfRFJCRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZz02PWNvbW1lbnQgXFxcIkRSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTIG9yIElORVQgbm90IHNlbGVjdGVkXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWctOC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZzo5OmNvbmZpZyBCTEtfREVWX0RSQkRcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiRFJCRCBEaXN0cmlidXRlZCBSZXBsaWNhdGVkIEJsb2NrIERldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjoxMi41NDI5NjkzODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODUxMTQ1NTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIGJhc2VkIG9uIGEgYml0IG9mIGRpZ2dpbmc6XG5cbioqVW5kZXJzdGFuZGluZyBEUkJEIENvbm5lY3Rpb24gU3RhdHVzIGFuZCBSZXBvcnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCBhbmQgYGdldF9vbmVfc3RhdHVzYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGVzZSBhcmUgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgRFJCRCByZXBvcnRzIGFuZCByZXRyaWV2ZXMgaXRzIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24sIGxpa2VseSB0aHJvdWdoIE5ldGxpbmsuIExldCdzIGJyZWFrIGl0IGRvd246XG5cbmBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgIHNvdW5kcyBsaWtlIGEgTmV0bGluayBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGR1bXAgY29ubmVjdGlvbi1yZWxhdGVkIGRhdGEuIFRoZSBcImR1bXBpdFwiIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0J3MgZm9yIGdlbmVyYXRpbmcgYSBjb21wbGV0ZSBzbmFwc2hvdCBvciBhIGZ1bGwgbGlzdGluZyBvZiBhbGwgYWN0aXZlIERSQkQgY29ubmVjdGlvbnMuIFRoaXMgd291bGQgYmUgY3J1Y2lhbCBmb3IgbW9uaXRvcmluZywgdHJvdWJsZXNob290aW5nLCBhbmQgcG90ZW50aWFsbHksIGltcGxlbWVudGluZyBtYW5hZ2VtZW50IHRvb2xzLiBJdCBwcm9iYWJseSBwcm92aWRlcyBkZXRhaWxzIGxpa2UgcGVlciBJUCBhZGRyZXNzZXMsIHBvcnRzLCBjb25uZWN0aW9uIHN0YXRlcyAoZS5nLiwgQ29ubmVjdGVkLCBEaXNjb25uZWN0aW5nLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc29tZSBwZXJmb3JtYW5jZSBtZXRyaWNzLiBJIHN1c3BlY3QgaXQgZnVuY3Rpb25zIGFzIGEgTmV0bGluayBkdW1wIGhhbmRsZXIuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCBgZ2V0X29uZV9zdGF0dXNgIHNlZW1zIG11Y2ggbW9yZSBmb2N1c2VkIGFuZCBncmFudWxhci4gVGhlIG5hbWUgaW1wbGllcyBpdCdzIGRlc2lnbmVkIHRvIHJldHJpZXZlIHRoZSBzdGF0dXMgb2YgYSAqc2luZ2xlKiBEUkJEIGNvbm5lY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHVzZWQgd2hlbiBhIHNwZWNpZmljIGNvbm5lY3Rpb24ncyBzdGF0dXMgaXMgcmVxdWlyZWQsIHBlcmhhcHMgdHJpZ2dlcmVkIGJ5IGEgcXVlcnkgb3IgYSByZXNwb25zZSB0byBhIG1hbmFnZW1lbnQgcmVxdWVzdC4gSXQgd291bGQgcHJvdmlkZSBrZXkgaW5mb3JtYXRpb24gbGlrZSBvcGVyYXRpb25hbCBzdGF0ZSwgZXJyb3JzLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhc3BlY3RzIHJlbGF0ZWQgdG8gdGhhdCBjb25uZWN0aW9uLiBJdCBtYXkgcmV0dXJuIHZhcmlvdXMgcGFyYW1ldGVycywgb3IgcG9pbnRlcnMgdG8gc3RydWN0cywgYnV0IG9ubHkgZm9yIGEgc3BlY2lmaWMsIGdpdmVuIGNvbm5lY3Rpb24uXG5cbkknZCBiZXQgdGhleSdyZSBsaWtlbHkgY29tcGxlbWVudGFyeS4gYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAgcHJvdmlkZXMgdGhlIGJyb2FkIG92ZXJ2aWV3LCB3aGlsZSBgZ2V0X29uZV9zdGF0dXNgIGlzIHRoZSBwcmVjaXNpb24gdG9vbCBmb3IgaW4tZGVwdGggaW5zcGVjdGlvbiBvZiBhIHNwZWNpZmljIGNvbm5lY3Rpb24uIFRoZSByZWxhdGlvbnNoaXAgaXMgbGlrZWx5IHRoYXQgdGhlIGR1bXAgZnVuY3Rpb24gcHJvdmlkZXMgYW4gb3ZlcnZpZXcsIGFuZCBgZ2V0X29uZV9zdGF0dXNgIGlzIGxpa2VseSBjYWxsZWQgaW50ZXJuYWxseSB0byByZXR1cm4gZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIGNvbm5lY3Rpb24sIG9uZSBhdCBhIHRpbWUuIEknZCBhbHNvIGltYWdpbmUgdGhhdCBhIE5ldGxpbmsgbWVzc2FnZSB3b3VsZCBiZSB1c2VkIHRvIHRyaWdnZXIgYm90aCB0aGVzZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjoxNy4zOTQxMTc2MDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1MTA1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zNTQ5PWVudW0geyBTSU5HTEVfUkVTT1VSQ0UsIElURVJBVEVfUkVTT1VSQ0VTIH07XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zNTUwLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzU1MTppbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM1NTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MzU5PWNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcmJkX25sX29wc1szMl0gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy02MTctXFx0XFx0LmNtZFxcdFxcdD0gRFJCRF9BRE1fR0VUX0NPTk5FQ1RJT05TLFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjYxODpcXHRcXHQuZHVtcGl0XFx0XFx0PSBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXQsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtNjE5LVxcdFxcdC5kb25lXFx0XFx0PSBkcmJkX2FkbV9kdW1wX2Nvbm5lY3Rpb25zX2RvbmUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaD03ND1pbnQgZHJiZF9ubF9nZXRfZGV2aWNlc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC03NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaDo3NjppbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6MTcuNDc0NjM2MDM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5Nzg5MjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcmVxdWVzdCwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipNeSBJbnRlcm5hbCBNb25vbG9ndWUgb24gYGdldF9vbmVfc3RhdHVzYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY29uY2VwdCBoZXJlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3Qgb24gdGhlIHN1cmZhY2UuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uIG9yIHByb2Nlc3MsIGxldCdzIGNhbGwgaXQgYGdldF9vbmVfc3RhdHVzYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFuIGV4cGVydCwgaXNuJ3QgKndoYXQqIGl0IGRvZXMsIGJ1dCAqaG93KiBpdCdzIGltcGxlbWVudGVkIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIGl0cyBkZXNpZ24uIElzIHRoaXMgYSBzaW1wbGUgZ2V0dGVyLCBmZXRjaGluZyBhIHNpbmdsZSBzdGF0dXMgZnJvbSBhIGRhdGFiYXNlIG9yIGEgbW9yZSBjb21wbGV4IG9yY2hlc3RyYXRpb24gb2YgbXVsdGlwbGUgc2VydmljZXM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGUgc3RhdHVzIGlzIHVwZGF0ZWQgY29uY3VycmVudGx5P1xuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZWRnZSBjYXNlczogV2hhdCBoYXBwZW5zIGlmIHRoZSByZXF1ZXN0ZWQgc3RhdHVzIGRvZXNuJ3QgZXhpc3Q/IERvZXMgaXQgcmV0dXJuIGEgbnVsbCwgcmFpc2UgYW4gZXhjZXB0aW9uLCBvciByZXR1cm4gc29tZSBraW5kIG9mIFwibm90IGZvdW5kXCIgb2JqZWN0PyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEhvdyBhcmUgZXhjZXB0aW9ucyBwcm9wYWdhdGVkIGFuZCBoYW5kbGVkIGZ1cnRoZXIgdXAgdGhlIGNhbGwgc3RhY2s/IElzIHRoZXJlIGFueSBjYWNoaW5nIGludm9sdmVkPyBJZiBzbywgd2hhdCdzIHRoZSBjYWNoZSBpbnZhbGlkYXRpb24gc3RyYXRlZ3k/XG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBwZXJmb3JtYW5jZTogSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIGZyZXF1ZW50IGNhbGxzPyBEb2VzIGl0IHJlbHkgb24gc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnM/IEFuZCBpZiBpdCdzIGFzeW5jaHJvbm91cywgaXMgaXQgaGFuZGxpbmcgY29uY3VycmVuY3kgcHJvcGVybHksIHBlcmhhcHMgd2l0aCBhc3luYy9hd2FpdCwgY29yb3V0aW5lcywgb3IgdGhyZWFkaW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBib3R0bGVuZWNrIGluIHRoZSBsYXJnZXIgc3lzdGVtPyBBcmUgdGhlcmUgbG9nZ2luZyBhbmQgbW9uaXRvcmluZyBpbiBwbGFjZSB0byB0cmFjayBlcnJvcnMgYW5kIHJlc3BvbnNlIHRpbWVzP1xuXG5UaGUgb3ZlcmFsbCBzeXN0ZW0gaXMgaW1wb3J0YW50LiBIb3cgZG9lcyBgZ2V0X29uZV9zdGF0dXNgIGludGVyZmFjZSB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBsYXJnZXIgc3lzdGVtPyBXaGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzPyBJJ20gYWxyZWFkeSBlbnZpc2lvbmluZyBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIGV4dGVybmFsIHNlcnZpY2VzIG9yIHJlc291cmNlcy4gQSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBmb3IgdHJvdWJsZXNob290aW5nIGFuZCBtYWludGFpbmFiaWxpdHkuXG5cbkZpbmFsbHksIEknbSB0aGlua2luZyBhYm91dCB0ZXN0YWJpbGl0eS4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB3aXRoIHVuaXQgdGVzdGluZyBpbiBtaW5kPyBBcmUgdGhlcmUgbW9ja2FibGUgZGVwZW5kZW5jaWVzPyBXaGF0J3MgdGhlIHBsYW4gZm9yIGludGVncmF0aW9uIGFuZCBzeXN0ZW0gdGVzdHMgdGhhdCB3b3VsZCB1c2UgdGhpcyBmdW5jdGlvbj9cblxuRXNzZW50aWFsbHksIEknbSBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Qgb2YgYmVzdCBwcmFjdGljZXMgYW5kIHBvdGVudGlhbCBwaXRmYWxscy4gVGhlIFwic2ltcGxlXCIgYGdldF9vbmVfc3RhdHVzYCBmdW5jdGlvbiBpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludDsgdGhlIHJlYWwgdmFsdWUgaXMgaW4gdW5kZXJzdGFuZGluZyBpdHMgYnJvYWRlciBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEyOjIzLjE3MjUzMTAyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjE5NTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfb25lX3N0YXR1c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk2Mj1pbnQgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzk4NC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM5ODU6c3RhdGljIGludCBnZXRfb25lX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTg2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDExMS0gKlxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDExMjogKiBPbmNlIHRoaW5ncyBhcmUgc2V0dXAgcHJvcGVybHksIHdlIGNhbGwgaW50byBnZXRfb25lX3N0YXR1cygpLlxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDExMy0gKi9cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTQxMTQ9aW50IGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTQ5LVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDE1MDpcXHRrcmVmX3B1dChcXHUwMDI2cmVzb3VyY2UtXFx1MDAzZWtyZWYsIGRyYmRfZGVzdHJveV9yZXNvdXJjZSk7IC8qIGdldF9vbmVfc3RhdHVzKCkgcmV2YWxpZGF0ZXMgdGhlIHJlc291cmNlICovXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTUxLVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTU4LWR1bXA6XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzo0MTU5OlxcdHJldHVybiBnZXRfb25lX3N0YXR1cyhza2IsIGNiKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQxNjAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjoyMy4yNjg3MzA3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDUxMzYyNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBEUkJEIE5ldGxpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIOKAkyBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBjb3VsZCBwb3RlbnRpYWxseSBzbmFnIGEgc2hhcmVkIHNlY3JldC4gSXQncyBhIHNlY3VyaXR5IGZpeCwgcG90ZW50aWFsbHkgZWFybmluZyBhIENWRSwgb3IgYXQgbGVhc3QgYSBidWdmaXguIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3RyYWlnaHRmb3J3YXJkOiBzYW5pdGl6ZSB0aGUgc2hhcmVkIHNlY3JldCBpbiB0aGUgbmV0bGluayBvdXRwdXQgaWYgdGhlIHVzZXIgbGFja3MgYENBUF9TWVNfQURNSU5gLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIklzIHRoaXMgZnV6emFibGU/XCIgVGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBpdHNlbGYgbG9va3MgaW5jcmVkaWJseSBzaW1wbGUuIEl0J3MganVzdCBjYWxsaW5nIGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYCwgZWZmZWN0aXZlbHkgemVyb2luZyBvdXQgdGhlIHJlbGV2YW50IGZpZWxkcy4gRnJvbSBhIGxvZ2ljIGNvbXBsZXhpdHkgcGVyc3BlY3RpdmUsIHRoZXJlIGlzbid0IG11Y2ggdG8gc2luayBvdXIgdGVldGggaW50by4gSG93ZXZlciwgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIHJlYWNoYWJsZSBkcml2ZXIuIFNvLCB3aGlsZSBpdCdzIHNpbXBsZSwgaXQncyBhIG1vZGlmaWNhdGlvbiBpbiBhbiBhcmVhIHRoYXQncyBhY2Nlc3NpYmxlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4uLi4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmLi4uXCIgQWhhISBUaGlzIGRvZXNuJ3QgZmFsbCBpbnRvICphbnkqIG9mIHRob3NlIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgY2F0ZWdvcmllcy4gVGhpcyBhY3R1YWxseSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMvZHJpdmVycy4gT2theSwgc28gZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBpcyBtaW5vciwgd2Ugc2hvdWxkIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuTm93LCBsZXQncyBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzLiBUaGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBhcmUgYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAgYW5kIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YC4gSSBhbSBhbHNvIGluY2x1ZGluZyBgZ2V0X29uZV9zdGF0dXNgIGJlY2F1c2UgaXQgaXMgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAuXG5cbkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlnIGlzIGBCTEtfREVWX0RSQkRgLiBMZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlIGNoZWNrIGlmIHRoYXQgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6MzcuNzIwMDk2ODUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjYwNzE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9EUkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnPTY9Y29tbWVudCBcXFwiRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMgb3IgSU5FVCBub3Qgc2VsZWN0ZWRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZy04LVxcbmRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnOjk6Y29uZmlnIEJMS19ERVZfRFJCRFxcbmRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnLTEwLVxcdHRyaXN0YXRlIFxcXCJEUkJEIERpc3RyaWJ1dGVkIFJlcGxpY2F0ZWQgQmxvY2sgRGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEyOjM3Ljc4NjcwOTI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDA2OTAzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEJMS19ERVZfRFJCRCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX0RFVl9EUkJEYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbm5lY3Rpb25zLCB0aGUgbW9kdWxlcyBpdCByZWxpZXMgdXBvbi4gV2hhdCBvdGhlciBibG9jayBkZXZpY2UgZHJpdmVycyBhcmUgaW52b2x2ZWQ/IElzIGl0IGEgdmlydHVhbCBibG9jayBkZXZpY2U/IElmIHNvLCB3aGF0IHZpcnR1YWwgYmxvY2sgbGF5ZXIgaG9va3MgZG9lcyBpdCBlbXBsb3k/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhbnkgc3BlY2lmaWMgbmV0d29yayBwcm90b2NvbHMgb3Igc3RhY2tzIGF0IHRoZSBrZXJuZWwgbGV2ZWw/IE15IG1pbmQgc3RhcnRzIGJ1aWxkaW5nIGEgbWVudGFsIG1hcC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsYXllcnMgaW52b2x2ZWQ6IHRoZSBnZW5lcmljIGJsb2NrIGxheWVyLCBwb3RlbnRpYWwgSS9PIHNjaGVkdWxlcnMsIHRoZSBuZXR3b3JrIGNvbXBvbmVudCBmb3IgcmVwbGljYXRpb24sIGFueSB1bmRlcmx5aW5nIHN0b3JhZ2UgZHJpdmVycy4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIGBLY29uZmlnYCBlbnRyaWVzIHJlbGF0ZWQgdG8gRFJCRCwgdG8gc2VlIHdoYXQgbW9kdWxlcyBpdCBjYW4gb3B0aW9uYWxseSBsb2FkIGFuZCB3aGF0IGl0IHVuY29uZGl0aW9uYWxseSByZXF1aXJlcy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzdG9yYWdlIGRldmljZSB0eXBlcyBpdCdzIG9wdGltaXplZCBmb3I/IEFyZSB0aGVyZSBhbnkgY29yZSBrZXJuZWwgc3RydWN0dXJlcyBvciBBUElzIGl0IGRlZXBseSBpbnRlcmFjdHMgd2l0aCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBpcyBnb2luZyB0byBpbnZvbHZlIGRpdmluZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgY3Jvc3MtcmVmZXJlbmNpbmcgZGVmaW5pdGlvbnMsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBkaWZmZXJlbnQga2VybmVsIHN1YnN5c3RlbXMgaW50ZXJhY3QgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gZml0cyB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjo0MS40Mjc0MDIzMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgRFJCRCBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29tbWVudCBcXFwiRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMgb3IgSU5FVCBub3Qgc2VsZWN0ZWRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlM9J24nIHx8IElORVQ9J24nXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBCTEtfREVWX0RSQkRcXG4gIDEwOlxcdFxcdHRyaXN0YXRlIFxcXCJEUkJEIERpc3RyaWJ1dGVkIFJlcGxpY2F0ZWQgQmxvY2sgRGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlMgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiAgMTI6XFx0XFx0c2VsZWN0IExSVV9DQUNIRVxcbiAgMTM6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgTk9URTogSW4gb3JkZXIgdG8gYXV0aGVudGljYXRlIGNvbm5lY3Rpb25zIHlvdSBoYXZlIHRvIHNlbGVjdFxcbiAgMTc6XFx0XFx0ICBDUllQVE9fSE1BQyBhbmQgYSBoYXNoIGZ1bmN0aW9uIGFzIHdlbGwuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgRFJCRCBpcyBhIHNoYXJlZC1ub3RoaW5nLCBzeW5jaHJvbm91c2x5IHJlcGxpY2F0ZWQgYmxvY2sgZGV2aWNlLiBJdFxcbiAgMjA6XFx0XFx0ICBpcyBkZXNpZ25lZCB0byBzZXJ2ZSBhcyBhIGJ1aWxkaW5nIGJsb2NrIGZvciBoaWdoIGF2YWlsYWJpbGl0eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjo0MS40Mjc0OTM3NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyNDM2MzM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEUkJEIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdG8gYmVzdCBjb25maWd1cmUgdGhpcyBEUkJEIG1vZHVsZS4gUmlnaHQsIGBCTEtfREVWX0RSQkRgIHJlbGllcyBvbiBib3RoIGBQUk9DX0ZTYCBhbmQgYElORVRgLiBOb3QgYSBzdXJwcmlzZSwgYW5kIHVzdWFsbHkgYm90aCBhcmUgZW5hYmxlZCBhbnl3YXkuIFRoZXJlZm9yZSwgSSdsbCBnbyBhaGVhZCBhbmQgYWRkIGBCTEtfREVWX0RSQkRgIGRpcmVjdGx5IHRvIG15IEVuYWJsZUNvbmZpZ3MuIEl0J3MgdGhlIG1vc3Qgc2Vuc2libGUgdGhpbmcgdG8gZG8uXG5cbk5vdywgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAsIGFuZCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQuIEhvbGQgb24uLi4gSSBzZWUgdGhhdCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgIGl0c2VsZiBpc24ndCBtb2RpZmllZC4gVGhhdCdzIGEgbGl0dGxlIHN0cmFuZ2UuIEJ1dCBJIHNlZSB0aGF0IGBubGFfcHV0X3N0YXR1c19pbmZvYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGA/IEhtbSwgdGhhdCdzIG5vdCB3aGF0IEkgZXhwZWN0ZWQuIEJldHRlciBjaGVjayB0aGF0IHNwZWNpZmljIGNhbGwgcGF0aCBtb3JlIGNsb3NlbHkgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gdGhlcmUuIEknbGwgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIGludG8gdGhlIGZ1bmN0aW9uIGNhbGwgZ3JhcGggdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6NDYuNjUxODY3NzMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQ4MTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubGFfcHV0X3N0YXR1c19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zODEzPXN0YXRpYyBzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICp0aGVfb25seV9jb25uZWN0aW9uKHN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzgyMS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4MjI6c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzgyMy1cXHRcXHRjb25zdCBzdHJ1Y3Qgc2liX2luZm8gKnNpYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk2Mj1pbnQgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzk3My1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM5NzQ6XFx0ZXJyID0gbmxhX3B1dF9zdGF0dXNfaW5mbyhhZG1fY3R4LVxcdTAwM2VyZXBseV9za2IsIGFkbV9jdHgtXFx1MDAzZWRldmljZSwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTc1LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk4NT1zdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDA4My1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjQwODQ6XFx0XFx0aWYgKG5sYV9wdXRfc3RhdHVzX2luZm8oc2tiLCBkZXZpY2UsIE5VTEwpKSB7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MDg1LWNhbmNlbDpcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9NDY0Mz12b2lkIGRyYmRfYmNhc3RfZXZlbnQoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIGNvbnN0IHN0cnVjdCBzaWJfaW5mbyAqc2liKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00NjYxLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDY2MjpcXHRpZiAobmxhX3B1dF9zdGF0dXNfaW5mbyhtc2csIGRldmljZSwgc2liKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQ2NjMtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEyOjQ2LjczMDM1NTQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTg0NTU2OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEUkJEIE5ldGxpbmsgSW50ZXJmYWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGBubGFfcHV0X3N0YXR1c19pbmZvYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgLCBgZ2V0X29uZV9zdGF0dXNgLCBhbmQgYGRyYmRfYmNhc3RfZXZlbnRgLiBUaGUgYGdldF9vbmVfc3RhdHVzYCBmdW5jdGlvbiBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRgLiBUaGlzIGdpdmVzIG1lIHRoZSBlbnRyeSBwb2ludHM6IGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAsIGFuZCBgZHJiZF9iY2FzdF9ldmVudGAuIEkgd2lsbCBmb2N1cyBteSBhbmFseXNpcyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuXG5cbkdpdmVuIHRoYXQsIEknbSBnb2luZyB0byBhZGQgYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YCB0byBgRm9jdXNTeW1ib2xzYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYEJMS19ERVZfRFJCRGAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgcmVsZXZhbnQgb25lLlxuXG5BaCwgSSBtaXNzZWQgaXQgaW5pdGlhbGx5IGJ1dCBgZHJiZF9iY2FzdF9ldmVudGAgaXMgYWxzbyBhIHZhbGlkIGVudHJ5IHBvaW50LiBJJ2xsIGluY2x1ZGUgaXQuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBzYW5pdGl6aW5nIHRoZSBgbmV0X2NvbmZgIHN0cnVjdHVyZSwgcGFydGljdWxhcmx5IHRoZSBgc2hhcmVkX3NlY3JldGAsIHdoZW4gaXQncyBiZWluZyBzZW50IG92ZXIgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGUgbW9kaWZpZWQgY29kZSByZXBsYWNlcyBhIGNvbmRpdGlvbmFsIGJsb2NrIHRvIGNhbGwgYSBuZXcgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgIGZ1bmN0aW9uIHdoaWNoIHNhbml0aXplcyB0aGUgZGF0YSBiZWZvcmUgdGhlIGRhdGEgaXMgd3JpdHRlbiBvdXQuIFRoaXMgaGFwcGVucyBpbiBib3RoIGBubGFfcHV0X3N0YXR1c19pbmZvYCBhbmQgYGdldF9vbmVfc3RhdHVzYC5cblxuU28sIHRoZSBwYXRjaCBhZmZlY3RzIGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgbmxhX3B1dF9zdGF0dXNfaW5mb2AsIGFuZCBgZ2V0X29uZV9zdGF0dXNgLCBhbmQgYnkgZXh0ZW5zaW9uIGFueSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBhbnkgb2YgdGhlc2UuIFRoZSBlbnRyeSBwb2ludHMgYXJlOiBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCwgYGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0YCwgYGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRgLCBhbmQgYGRyYmRfYmNhc3RfZXZlbnRgLlxuXG5UaGVyZWZvcmUsIEknbGwgc2V0OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYCAoQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNsZWFyIHNlY3VyaXR5IGZpeC4pXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtaXRpZ2F0ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IGFsdGVycyByZWFjaGFibGUgbmV0bGluayBkdW1waXQgYW5kIGRvaXQgaGFuZGxlcnMgaW4gdGhlIERSQkQgYmxvY2sgZGV2aWNlIGRyaXZlci5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdFwiLCBcImRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0XCIsIFwiZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdFwiLCBcImRyYmRfYmNhc3RfZXZlbnRcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiQkxLX0RFVl9EUkJEXCJdYFxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjEyLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjo1Ny45MTQ5MTUyOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2MjM5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfRFJCRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdFwiLFxuICAgIFwiZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRcIixcbiAgICBcImRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIGJ5IHNhbml0aXppbmcgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIHVucHJpdmlsZWdlZCB1c2Vycy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgZHVtcGl0IGFuZCBkb2l0IGhhbmRsZXJzIGluIHRoZSBEUkJEIGJsb2NrIGRldmljZSBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9EUkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0XCIsXG4gICAgXCJkcmJkX25sX2dldF9zdGF0dXNfZG9pdFwiLFxuICAgIFwiZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluZm9ybWF0aW9uIGxlYWsgaW4gdGhlIERSQkQgbmV0bGluayBpbnRlcmZhY2UgYnkgc2FuaXRpemluZyB0aGUgc2hhcmVkIHNlY3JldCBmb3IgdW5wcml2aWxlZ2VkIHVzZXJzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBkdW1waXQgYW5kIGRvaXQgaGFuZGxlcnMgaW4gdGhlIERSQkQgYmxvY2sgZGV2aWNlIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6NTguMDcyNTUwMTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3NjA1ODA4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjo1OC4wNzM0MDQxNTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjgwNzU5NzIxMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsb2dpYyBidWcgd2hlcmUgc2Vuc2l0aXZlIGluaXRpYWxpemVkIGRhdGEgKHRoZSBEUkJEIHNoYXJlZCBzZWNyZXQpIHdhcyBleHBvc2VkIHRvIHVucHJpdmlsZWdlZCB1c2VycyB2aWEgbmV0bGluay4gVG8gZml4IHRoaXMsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYCwgd2hpY2ggY29waWVzIHRoZSBgbmV0X2NvbmZgIHN0cnVjdCB0byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIChgbmNfY2xlYW5gKSwgemVyb2VzIG91dCB0aGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkLCBhbmQgdGhlbiBzZXJpYWxpemVzIGl0LiBcXG5cXG5XaGlsZSBgbmNfY2xlYW5gIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYG5jX2NsZWFuID0gKm5jYCkuIEZ1cnRoZXJtb3JlLCB0aGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBgbmV0X2NvbmZfdG9fc2tiYCBjb3BpZXMgdGhlIHN0cnVjdCBmaWVsZC1ieS1maWVsZCBpbnRvIG5ldGxpbmsgYXR0cmlidXRlcyAodXNpbmcgYG5sYV9wdXRgLCBgbmxhX3B1dF91MzJgLCBldGMuKSByYXRoZXIgdGhhbiBjb3B5aW5nIHRoZSBzdHJ1Y3QgYXMgYSByYXcgbWVtb3J5IGJsb2NrLiBUaGlzIGVuc3VyZXMgdGhhdCBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCBpdHNlbGYgaXMgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgc2VyaWFsaXphdGlvbi5cXG5cXG5TaW5jZSB0aGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQsIHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3YjFmODVjNmFhMDM4NmI5MjA3MjM0YzQ0YTAzMTQ2YjI3MmJiZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxNjowOToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jXG5pbmRleCBmOWZmY2Q2NzYwN2I1Li5iNzdmOTAxZmMzZWY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuY1xuKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuY1xuQEAgLTMzMDYsNiArMzMwNiwyNiBAQCBzdGF0aWMgaW50IG5sYV9wdXRfZHJiZF9jZmdfY29udGV4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIC1FTVNHU0laRTtcbiB9XG4gXG4rLypcbisgKiBuZXRfY29uZl90b19za2IoKSBzZXJpYWxpemVzIHRoZSBzaGFyZWQgc2VjcmV0IHZlcmJhdGltLiBBbnkgcGF0aCB0aGF0IGNhblxuKyAqIGFuc3dlciBhIHJlcXVlc3QgZnJvbSBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBtdXN0IHBhc3MgZXhjbHVkZV9zZW5zaXRpdmUsXG4rICogc28gdGhlIHNlY3JldCBpcyBibGFua2VkIGluIGEgcHJpdmF0ZSBjb3B5IGJlZm9yZSBpdCByZWFjaGVzIHRoZSBza2IuXG4rICovXG4rc3RhdGljIGludCBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqbmMsXG4rXHRcdFx0XHQgICAgIGJvb2wgZXhjbHVkZV9zZW5zaXRpdmUpXG4re1xuK1x0c3RydWN0IG5ldF9jb25mIG5jX2NsZWFuO1xuK1xuK1x0aWYgKCFleGNsdWRlX3NlbnNpdGl2ZSlcbitcdFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcbitcbitcdG5jX2NsZWFuID0gKm5jO1xuK1x0bWVtc2V0KG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQsIDAsIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7XG4rXHRuY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbiA9IDA7XG4rXG4rXHRyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgXHUwMDI2bmNfY2xlYW4pO1xuK31cbitcbiAvKlxuICAqIFRoZSBnZW5lcmljIG5ldGxpbmsgZHVtcCBjYWxsYmFja3MgYXJlIGNhbGxlZCBvdXRzaWRlIHRoZSBnZW5sX2xvY2soKSwgc29cbiAgKiB0aGV5IGNhbm5vdCB1c2UgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcGFyc2luZyBjb2RlIHdoaWNoIHVzZXMgZ2xvYmFsXG5AQCAtMzYyMSw3ICszNjQxLDggQEAgaW50IGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFja1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRuZXRfY29uZiA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbiBcdFx0aWYgKG5ldF9jb25mKSB7XG4tXHRcdFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmV0X2NvbmYpO1xuK1x0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuZXRfY29uZixcbitcdFx0XHRcdFx0XHRcdCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0zODQyLDE4ICszODYzLDggQEAgc3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuIFx0XHRzdHJ1Y3QgbmV0X2NvbmYgKm5jO1xuIFxuIFx0XHRuYyA9IHJjdV9kZXJlZmVyZW5jZShmaXJzdF9wZWVyX2RldmljZShkZXZpY2UpLVx1MDAzZWNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYpO1xuLVx0XHRpZiAobmMpIHtcbi1cdFx0XHRpZiAoZXhjbHVkZV9zZW5zaXRpdmUpIHtcbi1cdFx0XHRcdHN0cnVjdCBuZXRfY29uZiBuY19jbGVhbiA9ICpuYztcbi1cbi1cdFx0XHRcdG1lbXNldChuY19jbGVhbi5zaGFyZWRfc2VjcmV0LCAwLFxuLVx0XHRcdFx0ICAgICAgIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7XG4tXHRcdFx0XHRuY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbiA9IDA7XG4tXHRcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBcdTAwMjZuY19jbGVhbik7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcbi1cdFx0XHR9XG4tXHRcdH1cbitcdFx0aWYgKG5jKVxuK1x0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgZXhjbHVkZV9zZW5zaXRpdmUpO1xuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuQEAgLTQwNTgsNyArNDA2OSw3IEBAIHN0YXRpYyBpbnQgZ2V0X29uZV9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0c3RydWN0IG5ldF9jb25mICpuYztcbiBcbiBcdFx0XHRcdG5jID0gcmN1X2RlcmVmZXJlbmNlKGNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYpO1xuLVx0XHRcdFx0aWYgKG5jIFx1MDAyNlx1MDAyNiBuZXRfY29uZl90b19za2Ioc2tiLCBuYykgIT0gMClcbitcdFx0XHRcdGlmIChuYyBcdTAwMjZcdTAwMjYgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCB0cnVlKSAhPSAwKVxuIFx0XHRcdFx0XHRnb3RvIGNhbmNlbDtcbiBcdFx0XHR9XG4gXHRcdFx0Z290byBkb25lO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6NTguMDczNDA1Nzc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4OTU0NzE2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUkJEIFBhdGNoIGZvciBTZW5zaXRpdmUgRGF0YSBFeHBvc3VyZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyYmRfbmwuY2Agd2l0aGluIHRoZSBEUkJEIGJsb2NrIGRyaXZlci4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbmV3IGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYCBoZWxwZXIgZnVuY3Rpb24uIEkgc2VlIGl0IHRha2VzIGEgYHN0cnVjdCBuZXRfY29uZiAqbmNgIGFuZCBhIGJvb2xlYW4gZmxhZyBgZXhjbHVkZV9zZW5zaXRpdmVgLiBUaGUgZ29hbCBpcyB0byBzYW5pdGl6ZSB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGJlZm9yZSBzZW5kaW5nIGl0IG91dCwgcHJlc3VtYWJseSBvdmVyIHRoZSBuZXR3b3JrLlxuXG5SaWdodCwgc28gd2hlbiBgZXhjbHVkZV9zZW5zaXRpdmVgIGlzIHRydWUsIGl0ICpjb3BpZXMqIHRoZSBjb250ZW50cyBvZiBgKm5jYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgbmFtZWQgYG5jX2NsZWFuYCwgYW5kIHRoZW4gZXhwbGljaXRseSBjbGVhcnMgdGhlIGBzaGFyZWRfc2VjcmV0YCBhbmQgYHNoYXJlZF9zZWNyZXRfbGVuYCBmaWVsZHMuIEFmdGVyIHRoYXQsIGl0IGNhbGxzIHRoZSBvcmlnaW5hbCBgbmV0X2NvbmZfdG9fc2tiYCBmdW5jdGlvbiwgYnV0IHdpdGggYFx1MDAyNm5jX2NsZWFuYC4gTWFrZXMgc2Vuc2UsIHJlbW92aW5nIHRoZSBzZW5zaXRpdmUgZGF0YS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBgbmNfY2xlYW5gIGlzICpsb2NhbCo/IEl0J3Mgb24gdGhlIHN0YWNrLiBOb3csIGxldCdzIHRoaW5rIGFib3V0IHRoaXMgYG5jX2NsZWFuID0gKm5jO2AgYXNzaWdubWVudC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuXG5cbklmIGBzdHJ1Y3QgbmV0X2NvbmZgIGhhcyBwYWRkaW5nLCB0aGVuIHRoZSBjb3B5IG1pZ2h0IGJlIGEgc3RyYWlnaHQtdXAgbWVtY3B5LCBvciBpdCBtYXkgaW5pdGlhbGl6ZSBmaWVsZHMgaW4gYSBwZXItZmllbGQgbWFubmVyLiBJbiB0aGUgY2FzZSBvZiBhIG1lbWNweSwgdGhlbiB3aGF0ZXZlciB2YWx1ZXMgd2VyZSBpbiB0aGUgcGFkZGluZyBvZiB0aGUgb3JpZ2luYWwgYCpuY2Agd2lsbCBiZSBjb3BpZWQgaW50byBgbmNfY2xlYW5gIC0tIGlmIHRoZSBwYWRkaW5nIGhhZCB1bmluaXRpYWxpemVkIHZhbHVlcywgdGhlbiBgbmNfY2xlYW5gIHdvdWxkIGhhdmUgdGhlIHNhbWUgdW5pbml0aWFsaXplZCB2YWx1ZXMuIElmIGAqbmNgIHdhcyBmdWxseSBpbml0aWFsaXplZCAodW5saWtlbHkpLCB0aGVuIHNvIHdvdWxkIGJlIGBuY19jbGVhbmAuXG5cbkJ1dCB3YWl04oCmIGl0J3Mgb24gdGhlIHN0YWNrLiBJcyB0aGVyZSBhbnkgcGFkZGluZyBpbiB0aGF0IGBzdHJ1Y3QgbmV0X2NvbmZgPyBUaGlzIG5lZWRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgaWYgdGhlIHN0cnVjdHVyZSBpcyBwYWNrZWQgb3IgaGFzIHNvbWUgZGF0YSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJIG5lZWQgdG8gZ28gYW5kIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5ldF9jb25mYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYWJvdXQgdGhpcyBwb3RlbnRpYWwgZm9yIGRhdGEgbGVha2FnZS4gVGhlIHBvdGVudGlhbCBoZXJlIGlzIHRoYXQgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnksIG9yIGRhdGEgZnJvbSB0aGUgb3JpZ2luYWwgYCpuY2AgaXMgY29waWVkIGFuZCBpcyB0aGVyZWZvcmUgbGVha2VkIHZpYSB0aGUgbmV0d29yayBpbnRlcmZhY2UuIFRoYXQgd291bGQgYmUgYmFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTM6MDQuOTY4ODgxNTI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAxNDkxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldF9jb25mIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg9MTMyPXN0cnVjdCByZXNfb3B0cyB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC0xMzctXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg6MTM4OnN0cnVjdCBuZXRfY29uZiB7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtMTM5LVxcdGNoYXIgc2hhcmVkX3NlY3JldFtTSEFSRURfU0VDUkVUX01BWF07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEzOjA1LjA3OTAzNzgyNloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQzNzk4MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc3RydWN0IG5ldF9jb25mYCBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZnVsbCBzY29wZSBvZiBgc3RydWN0IG5ldF9jb25mYC4gSXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSd2ZSByZWFsbHkgZHVnIGludG8gdGhlIHNwZWNpZmljIGZpZWxkcyBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSBrbm93IGl0J3MgYSBjcml0aWNhbCBzdHJ1Y3R1cmUgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYnV0IEkgd2FudCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgYW5kIGFjY3VyYXRlIHBpY3R1cmUgb2YgaXRzIGNhcGFiaWxpdGllcyBhbmQgbGltaXRhdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcuIEkgbmVlZCB0byBzZWUgKmV2ZXJ5dGhpbmcqIOKAkyBldmVyeSBtZW1iZXIsIGV2ZXJ5IGJpdGZpZWxkLCBldmVyeSBjb21tZW50IGlmIGF2YWlsYWJsZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcmVjZW50IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIHRoaXMgc3RydWN0LCBhcyBuZXR3b3JrIHByb3RvY29sIGRlc2lnbiBpcyBkeW5hbWljLlxuXG5JIHdhbnQgdG8ga25vdyB3aGF0IHRoaXMgc3RydWN0IGluY2x1ZGVzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBjb25maWd1cmF0aW9uIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgIEFkZHJlc3MgZmFtaWx5IHN1cHBvcnQgKElQdjQsIElQdjYsIGV0Yy4pXG4qICAgUm91dGluZyBwcm90b2NvbHMgc3VwcG9ydGVkXG4qICAgUW9TIGNvbmZpZ3VyYXRpb25zXG4qICAgU2VjdXJpdHkgb3B0aW9uc1xuKiAgIEFueSBob29rcyBmb3IgY3VzdG9tIG5ldHdvcmsgcG9saWNpZXNcblxuTGV0J3MgZ2V0IHRoZSBmdWxsIGRlZmluaXRpb24sIGFuZCBJJ2xsIHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCBpdCBwaWVjZSBieSBwaWVjZSwgY29uc2lkZXJpbmcgaXRzIGltcGxpY2F0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBteSBjdXJyZW50IHdvcmsuIEknbSBhbnRpY2lwYXRpbmcgdGhlcmUgY291bGQgYmUgc29tZSBhcmVhcyB3aGVyZSBJIG5lZWQgdG8gYXBwbHkgYSBuZXcgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMzowOC43MjI4NDA3NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTk2MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuZXRfY29uZiBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaD0xMzI9c3RydWN0IHJlc19vcHRzIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oLTEzNy1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaDoxMzg6c3RydWN0IG5ldF9jb25mIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC0xMzktXFx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTM6MDguNzg4ODUzMzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NDAwNjIyNDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgZHJiZF9ubF9nZW4uaDogTGluZSAxMzggLSBMZXQncyBEaWcgSW4qKlxuXG5Pa2F5LCBJJ20gcHVsbGluZyB1cCBgZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmhgIG5vdy4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgc29tZSBvZiB0aGUgY3J1Y2lhbCBOZXRsaW5rIG1lc3NhZ2UgZGVmaW5pdGlvbnMgYXJlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmUgMTM4LiBJJ20gZ3Vlc3NpbmcgaXQncyBsaWtlbHkgZGVmaW5pbmcgYSBzdHJ1Y3R1cmUsIGFuIGVudW0sIG9yIHBlcmhhcHMgZXZlbiBhIG1hY3JvIHJlbGF0ZWQgdG8gdGhlIE5ldGxpbmsgaW50ZXJmYWNlIHVzZWQgYnkgRFJCRC4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbWVzc2FnZSBmb3JtYXQgb3IgYSBrZXkgZWxlbWVudCB1c2VkIGluIHRoZSBjb21tdW5pY2F0aW9uLiBDb3VsZCBiZSBhIHZlcnNpb24gbnVtYmVyLCBhbiBhdHRyaWJ1dGUsIG9yIGEgY29tbWFuZCBjb2RlLiBMaW5lIDEzOC4uLiBsZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuIEhvcGVmdWxseSwgaXQncyBzb21ldGhpbmcgbWVhbmluZ2Z1bCBhbmQgbm90IGp1c3QgYSBjb21tZW50IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTExLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTY6MTIuNzk1MDgwNzQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzODpcXHRzdHJ1Y3QgbmV0X2NvbmYge1xcbiAxMzk6XFx0XFx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcXG4gMTQwOlxcdFxcdF9fdTMyIHNoYXJlZF9zZWNyZXRfbGVuO1xcbiAxNDE6XFx0XFx0Y2hhciBjcmFtX2htYWNfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcXG4gMTQyOlxcdFxcdF9fdTMyIGNyYW1faG1hY19hbGdfbGVuO1xcbiAxNDM6XFx0XFx0Y2hhciBpbnRlZ3JpdHlfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcXG4gMTQ0OlxcdFxcdF9fdTMyIGludGVncml0eV9hbGdfbGVuO1xcbiAxNDU6XFx0XFx0Y2hhciB2ZXJpZnlfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcXG4gMTQ2OlxcdFxcdF9fdTMyIHZlcmlmeV9hbGdfbGVuO1xcbiAxNDc6XFx0XFx0Y2hhciBjc3Vtc19hbGdbU0hBUkVEX1NFQ1JFVF9NQVhdO1xcbiAxNDg6XFx0XFx0X191MzIgY3N1bXNfYWxnX2xlbjtcXG4gMTQ5OlxcdFxcdF9fdTMyIHdpcmVfcHJvdG9jb2w7XFxuIDE1MDpcXHRcXHRfX3UzMiBjb25uZWN0X2ludDtcXG4gMTUxOlxcdFxcdF9fdTMyIHRpbWVvdXQ7XFxuIDE1MjpcXHRcXHRfX3UzMiBwaW5nX2ludDtcXG4gMTUzOlxcdFxcdF9fdTMyIHBpbmdfdGltZW87XFxuIDE1NDpcXHRcXHRfX3UzMiBzbmRidWZfc2l6ZTtcXG4gMTU1OlxcdFxcdF9fdTMyIHJjdmJ1Zl9zaXplO1xcbiAxNTY6XFx0XFx0X191MzIga29fY291bnQ7XFxuIDE1NzpcXHRcXHRfX3UzMiBtYXhfYnVmZmVycztcXG4gMTU4OlxcdFxcdF9fdTMyIG1heF9lcG9jaF9zaXplO1xcbiAxNTk6XFx0XFx0X191MzIgdW5wbHVnX3dhdGVybWFyaztcXG4gMTYwOlxcdFxcdF9fdTMyIGFmdGVyX3NiXzBwO1xcbiAxNjE6XFx0XFx0X191MzIgYWZ0ZXJfc2JfMXA7XFxuIDE2MjpcXHRcXHRfX3UzMiBhZnRlcl9zYl8ycDtcXG4gMTYzOlxcdFxcdF9fdTMyIHJyX2NvbmZsaWN0O1xcbiAxNjQ6XFx0XFx0X191MzIgb25fY29uZ2VzdGlvbjtcXG4gMTY1OlxcdFxcdF9fdTMyIGNvbmdfZmlsbDtcXG4gMTY2OlxcdFxcdF9fdTMyIGNvbmdfZXh0ZW50cztcXG4gMTY3OlxcdFxcdHVuc2lnbmVkIGNoYXIgdHdvX3ByaW1hcmllcztcXG4gMTY4OlxcdFxcdHVuc2lnbmVkIGNoYXIgZGlzY2FyZF9teV9kYXRhO1xcbiAxNjk6XFx0XFx0dW5zaWduZWQgY2hhciB0Y3BfY29yaztcXG4gMTcwOlxcdFxcdHVuc2lnbmVkIGNoYXIgYWx3YXlzX2FzYnA7XFxuIDE3MTpcXHRcXHR1bnNpZ25lZCBjaGFyIHRlbnRhdGl2ZTtcXG4gMTcyOlxcdFxcdHVuc2lnbmVkIGNoYXIgdXNlX3JsZTtcXG4gMTczOlxcdFxcdHVuc2lnbmVkIGNoYXIgY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seTtcXG4gMTc0OlxcdFxcdF9fdTMyIHNvY2tfY2hlY2tfdGltZW87XFxuIDE3NTpcXHR9O1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRzdHJ1Y3Qgc2V0X3JvbGVfcGFybXMge1xcbiAxNzg6XFx0XFx0dW5zaWduZWQgY2hhciBhc3N1bWVfdXB0b2RhdGU7XFxuIDE3OTpcXHR9O1xcbiAxODA6XFx0XFxuIDE4MTpcXHRzdHJ1Y3QgcmVzaXplX3Bhcm1zIHtcXG4gMTgyOlxcdFxcdF9fdTY0IHJlc2l6ZV9zaXplO1xcbiAxODM6XFx0XFx0dW5zaWduZWQgY2hhciByZXNpemVfZm9yY2U7XFxuIDE4NDpcXHRcXHR1bnNpZ25lZCBjaGFyIG5vX3Jlc3luYztcXG4gMTg1OlxcdFxcdF9fdTMyIGFsX3N0cmlwZXM7XFxuIDE4NjpcXHRcXHRfX3UzMiBhbF9zdHJpcGVfc2l6ZTtcXG4gMTg3OlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjEyLjc5NTE3MzE5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjEyODk1MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN0cnVjdCBuZXRfY29uZmAgTGF5b3V0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IG5ldF9jb25mYCBkZWZpbml0aW9uLCBhbmQgaXQncyBtYWtpbmcgbWUgdGhpbmsuIEZpcnN0LCBJIHNlZSB0aGlzIGBjaGFyIHNoYXJlZF9zZWNyZXRbU0hBUkVEX1NFQ1JFVF9NQVhdO2AgYW5kIGl0cyBsZW5ndGggZmllbGQsIGBfX3UzMiBzaGFyZWRfc2VjcmV0X2xlbjtgLiBUaGF0J3Mgc3RhbmRhcmQgZW5vdWdoLiBUaGVuLCBpdCdzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGBjcmFtX2htYWNfYWxnYCwgYGludGVncml0eV9hbGdgLCBgdmVyaWZ5X2FsZ2AsIGFuZCBgY3N1bXNfYWxnYCDigJMgZWFjaCB3aXRoIGEgYFtTSEFSRURfU0VDUkVUX01BWF1gIGNoYXJhY3RlciBhcnJheSBhbmQgYSBjb3JyZXNwb25kaW5nIGxlbmd0aCBmaWVsZC4gU2VlbXMgbGlrZSBhIGNvbnNpc3RlbnQgcGF0dGVybiBmb3IgaGFuZGxpbmcgdmFyaW91cyBhbGdvcml0aG0gY29uZmlndXJhdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCB0aGVyZSdzIGEgYmxvY2sgb2YgYF9fdTMyYCBmaWVsZHMsIHdoaWNoIGFyZSBsaWtlbHkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLlxuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIHNlcmllcyBvZiBgdW5zaWduZWQgY2hhcmAgZmxhZ3M6IGB0d29fcHJpbWFyaWVzYCwgYGRpc2NhcmRfbXlfZGF0YWAsIGFuZCBzbyBvbi4gVGhleSBlbmQgd2l0aCBgY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seWAuIEFuZCB0aGVuLCByaWdodCBhZnRlciB0aGF0LCB3ZSBoYXZlIGBfX3UzMiBzb2NrX2NoZWNrX3RpbWVvYC4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBwYWRkaW5nLlxuXG5HaXZlbiB0aGUgc3RydWN0dXJlLCBpZiBgU0hBUkVEX1NFQ1JFVF9NQVhgIGlzIDY0LCB3aGljaCBpcyBsaWtlbHksIHRoZSBhbGlnbm1lbnQgd291bGQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBJZiB0aG9zZSBjaGFycyBhcmUgcGFja2VkLCB0aGVyZSBhcmUgbGlrZWx5IDcgYnl0ZXMgb2YgcGFkZGluZyBiZWZvcmUgdGhlIGBfX3UzMiBzb2NrX2NoZWNrX3RpbWVvYC4gQWN0dWFsbHksIG5vLiA3IGJ5dGVzIG9mIGB1bnNpZ25lZCBjaGFyYCBwYWRkaW5nIGltcGxpZXMgMSBieXRlIG9mIHBhZGRpbmcgYWZ0ZXIgYGNzdW1zX2FmdGVyX2NyYXNoX29ubHlgLiBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoZSBhY3R1YWwgc2l6ZSBvZiBgU0hBUkVEX1NFQ1JFVF9NQVhgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjoxOC40MDgwNzI1ODRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDYwODkzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBTSEFSRURfU0VDUkVUX01BWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjoxOC45Nzg2OTM0MzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3ODYxOTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBEUkJEIEhlYWRlciBGaWxlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgRFJCRCBpbnRlcm5hbHMsIGFuZCB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggc29tZXRoaW5nIGxpa2UgYGluY2x1ZGUvbGludXgvZHJiZC5oYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbWF5YmUgc29tZSBrZXkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIERSQkQgbW9kdWxlIGl0c2VsZi4gSXQncyB0aGUgY2VudHJhbCBwb2ludCB0byBiZWdpbiBteSBhbmFseXNpcy4gRnJvbSB0aGVyZSwgSSBjYW4gYWx3YXlzIG5hdmlnYXRlIHRvIG90aGVyLCBtb3JlIHNwZWNpZmljIGhlYWRlcnMgaWYgbmVlZGVkLCBidXQgYGRyYmQuaGAgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0J2xsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4gVGltZSB0byBnZXQgY29kaW5nLi4uIGVyciwgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTg2MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjIyLjM1NzMxNzMwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNjk3NjQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIFNIQVJFRF9TRUNSRVRfTUFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvZHJiZC5oPTI1OT1lbnVtIGRyYmRfc3RhdGVfcnYge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2RyYmQuaC0yODctXFxuaW5jbHVkZS91YXBpL2xpbnV4L2RyYmQuaDoyODg6I2RlZmluZSBTSEFSRURfU0VDUkVUX01BWCA2NFxcbmluY2x1ZGUvdWFwaS9saW51eC9kcmJkLmgtMjg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjoyNC45NjQzMjM3MjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1OTQyMzI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBGb290cHJpbnQqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIGBTSEFSRURfU0VDUkVUX01BWGAgaXMgZGVmaW5lZCBhcyA2NC4gIFRoYXQgbWVhbnMgZWFjaCBpbnN0YW5jZSBvZiB0aGF0IHNoYXJlZCBzZWNyZXQgY29tcG9uZW50IGlzIGdvaW5nIHRvIHRha2UgdXAgNjQgYnl0ZXMuICBBbmQgd2l0aGluIHRoYXQgc3RydWN0dXJlLCB0aGVyZSdzIGFsc28gdGhlIGxlbmd0aCB3aGljaCBhZGRzIDQgYnl0ZXMuIFRoYXQncyA2OCBieXRlcywgYW5kIEkgc2VlIGl0IHJlcGVhdGVkLi4uIGZpdmUgdGltZXMsIHNvIHdlJ3JlIGF0IDY4IHRpbWVzIDUgd2hpY2ggZXF1YWxzIDM0MCBieXRlcyByaWdodCBvZmYgdGhlIGJhdC4gVGhlbiwgdGhlcmUgYXJlIDE4IGBfX3UzMmAgZmllbGRzIGluIHRoZSBzdHJ1Y3Qgd2hpY2ggSSBrbm93IHdpbGwgdGFrZSB1cCA0IGJ5dGVzIGVhY2gsIGxlYWRpbmcgdG8gNzIgYnl0ZXMuIEFmdGVyIHRoYXQgd2UgaGF2ZSA3IGB1bnNpZ25lZCBjaGFyYCBmaWVsZHMgYXQgNyBieXRlcywgYW5kIHRoZW4gYSBmaW5hbCBgX191MzJgIGZpZWxkIGF0IDQgYnl0ZXMsIHNvIGEgdG90YWwgb2YgMTEgYnl0ZXMuIEhvd2V2ZXIsIGhvbGQgb24uICBUaGUgYWxpZ25tZW50ISAgQmVjYXVzZSB0aG9zZSBgdW5zaWduZWQgY2hhcmAgZmllbGRzIHByZWNlZGUgdGhlIGBfX3UzMmAgZmllbGQsIEkgc3Ryb25nbHkgc3VzcGVjdCB0aGVyZSdzIGdvaW5nIHRvIGJlIHBhZGRpbmcgaW5zZXJ0ZWQgYWZ0ZXIgdGhvc2UgY2hhcnMgdG8gYWxpZ24gdGhlIGBfX3UzMmAuIFdoaWNoIG1lYW5zLCB3ZSBoYXZlIHBhZGRpbmcgb2YgMSBieXRlLiBcblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmV0X2NvbmZfdG9fc2tiYCBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdCBhdCBvbmNlLCBvciBpZiBpdCBkb2VzIGEgZmllbGQtYnktZmllbGQgY29weS4gVGhpcyB3aWxsIGluZmx1ZW5jZSB0aGUgYXBwcm9hY2ggSSB0YWtlLCB0byBlbnN1cmUgbWVtb3J5IGlzIGhhbmRsZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjMwLjAyMzc1MDI3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxNDIyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2NvbmZfdG9fc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zMjc0PXN0YXRpYyBpbnQgbmxhX3B1dF9kcmJkX2NmZ19jb250ZXh0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTMzMDktLypcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjMzMTA6ICogbmV0X2NvbmZfdG9fc2tiKCkgc2VyaWFsaXplcyB0aGUgc2hhcmVkIHNlY3JldCB2ZXJiYXRpbS4gQW55IHBhdGggdGhhdCBjYW5cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTMzMTEtICogYW5zd2VyIGEgcmVxdWVzdCBmcm9tIGFuIHVucHJpdmlsZWdlZCBwcm9jZXNzIG11c3QgcGFzcyBleGNsdWRlX3NlbnNpdGl2ZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxMy0gKi9cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjMzMTQ6c3RhdGljIGludCBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqbmMsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zMzE1LVxcdFxcdFxcdFxcdCAgICAgYm9vbCBleGNsdWRlX3NlbnNpdGl2ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxOS1cXHRpZiAoIWV4Y2x1ZGVfc2Vuc2l0aXZlKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzMyMDpcXHRcXHRyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMyMS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMyNS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjMzMjY6XFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIFxcdTAwMjZuY19jbGVhbik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zMzI3LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MzU1MT1pbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzY0My1cXHRcXHRpZiAobmV0X2NvbmYpIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM2NDQ6XFx0XFx0XFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5ldF9jb25mLFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzY0NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQhY2FwYWJsZShDQVBfU1lTX0FETUlOKSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM4MjI9c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODY2LVxcdFxcdGlmIChuYylcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4Njc6XFx0XFx0XFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCBleGNsdWRlX3NlbnNpdGl2ZSk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODY4LVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk4NT1zdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDA3MS1cXHRcXHRcXHRcXHRuYyA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVxcdTAwM2VuZXRfY29uZik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzo0MDcyOlxcdFxcdFxcdFxcdGlmIChuYyBcXHUwMDI2XFx1MDAyNiBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmMsIHRydWUpICE9IDApXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MDczLVxcdFxcdFxcdFxcdFxcdGdvdG8gY2FuY2VsO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MTk2OT1pbnQgcmVzX29wdHNfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCByZXNfb3B0cyAqcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTE5OTAtXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MTk5MTppbnQgbmV0X2NvbmZfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqcylcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0xOTkyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oPTMyNj1pbnQgbmV0X2NvbmZfbnRiX2Zyb21fYXR0cnMoc3RydWN0IG5sYXR0ciAqKipyZXRfbmVzdGVkX2F0dHJpYnV0ZV90YWJsZSwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg6MzI3OmludCBuZXRfY29uZl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9jb25mICpzKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC0zMjgtdm9pZCBzZXRfbmV0X2NvbmZfZGVmYXVsdHMoc3RydWN0IG5ldF9jb25mICp4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTY6MzAuMDg3ODk5MDAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTMyODg4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEUkJEIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBEUkJEIGhhbmRsZXMgbmV0d29yayBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHRyYW5zbGF0ZXMgbmV0d29yayBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGludG8gc29tZXRoaW5nIGl0IGNhbiBhY3R1YWxseSAqdXNlKiBmb3IgdGhlIG5ldHdvcmsgc3RhY2suIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgbmV0X2NvbmZfdG9fc2tiYCB3aXRoaW4gdGhlIGBkcmJkX25sX2dlbi5jYCBmaWxlLCBsb2NhdGVkIGluIHRoZSBibG9jayBkcml2ZXIgc2VjdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGZyb20gbmV0d29yayBjb25maWd1cmF0aW9uIGlucHV0IHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBidWZmZXIuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGNydWNpYWwgcGllY2UgaW4gdGhlIHB1enpsZSBvZiBob3cgRFJCRCBjb21tdW5pY2F0ZXMgaXRzIHN0YXRlIGFuZCBjb25maWcgcGFyYW1ldGVycyBvdmVyIHRoZSBuZXR3b3JrLiBJdOKAmXMgd2hlcmUgdGhlIGhpZ2gtbGV2ZWwgbmV0d29yayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgYXJlIG1hcnNoYWxlZCBpbnRvIHRoZSBrZXJuZWzigJlzIGRhdGEgc3RydWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHN0ZXAgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbiBtZWNoYW5pY3Mgd2l0aGluIERSQkQncyBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGV5IGFyZSBkb2luZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjMzLjI4MTE4OTc2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk5MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk5MTpcXHRpbnQgbmV0X2NvbmZfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqcylcXG4xOTkyOlxcdHtcXG4xOTkzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRsYSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgRFJCRF9OTEFfTkVUX0NPTkYpO1xcbjE5OTQ6XFx0XFxuMTk5NTpcXHRcXHRpZiAoIXRsYSlcXG4xOTk2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE5OTc6XFx0XFxuMTk5ODpcXHRcXHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9TSEFSRURfU0VDUkVULCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjE5OTk6XFx0XFx0XFx0XFx0cy1cXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gKyAocy1cXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVxcdTAwM2VzaGFyZWRfc2VjcmV0KSlcXG4yMDAwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMDE6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1JBTV9ITUFDX0FMRywgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCxcXG4yMDAyOlxcdFxcdFxcdFxcdHMtXFx1MDAzZWNyYW1faG1hY19hbGdfbGVuICsgKHMtXFx1MDAzZWNyYW1faG1hY19hbGdfbGVuIFxcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cXHUwMDNlY3JhbV9obWFjX2FsZykpXFxuMjAwMzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDA0OlxcdFxcdGlmIChubGFfcHV0KHNrYiwgRFJCRF9BX05FVF9DT05GX0lOVEVHUklUWV9BTEcsIG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsXFxuMjAwNTpcXHRcXHRcXHRcXHRzLVxcdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiArIChzLVxcdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiBcXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXFx1MDAzZWludGVncml0eV9hbGcpKVxcbjIwMDY6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAwNzpcXHRcXHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9WRVJJRllfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjIwMDg6XFx0XFx0XFx0XFx0cy1cXHUwMDNldmVyaWZ5X2FsZ19sZW4gKyAocy1cXHUwMDNldmVyaWZ5X2FsZ19sZW4gXFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVxcdTAwM2V2ZXJpZnlfYWxnKSlcXG4yMDA5OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTA6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjIwMTE6XFx0XFx0XFx0XFx0cy1cXHUwMDNlY3N1bXNfYWxnX2xlbiArIChzLVxcdTAwM2Vjc3Vtc19hbGdfbGVuIFxcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cXHUwMDNlY3N1bXNfYWxnKSlcXG4yMDEyOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTM6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1dJUkVfUFJPVE9DT0wsIHMtXFx1MDAzZXdpcmVfcHJvdG9jb2wpKVxcbjIwMTQ6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAxNTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ09OTkVDVF9JTlQsIHMtXFx1MDAzZWNvbm5lY3RfaW50KSlcXG4yMDE2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1RJTUVPVVQsIHMtXFx1MDAzZXRpbWVvdXQpKVxcbjIwMTg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAxOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUElOR19JTlQsIHMtXFx1MDAzZXBpbmdfaW50KSlcXG4yMDIwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMjE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1BJTkdfVElNRU8sIHMtXFx1MDAzZXBpbmdfdGltZW8pKVxcbjIwMjI6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAyMzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfU05EQlVGX1NJWkUsIHMtXFx1MDAzZXNuZGJ1Zl9zaXplKSlcXG4yMDI0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMjU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JDVkJVRl9TSVpFLCBzLVxcdTAwM2VyY3ZidWZfc2l6ZSkpXFxuMjAyNjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDI3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9LT19DT1VOVCwgcy1cXHUwMDNla29fY291bnQpKVxcbjIwMjg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAyOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfTUFYX0JVRkZFUlMsIHMtXFx1MDAzZW1heF9idWZmZXJzKSlcXG4yMDMwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMzE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX01BWF9FUE9DSF9TSVpFLCBzLVxcdTAwM2VtYXhfZXBvY2hfc2l6ZSkpXFxuMjAzMjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDMzOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9VTlBMVUdfV0FURVJNQVJLLCBzLVxcdTAwM2V1bnBsdWdfd2F0ZXJtYXJrKSlcXG4yMDM0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMzU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0FGVEVSX1NCXzBQLCBzLVxcdTAwM2VhZnRlcl9zYl8wcCkpXFxuMjAzNjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDM3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9BRlRFUl9TQl8xUCwgcy1cXHUwMDNlYWZ0ZXJfc2JfMXApKVxcbjIwMzg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAzOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUZURVJfU0JfMlAsIHMtXFx1MDAzZWFmdGVyX3NiXzJwKSlcXG4yMDQwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjozMy4yODEzMTczNDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY3MDUxNzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgQ29weWluZyBpbiBgbmV0X2NvbmZfdG9fc2tiYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGBuZXRfY29uZl90b19za2JgIGhhbmRsZXMgZGF0YSBjb3B5aW5nLiBJdCBsb29rcyBsaWtlIGl0IGRvZXNuJ3QgZG8gYSBzaW1wbGUgYG1lbWNweWAgb2YgdGhlIGVudGlyZSBzdHJ1Y3QuIFNtYXJ0LCBiZWNhdXNlIHRoYXQgd291bGQgYmUgaW5lZmZpY2llbnQuIEluc3RlYWQsIGl0J3MgdXNpbmcgYG5sYV9wdXRgIGFuZCBgbmxhX3B1dF91MzJgIHRvIGNvcHkgZmllbGRzIGluZGl2aWR1YWxseS4gVGhhdCBtYWtlcyBzZW5zZSwgeW91IG9ubHkgc2VuZCB3aGF0IHlvdSBuZWVkLlxuXG5BaGEhIGBubGFfcHV0X3UzMmAgaXMgZXhwbGljaXRseSBjb3B5aW5nIGp1c3QgNCBieXRlcywgc28gaXQncyBoYW5kbGluZyB0aGUgMzIgYml0IGludHMuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpczogdGhlIGBubGFfcHV0YCBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCBjb3BpZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSBgcy1cdTAwM2VzaGFyZWRfc2VjcmV0YCB1c2luZyBgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCwgcy1cdTAwM2VzaGFyZWRfc2VjcmV0X2xlbiArIChzLVx1MDAzZXNoYXJlZF9zZWNyZXRfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpYC4gTGV0IG1lIHBhcnNlIHRoYXQuIE9rLCBpdCdzIGNvcHlpbmcgZWl0aGVyIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBzaGFyZWQgc2VjcmV0LCBvciBgU0hBUkVEX1NFQ1JFVF9NQVhgICh3aGljaGV2ZXIgaXMgc21hbGxlcikgcGx1cyB0aGUgbnVsbCB0ZXJtaW5hdG9yIChpZiBpdCBmaXRzKS4gQmFzaWNhbGx5LCBpdCdzIG9ubHkgY29weWluZyB0aGUgKnN0cmluZyogb2YgdGhlIHNoYXJlZCBzZWNyZXQsIG5vdCB0aGUgd2hvbGUgcG90ZW50aWFsbHkgcGFkZGVkIHNwYWNlIGFsbG9jYXRlZCBmb3IgaXQgd2l0aGluIHRoZSBzdHJ1Y3QhXG5cblRoaXMgaXMgYSBrZXkgb3B0aW1pemF0aW9uLiBJdCBhdm9pZHMgdW5uZWNlc3NhcnkgZGF0YSB0cmFuc2ZlciBhbmQga2VlcHMgdGhpbmdzIGxlYW4uIEJ1dCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ3ZlIGdvdCB0byBjb25zaWRlciBhbGwgdGhlIG90aGVyIGZpZWxkcyBpbiB0aGUgc3RydWN0LiBJIG5lZWQgdG8ga2VlcCByZWFkaW5nIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCdzIGRlYWxpbmcgd2l0aCBldmVyeXRoaW5nIGVsc2UuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgb3RoZXIgZ290Y2hhcyBvciBvcHRpbWl6YXRpb25zIEkndmUgbWlzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTczLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTY6NDIuOTUxODM4MzU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDQxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDQxOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9SUl9DT05GTElDVCwgcy1cXHUwMDNlcnJfY29uZmxpY3QpKVxcbjIwNDI6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA0MzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfT05fQ09OR0VTVElPTiwgcy1cXHUwMDNlb25fY29uZ2VzdGlvbikpXFxuMjA0NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDQ1OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9DT05HX0ZJTEwsIHMtXFx1MDAzZWNvbmdfZmlsbCkpXFxuMjA0NjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDQ3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9DT05HX0VYVEVOVFMsIHMtXFx1MDAzZWNvbmdfZXh0ZW50cykpXFxuMjA0ODpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDQ5OlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RXT19QUklNQVJJRVMsIHMtXFx1MDAzZXR3b19wcmltYXJpZXMpKVxcbjIwNTA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA1MTpcXHRcXHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9ESVNDQVJEX01ZX0RBVEEsIHMtXFx1MDAzZWRpc2NhcmRfbXlfZGF0YSkpXFxuMjA1MjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDUzOlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RDUF9DT1JLLCBzLVxcdTAwM2V0Y3BfY29yaykpXFxuMjA1NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDU1OlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0FMV0FZU19BU0JQLCBzLVxcdTAwM2VhbHdheXNfYXNicCkpXFxuMjA1NjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDU3OlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RFTlRBVElWRSwgcy1cXHUwMDNldGVudGF0aXZlKSlcXG4yMDU4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNTk6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVVNFX1JMRSwgcy1cXHUwMDNldXNlX3JsZSkpXFxuMjA2MDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDYxOlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0NTVU1TX0FGVEVSX0NSQVNIX09OTFksIHMtXFx1MDAzZWNzdW1zX2FmdGVyX2NyYXNoX29ubHkpKVxcbjIwNjI6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA2MzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfU09DS19DSEVDS19USU1FTywgcy1cXHUwMDNlc29ja19jaGVja190aW1lbykpXFxuMjA2NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDY1OlxcdFxcbjIwNjY6XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgdGxhKTtcXG4yMDY3OlxcdFxcdHJldHVybiAwO1xcbjIwNjg6XFx0XFxuMjA2OTpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuMjA3MDpcXHRcXHRpZiAodGxhKVxcbjIwNzE6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdGxhKTtcXG4yMDcyOlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjA3MzpcXHR9XFxuMjA3NDpcXHRcXG4yMDc1OlxcdGludCBzZXRfcm9sZV9wYXJtc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNldF9yb2xlX3Bhcm1zICpzKVxcbjIwNzY6XFx0e1xcbjIwNzc6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGxhID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBEUkJEX05MQV9TRVRfUk9MRV9QQVJNUyk7XFxuMjA3ODpcXHRcXG4yMDc5OlxcdFxcdGlmICghdGxhKVxcbjIwODA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA4MTpcXHRcXG4yMDgyOlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX1NFVF9ST0xFX1BBUk1TX0FTU1VNRV9VUFRPREFURSwgcy1cXHUwMDNlYXNzdW1lX3VwdG9kYXRlKSlcXG4yMDgzOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwODQ6XFx0XFxuMjA4NTpcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCB0bGEpO1xcbjIwODY6XFx0XFx0cmV0dXJuIDA7XFxuMjA4NzpcXHRcXG4yMDg4OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4yMDg5OlxcdFxcdGlmICh0bGEpXFxuMjA5MDpcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCB0bGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjo0Mi45NTIwNTY2NjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMwNzA5ODkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBTYW5pdGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBuZXRfY29uZl90b19za2JgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGRvaW5nIGEgZmllbGQtYnktZmllbGQgY29weS4gTm90aGluZyB0b28gc3VycHJpc2luZyB0aGVyZS4gQnV0IHdhaXQsIHRoZW4gYG5sYV9wdXRgIGlzIGludm9sdmVkLCBhbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBjb3B5aW5nIGBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLCBzLVx1MDAzZXNoYXJlZF9zZWNyZXRfbGVuICsgKHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSlgIGJ5dGVzIGZyb20gYHMtXHUwMDNlc2hhcmVkX3NlY3JldGAuIFJpZ2h0LCBjbGFzc2ljIGBubGFfcHV0YCB1c2FnZS5cblxuTm93LCBpZiBgZXhjbHVkZV9zZW5zaXRpdmVgIGlzIHRydWUsIHRoZSBjb2RlIHplcm9lcyBvdXQgYG5jX2NsZWFuLnNoYXJlZF9zZWNyZXRgIGFuZCBzZXRzIGBuY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbmAgdG8gMC4gU28sIHdoZW4gYG5sYV9wdXRgIHJ1bnMgd2l0aCB0aGlzIHNhbml0aXplZCBgbmNfY2xlYW5gLCBpdCB3aWxsIGNvcHkgYG1pbl90KGludCwgNjQsIDAgKyAoMCBcdTAwM2MgNjQpKWAsIHdoaWNoIHNpbXBsaWZpZXMgdG8ganVzdCAxIGJ5dGUuIFRoYXQgbWVhbnMgaXQncyBjb3B5aW5nIGEgc2luZ2xlIGJ5dGUgZnJvbSBgbmNfY2xlYW4uc2hhcmVkX3NlY3JldGAuIEFuZCBzaW5jZSB0aGF0J3MgYmVlbiB6ZXJvZWQsIGl0J3MgY29weWluZyBhIDAgYnl0ZS4gTWFrZXMgc2Vuc2UuXG5cbkJ1dCBob2xkIG9uLCB3aGF0IGFib3V0IGFsbCB0aGUgb3RoZXIgZmllbGRzPyBUaGUgY29kZSBkb2VzIGEgYG5jX2NsZWFuID0gKm5jO2Agd2hpY2ggY29waWVzIGV2ZXJ5dGhpbmcgZnJvbSBgbmNgIHRvIGBuY19jbGVhbmAuIE5vdyBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hldGhlciB0aGVyZSBjb3VsZCBiZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBgbmNgIGFmdGVyIGl0J3MgYWxsb2NhdGVkLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYG5jYCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB0byBiZSBzdXJlLiBUaGF0J3MgdGhlIG5leHQgc3RlcDsgSSBuZWVkIHRvIGZvbGxvdyB0aGUgYWxsb2NhdGlvbiBvZiBgbmV0X2NvbmZgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjo1MC4yNTkxNTgzNzlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjk4NzA4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzaXplb2YuKm5ldF9jb25mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjUwLjMyMDQ2NTYxN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODM1MjI5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqU2VhcmNoaW5nIGZvciBOZXR3b3JrIENvbmZpZ3VyYXRpb24gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb2RlIHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBtZW1vcnkgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiBkYXRhLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cnkgYW5kIHBpbnBvaW50IGl0IGRpcmVjdGx5IHVzaW5nIGEgY291cGxlIG9mIGRpZmZlcmVudCBhcHByb2FjaGVzLiBJJ2xsIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBzZWFyY2guIEknbSBnb2luZyB0byBsb29rIGZvciBpbnN0YW5jZXMgd2hlcmUgYGttYWxsb2NgIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgc2l6ZW9mYCBvcGVyYXRvciBjYWxjdWxhdGlvbnMgdGhhdCBpbnZvbHZlIGBuZXRfY29uZmAuIFRoYXQgc2hvdWxkIGRpcmVjdGx5IGlkZW50aWZ5IGFsbG9jYXRpb25zIHdpdGggdGhlIGtlcm5lbCBtZW1vcnkgYWxsb2NhdG9yLiBJJ2xsIGJyb2FkZW4gdGhlIHNjb3BlIHNsaWdodGx5IGlmIHRoYXQncyB0b28gcmVzdHJpY3RpdmUuIElmIEknbSBub3Qgc3VjY2Vzc2Z1bCB3aXRoIHRoZSBga21hbGxvY2Agc2VhcmNoLCB0aGVuIEknbGwgbG9vayBmb3IgZ2VuZXJhbCBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBzdWNoIGFzIGBhbGxvY2AsIGxpa2VseSBjb3VwbGVkIHdpdGggYG5ldF9jb25mYCBhcyB0aGUgZGF0YSBiZWluZyBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBzb2xpZCwgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gZmluZGluZyB3aGF0IEknbSBsb29raW5nIGZvci4gTGV0J3Mgc2VlIHdoYXQgdHVybnMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTY6NTcuMTU1Njk4MzIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQyODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvYy4qbmV0X2NvbmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTIzOTU9c3RhdGljIGVudW0gZHJiZF9yZXRfY29kZVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MjM5NjphbGxvY19jcnlwdG8oc3RydWN0IGNyeXB0byAqY3J5cHRvLCBzdHJ1Y3QgbmV0X2NvbmYgKm5ld19uZXRfY29uZilcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTIzOTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDAwLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MjQwMTpcXHRydiA9IGFsbG9jX3NoYXNoKFxcdTAwMjZjcnlwdG8tXFx1MDAzZWNzdW1zX3RmbSwgbmV3X25ldF9jb25mLVxcdTAwM2Vjc3Vtc19hbGcsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDAyLVxcdFxcdFxcdCBFUlJfQ1NVTVNfQUxHKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQwNC1cXHRcXHRyZXR1cm4gcnY7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNDA1OlxcdHJ2ID0gYWxsb2Nfc2hhc2goXFx1MDAyNmNyeXB0by1cXHUwMDNldmVyaWZ5X3RmbSwgbmV3X25ldF9jb25mLVxcdTAwM2V2ZXJpZnlfYWxnLFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQwNi1cXHRcXHRcXHQgRVJSX1ZFUklGWV9BTEcpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDA4LVxcdFxcdHJldHVybiBydjtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI0MDk6XFx0cnYgPSBhbGxvY19zaGFzaChcXHUwMDI2Y3J5cHRvLVxcdTAwM2VpbnRlZ3JpdHlfdGZtLCBuZXdfbmV0X2NvbmYtXFx1MDAzZWludGVncml0eV9hbGcsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDEwLVxcdFxcdFxcdCBFUlJfSU5URUdSSVRZX0FMRyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTI0MzI9aW50IGRyYmRfbmxfY2hnX25ldF9vcHRzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQ1Mi1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI0NTM6XFx0bmV3X25ldF9jb25mID0ga3phbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0NTQtXFx0aWYgKCFuZXdfbmV0X2NvbmYpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjUxMi1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI1MTM6XFx0cmV0Y29kZSA9IGFsbG9jX2NyeXB0byhcXHUwMDI2Y3J5cHRvLCBuZXdfbmV0X2NvbmYpO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjUxNC1cXHRpZiAocmV0Y29kZSAhPSBOT19FUlJPUilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MjU4Nz1pbnQgZHJiZF9ubF9jb25uZWN0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjY0NC1cXHQvKiBhbGxvY2F0aW9uIG5vdCBpbiB0aGUgSU8gcGF0aCwgZHJiZHNldHVwIC8gbmV0bGluayBwcm9jZXNzIGNvbnRleHQgKi9cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI2NDU6XFx0bmV3X25ldF9jb25mID0ga3phbGxvY19vYmooKm5ld19uZXRfY29uZik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNjQ2LVxcdGlmICghbmV3X25ldF9jb25mKSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI2NjMtXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNjY0OlxcdHJldGNvZGUgPSBhbGxvY19jcnlwdG8oXFx1MDAyNmNyeXB0bywgbmV3X25ldF9jb25mKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI2NjUtXFx0aWYgKHJldGNvZGUgIT0gTk9fRVJST1IpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jPTM0NDU9c3RhdGljIGludCByZWNlaXZlX3Byb3RvY29sKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHN0cnVjdCBwYWNrZXRfaW5mbyAqcGkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jLTM1NDktXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYzozNTUwOlxcdG5ld19uZXRfY29uZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZXRfY29uZik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy0zNTUxLVxcdGlmICghbmV3X25ldF9jb25mKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYz0zNjU0PXN0YXRpYyBpbnQgcmVjZWl2ZV9TeW5jUGFyYW0oc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbiwgc3RydWN0IHBhY2tldF9pbmZvICpwaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMtMzc5Ni1cXHRcXHRpZiAodmVyaWZ5X3RmbSB8fCBjc3Vtc190Zm0pIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jOjM3OTc6XFx0XFx0XFx0bmV3X25ldF9jb25mID0ga3phbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jLTM3OTgtXFx0XFx0XFx0aWYgKCFuZXdfbmV0X2NvbmYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjU3LjIxNzEzNzY0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjQyNDEyNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gaW4gYHJlY2VpdmVfcHJvdG9jb2xgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcmVjZWl2ZV9wcm90b2NvbGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIERSQkQgcmVjZWl2ZXIgY29kZSwgYW5kIEkgc2VlIHNvbWV0aGluZyB0aGF0J3MgbWFraW5nIG1lIHBhdXNlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHVzaW5nIGBrbWFsbG9jX29iaihzdHJ1Y3QgbmV0X2NvbmYpYCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGBuZXdfbmV0X2NvbmZgLiBUaGF0J3MgYSBrZXkgZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgaW4gdGhpcyBjb250ZXh0LiBMZXQncyBkZWx2ZSBpbnRvIGBkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcmVjZWl2ZV9wcm90b2NvbGAgZnVuY3Rpb24gdG8gc2VlIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYG5ldF9jb25mYCBzdHJ1Y3R1cmUgaXMgdXNlZCBhbmQgd2hhdCB0aGlzIG1lYW5zIGZvciB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNzowNy44NTk1NTU3MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTQwOlxcdFxcbjM1NDE6XFx0XFx0XFx0aGFzaF9zaXplID0gY3J5cHRvX3NoYXNoX2RpZ2VzdHNpemUocGVlcl9pbnRlZ3JpdHlfdGZtKTtcXG4zNTQyOlxcdFxcdFxcdGludF9kaWdfaW4gPSBrbWFsbG9jKGhhc2hfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMzU0MzpcXHRcXHRcXHRpbnRfZGlnX3Z2ID0ga21hbGxvYyhoYXNoX3NpemUsIEdGUF9LRVJORUwpO1xcbjM1NDQ6XFx0XFx0XFx0aWYgKCEoaW50X2RpZ19pbiBcXHUwMDI2XFx1MDAyNiBpbnRfZGlnX3Z2KSkge1xcbjM1NDU6XFx0XFx0XFx0XFx0ZHJiZF9lcnIoY29ubmVjdGlvbiwgXFxcIkFsbG9jYXRpb24gb2YgYnVmZmVycyBmb3IgZGF0YSBpbnRlZ3JpdHkgY2hlY2tpbmcgZmFpbGVkXFxcXG5cXFwiKTtcXG4zNTQ2OlxcdFxcdFxcdFxcdGdvdG8gZGlzY29ubmVjdDtcXG4zNTQ3OlxcdFxcdFxcdH1cXG4zNTQ4OlxcdFxcdH1cXG4zNTQ5OlxcdFxcbjM1NTA6XFx0XFx0bmV3X25ldF9jb25mID0ga21hbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcXG4zNTUxOlxcdFxcdGlmICghbmV3X25ldF9jb25mKVxcbjM1NTI6XFx0XFx0XFx0Z290byBkaXNjb25uZWN0O1xcbjM1NTM6XFx0XFxuMzU1NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjb25uZWN0aW9uLVxcdTAwM2VkYXRhLm11dGV4KTtcXG4zNTU1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvbm5lY3Rpb24tXFx1MDAzZXJlc291cmNlLVxcdTAwM2Vjb25mX3VwZGF0ZSk7XFxuMzU1NjpcXHRcXHRvbGRfbmV0X2NvbmYgPSBjb25uZWN0aW9uLVxcdTAwM2VuZXRfY29uZjtcXG4zNTU3OlxcdFxcdCpuZXdfbmV0X2NvbmYgPSAqb2xkX25ldF9jb25mO1xcbjM1NTg6XFx0XFxuMzU1OTpcXHRcXHRuZXdfbmV0X2NvbmYtXFx1MDAzZXdpcmVfcHJvdG9jb2wgPSBwX3Byb3RvO1xcbjM1NjA6XFx0XFx0bmV3X25ldF9jb25mLVxcdTAwM2VhZnRlcl9zYl8wcCA9IGNvbnZlcnRfYWZ0ZXJfc2IocF9hZnRlcl9zYl8wcCk7XFxuMzU2MTpcXHRcXHRuZXdfbmV0X2NvbmYtXFx1MDAzZWFmdGVyX3NiXzFwID0gY29udmVydF9hZnRlcl9zYihwX2FmdGVyX3NiXzFwKTtcXG4zNTYyOlxcdFxcdG5ld19uZXRfY29uZi1cXHUwMDNlYWZ0ZXJfc2JfMnAgPSBjb252ZXJ0X2FmdGVyX3NiKHBfYWZ0ZXJfc2JfMnApO1xcbjM1NjM6XFx0XFx0bmV3X25ldF9jb25mLVxcdTAwM2V0d29fcHJpbWFyaWVzID0gcF90d29fcHJpbWFyaWVzO1xcbjM1NjQ6XFx0XFxuMzU2NTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29ubmVjdGlvbi1cXHUwMDNlbmV0X2NvbmYsIG5ld19uZXRfY29uZik7XFxuMzU2NjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbm5lY3Rpb24tXFx1MDAzZXJlc291cmNlLVxcdTAwM2Vjb25mX3VwZGF0ZSk7XFxuMzU2NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbm5lY3Rpb24tXFx1MDAzZWRhdGEubXV0ZXgpO1xcbjM1Njg6XFx0XFxuMzU2OTpcXHRcXHRjcnlwdG9fZnJlZV9zaGFzaChjb25uZWN0aW9uLVxcdTAwM2VwZWVyX2ludGVncml0eV90Zm0pO1xcbjM1NzA6XFx0XFx0a2ZyZWUoY29ubmVjdGlvbi1cXHUwMDNlaW50X2RpZ19pbik7XFxuMzU3MTpcXHRcXHRrZnJlZShjb25uZWN0aW9uLVxcdTAwM2VpbnRfZGlnX3Z2KTtcXG4zNTcyOlxcdFxcdGNvbm5lY3Rpb24tXFx1MDAzZXBlZXJfaW50ZWdyaXR5X3RmbSA9IHBlZXJfaW50ZWdyaXR5X3RmbTtcXG4zNTczOlxcdFxcdGNvbm5lY3Rpb24tXFx1MDAzZWludF9kaWdfaW4gPSBpbnRfZGlnX2luO1xcbjM1NzQ6XFx0XFx0Y29ubmVjdGlvbi1cXHUwMDNlaW50X2RpZ192diA9IGludF9kaWdfdnY7XFxuMzU3NTpcXHRcXG4zNTc2OlxcdFxcdGlmIChzdHJjbXAob2xkX25ldF9jb25mLVxcdTAwM2VpbnRlZ3JpdHlfYWxnLCBpbnRlZ3JpdHlfYWxnKSlcXG4zNTc3OlxcdFxcdFxcdGRyYmRfaW5mbyhjb25uZWN0aW9uLCBcXFwicGVlciBkYXRhLWludGVncml0eS1hbGc6ICVzXFxcXG5cXFwiLFxcbjM1Nzg6XFx0XFx0XFx0XFx0ICBpbnRlZ3JpdHlfYWxnWzBdID8gaW50ZWdyaXR5X2FsZyA6IFxcXCIobm9uZSlcXFwiKTtcXG4zNTc5OlxcdFxcbjM1ODA6XFx0XFx0a3ZmcmVlX3JjdV9taWdodHNsZWVwKG9sZF9uZXRfY29uZik7XFxuMzU4MTpcXHRcXHRyZXR1cm4gMDtcXG4zNTgyOlxcdFxcbjM1ODM6XFx0ZGlzY29ubmVjdF9yY3VfdW5sb2NrOlxcbjM1ODQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzU4NTpcXHRkaXNjb25uZWN0OlxcbjM1ODY6XFx0XFx0Y3J5cHRvX2ZyZWVfc2hhc2gocGVlcl9pbnRlZ3JpdHlfdGZtKTtcXG4zNTg3OlxcdFxcdGtmcmVlKGludF9kaWdfaW4pO1xcbjM1ODg6XFx0XFx0a2ZyZWUoaW50X2RpZ192dik7XFxuMzU4OTpcXHRcXHRjb25uX3JlcXVlc3Rfc3RhdGUoY29ubmVjdGlvbiwgTlMoY29ubiwgQ19ESVNDT05ORUNUSU5HKSwgQ1NfSEFSRCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE3OjA3Ljg1OTkzMzY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMDU1MTkzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGFkZGluZyBDb25jZXJucyBpbiBgbmV0X2NvbmZgIFN0cnVjdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHJlY2VpdmVfcHJvdG9jb2xgIGZ1bmN0aW9uLCBhbmQgaXQncyBncmFiYmluZyBhIG5ldyBgbmV0X2NvbmZgIHN0cnVjdCB1c2luZyBga21hbGxvY19vYmpgLiBTZWVtcyBzdGFuZGFyZCBlbm91Z2guIEJ1dCB0aGVuLCBpdCBpbW1lZGlhdGVseSBjb3BpZXMgdGhlICplbnRpcmUqIGNvbnRlbnRzIG9mIGBvbGRfbmV0X2NvbmZgIGludG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBvbmUgd2l0aCBgKm5ld19uZXRfY29uZiA9ICpvbGRfbmV0X2NvbmY7YC4gTm93LCB3aGVyZSBpcyBgb2xkX25ldF9jb25mYCBldmVuIGNvbWluZyBmcm9tPyBSaWdodCwgaXQncyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIGluIGBkcmJkX25sX2Nvbm5lY3RfZG9pdGAgYW5kIGBkcmJkX25sX2NoZ19uZXRfb3B0c19kb2l0YC4gVGhhdCBtZWFucyB0aGUgb3JpZ2luYWwgYG5ldF9jb25mYCBpcyB6ZXJvLWluaXRpYWxpemVkLlxuXG5TbywgdGhpcyBpbml0aWFsIGNvcHkgemVyb3Mgb3V0IHRoZSBwYWRkaW5nLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBwb3RlbnRpYWwgaXNzdWVzLiBCdXQgaXQgZ290IG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgd2hlbiBgbmNfY2xlYW4gPSAqbmM7YCBpcyB1c2VkPyBUaGF0IGxvb2tzIGxpa2UgaXQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3QgZnJvbSBgKm5jYCB3aGljaCBzaG91bGQgaW5jbHVkZSB0aGUgcGFkZGluZy4gSWYgYCpuY2AgaGFzIHplcm9lZCBwYWRkaW5nICh3aGljaCBpdCBzaG91bGQsIGZyb20gdGhlIHByZXZpb3VzIGFsbG9jYXRpb24pLCB0aGVuIGBuY19jbGVhbmAgc2hvdWxkICphbHNvKiBoYXZlIHplcm9lZCBwYWRkaW5nLiBUaGlzIGlzIGEgbG9jYWwgdmFyaWFibGUgb24gdGhlIHN0YWNrLCBub3QgdW5pbml0aWFsaXplZC5cblxuVGhlIG5hZ2dpbmcgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgY2FzZXMgd2hlcmUgYG5jX2NsZWFuYCAqd291bGQqIGVuZCB1cCB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZz8gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIHRyaWNreS4gSWYgYCpuY2AgaXMgYXNzaWduZWQgZmllbGQtYnktZmllbGQsIHRoZW4gdGhlIHBhZGRpbmcgbWlnaHQgbm90IGdldCBjb3BpZWQuIFN0cnVjdCBhc3NpZ25tZW50cyBpbiBDLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyJ3Mgb3B0aW1pemF0aW9uLCBjb3VsZCBwb3RlbnRpYWxseSBkbyB0aGlzIGZpZWxkLWJ5LWZpZWxkIGNvcHksIHNraXBwaW5nIG92ZXIgdGhlIHBhZGRpbmcuIElmIHRoYXQgaGFwcGVucywgdGhlbiBgbmNfY2xlYW5gJ3MgcGFkZGluZyBpcyBsZWZ0IGFzIHdoYXRldmVyIGdhcmJhZ2Ugd2FzIG9uIHRoZSBzdGFjay5cblxuVGhlbiwgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYG5ldF9jb25mX3RvX3NrYmAgaXMgY2FsbGVkIHdpdGggYFx1MDAyNm5jX2NsZWFuYC4gTm93LCBteSB1bmRlcnN0YW5kaW5nIGlzIGBuZXRfY29uZl90b19za2JgIGNvcGllcyBmaWVsZCBieSBmaWVsZCwgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfdThgLCBhbmQgYG5sYV9wdXRgIGZvciBzdHJpbmdzLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgaXQgKmRvZXNuJ3QqIGNvcHkgdGhlIHBhZGRpbmcgaXRzZWxmIGludG8gdGhlIFNLQiwgd2hpY2ggaXMgY3J1Y2lhbC4gU28sIGl0IGxvb2tzIGxpa2UgYG5ldF9jb25mX3RvX3NrYmAgd29uJ3QgbGVhayB0aGUgdW5pbml0aWFsaXplZCBwYWRkaW5nIGluIHRoZSAqdXN1YWwqIGNhc2UuIEJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIGBuZXRfY29uZl90b19za2JgIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ5OSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE3OjE1Ljg2NTQ1NzEzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTkxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk5MTpcXHRpbnQgbmV0X2NvbmZfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqcylcXG4xOTkyOlxcdHtcXG4xOTkzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRsYSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgRFJCRF9OTEFfTkVUX0NPTkYpO1xcbjE5OTQ6XFx0XFxuMTk5NTpcXHRcXHRpZiAoIXRsYSlcXG4xOTk2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE5OTc6XFx0XFxuMTk5ODpcXHRcXHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9TSEFSRURfU0VDUkVULCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjE5OTk6XFx0XFx0XFx0XFx0cy1cXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gKyAocy1cXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVxcdTAwM2VzaGFyZWRfc2VjcmV0KSlcXG4yMDAwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMDE6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1JBTV9ITUFDX0FMRywgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCxcXG4yMDAyOlxcdFxcdFxcdFxcdHMtXFx1MDAzZWNyYW1faG1hY19hbGdfbGVuICsgKHMtXFx1MDAzZWNyYW1faG1hY19hbGdfbGVuIFxcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cXHUwMDNlY3JhbV9obWFjX2FsZykpXFxuMjAwMzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDA0OlxcdFxcdGlmIChubGFfcHV0KHNrYiwgRFJCRF9BX05FVF9DT05GX0lOVEVHUklUWV9BTEcsIG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsXFxuMjAwNTpcXHRcXHRcXHRcXHRzLVxcdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiArIChzLVxcdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiBcXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXFx1MDAzZWludGVncml0eV9hbGcpKVxcbjIwMDY6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAwNzpcXHRcXHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9WRVJJRllfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjIwMDg6XFx0XFx0XFx0XFx0cy1cXHUwMDNldmVyaWZ5X2FsZ19sZW4gKyAocy1cXHUwMDNldmVyaWZ5X2FsZ19sZW4gXFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVxcdTAwM2V2ZXJpZnlfYWxnKSlcXG4yMDA5OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTA6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjIwMTE6XFx0XFx0XFx0XFx0cy1cXHUwMDNlY3N1bXNfYWxnX2xlbiArIChzLVxcdTAwM2Vjc3Vtc19hbGdfbGVuIFxcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cXHUwMDNlY3N1bXNfYWxnKSlcXG4yMDEyOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTM6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1dJUkVfUFJPVE9DT0wsIHMtXFx1MDAzZXdpcmVfcHJvdG9jb2wpKVxcbjIwMTQ6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAxNTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ09OTkVDVF9JTlQsIHMtXFx1MDAzZWNvbm5lY3RfaW50KSlcXG4yMDE2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1RJTUVPVVQsIHMtXFx1MDAzZXRpbWVvdXQpKVxcbjIwMTg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAxOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUElOR19JTlQsIHMtXFx1MDAzZXBpbmdfaW50KSlcXG4yMDIwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMjE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1BJTkdfVElNRU8sIHMtXFx1MDAzZXBpbmdfdGltZW8pKVxcbjIwMjI6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAyMzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfU05EQlVGX1NJWkUsIHMtXFx1MDAzZXNuZGJ1Zl9zaXplKSlcXG4yMDI0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMjU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JDVkJVRl9TSVpFLCBzLVxcdTAwM2VyY3ZidWZfc2l6ZSkpXFxuMjAyNjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDI3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9LT19DT1VOVCwgcy1cXHUwMDNla29fY291bnQpKVxcbjIwMjg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAyOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfTUFYX0JVRkZFUlMsIHMtXFx1MDAzZW1heF9idWZmZXJzKSlcXG4yMDMwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMzE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX01BWF9FUE9DSF9TSVpFLCBzLVxcdTAwM2VtYXhfZXBvY2hfc2l6ZSkpXFxuMjAzMjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDMzOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9VTlBMVUdfV0FURVJNQVJLLCBzLVxcdTAwM2V1bnBsdWdfd2F0ZXJtYXJrKSlcXG4yMDM0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMzU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0FGVEVSX1NCXzBQLCBzLVxcdTAwM2VhZnRlcl9zYl8wcCkpXFxuMjAzNjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDM3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9BRlRFUl9TQl8xUCwgcy1cXHUwMDNlYWZ0ZXJfc2JfMXApKVxcbjIwMzg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAzOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUZURVJfU0JfMlAsIHMtXFx1MDAzZWFmdGVyX3NiXzJwKSlcXG4yMDQwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNDE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JSX0NPTkZMSUNULCBzLVxcdTAwM2Vycl9jb25mbGljdCkpXFxuMjA0MjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDQzOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9PTl9DT05HRVNUSU9OLCBzLVxcdTAwM2Vvbl9jb25nZXN0aW9uKSlcXG4yMDQ0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNDU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTkdfRklMTCwgcy1cXHUwMDNlY29uZ19maWxsKSlcXG4yMDQ2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNDc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTkdfRVhURU5UUywgcy1cXHUwMDNlY29uZ19leHRlbnRzKSlcXG4yMDQ4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNDk6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVFdPX1BSSU1BUklFUywgcy1cXHUwMDNldHdvX3ByaW1hcmllcykpXFxuMjA1MDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDUxOlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0RJU0NBUkRfTVlfREFUQSwgcy1cXHUwMDNlZGlzY2FyZF9teV9kYXRhKSlcXG4yMDUyOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNTM6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVENQX0NPUkssIHMtXFx1MDAzZXRjcF9jb3JrKSlcXG4yMDU0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNTU6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUxXQVlTX0FTQlAsIHMtXFx1MDAzZWFsd2F5c19hc2JwKSlcXG4yMDU2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNTc6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVEVOVEFUSVZFLCBzLVxcdTAwM2V0ZW50YXRpdmUpKVxcbjIwNTg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA1OTpcXHRcXHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9VU0VfUkxFLCBzLVxcdTAwM2V1c2VfcmxlKSlcXG4yMDYwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNjE6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUZURVJfQ1JBU0hfT05MWSwgcy1cXHUwMDNlY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seSkpXFxuMjA2MjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDYzOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9TT0NLX0NIRUNLX1RJTUVPLCBzLVxcdTAwM2Vzb2NrX2NoZWNrX3RpbWVvKSlcXG4yMDY0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNjU6XFx0XFxuMjA2NjpcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCB0bGEpO1xcbjIwNjc6XFx0XFx0cmV0dXJuIDA7XFxuMjA2ODpcXHRcXG4yMDY5OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4yMDcwOlxcdFxcdGlmICh0bGEpXFxuMjA3MTpcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCB0bGEpO1xcbjIwNzI6XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4yMDczOlxcdH1cXG4yMDc0OlxcdFxcbjIwNzU6XFx0aW50IHNldF9yb2xlX3Bhcm1zX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2V0X3JvbGVfcGFybXMgKnMpXFxuMjA3NjpcXHR7XFxuMjA3NzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0bGEgPSBubGFfbmVzdF9zdGFydChza2IsIERSQkRfTkxBX1NFVF9ST0xFX1BBUk1TKTtcXG4yMDc4OlxcdFxcbjIwNzk6XFx0XFx0aWYgKCF0bGEpXFxuMjA4MDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDgxOlxcdFxcbjIwODI6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfU0VUX1JPTEVfUEFSTVNfQVNTVU1FX1VQVE9EQVRFLCBzLVxcdTAwM2Vhc3N1bWVfdXB0b2RhdGUpKVxcbjIwODM6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA4NDpcXHRcXG4yMDg1OlxcdFxcdG5sYV9uZXN0X2VuZChza2IsIHRsYSk7XFxuMjA4NjpcXHRcXHRyZXR1cm4gMDtcXG4yMDg3OlxcdFxcbjIwODg6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbjIwODk6XFx0XFx0aWYgKHRsYSlcXG4yMDkwOlxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHRsYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE3OjE1Ljg2NTc2MzkxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTY3MzMwMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgY29kZSBzZWVtcyB0byBjb3B5IGZpZWxkcyBvbmUgYnkgb25lLCBub3QgdGhlIHdob2xlIHN0cnVjdHVyZS4gSXQgdXNlcyBgbmxhX3B1dGAgZm9yIHN0cmluZ3MgYW5kIGRldGVybWluZXMgdGhlIGxlbmd0aCBjYXJlZnVsbHksIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hhdCBoYXBwZW5zIGlmIGBzaGFyZWRfc2VjcmV0X2xlbmAgaXMgemVyby4gSXQgY2FuIGNvcHkgMSBieXRlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlmIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IGluaXRpYWxpemVkISBIb3dldmVyLCBhIHNhbml0aXplZCB2ZXJzaW9uIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBzaGFyZWQgc2VjcmV0IGFuZCBzZXRzIGBzaGFyZWRfc2VjcmV0X2xlbmAgdG8gemVyby4gVGhpcyBtZWFucyBpdCBvbmx5IGNvcGllcyBhIHplcm8gYnl0ZS5cblxuSSB0aG91Z2h0IGFib3V0IG90aGVyIGZpZWxkcy4gSWYgdGhlIG9yaWdpbmFsIGBuZXRfY29uZmAgc3RydWN0IGlzIGZ1bGx5IGluaXRpYWxpemVkLCBzbyBpcyB0aGUgY29weS4gVGhlIG9yaWdpbmFsIGBuZXRfY29uZmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCBvciBga21hbGxvY19vYmpgLCB3aGljaCBlaXRoZXIgZnVsbHkgaW5pdGlhbGl6ZXMgaXQgdG8gemVybyBvciBpcyBjb3BpZWQgZnJvbSBhbm90aGVyIGluaXRpYWxpemVkIHN0cnVjdC5cblxuSSBjb25zaWRlcmVkIHBhZGRpbmcsIGJ1dCB0aGUgYG5sYV9wdXRgIGZ1bmN0aW9ucyBkb24ndCBjb3B5IHN0cnVjdCBwYWRkaW5nLiBUaGVzZSB1c2UgYG5sYV9yZXNlcnZlYCB0byB6ZXJvIG91dCBwYWRkaW5nIGFkZGVkIHRvIHRoZSBza2IuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZC5cblxuVGhlIHBhdGNoIGl0c2VsZiByZXBsYWNlcyBjb2RlIHRoYXQgd2FzIGNvbmRpdGlvbmFsbHkgbGVha2luZyB0aGUgc2hhcmVkIHNlY3JldCB0byB1c2VyIHNwYWNlIHdpdGggYSBjYWxsIHRvIGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYC4gVGhlIG5ldyB2ZXJzaW9uIGlzIGFsc28gdXNlZCBpbiBvdGhlciBwbGFjZXMuIFRoaXMgaXMgYSBmaXggZm9yIGFuIGluZm9ybWF0aW9uIGxlYWssIHdoZXJlIGluaXRpYWxpemVkIHNlbnNpdGl2ZSBkYXRhIHdhcyBiZWluZyBzZW50IHdoZW4gaXQgc2hvdWxkbid0IGhhdmUgYmVlbi4gVGhpcyBpcyBhIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuIEtNU0FOIGRldGVjdHMgdGhlIGxhdHRlciwgYnV0IG5vdCB0aGUgZm9ybWVyLlxuXG5UaGUgY29kZSBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGBuY19jbGVhbmAsIGJ1dCBgbmNfY2xlYW5gIGlzIG9uIHRoZSBzdGFjayBhbmQgaW5pdGlhbGl6ZWQgYnkgYSBkaXJlY3QgYXNzaWdubWVudCBvZiB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBjb3BpZXMgZmllbGQgYnkgZmllbGQsIG5vdCB0aGUgd2hvbGUgc3RydWN0LCB3aGljaCBtZWFucyB0aGUgcGFkZGluZyBpcyBub3QgY29waWVkLiBFdmVuIGlmIHRoZSBwYWRkaW5nIHdhcyB1bmluaXRpYWxpemVkLCBpdCBpcyBub3QgcmVhZC4gSXQgdXNlcyBgcy1cdTAwM2VzaGFyZWRfc2VjcmV0YCwgYHMtXHUwMDNlY3JhbV9obWFjX2FsZ2AsIGV0Yy4gZGlyZWN0bHk7IGl0IGRvZXNuJ3QgYWNjZXNzIHBhZGRpbmcuXG5cbkxvb2tpbmcgYXQgdGhlIHJ1bGVzLCB0aGlzIHBhdGNoIGlzbid0IG1vZGlmeWluZyBrZXJuZWwgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIGZpeGluZyBhIGxvZ2ljIGJ1ZyBhYm91dCBleHBvc2luZyBpbml0aWFsaXplZCBzZW5zaXRpdmUgZGF0YSwgbm90IGludHJvZHVjaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3Igd3JpdGUuXG5cblRoZSBwYXRjaCB1c2VzIHRoZSBgbmxhX3B1dGAgZnVuY3Rpb24gaW4gYSB3YXkgdGhhdCBjb3VsZCByZWFkIHRoZSBmaXJzdCBieXRlIG9mIGBzaGFyZWRfc2VjcmV0YCwgYW5kIGlmIHRoZSBsZW5ndGggaXMgemVybyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYXJyYXkgaXMgcmVhZC4gSW4gdGhlIHNhbml0aXplZCB2ZXJzaW9uLCB0aGUgc2hhcmVkIHNlY3JldCBhcnJheSBpcyBleHBsaWNpdGx5IHplcm9lZCBiZWZvcmUgY29weWluZy4gVGhlIG90aGVyIGJ5dGVzIGNvcGllZCBhcmUgaW5pdGlhbGl6ZWQuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQgZml4ZXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLiAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDYwLCJPdXRwdXRUb2tlbnMiOjI4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNzozOC44MzMwOTc2MDJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzZW5zaXRpdmUgaW5pdGlhbGl6ZWQgZGF0YSAodGhlIERSQkQgc2hhcmVkIHNlY3JldCkgd2FzIGV4cG9zZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXJzIHZpYSBuZXRsaW5rLiBUbyBmaXggdGhpcywgdGhlIHBhdGNoIGludHJvZHVjZXMgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCB3aGljaCBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgKGBuY19jbGVhbmApLCB6ZXJvZXMgb3V0IHRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQsIGFuZCB0aGVuIHNlcmlhbGl6ZXMgaXQuIFxcblxcbldoaWxlIGBuY19jbGVhbmAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbmNfY2xlYW4gPSAqbmNgKS4gRnVydGhlcm1vcmUsIHRoZSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgc3RydWN0IGZpZWxkLWJ5LWZpZWxkIGludG8gbmV0bGluayBhdHRyaWJ1dGVzICh1c2luZyBgbmxhX3B1dGAsIGBubGFfcHV0X3UzMmAsIGV0Yy4pIHJhdGhlciB0aGFuIGNvcHlpbmcgdGhlIHN0cnVjdCBhcyBhIHJhdyBtZW1vcnkgYmxvY2suIFRoaXMgZW5zdXJlcyB0aGF0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBuZXZlciByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkIGl0c2VsZiBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSBzZXJpYWxpemF0aW9uLlxcblxcblNpbmNlIHRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyByYXRoZXIgdGhhbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZCwgc3RhbmRhcmQgS0FTQU4gYW5kIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIHdoZXJlIHNlbnNpdGl2ZSBpbml0aWFsaXplZCBkYXRhICh0aGUgRFJCRCBzaGFyZWQgc2VjcmV0KSB3YXMgZXhwb3NlZCB0byB1bnByaXZpbGVnZWQgdXNlcnMgdmlhIG5ldGxpbmsuIFRvIGZpeCB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZGAsIHdoaWNoIGNvcGllcyB0aGUgYG5ldF9jb25mYCBzdHJ1Y3QgdG8gYSBsb2NhbCBzdGFjayB2YXJpYWJsZSAoYG5jX2NsZWFuYCksIHplcm9lcyBvdXQgdGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCwgYW5kIHRoZW4gc2VyaWFsaXplcyBpdC4gXFxuXFxuV2hpbGUgYG5jX2NsZWFuYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLCBpdCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBuY19jbGVhbiA9ICpuY2ApLiBGdXJ0aGVybW9yZSwgdGhlIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24gYG5ldF9jb25mX3RvX3NrYmAgY29waWVzIHRoZSBzdHJ1Y3QgZmllbGQtYnktZmllbGQgaW50byBuZXRsaW5rIGF0dHJpYnV0ZXMgKHVzaW5nIGBubGFfcHV0YCwgYG5sYV9wdXRfdTMyYCwgZXRjLikgcmF0aGVyIHRoYW4gY29weWluZyB0aGUgc3RydWN0IGFzIGEgcmF3IG1lbW9yeSBibG9jay4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nIGlzIG5ldmVyIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQgaXRzZWxmIGlzIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAgYmVmb3JlIHNlcmlhbGl6YXRpb24uXFxuXFxuU2luY2UgdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWssIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLCBzdGFuZGFyZCBLQVNBTiBhbmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrsnn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 16:07:32 +0000 UTC FinishedAt: 2026-08-14 16:17:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c7c76f9232bd34835d821f14abdc5fafc17bc938", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_DRBD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "c7c76f9232bd34835d821f14abdc5fafc17bc938", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_DRBD" ], "series_id": "209a2e53-576a-42fd-8556-d8609e09e6e8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "drbd_nl_get_connections_dumpit", "drbd_nl_get_status_doit", "drbd_nl_get_status_dumpit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfRFJCRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdCYjMzQ7LAogICAgJiMzNDtkcmJkX25sX2dldF9zdGF0dXNfZG9pdCYjMzQ7LAogICAgJiMzNDtkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIHdoZXJlIHNlbnNpdGl2ZSBpbml0aWFsaXplZCBkYXRhICh0aGUgRFJCRCBzaGFyZWQgc2VjcmV0KSB3YXMgZXhwb3NlZCB0byB1bnByaXZpbGVnZWQgdXNlcnMgdmlhIG5ldGxpbmsuIFRvIGZpeCB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZGAsIHdoaWNoIGNvcGllcyB0aGUgYG5ldF9jb25mYCBzdHJ1Y3QgdG8gYSBsb2NhbCBzdGFjayB2YXJpYWJsZSAoYG5jX2NsZWFuYCksIHplcm9lcyBvdXQgdGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCwgYW5kIHRoZW4gc2VyaWFsaXplcyBpdC4gXG5cbldoaWxlIGBuY19jbGVhbmAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbmNfY2xlYW4gPSAqbmNgKS4gRnVydGhlcm1vcmUsIHRoZSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgc3RydWN0IGZpZWxkLWJ5LWZpZWxkIGludG8gbmV0bGluayBhdHRyaWJ1dGVzICh1c2luZyBgbmxhX3B1dGAsIGBubGFfcHV0X3UzMmAsIGV0Yy4pIHJhdGhlciB0aGFuIGNvcHlpbmcgdGhlIHN0cnVjdCBhcyBhIHJhdyBtZW1vcnkgYmxvY2suIFRoaXMgZW5zdXJlcyB0aGF0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBuZXZlciByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkIGl0c2VsZiBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSBzZXJpYWxpemF0aW9uLlxuXG5TaW5jZSB0aGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQsIHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIGJ5IHNhbml0aXppbmcgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIHVucHJpdmlsZWdlZCB1c2Vycy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgZHVtcGl0IGFuZCBkb2l0IGhhbmRsZXJzIGluIHRoZSBEUkJEIGJsb2NrIGRldmljZSBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0N2IxZjg1YzZhYTAzODZiOTIwNzIzNGM0NGEwMzE0NmIyNzJiYmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTY6MDk6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcbmluZGV4IGY5ZmZjZDY3NjA3YjUuLmI3N2Y5MDFmYzNlZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jXG5AQCAtMzMwNiw2ICYjNDM7MzMwNiwyNiBAQCBzdGF0aWMgaW50IG5sYV9wdXRfZHJiZF9jZmdfY29udGV4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIC1FTVNHU0laRTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIG5ldF9jb25mX3RvX3NrYigpIHNlcmlhbGl6ZXMgdGhlIHNoYXJlZCBzZWNyZXQgdmVyYmF0aW0uIEFueSBwYXRoIHRoYXQgY2FuXG4mIzQzOyAqIGFuc3dlciBhIHJlcXVlc3QgZnJvbSBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBtdXN0IHBhc3MgZXhjbHVkZV9zZW5zaXRpdmUsXG4mIzQzOyAqIHNvIHRoZSBzZWNyZXQgaXMgYmxhbmtlZCBpbiBhIHByaXZhdGUgY29weSBiZWZvcmUgaXQgcmVhY2hlcyB0aGUgc2tiLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqbmMsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIGV4Y2x1ZGVfc2Vuc2l0aXZlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9jb25mIG5jX2NsZWFuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWV4Y2x1ZGVfc2Vuc2l0aXZlKVxuJiM0MztcdFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcbiYjNDM7XG4mIzQzO1x0bmNfY2xlYW4gPSAqbmM7XG4mIzQzO1x0bWVtc2V0KG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQsIDAsIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7XG4mIzQzO1x0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgXHUwMDI2bmNfY2xlYW4pO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogVGhlIGdlbmVyaWMgbmV0bGluayBkdW1wIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG91dHNpZGUgdGhlIGdlbmxfbG9jaygpLCBzb1xuICAqIHRoZXkgY2Fubm90IHVzZSB0aGUgc2ltcGxlIGF0dHJpYnV0ZSBwYXJzaW5nIGNvZGUgd2hpY2ggdXNlcyBnbG9iYWxcbkBAIC0zNjIxLDcgJiM0MzszNjQxLDggQEAgaW50IGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFja1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRuZXRfY29uZiA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbiBcdFx0aWYgKG5ldF9jb25mKSB7XG4tXHRcdFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmV0X2NvbmYpO1xuJiM0MztcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmV0X2NvbmYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IWNhcGFibGUoQ0FQX1NZU19BRE1JTikpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuQEAgLTM4NDIsMTggJiM0MzszODYzLDggQEAgc3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuIFx0XHRzdHJ1Y3QgbmV0X2NvbmYgKm5jO1xuIFxuIFx0XHRuYyA9IHJjdV9kZXJlZmVyZW5jZShmaXJzdF9wZWVyX2RldmljZShkZXZpY2UpLVx1MDAzZWNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYpO1xuLVx0XHRpZiAobmMpIHtcbi1cdFx0XHRpZiAoZXhjbHVkZV9zZW5zaXRpdmUpIHtcbi1cdFx0XHRcdHN0cnVjdCBuZXRfY29uZiBuY19jbGVhbiA9ICpuYztcbi1cbi1cdFx0XHRcdG1lbXNldChuY19jbGVhbi5zaGFyZWRfc2VjcmV0LCAwLFxuLVx0XHRcdFx0ICAgICAgIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7XG4tXHRcdFx0XHRuY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbiA9IDA7XG4tXHRcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBcdTAwMjZuY19jbGVhbik7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcbi1cdFx0XHR9XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChuYylcbiYjNDM7XHRcdFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCBleGNsdWRlX3NlbnNpdGl2ZSk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG5AQCAtNDA1OCw3ICYjNDM7NDA2OSw3IEBAIHN0YXRpYyBpbnQgZ2V0X29uZV9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0c3RydWN0IG5ldF9jb25mICpuYztcbiBcbiBcdFx0XHRcdG5jID0gcmN1X2RlcmVmZXJlbmNlKGNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYpO1xuLVx0XHRcdFx0aWYgKG5jIFx1MDAyNlx1MDAyNiBuZXRfY29uZl90b19za2Ioc2tiLCBuYykgIT0gMClcbiYjNDM7XHRcdFx0XHRpZiAobmMgXHUwMDI2XHUwMDI2IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgdHJ1ZSkgIT0gMClcbiBcdFx0XHRcdFx0Z290byBjYW5jZWw7XG4gXHRcdFx0fVxuIFx0XHRcdGdvdG8gZG9uZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9EUkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0JiMzNDssCiAgICAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kb2l0JiMzNDssCiAgICAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDdiMWY4NWM2YWEwMzg2YjkyMDcyMzRjNDRhMDMxNDZiMjcyYmJlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE2OjA5OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKaW5kZXggZjlmZmNkNjc2MDdiNS4uYjc3ZjkwMWZjM2VmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCkBAIC0zMzA2LDYgJiM0MzszMzA2LDI2IEBAIHN0YXRpYyBpbnQgbmxhX3B1dF9kcmJkX2NmZ19jb250ZXh0KHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAomIzQzOy8qCiYjNDM7ICogbmV0X2NvbmZfdG9fc2tiKCkgc2VyaWFsaXplcyB0aGUgc2hhcmVkIHNlY3JldCB2ZXJiYXRpbS4gQW55IHBhdGggdGhhdCBjYW4KJiM0MzsgKiBhbnN3ZXIgYSByZXF1ZXN0IGZyb20gYW4gdW5wcml2aWxlZ2VkIHByb2Nlc3MgbXVzdCBwYXNzIGV4Y2x1ZGVfc2Vuc2l0aXZlLAomIzQzOyAqIHNvIHRoZSBzZWNyZXQgaXMgYmxhbmtlZCBpbiBhIHByaXZhdGUgY29weSBiZWZvcmUgaXQgcmVhY2hlcyB0aGUgc2tiLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKm5jLAomIzQzOwkJCQkgICAgIGJvb2wgZXhjbHVkZV9zZW5zaXRpdmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2NvbmYgbmNfY2xlYW47CiYjNDM7CiYjNDM7CWlmICghZXhjbHVkZV9zZW5zaXRpdmUpCiYjNDM7CQlyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpOwomIzQzOwomIzQzOwluY19jbGVhbiA9ICpuYzsKJiM0MzsJbWVtc2V0KG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQsIDAsIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7CiYjNDM7CW5jX2NsZWFuLnNoYXJlZF9zZWNyZXRfbGVuID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsICZhbXA7bmNfY2xlYW4pOwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGUgZ2VuZXJpYyBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzIGFyZSBjYWxsZWQgb3V0c2lkZSB0aGUgZ2VubF9sb2NrKCksIHNvCiAgKiB0aGV5IGNhbm5vdCB1c2UgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcGFyc2luZyBjb2RlIHdoaWNoIHVzZXMgZ2xvYmFsCkBAIC0zNjIxLDcgJiM0MzszNjQxLDggQEAgaW50IGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjawogCQkJZ290byBvdXQ7CiAJCW5ldF9jb25mID0gcmN1X2RlcmVmZXJlbmNlKGNvbm5lY3Rpb24tJmd0O25ldF9jb25mKTsKIAkJaWYgKG5ldF9jb25mKSB7Ci0JCQllcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuZXRfY29uZik7CiYjNDM7CQkJZXJyID0gbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5ldF9jb25mLAomIzQzOwkJCQkJCQkhY2FwYWJsZShDQVBfU1lTX0FETUlOKSk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0OwogCQl9CkBAIC0zODQyLDE4ICYjNDM7Mzg2Myw4IEBAIHN0YXRpYyBpbnQgbmxhX3B1dF9zdGF0dXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSwKIAkJc3RydWN0IG5ldF9jb25mICpuYzsKIAogCQluYyA9IHJjdV9kZXJlZmVyZW5jZShmaXJzdF9wZWVyX2RldmljZShkZXZpY2UpLSZndDtjb25uZWN0aW9uLSZndDtuZXRfY29uZik7Ci0JCWlmIChuYykgewotCQkJaWYgKGV4Y2x1ZGVfc2Vuc2l0aXZlKSB7Ci0JCQkJc3RydWN0IG5ldF9jb25mIG5jX2NsZWFuID0gKm5jOwotCi0JCQkJbWVtc2V0KG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQsIDAsCi0JCQkJICAgICAgIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7Ci0JCQkJbmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwOwotCQkJCWVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsICZhbXA7bmNfY2xlYW4pOwotCQkJfSBlbHNlIHsKLQkJCQllcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7Ci0JCQl9Ci0JCX0KJiM0MzsJCWlmIChuYykKJiM0MzsJCQllcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmMsIGV4Y2x1ZGVfc2Vuc2l0aXZlKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGVycikKQEAgLTQwNTgsNyAmIzQzOzQwNjksNyBAQCBzdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJCQlzdHJ1Y3QgbmV0X2NvbmYgKm5jOwogCiAJCQkJbmMgPSByY3VfZGVyZWZlcmVuY2UoY29ubmVjdGlvbi0mZ3Q7bmV0X2NvbmYpOwotCQkJCWlmIChuYyAmYW1wOyZhbXA7IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKSAhPSAwKQomIzQzOwkJCQlpZiAobmMgJmFtcDsmYW1wOyBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmMsIHRydWUpICE9IDApCiAJCQkJCWdvdG8gY2FuY2VsOwogCQkJfQogCQkJZ290byBkb25lOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRFJCRCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIGFmZmVjdGluZyBgZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuY2AuIExvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBmdW5jdGlvbiBjYWxsZWQgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIHNhbml0aXphdGlvbiBpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGludGVyYWN0aW9uPyBTb3VuZHMgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgc2VjdXJpdHktcmVsYXRlZC4gSXQmIzM5O3MgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGNvZGUsIHdoaWNoIGlzIGdvb2QgZm9yIG1haW50YWluYWJpbGl0eSwgYW5kIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAgYW5kIGBnZXRfb25lX3N0YXR1c2AuIFRoZXNlIGFyZSBuZXRsaW5rIGZ1bmN0aW9ucywgcmlnaHQ/IEFuZCB0aGUgY29udGV4dCBpcyBEUkJELCBhIGJsb2NrIGRldmljZSBkcml2ZXIg4oCTIGEgZGlzdHJpYnV0ZWQsIHJlcGxpY2F0ZWQgb25lLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkuCgpSaWdodCwgRFJCRC4gTmV0d29yayBibG9jayBkZXZpY2UuIEdlbmVyYWxseSBtYW5hZ2VkIHZpYSBuZXRsaW5rLiBUaGUgcGF0Y2ggbW9kaWZpZXMgbmV0bGluayBkdW1wIGZ1bmN0aW9ucyB3aGljaCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBvZiBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2YgYSBibG9jayBkZXZpY2UgZHJpdmVyLCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIERSQkQgaXMgcmVhY2hhYmxlLCBhbmQgZGV0ZXJtaW5lIGl0cyBjb25maWd1cmF0aW9uLCB0byBmaW5kIG91dCBpZiBpdCYjMzk7cyBldmVuIHdvcnRoIGZvY3VzaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX0RSQkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZz02PWNvbW1lbnQgXCYjMzQ7RFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMgb3IgSU5FVCBub3Qgc2VsZWN0ZWRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZy04LVxuZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWc6OTpjb25maWcgQkxLX0RFVl9EUkJEXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZy0xMC1cdHRyaXN0YXRlIFwmIzM0O0RSQkQgRGlzdHJpYnV0ZWQgUmVwbGljYXRlZCBCbG9jayBEZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYmFzZWQgb24gYSBiaXQgb2YgZGlnZ2luZzoKCioqVW5kZXJzdGFuZGluZyBEUkJEIENvbm5lY3Rpb24gU3RhdHVzIGFuZCBSZXBvcnRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgIGFuZCBgZ2V0X29uZV9zdGF0dXNgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoZXNlIGFyZSBwcm9iYWJseSByZWxhdGVkIHRvIGhvdyBEUkJEIHJlcG9ydHMgYW5kIHJldHJpZXZlcyBpdHMgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiwgbGlrZWx5IHRocm91Z2ggTmV0bGluay4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgpgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCBzb3VuZHMgbGlrZSBhIE5ldGxpbmsgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkdW1wIGNvbm5lY3Rpb24tcmVsYXRlZCBkYXRhLiBUaGUgJiMzNDtkdW1waXQmIzM0OyBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBmb3IgZ2VuZXJhdGluZyBhIGNvbXBsZXRlIHNuYXBzaG90IG9yIGEgZnVsbCBsaXN0aW5nIG9mIGFsbCBhY3RpdmUgRFJCRCBjb25uZWN0aW9ucy4gVGhpcyB3b3VsZCBiZSBjcnVjaWFsIGZvciBtb25pdG9yaW5nLCB0cm91Ymxlc2hvb3RpbmcsIGFuZCBwb3RlbnRpYWxseSwgaW1wbGVtZW50aW5nIG1hbmFnZW1lbnQgdG9vbHMuIEl0IHByb2JhYmx5IHByb3ZpZGVzIGRldGFpbHMgbGlrZSBwZWVyIElQIGFkZHJlc3NlcywgcG9ydHMsIGNvbm5lY3Rpb24gc3RhdGVzIChlLmcuLCBDb25uZWN0ZWQsIERpc2Nvbm5lY3RpbmcsIGV0Yy4pLCBhbmQgbWF5YmUgZXZlbiBzb21lIHBlcmZvcm1hbmNlIG1ldHJpY3MuIEkgc3VzcGVjdCBpdCBmdW5jdGlvbnMgYXMgYSBOZXRsaW5rIGR1bXAgaGFuZGxlci4KCk9uIHRoZSBvdGhlciBoYW5kLCBgZ2V0X29uZV9zdGF0dXNgIHNlZW1zIG11Y2ggbW9yZSBmb2N1c2VkIGFuZCBncmFudWxhci4gVGhlIG5hbWUgaW1wbGllcyBpdCYjMzk7cyBkZXNpZ25lZCB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIGEgKnNpbmdsZSogRFJCRCBjb25uZWN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB1c2VkIHdoZW4gYSBzcGVjaWZpYyBjb25uZWN0aW9uJiMzOTtzIHN0YXR1cyBpcyByZXF1aXJlZCwgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgYSBxdWVyeSBvciBhIHJlc3BvbnNlIHRvIGEgbWFuYWdlbWVudCByZXF1ZXN0LiBJdCB3b3VsZCBwcm92aWRlIGtleSBpbmZvcm1hdGlvbiBsaWtlIG9wZXJhdGlvbmFsIHN0YXRlLCBlcnJvcnMsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFzcGVjdHMgcmVsYXRlZCB0byB0aGF0IGNvbm5lY3Rpb24uIEl0IG1heSByZXR1cm4gdmFyaW91cyBwYXJhbWV0ZXJzLCBvciBwb2ludGVycyB0byBzdHJ1Y3RzLCBidXQgb25seSBmb3IgYSBzcGVjaWZpYywgZ2l2ZW4gY29ubmVjdGlvbi4KCkkmIzM5O2QgYmV0IHRoZXkmIzM5O3JlIGxpa2VseSBjb21wbGVtZW50YXJ5LiBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCBwcm92aWRlcyB0aGUgYnJvYWQgb3ZlcnZpZXcsIHdoaWxlIGBnZXRfb25lX3N0YXR1c2AgaXMgdGhlIHByZWNpc2lvbiB0b29sIGZvciBpbi1kZXB0aCBpbnNwZWN0aW9uIG9mIGEgc3BlY2lmaWMgY29ubmVjdGlvbi4gVGhlIHJlbGF0aW9uc2hpcCBpcyBsaWtlbHkgdGhhdCB0aGUgZHVtcCBmdW5jdGlvbiBwcm92aWRlcyBhbiBvdmVydmlldywgYW5kIGBnZXRfb25lX3N0YXR1c2AgaXMgbGlrZWx5IGNhbGxlZCBpbnRlcm5hbGx5IHRvIHJldHVybiBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgY29ubmVjdGlvbiwgb25lIGF0IGEgdGltZS4gSSYjMzk7ZCBhbHNvIGltYWdpbmUgdGhhdCBhIE5ldGxpbmsgbWVzc2FnZSB3b3VsZCBiZSB1c2VkIHRvIHRyaWdnZXIgYm90aCB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM1NDk9ZW51bSB7IFNJTkdMRV9SRVNPVVJDRSwgSVRFUkFURV9SRVNPVVJDRVMgfTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzU1MC1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzU1MTppbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzU1Mi17XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MzU5PWNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcmJkX25sX29wc1szMl0gPSB7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtNjE3LVx0XHQuY21kXHRcdD0gRFJCRF9BRE1fR0VUX0NPTk5FQ1RJT05TLFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6NjE4Olx0XHQuZHVtcGl0XHRcdD0gZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0LFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtNjE5LVx0XHQuZG9uZVx0XHQ9IGRyYmRfYWRtX2R1bXBfY29ubmVjdGlvbnNfZG9uZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaD03ND1pbnQgZHJiZF9ubF9nZXRfZGV2aWNlc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oLTc1LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg6NzY6aW50IGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtNzctXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcmVxdWVzdCwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqTXkgSW50ZXJuYWwgTW9ub2xvZ3VlIG9uIGBnZXRfb25lX3N0YXR1c2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY29uY2VwdCBoZXJlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3Qgb24gdGhlIHN1cmZhY2UuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbiBvciBwcm9jZXNzLCBsZXQmIzM5O3MgY2FsbCBpdCBgZ2V0X29uZV9zdGF0dXNgLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYW4gZXhwZXJ0LCBpc24mIzM5O3QgKndoYXQqIGl0IGRvZXMsIGJ1dCAqaG93KiBpdCYjMzk7cyBpbXBsZW1lbnRlZCBhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYmFrZWQgaW50byBpdHMgZGVzaWduLiBJcyB0aGlzIGEgc2ltcGxlIGdldHRlciwgZmV0Y2hpbmcgYSBzaW5nbGUgc3RhdHVzIGZyb20gYSBkYXRhYmFzZSBvciBhIG1vcmUgY29tcGxleCBvcmNoZXN0cmF0aW9uIG9mIG11bHRpcGxlIHNlcnZpY2VzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgdGhlIHN0YXR1cyBpcyB1cGRhdGVkIGNvbmN1cnJlbnRseT8KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZWRnZSBjYXNlczogV2hhdCBoYXBwZW5zIGlmIHRoZSByZXF1ZXN0ZWQgc3RhdHVzIGRvZXNuJiMzOTt0IGV4aXN0PyBEb2VzIGl0IHJldHVybiBhIG51bGwsIHJhaXNlIGFuIGV4Y2VwdGlvbiwgb3IgcmV0dXJuIHNvbWUga2luZCBvZiAmIzM0O25vdCBmb3VuZCYjMzQ7IG9iamVjdD8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gSG93IGFyZSBleGNlcHRpb25zIHByb3BhZ2F0ZWQgYW5kIGhhbmRsZWQgZnVydGhlciB1cCB0aGUgY2FsbCBzdGFjaz8gSXMgdGhlcmUgYW55IGNhY2hpbmcgaW52b2x2ZWQ/IElmIHNvLCB3aGF0JiMzOTtzIHRoZSBjYWNoZSBpbnZhbGlkYXRpb24gc3RyYXRlZ3k/CgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHBlcmZvcm1hbmNlOiBJcyB0aGlzIGZ1bmN0aW9uIG9wdGltaXplZCBmb3IgZnJlcXVlbnQgY2FsbHM/IERvZXMgaXQgcmVseSBvbiBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucz8gQW5kIGlmIGl0JiMzOTtzIGFzeW5jaHJvbm91cywgaXMgaXQgaGFuZGxpbmcgY29uY3VycmVuY3kgcHJvcGVybHksIHBlcmhhcHMgd2l0aCBhc3luYy9hd2FpdCwgY29yb3V0aW5lcywgb3IgdGhyZWFkaW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBib3R0bGVuZWNrIGluIHRoZSBsYXJnZXIgc3lzdGVtPyBBcmUgdGhlcmUgbG9nZ2luZyBhbmQgbW9uaXRvcmluZyBpbiBwbGFjZSB0byB0cmFjayBlcnJvcnMgYW5kIHJlc3BvbnNlIHRpbWVzPwoKVGhlIG92ZXJhbGwgc3lzdGVtIGlzIGltcG9ydGFudC4gSG93IGRvZXMgYGdldF9vbmVfc3RhdHVzYCBpbnRlcmZhY2Ugd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbGFyZ2VyIHN5c3RlbT8gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSYjMzk7bSBhbHJlYWR5IGVudmlzaW9uaW5nIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gZXh0ZXJuYWwgc2VydmljZXMgb3IgcmVzb3VyY2VzLiBBIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW5kIG1haW50YWluYWJpbGl0eS4KCkZpbmFsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGVzdGFiaWxpdHkuIElzIHRoaXMgZnVuY3Rpb24gZGVzaWduZWQgd2l0aCB1bml0IHRlc3RpbmcgaW4gbWluZD8gQXJlIHRoZXJlIG1vY2thYmxlIGRlcGVuZGVuY2llcz8gV2hhdCYjMzk7cyB0aGUgcGxhbiBmb3IgaW50ZWdyYXRpb24gYW5kIHN5c3RlbSB0ZXN0cyB0aGF0IHdvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uPwoKRXNzZW50aWFsbHksIEkmIzM5O20gYWxyZWFkeSBydW5uaW5nIHRocm91Z2ggYSBtZW50YWwgY2hlY2tsaXN0IG9mIGJlc3QgcHJhY3RpY2VzIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoZSAmIzM0O3NpbXBsZSYjMzQ7IGBnZXRfb25lX3N0YXR1c2AgZnVuY3Rpb24gaXMganVzdCB0aGUgc3RhcnRpbmcgcG9pbnQ7IHRoZSByZWFsIHZhbHVlIGlzIGluIHVuZGVyc3RhbmRpbmcgaXRzIGJyb2FkZXIgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9vbmVfc3RhdHVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM5NjI9aW50IGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTg0LVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTg1OnN0YXRpYyBpbnQgZ2V0X29uZV9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTg2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQxMTEtICpcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDExMjogKiBPbmNlIHRoaW5ncyBhcmUgc2V0dXAgcHJvcGVybHksIHdlIGNhbGwgaW50byBnZXRfb25lX3N0YXR1cygpLlxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTEzLSAqL1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz00MTE0PWludCBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQxNDktXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjQxNTA6XHRrcmVmX3B1dChcdTAwMjZyZXNvdXJjZS1cdTAwM2VrcmVmLCBkcmJkX2Rlc3Ryb3lfcmVzb3VyY2UpOyAvKiBnZXRfb25lX3N0YXR1cygpIHJldmFsaWRhdGVzIHRoZSByZXNvdXJjZSAqL1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTUxLVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDE1OC1kdW1wOlxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzo0MTU5Olx0cmV0dXJuIGdldF9vbmVfc3RhdHVzKHNrYiwgY2IpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTYwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBEUkJEIE5ldGxpbmsgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGluZm9ybWF0aW9uIGxlYWsgaW4gdGhlIERSQkQgbmV0bGluayBpbnRlcmZhY2Ug4oCTIGFuIHVucHJpdmlsZWdlZCBwcm9jZXNzIGNvdWxkIHBvdGVudGlhbGx5IHNuYWcgYSBzaGFyZWQgc2VjcmV0LiBJdCYjMzk7cyBhIHNlY3VyaXR5IGZpeCwgcG90ZW50aWFsbHkgZWFybmluZyBhIENWRSwgb3IgYXQgbGVhc3QgYSBidWdmaXguIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3RyYWlnaHRmb3J3YXJkOiBzYW5pdGl6ZSB0aGUgc2hhcmVkIHNlY3JldCBpbiB0aGUgbmV0bGluayBvdXRwdXQgaWYgdGhlIHVzZXIgbGFja3MgYENBUF9TWVNfQURNSU5gLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyYjMzQ7IFRoZSBhY3R1YWwgY29kZSBjaGFuZ2UgaXRzZWxmIGxvb2tzIGluY3JlZGlibHkgc2ltcGxlLiBJdCYjMzk7cyBqdXN0IGNhbGxpbmcgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCBlZmZlY3RpdmVseSB6ZXJvaW5nIG91dCB0aGUgcmVsZXZhbnQgZmllbGRzLiBGcm9tIGEgbG9naWMgY29tcGxleGl0eSBwZXJzcGVjdGl2ZSwgdGhlcmUgaXNuJiMzOTt0IG11Y2ggdG8gc2luayBvdXIgdGVldGggaW50by4gSG93ZXZlciwgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIHJlYWNoYWJsZSBkcml2ZXIuIFNvLCB3aGlsZSBpdCYjMzk7cyBzaW1wbGUsIGl0JiMzOTtzIGEgbW9kaWZpY2F0aW9uIGluIGFuIGFyZWEgdGhhdCYjMzk7cyBhY2Nlc3NpYmxlLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGluc3RydWN0aW9ucyBhZ2Fpbi4uLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYuLi4mIzM0OyBBaGEhIFRoaXMgZG9lc24mIzM5O3QgZmFsbCBpbnRvICphbnkqIG9mIHRob3NlICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY2F0ZWdvcmllcy4gVGhpcyBhY3R1YWxseSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMvZHJpdmVycy4gT2theSwgc28gZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBpcyBtaW5vciwgd2Ugc2hvdWxkIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9dHJ1ZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHJlbGV2YW50IHN5bWJvbHMuIFRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGFyZSBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCBhbmQgYGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRgLiBJIGFtIGFsc28gaW5jbHVkaW5nIGBnZXRfb25lX3N0YXR1c2AgYmVjYXVzZSBpdCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YC4KCkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlnIGlzIGBCTEtfREVWX0RSQkRgLiBMZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZSBjaGVjayBpZiB0aGF0IGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9EUkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWc9Nj1jb21tZW50IFwmIzM0O0RSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTIG9yIElORVQgbm90IHNlbGVjdGVkXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWctOC1cbmRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnOjk6Y29uZmlnIEJMS19ERVZfRFJCRFxuZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtEUkJEIERpc3RyaWJ1dGVkIFJlcGxpY2F0ZWQgQmxvY2sgRGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEJMS19ERVZfRFJCRCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCTEtfREVWX0RSQkRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMsIHRoZSBtb2R1bGVzIGl0IHJlbGllcyB1cG9uLiBXaGF0IG90aGVyIGJsb2NrIGRldmljZSBkcml2ZXJzIGFyZSBpbnZvbHZlZD8gSXMgaXQgYSB2aXJ0dWFsIGJsb2NrIGRldmljZT8gSWYgc28sIHdoYXQgdmlydHVhbCBibG9jayBsYXllciBob29rcyBkb2VzIGl0IGVtcGxveT8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGFueSBzcGVjaWZpYyBuZXR3b3JrIHByb3RvY29scyBvciBzdGFja3MgYXQgdGhlIGtlcm5lbCBsZXZlbD8gTXkgbWluZCBzdGFydHMgYnVpbGRpbmcgYSBtZW50YWwgbWFwLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsYXllcnMgaW52b2x2ZWQ6IHRoZSBnZW5lcmljIGJsb2NrIGxheWVyLCBwb3RlbnRpYWwgSS9PIHNjaGVkdWxlcnMsIHRoZSBuZXR3b3JrIGNvbXBvbmVudCBmb3IgcmVwbGljYXRpb24sIGFueSB1bmRlcmx5aW5nIHN0b3JhZ2UgZHJpdmVycy4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBgS2NvbmZpZ2AgZW50cmllcyByZWxhdGVkIHRvIERSQkQsIHRvIHNlZSB3aGF0IG1vZHVsZXMgaXQgY2FuIG9wdGlvbmFsbHkgbG9hZCBhbmQgd2hhdCBpdCB1bmNvbmRpdGlvbmFsbHkgcmVxdWlyZXMuIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgc3RvcmFnZSBkZXZpY2UgdHlwZXMgaXQmIzM5O3Mgb3B0aW1pemVkIGZvcj8gQXJlIHRoZXJlIGFueSBjb3JlIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIEFQSXMgaXQgZGVlcGx5IGludGVyYWN0cyB3aXRoIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGlzIGdvaW5nIHRvIGludm9sdmUgZGl2aW5nIGludG8gdGhlIHNvdXJjZSBjb2RlLCBjcm9zcy1yZWZlcmVuY2luZyBkZWZpbml0aW9ucywgYW5kIHVuZGVyc3RhbmRpbmcgaG93IGRpZmZlcmVudCBrZXJuZWwgc3Vic3lzdGVtcyBpbnRlcmFjdCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIERSQkQgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbW1lbnQgXCYjMzQ7RFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMgb3IgSU5FVCBub3Qgc2VsZWN0ZWRcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gUFJPQ19GUz0mIzM5O24mIzM5OyB8fCBJTkVUPSYjMzk7biYjMzk7XG4gICA4Olx0XG4gICA5Olx0Y29uZmlnIEJMS19ERVZfRFJCRFxuICAxMDpcdFx0dHJpc3RhdGUgXCYjMzQ7RFJCRCBEaXN0cmlidXRlZCBSZXBsaWNhdGVkIEJsb2NrIERldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDExOlx0XHRkZXBlbmRzIG9uIFBST0NfRlMgXHUwMDI2XHUwMDI2IElORVRcbiAgMTI6XHRcdHNlbGVjdCBMUlVfQ0FDSEVcbiAgMTM6XHRcdHNlbGVjdCBDUkMzMlxuICAxNDpcdFx0aGVscFxuICAxNTpcdFxuICAxNjpcdFx0ICBOT1RFOiBJbiBvcmRlciB0byBhdXRoZW50aWNhdGUgY29ubmVjdGlvbnMgeW91IGhhdmUgdG8gc2VsZWN0XG4gIDE3Olx0XHQgIENSWVBUT19ITUFDIGFuZCBhIGhhc2ggZnVuY3Rpb24gYXMgd2VsbC5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgRFJCRCBpcyBhIHNoYXJlZC1ub3RoaW5nLCBzeW5jaHJvbm91c2x5IHJlcGxpY2F0ZWQgYmxvY2sgZGV2aWNlLiBJdFxuICAyMDpcdFx0ICBpcyBkZXNpZ25lZCB0byBzZXJ2ZSBhcyBhIGJ1aWxkaW5nIGJsb2NrIGZvciBoaWdoIGF2YWlsYWJpbGl0eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRSQkQgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgY29uZmlndXJlIHRoaXMgRFJCRCBtb2R1bGUuIFJpZ2h0LCBgQkxLX0RFVl9EUkJEYCByZWxpZXMgb24gYm90aCBgUFJPQ19GU2AgYW5kIGBJTkVUYC4gTm90IGEgc3VycHJpc2UsIGFuZCB1c3VhbGx5IGJvdGggYXJlIGVuYWJsZWQgYW55d2F5LiBUaGVyZWZvcmUsIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBhZGQgYEJMS19ERVZfRFJCRGAgZGlyZWN0bHkgdG8gbXkgRW5hYmxlQ29uZmlncy4gSXQmIzM5O3MgdGhlIG1vc3Qgc2Vuc2libGUgdGhpbmcgdG8gZG8uCgpOb3csIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgc3ltYm9sczogYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YCwgYW5kIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGAuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQuIEhvbGQgb24uLi4gSSBzZWUgdGhhdCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgIGl0c2VsZiBpc24mIzM5O3QgbW9kaWZpZWQuIFRoYXQmIzM5O3MgYSBsaXR0bGUgc3RyYW5nZS4gQnV0IEkgc2VlIHRoYXQgYG5sYV9wdXRfc3RhdHVzX2luZm9gIGlzIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20gYGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0YD8gSG1tLCB0aGF0JiMzOTtzIG5vdCB3aGF0IEkgZXhwZWN0ZWQuIEJldHRlciBjaGVjayB0aGF0IHNwZWNpZmljIGNhbGwgcGF0aCBtb3JlIGNsb3NlbHkgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbiBjYWxsIGdyYXBoIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmxhX3B1dF9zdGF0dXNfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zODEzPXN0YXRpYyBzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICp0aGVfb25seV9jb25uZWN0aW9uKHN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4MjEtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4MjI6c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODIzLVx0XHRjb25zdCBzdHJ1Y3Qgc2liX2luZm8gKnNpYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM5NjI9aW50IGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTczLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTc0Olx0ZXJyID0gbmxhX3B1dF9zdGF0dXNfaW5mbyhhZG1fY3R4LVx1MDAzZXJlcGx5X3NrYiwgYWRtX2N0eC1cdTAwM2VkZXZpY2UsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTc1LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk4NT1zdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQwODMtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjQwODQ6XHRcdGlmIChubGFfcHV0X3N0YXR1c19pbmZvKHNrYiwgZGV2aWNlLCBOVUxMKSkge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MDg1LWNhbmNlbDpcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTQ2NDM9dm9pZCBkcmJkX2JjYXN0X2V2ZW50KHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLCBjb25zdCBzdHJ1Y3Qgc2liX2luZm8gKnNpYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQ2NjEtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjQ2NjI6XHRpZiAobmxhX3B1dF9zdGF0dXNfaW5mbyhtc2csIGRldmljZSwgc2liKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDY2My1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTIKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogODM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEUkJEIE5ldGxpbmsgSW50ZXJmYWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYG5sYV9wdXRfc3RhdHVzX2luZm9gIGlzIGEga2V5IGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGAsIGBnZXRfb25lX3N0YXR1c2AsIGFuZCBgZHJiZF9iY2FzdF9ldmVudGAuIFRoZSBgZ2V0X29uZV9zdGF0dXNgIGZ1bmN0aW9uIGlzIGl0c2VsZiBjYWxsZWQgZnJvbSBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAuIFRoaXMgZ2l2ZXMgbWUgdGhlIGVudHJ5IHBvaW50czogYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YCwgYW5kIGBkcmJkX2JjYXN0X2V2ZW50YC4gSSB3aWxsIGZvY3VzIG15IGFuYWx5c2lzIG9uIHRoZXNlIGVudHJ5IHBvaW50cy4KCkdpdmVuIHRoYXQsIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAgdG8gYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYEJMS19ERVZfRFJCRGAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgcmVsZXZhbnQgb25lLgoKQWgsIEkgbWlzc2VkIGl0IGluaXRpYWxseSBidXQgYGRyYmRfYmNhc3RfZXZlbnRgIGlzIGFsc28gYSB2YWxpZCBlbnRyeSBwb2ludC4gSSYjMzk7bGwgaW5jbHVkZSBpdC4KCk5vdywgbGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHBhdGNoIGl0c2VsZi4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgc2FuaXRpemluZyB0aGUgYG5ldF9jb25mYCBzdHJ1Y3R1cmUsIHBhcnRpY3VsYXJseSB0aGUgYHNoYXJlZF9zZWNyZXRgLCB3aGVuIGl0JiMzOTtzIGJlaW5nIHNlbnQgb3ZlciB0aGUgbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIHJlcGxhY2VzIGEgY29uZGl0aW9uYWwgYmxvY2sgdG8gY2FsbCBhIG5ldyBgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZGAgZnVuY3Rpb24gd2hpY2ggc2FuaXRpemVzIHRoZSBkYXRhIGJlZm9yZSB0aGUgZGF0YSBpcyB3cml0dGVuIG91dC4gVGhpcyBoYXBwZW5zIGluIGJvdGggYG5sYV9wdXRfc3RhdHVzX2luZm9gIGFuZCBgZ2V0X29uZV9zdGF0dXNgLgoKU28sIHRoZSBwYXRjaCBhZmZlY3RzIGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgbmxhX3B1dF9zdGF0dXNfaW5mb2AsIGFuZCBgZ2V0X29uZV9zdGF0dXNgLCBhbmQgYnkgZXh0ZW5zaW9uIGFueSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBhbnkgb2YgdGhlc2UuIFRoZSBlbnRyeSBwb2ludHMgYXJlOiBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCwgYGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0YCwgYGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRgLCBhbmQgYGRyYmRfYmNhc3RfZXZlbnRgLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBzZXQ6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYCAoQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNsZWFyIHNlY3VyaXR5IGZpeC4pCiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1pdGlnYXRlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIGJ5IHNhbml0aXppbmcgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIHVucHJpdmlsZWdlZCB1c2Vycy4gSXQgYWx0ZXJzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXQmIzM0OywgJiMzNDtkcmJkX25sX2dldF9zdGF0dXNfZG9pdCYjMzQ7LCAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXQmIzM0OywgJiMzNDtkcmJkX2JjYXN0X2V2ZW50JiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7QkxLX0RFVl9EUkJEJiMzNDtdYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9EUkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0JiMzNDssCiAgICAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kb2l0JiMzNDssCiAgICAmIzM0O2RyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0RSQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXQmIzM0OywKICAgICYjMzQ7ZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXQmIzM0OywKICAgICYjMzQ7ZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIGJ5IHNhbml0aXppbmcgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIHVucHJpdmlsZWdlZCB1c2Vycy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgZHVtcGl0IGFuZCBkb2l0IGhhbmRsZXJzIGluIHRoZSBEUkJEIGJsb2NrIGRldmljZSBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIHdoZXJlIHNlbnNpdGl2ZSBpbml0aWFsaXplZCBkYXRhICh0aGUgRFJCRCBzaGFyZWQgc2VjcmV0KSB3YXMgZXhwb3NlZCB0byB1bnByaXZpbGVnZWQgdXNlcnMgdmlhIG5ldGxpbmsuIFRvIGZpeCB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZGAsIHdoaWNoIGNvcGllcyB0aGUgYG5ldF9jb25mYCBzdHJ1Y3QgdG8gYSBsb2NhbCBzdGFjayB2YXJpYWJsZSAoYG5jX2NsZWFuYCksIHplcm9lcyBvdXQgdGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCwgYW5kIHRoZW4gc2VyaWFsaXplcyBpdC4gXG5cbldoaWxlIGBuY19jbGVhbmAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbmNfY2xlYW4gPSAqbmNgKS4gRnVydGhlcm1vcmUsIHRoZSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgc3RydWN0IGZpZWxkLWJ5LWZpZWxkIGludG8gbmV0bGluayBhdHRyaWJ1dGVzICh1c2luZyBgbmxhX3B1dGAsIGBubGFfcHV0X3UzMmAsIGV0Yy4pIHJhdGhlciB0aGFuIGNvcHlpbmcgdGhlIHN0cnVjdCBhcyBhIHJhdyBtZW1vcnkgYmxvY2suIFRoaXMgZW5zdXJlcyB0aGF0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBuZXZlciByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkIGl0c2VsZiBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSBzZXJpYWxpemF0aW9uLlxuXG5TaW5jZSB0aGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQsIHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0N2IxZjg1YzZhYTAzODZiOTIwNzIzNGM0NGEwMzE0NmIyNzJiYmVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTY6MDk6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYwppbmRleCBmOWZmY2Q2NzYwN2I1Li5iNzdmOTAxZmMzZWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKQEAgLTMzMDYsNiAmIzQzOzMzMDYsMjYgQEAgc3RhdGljIGludCBubGFfcHV0X2RyYmRfY2ZnX2NvbnRleHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gLUVNU0dTSVpFOwogfQogCiYjNDM7LyoKJiM0MzsgKiBuZXRfY29uZl90b19za2IoKSBzZXJpYWxpemVzIHRoZSBzaGFyZWQgc2VjcmV0IHZlcmJhdGltLiBBbnkgcGF0aCB0aGF0IGNhbgomIzQzOyAqIGFuc3dlciBhIHJlcXVlc3QgZnJvbSBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBtdXN0IHBhc3MgZXhjbHVkZV9zZW5zaXRpdmUsCiYjNDM7ICogc28gdGhlIHNlY3JldCBpcyBibGFua2VkIGluIGEgcHJpdmF0ZSBjb3B5IGJlZm9yZSBpdCByZWFjaGVzIHRoZSBza2IuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqbmMsCiYjNDM7CQkJCSAgICAgYm9vbCBleGNsdWRlX3NlbnNpdGl2ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfY29uZiBuY19jbGVhbjsKJiM0MzsKJiM0MzsJaWYgKCFleGNsdWRlX3NlbnNpdGl2ZSkKJiM0MzsJCXJldHVybiBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7CiYjNDM7CiYjNDM7CW5jX2NsZWFuID0gKm5jOwomIzQzOwltZW1zZXQobmNfY2xlYW4uc2hhcmVkX3NlY3JldCwgMCwgc2l6ZW9mKG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQpKTsKJiM0MzsJbmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgJmFtcDtuY19jbGVhbik7CiYjNDM7fQomIzQzOwogLyoKICAqIFRoZSBnZW5lcmljIG5ldGxpbmsgZHVtcCBjYWxsYmFja3MgYXJlIGNhbGxlZCBvdXRzaWRlIHRoZSBnZW5sX2xvY2soKSwgc28KICAqIHRoZXkgY2Fubm90IHVzZSB0aGUgc2ltcGxlIGF0dHJpYnV0ZSBwYXJzaW5nIGNvZGUgd2hpY2ggdXNlcyBnbG9iYWwKQEAgLTM2MjEsNyAmIzQzOzM2NDEsOCBAQCBpbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrCiAJCQlnb3RvIG91dDsKIAkJbmV0X2NvbmYgPSByY3VfZGVyZWZlcmVuY2UoY29ubmVjdGlvbi0mZ3Q7bmV0X2NvbmYpOwogCQlpZiAobmV0X2NvbmYpIHsKLQkJCWVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5ldF9jb25mKTsKJiM0MzsJCQllcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmV0X2NvbmYsCiYjNDM7CQkJCQkJCSFjYXBhYmxlKENBUF9TWVNfQURNSU4pKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7CiAJCX0KQEAgLTM4NDIsMTggJiM0MzszODYzLDggQEAgc3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLAogCQlzdHJ1Y3QgbmV0X2NvbmYgKm5jOwogCiAJCW5jID0gcmN1X2RlcmVmZXJlbmNlKGZpcnN0X3BlZXJfZGV2aWNlKGRldmljZSktJmd0O2Nvbm5lY3Rpb24tJmd0O25ldF9jb25mKTsKLQkJaWYgKG5jKSB7Ci0JCQlpZiAoZXhjbHVkZV9zZW5zaXRpdmUpIHsKLQkJCQlzdHJ1Y3QgbmV0X2NvbmYgbmNfY2xlYW4gPSAqbmM7Ci0KLQkJCQltZW1zZXQobmNfY2xlYW4uc2hhcmVkX3NlY3JldCwgMCwKLQkJCQkgICAgICAgc2l6ZW9mKG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQpKTsKLQkJCQluY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbiA9IDA7Ci0JCQkJZXJyID0gbmV0X2NvbmZfdG9fc2tiKHNrYiwgJmFtcDtuY19jbGVhbik7Ci0JCQl9IGVsc2UgewotCQkJCWVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTsKLQkJCX0KLQkJfQomIzQzOwkJaWYgKG5jKQomIzQzOwkJCWVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgZXhjbHVkZV9zZW5zaXRpdmUpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAoZXJyKQpAQCAtNDA1OCw3ICYjNDM7NDA2OSw3IEBAIHN0YXRpYyBpbnQgZ2V0X29uZV9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQkJCXN0cnVjdCBuZXRfY29uZiAqbmM7CiAKIAkJCQluYyA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLSZndDtuZXRfY29uZik7Ci0JCQkJaWYgKG5jICZhbXA7JmFtcDsgbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpICE9IDApCiYjNDM7CQkJCWlmIChuYyAmYW1wOyZhbXA7IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgdHJ1ZSkgIT0gMCkKIAkJCQkJZ290byBjYW5jZWw7CiAJCQl9CiAJCQlnb3RvIGRvbmU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFJCRCBQYXRjaCBmb3IgU2Vuc2l0aXZlIERhdGEgRXhwb3N1cmUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJiZF9ubC5jYCB3aXRoaW4gdGhlIERSQkQgYmxvY2sgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZXcgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgIGhlbHBlciBmdW5jdGlvbi4gSSBzZWUgaXQgdGFrZXMgYSBgc3RydWN0IG5ldF9jb25mICpuY2AgYW5kIGEgYm9vbGVhbiBmbGFnIGBleGNsdWRlX3NlbnNpdGl2ZWAuIFRoZSBnb2FsIGlzIHRvIHNhbml0aXplIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYmVmb3JlIHNlbmRpbmcgaXQgb3V0LCBwcmVzdW1hYmx5IG92ZXIgdGhlIG5ldHdvcmsuCgpSaWdodCwgc28gd2hlbiBgZXhjbHVkZV9zZW5zaXRpdmVgIGlzIHRydWUsIGl0ICpjb3BpZXMqIHRoZSBjb250ZW50cyBvZiBgKm5jYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgbmFtZWQgYG5jX2NsZWFuYCwgYW5kIHRoZW4gZXhwbGljaXRseSBjbGVhcnMgdGhlIGBzaGFyZWRfc2VjcmV0YCBhbmQgYHNoYXJlZF9zZWNyZXRfbGVuYCBmaWVsZHMuIEFmdGVyIHRoYXQsIGl0IGNhbGxzIHRoZSBvcmlnaW5hbCBgbmV0X2NvbmZfdG9fc2tiYCBmdW5jdGlvbiwgYnV0IHdpdGggYCZhbXA7bmNfY2xlYW5gLiBNYWtlcyBzZW5zZSwgcmVtb3ZpbmcgdGhlIHNlbnNpdGl2ZSBkYXRhLgoKSGFuZyBvbiBhIHNlY29uZOKApiBgbmNfY2xlYW5gIGlzICpsb2NhbCo/IEl0JiMzOTtzIG9uIHRoZSBzdGFjay4gTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhpcyBgbmNfY2xlYW4gPSAqbmM7YCBhc3NpZ25tZW50LiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4KCklmIGBzdHJ1Y3QgbmV0X2NvbmZgIGhhcyBwYWRkaW5nLCB0aGVuIHRoZSBjb3B5IG1pZ2h0IGJlIGEgc3RyYWlnaHQtdXAgbWVtY3B5LCBvciBpdCBtYXkgaW5pdGlhbGl6ZSBmaWVsZHMgaW4gYSBwZXItZmllbGQgbWFubmVyLiBJbiB0aGUgY2FzZSBvZiBhIG1lbWNweSwgdGhlbiB3aGF0ZXZlciB2YWx1ZXMgd2VyZSBpbiB0aGUgcGFkZGluZyBvZiB0aGUgb3JpZ2luYWwgYCpuY2Agd2lsbCBiZSBjb3BpZWQgaW50byBgbmNfY2xlYW5gIC0tIGlmIHRoZSBwYWRkaW5nIGhhZCB1bmluaXRpYWxpemVkIHZhbHVlcywgdGhlbiBgbmNfY2xlYW5gIHdvdWxkIGhhdmUgdGhlIHNhbWUgdW5pbml0aWFsaXplZCB2YWx1ZXMuIElmIGAqbmNgIHdhcyBmdWxseSBpbml0aWFsaXplZCAodW5saWtlbHkpLCB0aGVuIHNvIHdvdWxkIGJlIGBuY19jbGVhbmAuCgpCdXQgd2FpdOKApiBpdCYjMzk7cyBvbiB0aGUgc3RhY2suIElzIHRoZXJlIGFueSBwYWRkaW5nIGluIHRoYXQgYHN0cnVjdCBuZXRfY29uZmA/IFRoaXMgbmVlZHMgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBpZiB0aGUgc3RydWN0dXJlIGlzIHBhY2tlZCBvciBoYXMgc29tZSBkYXRhIGFsaWdubWVudCByZXF1aXJlbWVudHMuIEkgbmVlZCB0byBnbyBhbmQgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgbmV0X2NvbmZgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBhYm91dCB0aGlzIHBvdGVudGlhbCBmb3IgZGF0YSBsZWFrYWdlLiBUaGUgcG90ZW50aWFsIGhlcmUgaXMgdGhhdCB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSwgb3IgZGF0YSBmcm9tIHRoZSBvcmlnaW5hbCBgKm5jYCBpcyBjb3BpZWQgYW5kIGlzIHRoZXJlZm9yZSBsZWFrZWQgdmlhIHRoZSBuZXR3b3JrIGludGVyZmFjZS4gVGhhdCB3b3VsZCBiZSBiYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBuZXRfY29uZiBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oPTEzMj1zdHJ1Y3QgcmVzX29wdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oLTEzNy1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oOjEzODpzdHJ1Y3QgbmV0X2NvbmYge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtMTM5LVx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBzdHJ1Y3QgbmV0X2NvbmZgIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bGwgc2NvcGUgb2YgYHN0cnVjdCBuZXRfY29uZmAuIEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJiMzOTt2ZSByZWFsbHkgZHVnIGludG8gdGhlIHNwZWNpZmljIGZpZWxkcyBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQuIEkga25vdyBpdCYjMzk7cyBhIGNyaXRpY2FsIHN0cnVjdHVyZSBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uLCBidXQgSSB3YW50IHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgcGljdHVyZSBvZiBpdHMgY2FwYWJpbGl0aWVzIGFuZCBsaW1pdGF0aW9ucyBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIHNlZSAqZXZlcnl0aGluZyog4oCTIGV2ZXJ5IG1lbWJlciwgZXZlcnkgYml0ZmllbGQsIGV2ZXJ5IGNvbW1lbnQgaWYgYXZhaWxhYmxlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcmVjZW50IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIHRoaXMgc3RydWN0LCBhcyBuZXR3b3JrIHByb3RvY29sIGRlc2lnbiBpcyBkeW5hbWljLgoKSSB3YW50IHRvIGtub3cgd2hhdCB0aGlzIHN0cnVjdCBpbmNsdWRlcywgZXNwZWNpYWxseSByZWdhcmRpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhpbmdzIGxpa2U6CgoqICAgQWRkcmVzcyBmYW1pbHkgc3VwcG9ydCAoSVB2NCwgSVB2NiwgZXRjLikKKiAgIFJvdXRpbmcgcHJvdG9jb2xzIHN1cHBvcnRlZAoqICAgUW9TIGNvbmZpZ3VyYXRpb25zCiogICBTZWN1cml0eSBvcHRpb25zCiogICBBbnkgaG9va3MgZm9yIGN1c3RvbSBuZXR3b3JrIHBvbGljaWVzCgpMZXQmIzM5O3MgZ2V0IHRoZSBmdWxsIGRlZmluaXRpb24sIGFuZCBJJiMzOTtsbCBzdGFydCBydW5uaW5nIHRocm91Z2ggaXQgcGllY2UgYnkgcGllY2UsIGNvbnNpZGVyaW5nIGl0cyBpbXBsaWNhdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgbXkgY3VycmVudCB3b3JrLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGVyZSBjb3VsZCBiZSBzb21lIGFyZWFzIHdoZXJlIEkgbmVlZCB0byBhcHBseSBhIG5ldyBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5ldF9jb25mIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oPTEzMj1zdHJ1Y3QgcmVzX29wdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oLTEzNy1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oOjEzODpzdHJ1Y3QgbmV0X2NvbmYge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtMTM5LVx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGRyYmRfbmxfZ2VuLmg6IExpbmUgMTM4IC0gTGV0JiMzOTtzIERpZyBJbioqCgpPa2F5LCBJJiMzOTttIHB1bGxpbmcgdXAgYGRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oYCBub3cuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHNvbWUgb2YgdGhlIGNydWNpYWwgTmV0bGluayBtZXNzYWdlIGRlZmluaXRpb25zIGFyZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lIDEzOC4gSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBsaWtlbHkgZGVmaW5pbmcgYSBzdHJ1Y3R1cmUsIGFuIGVudW0sIG9yIHBlcmhhcHMgZXZlbiBhIG1hY3JvIHJlbGF0ZWQgdG8gdGhlIE5ldGxpbmsgaW50ZXJmYWNlIHVzZWQgYnkgRFJCRC4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbWVzc2FnZSBmb3JtYXQgb3IgYSBrZXkgZWxlbWVudCB1c2VkIGluIHRoZSBjb21tdW5pY2F0aW9uLiBDb3VsZCBiZSBhIHZlcnNpb24gbnVtYmVyLCBhbiBhdHRyaWJ1dGUsIG9yIGEgY29tbWFuZCBjb2RlLiBMaW5lIDEzOC4uLiBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzb21ldGhpbmcgbWVhbmluZ2Z1bCBhbmQgbm90IGp1c3QgYSBjb21tZW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzg6XHRzdHJ1Y3QgbmV0X2NvbmYge1xuIDEzOTpcdFx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcbiAxNDA6XHRcdF9fdTMyIHNoYXJlZF9zZWNyZXRfbGVuO1xuIDE0MTpcdFx0Y2hhciBjcmFtX2htYWNfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcbiAxNDI6XHRcdF9fdTMyIGNyYW1faG1hY19hbGdfbGVuO1xuIDE0MzpcdFx0Y2hhciBpbnRlZ3JpdHlfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcbiAxNDQ6XHRcdF9fdTMyIGludGVncml0eV9hbGdfbGVuO1xuIDE0NTpcdFx0Y2hhciB2ZXJpZnlfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcbiAxNDY6XHRcdF9fdTMyIHZlcmlmeV9hbGdfbGVuO1xuIDE0NzpcdFx0Y2hhciBjc3Vtc19hbGdbU0hBUkVEX1NFQ1JFVF9NQVhdO1xuIDE0ODpcdFx0X191MzIgY3N1bXNfYWxnX2xlbjtcbiAxNDk6XHRcdF9fdTMyIHdpcmVfcHJvdG9jb2w7XG4gMTUwOlx0XHRfX3UzMiBjb25uZWN0X2ludDtcbiAxNTE6XHRcdF9fdTMyIHRpbWVvdXQ7XG4gMTUyOlx0XHRfX3UzMiBwaW5nX2ludDtcbiAxNTM6XHRcdF9fdTMyIHBpbmdfdGltZW87XG4gMTU0Olx0XHRfX3UzMiBzbmRidWZfc2l6ZTtcbiAxNTU6XHRcdF9fdTMyIHJjdmJ1Zl9zaXplO1xuIDE1NjpcdFx0X191MzIga29fY291bnQ7XG4gMTU3Olx0XHRfX3UzMiBtYXhfYnVmZmVycztcbiAxNTg6XHRcdF9fdTMyIG1heF9lcG9jaF9zaXplO1xuIDE1OTpcdFx0X191MzIgdW5wbHVnX3dhdGVybWFyaztcbiAxNjA6XHRcdF9fdTMyIGFmdGVyX3NiXzBwO1xuIDE2MTpcdFx0X191MzIgYWZ0ZXJfc2JfMXA7XG4gMTYyOlx0XHRfX3UzMiBhZnRlcl9zYl8ycDtcbiAxNjM6XHRcdF9fdTMyIHJyX2NvbmZsaWN0O1xuIDE2NDpcdFx0X191MzIgb25fY29uZ2VzdGlvbjtcbiAxNjU6XHRcdF9fdTMyIGNvbmdfZmlsbDtcbiAxNjY6XHRcdF9fdTMyIGNvbmdfZXh0ZW50cztcbiAxNjc6XHRcdHVuc2lnbmVkIGNoYXIgdHdvX3ByaW1hcmllcztcbiAxNjg6XHRcdHVuc2lnbmVkIGNoYXIgZGlzY2FyZF9teV9kYXRhO1xuIDE2OTpcdFx0dW5zaWduZWQgY2hhciB0Y3BfY29yaztcbiAxNzA6XHRcdHVuc2lnbmVkIGNoYXIgYWx3YXlzX2FzYnA7XG4gMTcxOlx0XHR1bnNpZ25lZCBjaGFyIHRlbnRhdGl2ZTtcbiAxNzI6XHRcdHVuc2lnbmVkIGNoYXIgdXNlX3JsZTtcbiAxNzM6XHRcdHVuc2lnbmVkIGNoYXIgY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seTtcbiAxNzQ6XHRcdF9fdTMyIHNvY2tfY2hlY2tfdGltZW87XG4gMTc1Olx0fTtcbiAxNzY6XHRcbiAxNzc6XHRzdHJ1Y3Qgc2V0X3JvbGVfcGFybXMge1xuIDE3ODpcdFx0dW5zaWduZWQgY2hhciBhc3N1bWVfdXB0b2RhdGU7XG4gMTc5Olx0fTtcbiAxODA6XHRcbiAxODE6XHRzdHJ1Y3QgcmVzaXplX3Bhcm1zIHtcbiAxODI6XHRcdF9fdTY0IHJlc2l6ZV9zaXplO1xuIDE4MzpcdFx0dW5zaWduZWQgY2hhciByZXNpemVfZm9yY2U7XG4gMTg0Olx0XHR1bnNpZ25lZCBjaGFyIG5vX3Jlc3luYztcbiAxODU6XHRcdF9fdTMyIGFsX3N0cmlwZXM7XG4gMTg2Olx0XHRfX3UzMiBhbF9zdHJpcGVfc2l6ZTtcbiAxODc6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHN0cnVjdCBuZXRfY29uZmAgTGF5b3V0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3QgbmV0X2NvbmZgIGRlZmluaXRpb24sIGFuZCBpdCYjMzk7cyBtYWtpbmcgbWUgdGhpbmsuIEZpcnN0LCBJIHNlZSB0aGlzIGBjaGFyIHNoYXJlZF9zZWNyZXRbU0hBUkVEX1NFQ1JFVF9NQVhdO2AgYW5kIGl0cyBsZW5ndGggZmllbGQsIGBfX3UzMiBzaGFyZWRfc2VjcmV0X2xlbjtgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIGVub3VnaC4gVGhlbiwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYGNyYW1faG1hY19hbGdgLCBgaW50ZWdyaXR5X2FsZ2AsIGB2ZXJpZnlfYWxnYCwgYW5kIGBjc3Vtc19hbGdgIOKAkyBlYWNoIHdpdGggYSBgW1NIQVJFRF9TRUNSRVRfTUFYXWAgY2hhcmFjdGVyIGFycmF5IGFuZCBhIGNvcnJlc3BvbmRpbmcgbGVuZ3RoIGZpZWxkLiBTZWVtcyBsaWtlIGEgY29uc2lzdGVudCBwYXR0ZXJuIGZvciBoYW5kbGluZyB2YXJpb3VzIGFsZ29yaXRobSBjb25maWd1cmF0aW9ucywgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4sIHRoZXJlJiMzOTtzIGEgYmxvY2sgb2YgYF9fdTMyYCBmaWVsZHMsIHdoaWNoIGFyZSBsaWtlbHkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoKTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgc2VyaWVzIG9mIGB1bnNpZ25lZCBjaGFyYCBmbGFnczogYHR3b19wcmltYXJpZXNgLCBgZGlzY2FyZF9teV9kYXRhYCwgYW5kIHNvIG9uLiBUaGV5IGVuZCB3aXRoIGBjc3Vtc19hZnRlcl9jcmFzaF9vbmx5YC4gQW5kIHRoZW4sIHJpZ2h0IGFmdGVyIHRoYXQsIHdlIGhhdmUgYF9fdTMyIHNvY2tfY2hlY2tfdGltZW9gLiBUaGlzIHNjcmVhbXMgcG90ZW50aWFsIHBhZGRpbmcuCgpHaXZlbiB0aGUgc3RydWN0dXJlLCBpZiBgU0hBUkVEX1NFQ1JFVF9NQVhgIGlzIDY0LCB3aGljaCBpcyBsaWtlbHksIHRoZSBhbGlnbm1lbnQgd291bGQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBJZiB0aG9zZSBjaGFycyBhcmUgcGFja2VkLCB0aGVyZSBhcmUgbGlrZWx5IDcgYnl0ZXMgb2YgcGFkZGluZyBiZWZvcmUgdGhlIGBfX3UzMiBzb2NrX2NoZWNrX3RpbWVvYC4gQWN0dWFsbHksIG5vLiA3IGJ5dGVzIG9mIGB1bnNpZ25lZCBjaGFyYCBwYWRkaW5nIGltcGxpZXMgMSBieXRlIG9mIHBhZGRpbmcgYWZ0ZXIgYGNzdW1zX2FmdGVyX2NyYXNoX29ubHlgLiBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoZSBhY3R1YWwgc2l6ZSBvZiBgU0hBUkVEX1NFQ1JFVF9NQVhgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTSEFSRURfU0VDUkVUX01BWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODYzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBEUkJEIEhlYWRlciBGaWxlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIERSQkQgaW50ZXJuYWxzLCBhbmQgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUgaGVhZGVyIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgd2l0aCBzb21ldGhpbmcgbGlrZSBgaW5jbHVkZS9saW51eC9kcmJkLmhgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgZGVmaW5pdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgYW5kIG1heWJlIHNvbWUga2V5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIHRoZSBEUkJEIG1vZHVsZSBpdHNlbGYuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50IHRvIGJlZ2luIG15IGFuYWx5c2lzLiBGcm9tIHRoZXJlLCBJIGNhbiBhbHdheXMgbmF2aWdhdGUgdG8gb3RoZXIsIG1vcmUgc3BlY2lmaWMgaGVhZGVycyBpZiBuZWVkZWQsIGJ1dCBgZHJiZC5oYCBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O2xsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4gVGltZSB0byBnZXQgY29kaW5nLi4uIGVyciwgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTSEFSRURfU0VDUkVUX01BWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvZHJiZC5oPTI1OT1lbnVtIGRyYmRfc3RhdGVfcnYge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9kcmJkLmgtMjg3LVxuaW5jbHVkZS91YXBpL2xpbnV4L2RyYmQuaDoyODg6I2RlZmluZSBTSEFSRURfU0VDUkVUX01BWCA2NFxuaW5jbHVkZS91YXBpL2xpbnV4L2RyYmQuaC0yODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgRm9vdHByaW50KioKCk9rYXksIGxldCYjMzk7cyBzZWUsIGBTSEFSRURfU0VDUkVUX01BWGAgaXMgZGVmaW5lZCBhcyA2NC4gIFRoYXQgbWVhbnMgZWFjaCBpbnN0YW5jZSBvZiB0aGF0IHNoYXJlZCBzZWNyZXQgY29tcG9uZW50IGlzIGdvaW5nIHRvIHRha2UgdXAgNjQgYnl0ZXMuICBBbmQgd2l0aGluIHRoYXQgc3RydWN0dXJlLCB0aGVyZSYjMzk7cyBhbHNvIHRoZSBsZW5ndGggd2hpY2ggYWRkcyA0IGJ5dGVzLiBUaGF0JiMzOTtzIDY4IGJ5dGVzLCBhbmQgSSBzZWUgaXQgcmVwZWF0ZWQuLi4gZml2ZSB0aW1lcywgc28gd2UmIzM5O3JlIGF0IDY4IHRpbWVzIDUgd2hpY2ggZXF1YWxzIDM0MCBieXRlcyByaWdodCBvZmYgdGhlIGJhdC4gVGhlbiwgdGhlcmUgYXJlIDE4IGBfX3UzMmAgZmllbGRzIGluIHRoZSBzdHJ1Y3Qgd2hpY2ggSSBrbm93IHdpbGwgdGFrZSB1cCA0IGJ5dGVzIGVhY2gsIGxlYWRpbmcgdG8gNzIgYnl0ZXMuIEFmdGVyIHRoYXQgd2UgaGF2ZSA3IGB1bnNpZ25lZCBjaGFyYCBmaWVsZHMgYXQgNyBieXRlcywgYW5kIHRoZW4gYSBmaW5hbCBgX191MzJgIGZpZWxkIGF0IDQgYnl0ZXMsIHNvIGEgdG90YWwgb2YgMTEgYnl0ZXMuIEhvd2V2ZXIsIGhvbGQgb24uICBUaGUgYWxpZ25tZW50ISAgQmVjYXVzZSB0aG9zZSBgdW5zaWduZWQgY2hhcmAgZmllbGRzIHByZWNlZGUgdGhlIGBfX3UzMmAgZmllbGQsIEkgc3Ryb25nbHkgc3VzcGVjdCB0aGVyZSYjMzk7cyBnb2luZyB0byBiZSBwYWRkaW5nIGluc2VydGVkIGFmdGVyIHRob3NlIGNoYXJzIHRvIGFsaWduIHRoZSBgX191MzJgLiBXaGljaCBtZWFucywgd2UgaGF2ZSBwYWRkaW5nIG9mIDEgYnl0ZS4gCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgKmVudGlyZSogc3RydWN0IGF0IG9uY2UsIG9yIGlmIGl0IGRvZXMgYSBmaWVsZC1ieS1maWVsZCBjb3B5LiBUaGlzIHdpbGwgaW5mbHVlbmNlIHRoZSBhcHByb2FjaCBJIHRha2UsIHRvIGVuc3VyZSBtZW1vcnkgaXMgaGFuZGxlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldF9jb25mX3RvX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zMjc0PXN0YXRpYyBpbnQgbmxhX3B1dF9kcmJkX2NmZ19jb250ZXh0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zMzA5LS8qXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjMzMTA6ICogbmV0X2NvbmZfdG9fc2tiKCkgc2VyaWFsaXplcyB0aGUgc2hhcmVkIHNlY3JldCB2ZXJiYXRpbS4gQW55IHBhdGggdGhhdCBjYW5cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxMS0gKiBhbnN3ZXIgYSByZXF1ZXN0IGZyb20gYW4gdW5wcml2aWxlZ2VkIHByb2Nlc3MgbXVzdCBwYXNzIGV4Y2x1ZGVfc2Vuc2l0aXZlLFxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxMy0gKi9cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzMxNDpzdGF0aWMgaW50IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9jb25mICpuYyxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxNS1cdFx0XHRcdCAgICAgYm9vbCBleGNsdWRlX3NlbnNpdGl2ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTMzMTktXHRpZiAoIWV4Y2x1ZGVfc2Vuc2l0aXZlKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozMzIwOlx0XHRyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zMzIxLVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMyNS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzMyNjpcdHJldHVybiBuZXRfY29uZl90b19za2Ioc2tiLCBcdTAwMjZuY19jbGVhbik7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTMzMjctfVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MzU1MT1pbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM2NDMtXHRcdGlmIChuZXRfY29uZikge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozNjQ0Olx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuZXRfY29uZixcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzY0NS1cdFx0XHRcdFx0XHRcdCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM4MjI9c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg2Ni1cdFx0aWYgKG5jKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODY3Olx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgZXhjbHVkZV9zZW5zaXRpdmUpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODY4LVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk4NT1zdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQwNzEtXHRcdFx0XHRuYyA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDA3MjpcdFx0XHRcdGlmIChuYyBcdTAwMjZcdTAwMjYgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCB0cnVlKSAhPSAwKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MDczLVx0XHRcdFx0XHRnb3RvIGNhbmNlbDtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYz0xOTY5PWludCByZXNfb3B0c190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJlc19vcHRzICpzKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTE5OTAtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoxOTkxOmludCBuZXRfY29uZl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9jb25mICpzKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMTk5Mi17XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg9MzI2PWludCBuZXRfY29uZl9udGJfZnJvbV9hdHRycyhzdHJ1Y3QgbmxhdHRyICoqKnJldF9uZXN0ZWRfYXR0cmlidXRlX3RhYmxlLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oOjMyNzppbnQgbmV0X2NvbmZfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqcyk7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC0zMjgtdm9pZCBzZXRfbmV0X2NvbmZfZGVmYXVsdHMoc3RydWN0IG5ldF9jb25mICp4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgRFJCRCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IERSQkQgaGFuZGxlcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgdHJhbnNsYXRlcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaW50byBzb21ldGhpbmcgaXQgY2FuIGFjdHVhbGx5ICp1c2UqIGZvciB0aGUgbmV0d29yayBzdGFjay4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgbmV0X2NvbmZfdG9fc2tiYCB3aXRoaW4gdGhlIGBkcmJkX25sX2dlbi5jYCBmaWxlLCBsb2NhdGVkIGluIHRoZSBibG9jayBkcml2ZXIgc2VjdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGZyb20gbmV0d29yayBjb25maWd1cmF0aW9uIGlucHV0IHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBidWZmZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcnVjaWFsIHBpZWNlIGluIHRoZSBwdXp6bGUgb2YgaG93IERSQkQgY29tbXVuaWNhdGVzIGl0cyBzdGF0ZSBhbmQgY29uZmlnIHBhcmFtZXRlcnMgb3ZlciB0aGUgbmV0d29yay4gSXTigJlzIHdoZXJlIHRoZSBoaWdoLWxldmVsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVzIGFyZSBtYXJzaGFsZWQgaW50byB0aGUga2VybmVs4oCZcyBkYXRhIHN0cnVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdGVwIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24gbWVjaGFuaWNzIHdpdGhpbiBEUkJEJiMzOTtzIG5ldHdvcmtpbmcgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZXkgYXJlIGRvaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTkxOlx0aW50IG5ldF9jb25mX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKnMpXG4xOTkyOlx0e1xuMTk5MzpcdFx0c3RydWN0IG5sYXR0ciAqdGxhID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBEUkJEX05MQV9ORVRfQ09ORik7XG4xOTk0Olx0XG4xOTk1Olx0XHRpZiAoIXRsYSlcbjE5OTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xOTk3Olx0XG4xOTk4Olx0XHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9TSEFSRURfU0VDUkVULCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMTk5OTpcdFx0XHRcdHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gJiM0MzsgKHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXHUwMDNlc2hhcmVkX3NlY3JldCkpXG4yMDAwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAwMTpcdFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1JBTV9ITUFDX0FMRywgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCxcbjIwMDI6XHRcdFx0XHRzLVx1MDAzZWNyYW1faG1hY19hbGdfbGVuICYjNDM7IChzLVx1MDAzZWNyYW1faG1hY19hbGdfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVx1MDAzZWNyYW1faG1hY19hbGcpKVxuMjAwMzpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMDQ6XHRcdGlmIChubGFfcHV0KHNrYiwgRFJCRF9BX05FVF9DT05GX0lOVEVHUklUWV9BTEcsIG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsXG4yMDA1Olx0XHRcdFx0cy1cdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiAmIzQzOyAocy1cdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiBcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cdTAwM2VpbnRlZ3JpdHlfYWxnKSlcbjIwMDY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDA3Olx0XHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9WRVJJRllfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMjAwODpcdFx0XHRcdHMtXHUwMDNldmVyaWZ5X2FsZ19sZW4gJiM0MzsgKHMtXHUwMDNldmVyaWZ5X2FsZ19sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXHUwMDNldmVyaWZ5X2FsZykpXG4yMDA5Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxMDpcdFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMjAxMTpcdFx0XHRcdHMtXHUwMDNlY3N1bXNfYWxnX2xlbiAmIzQzOyAocy1cdTAwM2Vjc3Vtc19hbGdfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVx1MDAzZWNzdW1zX2FsZykpXG4yMDEyOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxMzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1dJUkVfUFJPVE9DT0wsIHMtXHUwMDNld2lyZV9wcm90b2NvbCkpXG4yMDE0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxNTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTk5FQ1RfSU5ULCBzLVx1MDAzZWNvbm5lY3RfaW50KSlcbjIwMTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDE3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVElNRU9VVCwgcy1cdTAwM2V0aW1lb3V0KSlcbjIwMTg6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDE5Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUElOR19JTlQsIHMtXHUwMDNlcGluZ19pbnQpKVxuMjAyMDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjE6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9QSU5HX1RJTUVPLCBzLVx1MDAzZXBpbmdfdGltZW8pKVxuMjAyMjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjM6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9TTkRCVUZfU0laRSwgcy1cdTAwM2VzbmRidWZfc2l6ZSkpXG4yMDI0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAyNTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JDVkJVRl9TSVpFLCBzLVx1MDAzZXJjdmJ1Zl9zaXplKSlcbjIwMjY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDI3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfS09fQ09VTlQsIHMtXHUwMDNla29fY291bnQpKVxuMjAyODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjk6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9NQVhfQlVGRkVSUywgcy1cdTAwM2VtYXhfYnVmZmVycykpXG4yMDMwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAzMTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX01BWF9FUE9DSF9TSVpFLCBzLVx1MDAzZW1heF9lcG9jaF9zaXplKSlcbjIwMzI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDMzOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVU5QTFVHX1dBVEVSTUFSSywgcy1cdTAwM2V1bnBsdWdfd2F0ZXJtYXJrKSlcbjIwMzQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDM1Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUZURVJfU0JfMFAsIHMtXHUwMDNlYWZ0ZXJfc2JfMHApKVxuMjAzNjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMzc6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9BRlRFUl9TQl8xUCwgcy1cdTAwM2VhZnRlcl9zYl8xcCkpXG4yMDM4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAzOTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0FGVEVSX1NCXzJQLCBzLVx1MDAzZWFmdGVyX3NiXzJwKSlcbjIwNDA6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NzMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEYXRhIENvcHlpbmcgaW4gYG5ldF9jb25mX3RvX3NrYmAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBuZXRfY29uZl90b19za2JgIGhhbmRsZXMgZGF0YSBjb3B5aW5nLiBJdCBsb29rcyBsaWtlIGl0IGRvZXNuJiMzOTt0IGRvIGEgc2ltcGxlIGBtZW1jcHlgIG9mIHRoZSBlbnRpcmUgc3RydWN0LiBTbWFydCwgYmVjYXVzZSB0aGF0IHdvdWxkIGJlIGluZWZmaWNpZW50LiBJbnN0ZWFkLCBpdCYjMzk7cyB1c2luZyBgbmxhX3B1dGAgYW5kIGBubGFfcHV0X3UzMmAgdG8gY29weSBmaWVsZHMgaW5kaXZpZHVhbGx5LiBUaGF0IG1ha2VzIHNlbnNlLCB5b3Ugb25seSBzZW5kIHdoYXQgeW91IG5lZWQuCgpBaGEhIGBubGFfcHV0X3UzMmAgaXMgZXhwbGljaXRseSBjb3B5aW5nIGp1c3QgNCBieXRlcywgc28gaXQmIzM5O3MgaGFuZGxpbmcgdGhlIDMyIGJpdCBpbnRzLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoaXM6IHRoZSBgbmxhX3B1dGAgaXMgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydC4gSXQgY29waWVzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gYHMtJmd0O3NoYXJlZF9zZWNyZXRgIHVzaW5nIGBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLCBzLSZndDtzaGFyZWRfc2VjcmV0X2xlbiAmIzQzOyAocy0mZ3Q7c2hhcmVkX3NlY3JldF9sZW4gJmx0OyBTSEFSRURfU0VDUkVUX01BWCkpYC4gTGV0IG1lIHBhcnNlIHRoYXQuIE9rLCBpdCYjMzk7cyBjb3B5aW5nIGVpdGhlciB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgc2hhcmVkIHNlY3JldCwgb3IgYFNIQVJFRF9TRUNSRVRfTUFYYCAod2hpY2hldmVyIGlzIHNtYWxsZXIpIHBsdXMgdGhlIG51bGwgdGVybWluYXRvciAoaWYgaXQgZml0cykuIEJhc2ljYWxseSwgaXQmIzM5O3Mgb25seSBjb3B5aW5nIHRoZSAqc3RyaW5nKiBvZiB0aGUgc2hhcmVkIHNlY3JldCwgbm90IHRoZSB3aG9sZSBwb3RlbnRpYWxseSBwYWRkZWQgc3BhY2UgYWxsb2NhdGVkIGZvciBpdCB3aXRoaW4gdGhlIHN0cnVjdCEKClRoaXMgaXMgYSBrZXkgb3B0aW1pemF0aW9uLiBJdCBhdm9pZHMgdW5uZWNlc3NhcnkgZGF0YSB0cmFuc2ZlciBhbmQga2VlcHMgdGhpbmdzIGxlYW4uIEJ1dCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7dmUgZ290IHRvIGNvbnNpZGVyIGFsbCB0aGUgb3RoZXIgZmllbGRzIGluIHRoZSBzdHJ1Y3QuIEkgbmVlZCB0byBrZWVwIHJlYWRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiB0byBzZWUgaG93IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBldmVyeXRoaW5nIGVsc2UuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgb3RoZXIgZ290Y2hhcyBvciBvcHRpbWl6YXRpb25zIEkmIzM5O3ZlIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA0MTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JSX0NPTkZMSUNULCBzLVx1MDAzZXJyX2NvbmZsaWN0KSlcbjIwNDI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDQzOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfT05fQ09OR0VTVElPTiwgcy1cdTAwM2Vvbl9jb25nZXN0aW9uKSlcbjIwNDQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDQ1Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ09OR19GSUxMLCBzLVx1MDAzZWNvbmdfZmlsbCkpXG4yMDQ2Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA0NzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTkdfRVhURU5UUywgcy1cdTAwM2Vjb25nX2V4dGVudHMpKVxuMjA0ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNDk6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RXT19QUklNQVJJRVMsIHMtXHUwMDNldHdvX3ByaW1hcmllcykpXG4yMDUwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA1MTpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfRElTQ0FSRF9NWV9EQVRBLCBzLVx1MDAzZWRpc2NhcmRfbXlfZGF0YSkpXG4yMDUyOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA1MzpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVENQX0NPUkssIHMtXHUwMDNldGNwX2NvcmspKVxuMjA1NDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNTU6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0FMV0FZU19BU0JQLCBzLVx1MDAzZWFsd2F5c19hc2JwKSlcbjIwNTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDU3Olx0XHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9URU5UQVRJVkUsIHMtXHUwMDNldGVudGF0aXZlKSlcbjIwNTg6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDU5Olx0XHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9VU0VfUkxFLCBzLVx1MDAzZXVzZV9ybGUpKVxuMjA2MDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNjE6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0NTVU1TX0FGVEVSX0NSQVNIX09OTFksIHMtXHUwMDNlY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seSkpXG4yMDYyOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA2MzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1NPQ0tfQ0hFQ0tfVElNRU8sIHMtXHUwMDNlc29ja19jaGVja190aW1lbykpXG4yMDY0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA2NTpcdFxuMjA2NjpcdFx0bmxhX25lc3RfZW5kKHNrYiwgdGxhKTtcbjIwNjc6XHRcdHJldHVybiAwO1xuMjA2ODpcdFxuMjA2OTpcdG5sYV9wdXRfZmFpbHVyZTpcbjIwNzA6XHRcdGlmICh0bGEpXG4yMDcxOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIHRsYSk7XG4yMDcyOlx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjA3MzpcdH1cbjIwNzQ6XHRcbjIwNzU6XHRpbnQgc2V0X3JvbGVfcGFybXNfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZXRfcm9sZV9wYXJtcyAqcylcbjIwNzY6XHR7XG4yMDc3Olx0XHRzdHJ1Y3QgbmxhdHRyICp0bGEgPSBubGFfbmVzdF9zdGFydChza2IsIERSQkRfTkxBX1NFVF9ST0xFX1BBUk1TKTtcbjIwNzg6XHRcbjIwNzk6XHRcdGlmICghdGxhKVxuMjA4MDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwODE6XHRcbjIwODI6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX1NFVF9ST0xFX1BBUk1TX0FTU1VNRV9VUFRPREFURSwgcy1cdTAwM2Vhc3N1bWVfdXB0b2RhdGUpKVxuMjA4MzpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwODQ6XHRcbjIwODU6XHRcdG5sYV9uZXN0X2VuZChza2IsIHRsYSk7XG4yMDg2Olx0XHRyZXR1cm4gMDtcbjIwODc6XHRcbjIwODg6XHRubGFfcHV0X2ZhaWx1cmU6XG4yMDg5Olx0XHRpZiAodGxhKVxuMjA5MDpcdFx0XHRubGFfbmVzdF9jYW5jZWwoc2tiLCB0bGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBTYW5pdGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5ldF9jb25mX3RvX3NrYmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGRvaW5nIGEgZmllbGQtYnktZmllbGQgY29weS4gTm90aGluZyB0b28gc3VycHJpc2luZyB0aGVyZS4gQnV0IHdhaXQsIHRoZW4gYG5sYV9wdXRgIGlzIGludm9sdmVkLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNvcHlpbmcgYG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsIHMtJmd0O3NoYXJlZF9zZWNyZXRfbGVuICYjNDM7IChzLSZndDtzaGFyZWRfc2VjcmV0X2xlbiAmbHQ7IFNIQVJFRF9TRUNSRVRfTUFYKSlgIGJ5dGVzIGZyb20gYHMtJmd0O3NoYXJlZF9zZWNyZXRgLiBSaWdodCwgY2xhc3NpYyBgbmxhX3B1dGAgdXNhZ2UuCgpOb3csIGlmIGBleGNsdWRlX3NlbnNpdGl2ZWAgaXMgdHJ1ZSwgdGhlIGNvZGUgemVyb2VzIG91dCBgbmNfY2xlYW4uc2hhcmVkX3NlY3JldGAgYW5kIHNldHMgYG5jX2NsZWFuLnNoYXJlZF9zZWNyZXRfbGVuYCB0byAwLiBTbywgd2hlbiBgbmxhX3B1dGAgcnVucyB3aXRoIHRoaXMgc2FuaXRpemVkIGBuY19jbGVhbmAsIGl0IHdpbGwgY29weSBgbWluX3QoaW50LCA2NCwgMCAmIzQzOyAoMCAmbHQ7IDY0KSlgLCB3aGljaCBzaW1wbGlmaWVzIHRvIGp1c3QgMSBieXRlLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGNvcHlpbmcgYSBzaW5nbGUgYnl0ZSBmcm9tIGBuY19jbGVhbi5zaGFyZWRfc2VjcmV0YC4gQW5kIHNpbmNlIHRoYXQmIzM5O3MgYmVlbiB6ZXJvZWQsIGl0JiMzOTtzIGNvcHlpbmcgYSAwIGJ5dGUuIE1ha2VzIHNlbnNlLgoKQnV0IGhvbGQgb24sIHdoYXQgYWJvdXQgYWxsIHRoZSBvdGhlciBmaWVsZHM/IFRoZSBjb2RlIGRvZXMgYSBgbmNfY2xlYW4gPSAqbmM7YCB3aGljaCBjb3BpZXMgZXZlcnl0aGluZyBmcm9tIGBuY2AgdG8gYG5jX2NsZWFuYC4gTm93IEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGBuY2AgYWZ0ZXIgaXQmIzM5O3MgYWxsb2NhdGVkLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYG5jYCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB0byBiZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXA7IEkgbmVlZCB0byBmb2xsb3cgdGhlIGFsbG9jYXRpb24gb2YgYG5ldF9jb25mYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvYy4qc2l6ZW9mLipuZXRfY29uZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipTZWFyY2hpbmcgZm9yIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb2RlIHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBtZW1vcnkgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiBkYXRhLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cnkgYW5kIHBpbnBvaW50IGl0IGRpcmVjdGx5IHVzaW5nIGEgY291cGxlIG9mIGRpZmZlcmVudCBhcHByb2FjaGVzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGluc3RhbmNlcyB3aGVyZSBga21hbGxvY2AgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBzaXplb2ZgIG9wZXJhdG9yIGNhbGN1bGF0aW9ucyB0aGF0IGludm9sdmUgYG5ldF9jb25mYC4gVGhhdCBzaG91bGQgZGlyZWN0bHkgaWRlbnRpZnkgYWxsb2NhdGlvbnMgd2l0aCB0aGUga2VybmVsIG1lbW9yeSBhbGxvY2F0b3IuIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNjb3BlIHNsaWdodGx5IGlmIHRoYXQmIzM5O3MgdG9vIHJlc3RyaWN0aXZlLiBJZiBJJiMzOTttIG5vdCBzdWNjZXNzZnVsIHdpdGggdGhlIGBrbWFsbG9jYCBzZWFyY2gsIHRoZW4gSSYjMzk7bGwgbG9vayBmb3IgZ2VuZXJhbCBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBzdWNoIGFzIGBhbGxvY2AsIGxpa2VseSBjb3VwbGVkIHdpdGggYG5ldF9jb25mYCBhcyB0aGUgZGF0YSBiZWluZyBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBzb2xpZCwgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gZmluZGluZyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2MuKm5ldF9jb25mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTIzOTU9c3RhdGljIGVudW0gZHJiZF9yZXRfY29kZVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyMzk2OmFsbG9jX2NyeXB0byhzdHJ1Y3QgY3J5cHRvICpjcnlwdG8sIHN0cnVjdCBuZXRfY29uZiAqbmV3X25ldF9jb25mKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yMzk3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0MDAtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI0MDE6XHRydiA9IGFsbG9jX3NoYXNoKFx1MDAyNmNyeXB0by1cdTAwM2Vjc3Vtc190Zm0sIG5ld19uZXRfY29uZi1cdTAwM2Vjc3Vtc19hbGcsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0MDItXHRcdFx0IEVSUl9DU1VNU19BTEcpO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQwNC1cdFx0cmV0dXJuIHJ2O1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNDA1Olx0cnYgPSBhbGxvY19zaGFzaChcdTAwMjZjcnlwdG8tXHUwMDNldmVyaWZ5X3RmbSwgbmV3X25ldF9jb25mLVx1MDAzZXZlcmlmeV9hbGcsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0MDYtXHRcdFx0IEVSUl9WRVJJRllfQUxHKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0MDgtXHRcdHJldHVybiBydjtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MjQwOTpcdHJ2ID0gYWxsb2Nfc2hhc2goXHUwMDI2Y3J5cHRvLVx1MDAzZWludGVncml0eV90Zm0sIG5ld19uZXRfY29uZi1cdTAwM2VpbnRlZ3JpdHlfYWxnLFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDEwLVx0XHRcdCBFUlJfSU5URUdSSVRZX0FMRyk7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0yNDMyPWludCBkcmJkX25sX2NoZ19uZXRfb3B0c19kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDUyLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNDUzOlx0bmV3X25ldF9jb25mID0ga3phbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQ1NC1cdGlmICghbmV3X25ldF9jb25mKSB7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNTEyLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNTEzOlx0cmV0Y29kZSA9IGFsbG9jX2NyeXB0byhcdTAwMjZjcnlwdG8sIG5ld19uZXRfY29uZik7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI1MTQtXHRpZiAocmV0Y29kZSAhPSBOT19FUlJPUilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTI1ODc9aW50IGRyYmRfbmxfY29ubmVjdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNjQ0LVx0LyogYWxsb2NhdGlvbiBub3QgaW4gdGhlIElPIHBhdGgsIGRyYmRzZXR1cCAvIG5ldGxpbmsgcHJvY2VzcyBjb250ZXh0ICovXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI2NDU6XHRuZXdfbmV0X2NvbmYgPSBremFsbG9jX29iaigqbmV3X25ldF9jb25mKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjY0Ni1cdGlmICghbmV3X25ldF9jb25mKSB7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNjYzLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNjY0Olx0cmV0Y29kZSA9IGFsbG9jX2NyeXB0byhcdTAwMjZjcnlwdG8sIG5ld19uZXRfY29uZik7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI2NjUtXHRpZiAocmV0Y29kZSAhPSBOT19FUlJPUilcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jPTM0NDU9c3RhdGljIGludCByZWNlaXZlX3Byb3RvY29sKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHN0cnVjdCBwYWNrZXRfaW5mbyAqcGkpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy0zNTQ5LVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYzozNTUwOlx0bmV3X25ldF9jb25mID0ga21hbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMtMzU1MS1cdGlmICghbmV3X25ldF9jb25mKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM9MzY1ND1zdGF0aWMgaW50IHJlY2VpdmVfU3luY1BhcmFtKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHN0cnVjdCBwYWNrZXRfaW5mbyAqcGkpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy0zNzk2LVx0XHRpZiAodmVyaWZ5X3RmbSB8fCBjc3Vtc190Zm0pIHtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmM6Mzc5NzpcdFx0XHRuZXdfbmV0X2NvbmYgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0X2NvbmYpO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy0zNzk4LVx0XHRcdGlmICghbmV3X25ldF9jb25mKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMyMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gaW4gYHJlY2VpdmVfcHJvdG9jb2xgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGByZWNlaXZlX3Byb3RvY29sYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgRFJCRCByZWNlaXZlciBjb2RlLCBhbmQgSSBzZWUgc29tZXRoaW5nIHRoYXQmIzM5O3MgbWFraW5nIG1lIHBhdXNlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB1c2luZyBga21hbGxvY19vYmooc3RydWN0IG5ldF9jb25mKWAgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBgbmV3X25ldF9jb25mYC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcmVjZWl2ZV9wcm90b2NvbGAgZnVuY3Rpb24gdG8gc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBuZXRfY29uZmAgc3RydWN0dXJlIGlzIHVzZWQgYW5kIHdoYXQgdGhpcyBtZWFucyBmb3IgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzU0MDpcdFxuMzU0MTpcdFx0XHRoYXNoX3NpemUgPSBjcnlwdG9fc2hhc2hfZGlnZXN0c2l6ZShwZWVyX2ludGVncml0eV90Zm0pO1xuMzU0MjpcdFx0XHRpbnRfZGlnX2luID0ga21hbGxvYyhoYXNoX3NpemUsIEdGUF9LRVJORUwpO1xuMzU0MzpcdFx0XHRpbnRfZGlnX3Z2ID0ga21hbGxvYyhoYXNoX3NpemUsIEdGUF9LRVJORUwpO1xuMzU0NDpcdFx0XHRpZiAoIShpbnRfZGlnX2luIFx1MDAyNlx1MDAyNiBpbnRfZGlnX3Z2KSkge1xuMzU0NTpcdFx0XHRcdGRyYmRfZXJyKGNvbm5lY3Rpb24sIFwmIzM0O0FsbG9jYXRpb24gb2YgYnVmZmVycyBmb3IgZGF0YSBpbnRlZ3JpdHkgY2hlY2tpbmcgZmFpbGVkXFxuXCYjMzQ7KTtcbjM1NDY6XHRcdFx0XHRnb3RvIGRpc2Nvbm5lY3Q7XG4zNTQ3Olx0XHRcdH1cbjM1NDg6XHRcdH1cbjM1NDk6XHRcbjM1NTA6XHRcdG5ld19uZXRfY29uZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZXRfY29uZik7XG4zNTUxOlx0XHRpZiAoIW5ld19uZXRfY29uZilcbjM1NTI6XHRcdFx0Z290byBkaXNjb25uZWN0O1xuMzU1MzpcdFxuMzU1NDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb25uZWN0aW9uLVx1MDAzZWRhdGEubXV0ZXgpO1xuMzU1NTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb25uZWN0aW9uLVx1MDAzZXJlc291cmNlLVx1MDAzZWNvbmZfdXBkYXRlKTtcbjM1NTY6XHRcdG9sZF9uZXRfY29uZiA9IGNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmY7XG4zNTU3Olx0XHQqbmV3X25ldF9jb25mID0gKm9sZF9uZXRfY29uZjtcbjM1NTg6XHRcbjM1NTk6XHRcdG5ld19uZXRfY29uZi1cdTAwM2V3aXJlX3Byb3RvY29sID0gcF9wcm90bztcbjM1NjA6XHRcdG5ld19uZXRfY29uZi1cdTAwM2VhZnRlcl9zYl8wcCA9IGNvbnZlcnRfYWZ0ZXJfc2IocF9hZnRlcl9zYl8wcCk7XG4zNTYxOlx0XHRuZXdfbmV0X2NvbmYtXHUwMDNlYWZ0ZXJfc2JfMXAgPSBjb252ZXJ0X2FmdGVyX3NiKHBfYWZ0ZXJfc2JfMXApO1xuMzU2MjpcdFx0bmV3X25ldF9jb25mLVx1MDAzZWFmdGVyX3NiXzJwID0gY29udmVydF9hZnRlcl9zYihwX2FmdGVyX3NiXzJwKTtcbjM1NjM6XHRcdG5ld19uZXRfY29uZi1cdTAwM2V0d29fcHJpbWFyaWVzID0gcF90d29fcHJpbWFyaWVzO1xuMzU2NDpcdFxuMzU2NTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYsIG5ld19uZXRfY29uZik7XG4zNTY2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29ubmVjdGlvbi1cdTAwM2VyZXNvdXJjZS1cdTAwM2Vjb25mX3VwZGF0ZSk7XG4zNTY3Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29ubmVjdGlvbi1cdTAwM2VkYXRhLm11dGV4KTtcbjM1Njg6XHRcbjM1Njk6XHRcdGNyeXB0b19mcmVlX3NoYXNoKGNvbm5lY3Rpb24tXHUwMDNlcGVlcl9pbnRlZ3JpdHlfdGZtKTtcbjM1NzA6XHRcdGtmcmVlKGNvbm5lY3Rpb24tXHUwMDNlaW50X2RpZ19pbik7XG4zNTcxOlx0XHRrZnJlZShjb25uZWN0aW9uLVx1MDAzZWludF9kaWdfdnYpO1xuMzU3MjpcdFx0Y29ubmVjdGlvbi1cdTAwM2VwZWVyX2ludGVncml0eV90Zm0gPSBwZWVyX2ludGVncml0eV90Zm07XG4zNTczOlx0XHRjb25uZWN0aW9uLVx1MDAzZWludF9kaWdfaW4gPSBpbnRfZGlnX2luO1xuMzU3NDpcdFx0Y29ubmVjdGlvbi1cdTAwM2VpbnRfZGlnX3Z2ID0gaW50X2RpZ192djtcbjM1NzU6XHRcbjM1NzY6XHRcdGlmIChzdHJjbXAob2xkX25ldF9jb25mLVx1MDAzZWludGVncml0eV9hbGcsIGludGVncml0eV9hbGcpKVxuMzU3NzpcdFx0XHRkcmJkX2luZm8oY29ubmVjdGlvbiwgXCYjMzQ7cGVlciBkYXRhLWludGVncml0eS1hbGc6ICVzXFxuXCYjMzQ7LFxuMzU3ODpcdFx0XHRcdCAgaW50ZWdyaXR5X2FsZ1swXSA/IGludGVncml0eV9hbGcgOiBcJiMzNDsobm9uZSlcJiMzNDspO1xuMzU3OTpcdFxuMzU4MDpcdFx0a3ZmcmVlX3JjdV9taWdodHNsZWVwKG9sZF9uZXRfY29uZik7XG4zNTgxOlx0XHRyZXR1cm4gMDtcbjM1ODI6XHRcbjM1ODM6XHRkaXNjb25uZWN0X3JjdV91bmxvY2s6XG4zNTg0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjM1ODU6XHRkaXNjb25uZWN0OlxuMzU4NjpcdFx0Y3J5cHRvX2ZyZWVfc2hhc2gocGVlcl9pbnRlZ3JpdHlfdGZtKTtcbjM1ODc6XHRcdGtmcmVlKGludF9kaWdfaW4pO1xuMzU4ODpcdFx0a2ZyZWUoaW50X2RpZ192dik7XG4zNTg5Olx0XHRjb25uX3JlcXVlc3Rfc3RhdGUoY29ubmVjdGlvbiwgTlMoY29ubiwgQ19ESVNDT05ORUNUSU5HKSwgQ1NfSEFSRCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhZGRpbmcgQ29uY2VybnMgaW4gYG5ldF9jb25mYCBTdHJ1Y3QgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHJlY2VpdmVfcHJvdG9jb2xgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZ3JhYmJpbmcgYSBuZXcgYG5ldF9jb25mYCBzdHJ1Y3QgdXNpbmcgYGttYWxsb2Nfb2JqYC4gU2VlbXMgc3RhbmRhcmQgZW5vdWdoLiBCdXQgdGhlbiwgaXQgaW1tZWRpYXRlbHkgY29waWVzIHRoZSAqZW50aXJlKiBjb250ZW50cyBvZiBgb2xkX25ldF9jb25mYCBpbnRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgb25lIHdpdGggYCpuZXdfbmV0X2NvbmYgPSAqb2xkX25ldF9jb25mO2AuIE5vdywgd2hlcmUgaXMgYG9sZF9uZXRfY29uZmAgZXZlbiBjb21pbmcgZnJvbT8gUmlnaHQsIGl0JiMzOTtzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAgaW4gYGRyYmRfbmxfY29ubmVjdF9kb2l0YCBhbmQgYGRyYmRfbmxfY2hnX25ldF9vcHRzX2RvaXRgLiBUaGF0IG1lYW5zIHRoZSBvcmlnaW5hbCBgbmV0X2NvbmZgIGlzIHplcm8taW5pdGlhbGl6ZWQuCgpTbywgdGhpcyBpbml0aWFsIGNvcHkgemVyb3Mgb3V0IHRoZSBwYWRkaW5nLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBwb3RlbnRpYWwgaXNzdWVzLiBCdXQgaXQgZ290IG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgd2hlbiBgbmNfY2xlYW4gPSAqbmM7YCBpcyB1c2VkPyBUaGF0IGxvb2tzIGxpa2UgaXQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3QgZnJvbSBgKm5jYCB3aGljaCBzaG91bGQgaW5jbHVkZSB0aGUgcGFkZGluZy4gSWYgYCpuY2AgaGFzIHplcm9lZCBwYWRkaW5nICh3aGljaCBpdCBzaG91bGQsIGZyb20gdGhlIHByZXZpb3VzIGFsbG9jYXRpb24pLCB0aGVuIGBuY19jbGVhbmAgc2hvdWxkICphbHNvKiBoYXZlIHplcm9lZCBwYWRkaW5nLiBUaGlzIGlzIGEgbG9jYWwgdmFyaWFibGUgb24gdGhlIHN0YWNrLCBub3QgdW5pbml0aWFsaXplZC4KClRoZSBuYWdnaW5nIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IGNhc2VzIHdoZXJlIGBuY19jbGVhbmAgKndvdWxkKiBlbmQgdXAgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmc/IFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyB0cmlja3kuIElmIGAqbmNgIGlzIGFzc2lnbmVkIGZpZWxkLWJ5LWZpZWxkLCB0aGVuIHRoZSBwYWRkaW5nIG1pZ2h0IG5vdCBnZXQgY29waWVkLiBTdHJ1Y3QgYXNzaWdubWVudHMgaW4gQywgZGVwZW5kaW5nIG9uIHRoZSBjb21waWxlciYjMzk7cyBvcHRpbWl6YXRpb24sIGNvdWxkIHBvdGVudGlhbGx5IGRvIHRoaXMgZmllbGQtYnktZmllbGQgY29weSwgc2tpcHBpbmcgb3ZlciB0aGUgcGFkZGluZy4gSWYgdGhhdCBoYXBwZW5zLCB0aGVuIGBuY19jbGVhbmAmIzM5O3MgcGFkZGluZyBpcyBsZWZ0IGFzIHdoYXRldmVyIGdhcmJhZ2Ugd2FzIG9uIHRoZSBzdGFjay4KClRoZW4sIHRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBuZXRfY29uZl90b19za2JgIGlzIGNhbGxlZCB3aXRoIGAmYW1wO25jX2NsZWFuYC4gTm93LCBteSB1bmRlcnN0YW5kaW5nIGlzIGBuZXRfY29uZl90b19za2JgIGNvcGllcyBmaWVsZCBieSBmaWVsZCwgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfdThgLCBhbmQgYG5sYV9wdXRgIGZvciBzdHJpbmdzLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgaXQgKmRvZXNuJiMzOTt0KiBjb3B5IHRoZSBwYWRkaW5nIGl0c2VsZiBpbnRvIHRoZSBTS0IsIHdoaWNoIGlzIGNydWNpYWwuIFNvLCBpdCBsb29rcyBsaWtlIGBuZXRfY29uZl90b19za2JgIHdvbiYjMzk7dCBsZWFrIHRoZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgaW4gdGhlICp1c3VhbCogY2FzZS4gQnV0IGxldCBtZSBkb3VibGUtY2hlY2sgYG5ldF9jb25mX3RvX3NrYmAganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTkxOlx0aW50IG5ldF9jb25mX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKnMpXG4xOTkyOlx0e1xuMTk5MzpcdFx0c3RydWN0IG5sYXR0ciAqdGxhID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBEUkJEX05MQV9ORVRfQ09ORik7XG4xOTk0Olx0XG4xOTk1Olx0XHRpZiAoIXRsYSlcbjE5OTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xOTk3Olx0XG4xOTk4Olx0XHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9TSEFSRURfU0VDUkVULCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMTk5OTpcdFx0XHRcdHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gJiM0MzsgKHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXHUwMDNlc2hhcmVkX3NlY3JldCkpXG4yMDAwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAwMTpcdFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1JBTV9ITUFDX0FMRywgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCxcbjIwMDI6XHRcdFx0XHRzLVx1MDAzZWNyYW1faG1hY19hbGdfbGVuICYjNDM7IChzLVx1MDAzZWNyYW1faG1hY19hbGdfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVx1MDAzZWNyYW1faG1hY19hbGcpKVxuMjAwMzpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMDQ6XHRcdGlmIChubGFfcHV0KHNrYiwgRFJCRF9BX05FVF9DT05GX0lOVEVHUklUWV9BTEcsIG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsXG4yMDA1Olx0XHRcdFx0cy1cdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiAmIzQzOyAocy1cdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiBcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cdTAwM2VpbnRlZ3JpdHlfYWxnKSlcbjIwMDY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDA3Olx0XHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9WRVJJRllfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMjAwODpcdFx0XHRcdHMtXHUwMDNldmVyaWZ5X2FsZ19sZW4gJiM0MzsgKHMtXHUwMDNldmVyaWZ5X2FsZ19sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXHUwMDNldmVyaWZ5X2FsZykpXG4yMDA5Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxMDpcdFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxuMjAxMTpcdFx0XHRcdHMtXHUwMDNlY3N1bXNfYWxnX2xlbiAmIzQzOyAocy1cdTAwM2Vjc3Vtc19hbGdfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVx1MDAzZWNzdW1zX2FsZykpXG4yMDEyOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxMzpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1dJUkVfUFJPVE9DT0wsIHMtXHUwMDNld2lyZV9wcm90b2NvbCkpXG4yMDE0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAxNTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTk5FQ1RfSU5ULCBzLVx1MDAzZWNvbm5lY3RfaW50KSlcbjIwMTY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDE3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVElNRU9VVCwgcy1cdTAwM2V0aW1lb3V0KSlcbjIwMTg6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDE5Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUElOR19JTlQsIHMtXHUwMDNlcGluZ19pbnQpKVxuMjAyMDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjE6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9QSU5HX1RJTUVPLCBzLVx1MDAzZXBpbmdfdGltZW8pKVxuMjAyMjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjM6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9TTkRCVUZfU0laRSwgcy1cdTAwM2VzbmRidWZfc2l6ZSkpXG4yMDI0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAyNTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JDVkJVRl9TSVpFLCBzLVx1MDAzZXJjdmJ1Zl9zaXplKSlcbjIwMjY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDI3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfS09fQ09VTlQsIHMtXHUwMDNla29fY291bnQpKVxuMjAyODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMjk6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9NQVhfQlVGRkVSUywgcy1cdTAwM2VtYXhfYnVmZmVycykpXG4yMDMwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAzMTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX01BWF9FUE9DSF9TSVpFLCBzLVx1MDAzZW1heF9lcG9jaF9zaXplKSlcbjIwMzI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDMzOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVU5QTFVHX1dBVEVSTUFSSywgcy1cdTAwM2V1bnBsdWdfd2F0ZXJtYXJrKSlcbjIwMzQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDM1Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUZURVJfU0JfMFAsIHMtXHUwMDNlYWZ0ZXJfc2JfMHApKVxuMjAzNjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwMzc6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9BRlRFUl9TQl8xUCwgcy1cdTAwM2VhZnRlcl9zYl8xcCkpXG4yMDM4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjAzOTpcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0FGVEVSX1NCXzJQLCBzLVx1MDAzZWFmdGVyX3NiXzJwKSlcbjIwNDA6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDQxOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUlJfQ09ORkxJQ1QsIHMtXHUwMDNlcnJfY29uZmxpY3QpKVxuMjA0MjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNDM6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9PTl9DT05HRVNUSU9OLCBzLVx1MDAzZW9uX2Nvbmdlc3Rpb24pKVxuMjA0NDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNDU6XHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9DT05HX0ZJTEwsIHMtXHUwMDNlY29uZ19maWxsKSlcbjIwNDY6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDQ3Olx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ09OR19FWFRFTlRTLCBzLVx1MDAzZWNvbmdfZXh0ZW50cykpXG4yMDQ4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA0OTpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVFdPX1BSSU1BUklFUywgcy1cdTAwM2V0d29fcHJpbWFyaWVzKSlcbjIwNTA6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDUxOlx0XHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9ESVNDQVJEX01ZX0RBVEEsIHMtXHUwMDNlZGlzY2FyZF9teV9kYXRhKSlcbjIwNTI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDUzOlx0XHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9UQ1BfQ09SSywgcy1cdTAwM2V0Y3BfY29yaykpXG4yMDU0Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA1NTpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUxXQVlTX0FTQlAsIHMtXHUwMDNlYWx3YXlzX2FzYnApKVxuMjA1NjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNTc6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RFTlRBVElWRSwgcy1cdTAwM2V0ZW50YXRpdmUpKVxuMjA1ODpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIwNTk6XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1VTRV9STEUsIHMtXHUwMDNldXNlX3JsZSkpXG4yMDYwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA2MTpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUZURVJfQ1JBU0hfT05MWSwgcy1cdTAwM2Vjc3Vtc19hZnRlcl9jcmFzaF9vbmx5KSlcbjIwNjI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDYzOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfU09DS19DSEVDS19USU1FTywgcy1cdTAwM2Vzb2NrX2NoZWNrX3RpbWVvKSlcbjIwNjQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMDY1Olx0XG4yMDY2Olx0XHRubGFfbmVzdF9lbmQoc2tiLCB0bGEpO1xuMjA2NzpcdFx0cmV0dXJuIDA7XG4yMDY4Olx0XG4yMDY5Olx0bmxhX3B1dF9mYWlsdXJlOlxuMjA3MDpcdFx0aWYgKHRsYSlcbjIwNzE6XHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdGxhKTtcbjIwNzI6XHRcdHJldHVybiAtRU1TR1NJWkU7XG4yMDczOlx0fVxuMjA3NDpcdFxuMjA3NTpcdGludCBzZXRfcm9sZV9wYXJtc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNldF9yb2xlX3Bhcm1zICpzKVxuMjA3NjpcdHtcbjIwNzc6XHRcdHN0cnVjdCBubGF0dHIgKnRsYSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgRFJCRF9OTEFfU0VUX1JPTEVfUEFSTVMpO1xuMjA3ODpcdFxuMjA3OTpcdFx0aWYgKCF0bGEpXG4yMDgwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA4MTpcdFxuMjA4MjpcdFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfU0VUX1JPTEVfUEFSTVNfQVNTVU1FX1VQVE9EQVRFLCBzLVx1MDAzZWFzc3VtZV91cHRvZGF0ZSkpXG4yMDgzOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMjA4NDpcdFxuMjA4NTpcdFx0bmxhX25lc3RfZW5kKHNrYiwgdGxhKTtcbjIwODY6XHRcdHJldHVybiAwO1xuMjA4NzpcdFxuMjA4ODpcdG5sYV9wdXRfZmFpbHVyZTpcbjIwODk6XHRcdGlmICh0bGEpXG4yMDkwOlx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIHRsYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDYwCgkJCQkJCQlvdXRwdXQ6IDI4OQoJCQkJCQkJdGhvdWdodHM6IDIwNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogdGhlIGNvZGUgc2VlbXMgdG8gY29weSBmaWVsZHMgb25lIGJ5IG9uZSwgbm90IHRoZSB3aG9sZSBzdHJ1Y3R1cmUuIEl0IHVzZXMgYG5sYV9wdXRgIGZvciBzdHJpbmdzIGFuZCBkZXRlcm1pbmVzIHRoZSBsZW5ndGggY2FyZWZ1bGx5LCBidXQgaXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoYXQgaGFwcGVucyBpZiBgc2hhcmVkX3NlY3JldF9sZW5gIGlzIHplcm8uIEl0IGNhbiBjb3B5IDEgYnl0ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpZiB0aGUgc3RydWN0dXJlIGlzIG5vdCBpbml0aWFsaXplZCEgSG93ZXZlciwgYSBzYW5pdGl6ZWQgdmVyc2lvbiBleHBsaWNpdGx5IHplcm9lcyB0aGUgc2hhcmVkIHNlY3JldCBhbmQgc2V0cyBgc2hhcmVkX3NlY3JldF9sZW5gIHRvIHplcm8uIFRoaXMgbWVhbnMgaXQgb25seSBjb3BpZXMgYSB6ZXJvIGJ5dGUuCgpJIHRob3VnaHQgYWJvdXQgb3RoZXIgZmllbGRzLiBJZiB0aGUgb3JpZ2luYWwgYG5ldF9jb25mYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQsIHNvIGlzIHRoZSBjb3B5LiBUaGUgb3JpZ2luYWwgYG5ldF9jb25mYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIG9yIGBrbWFsbG9jX29iamAsIHdoaWNoIGVpdGhlciBmdWxseSBpbml0aWFsaXplcyBpdCB0byB6ZXJvIG9yIGlzIGNvcGllZCBmcm9tIGFub3RoZXIgaW5pdGlhbGl6ZWQgc3RydWN0LgoKSSBjb25zaWRlcmVkIHBhZGRpbmcsIGJ1dCB0aGUgYG5sYV9wdXRgIGZ1bmN0aW9ucyBkb24mIzM5O3QgY29weSBzdHJ1Y3QgcGFkZGluZy4gVGhlc2UgdXNlIGBubGFfcmVzZXJ2ZWAgdG8gemVybyBvdXQgcGFkZGluZyBhZGRlZCB0byB0aGUgc2tiLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBsZWFrZWQuCgpUaGUgcGF0Y2ggaXRzZWxmIHJlcGxhY2VzIGNvZGUgdGhhdCB3YXMgY29uZGl0aW9uYWxseSBsZWFraW5nIHRoZSBzaGFyZWQgc2VjcmV0IHRvIHVzZXIgc3BhY2Ugd2l0aCBhIGNhbGwgdG8gYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLiBUaGUgbmV3IHZlcnNpb24gaXMgYWxzbyB1c2VkIGluIG90aGVyIHBsYWNlcy4gVGhpcyBpcyBhIGZpeCBmb3IgYW4gaW5mb3JtYXRpb24gbGVhaywgd2hlcmUgaW5pdGlhbGl6ZWQgc2Vuc2l0aXZlIGRhdGEgd2FzIGJlaW5nIHNlbnQgd2hlbiBpdCBzaG91bGRuJiMzOTt0IGhhdmUgYmVlbi4gVGhpcyBpcyBhIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuIEtNU0FOIGRldGVjdHMgdGhlIGxhdHRlciwgYnV0IG5vdCB0aGUgZm9ybWVyLgoKVGhlIGNvZGUgY29waWVzIHRoZSBgbmV0X2NvbmZgIHN0cnVjdCB0byBgbmNfY2xlYW5gLCBidXQgYG5jX2NsZWFuYCBpcyBvbiB0aGUgc3RhY2sgYW5kIGluaXRpYWxpemVkIGJ5IGEgZGlyZWN0IGFzc2lnbm1lbnQgb2YgdGhlIGluaXRpYWxpemVkIGZpZWxkcy4gVGhlIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24gY29waWVzIGZpZWxkIGJ5IGZpZWxkLCBub3QgdGhlIHdob2xlIHN0cnVjdCwgd2hpY2ggbWVhbnMgdGhlIHBhZGRpbmcgaXMgbm90IGNvcGllZC4gRXZlbiBpZiB0aGUgcGFkZGluZyB3YXMgdW5pbml0aWFsaXplZCwgaXQgaXMgbm90IHJlYWQuIEl0IHVzZXMgYHMtJmd0O3NoYXJlZF9zZWNyZXRgLCBgcy0mZ3Q7Y3JhbV9obWFjX2FsZ2AsIGV0Yy4gZGlyZWN0bHk7IGl0IGRvZXNuJiMzOTt0IGFjY2VzcyBwYWRkaW5nLgoKTG9va2luZyBhdCB0aGUgcnVsZXMsIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IG1vZGlmeWluZyBrZXJuZWwgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBmaXhpbmcgYSBsb2dpYyBidWcgYWJvdXQgZXhwb3NpbmcgaW5pdGlhbGl6ZWQgc2Vuc2l0aXZlIGRhdGEsIG5vdCBpbnRyb2R1Y2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIHdyaXRlLgoKVGhlIHBhdGNoIHVzZXMgdGhlIGBubGFfcHV0YCBmdW5jdGlvbiBpbiBhIHdheSB0aGF0IGNvdWxkIHJlYWQgdGhlIGZpcnN0IGJ5dGUgb2YgYHNoYXJlZF9zZWNyZXRgLCBhbmQgaWYgdGhlIGxlbmd0aCBpcyB6ZXJvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBhcnJheSBpcyByZWFkLiBJbiB0aGUgc2FuaXRpemVkIHZlcnNpb24sIHRoZSBzaGFyZWQgc2VjcmV0IGFycmF5IGlzIGV4cGxpY2l0bHkgemVyb2VkIGJlZm9yZSBjb3B5aW5nLiBUaGUgb3RoZXIgYnl0ZXMgY29waWVkIGFyZSBpbml0aWFsaXplZC4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQgZml4ZXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLiAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLioqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzZW5zaXRpdmUgaW5pdGlhbGl6ZWQgZGF0YSAodGhlIERSQkQgc2hhcmVkIHNlY3JldCkgd2FzIGV4cG9zZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXJzIHZpYSBuZXRsaW5rLiBUbyBmaXggdGhpcywgdGhlIHBhdGNoIGludHJvZHVjZXMgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCB3aGljaCBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgKGBuY19jbGVhbmApLCB6ZXJvZXMgb3V0IHRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQsIGFuZCB0aGVuIHNlcmlhbGl6ZXMgaXQuIFxuXG5XaGlsZSBgbmNfY2xlYW5gIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYG5jX2NsZWFuID0gKm5jYCkuIEZ1cnRoZXJtb3JlLCB0aGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBgbmV0X2NvbmZfdG9fc2tiYCBjb3BpZXMgdGhlIHN0cnVjdCBmaWVsZC1ieS1maWVsZCBpbnRvIG5ldGxpbmsgYXR0cmlidXRlcyAodXNpbmcgYG5sYV9wdXRgLCBgbmxhX3B1dF91MzJgLCBldGMuKSByYXRoZXIgdGhhbiBjb3B5aW5nIHRoZSBzdHJ1Y3QgYXMgYSByYXcgbWVtb3J5IGJsb2NrLiBUaGlzIGVuc3VyZXMgdGhhdCBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCBpdHNlbGYgaXMgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgc2VyaWFsaXphdGlvbi5cblxuU2luY2UgdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWssIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLCBzdGFuZGFyZCBLQVNBTiBhbmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzZW5zaXRpdmUgaW5pdGlhbGl6ZWQgZGF0YSAodGhlIERSQkQgc2hhcmVkIHNlY3JldCkgd2FzIGV4cG9zZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXJzIHZpYSBuZXRsaW5rLiBUbyBmaXggdGhpcywgdGhlIHBhdGNoIGludHJvZHVjZXMgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCB3aGljaCBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgKGBuY19jbGVhbmApLCB6ZXJvZXMgb3V0IHRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQsIGFuZCB0aGVuIHNlcmlhbGl6ZXMgaXQuIFxuXG5XaGlsZSBgbmNfY2xlYW5gIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYG5jX2NsZWFuID0gKm5jYCkuIEZ1cnRoZXJtb3JlLCB0aGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBgbmV0X2NvbmZfdG9fc2tiYCBjb3BpZXMgdGhlIHN0cnVjdCBmaWVsZC1ieS1maWVsZCBpbnRvIG5ldGxpbmsgYXR0cmlidXRlcyAodXNpbmcgYG5sYV9wdXRgLCBgbmxhX3B1dF91MzJgLCBldGMuKSByYXRoZXIgdGhhbiBjb3B5aW5nIHRoZSBzdHJ1Y3QgYXMgYSByYXcgbWVtb3J5IGJsb2NrLiBUaGlzIGVuc3VyZXMgdGhhdCBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCBpdHNlbGYgaXMgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgc2VyaWFsaXphdGlvbi5cblxuU2luY2UgdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWssIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLCBzdGFuZGFyZCBLQVNBTiBhbmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MDk6MjQuNzY0OTA5Mzk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDY4MjQwNzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfRFJCRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdFwiLFxuICAgIFwiZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRcIixcbiAgICBcImRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzZW5zaXRpdmUgaW5pdGlhbGl6ZWQgZGF0YSAodGhlIERSQkQgc2hhcmVkIHNlY3JldCkgd2FzIGV4cG9zZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXJzIHZpYSBuZXRsaW5rLiBUbyBmaXggdGhpcywgdGhlIHBhdGNoIGludHJvZHVjZXMgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCB3aGljaCBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgKGBuY19jbGVhbmApLCB6ZXJvZXMgb3V0IHRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQsIGFuZCB0aGVuIHNlcmlhbGl6ZXMgaXQuIFxcblxcbldoaWxlIGBuY19jbGVhbmAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbmNfY2xlYW4gPSAqbmNgKS4gRnVydGhlcm1vcmUsIHRoZSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgc3RydWN0IGZpZWxkLWJ5LWZpZWxkIGludG8gbmV0bGluayBhdHRyaWJ1dGVzICh1c2luZyBgbmxhX3B1dGAsIGBubGFfcHV0X3UzMmAsIGV0Yy4pIHJhdGhlciB0aGFuIGNvcHlpbmcgdGhlIHN0cnVjdCBhcyBhIHJhdyBtZW1vcnkgYmxvY2suIFRoaXMgZW5zdXJlcyB0aGF0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBuZXZlciByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkIGl0c2VsZiBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSBzZXJpYWxpemF0aW9uLlxcblxcblNpbmNlIHRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyByYXRoZXIgdGhhbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZCwgc3RhbmRhcmQgS0FTQU4gYW5kIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjowOToyNC43NjQ5MzIxMzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDc3MzYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ3YjFmODVjNmFhMDM4NmI5MjA3MjM0YzQ0YTAzMTQ2YjI3MmJiZWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTY6MDk6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcXG5pbmRleCBmOWZmY2Q2NzYwN2I1Li5iNzdmOTAxZmMzZWY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jXFxuQEAgLTMzMDYsNiArMzMwNiwyNiBAQCBzdGF0aWMgaW50IG5sYV9wdXRfZHJiZF9jZmdfY29udGV4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiB9XFxuIFxcbisvKlxcbisgKiBuZXRfY29uZl90b19za2IoKSBzZXJpYWxpemVzIHRoZSBzaGFyZWQgc2VjcmV0IHZlcmJhdGltLiBBbnkgcGF0aCB0aGF0IGNhblxcbisgKiBhbnN3ZXIgYSByZXF1ZXN0IGZyb20gYW4gdW5wcml2aWxlZ2VkIHByb2Nlc3MgbXVzdCBwYXNzIGV4Y2x1ZGVfc2Vuc2l0aXZlLFxcbisgKiBzbyB0aGUgc2VjcmV0IGlzIGJsYW5rZWQgaW4gYSBwcml2YXRlIGNvcHkgYmVmb3JlIGl0IHJlYWNoZXMgdGhlIHNrYi5cXG4rICovXFxuK3N0YXRpYyBpbnQgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKm5jLFxcbitcXHRcXHRcXHRcXHQgICAgIGJvb2wgZXhjbHVkZV9zZW5zaXRpdmUpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9jb25mIG5jX2NsZWFuO1xcbitcXG4rXFx0aWYgKCFleGNsdWRlX3NlbnNpdGl2ZSlcXG4rXFx0XFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcXG4rXFxuK1xcdG5jX2NsZWFuID0gKm5jO1xcbitcXHRtZW1zZXQobmNfY2xlYW4uc2hhcmVkX3NlY3JldCwgMCwgc2l6ZW9mKG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQpKTtcXG4rXFx0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xcbitcXG4rXFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIFxcdTAwMjZuY19jbGVhbik7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoZSBnZW5lcmljIG5ldGxpbmsgZHVtcCBjYWxsYmFja3MgYXJlIGNhbGxlZCBvdXRzaWRlIHRoZSBnZW5sX2xvY2soKSwgc29cXG4gICogdGhleSBjYW5ub3QgdXNlIHRoZSBzaW1wbGUgYXR0cmlidXRlIHBhcnNpbmcgY29kZSB3aGljaCB1c2VzIGdsb2JhbFxcbkBAIC0zNjIxLDcgKzM2NDEsOCBAQCBpbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRuZXRfY29uZiA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVxcdTAwM2VuZXRfY29uZik7XFxuIFxcdFxcdGlmIChuZXRfY29uZikge1xcbi1cXHRcXHRcXHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuZXRfY29uZik7XFxuK1xcdFxcdFxcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuZXRfY29uZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IWNhcGFibGUoQ0FQX1NZU19BRE1JTikpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbkBAIC0zODQyLDE4ICszODYzLDggQEAgc3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbiBcXHRcXHRzdHJ1Y3QgbmV0X2NvbmYgKm5jO1xcbiBcXG4gXFx0XFx0bmMgPSByY3VfZGVyZWZlcmVuY2UoZmlyc3RfcGVlcl9kZXZpY2UoZGV2aWNlKS1cXHUwMDNlY29ubmVjdGlvbi1cXHUwMDNlbmV0X2NvbmYpO1xcbi1cXHRcXHRpZiAobmMpIHtcXG4tXFx0XFx0XFx0aWYgKGV4Y2x1ZGVfc2Vuc2l0aXZlKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfY29uZiBuY19jbGVhbiA9ICpuYztcXG4tXFxuLVxcdFxcdFxcdFxcdG1lbXNldChuY19jbGVhbi5zaGFyZWRfc2VjcmV0LCAwLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQpKTtcXG4tXFx0XFx0XFx0XFx0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xcbi1cXHRcXHRcXHRcXHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBcXHUwMDI2bmNfY2xlYW4pO1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAobmMpXFxuK1xcdFxcdFxcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgZXhjbHVkZV9zZW5zaXRpdmUpO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRpZiAoZXJyKVxcbkBAIC00MDU4LDcgKzQwNjksNyBAQCBzdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9jb25mICpuYztcXG4gXFxuIFxcdFxcdFxcdFxcdG5jID0gcmN1X2RlcmVmZXJlbmNlKGNvbm5lY3Rpb24tXFx1MDAzZW5ldF9jb25mKTtcXG4tXFx0XFx0XFx0XFx0aWYgKG5jIFxcdTAwMjZcXHUwMDI2IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKSAhPSAwKVxcbitcXHRcXHRcXHRcXHRpZiAobmMgXFx1MDAyNlxcdTAwMjYgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCB0cnVlKSAhPSAwKVxcbiBcXHRcXHRcXHRcXHRcXHRnb3RvIGNhbmNlbDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRnb3RvIGRvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjA5OjI1LjI0MDQ5Mjk0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIxMjgzMjA1MTgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0RSQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRcIixcbiAgICBcImRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0XCIsXG4gICAgXCJkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGR1bXBpdCBhbmQgZG9pdCBoYW5kbGVycyBpbiB0aGUgRFJCRCBibG9jayBkZXZpY2UgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2IxZjg1YzZhYTAzODZiOTIwNzIzNGM0NGEwMzE0NmIyNzJiYmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTY6MDk6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuY1xuaW5kZXggZjlmZmNkNjc2MDdiNS4uYjc3ZjkwMWZjM2VmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmNcbkBAIC0zMzA2LDYgKzMzMDYsMjYgQEAgc3RhdGljIGludCBubGFfcHV0X2RyYmRfY2ZnX2NvbnRleHQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiAtRU1TR1NJWkU7XG4gfVxuIFxuKy8qXG4rICogbmV0X2NvbmZfdG9fc2tiKCkgc2VyaWFsaXplcyB0aGUgc2hhcmVkIHNlY3JldCB2ZXJiYXRpbS4gQW55IHBhdGggdGhhdCBjYW5cbisgKiBhbnN3ZXIgYSByZXF1ZXN0IGZyb20gYW4gdW5wcml2aWxlZ2VkIHByb2Nlc3MgbXVzdCBwYXNzIGV4Y2x1ZGVfc2Vuc2l0aXZlLFxuKyAqIHNvIHRoZSBzZWNyZXQgaXMgYmxhbmtlZCBpbiBhIHByaXZhdGUgY29weSBiZWZvcmUgaXQgcmVhY2hlcyB0aGUgc2tiLlxuKyAqL1xuK3N0YXRpYyBpbnQgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2NvbmYgKm5jLFxuK1x0XHRcdFx0ICAgICBib29sIGV4Y2x1ZGVfc2Vuc2l0aXZlKVxuK3tcbitcdHN0cnVjdCBuZXRfY29uZiBuY19jbGVhbjtcbitcbitcdGlmICghZXhjbHVkZV9zZW5zaXRpdmUpXG4rXHRcdHJldHVybiBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7XG4rXG4rXHRuY19jbGVhbiA9ICpuYztcbitcdG1lbXNldChuY19jbGVhbi5zaGFyZWRfc2VjcmV0LCAwLCBzaXplb2YobmNfY2xlYW4uc2hhcmVkX3NlY3JldCkpO1xuK1x0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xuK1xuK1x0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIFx1MDAyNm5jX2NsZWFuKTtcbit9XG4rXG4gLypcbiAgKiBUaGUgZ2VuZXJpYyBuZXRsaW5rIGR1bXAgY2FsbGJhY2tzIGFyZSBjYWxsZWQgb3V0c2lkZSB0aGUgZ2VubF9sb2NrKCksIHNvXG4gICogdGhleSBjYW5ub3QgdXNlIHRoZSBzaW1wbGUgYXR0cmlidXRlIHBhcnNpbmcgY29kZSB3aGljaCB1c2VzIGdsb2JhbFxuQEAgLTM2MjEsNyArMzY0MSw4IEBAIGludCBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2tcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0bmV0X2NvbmYgPSByY3VfZGVyZWZlcmVuY2UoY29ubmVjdGlvbi1cdTAwM2VuZXRfY29uZik7XG4gXHRcdGlmIChuZXRfY29uZikge1xuLVx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5ldF9jb25mKTtcbitcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmV0X2NvbmYsXG4rXHRcdFx0XHRcdFx0XHQhY2FwYWJsZShDQVBfU1lTX0FETUlOKSk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5AQCAtMzg0MiwxOCArMzg2Myw4IEBAIHN0YXRpYyBpbnQgbmxhX3B1dF9zdGF0dXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcbiBcdFx0c3RydWN0IG5ldF9jb25mICpuYztcbiBcbiBcdFx0bmMgPSByY3VfZGVyZWZlcmVuY2UoZmlyc3RfcGVlcl9kZXZpY2UoZGV2aWNlKS1cdTAwM2Vjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbi1cdFx0aWYgKG5jKSB7XG4tXHRcdFx0aWYgKGV4Y2x1ZGVfc2Vuc2l0aXZlKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbmV0X2NvbmYgbmNfY2xlYW4gPSAqbmM7XG4tXG4tXHRcdFx0XHRtZW1zZXQobmNfY2xlYW4uc2hhcmVkX3NlY3JldCwgMCxcbi1cdFx0XHRcdCAgICAgICBzaXplb2YobmNfY2xlYW4uc2hhcmVkX3NlY3JldCkpO1xuLVx0XHRcdFx0bmNfY2xlYW4uc2hhcmVkX3NlY3JldF9sZW4gPSAwO1xuLVx0XHRcdFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiKHNrYiwgXHUwMDI2bmNfY2xlYW4pO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBuYyk7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRcdGlmIChuYylcbitcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmMsIGV4Y2x1ZGVfc2Vuc2l0aXZlKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aWYgKGVycilcbkBAIC00MDU4LDcgKzQwNjksNyBAQCBzdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0XHRcdHN0cnVjdCBuZXRfY29uZiAqbmM7XG4gXG4gXHRcdFx0XHRuYyA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbi1cdFx0XHRcdGlmIChuYyBcdTAwMjZcdTAwMjYgbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpICE9IDApXG4rXHRcdFx0XHRpZiAobmMgXHUwMDI2XHUwMDI2IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgdHJ1ZSkgIT0gMClcbiBcdFx0XHRcdFx0Z290byBjYW5jZWw7XG4gXHRcdFx0fVxuIFx0XHRcdGdvdG8gZG9uZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjA5OjI1LjI0MDQ5NDIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjgyMDk2MDE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERSQkQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgYWZmZWN0aW5nIGBkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jYC4gTG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIGEgZnVuY3Rpb24gY2FsbGVkIGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIOKAkyBzYW5pdGl6YXRpb24gaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBpbnRlcmFjdGlvbj8gU291bmRzIGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IHNlY3VyaXR5LXJlbGF0ZWQuIEl0J3MgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGNvZGUsIHdoaWNoIGlzIGdvb2QgZm9yIG1haW50YWluYWJpbGl0eSwgYW5kIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAgYW5kIGBnZXRfb25lX3N0YXR1c2AuIFRoZXNlIGFyZSBuZXRsaW5rIGZ1bmN0aW9ucywgcmlnaHQ/IEFuZCB0aGUgY29udGV4dCBpcyBEUkJELCBhIGJsb2NrIGRldmljZSBkcml2ZXIg4oCTIGEgZGlzdHJpYnV0ZWQsIHJlcGxpY2F0ZWQgb25lLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkuXG5cblJpZ2h0LCBEUkJELiBOZXR3b3JrIGJsb2NrIGRldmljZS4gR2VuZXJhbGx5IG1hbmFnZWQgdmlhIG5ldGxpbmsuIFRoZSBwYXRjaCBtb2RpZmllcyBuZXRsaW5rIGR1bXAgZnVuY3Rpb25zIHdoaWNoIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHBvdGVudGlhbCBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiBhIGJsb2NrIGRldmljZSBkcml2ZXIsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgRFJCRCBpcyByZWFjaGFibGUsIGFuZCBkZXRlcm1pbmUgaXRzIGNvbmZpZ3VyYXRpb24sIHRvIGZpbmQgb3V0IGlmIGl0J3MgZXZlbiB3b3J0aCBmb2N1c2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEyOjEyLjA2MTQ1Nzk4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE1MDQ0NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfRFJCRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZz02PWNvbW1lbnQgXFxcIkRSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTIG9yIElORVQgbm90IHNlbGVjdGVkXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWctOC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZzo5OmNvbmZpZyBCTEtfREVWX0RSQkRcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiRFJCRCBEaXN0cmlidXRlZCBSZXBsaWNhdGVkIEJsb2NrIERldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjoxMi41NDI5NjkzODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODUxMTQ1NTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIGJhc2VkIG9uIGEgYml0IG9mIGRpZ2dpbmc6XG5cbioqVW5kZXJzdGFuZGluZyBEUkJEIENvbm5lY3Rpb24gU3RhdHVzIGFuZCBSZXBvcnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCBhbmQgYGdldF9vbmVfc3RhdHVzYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGVzZSBhcmUgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgRFJCRCByZXBvcnRzIGFuZCByZXRyaWV2ZXMgaXRzIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24sIGxpa2VseSB0aHJvdWdoIE5ldGxpbmsuIExldCdzIGJyZWFrIGl0IGRvd246XG5cbmBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgIHNvdW5kcyBsaWtlIGEgTmV0bGluayBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGR1bXAgY29ubmVjdGlvbi1yZWxhdGVkIGRhdGEuIFRoZSBcImR1bXBpdFwiIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0J3MgZm9yIGdlbmVyYXRpbmcgYSBjb21wbGV0ZSBzbmFwc2hvdCBvciBhIGZ1bGwgbGlzdGluZyBvZiBhbGwgYWN0aXZlIERSQkQgY29ubmVjdGlvbnMuIFRoaXMgd291bGQgYmUgY3J1Y2lhbCBmb3IgbW9uaXRvcmluZywgdHJvdWJsZXNob290aW5nLCBhbmQgcG90ZW50aWFsbHksIGltcGxlbWVudGluZyBtYW5hZ2VtZW50IHRvb2xzLiBJdCBwcm9iYWJseSBwcm92aWRlcyBkZXRhaWxzIGxpa2UgcGVlciBJUCBhZGRyZXNzZXMsIHBvcnRzLCBjb25uZWN0aW9uIHN0YXRlcyAoZS5nLiwgQ29ubmVjdGVkLCBEaXNjb25uZWN0aW5nLCBldGMuKSwgYW5kIG1heWJlIGV2ZW4gc29tZSBwZXJmb3JtYW5jZSBtZXRyaWNzLiBJIHN1c3BlY3QgaXQgZnVuY3Rpb25zIGFzIGEgTmV0bGluayBkdW1wIGhhbmRsZXIuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCBgZ2V0X29uZV9zdGF0dXNgIHNlZW1zIG11Y2ggbW9yZSBmb2N1c2VkIGFuZCBncmFudWxhci4gVGhlIG5hbWUgaW1wbGllcyBpdCdzIGRlc2lnbmVkIHRvIHJldHJpZXZlIHRoZSBzdGF0dXMgb2YgYSAqc2luZ2xlKiBEUkJEIGNvbm5lY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHVzZWQgd2hlbiBhIHNwZWNpZmljIGNvbm5lY3Rpb24ncyBzdGF0dXMgaXMgcmVxdWlyZWQsIHBlcmhhcHMgdHJpZ2dlcmVkIGJ5IGEgcXVlcnkgb3IgYSByZXNwb25zZSB0byBhIG1hbmFnZW1lbnQgcmVxdWVzdC4gSXQgd291bGQgcHJvdmlkZSBrZXkgaW5mb3JtYXRpb24gbGlrZSBvcGVyYXRpb25hbCBzdGF0ZSwgZXJyb3JzLCBhbmQgcGVyaGFwcyBldmVuIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhc3BlY3RzIHJlbGF0ZWQgdG8gdGhhdCBjb25uZWN0aW9uLiBJdCBtYXkgcmV0dXJuIHZhcmlvdXMgcGFyYW1ldGVycywgb3IgcG9pbnRlcnMgdG8gc3RydWN0cywgYnV0IG9ubHkgZm9yIGEgc3BlY2lmaWMsIGdpdmVuIGNvbm5lY3Rpb24uXG5cbkknZCBiZXQgdGhleSdyZSBsaWtlbHkgY29tcGxlbWVudGFyeS4gYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAgcHJvdmlkZXMgdGhlIGJyb2FkIG92ZXJ2aWV3LCB3aGlsZSBgZ2V0X29uZV9zdGF0dXNgIGlzIHRoZSBwcmVjaXNpb24gdG9vbCBmb3IgaW4tZGVwdGggaW5zcGVjdGlvbiBvZiBhIHNwZWNpZmljIGNvbm5lY3Rpb24uIFRoZSByZWxhdGlvbnNoaXAgaXMgbGlrZWx5IHRoYXQgdGhlIGR1bXAgZnVuY3Rpb24gcHJvdmlkZXMgYW4gb3ZlcnZpZXcsIGFuZCBgZ2V0X29uZV9zdGF0dXNgIGlzIGxpa2VseSBjYWxsZWQgaW50ZXJuYWxseSB0byByZXR1cm4gZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGEgc2luZ2xlIGNvbm5lY3Rpb24sIG9uZSBhdCBhIHRpbWUuIEknZCBhbHNvIGltYWdpbmUgdGhhdCBhIE5ldGxpbmsgbWVzc2FnZSB3b3VsZCBiZSB1c2VkIHRvIHRyaWdnZXIgYm90aCB0aGVzZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjoxNy4zOTQxMTc2MDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1MTA1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zNTQ5PWVudW0geyBTSU5HTEVfUkVTT1VSQ0UsIElURVJBVEVfUkVTT1VSQ0VTIH07XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zNTUwLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzU1MTppbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM1NTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MzU5PWNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcmJkX25sX29wc1szMl0gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy02MTctXFx0XFx0LmNtZFxcdFxcdD0gRFJCRF9BRE1fR0VUX0NPTk5FQ1RJT05TLFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjYxODpcXHRcXHQuZHVtcGl0XFx0XFx0PSBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXQsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtNjE5LVxcdFxcdC5kb25lXFx0XFx0PSBkcmJkX2FkbV9kdW1wX2Nvbm5lY3Rpb25zX2RvbmUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaD03ND1pbnQgZHJiZF9ubF9nZXRfZGV2aWNlc19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC03NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaDo3NjppbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6MTcuNDc0NjM2MDM1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5Nzg5MjQ5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcmVxdWVzdCwgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipNeSBJbnRlcm5hbCBNb25vbG9ndWUgb24gYGdldF9vbmVfc3RhdHVzYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY29uY2VwdCBoZXJlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3Qgb24gdGhlIHN1cmZhY2UuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uIG9yIHByb2Nlc3MsIGxldCdzIGNhbGwgaXQgYGdldF9vbmVfc3RhdHVzYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFuIGV4cGVydCwgaXNuJ3QgKndoYXQqIGl0IGRvZXMsIGJ1dCAqaG93KiBpdCdzIGltcGxlbWVudGVkIGFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIGl0cyBkZXNpZ24uIElzIHRoaXMgYSBzaW1wbGUgZ2V0dGVyLCBmZXRjaGluZyBhIHNpbmdsZSBzdGF0dXMgZnJvbSBhIGRhdGFiYXNlIG9yIGEgbW9yZSBjb21wbGV4IG9yY2hlc3RyYXRpb24gb2YgbXVsdGlwbGUgc2VydmljZXM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGUgc3RhdHVzIGlzIHVwZGF0ZWQgY29uY3VycmVudGx5P1xuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZWRnZSBjYXNlczogV2hhdCBoYXBwZW5zIGlmIHRoZSByZXF1ZXN0ZWQgc3RhdHVzIGRvZXNuJ3QgZXhpc3Q/IERvZXMgaXQgcmV0dXJuIGEgbnVsbCwgcmFpc2UgYW4gZXhjZXB0aW9uLCBvciByZXR1cm4gc29tZSBraW5kIG9mIFwibm90IGZvdW5kXCIgb2JqZWN0PyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEhvdyBhcmUgZXhjZXB0aW9ucyBwcm9wYWdhdGVkIGFuZCBoYW5kbGVkIGZ1cnRoZXIgdXAgdGhlIGNhbGwgc3RhY2s/IElzIHRoZXJlIGFueSBjYWNoaW5nIGludm9sdmVkPyBJZiBzbywgd2hhdCdzIHRoZSBjYWNoZSBpbnZhbGlkYXRpb24gc3RyYXRlZ3k/XG5cbkknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBwZXJmb3JtYW5jZTogSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIGZyZXF1ZW50IGNhbGxzPyBEb2VzIGl0IHJlbHkgb24gc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnM/IEFuZCBpZiBpdCdzIGFzeW5jaHJvbm91cywgaXMgaXQgaGFuZGxpbmcgY29uY3VycmVuY3kgcHJvcGVybHksIHBlcmhhcHMgd2l0aCBhc3luYy9hd2FpdCwgY29yb3V0aW5lcywgb3IgdGhyZWFkaW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBib3R0bGVuZWNrIGluIHRoZSBsYXJnZXIgc3lzdGVtPyBBcmUgdGhlcmUgbG9nZ2luZyBhbmQgbW9uaXRvcmluZyBpbiBwbGFjZSB0byB0cmFjayBlcnJvcnMgYW5kIHJlc3BvbnNlIHRpbWVzP1xuXG5UaGUgb3ZlcmFsbCBzeXN0ZW0gaXMgaW1wb3J0YW50LiBIb3cgZG9lcyBgZ2V0X29uZV9zdGF0dXNgIGludGVyZmFjZSB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBsYXJnZXIgc3lzdGVtPyBXaGF0IGFyZSBpdHMgZGVwZW5kZW5jaWVzPyBJJ20gYWxyZWFkeSBlbnZpc2lvbmluZyBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIGV4dGVybmFsIHNlcnZpY2VzIG9yIHJlc291cmNlcy4gQSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBmb3IgdHJvdWJsZXNob290aW5nIGFuZCBtYWludGFpbmFiaWxpdHkuXG5cbkZpbmFsbHksIEknbSB0aGlua2luZyBhYm91dCB0ZXN0YWJpbGl0eS4gSXMgdGhpcyBmdW5jdGlvbiBkZXNpZ25lZCB3aXRoIHVuaXQgdGVzdGluZyBpbiBtaW5kPyBBcmUgdGhlcmUgbW9ja2FibGUgZGVwZW5kZW5jaWVzPyBXaGF0J3MgdGhlIHBsYW4gZm9yIGludGVncmF0aW9uIGFuZCBzeXN0ZW0gdGVzdHMgdGhhdCB3b3VsZCB1c2UgdGhpcyBmdW5jdGlvbj9cblxuRXNzZW50aWFsbHksIEknbSBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBhIG1lbnRhbCBjaGVja2xpc3Qgb2YgYmVzdCBwcmFjdGljZXMgYW5kIHBvdGVudGlhbCBwaXRmYWxscy4gVGhlIFwic2ltcGxlXCIgYGdldF9vbmVfc3RhdHVzYCBmdW5jdGlvbiBpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludDsgdGhlIHJlYWwgdmFsdWUgaXMgaW4gdW5kZXJzdGFuZGluZyBpdHMgYnJvYWRlciBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEyOjIzLjE3MjUzMTAyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjE5NTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfb25lX3N0YXR1c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk2Mj1pbnQgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzk4NC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM5ODU6c3RhdGljIGludCBnZXRfb25lX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTg2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDExMS0gKlxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDExMjogKiBPbmNlIHRoaW5ncyBhcmUgc2V0dXAgcHJvcGVybHksIHdlIGNhbGwgaW50byBnZXRfb25lX3N0YXR1cygpLlxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDExMy0gKi9cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTQxMTQ9aW50IGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTQ5LVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDE1MDpcXHRrcmVmX3B1dChcXHUwMDI2cmVzb3VyY2UtXFx1MDAzZWtyZWYsIGRyYmRfZGVzdHJveV9yZXNvdXJjZSk7IC8qIGdldF9vbmVfc3RhdHVzKCkgcmV2YWxpZGF0ZXMgdGhlIHJlc291cmNlICovXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTUxLVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MTU4LWR1bXA6XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzo0MTU5OlxcdHJldHVybiBnZXRfb25lX3N0YXR1cyhza2IsIGNiKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQxNjAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjoyMy4yNjg3MzA3NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDUxMzYyNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBEUkJEIE5ldGxpbmsgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIOKAkyBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBjb3VsZCBwb3RlbnRpYWxseSBzbmFnIGEgc2hhcmVkIHNlY3JldC4gSXQncyBhIHNlY3VyaXR5IGZpeCwgcG90ZW50aWFsbHkgZWFybmluZyBhIENWRSwgb3IgYXQgbGVhc3QgYSBidWdmaXguIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3RyYWlnaHRmb3J3YXJkOiBzYW5pdGl6ZSB0aGUgc2hhcmVkIHNlY3JldCBpbiB0aGUgbmV0bGluayBvdXRwdXQgaWYgdGhlIHVzZXIgbGFja3MgYENBUF9TWVNfQURNSU5gLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIklzIHRoaXMgZnV6emFibGU/XCIgVGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBpdHNlbGYgbG9va3MgaW5jcmVkaWJseSBzaW1wbGUuIEl0J3MganVzdCBjYWxsaW5nIGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYCwgZWZmZWN0aXZlbHkgemVyb2luZyBvdXQgdGhlIHJlbGV2YW50IGZpZWxkcy4gRnJvbSBhIGxvZ2ljIGNvbXBsZXhpdHkgcGVyc3BlY3RpdmUsIHRoZXJlIGlzbid0IG11Y2ggdG8gc2luayBvdXIgdGVldGggaW50by4gSG93ZXZlciwgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBhIHJlYWNoYWJsZSBkcml2ZXIuIFNvLCB3aGlsZSBpdCdzIHNpbXBsZSwgaXQncyBhIG1vZGlmaWNhdGlvbiBpbiBhbiBhcmVhIHRoYXQncyBhY2Nlc3NpYmxlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4uLi4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmLi4uXCIgQWhhISBUaGlzIGRvZXNuJ3QgZmFsbCBpbnRvICphbnkqIG9mIHRob3NlIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgY2F0ZWdvcmllcy4gVGhpcyBhY3R1YWxseSBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMvZHJpdmVycy4gT2theSwgc28gZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBpcyBtaW5vciwgd2Ugc2hvdWxkIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuTm93LCBsZXQncyBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzLiBUaGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBhcmUgYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAgYW5kIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YC4gSSBhbSBhbHNvIGluY2x1ZGluZyBgZ2V0X29uZV9zdGF0dXNgIGJlY2F1c2UgaXQgaXMgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAuXG5cbkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlnIGlzIGBCTEtfREVWX0RSQkRgLiBMZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlIGNoZWNrIGlmIHRoYXQgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6MzcuNzIwMDk2ODUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjYwNzE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9EUkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnPTY9Y29tbWVudCBcXFwiRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMgb3IgSU5FVCBub3Qgc2VsZWN0ZWRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZy04LVxcbmRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnOjk6Y29uZmlnIEJMS19ERVZfRFJCRFxcbmRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnLTEwLVxcdHRyaXN0YXRlIFxcXCJEUkJEIERpc3RyaWJ1dGVkIFJlcGxpY2F0ZWQgQmxvY2sgRGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEyOjM3Ljc4NjcwOTI3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDA2OTAzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEJMS19ERVZfRFJCRCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQkxLX0RFVl9EUkJEYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNvbm5lY3Rpb25zLCB0aGUgbW9kdWxlcyBpdCByZWxpZXMgdXBvbi4gV2hhdCBvdGhlciBibG9jayBkZXZpY2UgZHJpdmVycyBhcmUgaW52b2x2ZWQ/IElzIGl0IGEgdmlydHVhbCBibG9jayBkZXZpY2U/IElmIHNvLCB3aGF0IHZpcnR1YWwgYmxvY2sgbGF5ZXIgaG9va3MgZG9lcyBpdCBlbXBsb3k/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhbnkgc3BlY2lmaWMgbmV0d29yayBwcm90b2NvbHMgb3Igc3RhY2tzIGF0IHRoZSBrZXJuZWwgbGV2ZWw/IE15IG1pbmQgc3RhcnRzIGJ1aWxkaW5nIGEgbWVudGFsIG1hcC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsYXllcnMgaW52b2x2ZWQ6IHRoZSBnZW5lcmljIGJsb2NrIGxheWVyLCBwb3RlbnRpYWwgSS9PIHNjaGVkdWxlcnMsIHRoZSBuZXR3b3JrIGNvbXBvbmVudCBmb3IgcmVwbGljYXRpb24sIGFueSB1bmRlcmx5aW5nIHN0b3JhZ2UgZHJpdmVycy4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIGBLY29uZmlnYCBlbnRyaWVzIHJlbGF0ZWQgdG8gRFJCRCwgdG8gc2VlIHdoYXQgbW9kdWxlcyBpdCBjYW4gb3B0aW9uYWxseSBsb2FkIGFuZCB3aGF0IGl0IHVuY29uZGl0aW9uYWxseSByZXF1aXJlcy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzdG9yYWdlIGRldmljZSB0eXBlcyBpdCdzIG9wdGltaXplZCBmb3I/IEFyZSB0aGVyZSBhbnkgY29yZSBrZXJuZWwgc3RydWN0dXJlcyBvciBBUElzIGl0IGRlZXBseSBpbnRlcmFjdHMgd2l0aCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBpcyBnb2luZyB0byBpbnZvbHZlIGRpdmluZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgY3Jvc3MtcmVmZXJlbmNpbmcgZGVmaW5pdGlvbnMsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBkaWZmZXJlbnQga2VybmVsIHN1YnN5c3RlbXMgaW50ZXJhY3QgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gZml0cyB3aXRoaW4gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjo0MS40Mjc0MDIzMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgRFJCRCBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29tbWVudCBcXFwiRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMgb3IgSU5FVCBub3Qgc2VsZWN0ZWRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlM9J24nIHx8IElORVQ9J24nXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBCTEtfREVWX0RSQkRcXG4gIDEwOlxcdFxcdHRyaXN0YXRlIFxcXCJEUkJEIERpc3RyaWJ1dGVkIFJlcGxpY2F0ZWQgQmxvY2sgRGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlMgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiAgMTI6XFx0XFx0c2VsZWN0IExSVV9DQUNIRVxcbiAgMTM6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgTk9URTogSW4gb3JkZXIgdG8gYXV0aGVudGljYXRlIGNvbm5lY3Rpb25zIHlvdSBoYXZlIHRvIHNlbGVjdFxcbiAgMTc6XFx0XFx0ICBDUllQVE9fSE1BQyBhbmQgYSBoYXNoIGZ1bmN0aW9uIGFzIHdlbGwuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgRFJCRCBpcyBhIHNoYXJlZC1ub3RoaW5nLCBzeW5jaHJvbm91c2x5IHJlcGxpY2F0ZWQgYmxvY2sgZGV2aWNlLiBJdFxcbiAgMjA6XFx0XFx0ICBpcyBkZXNpZ25lZCB0byBzZXJ2ZSBhcyBhIGJ1aWxkaW5nIGJsb2NrIGZvciBoaWdoIGF2YWlsYWJpbGl0eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjo0MS40Mjc0OTM3NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyNDM2MzM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEUkJEIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdG8gYmVzdCBjb25maWd1cmUgdGhpcyBEUkJEIG1vZHVsZS4gUmlnaHQsIGBCTEtfREVWX0RSQkRgIHJlbGllcyBvbiBib3RoIGBQUk9DX0ZTYCBhbmQgYElORVRgLiBOb3QgYSBzdXJwcmlzZSwgYW5kIHVzdWFsbHkgYm90aCBhcmUgZW5hYmxlZCBhbnl3YXkuIFRoZXJlZm9yZSwgSSdsbCBnbyBhaGVhZCBhbmQgYWRkIGBCTEtfREVWX0RSQkRgIGRpcmVjdGx5IHRvIG15IEVuYWJsZUNvbmZpZ3MuIEl0J3MgdGhlIG1vc3Qgc2Vuc2libGUgdGhpbmcgdG8gZG8uXG5cbk5vdywgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAsIGFuZCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgLiBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQuIEhvbGQgb24uLi4gSSBzZWUgdGhhdCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgIGl0c2VsZiBpc24ndCBtb2RpZmllZC4gVGhhdCdzIGEgbGl0dGxlIHN0cmFuZ2UuIEJ1dCBJIHNlZSB0aGF0IGBubGFfcHV0X3N0YXR1c19pbmZvYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGA/IEhtbSwgdGhhdCdzIG5vdCB3aGF0IEkgZXhwZWN0ZWQuIEJldHRlciBjaGVjayB0aGF0IHNwZWNpZmljIGNhbGwgcGF0aCBtb3JlIGNsb3NlbHkgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gdGhlcmUuIEknbGwgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIGludG8gdGhlIGZ1bmN0aW9uIGNhbGwgZ3JhcGggdG8gY29uZmlybSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6NDYuNjUxODY3NzMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQ4MTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJubGFfcHV0X3N0YXR1c19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zODEzPXN0YXRpYyBzdHJ1Y3QgZHJiZF9jb25uZWN0aW9uICp0aGVfb25seV9jb25uZWN0aW9uKHN0cnVjdCBkcmJkX3Jlc291cmNlICpyZXNvdXJjZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzgyMS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4MjI6c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzgyMy1cXHRcXHRjb25zdCBzdHJ1Y3Qgc2liX2luZm8gKnNpYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk2Mj1pbnQgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzk3My1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM5NzQ6XFx0ZXJyID0gbmxhX3B1dF9zdGF0dXNfaW5mbyhhZG1fY3R4LVxcdTAwM2VyZXBseV9za2IsIGFkbV9jdHgtXFx1MDAzZWRldmljZSwgTlVMTCk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTc1LVxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk4NT1zdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDA4My1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjQwODQ6XFx0XFx0aWYgKG5sYV9wdXRfc3RhdHVzX2luZm8oc2tiLCBkZXZpY2UsIE5VTEwpKSB7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MDg1LWNhbmNlbDpcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9NDY0Mz12b2lkIGRyYmRfYmNhc3RfZXZlbnQoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsIGNvbnN0IHN0cnVjdCBzaWJfaW5mbyAqc2liKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00NjYxLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6NDY2MjpcXHRpZiAobmxhX3B1dF9zdGF0dXNfaW5mbyhtc2csIGRldmljZSwgc2liKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTQ2NjMtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEyOjQ2LjczMDM1NTQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTg0NTU2OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBEUkJEIE5ldGxpbmsgSW50ZXJmYWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGBubGFfcHV0X3N0YXR1c19pbmZvYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgLCBgZ2V0X29uZV9zdGF0dXNgLCBhbmQgYGRyYmRfYmNhc3RfZXZlbnRgLiBUaGUgYGdldF9vbmVfc3RhdHVzYCBmdW5jdGlvbiBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRgLiBUaGlzIGdpdmVzIG1lIHRoZSBlbnRyeSBwb2ludHM6IGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRgLCBgZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdGAsIGFuZCBgZHJiZF9iY2FzdF9ldmVudGAuIEkgd2lsbCBmb2N1cyBteSBhbmFseXNpcyBvbiB0aGVzZSBlbnRyeSBwb2ludHMuXG5cbkdpdmVuIHRoYXQsIEknbSBnb2luZyB0byBhZGQgYGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZG9pdGAsIGBkcmJkX25sX2dldF9zdGF0dXNfZHVtcGl0YCB0byBgRm9jdXNTeW1ib2xzYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYEJMS19ERVZfRFJCRGAgc2VlbXMgdG8gYmUgdGhlIG9ubHkgcmVsZXZhbnQgb25lLlxuXG5BaCwgSSBtaXNzZWQgaXQgaW5pdGlhbGx5IGJ1dCBgZHJiZF9iY2FzdF9ldmVudGAgaXMgYWxzbyBhIHZhbGlkIGVudHJ5IHBvaW50LiBJJ2xsIGluY2x1ZGUgaXQuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBzYW5pdGl6aW5nIHRoZSBgbmV0X2NvbmZgIHN0cnVjdHVyZSwgcGFydGljdWxhcmx5IHRoZSBgc2hhcmVkX3NlY3JldGAsIHdoZW4gaXQncyBiZWluZyBzZW50IG92ZXIgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGUgbW9kaWZpZWQgY29kZSByZXBsYWNlcyBhIGNvbmRpdGlvbmFsIGJsb2NrIHRvIGNhbGwgYSBuZXcgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgIGZ1bmN0aW9uIHdoaWNoIHNhbml0aXplcyB0aGUgZGF0YSBiZWZvcmUgdGhlIGRhdGEgaXMgd3JpdHRlbiBvdXQuIFRoaXMgaGFwcGVucyBpbiBib3RoIGBubGFfcHV0X3N0YXR1c19pbmZvYCBhbmQgYGdldF9vbmVfc3RhdHVzYC5cblxuU28sIHRoZSBwYXRjaCBhZmZlY3RzIGBkcmJkX25sX2dldF9jb25uZWN0aW9uc19kdW1waXRgLCBgbmxhX3B1dF9zdGF0dXNfaW5mb2AsIGFuZCBgZ2V0X29uZV9zdGF0dXNgLCBhbmQgYnkgZXh0ZW5zaW9uIGFueSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBhbnkgb2YgdGhlc2UuIFRoZSBlbnRyeSBwb2ludHMgYXJlOiBgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0YCwgYGRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0YCwgYGRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRgLCBhbmQgYGRyYmRfYmNhc3RfZXZlbnRgLlxuXG5UaGVyZWZvcmUsIEknbGwgc2V0OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYCAoQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNsZWFyIHNlY3VyaXR5IGZpeC4pXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtaXRpZ2F0ZXMgYW4gaW5mb3JtYXRpb24gbGVhayBpbiB0aGUgRFJCRCBuZXRsaW5rIGludGVyZmFjZSBieSBzYW5pdGl6aW5nIHRoZSBzaGFyZWQgc2VjcmV0IGZvciB1bnByaXZpbGVnZWQgdXNlcnMuIEl0IGFsdGVycyByZWFjaGFibGUgbmV0bGluayBkdW1waXQgYW5kIGRvaXQgaGFuZGxlcnMgaW4gdGhlIERSQkQgYmxvY2sgZGV2aWNlIGRyaXZlci5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdFwiLCBcImRyYmRfbmxfZ2V0X3N0YXR1c19kb2l0XCIsIFwiZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdFwiLCBcImRyYmRfYmNhc3RfZXZlbnRcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiQkxLX0RFVl9EUkJEXCJdYFxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjEyLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjo1Ny45MTQ5MTUyOTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2MjM5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfRFJCRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdFwiLFxuICAgIFwiZHJiZF9ubF9nZXRfc3RhdHVzX2RvaXRcIixcbiAgICBcImRyYmRfbmxfZ2V0X3N0YXR1c19kdW1waXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIGluIHRoZSBEUkJEIG5ldGxpbmsgaW50ZXJmYWNlIGJ5IHNhbml0aXppbmcgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIHVucHJpdmlsZWdlZCB1c2Vycy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgZHVtcGl0IGFuZCBkb2l0IGhhbmRsZXJzIGluIHRoZSBEUkJEIGJsb2NrIGRldmljZSBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9EUkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0XCIsXG4gICAgXCJkcmJkX25sX2dldF9zdGF0dXNfZG9pdFwiLFxuICAgIFwiZHJiZF9ubF9nZXRfc3RhdHVzX2R1bXBpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluZm9ybWF0aW9uIGxlYWsgaW4gdGhlIERSQkQgbmV0bGluayBpbnRlcmZhY2UgYnkgc2FuaXRpemluZyB0aGUgc2hhcmVkIHNlY3JldCBmb3IgdW5wcml2aWxlZ2VkIHVzZXJzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBkdW1waXQgYW5kIGRvaXQgaGFuZGxlcnMgaW4gdGhlIERSQkQgYmxvY2sgZGV2aWNlIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6NTguMDcyNTUwMTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3NjA1ODA4NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMjo1OC4wNzM0MDQxNTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjgwNzU5NzIxMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsb2dpYyBidWcgd2hlcmUgc2Vuc2l0aXZlIGluaXRpYWxpemVkIGRhdGEgKHRoZSBEUkJEIHNoYXJlZCBzZWNyZXQpIHdhcyBleHBvc2VkIHRvIHVucHJpdmlsZWdlZCB1c2VycyB2aWEgbmV0bGluay4gVG8gZml4IHRoaXMsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYCwgd2hpY2ggY29waWVzIHRoZSBgbmV0X2NvbmZgIHN0cnVjdCB0byBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIChgbmNfY2xlYW5gKSwgemVyb2VzIG91dCB0aGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkLCBhbmQgdGhlbiBzZXJpYWxpemVzIGl0LiBcXG5cXG5XaGlsZSBgbmNfY2xlYW5gIGlzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIGl0IGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgYXNzaWdubWVudCAoYG5jX2NsZWFuID0gKm5jYCkuIEZ1cnRoZXJtb3JlLCB0aGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBgbmV0X2NvbmZfdG9fc2tiYCBjb3BpZXMgdGhlIHN0cnVjdCBmaWVsZC1ieS1maWVsZCBpbnRvIG5ldGxpbmsgYXR0cmlidXRlcyAodXNpbmcgYG5sYV9wdXRgLCBgbmxhX3B1dF91MzJgLCBldGMuKSByYXRoZXIgdGhhbiBjb3B5aW5nIHRoZSBzdHJ1Y3QgYXMgYSByYXcgbWVtb3J5IGJsb2NrLiBUaGlzIGVuc3VyZXMgdGhhdCBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgbmV2ZXIgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCBpdHNlbGYgaXMgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgc2VyaWFsaXphdGlvbi5cXG5cXG5TaW5jZSB0aGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgcmF0aGVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhaywgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQsIHN0YW5kYXJkIEtBU0FOIGFuZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ3YjFmODVjNmFhMDM4NmI5MjA3MjM0YzQ0YTAzMTQ2YjI3MmJiZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxNjowOToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jXG5pbmRleCBmOWZmY2Q2NzYwN2I1Li5iNzdmOTAxZmMzZWY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuY1xuKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuY1xuQEAgLTMzMDYsNiArMzMwNiwyNiBAQCBzdGF0aWMgaW50IG5sYV9wdXRfZHJiZF9jZmdfY29udGV4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIC1FTVNHU0laRTtcbiB9XG4gXG4rLypcbisgKiBuZXRfY29uZl90b19za2IoKSBzZXJpYWxpemVzIHRoZSBzaGFyZWQgc2VjcmV0IHZlcmJhdGltLiBBbnkgcGF0aCB0aGF0IGNhblxuKyAqIGFuc3dlciBhIHJlcXVlc3QgZnJvbSBhbiB1bnByaXZpbGVnZWQgcHJvY2VzcyBtdXN0IHBhc3MgZXhjbHVkZV9zZW5zaXRpdmUsXG4rICogc28gdGhlIHNlY3JldCBpcyBibGFua2VkIGluIGEgcHJpdmF0ZSBjb3B5IGJlZm9yZSBpdCByZWFjaGVzIHRoZSBza2IuXG4rICovXG4rc3RhdGljIGludCBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqbmMsXG4rXHRcdFx0XHQgICAgIGJvb2wgZXhjbHVkZV9zZW5zaXRpdmUpXG4re1xuK1x0c3RydWN0IG5ldF9jb25mIG5jX2NsZWFuO1xuK1xuK1x0aWYgKCFleGNsdWRlX3NlbnNpdGl2ZSlcbitcdFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcbitcbitcdG5jX2NsZWFuID0gKm5jO1xuK1x0bWVtc2V0KG5jX2NsZWFuLnNoYXJlZF9zZWNyZXQsIDAsIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7XG4rXHRuY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbiA9IDA7XG4rXG4rXHRyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgXHUwMDI2bmNfY2xlYW4pO1xuK31cbitcbiAvKlxuICAqIFRoZSBnZW5lcmljIG5ldGxpbmsgZHVtcCBjYWxsYmFja3MgYXJlIGNhbGxlZCBvdXRzaWRlIHRoZSBnZW5sX2xvY2soKSwgc29cbiAgKiB0aGV5IGNhbm5vdCB1c2UgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcGFyc2luZyBjb2RlIHdoaWNoIHVzZXMgZ2xvYmFsXG5AQCAtMzYyMSw3ICszNjQxLDggQEAgaW50IGRyYmRfbmxfZ2V0X2Nvbm5lY3Rpb25zX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFja1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRuZXRfY29uZiA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVx1MDAzZW5ldF9jb25mKTtcbiBcdFx0aWYgKG5ldF9jb25mKSB7XG4tXHRcdFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmV0X2NvbmYpO1xuK1x0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuZXRfY29uZixcbitcdFx0XHRcdFx0XHRcdCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0zODQyLDE4ICszODYzLDggQEAgc3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuIFx0XHRzdHJ1Y3QgbmV0X2NvbmYgKm5jO1xuIFxuIFx0XHRuYyA9IHJjdV9kZXJlZmVyZW5jZShmaXJzdF9wZWVyX2RldmljZShkZXZpY2UpLVx1MDAzZWNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYpO1xuLVx0XHRpZiAobmMpIHtcbi1cdFx0XHRpZiAoZXhjbHVkZV9zZW5zaXRpdmUpIHtcbi1cdFx0XHRcdHN0cnVjdCBuZXRfY29uZiBuY19jbGVhbiA9ICpuYztcbi1cbi1cdFx0XHRcdG1lbXNldChuY19jbGVhbi5zaGFyZWRfc2VjcmV0LCAwLFxuLVx0XHRcdFx0ICAgICAgIHNpemVvZihuY19jbGVhbi5zaGFyZWRfc2VjcmV0KSk7XG4tXHRcdFx0XHRuY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbiA9IDA7XG4tXHRcdFx0XHRlcnIgPSBuZXRfY29uZl90b19za2Ioc2tiLCBcdTAwMjZuY19jbGVhbik7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYihza2IsIG5jKTtcbi1cdFx0XHR9XG4tXHRcdH1cbitcdFx0aWYgKG5jKVxuK1x0XHRcdGVyciA9IG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWQoc2tiLCBuYywgZXhjbHVkZV9zZW5zaXRpdmUpO1xuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuQEAgLTQwNTgsNyArNDA2OSw3IEBAIHN0YXRpYyBpbnQgZ2V0X29uZV9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRcdFx0c3RydWN0IG5ldF9jb25mICpuYztcbiBcbiBcdFx0XHRcdG5jID0gcmN1X2RlcmVmZXJlbmNlKGNvbm5lY3Rpb24tXHUwMDNlbmV0X2NvbmYpO1xuLVx0XHRcdFx0aWYgKG5jIFx1MDAyNlx1MDAyNiBuZXRfY29uZl90b19za2Ioc2tiLCBuYykgIT0gMClcbitcdFx0XHRcdGlmIChuYyBcdTAwMjZcdTAwMjYgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCB0cnVlKSAhPSAwKVxuIFx0XHRcdFx0XHRnb3RvIGNhbmNlbDtcbiBcdFx0XHR9XG4gXHRcdFx0Z290byBkb25lO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTI6NTguMDczNDA1Nzc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4OTU0NzE2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUkJEIFBhdGNoIGZvciBTZW5zaXRpdmUgRGF0YSBFeHBvc3VyZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyYmRfbmwuY2Agd2l0aGluIHRoZSBEUkJEIGJsb2NrIGRyaXZlci4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgbmV3IGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYCBoZWxwZXIgZnVuY3Rpb24uIEkgc2VlIGl0IHRha2VzIGEgYHN0cnVjdCBuZXRfY29uZiAqbmNgIGFuZCBhIGJvb2xlYW4gZmxhZyBgZXhjbHVkZV9zZW5zaXRpdmVgLiBUaGUgZ29hbCBpcyB0byBzYW5pdGl6ZSB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGJlZm9yZSBzZW5kaW5nIGl0IG91dCwgcHJlc3VtYWJseSBvdmVyIHRoZSBuZXR3b3JrLlxuXG5SaWdodCwgc28gd2hlbiBgZXhjbHVkZV9zZW5zaXRpdmVgIGlzIHRydWUsIGl0ICpjb3BpZXMqIHRoZSBjb250ZW50cyBvZiBgKm5jYCBpbnRvIGEgbG9jYWwgdmFyaWFibGUgbmFtZWQgYG5jX2NsZWFuYCwgYW5kIHRoZW4gZXhwbGljaXRseSBjbGVhcnMgdGhlIGBzaGFyZWRfc2VjcmV0YCBhbmQgYHNoYXJlZF9zZWNyZXRfbGVuYCBmaWVsZHMuIEFmdGVyIHRoYXQsIGl0IGNhbGxzIHRoZSBvcmlnaW5hbCBgbmV0X2NvbmZfdG9fc2tiYCBmdW5jdGlvbiwgYnV0IHdpdGggYFx1MDAyNm5jX2NsZWFuYC4gTWFrZXMgc2Vuc2UsIHJlbW92aW5nIHRoZSBzZW5zaXRpdmUgZGF0YS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBgbmNfY2xlYW5gIGlzICpsb2NhbCo/IEl0J3Mgb24gdGhlIHN0YWNrLiBOb3csIGxldCdzIHRoaW5rIGFib3V0IHRoaXMgYG5jX2NsZWFuID0gKm5jO2AgYXNzaWdubWVudC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuXG5cbklmIGBzdHJ1Y3QgbmV0X2NvbmZgIGhhcyBwYWRkaW5nLCB0aGVuIHRoZSBjb3B5IG1pZ2h0IGJlIGEgc3RyYWlnaHQtdXAgbWVtY3B5LCBvciBpdCBtYXkgaW5pdGlhbGl6ZSBmaWVsZHMgaW4gYSBwZXItZmllbGQgbWFubmVyLiBJbiB0aGUgY2FzZSBvZiBhIG1lbWNweSwgdGhlbiB3aGF0ZXZlciB2YWx1ZXMgd2VyZSBpbiB0aGUgcGFkZGluZyBvZiB0aGUgb3JpZ2luYWwgYCpuY2Agd2lsbCBiZSBjb3BpZWQgaW50byBgbmNfY2xlYW5gIC0tIGlmIHRoZSBwYWRkaW5nIGhhZCB1bmluaXRpYWxpemVkIHZhbHVlcywgdGhlbiBgbmNfY2xlYW5gIHdvdWxkIGhhdmUgdGhlIHNhbWUgdW5pbml0aWFsaXplZCB2YWx1ZXMuIElmIGAqbmNgIHdhcyBmdWxseSBpbml0aWFsaXplZCAodW5saWtlbHkpLCB0aGVuIHNvIHdvdWxkIGJlIGBuY19jbGVhbmAuXG5cbkJ1dCB3YWl04oCmIGl0J3Mgb24gdGhlIHN0YWNrLiBJcyB0aGVyZSBhbnkgcGFkZGluZyBpbiB0aGF0IGBzdHJ1Y3QgbmV0X2NvbmZgPyBUaGlzIG5lZWRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgaWYgdGhlIHN0cnVjdHVyZSBpcyBwYWNrZWQgb3IgaGFzIHNvbWUgZGF0YSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJIG5lZWQgdG8gZ28gYW5kIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5ldF9jb25mYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYWJvdXQgdGhpcyBwb3RlbnRpYWwgZm9yIGRhdGEgbGVha2FnZS4gVGhlIHBvdGVudGlhbCBoZXJlIGlzIHRoYXQgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnksIG9yIGRhdGEgZnJvbSB0aGUgb3JpZ2luYWwgYCpuY2AgaXMgY29waWVkIGFuZCBpcyB0aGVyZWZvcmUgbGVha2VkIHZpYSB0aGUgbmV0d29yayBpbnRlcmZhY2UuIFRoYXQgd291bGQgYmUgYmFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTM6MDQuOTY4ODgxNTI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAxNDkxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5ldF9jb25mIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg9MTMyPXN0cnVjdCByZXNfb3B0cyB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC0xMzctXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg6MTM4OnN0cnVjdCBuZXRfY29uZiB7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmgtMTM5LVxcdGNoYXIgc2hhcmVkX3NlY3JldFtTSEFSRURfU0VDUkVUX01BWF07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjEzOjA1LjA3OTAzNzgyNloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQzNzk4MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc3RydWN0IG5ldF9jb25mYCBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZnVsbCBzY29wZSBvZiBgc3RydWN0IG5ldF9jb25mYC4gSXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSd2ZSByZWFsbHkgZHVnIGludG8gdGhlIHNwZWNpZmljIGZpZWxkcyBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSBrbm93IGl0J3MgYSBjcml0aWNhbCBzdHJ1Y3R1cmUgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYnV0IEkgd2FudCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgYW5kIGFjY3VyYXRlIHBpY3R1cmUgb2YgaXRzIGNhcGFiaWxpdGllcyBhbmQgbGltaXRhdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcuIEkgbmVlZCB0byBzZWUgKmV2ZXJ5dGhpbmcqIOKAkyBldmVyeSBtZW1iZXIsIGV2ZXJ5IGJpdGZpZWxkLCBldmVyeSBjb21tZW50IGlmIGF2YWlsYWJsZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnkgcmVjZW50IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIHRoaXMgc3RydWN0LCBhcyBuZXR3b3JrIHByb3RvY29sIGRlc2lnbiBpcyBkeW5hbWljLlxuXG5JIHdhbnQgdG8ga25vdyB3aGF0IHRoaXMgc3RydWN0IGluY2x1ZGVzLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBjb25maWd1cmF0aW9uIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgIEFkZHJlc3MgZmFtaWx5IHN1cHBvcnQgKElQdjQsIElQdjYsIGV0Yy4pXG4qICAgUm91dGluZyBwcm90b2NvbHMgc3VwcG9ydGVkXG4qICAgUW9TIGNvbmZpZ3VyYXRpb25zXG4qICAgU2VjdXJpdHkgb3B0aW9uc1xuKiAgIEFueSBob29rcyBmb3IgY3VzdG9tIG5ldHdvcmsgcG9saWNpZXNcblxuTGV0J3MgZ2V0IHRoZSBmdWxsIGRlZmluaXRpb24sIGFuZCBJJ2xsIHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCBpdCBwaWVjZSBieSBwaWVjZSwgY29uc2lkZXJpbmcgaXRzIGltcGxpY2F0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBteSBjdXJyZW50IHdvcmsuIEknbSBhbnRpY2lwYXRpbmcgdGhlcmUgY291bGQgYmUgc29tZSBhcmVhcyB3aGVyZSBJIG5lZWQgdG8gYXBwbHkgYSBuZXcgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxMzowOC43MjI4NDA3NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1OTk2MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuZXRfY29uZiBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaD0xMzI9c3RydWN0IHJlc19vcHRzIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oLTEzNy1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaDoxMzg6c3RydWN0IG5ldF9jb25mIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC0xMzktXFx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTM6MDguNzg4ODUzMzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NDAwNjIyNDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgZHJiZF9ubF9nZW4uaDogTGluZSAxMzggLSBMZXQncyBEaWcgSW4qKlxuXG5Pa2F5LCBJJ20gcHVsbGluZyB1cCBgZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmhgIG5vdy4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgc29tZSBvZiB0aGUgY3J1Y2lhbCBOZXRsaW5rIG1lc3NhZ2UgZGVmaW5pdGlvbnMgYXJlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIGxpbmUgMTM4LiBJJ20gZ3Vlc3NpbmcgaXQncyBsaWtlbHkgZGVmaW5pbmcgYSBzdHJ1Y3R1cmUsIGFuIGVudW0sIG9yIHBlcmhhcHMgZXZlbiBhIG1hY3JvIHJlbGF0ZWQgdG8gdGhlIE5ldGxpbmsgaW50ZXJmYWNlIHVzZWQgYnkgRFJCRC4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbWVzc2FnZSBmb3JtYXQgb3IgYSBrZXkgZWxlbWVudCB1c2VkIGluIHRoZSBjb21tdW5pY2F0aW9uLiBDb3VsZCBiZSBhIHZlcnNpb24gbnVtYmVyLCBhbiBhdHRyaWJ1dGUsIG9yIGEgY29tbWFuZCBjb2RlLiBMaW5lIDEzOC4uLiBsZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuIEhvcGVmdWxseSwgaXQncyBzb21ldGhpbmcgbWVhbmluZ2Z1bCBhbmQgbm90IGp1c3QgYSBjb21tZW50IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTExLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTY6MTIuNzk1MDgwNzQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzODpcXHRzdHJ1Y3QgbmV0X2NvbmYge1xcbiAxMzk6XFx0XFx0Y2hhciBzaGFyZWRfc2VjcmV0W1NIQVJFRF9TRUNSRVRfTUFYXTtcXG4gMTQwOlxcdFxcdF9fdTMyIHNoYXJlZF9zZWNyZXRfbGVuO1xcbiAxNDE6XFx0XFx0Y2hhciBjcmFtX2htYWNfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcXG4gMTQyOlxcdFxcdF9fdTMyIGNyYW1faG1hY19hbGdfbGVuO1xcbiAxNDM6XFx0XFx0Y2hhciBpbnRlZ3JpdHlfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcXG4gMTQ0OlxcdFxcdF9fdTMyIGludGVncml0eV9hbGdfbGVuO1xcbiAxNDU6XFx0XFx0Y2hhciB2ZXJpZnlfYWxnW1NIQVJFRF9TRUNSRVRfTUFYXTtcXG4gMTQ2OlxcdFxcdF9fdTMyIHZlcmlmeV9hbGdfbGVuO1xcbiAxNDc6XFx0XFx0Y2hhciBjc3Vtc19hbGdbU0hBUkVEX1NFQ1JFVF9NQVhdO1xcbiAxNDg6XFx0XFx0X191MzIgY3N1bXNfYWxnX2xlbjtcXG4gMTQ5OlxcdFxcdF9fdTMyIHdpcmVfcHJvdG9jb2w7XFxuIDE1MDpcXHRcXHRfX3UzMiBjb25uZWN0X2ludDtcXG4gMTUxOlxcdFxcdF9fdTMyIHRpbWVvdXQ7XFxuIDE1MjpcXHRcXHRfX3UzMiBwaW5nX2ludDtcXG4gMTUzOlxcdFxcdF9fdTMyIHBpbmdfdGltZW87XFxuIDE1NDpcXHRcXHRfX3UzMiBzbmRidWZfc2l6ZTtcXG4gMTU1OlxcdFxcdF9fdTMyIHJjdmJ1Zl9zaXplO1xcbiAxNTY6XFx0XFx0X191MzIga29fY291bnQ7XFxuIDE1NzpcXHRcXHRfX3UzMiBtYXhfYnVmZmVycztcXG4gMTU4OlxcdFxcdF9fdTMyIG1heF9lcG9jaF9zaXplO1xcbiAxNTk6XFx0XFx0X191MzIgdW5wbHVnX3dhdGVybWFyaztcXG4gMTYwOlxcdFxcdF9fdTMyIGFmdGVyX3NiXzBwO1xcbiAxNjE6XFx0XFx0X191MzIgYWZ0ZXJfc2JfMXA7XFxuIDE2MjpcXHRcXHRfX3UzMiBhZnRlcl9zYl8ycDtcXG4gMTYzOlxcdFxcdF9fdTMyIHJyX2NvbmZsaWN0O1xcbiAxNjQ6XFx0XFx0X191MzIgb25fY29uZ2VzdGlvbjtcXG4gMTY1OlxcdFxcdF9fdTMyIGNvbmdfZmlsbDtcXG4gMTY2OlxcdFxcdF9fdTMyIGNvbmdfZXh0ZW50cztcXG4gMTY3OlxcdFxcdHVuc2lnbmVkIGNoYXIgdHdvX3ByaW1hcmllcztcXG4gMTY4OlxcdFxcdHVuc2lnbmVkIGNoYXIgZGlzY2FyZF9teV9kYXRhO1xcbiAxNjk6XFx0XFx0dW5zaWduZWQgY2hhciB0Y3BfY29yaztcXG4gMTcwOlxcdFxcdHVuc2lnbmVkIGNoYXIgYWx3YXlzX2FzYnA7XFxuIDE3MTpcXHRcXHR1bnNpZ25lZCBjaGFyIHRlbnRhdGl2ZTtcXG4gMTcyOlxcdFxcdHVuc2lnbmVkIGNoYXIgdXNlX3JsZTtcXG4gMTczOlxcdFxcdHVuc2lnbmVkIGNoYXIgY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seTtcXG4gMTc0OlxcdFxcdF9fdTMyIHNvY2tfY2hlY2tfdGltZW87XFxuIDE3NTpcXHR9O1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRzdHJ1Y3Qgc2V0X3JvbGVfcGFybXMge1xcbiAxNzg6XFx0XFx0dW5zaWduZWQgY2hhciBhc3N1bWVfdXB0b2RhdGU7XFxuIDE3OTpcXHR9O1xcbiAxODA6XFx0XFxuIDE4MTpcXHRzdHJ1Y3QgcmVzaXplX3Bhcm1zIHtcXG4gMTgyOlxcdFxcdF9fdTY0IHJlc2l6ZV9zaXplO1xcbiAxODM6XFx0XFx0dW5zaWduZWQgY2hhciByZXNpemVfZm9yY2U7XFxuIDE4NDpcXHRcXHR1bnNpZ25lZCBjaGFyIG5vX3Jlc3luYztcXG4gMTg1OlxcdFxcdF9fdTMyIGFsX3N0cmlwZXM7XFxuIDE4NjpcXHRcXHRfX3UzMiBhbF9zdHJpcGVfc2l6ZTtcXG4gMTg3OlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjEyLjc5NTE3MzE5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjEyODk1MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHN0cnVjdCBuZXRfY29uZmAgTGF5b3V0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IG5ldF9jb25mYCBkZWZpbml0aW9uLCBhbmQgaXQncyBtYWtpbmcgbWUgdGhpbmsuIEZpcnN0LCBJIHNlZSB0aGlzIGBjaGFyIHNoYXJlZF9zZWNyZXRbU0hBUkVEX1NFQ1JFVF9NQVhdO2AgYW5kIGl0cyBsZW5ndGggZmllbGQsIGBfX3UzMiBzaGFyZWRfc2VjcmV0X2xlbjtgLiBUaGF0J3Mgc3RhbmRhcmQgZW5vdWdoLiBUaGVuLCBpdCdzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGBjcmFtX2htYWNfYWxnYCwgYGludGVncml0eV9hbGdgLCBgdmVyaWZ5X2FsZ2AsIGFuZCBgY3N1bXNfYWxnYCDigJMgZWFjaCB3aXRoIGEgYFtTSEFSRURfU0VDUkVUX01BWF1gIGNoYXJhY3RlciBhcnJheSBhbmQgYSBjb3JyZXNwb25kaW5nIGxlbmd0aCBmaWVsZC4gU2VlbXMgbGlrZSBhIGNvbnNpc3RlbnQgcGF0dGVybiBmb3IgaGFuZGxpbmcgdmFyaW91cyBhbGdvcml0aG0gY29uZmlndXJhdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCB0aGVyZSdzIGEgYmxvY2sgb2YgYF9fdTMyYCBmaWVsZHMsIHdoaWNoIGFyZSBsaWtlbHkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLlxuXG5Ob3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIHNlcmllcyBvZiBgdW5zaWduZWQgY2hhcmAgZmxhZ3M6IGB0d29fcHJpbWFyaWVzYCwgYGRpc2NhcmRfbXlfZGF0YWAsIGFuZCBzbyBvbi4gVGhleSBlbmQgd2l0aCBgY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seWAuIEFuZCB0aGVuLCByaWdodCBhZnRlciB0aGF0LCB3ZSBoYXZlIGBfX3UzMiBzb2NrX2NoZWNrX3RpbWVvYC4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBwYWRkaW5nLlxuXG5HaXZlbiB0aGUgc3RydWN0dXJlLCBpZiBgU0hBUkVEX1NFQ1JFVF9NQVhgIGlzIDY0LCB3aGljaCBpcyBsaWtlbHksIHRoZSBhbGlnbm1lbnQgd291bGQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBJZiB0aG9zZSBjaGFycyBhcmUgcGFja2VkLCB0aGVyZSBhcmUgbGlrZWx5IDcgYnl0ZXMgb2YgcGFkZGluZyBiZWZvcmUgdGhlIGBfX3UzMiBzb2NrX2NoZWNrX3RpbWVvYC4gQWN0dWFsbHksIG5vLiA3IGJ5dGVzIG9mIGB1bnNpZ25lZCBjaGFyYCBwYWRkaW5nIGltcGxpZXMgMSBieXRlIG9mIHBhZGRpbmcgYWZ0ZXIgYGNzdW1zX2FmdGVyX2NyYXNoX29ubHlgLiBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoZSBhY3R1YWwgc2l6ZSBvZiBgU0hBUkVEX1NFQ1JFVF9NQVhgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjoxOC40MDgwNzI1ODRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDYwODkzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBTSEFSRURfU0VDUkVUX01BWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjoxOC45Nzg2OTM0MzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3ODYxOTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBEUkJEIEhlYWRlciBGaWxlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgRFJCRCBpbnRlcm5hbHMsIGFuZCB0aGUgb2J2aW91cyBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IHdpdGggc29tZXRoaW5nIGxpa2UgYGluY2x1ZGUvbGludXgvZHJiZC5oYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbWF5YmUgc29tZSBrZXkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIERSQkQgbW9kdWxlIGl0c2VsZi4gSXQncyB0aGUgY2VudHJhbCBwb2ludCB0byBiZWdpbiBteSBhbmFseXNpcy4gRnJvbSB0aGVyZSwgSSBjYW4gYWx3YXlzIG5hdmlnYXRlIHRvIG90aGVyLCBtb3JlIHNwZWNpZmljIGhlYWRlcnMgaWYgbmVlZGVkLCBidXQgYGRyYmQuaGAgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0J2xsIHByb2JhYmx5IGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4gVGltZSB0byBnZXQgY29kaW5nLi4uIGVyciwgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTg2MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjIyLjM1NzMxNzMwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNjk3NjQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIFNIQVJFRF9TRUNSRVRfTUFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvZHJiZC5oPTI1OT1lbnVtIGRyYmRfc3RhdGVfcnYge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2RyYmQuaC0yODctXFxuaW5jbHVkZS91YXBpL2xpbnV4L2RyYmQuaDoyODg6I2RlZmluZSBTSEFSRURfU0VDUkVUX01BWCA2NFxcbmluY2x1ZGUvdWFwaS9saW51eC9kcmJkLmgtMjg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjoyNC45NjQzMjM3MjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1OTQyMzI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBGb290cHJpbnQqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIGBTSEFSRURfU0VDUkVUX01BWGAgaXMgZGVmaW5lZCBhcyA2NC4gIFRoYXQgbWVhbnMgZWFjaCBpbnN0YW5jZSBvZiB0aGF0IHNoYXJlZCBzZWNyZXQgY29tcG9uZW50IGlzIGdvaW5nIHRvIHRha2UgdXAgNjQgYnl0ZXMuICBBbmQgd2l0aGluIHRoYXQgc3RydWN0dXJlLCB0aGVyZSdzIGFsc28gdGhlIGxlbmd0aCB3aGljaCBhZGRzIDQgYnl0ZXMuIFRoYXQncyA2OCBieXRlcywgYW5kIEkgc2VlIGl0IHJlcGVhdGVkLi4uIGZpdmUgdGltZXMsIHNvIHdlJ3JlIGF0IDY4IHRpbWVzIDUgd2hpY2ggZXF1YWxzIDM0MCBieXRlcyByaWdodCBvZmYgdGhlIGJhdC4gVGhlbiwgdGhlcmUgYXJlIDE4IGBfX3UzMmAgZmllbGRzIGluIHRoZSBzdHJ1Y3Qgd2hpY2ggSSBrbm93IHdpbGwgdGFrZSB1cCA0IGJ5dGVzIGVhY2gsIGxlYWRpbmcgdG8gNzIgYnl0ZXMuIEFmdGVyIHRoYXQgd2UgaGF2ZSA3IGB1bnNpZ25lZCBjaGFyYCBmaWVsZHMgYXQgNyBieXRlcywgYW5kIHRoZW4gYSBmaW5hbCBgX191MzJgIGZpZWxkIGF0IDQgYnl0ZXMsIHNvIGEgdG90YWwgb2YgMTEgYnl0ZXMuIEhvd2V2ZXIsIGhvbGQgb24uICBUaGUgYWxpZ25tZW50ISAgQmVjYXVzZSB0aG9zZSBgdW5zaWduZWQgY2hhcmAgZmllbGRzIHByZWNlZGUgdGhlIGBfX3UzMmAgZmllbGQsIEkgc3Ryb25nbHkgc3VzcGVjdCB0aGVyZSdzIGdvaW5nIHRvIGJlIHBhZGRpbmcgaW5zZXJ0ZWQgYWZ0ZXIgdGhvc2UgY2hhcnMgdG8gYWxpZ24gdGhlIGBfX3UzMmAuIFdoaWNoIG1lYW5zLCB3ZSBoYXZlIHBhZGRpbmcgb2YgMSBieXRlLiBcblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgbmV0X2NvbmZfdG9fc2tiYCBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdCBhdCBvbmNlLCBvciBpZiBpdCBkb2VzIGEgZmllbGQtYnktZmllbGQgY29weS4gVGhpcyB3aWxsIGluZmx1ZW5jZSB0aGUgYXBwcm9hY2ggSSB0YWtlLCB0byBlbnN1cmUgbWVtb3J5IGlzIGhhbmRsZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjMwLjAyMzc1MDI3NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxNDIyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0X2NvbmZfdG9fc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zMjc0PXN0YXRpYyBpbnQgbmxhX3B1dF9kcmJkX2NmZ19jb250ZXh0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTMzMDktLypcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjMzMTA6ICogbmV0X2NvbmZfdG9fc2tiKCkgc2VyaWFsaXplcyB0aGUgc2hhcmVkIHNlY3JldCB2ZXJiYXRpbS4gQW55IHBhdGggdGhhdCBjYW5cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTMzMTEtICogYW5zd2VyIGEgcmVxdWVzdCBmcm9tIGFuIHVucHJpdmlsZWdlZCBwcm9jZXNzIG11c3QgcGFzcyBleGNsdWRlX3NlbnNpdGl2ZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxMy0gKi9cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjMzMTQ6c3RhdGljIGludCBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqbmMsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zMzE1LVxcdFxcdFxcdFxcdCAgICAgYm9vbCBleGNsdWRlX3NlbnNpdGl2ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMxOS1cXHRpZiAoIWV4Y2x1ZGVfc2Vuc2l0aXZlKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzMyMDpcXHRcXHRyZXR1cm4gbmV0X2NvbmZfdG9fc2tiKHNrYiwgbmMpO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMyMS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzMyNS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjMzMjY6XFx0cmV0dXJuIG5ldF9jb25mX3RvX3NrYihza2IsIFxcdTAwMjZuY19jbGVhbik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zMzI3LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MzU1MT1pbnQgZHJiZF9ubF9nZXRfY29ubmVjdGlvbnNfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzY0My1cXHRcXHRpZiAobmV0X2NvbmYpIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM2NDQ6XFx0XFx0XFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5ldF9jb25mLFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzY0NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQhY2FwYWJsZShDQVBfU1lTX0FETUlOKSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM4MjI9c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODY2LVxcdFxcdGlmIChuYylcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4Njc6XFx0XFx0XFx0ZXJyID0gbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZChza2IsIG5jLCBleGNsdWRlX3NlbnNpdGl2ZSk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODY4LVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9Mzk4NT1zdGF0aWMgaW50IGdldF9vbmVfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtNDA3MS1cXHRcXHRcXHRcXHRuYyA9IHJjdV9kZXJlZmVyZW5jZShjb25uZWN0aW9uLVxcdTAwM2VuZXRfY29uZik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzo0MDcyOlxcdFxcdFxcdFxcdGlmIChuYyBcXHUwMDI2XFx1MDAyNiBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkKHNrYiwgbmMsIHRydWUpICE9IDApXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy00MDczLVxcdFxcdFxcdFxcdFxcdGdvdG8gY2FuY2VsO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MTk2OT1pbnQgcmVzX29wdHNfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCByZXNfb3B0cyAqcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTE5OTAtXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MTk5MTppbnQgbmV0X2NvbmZfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqcylcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0xOTkyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5oPTMyNj1pbnQgbmV0X2NvbmZfbnRiX2Zyb21fYXR0cnMoc3RydWN0IG5sYXR0ciAqKipyZXRfbmVzdGVkX2F0dHJpYnV0ZV90YWJsZSwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmg6MzI3OmludCBuZXRfY29uZl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9jb25mICpzKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uaC0zMjgtdm9pZCBzZXRfbmV0X2NvbmZfZGVmYXVsdHMoc3RydWN0IG5ldF9jb25mICp4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTY6MzAuMDg3ODk5MDAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTMyODg4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEUkJEIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBEUkJEIGhhbmRsZXMgbmV0d29yayBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHRyYW5zbGF0ZXMgbmV0d29yayBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGludG8gc29tZXRoaW5nIGl0IGNhbiBhY3R1YWxseSAqdXNlKiBmb3IgdGhlIG5ldHdvcmsgc3RhY2suIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgbmV0X2NvbmZfdG9fc2tiYCB3aXRoaW4gdGhlIGBkcmJkX25sX2dlbi5jYCBmaWxlLCBsb2NhdGVkIGluIHRoZSBibG9jayBkcml2ZXIgc2VjdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBlbnRyeSBwb2ludCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGZyb20gbmV0d29yayBjb25maWd1cmF0aW9uIGlucHV0IHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBidWZmZXIuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGNydWNpYWwgcGllY2UgaW4gdGhlIHB1enpsZSBvZiBob3cgRFJCRCBjb21tdW5pY2F0ZXMgaXRzIHN0YXRlIGFuZCBjb25maWcgcGFyYW1ldGVycyBvdmVyIHRoZSBuZXR3b3JrLiBJdOKAmXMgd2hlcmUgdGhlIGhpZ2gtbGV2ZWwgbmV0d29yayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMgYXJlIG1hcnNoYWxlZCBpbnRvIHRoZSBrZXJuZWzigJlzIGRhdGEgc3RydWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHN0ZXAgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBsb3ctbGV2ZWwgY29tbXVuaWNhdGlvbiBtZWNoYW5pY3Mgd2l0aGluIERSQkQncyBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGV5IGFyZSBkb2luZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjMzLjI4MTE4OTc2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk5MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk5MTpcXHRpbnQgbmV0X2NvbmZfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqcylcXG4xOTkyOlxcdHtcXG4xOTkzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRsYSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgRFJCRF9OTEFfTkVUX0NPTkYpO1xcbjE5OTQ6XFx0XFxuMTk5NTpcXHRcXHRpZiAoIXRsYSlcXG4xOTk2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE5OTc6XFx0XFxuMTk5ODpcXHRcXHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9TSEFSRURfU0VDUkVULCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjE5OTk6XFx0XFx0XFx0XFx0cy1cXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gKyAocy1cXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVxcdTAwM2VzaGFyZWRfc2VjcmV0KSlcXG4yMDAwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMDE6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1JBTV9ITUFDX0FMRywgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCxcXG4yMDAyOlxcdFxcdFxcdFxcdHMtXFx1MDAzZWNyYW1faG1hY19hbGdfbGVuICsgKHMtXFx1MDAzZWNyYW1faG1hY19hbGdfbGVuIFxcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cXHUwMDNlY3JhbV9obWFjX2FsZykpXFxuMjAwMzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDA0OlxcdFxcdGlmIChubGFfcHV0KHNrYiwgRFJCRF9BX05FVF9DT05GX0lOVEVHUklUWV9BTEcsIG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsXFxuMjAwNTpcXHRcXHRcXHRcXHRzLVxcdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiArIChzLVxcdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiBcXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXFx1MDAzZWludGVncml0eV9hbGcpKVxcbjIwMDY6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAwNzpcXHRcXHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9WRVJJRllfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjIwMDg6XFx0XFx0XFx0XFx0cy1cXHUwMDNldmVyaWZ5X2FsZ19sZW4gKyAocy1cXHUwMDNldmVyaWZ5X2FsZ19sZW4gXFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVxcdTAwM2V2ZXJpZnlfYWxnKSlcXG4yMDA5OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTA6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjIwMTE6XFx0XFx0XFx0XFx0cy1cXHUwMDNlY3N1bXNfYWxnX2xlbiArIChzLVxcdTAwM2Vjc3Vtc19hbGdfbGVuIFxcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cXHUwMDNlY3N1bXNfYWxnKSlcXG4yMDEyOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTM6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1dJUkVfUFJPVE9DT0wsIHMtXFx1MDAzZXdpcmVfcHJvdG9jb2wpKVxcbjIwMTQ6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAxNTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ09OTkVDVF9JTlQsIHMtXFx1MDAzZWNvbm5lY3RfaW50KSlcXG4yMDE2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1RJTUVPVVQsIHMtXFx1MDAzZXRpbWVvdXQpKVxcbjIwMTg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAxOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUElOR19JTlQsIHMtXFx1MDAzZXBpbmdfaW50KSlcXG4yMDIwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMjE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1BJTkdfVElNRU8sIHMtXFx1MDAzZXBpbmdfdGltZW8pKVxcbjIwMjI6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAyMzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfU05EQlVGX1NJWkUsIHMtXFx1MDAzZXNuZGJ1Zl9zaXplKSlcXG4yMDI0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMjU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JDVkJVRl9TSVpFLCBzLVxcdTAwM2VyY3ZidWZfc2l6ZSkpXFxuMjAyNjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDI3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9LT19DT1VOVCwgcy1cXHUwMDNla29fY291bnQpKVxcbjIwMjg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAyOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfTUFYX0JVRkZFUlMsIHMtXFx1MDAzZW1heF9idWZmZXJzKSlcXG4yMDMwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMzE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX01BWF9FUE9DSF9TSVpFLCBzLVxcdTAwM2VtYXhfZXBvY2hfc2l6ZSkpXFxuMjAzMjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDMzOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9VTlBMVUdfV0FURVJNQVJLLCBzLVxcdTAwM2V1bnBsdWdfd2F0ZXJtYXJrKSlcXG4yMDM0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMzU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0FGVEVSX1NCXzBQLCBzLVxcdTAwM2VhZnRlcl9zYl8wcCkpXFxuMjAzNjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDM3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9BRlRFUl9TQl8xUCwgcy1cXHUwMDNlYWZ0ZXJfc2JfMXApKVxcbjIwMzg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAzOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUZURVJfU0JfMlAsIHMtXFx1MDAzZWFmdGVyX3NiXzJwKSlcXG4yMDQwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjozMy4yODEzMTczNDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY3MDUxNzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgQ29weWluZyBpbiBgbmV0X2NvbmZfdG9fc2tiYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGBuZXRfY29uZl90b19za2JgIGhhbmRsZXMgZGF0YSBjb3B5aW5nLiBJdCBsb29rcyBsaWtlIGl0IGRvZXNuJ3QgZG8gYSBzaW1wbGUgYG1lbWNweWAgb2YgdGhlIGVudGlyZSBzdHJ1Y3QuIFNtYXJ0LCBiZWNhdXNlIHRoYXQgd291bGQgYmUgaW5lZmZpY2llbnQuIEluc3RlYWQsIGl0J3MgdXNpbmcgYG5sYV9wdXRgIGFuZCBgbmxhX3B1dF91MzJgIHRvIGNvcHkgZmllbGRzIGluZGl2aWR1YWxseS4gVGhhdCBtYWtlcyBzZW5zZSwgeW91IG9ubHkgc2VuZCB3aGF0IHlvdSBuZWVkLlxuXG5BaGEhIGBubGFfcHV0X3UzMmAgaXMgZXhwbGljaXRseSBjb3B5aW5nIGp1c3QgNCBieXRlcywgc28gaXQncyBoYW5kbGluZyB0aGUgMzIgYml0IGludHMuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpczogdGhlIGBubGFfcHV0YCBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCBjb3BpZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSBgcy1cdTAwM2VzaGFyZWRfc2VjcmV0YCB1c2luZyBgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCwgcy1cdTAwM2VzaGFyZWRfc2VjcmV0X2xlbiArIChzLVx1MDAzZXNoYXJlZF9zZWNyZXRfbGVuIFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpYC4gTGV0IG1lIHBhcnNlIHRoYXQuIE9rLCBpdCdzIGNvcHlpbmcgZWl0aGVyIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBzaGFyZWQgc2VjcmV0LCBvciBgU0hBUkVEX1NFQ1JFVF9NQVhgICh3aGljaGV2ZXIgaXMgc21hbGxlcikgcGx1cyB0aGUgbnVsbCB0ZXJtaW5hdG9yIChpZiBpdCBmaXRzKS4gQmFzaWNhbGx5LCBpdCdzIG9ubHkgY29weWluZyB0aGUgKnN0cmluZyogb2YgdGhlIHNoYXJlZCBzZWNyZXQsIG5vdCB0aGUgd2hvbGUgcG90ZW50aWFsbHkgcGFkZGVkIHNwYWNlIGFsbG9jYXRlZCBmb3IgaXQgd2l0aGluIHRoZSBzdHJ1Y3QhXG5cblRoaXMgaXMgYSBrZXkgb3B0aW1pemF0aW9uLiBJdCBhdm9pZHMgdW5uZWNlc3NhcnkgZGF0YSB0cmFuc2ZlciBhbmQga2VlcHMgdGhpbmdzIGxlYW4uIEJ1dCBub3cgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ3ZlIGdvdCB0byBjb25zaWRlciBhbGwgdGhlIG90aGVyIGZpZWxkcyBpbiB0aGUgc3RydWN0LiBJIG5lZWQgdG8ga2VlcCByZWFkaW5nIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCdzIGRlYWxpbmcgd2l0aCBldmVyeXRoaW5nIGVsc2UuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgb3RoZXIgZ290Y2hhcyBvciBvcHRpbWl6YXRpb25zIEkndmUgbWlzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTczLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTY6NDIuOTUxODM4MzU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDQxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDQxOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9SUl9DT05GTElDVCwgcy1cXHUwMDNlcnJfY29uZmxpY3QpKVxcbjIwNDI6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA0MzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfT05fQ09OR0VTVElPTiwgcy1cXHUwMDNlb25fY29uZ2VzdGlvbikpXFxuMjA0NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDQ1OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9DT05HX0ZJTEwsIHMtXFx1MDAzZWNvbmdfZmlsbCkpXFxuMjA0NjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDQ3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9DT05HX0VYVEVOVFMsIHMtXFx1MDAzZWNvbmdfZXh0ZW50cykpXFxuMjA0ODpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDQ5OlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RXT19QUklNQVJJRVMsIHMtXFx1MDAzZXR3b19wcmltYXJpZXMpKVxcbjIwNTA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA1MTpcXHRcXHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9ESVNDQVJEX01ZX0RBVEEsIHMtXFx1MDAzZWRpc2NhcmRfbXlfZGF0YSkpXFxuMjA1MjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDUzOlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RDUF9DT1JLLCBzLVxcdTAwM2V0Y3BfY29yaykpXFxuMjA1NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDU1OlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0FMV0FZU19BU0JQLCBzLVxcdTAwM2VhbHdheXNfYXNicCkpXFxuMjA1NjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDU3OlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX1RFTlRBVElWRSwgcy1cXHUwMDNldGVudGF0aXZlKSlcXG4yMDU4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNTk6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVVNFX1JMRSwgcy1cXHUwMDNldXNlX3JsZSkpXFxuMjA2MDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDYxOlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0NTVU1TX0FGVEVSX0NSQVNIX09OTFksIHMtXFx1MDAzZWNzdW1zX2FmdGVyX2NyYXNoX29ubHkpKVxcbjIwNjI6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA2MzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfU09DS19DSEVDS19USU1FTywgcy1cXHUwMDNlc29ja19jaGVja190aW1lbykpXFxuMjA2NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDY1OlxcdFxcbjIwNjY6XFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgdGxhKTtcXG4yMDY3OlxcdFxcdHJldHVybiAwO1xcbjIwNjg6XFx0XFxuMjA2OTpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuMjA3MDpcXHRcXHRpZiAodGxhKVxcbjIwNzE6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdGxhKTtcXG4yMDcyOlxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMjA3MzpcXHR9XFxuMjA3NDpcXHRcXG4yMDc1OlxcdGludCBzZXRfcm9sZV9wYXJtc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNldF9yb2xlX3Bhcm1zICpzKVxcbjIwNzY6XFx0e1xcbjIwNzc6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGxhID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBEUkJEX05MQV9TRVRfUk9MRV9QQVJNUyk7XFxuMjA3ODpcXHRcXG4yMDc5OlxcdFxcdGlmICghdGxhKVxcbjIwODA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA4MTpcXHRcXG4yMDgyOlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX1NFVF9ST0xFX1BBUk1TX0FTU1VNRV9VUFRPREFURSwgcy1cXHUwMDNlYXNzdW1lX3VwdG9kYXRlKSlcXG4yMDgzOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwODQ6XFx0XFxuMjA4NTpcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCB0bGEpO1xcbjIwODY6XFx0XFx0cmV0dXJuIDA7XFxuMjA4NzpcXHRcXG4yMDg4OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4yMDg5OlxcdFxcdGlmICh0bGEpXFxuMjA5MDpcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCB0bGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjo0Mi45NTIwNTY2NjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMwNzA5ODkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBTYW5pdGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBuZXRfY29uZl90b19za2JgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGRvaW5nIGEgZmllbGQtYnktZmllbGQgY29weS4gTm90aGluZyB0b28gc3VycHJpc2luZyB0aGVyZS4gQnV0IHdhaXQsIHRoZW4gYG5sYV9wdXRgIGlzIGludm9sdmVkLCBhbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBjb3B5aW5nIGBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLCBzLVx1MDAzZXNoYXJlZF9zZWNyZXRfbGVuICsgKHMtXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSlgIGJ5dGVzIGZyb20gYHMtXHUwMDNlc2hhcmVkX3NlY3JldGAuIFJpZ2h0LCBjbGFzc2ljIGBubGFfcHV0YCB1c2FnZS5cblxuTm93LCBpZiBgZXhjbHVkZV9zZW5zaXRpdmVgIGlzIHRydWUsIHRoZSBjb2RlIHplcm9lcyBvdXQgYG5jX2NsZWFuLnNoYXJlZF9zZWNyZXRgIGFuZCBzZXRzIGBuY19jbGVhbi5zaGFyZWRfc2VjcmV0X2xlbmAgdG8gMC4gU28sIHdoZW4gYG5sYV9wdXRgIHJ1bnMgd2l0aCB0aGlzIHNhbml0aXplZCBgbmNfY2xlYW5gLCBpdCB3aWxsIGNvcHkgYG1pbl90KGludCwgNjQsIDAgKyAoMCBcdTAwM2MgNjQpKWAsIHdoaWNoIHNpbXBsaWZpZXMgdG8ganVzdCAxIGJ5dGUuIFRoYXQgbWVhbnMgaXQncyBjb3B5aW5nIGEgc2luZ2xlIGJ5dGUgZnJvbSBgbmNfY2xlYW4uc2hhcmVkX3NlY3JldGAuIEFuZCBzaW5jZSB0aGF0J3MgYmVlbiB6ZXJvZWQsIGl0J3MgY29weWluZyBhIDAgYnl0ZS4gTWFrZXMgc2Vuc2UuXG5cbkJ1dCBob2xkIG9uLCB3aGF0IGFib3V0IGFsbCB0aGUgb3RoZXIgZmllbGRzPyBUaGUgY29kZSBkb2VzIGEgYG5jX2NsZWFuID0gKm5jO2Agd2hpY2ggY29waWVzIGV2ZXJ5dGhpbmcgZnJvbSBgbmNgIHRvIGBuY19jbGVhbmAuIE5vdyBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hldGhlciB0aGVyZSBjb3VsZCBiZSB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBgbmNgIGFmdGVyIGl0J3MgYWxsb2NhdGVkLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYG5jYCBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB0byBiZSBzdXJlLiBUaGF0J3MgdGhlIG5leHQgc3RlcDsgSSBuZWVkIHRvIGZvbGxvdyB0aGUgYWxsb2NhdGlvbiBvZiBgbmV0X2NvbmZgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNjo1MC4yNTkxNTgzNzlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjk4NzA4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipzaXplb2YuKm5ldF9jb25mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svZHJiZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjUwLjMyMDQ2NTYxN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODM1MjI5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqU2VhcmNoaW5nIGZvciBOZXR3b3JrIENvbmZpZ3VyYXRpb24gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb2RlIHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBtZW1vcnkgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiBkYXRhLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cnkgYW5kIHBpbnBvaW50IGl0IGRpcmVjdGx5IHVzaW5nIGEgY291cGxlIG9mIGRpZmZlcmVudCBhcHByb2FjaGVzLiBJJ2xsIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBzZWFyY2guIEknbSBnb2luZyB0byBsb29rIGZvciBpbnN0YW5jZXMgd2hlcmUgYGttYWxsb2NgIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgc2l6ZW9mYCBvcGVyYXRvciBjYWxjdWxhdGlvbnMgdGhhdCBpbnZvbHZlIGBuZXRfY29uZmAuIFRoYXQgc2hvdWxkIGRpcmVjdGx5IGlkZW50aWZ5IGFsbG9jYXRpb25zIHdpdGggdGhlIGtlcm5lbCBtZW1vcnkgYWxsb2NhdG9yLiBJJ2xsIGJyb2FkZW4gdGhlIHNjb3BlIHNsaWdodGx5IGlmIHRoYXQncyB0b28gcmVzdHJpY3RpdmUuIElmIEknbSBub3Qgc3VjY2Vzc2Z1bCB3aXRoIHRoZSBga21hbGxvY2Agc2VhcmNoLCB0aGVuIEknbGwgbG9vayBmb3IgZ2VuZXJhbCBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBzdWNoIGFzIGBhbGxvY2AsIGxpa2VseSBjb3VwbGVkIHdpdGggYG5ldF9jb25mYCBhcyB0aGUgZGF0YSBiZWluZyBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBzb2xpZCwgdGFyZ2V0ZWQgYXBwcm9hY2ggdG8gZmluZGluZyB3aGF0IEknbSBsb29raW5nIGZvci4gTGV0J3Mgc2VlIHdoYXQgdHVybnMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTY6MTY6NTcuMTU1Njk4MzIyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQyODA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvYy4qbmV0X2NvbmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTIzOTU9c3RhdGljIGVudW0gZHJiZF9yZXRfY29kZVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MjM5NjphbGxvY19jcnlwdG8oc3RydWN0IGNyeXB0byAqY3J5cHRvLCBzdHJ1Y3QgbmV0X2NvbmYgKm5ld19uZXRfY29uZilcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTIzOTcte1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDAwLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MjQwMTpcXHRydiA9IGFsbG9jX3NoYXNoKFxcdTAwMjZjcnlwdG8tXFx1MDAzZWNzdW1zX3RmbSwgbmV3X25ldF9jb25mLVxcdTAwM2Vjc3Vtc19hbGcsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDAyLVxcdFxcdFxcdCBFUlJfQ1NVTVNfQUxHKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQwNC1cXHRcXHRyZXR1cm4gcnY7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNDA1OlxcdHJ2ID0gYWxsb2Nfc2hhc2goXFx1MDAyNmNyeXB0by1cXHUwMDNldmVyaWZ5X3RmbSwgbmV3X25ldF9jb25mLVxcdTAwM2V2ZXJpZnlfYWxnLFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQwNi1cXHRcXHRcXHQgRVJSX1ZFUklGWV9BTEcpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDA4LVxcdFxcdHJldHVybiBydjtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI0MDk6XFx0cnYgPSBhbGxvY19zaGFzaChcXHUwMDI2Y3J5cHRvLVxcdTAwM2VpbnRlZ3JpdHlfdGZtLCBuZXdfbmV0X2NvbmYtXFx1MDAzZWludGVncml0eV9hbGcsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNDEwLVxcdFxcdFxcdCBFUlJfSU5URUdSSVRZX0FMRyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTI0MzI9aW50IGRyYmRfbmxfY2hnX25ldF9vcHRzX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjQ1Mi1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI0NTM6XFx0bmV3X25ldF9jb25mID0ga3phbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI0NTQtXFx0aWYgKCFuZXdfbmV0X2NvbmYpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjUxMi1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI1MTM6XFx0cmV0Y29kZSA9IGFsbG9jX2NyeXB0byhcXHUwMDI2Y3J5cHRvLCBuZXdfbmV0X2NvbmYpO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjUxNC1cXHRpZiAocmV0Y29kZSAhPSBOT19FUlJPUilcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MjU4Nz1pbnQgZHJiZF9ubF9jb25uZWN0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMjY0NC1cXHQvKiBhbGxvY2F0aW9uIG5vdCBpbiB0aGUgSU8gcGF0aCwgZHJiZHNldHVwIC8gbmV0bGluayBwcm9jZXNzIGNvbnRleHQgKi9cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjI2NDU6XFx0bmV3X25ldF9jb25mID0ga3phbGxvY19vYmooKm5ld19uZXRfY29uZik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0yNjQ2LVxcdGlmICghbmV3X25ldF9jb25mKSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI2NjMtXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoyNjY0OlxcdHJldGNvZGUgPSBhbGxvY19jcnlwdG8oXFx1MDAyNmNyeXB0bywgbmV3X25ldF9jb25mKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTI2NjUtXFx0aWYgKHJldGNvZGUgIT0gTk9fRVJST1IpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jPTM0NDU9c3RhdGljIGludCByZWNlaXZlX3Byb3RvY29sKHN0cnVjdCBkcmJkX2Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIHN0cnVjdCBwYWNrZXRfaW5mbyAqcGkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jLTM1NDktXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYzozNTUwOlxcdG5ld19uZXRfY29uZiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZXRfY29uZik7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYy0zNTUxLVxcdGlmICghbmV3X25ldF9jb25mKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYz0zNjU0PXN0YXRpYyBpbnQgcmVjZWl2ZV9TeW5jUGFyYW0oc3RydWN0IGRyYmRfY29ubmVjdGlvbiAqY29ubmVjdGlvbiwgc3RydWN0IHBhY2tldF9pbmZvICpwaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMtMzc5Ni1cXHRcXHRpZiAodmVyaWZ5X3RmbSB8fCBjc3Vtc190Zm0pIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jOjM3OTc6XFx0XFx0XFx0bmV3X25ldF9jb25mID0ga3phbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jLTM3OTgtXFx0XFx0XFx0aWYgKCFuZXdfbmV0X2NvbmYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE2OjU3LjIxNzEzNzY0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjQyNDEyNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gaW4gYHJlY2VpdmVfcHJvdG9jb2xgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcmVjZWl2ZV9wcm90b2NvbGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIERSQkQgcmVjZWl2ZXIgY29kZSwgYW5kIEkgc2VlIHNvbWV0aGluZyB0aGF0J3MgbWFraW5nIG1lIHBhdXNlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHVzaW5nIGBrbWFsbG9jX29iaihzdHJ1Y3QgbmV0X2NvbmYpYCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGBuZXdfbmV0X2NvbmZgLiBUaGF0J3MgYSBrZXkgZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3kgaW4gdGhpcyBjb250ZXh0LiBMZXQncyBkZWx2ZSBpbnRvIGBkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgcmVjZWl2ZV9wcm90b2NvbGAgZnVuY3Rpb24gdG8gc2VlIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYG5ldF9jb25mYCBzdHJ1Y3R1cmUgaXMgdXNlZCBhbmQgd2hhdCB0aGlzIG1lYW5zIGZvciB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNzowNy44NTk1NTU3MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTQwOlxcdFxcbjM1NDE6XFx0XFx0XFx0aGFzaF9zaXplID0gY3J5cHRvX3NoYXNoX2RpZ2VzdHNpemUocGVlcl9pbnRlZ3JpdHlfdGZtKTtcXG4zNTQyOlxcdFxcdFxcdGludF9kaWdfaW4gPSBrbWFsbG9jKGhhc2hfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMzU0MzpcXHRcXHRcXHRpbnRfZGlnX3Z2ID0ga21hbGxvYyhoYXNoX3NpemUsIEdGUF9LRVJORUwpO1xcbjM1NDQ6XFx0XFx0XFx0aWYgKCEoaW50X2RpZ19pbiBcXHUwMDI2XFx1MDAyNiBpbnRfZGlnX3Z2KSkge1xcbjM1NDU6XFx0XFx0XFx0XFx0ZHJiZF9lcnIoY29ubmVjdGlvbiwgXFxcIkFsbG9jYXRpb24gb2YgYnVmZmVycyBmb3IgZGF0YSBpbnRlZ3JpdHkgY2hlY2tpbmcgZmFpbGVkXFxcXG5cXFwiKTtcXG4zNTQ2OlxcdFxcdFxcdFxcdGdvdG8gZGlzY29ubmVjdDtcXG4zNTQ3OlxcdFxcdFxcdH1cXG4zNTQ4OlxcdFxcdH1cXG4zNTQ5OlxcdFxcbjM1NTA6XFx0XFx0bmV3X25ldF9jb25mID0ga21hbGxvY19vYmooc3RydWN0IG5ldF9jb25mKTtcXG4zNTUxOlxcdFxcdGlmICghbmV3X25ldF9jb25mKVxcbjM1NTI6XFx0XFx0XFx0Z290byBkaXNjb25uZWN0O1xcbjM1NTM6XFx0XFxuMzU1NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjb25uZWN0aW9uLVxcdTAwM2VkYXRhLm11dGV4KTtcXG4zNTU1OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvbm5lY3Rpb24tXFx1MDAzZXJlc291cmNlLVxcdTAwM2Vjb25mX3VwZGF0ZSk7XFxuMzU1NjpcXHRcXHRvbGRfbmV0X2NvbmYgPSBjb25uZWN0aW9uLVxcdTAwM2VuZXRfY29uZjtcXG4zNTU3OlxcdFxcdCpuZXdfbmV0X2NvbmYgPSAqb2xkX25ldF9jb25mO1xcbjM1NTg6XFx0XFxuMzU1OTpcXHRcXHRuZXdfbmV0X2NvbmYtXFx1MDAzZXdpcmVfcHJvdG9jb2wgPSBwX3Byb3RvO1xcbjM1NjA6XFx0XFx0bmV3X25ldF9jb25mLVxcdTAwM2VhZnRlcl9zYl8wcCA9IGNvbnZlcnRfYWZ0ZXJfc2IocF9hZnRlcl9zYl8wcCk7XFxuMzU2MTpcXHRcXHRuZXdfbmV0X2NvbmYtXFx1MDAzZWFmdGVyX3NiXzFwID0gY29udmVydF9hZnRlcl9zYihwX2FmdGVyX3NiXzFwKTtcXG4zNTYyOlxcdFxcdG5ld19uZXRfY29uZi1cXHUwMDNlYWZ0ZXJfc2JfMnAgPSBjb252ZXJ0X2FmdGVyX3NiKHBfYWZ0ZXJfc2JfMnApO1xcbjM1NjM6XFx0XFx0bmV3X25ldF9jb25mLVxcdTAwM2V0d29fcHJpbWFyaWVzID0gcF90d29fcHJpbWFyaWVzO1xcbjM1NjQ6XFx0XFxuMzU2NTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY29ubmVjdGlvbi1cXHUwMDNlbmV0X2NvbmYsIG5ld19uZXRfY29uZik7XFxuMzU2NjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbm5lY3Rpb24tXFx1MDAzZXJlc291cmNlLVxcdTAwM2Vjb25mX3VwZGF0ZSk7XFxuMzU2NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbm5lY3Rpb24tXFx1MDAzZWRhdGEubXV0ZXgpO1xcbjM1Njg6XFx0XFxuMzU2OTpcXHRcXHRjcnlwdG9fZnJlZV9zaGFzaChjb25uZWN0aW9uLVxcdTAwM2VwZWVyX2ludGVncml0eV90Zm0pO1xcbjM1NzA6XFx0XFx0a2ZyZWUoY29ubmVjdGlvbi1cXHUwMDNlaW50X2RpZ19pbik7XFxuMzU3MTpcXHRcXHRrZnJlZShjb25uZWN0aW9uLVxcdTAwM2VpbnRfZGlnX3Z2KTtcXG4zNTcyOlxcdFxcdGNvbm5lY3Rpb24tXFx1MDAzZXBlZXJfaW50ZWdyaXR5X3RmbSA9IHBlZXJfaW50ZWdyaXR5X3RmbTtcXG4zNTczOlxcdFxcdGNvbm5lY3Rpb24tXFx1MDAzZWludF9kaWdfaW4gPSBpbnRfZGlnX2luO1xcbjM1NzQ6XFx0XFx0Y29ubmVjdGlvbi1cXHUwMDNlaW50X2RpZ192diA9IGludF9kaWdfdnY7XFxuMzU3NTpcXHRcXG4zNTc2OlxcdFxcdGlmIChzdHJjbXAob2xkX25ldF9jb25mLVxcdTAwM2VpbnRlZ3JpdHlfYWxnLCBpbnRlZ3JpdHlfYWxnKSlcXG4zNTc3OlxcdFxcdFxcdGRyYmRfaW5mbyhjb25uZWN0aW9uLCBcXFwicGVlciBkYXRhLWludGVncml0eS1hbGc6ICVzXFxcXG5cXFwiLFxcbjM1Nzg6XFx0XFx0XFx0XFx0ICBpbnRlZ3JpdHlfYWxnWzBdID8gaW50ZWdyaXR5X2FsZyA6IFxcXCIobm9uZSlcXFwiKTtcXG4zNTc5OlxcdFxcbjM1ODA6XFx0XFx0a3ZmcmVlX3JjdV9taWdodHNsZWVwKG9sZF9uZXRfY29uZik7XFxuMzU4MTpcXHRcXHRyZXR1cm4gMDtcXG4zNTgyOlxcdFxcbjM1ODM6XFx0ZGlzY29ubmVjdF9yY3VfdW5sb2NrOlxcbjM1ODQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzU4NTpcXHRkaXNjb25uZWN0OlxcbjM1ODY6XFx0XFx0Y3J5cHRvX2ZyZWVfc2hhc2gocGVlcl9pbnRlZ3JpdHlfdGZtKTtcXG4zNTg3OlxcdFxcdGtmcmVlKGludF9kaWdfaW4pO1xcbjM1ODg6XFx0XFx0a2ZyZWUoaW50X2RpZ192dik7XFxuMzU4OTpcXHRcXHRjb25uX3JlcXVlc3Rfc3RhdGUoY29ubmVjdGlvbiwgTlMoY29ubiwgQ19ESVNDT05ORUNUSU5HKSwgQ1NfSEFSRCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE3OjA3Ljg1OTkzMzY1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMDU1MTkzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGFkZGluZyBDb25jZXJucyBpbiBgbmV0X2NvbmZgIFN0cnVjdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHJlY2VpdmVfcHJvdG9jb2xgIGZ1bmN0aW9uLCBhbmQgaXQncyBncmFiYmluZyBhIG5ldyBgbmV0X2NvbmZgIHN0cnVjdCB1c2luZyBga21hbGxvY19vYmpgLiBTZWVtcyBzdGFuZGFyZCBlbm91Z2guIEJ1dCB0aGVuLCBpdCBpbW1lZGlhdGVseSBjb3BpZXMgdGhlICplbnRpcmUqIGNvbnRlbnRzIG9mIGBvbGRfbmV0X2NvbmZgIGludG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBvbmUgd2l0aCBgKm5ld19uZXRfY29uZiA9ICpvbGRfbmV0X2NvbmY7YC4gTm93LCB3aGVyZSBpcyBgb2xkX25ldF9jb25mYCBldmVuIGNvbWluZyBmcm9tPyBSaWdodCwgaXQncyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgIGluIGBkcmJkX25sX2Nvbm5lY3RfZG9pdGAgYW5kIGBkcmJkX25sX2NoZ19uZXRfb3B0c19kb2l0YC4gVGhhdCBtZWFucyB0aGUgb3JpZ2luYWwgYG5ldF9jb25mYCBpcyB6ZXJvLWluaXRpYWxpemVkLlxuXG5TbywgdGhpcyBpbml0aWFsIGNvcHkgemVyb3Mgb3V0IHRoZSBwYWRkaW5nLCB3aGljaCBpcyBnb29kIGZvciBhdm9pZGluZyBwb3RlbnRpYWwgaXNzdWVzLiBCdXQgaXQgZ290IG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgd2hlbiBgbmNfY2xlYW4gPSAqbmM7YCBpcyB1c2VkPyBUaGF0IGxvb2tzIGxpa2UgaXQgY29waWVzIHRoZSB3aG9sZSBzdHJ1Y3QgZnJvbSBgKm5jYCB3aGljaCBzaG91bGQgaW5jbHVkZSB0aGUgcGFkZGluZy4gSWYgYCpuY2AgaGFzIHplcm9lZCBwYWRkaW5nICh3aGljaCBpdCBzaG91bGQsIGZyb20gdGhlIHByZXZpb3VzIGFsbG9jYXRpb24pLCB0aGVuIGBuY19jbGVhbmAgc2hvdWxkICphbHNvKiBoYXZlIHplcm9lZCBwYWRkaW5nLiBUaGlzIGlzIGEgbG9jYWwgdmFyaWFibGUgb24gdGhlIHN0YWNrLCBub3QgdW5pbml0aWFsaXplZC5cblxuVGhlIG5hZ2dpbmcgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgY2FzZXMgd2hlcmUgYG5jX2NsZWFuYCAqd291bGQqIGVuZCB1cCB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZz8gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIHRyaWNreS4gSWYgYCpuY2AgaXMgYXNzaWduZWQgZmllbGQtYnktZmllbGQsIHRoZW4gdGhlIHBhZGRpbmcgbWlnaHQgbm90IGdldCBjb3BpZWQuIFN0cnVjdCBhc3NpZ25tZW50cyBpbiBDLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyJ3Mgb3B0aW1pemF0aW9uLCBjb3VsZCBwb3RlbnRpYWxseSBkbyB0aGlzIGZpZWxkLWJ5LWZpZWxkIGNvcHksIHNraXBwaW5nIG92ZXIgdGhlIHBhZGRpbmcuIElmIHRoYXQgaGFwcGVucywgdGhlbiBgbmNfY2xlYW5gJ3MgcGFkZGluZyBpcyBsZWZ0IGFzIHdoYXRldmVyIGdhcmJhZ2Ugd2FzIG9uIHRoZSBzdGFjay5cblxuVGhlbiwgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYG5ldF9jb25mX3RvX3NrYmAgaXMgY2FsbGVkIHdpdGggYFx1MDAyNm5jX2NsZWFuYC4gTm93LCBteSB1bmRlcnN0YW5kaW5nIGlzIGBuZXRfY29uZl90b19za2JgIGNvcGllcyBmaWVsZCBieSBmaWVsZCwgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfdThgLCBhbmQgYG5sYV9wdXRgIGZvciBzdHJpbmdzLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgaXQgKmRvZXNuJ3QqIGNvcHkgdGhlIHBhZGRpbmcgaXRzZWxmIGludG8gdGhlIFNLQiwgd2hpY2ggaXMgY3J1Y2lhbC4gU28sIGl0IGxvb2tzIGxpa2UgYG5ldF9jb25mX3RvX3NrYmAgd29uJ3QgbGVhayB0aGUgdW5pbml0aWFsaXplZCBwYWRkaW5nIGluIHRoZSAqdXN1YWwqIGNhc2UuIEJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrIGBuZXRfY29uZl90b19za2JgIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ5OSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE3OjE1Ljg2NTQ1NzEzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTkxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk5MTpcXHRpbnQgbmV0X2NvbmZfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfY29uZiAqcylcXG4xOTkyOlxcdHtcXG4xOTkzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRsYSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgRFJCRF9OTEFfTkVUX0NPTkYpO1xcbjE5OTQ6XFx0XFxuMTk5NTpcXHRcXHRpZiAoIXRsYSlcXG4xOTk2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE5OTc6XFx0XFxuMTk5ODpcXHRcXHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9TSEFSRURfU0VDUkVULCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjE5OTk6XFx0XFx0XFx0XFx0cy1cXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gKyAocy1cXHUwMDNlc2hhcmVkX3NlY3JldF9sZW4gXFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVxcdTAwM2VzaGFyZWRfc2VjcmV0KSlcXG4yMDAwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMDE6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1JBTV9ITUFDX0FMRywgbWluX3QoaW50LCBTSEFSRURfU0VDUkVUX01BWCxcXG4yMDAyOlxcdFxcdFxcdFxcdHMtXFx1MDAzZWNyYW1faG1hY19hbGdfbGVuICsgKHMtXFx1MDAzZWNyYW1faG1hY19hbGdfbGVuIFxcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cXHUwMDNlY3JhbV9obWFjX2FsZykpXFxuMjAwMzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDA0OlxcdFxcdGlmIChubGFfcHV0KHNrYiwgRFJCRF9BX05FVF9DT05GX0lOVEVHUklUWV9BTEcsIG1pbl90KGludCwgU0hBUkVEX1NFQ1JFVF9NQVgsXFxuMjAwNTpcXHRcXHRcXHRcXHRzLVxcdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiArIChzLVxcdTAwM2VpbnRlZ3JpdHlfYWxnX2xlbiBcXHUwMDNjIFNIQVJFRF9TRUNSRVRfTUFYKSksIHMtXFx1MDAzZWludGVncml0eV9hbGcpKVxcbjIwMDY6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAwNzpcXHRcXHRpZiAobmxhX3B1dChza2IsIERSQkRfQV9ORVRfQ09ORl9WRVJJRllfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjIwMDg6XFx0XFx0XFx0XFx0cy1cXHUwMDNldmVyaWZ5X2FsZ19sZW4gKyAocy1cXHUwMDNldmVyaWZ5X2FsZ19sZW4gXFx1MDAzYyBTSEFSRURfU0VDUkVUX01BWCkpLCBzLVxcdTAwM2V2ZXJpZnlfYWxnKSlcXG4yMDA5OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTA6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUxHLCBtaW5fdChpbnQsIFNIQVJFRF9TRUNSRVRfTUFYLFxcbjIwMTE6XFx0XFx0XFx0XFx0cy1cXHUwMDNlY3N1bXNfYWxnX2xlbiArIChzLVxcdTAwM2Vjc3Vtc19hbGdfbGVuIFxcdTAwM2MgU0hBUkVEX1NFQ1JFVF9NQVgpKSwgcy1cXHUwMDNlY3N1bXNfYWxnKSlcXG4yMDEyOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTM6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1dJUkVfUFJPVE9DT0wsIHMtXFx1MDAzZXdpcmVfcHJvdG9jb2wpKVxcbjIwMTQ6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAxNTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ09OTkVDVF9JTlQsIHMtXFx1MDAzZWNvbm5lY3RfaW50KSlcXG4yMDE2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMTc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1RJTUVPVVQsIHMtXFx1MDAzZXRpbWVvdXQpKVxcbjIwMTg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAxOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfUElOR19JTlQsIHMtXFx1MDAzZXBpbmdfaW50KSlcXG4yMDIwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMjE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1BJTkdfVElNRU8sIHMtXFx1MDAzZXBpbmdfdGltZW8pKVxcbjIwMjI6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAyMzpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfU05EQlVGX1NJWkUsIHMtXFx1MDAzZXNuZGJ1Zl9zaXplKSlcXG4yMDI0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMjU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JDVkJVRl9TSVpFLCBzLVxcdTAwM2VyY3ZidWZfc2l6ZSkpXFxuMjAyNjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDI3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9LT19DT1VOVCwgcy1cXHUwMDNla29fY291bnQpKVxcbjIwMjg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAyOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfTUFYX0JVRkZFUlMsIHMtXFx1MDAzZW1heF9idWZmZXJzKSlcXG4yMDMwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMzE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX01BWF9FUE9DSF9TSVpFLCBzLVxcdTAwM2VtYXhfZXBvY2hfc2l6ZSkpXFxuMjAzMjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDMzOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9VTlBMVUdfV0FURVJNQVJLLCBzLVxcdTAwM2V1bnBsdWdfd2F0ZXJtYXJrKSlcXG4yMDM0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwMzU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0FGVEVSX1NCXzBQLCBzLVxcdTAwM2VhZnRlcl9zYl8wcCkpXFxuMjAzNjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDM3OlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9BRlRFUl9TQl8xUCwgcy1cXHUwMDNlYWZ0ZXJfc2JfMXApKVxcbjIwMzg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjAzOTpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUZURVJfU0JfMlAsIHMtXFx1MDAzZWFmdGVyX3NiXzJwKSlcXG4yMDQwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNDE6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX1JSX0NPTkZMSUNULCBzLVxcdTAwM2Vycl9jb25mbGljdCkpXFxuMjA0MjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDQzOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9PTl9DT05HRVNUSU9OLCBzLVxcdTAwM2Vvbl9jb25nZXN0aW9uKSlcXG4yMDQ0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNDU6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTkdfRklMTCwgcy1cXHUwMDNlY29uZ19maWxsKSlcXG4yMDQ2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNDc6XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRFJCRF9BX05FVF9DT05GX0NPTkdfRVhURU5UUywgcy1cXHUwMDNlY29uZ19leHRlbnRzKSlcXG4yMDQ4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNDk6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVFdPX1BSSU1BUklFUywgcy1cXHUwMDNldHdvX3ByaW1hcmllcykpXFxuMjA1MDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDUxOlxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgRFJCRF9BX05FVF9DT05GX0RJU0NBUkRfTVlfREFUQSwgcy1cXHUwMDNlZGlzY2FyZF9teV9kYXRhKSlcXG4yMDUyOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNTM6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVENQX0NPUkssIHMtXFx1MDAzZXRjcF9jb3JrKSlcXG4yMDU0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNTU6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQUxXQVlTX0FTQlAsIHMtXFx1MDAzZWFsd2F5c19hc2JwKSlcXG4yMDU2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNTc6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfVEVOVEFUSVZFLCBzLVxcdTAwM2V0ZW50YXRpdmUpKVxcbjIwNTg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA1OTpcXHRcXHRpZiAobmxhX3B1dF91OChza2IsIERSQkRfQV9ORVRfQ09ORl9VU0VfUkxFLCBzLVxcdTAwM2V1c2VfcmxlKSlcXG4yMDYwOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNjE6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfTkVUX0NPTkZfQ1NVTVNfQUZURVJfQ1JBU0hfT05MWSwgcy1cXHUwMDNlY3N1bXNfYWZ0ZXJfY3Jhc2hfb25seSkpXFxuMjA2MjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDYzOlxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9ORVRfQ09ORl9TT0NLX0NIRUNLX1RJTUVPLCBzLVxcdTAwM2Vzb2NrX2NoZWNrX3RpbWVvKSlcXG4yMDY0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIwNjU6XFx0XFxuMjA2NjpcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCB0bGEpO1xcbjIwNjc6XFx0XFx0cmV0dXJuIDA7XFxuMjA2ODpcXHRcXG4yMDY5OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4yMDcwOlxcdFxcdGlmICh0bGEpXFxuMjA3MTpcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCB0bGEpO1xcbjIwNzI6XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4yMDczOlxcdH1cXG4yMDc0OlxcdFxcbjIwNzU6XFx0aW50IHNldF9yb2xlX3Bhcm1zX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2V0X3JvbGVfcGFybXMgKnMpXFxuMjA3NjpcXHR7XFxuMjA3NzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0bGEgPSBubGFfbmVzdF9zdGFydChza2IsIERSQkRfTkxBX1NFVF9ST0xFX1BBUk1TKTtcXG4yMDc4OlxcdFxcbjIwNzk6XFx0XFx0aWYgKCF0bGEpXFxuMjA4MDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMDgxOlxcdFxcbjIwODI6XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBEUkJEX0FfU0VUX1JPTEVfUEFSTVNfQVNTVU1FX1VQVE9EQVRFLCBzLVxcdTAwM2Vhc3N1bWVfdXB0b2RhdGUpKVxcbjIwODM6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMjA4NDpcXHRcXG4yMDg1OlxcdFxcdG5sYV9uZXN0X2VuZChza2IsIHRsYSk7XFxuMjA4NjpcXHRcXHRyZXR1cm4gMDtcXG4yMDg3OlxcdFxcbjIwODg6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbjIwODk6XFx0XFx0aWYgKHRsYSlcXG4yMDkwOlxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHRsYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE2OjE3OjE1Ljg2NTc2MzkxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTY3MzMwMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiB0aGUgY29kZSBzZWVtcyB0byBjb3B5IGZpZWxkcyBvbmUgYnkgb25lLCBub3QgdGhlIHdob2xlIHN0cnVjdHVyZS4gSXQgdXNlcyBgbmxhX3B1dGAgZm9yIHN0cmluZ3MgYW5kIGRldGVybWluZXMgdGhlIGxlbmd0aCBjYXJlZnVsbHksIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hhdCBoYXBwZW5zIGlmIGBzaGFyZWRfc2VjcmV0X2xlbmAgaXMgemVyby4gSXQgY2FuIGNvcHkgMSBieXRlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlmIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IGluaXRpYWxpemVkISBIb3dldmVyLCBhIHNhbml0aXplZCB2ZXJzaW9uIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBzaGFyZWQgc2VjcmV0IGFuZCBzZXRzIGBzaGFyZWRfc2VjcmV0X2xlbmAgdG8gemVyby4gVGhpcyBtZWFucyBpdCBvbmx5IGNvcGllcyBhIHplcm8gYnl0ZS5cblxuSSB0aG91Z2h0IGFib3V0IG90aGVyIGZpZWxkcy4gSWYgdGhlIG9yaWdpbmFsIGBuZXRfY29uZmAgc3RydWN0IGlzIGZ1bGx5IGluaXRpYWxpemVkLCBzbyBpcyB0aGUgY29weS4gVGhlIG9yaWdpbmFsIGBuZXRfY29uZmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCBvciBga21hbGxvY19vYmpgLCB3aGljaCBlaXRoZXIgZnVsbHkgaW5pdGlhbGl6ZXMgaXQgdG8gemVybyBvciBpcyBjb3BpZWQgZnJvbSBhbm90aGVyIGluaXRpYWxpemVkIHN0cnVjdC5cblxuSSBjb25zaWRlcmVkIHBhZGRpbmcsIGJ1dCB0aGUgYG5sYV9wdXRgIGZ1bmN0aW9ucyBkb24ndCBjb3B5IHN0cnVjdCBwYWRkaW5nLiBUaGVzZSB1c2UgYG5sYV9yZXNlcnZlYCB0byB6ZXJvIG91dCBwYWRkaW5nIGFkZGVkIHRvIHRoZSBza2IuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtlZC5cblxuVGhlIHBhdGNoIGl0c2VsZiByZXBsYWNlcyBjb2RlIHRoYXQgd2FzIGNvbmRpdGlvbmFsbHkgbGVha2luZyB0aGUgc2hhcmVkIHNlY3JldCB0byB1c2VyIHNwYWNlIHdpdGggYSBjYWxsIHRvIGBuZXRfY29uZl90b19za2Jfc2FuaXRpemVkYC4gVGhlIG5ldyB2ZXJzaW9uIGlzIGFsc28gdXNlZCBpbiBvdGhlciBwbGFjZXMuIFRoaXMgaXMgYSBmaXggZm9yIGFuIGluZm9ybWF0aW9uIGxlYWssIHdoZXJlIGluaXRpYWxpemVkIHNlbnNpdGl2ZSBkYXRhIHdhcyBiZWluZyBzZW50IHdoZW4gaXQgc2hvdWxkbid0IGhhdmUgYmVlbi4gVGhpcyBpcyBhIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuIEtNU0FOIGRldGVjdHMgdGhlIGxhdHRlciwgYnV0IG5vdCB0aGUgZm9ybWVyLlxuXG5UaGUgY29kZSBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGBuY19jbGVhbmAsIGJ1dCBgbmNfY2xlYW5gIGlzIG9uIHRoZSBzdGFjayBhbmQgaW5pdGlhbGl6ZWQgYnkgYSBkaXJlY3QgYXNzaWdubWVudCBvZiB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBjb3BpZXMgZmllbGQgYnkgZmllbGQsIG5vdCB0aGUgd2hvbGUgc3RydWN0LCB3aGljaCBtZWFucyB0aGUgcGFkZGluZyBpcyBub3QgY29waWVkLiBFdmVuIGlmIHRoZSBwYWRkaW5nIHdhcyB1bmluaXRpYWxpemVkLCBpdCBpcyBub3QgcmVhZC4gSXQgdXNlcyBgcy1cdTAwM2VzaGFyZWRfc2VjcmV0YCwgYHMtXHUwMDNlY3JhbV9obWFjX2FsZ2AsIGV0Yy4gZGlyZWN0bHk7IGl0IGRvZXNuJ3QgYWNjZXNzIHBhZGRpbmcuXG5cbkxvb2tpbmcgYXQgdGhlIHJ1bGVzLCB0aGlzIHBhdGNoIGlzbid0IG1vZGlmeWluZyBrZXJuZWwgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIGZpeGluZyBhIGxvZ2ljIGJ1ZyBhYm91dCBleHBvc2luZyBpbml0aWFsaXplZCBzZW5zaXRpdmUgZGF0YSwgbm90IGludHJvZHVjaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3Igd3JpdGUuXG5cblRoZSBwYXRjaCB1c2VzIHRoZSBgbmxhX3B1dGAgZnVuY3Rpb24gaW4gYSB3YXkgdGhhdCBjb3VsZCByZWFkIHRoZSBmaXJzdCBieXRlIG9mIGBzaGFyZWRfc2VjcmV0YCwgYW5kIGlmIHRoZSBsZW5ndGggaXMgemVybyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYXJyYXkgaXMgcmVhZC4gSW4gdGhlIHNhbml0aXplZCB2ZXJzaW9uLCB0aGUgc2hhcmVkIHNlY3JldCBhcnJheSBpcyBleHBsaWNpdGx5IHplcm9lZCBiZWZvcmUgY29weWluZy4gVGhlIG90aGVyIGJ5dGVzIGNvcGllZCBhcmUgaW5pdGlhbGl6ZWQuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQgZml4ZXMgYSBsb2dpYyBidWcgcmVsYXRlZCB0byBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLiAqKk5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDYwLCJPdXRwdXRUb2tlbnMiOjI4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNjoxNzozOC44MzMwOTc2MDJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzZW5zaXRpdmUgaW5pdGlhbGl6ZWQgZGF0YSAodGhlIERSQkQgc2hhcmVkIHNlY3JldCkgd2FzIGV4cG9zZWQgdG8gdW5wcml2aWxlZ2VkIHVzZXJzIHZpYSBuZXRsaW5rLiBUbyBmaXggdGhpcywgdGhlIHBhdGNoIGludHJvZHVjZXMgYG5ldF9jb25mX3RvX3NrYl9zYW5pdGl6ZWRgLCB3aGljaCBjb3BpZXMgdGhlIGBuZXRfY29uZmAgc3RydWN0IHRvIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgKGBuY19jbGVhbmApLCB6ZXJvZXMgb3V0IHRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQsIGFuZCB0aGVuIHNlcmlhbGl6ZXMgaXQuIFxcblxcbldoaWxlIGBuY19jbGVhbmAgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgaXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50IChgbmNfY2xlYW4gPSAqbmNgKS4gRnVydGhlcm1vcmUsIHRoZSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfY29uZl90b19za2JgIGNvcGllcyB0aGUgc3RydWN0IGZpZWxkLWJ5LWZpZWxkIGludG8gbmV0bGluayBhdHRyaWJ1dGVzICh1c2luZyBgbmxhX3B1dGAsIGBubGFfcHV0X3UzMmAsIGV0Yy4pIHJhdGhlciB0aGFuIGNvcHlpbmcgdGhlIHN0cnVjdCBhcyBhIHJhdyBtZW1vcnkgYmxvY2suIFRoaXMgZW5zdXJlcyB0aGF0IGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBuZXZlciByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgYHNoYXJlZF9zZWNyZXRgIGZpZWxkIGl0c2VsZiBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgIGJlZm9yZSBzZXJpYWxpemF0aW9uLlxcblxcblNpbmNlIHRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyByYXRoZXIgdGhhbiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZCwgc3RhbmRhcmQgS0FTQU4gYW5kIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbG9naWMgYnVnIHdoZXJlIHNlbnNpdGl2ZSBpbml0aWFsaXplZCBkYXRhICh0aGUgRFJCRCBzaGFyZWQgc2VjcmV0KSB3YXMgZXhwb3NlZCB0byB1bnByaXZpbGVnZWQgdXNlcnMgdmlhIG5ldGxpbmsuIFRvIGZpeCB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgbmV0X2NvbmZfdG9fc2tiX3Nhbml0aXplZGAsIHdoaWNoIGNvcGllcyB0aGUgYG5ldF9jb25mYCBzdHJ1Y3QgdG8gYSBsb2NhbCBzdGFjayB2YXJpYWJsZSAoYG5jX2NsZWFuYCksIHplcm9lcyBvdXQgdGhlIGBzaGFyZWRfc2VjcmV0YCBmaWVsZCwgYW5kIHRoZW4gc2VyaWFsaXplcyBpdC4gXFxuXFxuV2hpbGUgYG5jX2NsZWFuYCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLCBpdCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKGBuY19jbGVhbiA9ICpuY2ApLiBGdXJ0aGVybW9yZSwgdGhlIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24gYG5ldF9jb25mX3RvX3NrYmAgY29waWVzIHRoZSBzdHJ1Y3QgZmllbGQtYnktZmllbGQgaW50byBuZXRsaW5rIGF0dHJpYnV0ZXMgKHVzaW5nIGBubGFfcHV0YCwgYG5sYV9wdXRfdTMyYCwgZXRjLikgcmF0aGVyIHRoYW4gY29weWluZyB0aGUgc3RydWN0IGFzIGEgcmF3IG1lbW9yeSBibG9jay4gVGhpcyBlbnN1cmVzIHRoYXQgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nIGlzIG5ldmVyIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBgc2hhcmVkX3NlY3JldGAgZmllbGQgaXRzZWxmIGlzIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAgYmVmb3JlIHNlcmlhbGl6YXRpb24uXFxuXFxuU2luY2UgdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIHJhdGhlciB0aGFuIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWssIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLCBzdGFuZGFyZCBLQVNBTiBhbmQgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrsnn[1] Phase: Succeeded StartedAt: 2026-08-14 16:17:50 +0000 UTC FinishedAt: 2026-08-14 16:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrsnn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 16:17:50 +0000 UTC FinishedAt: 2026-08-14 16:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrsnn[2] Phase: Succeeded StartedAt: 2026-08-14 16:17:50 +0000 UTC FinishedAt: 2026-08-14 16:31:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrsnn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["drbd_nl_get_connections_dumpit","drbd_nl_get_status_doit","drbd_nl_get_status_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"209a2e53-576a-42fd-8556-d8609e09e6e8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-14 16:17:50 +0000 UTC FinishedAt: 2026-08-14 16:31:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["drbd_nl_get_connections_dumpit","drbd_nl_get_status_doit","drbd_nl_get_status_dumpit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"209a2e53-576a-42fd-8556-d8609e09e6e8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdrsnn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["drbd_nl_get_connections_dumpit","drbd_nl_get_status_doit","drbd_nl_get_status_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"209a2e53-576a-42fd-8556-d8609e09e6e8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 16:17:50 +0000 UTC FinishedAt: 2026-08-14 16:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrsnn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["drbd_nl_get_connections_dumpit","drbd_nl_get_status_doit","drbd_nl_get_status_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"209a2e53-576a-42fd-8556-d8609e09e6e8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 16:17:50 +0000 UTC FinishedAt: 2026-08-14 16:17:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowdrsnn/series-workflowdrsnn-convert-artifact-112333891/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrsnn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["drbd_nl_get_connections_dumpit","drbd_nl_get_status_doit","drbd_nl_get_status_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"209a2e53-576a-42fd-8556-d8609e09e6e8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 16:18:00 +0000 UTC FinishedAt: 2026-08-14 16:30:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrsnn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["drbd_nl_get_connections_dumpit","drbd_nl_get_status_doit","drbd_nl_get_status_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"209a2e53-576a-42fd-8556-d8609e09e6e8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 16:18:00 +0000 UTC FinishedAt: 2026-08-14 16:30:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7b8e595d-65e1-4f5d-a4c3-c15606e79218,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-workflowdrsnn/series-workflowdrsnn-convert-artifact-112333891/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": "4237f070-861d-40e6-8fc8-1b02ffe64ec5", "success": false },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-workflowdrsnn/series-workflowdrsnn-build-action-872779441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrsnn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["drbd_nl_get_connections_dumpit","drbd_nl_get_status_doit","drbd_nl_get_status_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"209a2e53-576a-42fd-8556-d8609e09e6e8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 16:18:00 +0000 UTC FinishedAt: 2026-08-14 16:30:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7b8e595d-65e1-4f5d-a4c3-c15606e79218,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-workflowdrsnn/series-workflowdrsnn-convert-artifact-112333891/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": "4237f070-861d-40e6-8fc8-1b02ffe64ec5", "success": false },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-workflowdrsnn/series-workflowdrsnn-build-action-872779441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrsnn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["drbd_nl_get_connections_dumpit","drbd_nl_get_status_doit","drbd_nl_get_status_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"209a2e53-576a-42fd-8556-d8609e09e6e8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-08-14 16:30:55 +0000 UTC FinishedAt: 2026-08-14 16:31:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrsnn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["drbd_nl_get_connections_dumpit","drbd_nl_get_status_doit","drbd_nl_get_status_dumpit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c7c76f9232bd34835d821f14abdc5fafc17bc938","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_DRBD"],"series_id":"209a2e53-576a-42fd-8556-d8609e09e6e8","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Failed StartedAt: 2026-08-14 16:30:55 +0000 UTC FinishedAt: 2026-08-14 16:30:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}