Name: series-workflowjbj5c Phase: Succeeded StartedAt: 2026-09-14 11:18:05 +0000 UTC FinishedAt: 2026-09-14 15:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[0] Phase: Succeeded StartedAt: 2026-09-14 11:18:05 +0000 UTC FinishedAt: 2026-09-14 11:40:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 11:18:05 +0000 UTC FinishedAt: 2026-09-14 11:40:57 +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": "5a609d962aa41cdb78dce495126dc4292c887254", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "MEMCG", "BLK_CGROUP", "CGROUP_WRITEBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "5a609d962aa41cdb78dce495126dc4292c887254", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "MEMCG", "BLK_CGROUP", "CGROUP_WRITEBACK" ], "series_id": "af52325d-8ef1-4a0f-a799-6d231567fbf7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bdev_flush_by_dev", "bdev_frn_flush_work", "mem_cgroup_track_foreign_bdev", "mem_cgroup_track_foreign_dirty_slowpath", "mem_cgroup_flush_foreign" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "5a609d962aa41cdb78dce495126dc4292c887254", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7Q0dST1VQX1dSSVRFQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JkZXZfZmx1c2hfYnlfZGV2JiMzNDssCiAgICAmIzM0O2JkZXZfZnJuX2ZsdXNoX3dvcmsmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIGRpcnR5IHBhZ2UgdHJhY2tpbmcgYW5kIHdyaXRlYmFjayBmb3IgYmxvY2sgZGV2aWNlIHBhZ2UgY2FjaGVzIGJ5IGFkZGluZyBgYmRldl9mcm5fZmx1c2hfY3R4YCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB0cmFja2luZyBkaXJ0eWluZyBvZiBibG9jayBkZXZpY2UgaW5vZGVzLCBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgZGVkaWNhdGVkIGFzeW5jaHJvbm91cyB3b3JrIChgYmRldl9mbHVzaF9ieV9kZXZgKS5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikuXG4yLiBEYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjogYHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHhgIGluc3RhbmNlcyBhcmUgZW1iZWRkZWQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgKGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24pLCBhbmQgYElOSVRfV09SSygpYCAvIGBjdHgtXHUwMDNlbWVtY2dgIGFyZSBleHBsaWNpdGx5IHNldCBkdXJpbmcgYG1lbV9jZ3JvdXBfYWxsb2MoKWAuXG4zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzY2FsYXIgYXJndW1lbnRzIChzdWNoIGFzIGBkZXZfdCBkZXZgIGluIHRyYWNlcG9pbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgZXZhbHVhdGlvbi5cbjQuIFRoZSBwcmltYXJ5IHJpc2tzIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBsb2NrIG9yZGVyaW5nIChgZnJuX2xvY2tgIG5lc3RpbmcsIElSUSBkaXNhYmxlbWVudCwgYW5kIGBvcGVuX211dGV4YCB0cnlsb2NrKSBhbmQgYmxvY2sgZGV2aWNlIHJlZmVyZW5jZSBsaWZldGltZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXHUwMDNlaV9wYWdlcyksIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAobWVtY2dfYmRldl9mcm5fZmx1c2hlciksIHdvcmsgaXRlbSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIG1lbWNnIHRlYXJkb3duLCBhbmQgZGV2aWNlIGZsdXNoIGhhbmRsaW5nIGluIGJkZXZfZmx1c2hfYnlfZGV2LiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBhbmQgbGlmZWN5Y2xlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmY2ZDg0YjIyNWFjNzJiMDU0ZTQ5MTI1YjVjNjgyYjNhMjc0MzA3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDExOjM2OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JkZXYuYyBiL2Jsb2NrL2JkZXYuY1xuaW5kZXggY2Q4MzIzMDgzNzQwNi4uZGExZmM1NjkyNmZkNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JkZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmRldi5jXG5AQCAtMjY0LDYgJiM0MzsyNjQsMzAgQEAgaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNfYmxvY2tkZXZfbm93YWl0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJkZXZfZmx1c2hfYnlfZGV2IC0gYXR0ZW1wdCB3cml0ZWJhY2sgb2YgYSBibG9jayBkZXZpY2UmIzM5O3MgcGFnZSBjYWNoZVxuJiM0MzsgKiBAZGV2OiB0YXJnZXQgYmxvY2sgZGV2aWNlIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBTa2lwIGNsb3NlZCBkZXZpY2VzIG9yIGRldmljZXMgd2hvc2Ugb3Blbl9tdXRleCBpcyBidXN5LlxuJiM0MzsgKiBNYXkgc2xlZXAgd2hpbGUgc3VibWl0dGluZyB3cml0ZWJhY2s7IGRvZXMgbm90IHdhaXQgZm9yIGFsbCBJL08gdG8gY29tcGxldGUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7XG4mIzQzO1xuJiM0MztcdGJkZXYgPSBibGtkZXZfZ2V0X25vX29wZW4oZGV2LCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFiZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBQcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBjbG9zaW5nIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB3cml0ZWJhY2suICovXG4mIzQzO1x0aWYgKG11dGV4X3RyeWxvY2soXHUwMDI2YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpKSB7XG4mIzQzO1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2YmRldi1cdTAwM2ViZF9vcGVuZXJzKSlcbiYjNDM7XHRcdFx0c3luY19ibG9ja2Rldl9ub3dhaXQoYmRldik7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdH1cbiYjNDM7XHRibGtkZXZfcHV0X25vX29wZW4oYmRldik7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2tcbiAgKiBkZXZpY2UgdmlhIGl0cyBtYXBwaW5nLiAgRG9lcyBub3QgdGFrZSB0aGUgc3VwZXJibG9jayBsb2NrLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTE3MTAsNiAmIzQzOzE3MTAsNyBAQCB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbiBpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbiBpbnQgc3luY19ibG9ja2Rldl9yYW5nZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBsb2ZmX3QgbHN0YXJ0LCBsb2ZmX3QgbGVuZCk7XG4gaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuJiM0Mzt2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldik7XG4gdm9pZCBzeW5jX2JkZXZzKGJvb2wgd2FpdCk7XG4gdm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spO1xuIHZvaWQgcHJpbnRrX2FsbF9wYXJ0aXRpb25zKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLmQ0NGQzY2U1MWI1MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xNzYsNiAmIzQzOzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4ge1xuIFx0c3RydWN0IHdiX2NvbXBsZXRpb24gZG9uZTtcdC8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovXG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogZnJuX2xvY2sgcHJvdGVjdHMgZGV2IGFuZCBpbmZsaWdodC5cbiYjNDM7ICogTm8gZXh0cmEgbWVtY2cgcmVmZXJlbmNlIGlzIHRha2VuOiB0aGlzIHdvcmsgaXMgZW1iZWRkZWQgaW4gdGhlIG1lbWNnLFxuJiM0MzsgKiBhbmQgbWVtX2Nncm91cF9jc3NfZnJlZSgpIHdhaXRzIGZvciBpdCB0byBmaW5pc2ggYmVmb3JlIGZyZWVpbmcgdGhlIG1lbWNnLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCB7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4mIzQzO1x0ZGV2X3QgZGV2O1xuJiM0MztcdGJvb2wgaW5mbGlnaHQ7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0Mzt9O1xuJiM0MztcbiAvKlxuICAqIEJ1Y2tldCBmb3IgYXJiaXRyYXJpbHkgYnl0ZS1zaXplZCBvYmplY3RzIGNoYXJnZWQgdG8gYSBtZW1vcnlcbiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cFxuQEAgLTI3OSw2ICYjNDM7MjkxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIFx0c3RydWN0IHdiX2RvbWFpbiBjZ3diX2RvbWFpbjtcbiBcdHN0cnVjdCBtZW1jZ19jZ3diX2ZybiBjZ3diX2ZybltNRU1DR19DR1dCX0ZSTl9DTlRdO1xuJiM0MztcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggYmRldl9mcm5bTUVNQ0dfQ0dXQl9GUk5fQ05UXTtcbiYjNDM7XHQvKiBOZXN0cyBpbnNpZGUgbWFwcGluZy1cdTAwM2VpX3BhZ2VzLiAqL1xuJiM0MztcdHNwaW5sb2NrX3QgZnJuX2xvY2s7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcbmluZGV4IDEzZWUwNzZjY2QxNjYuLmZmZDFiOGRmNDIzMTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcbkBAIC0yNzMsOSAmIzQzOzI3Myw5IEBAIFRSQUNFX0VWRU5UKGlub2RlX3N3aXRjaF93YnMsXG4gXG4gVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcbiBcbi1cdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksXG4mIzQzO1x0VFBfUFJPVE8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCBkZXZfdCBkZXYpLFxuIFxuLVx0VFBfQVJHUyhmb2xpbywgd2IpLFxuJiM0MztcdFRQX0FSR1MoZm9saW8sIHdiLCBkZXYpLFxuIFxuIFx0VFBfU1RSVUNUX19lbnRyeShcbiBcdFx0X19hcnJheShjaGFyLFx0XHRuYW1lLCAzMilcbkBAIC0yODQsNiAmIzQzOzI4NCw3IEBAIFRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4gXHRcdF9fZmllbGQodTY0LFx0XHRjZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHU2NCxcdFx0cGFnZV9jZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcdG1lbWNnX2lkKVxuJiM0MztcdFx0X19maWVsZChkZXZfdCxcdFx0ZGV2KVxuIFx0KSxcbiBcbiBcdFRQX2Zhc3RfYXNzaWduKFxuQEAgLTI5NSwzNCAmIzQzOzI5NiwzNyBAQCBUUkFDRV9FVkVOVCh0cmFja19mb3JlaWduX2RpcnR5LFxuIFx0XHRfX2VudHJ5LVx1MDAzZWlub1x0XHQ9IGlub2RlID8gaW5vZGUtXHUwMDNlaV9pbm8gOiAwO1xuIFx0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkXHQ9IHdiLVx1MDAzZW1lbWNnX2Nzcy1cdTAwM2VpZDtcbiBcdFx0X19lbnRyeS1cdTAwM2VjZ3JvdXBfaW5vXHQ9IF9fdHJhY2Vfd2JfYXNzaWduX2Nncm91cCh3Yik7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWRldlx0XHQ9IGRldjtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVx1MDAzZWNzcy5jZ3JvdXApO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdCksXG4gXG4tXHRUUF9wcmludGsoXCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcJiMzNDssXG4mIzQzO1x0VFBfcHJpbnRrKFwmIzM0O2JkaSAlc1slbGx1XTogaW5vPSVsbHUgbWVtY2dfaWQ9JXUgY2dyb3VwX2lubz0lbGx1IHBhZ2VfY2dyb3VwX2lubz0lbGx1IGRldj0ldToldVwmIzM0OyxcbiBcdFx0X19lbnRyeS1cdTAwM2VuYW1lLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWJkaV9pZCxcbiBcdFx0X19lbnRyeS1cdTAwM2Vpbm8sXG4gXHRcdF9fZW50cnktXHUwMDNlbWVtY2dfaWQsXG4gXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lubyxcbi1cdFx0X19lbnRyeS1cdTAwM2VwYWdlX2Nncm91cF9pbm9cbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlcGFnZV9jZ3JvdXBfaW5vLFxuJiM0MztcdFx0TUFKT1IoX19lbnRyeS1cdTAwM2VkZXYpLCBNSU5PUihfX2VudHJ5LVx1MDAzZWRldilcbiBcdClcbiApO1xuIFxuIFRSQUNFX0VWRU5UKGZsdXNoX2ZvcmVpZ24sXG4gXG4gXHRUUF9QUk9UTyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGludCBmcm5fYmRpX2lkLFxuLVx0XHQgdW5zaWduZWQgaW50IGZybl9tZW1jZ19pZCksXG4mIzQzO1x0XHQgdW5zaWduZWQgaW50IGZybl9tZW1jZ19pZCwgZGV2X3QgZGV2KSxcbiBcbi1cdFRQX0FSR1Mod2IsIGZybl9iZGlfaWQsIGZybl9tZW1jZ19pZCksXG4mIzQzO1x0VFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkLCBkZXYpLFxuIFxuIFx0VFBfU1RSVUNUX19lbnRyeShcbiBcdFx0X19hcnJheShjaGFyLFx0XHRuYW1lLCAzMilcbiBcdFx0X19maWVsZCh1NjQsXHRcdGNncm91cF9pbm8pXG4gXHRcdF9fZmllbGQodW5zaWduZWQgaW50LFx0ZnJuX2JkaV9pZClcbiBcdFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXHRmcm5fbWVtY2dfaWQpXG4mIzQzO1x0XHRfX2ZpZWxkKGRldl90LFx0XHRkZXYpXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtMzMwLDEzICYjNDM7MzM0LDE1IEBAIFRSQUNFX0VWRU5UKGZsdXNoX2ZvcmVpZ24sXG4gXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lub1x0PSBfX3RyYWNlX3diX2Fzc2lnbl9jZ3JvdXAod2IpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWZybl9iZGlfaWRcdD0gZnJuX2JkaV9pZDtcbiBcdFx0X19lbnRyeS1cdTAwM2Vmcm5fbWVtY2dfaWRcdD0gZnJuX21lbWNnX2lkO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VkZXZcdFx0PSBkZXY7XG4gXHQpLFxuIFxuLVx0VFBfcHJpbnRrKFwmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1XCYjMzQ7LFxuJiM0MztcdFRQX3ByaW50ayhcJiMzNDtiZGkgJXM6IGNncm91cF9pbm89JWxsdSBmcm5fYmRpX2lkPSV1IGZybl9tZW1jZ19pZD0ldSBkZXY9JXU6JXVcJiMzNDssXG4gXHRcdF9fZW50cnktXHUwMDNlbmFtZSxcbiBcdFx0X19lbnRyeS1cdTAwM2VjZ3JvdXBfaW5vLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWZybl9iZGlfaWQsXG4tXHRcdF9fZW50cnktXHUwMDNlZnJuX21lbWNnX2lkXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWZybl9tZW1jZ19pZCxcbiYjNDM7XHRcdE1BSk9SKF9fZW50cnktXHUwMDNlZGV2KSwgTUlOT1IoX19lbnRyeS1cdTAwM2VkZXYpXG4gXHQpXG4gKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjA3ODRmNmU0MGFlY2MgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5LDYgJiM0MzszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0X3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbkBAIC0xMDQsNiAmIzQzOzEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtY2dfcG5fY2FjaGVwO1xuIFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtZW1jZ19jZ3diX2Zybl93YWl0cSk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWVtY2dfYmRldl9mcm5fZmx1c2hlciBfX3JvX2FmdGVyX2luaXQ7XG4gI2VuZGlmXG4gXG4gc3RhdGljIGlubGluZSBib29sIHRhc2tfaXNfZHlpbmcodm9pZClcbkBAIC0zODQ1LDYgJiM0MzszODQ3LDQxIEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBCZGV2IGlub2RlcyBhcmUgY29tbW9ubHkgc2hhcmVkIGJ5IG1hbnkgbWVtY2dzLiBGbHVzaGluZyB0aGVpciBvd25lciB3YlxuJiM0MzsgKiBjYW4gd3JpdGUgdW5yZWxhdGVkIGZpbGUgZGF0YSwgc28gcmVjb3JkIGRldmljZSBudW1iZXJzIHNlcGFyYXRlbHkgYW5kXG4mIzQzOyAqIGZsdXNoIG9ubHkgdGhlIGJkZXYgbWFwcGluZ3MuIFRyYWNraW5nIGlzIGJlc3QgZWZmb3J0OiByZWNvcmQgb25seSBkZXZfdFxuJiM0MzsgKiB3aXRob3V0IGhvbGRpbmcgZGV2aWNlIG9yIGlub2RlIHJlZmVyZW5jZXMsIHNvIGl0IG1heSByYWNlIHdpdGggZGV2aWNlXG4mIzQzOyAqIHJlbW92YWwgYW5kIHJlLWFkZGl0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBfX2ZvbGlvX21hcmtfZGlydHkoKSB0YWtlcyBtYXBwaW5nLVx1MDAzZWlfcGFnZXMgd2l0aCB4YV9sb2NrX2lycXNhdmUoKVxuJiM0MztcdCAqIGJlZm9yZSByZWFjaGluZyB0aGlzIGhlbHBlci4gVXNlIGlycXNhdmUgaGVyZSBhcyB3ZWxsIHNvIGZybl9sb2NrJiMzOTtzXG4mIzQzO1x0ICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChtZW1jZy1cdTAwM2ViZGV2X2ZybltpXS5kZXYgPT0gZGV2KVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuJiM0MztcdFx0aWYgKGN0eC1cdTAwM2VpbmZsaWdodClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRjdHgtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogRm9yZWlnbiBkaXJ0eSBmbHVzaGluZ1xuICAqXG5AQCAtMzg3NSwxNyAmIzQzOzM5MTIsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgbG9uZyAqcGZpbGVwYWdlcyxcbiAgKiBtb3N0IHJlY2VudCBmb3JlaWduIGRpcnR5aW5nIGV2ZW50cyBhbmQgaW5pdGlhdGluZyByZW1vdGUgZmx1c2hlcyBvblxuICAqIHRoZW0gd2hlbiBsb2NhbCB3cml0ZWJhY2sgaXNuJiMzOTt0IGVub3VnaCB0byBrZWVwIHRoZSBtZW1vcnkgY2xlYW4gZW5vdWdoLlxuICAqXG4tICogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBzdWNoIG1lY2hhbmlzbS4gIFdoZW4gYSBmb3JlaWduXG4tICogcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmQgd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJiMzOTt0IG1hdGNoIC0gaXNcbi0gKiBkaXJ0aWVkLCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmdcbi0gKiBiZGlfd3JpdGViYWNrIG9uIHRoZSBwYWdlIG93bmluZyBtZW1jZy4gIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpXG4tICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHNcbiYjNDM7ICogRm9yIG5vbi1iZGV2IGlub2Rlcywgd2hlbiBhIGZvcmVpZ24gcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmRcbiYjNDM7ICogd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJiMzOTt0IG1hdGNoIC0gaXMgZGlydGllZCxcbiYjNDM7ICogbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KCkgcmVjb3JkcyB0aGUgaW5vZGUgb3duaW5nIGJkaV93cml0ZWJhY2tcbiYjNDM7ICogb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKSBkZWNpZGVzIHRoYXQgdGhlXG4mIzQzOyAqIG1lbWNnIG5lZWRzIHRvIHNsZWVwIGR1ZSB0byBoaWdoIGRpcnR5IHJhdGlvLCBpdCBjYWxsc1xuICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkXG4gICogZm9yZWlnbiBiZGlfd3JpdGViYWNrcyB3aGljaCBoYXZlbiYjMzk7dCBleHBpcmVkLiAgQm90aCB0aGUgbnVtYmVycyBvZlxuICAqIHJlY29yZGVkIGJkaV93cml0ZWJhY2tzIGFuZCBjb25jdXJyZW50IGluLWZsaWdodCBmb3JlaWduIHdyaXRlYmFja3MgYXJlXG4gICogbGltaXRlZCB0byBNRU1DR19DR1dCX0ZSTl9DTlQuXG4gICpcbi0gKiBUaGUgbWVjaGFuaXNtIG9ubHkgcmVtZW1iZXJzIElEcyBhbmQgZG9lc24mIzM5O3QgaG9sZCBhbnkgb2JqZWN0IHJlZmVyZW5jZXMuXG4mIzQzOyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbiYjMzk7dCBob2xkIGFueSBvYmplY3QgcmVmZXJlbmNlcy5cbiAgKiBBcyBiZWluZyB3cm9uZyBvY2Nhc2lvbmFsbHkgZG9lc24mIzM5O3QgbWF0dGVyLCB1cGRhdGVzIGFuZCBhY2Nlc3NlcyB0byB0aGVcbiAgKiByZWNvcmRzIGFyZSBsb2NrbGVzcyBhbmQgcmFjeS5cbiAgKi9cbkBAIC0zODk4LDggJiM0MzszOTM1LDE3IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHR1NjQgb2xkZXN0X2F0ID0gbm93O1xuIFx0aW50IG9sZGVzdCA9IC0xO1xuIFx0aW50IGk7XG4mIzQzO1x0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmJkZXZfaW5vZGUgPSBtYXBwaW5nID8gbWFwcGluZy1cdTAwM2Vob3N0IDogTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgXHUwMDI2XHUwMDI2IGJkZXZfaW5vZGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNiX2lzX2Jsa2Rldl9zYihiZGV2X2lub2RlLVx1MDAzZWlfc2IpKSB7XG4mIzQzO1x0XHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgYmRldl9pbm9kZS1cdTAwM2VpX3JkZXYpO1xuJiM0MztcdFx0bWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYobWVtY2csIGJkZXZfaW5vZGUtXHUwMDNlaV9yZGV2KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4tXHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3Yik7XG4mIzQzO1x0dHJhY2VfdHJhY2tfZm9yZWlnbl9kaXJ0eShmb2xpbywgd2IsIDApO1xuIFxuIFx0LypcbiBcdCAqIFBpY2sgdGhlIHNsb3QgdG8gdXNlLiAgSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNsb3QgZm9yIEB3Yiwga2VlcFxuQEAgLTM5NDEsNiAmIzQzOzM5ODcsMjUgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJkZXZfZnJuX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4LCB3b3JrKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRiZGV2X2ZsdXNoX2J5X2RldihjdHgtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGlydHkgdHJhY2tpbmcgcGF0aCB0YWtlcyBmcm5fbG9jayB3aGlsZSBob2xkaW5nIG1hcHBpbmctXHUwMDNlaV9wYWdlcy5cbiYjNDM7XHQgKiBEaXNhYmxlIGxvY2FsIElSUXMgaGVyZSB0byBhdm9pZCBkZWFkbG9ja3Mgd2l0aCBJL08gY29tcGxldGlvblxuJiM0MztcdCAqIGhhbmRsZXJzIHRoYXQgYWxzbyB0YWtlIG1hcHBpbmctXHUwMDNlaV9wYWdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbWVtY2ctXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRjdHgtXHUwMDNlaW5mbGlnaHQgPSBmYWxzZTtcbiYjNDM7XHRjdHgtXHUwMDNlZGV2ID0gMDtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2VtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovXG4gdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIHtcbkBAIC0zOTQ5LDYgJiM0Mzs0MDE0LDE5IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcbiBcdHU2NCBub3cgPSBqaWZmaWVzXzY0O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV07XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRpZiAoIWN0eC1cdTAwM2VpbmZsaWdodCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldikge1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlaW5mbGlnaHQgPSB0cnVlO1xuJiM0MztcdFx0XHR0cmFjZV9mbHVzaF9mb3JlaWduKHdiLCAwLCAwLCBjdHgtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0cXVldWVfd29yayhtZW1jZ19iZGV2X2Zybl9mbHVzaGVyLCBcdTAwMjZjdHgtXHUwMDNld29yayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IG1lbWNnX2Nnd2JfZnJuICpmcm4gPSBcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2ZybltpXTtcbiBcbkBAIC0zOTYxLDcgJiM0Mzs0MDM5LDggQEAgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIFx0XHRpZiAodGltZV9hZnRlcjY0KGZybi1cdTAwM2VhdCwgbm93IC0gaW50dikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZmcm4tXHUwMDNlZG9uZS5jbnQpID09IDEpIHtcbiBcdFx0XHRmcm4tXHUwMDNlYXQgPSAwO1xuLVx0XHRcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCk7XG4mIzQzO1x0XHRcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAwKTtcbiBcdFx0XHRjZ3JvdXBfd3JpdGViYWNrX2J5X2lkKGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCxcbiBcdFx0XHRcdFx0ICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZnJuLVx1MDAzZWRvbmUpO1xuQEAgLTQyMDIsOSAmIzQzOzQyODEsMTUgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSAtMTtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfbGlzdCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuJiM0MztcbiBcdFx0bWVtY2ctXHUwMDNlY2d3Yl9mcm5baV0uZG9uZSA9XG4gXHRcdFx0X19XQl9DT01QTEVUSU9OX0lOSVQoXHUwMDI2bWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xuJiM0MztcdFx0SU5JVF9XT1JLKFx1MDAyNmN0eC1cdTAwM2V3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VtZW1jZyA9IG1lbWNnO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jayk7XG4gI2VuZGlmXG4gXHRscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpO1xuIFx0cmV0dXJuIG1lbWNnO1xuQEAgLTQzODYsOCAmIzQzOzQ0NzEsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XG4gXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0d2Jfd2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2ZybltpXS5kb25lKTtcbiYjNDM7XHRcdGZsdXNoX3dvcmsoXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV0ud29yayk7XG4mIzQzO1x0fVxuICNlbmRpZlxuIFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxuIFx0XHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcbkBAIC01NzAzLDYgJiM0Mzs1NzkwLDEyIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4gXHRtZW1jZ193cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDttZW1jZ1wmIzM0OywgV1FfUEVSQ1BVLCAwKTtcbiBcdFdBUk5fT04oIW1lbWNnX3dxKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4mIzQzO1x0bWVtY2dfYmRldl9mcm5fZmx1c2hlciA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDttZW1jZ19iZGV2X2Zybl9mbHVzaGVyXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCk7XG4mIzQzO1x0V0FSTl9PTighbWVtY2dfYmRldl9mcm5fZmx1c2hlcik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnBlcl9jcHVfcHRyKFx1MDAyNm1lbWNnX3N0b2NrLCBjcHUpLVx1MDAzZXdvcmssXG4gXHRcdFx0ICBkcmFpbl9sb2NhbF9tZW1jZ19zdG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9mbHVzaF9ieV9kZXYmIzM0OywKICAgICYjMzQ7YmRldl9mcm5fZmx1c2hfd29yayYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mbHVzaF9mb3JlaWduJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXHUwMDNlaV9wYWdlcyksIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAobWVtY2dfYmRldl9mcm5fZmx1c2hlciksIHdvcmsgaXRlbSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIG1lbWNnIHRlYXJkb3duLCBhbmQgZGV2aWNlIGZsdXNoIGhhbmRsaW5nIGluIGJkZXZfZmx1c2hfYnlfZGV2LiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBhbmQgbGlmZWN5Y2xlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmY2ZDg0YjIyNWFjNzJiMDU0ZTQ5MTI1YjVjNjgyYjNhMjc0MzA3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDExOjM2OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jCmluZGV4IGNkODMyMzA4Mzc0MDYuLmRhMWZjNTY5MjZmZDQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iZGV2LmMKQEAgLTI2NCw2ICYjNDM7MjY0LDMwIEBAIGludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY19ibG9ja2Rldl9ub3dhaXQpOwogCiYjNDM7LyoqCiYjNDM7ICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSYjMzk7cyBwYWdlIGNhY2hlCiYjNDM7ICogQGRldjogdGFyZ2V0IGJsb2NrIGRldmljZSBudW1iZXIKJiM0MzsgKgomIzQzOyAqIFNraXAgY2xvc2VkIGRldmljZXMgb3IgZGV2aWNlcyB3aG9zZSBvcGVuX211dGV4IGlzIGJ1c3kuCiYjNDM7ICogTWF5IHNsZWVwIHdoaWxlIHN1Ym1pdHRpbmcgd3JpdGViYWNrOyBkb2VzIG5vdCB3YWl0IGZvciBhbGwgSS9PIHRvIGNvbXBsZXRlLgomIzQzOyAqLwomIzQzO3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKJiM0MzsKJiM0MzsJYmRldiA9IGJsa2Rldl9nZXRfbm9fb3BlbihkZXYsIGZhbHNlKTsKJiM0MzsJaWYgKCFiZGV2KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBQcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBjbG9zaW5nIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB3cml0ZWJhY2suICovCiYjNDM7CWlmIChtdXRleF90cnlsb2NrKCZhbXA7YmRldi0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCkpIHsKJiM0MzsJCWlmIChhdG9taWNfcmVhZCgmYW1wO2JkZXYtJmd0O2JkX29wZW5lcnMpKQomIzQzOwkJCXN5bmNfYmxvY2tkZXZfbm93YWl0KGJkZXYpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7YmRldi0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CX0KJiM0MzsJYmxrZGV2X3B1dF9ub19vcGVuKGJkZXYpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2sKICAqIGRldmljZSB2aWEgaXRzIG1hcHBpbmcuICBEb2VzIG5vdCB0YWtlIHRoZSBzdXBlcmJsb2NrIGxvY2suCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE3MTAsNiAmIzQzOzE3MTAsNyBAQCB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKIGludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwogaW50IHN5bmNfYmxvY2tkZXZfcmFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpOwogaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwomIzQzO3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KTsKIHZvaWQgc3luY19iZGV2cyhib29sIHdhaXQpOwogdm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spOwogdm9pZCBwcmludGtfYWxsX3BhcnRpdGlvbnModm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLmQ0NGQzY2U1MWI1MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xNzYsNiAmIzQzOzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4gewogCXN0cnVjdCB3Yl9jb21wbGV0aW9uIGRvbmU7CS8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBmcm5fbG9jayBwcm90ZWN0cyBkZXYgYW5kIGluZmxpZ2h0LgomIzQzOyAqIE5vIGV4dHJhIG1lbWNnIHJlZmVyZW5jZSBpcyB0YWtlbjogdGhpcyB3b3JrIGlzIGVtYmVkZGVkIGluIHRoZSBtZW1jZywKJiM0MzsgKiBhbmQgbWVtX2Nncm91cF9jc3NfZnJlZSgpIHdhaXRzIGZvciBpdCB0byBmaW5pc2ggYmVmb3JlIGZyZWVpbmcgdGhlIG1lbWNnLgomIzQzOyAqLwomIzQzO3N0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggewomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJZGV2X3QgZGV2OwomIzQzOwlib29sIGluZmxpZ2h0OwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBCdWNrZXQgZm9yIGFyYml0cmFyaWx5IGJ5dGUtc2l6ZWQgb2JqZWN0cyBjaGFyZ2VkIHRvIGEgbWVtb3J5CiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cApAQCAtMjc5LDYgJiM0MzsyOTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlzdHJ1Y3Qgd2JfZG9tYWluIGNnd2JfZG9tYWluOwogCXN0cnVjdCBtZW1jZ19jZ3diX2ZybiBjZ3diX2ZybltNRU1DR19DR1dCX0ZSTl9DTlRdOwomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IGJkZXZfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07CiYjNDM7CS8qIE5lc3RzIGluc2lkZSBtYXBwaW5nLSZndDtpX3BhZ2VzLiAqLwomIzQzOwlzcGlubG9ja190IGZybl9sb2NrOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKaW5kZXggMTNlZTA3NmNjZDE2Ni4uZmZkMWI4ZGY0MjMxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKQEAgLTI3Myw5ICYjNDM7MjczLDkgQEAgVFJBQ0VfRVZFTlQoaW5vZGVfc3dpdGNoX3dicywKIAogVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAotCVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksCiYjNDM7CVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgZGV2X3QgZGV2KSwKIAotCVRQX0FSR1MoZm9saW8sIHdiKSwKJiM0MzsJVFBfQVJHUyhmb2xpbywgd2IsIGRldiksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2FycmF5KGNoYXIsCQluYW1lLCAzMikKQEAgLTI4NCw2ICYjNDM7Mjg0LDcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAkJX19maWVsZCh1NjQsCQljZ3JvdXBfaW5vKQogCQlfX2ZpZWxkKHU2NCwJCXBhZ2VfY2dyb3VwX2lubykKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsCW1lbWNnX2lkKQomIzQzOwkJX19maWVsZChkZXZfdCwJCWRldikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC0yOTUsMzQgJiM0MzsyOTYsMzcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAkJX19lbnRyeS0mZ3Q7aW5vCQk9IGlub2RlID8gaW5vZGUtJmd0O2lfaW5vIDogMDsKIAkJX19lbnRyeS0mZ3Q7bWVtY2dfaWQJPSB3Yi0mZ3Q7bWVtY2dfY3NzLSZndDtpZDsKIAkJX19lbnRyeS0mZ3Q7Y2dyb3VwX2lubwk9IF9fdHJhY2Vfd2JfYXNzaWduX2Nncm91cCh3Yik7CiYjNDM7CQlfX2VudHJ5LSZndDtkZXYJCT0gZGV2OwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJX19lbnRyeS0mZ3Q7cGFnZV9jZ3JvdXBfaW5vID0gY2dyb3VwX2lubyhmb2xpb19tZW1jZyhmb2xpbyktJmd0O2Nzcy5jZ3JvdXApOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkpLAogCi0JVFBfcHJpbnRrKCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUmIzM0OywKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUgZGV2PSV1OiV1JiMzNDssCiAJCV9fZW50cnktJmd0O25hbWUsCiAJCV9fZW50cnktJmd0O2JkaV9pZCwKIAkJX19lbnRyeS0mZ3Q7aW5vLAogCQlfX2VudHJ5LSZndDttZW1jZ19pZCwKIAkJX19lbnRyeS0mZ3Q7Y2dyb3VwX2lubywKLQkJX19lbnRyeS0mZ3Q7cGFnZV9jZ3JvdXBfaW5vCiYjNDM7CQlfX2VudHJ5LSZndDtwYWdlX2Nncm91cF9pbm8sCiYjNDM7CQlNQUpPUihfX2VudHJ5LSZndDtkZXYpLCBNSU5PUihfX2VudHJ5LSZndDtkZXYpCiAJKQogKTsKIAogVFJBQ0VfRVZFTlQoZmx1c2hfZm9yZWlnbiwKIAogCVRQX1BST1RPKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgaW50IGZybl9iZGlfaWQsCi0JCSB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkKSwKJiM0MzsJCSB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkLCBkZXZfdCBkZXYpLAogCi0JVFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkKSwKJiM0MzsJVFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkLCBkZXYpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19hcnJheShjaGFyLAkJbmFtZSwgMzIpCiAJCV9fZmllbGQodTY0LAkJY2dyb3VwX2lubykKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsCWZybl9iZGlfaWQpCiAJCV9fZmllbGQodW5zaWduZWQgaW50LAlmcm5fbWVtY2dfaWQpCiYjNDM7CQlfX2ZpZWxkKGRldl90LAkJZGV2KQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTMzMCwxMyAmIzQzOzMzNCwxNSBAQCBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLAogCQlfX2VudHJ5LSZndDtjZ3JvdXBfaW5vCT0gX190cmFjZV93Yl9hc3NpZ25fY2dyb3VwKHdiKTsKIAkJX19lbnRyeS0mZ3Q7ZnJuX2JkaV9pZAk9IGZybl9iZGlfaWQ7CiAJCV9fZW50cnktJmd0O2Zybl9tZW1jZ19pZAk9IGZybl9tZW1jZ19pZDsKJiM0MzsJCV9fZW50cnktJmd0O2RldgkJPSBkZXY7CiAJKSwKIAotCVRQX3ByaW50aygmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1JiMzNDssCiYjNDM7CVRQX3ByaW50aygmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1IGRldj0ldToldSYjMzQ7LAogCQlfX2VudHJ5LSZndDtuYW1lLAogCQlfX2VudHJ5LSZndDtjZ3JvdXBfaW5vLAogCQlfX2VudHJ5LSZndDtmcm5fYmRpX2lkLAotCQlfX2VudHJ5LSZndDtmcm5fbWVtY2dfaWQKJiM0MzsJCV9fZW50cnktJmd0O2Zybl9tZW1jZ19pZCwKJiM0MzsJCU1BSk9SKF9fZW50cnktJmd0O2RldiksIE1JTk9SKF9fZW50cnktJmd0O2RldikKIAkpCiApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMDc4NGY2ZTQwYWVjYyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzksNiAmIzQzOzM5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWZsYWdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFja2luZy1kZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0X3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKQEAgLTEwNCw2ICYjNDM7MTA1LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptZW1jZ19wbl9jYWNoZXA7CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lbWNnX2Nnd2JfZnJuX3dhaXRxKTsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgX19yb19hZnRlcl9pbml0OwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2lzX2R5aW5nKHZvaWQpCkBAIC0zODQ1LDYgJiM0MzszODQ3LDQxIEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBCZGV2IGlub2RlcyBhcmUgY29tbW9ubHkgc2hhcmVkIGJ5IG1hbnkgbWVtY2dzLiBGbHVzaGluZyB0aGVpciBvd25lciB3YgomIzQzOyAqIGNhbiB3cml0ZSB1bnJlbGF0ZWQgZmlsZSBkYXRhLCBzbyByZWNvcmQgZGV2aWNlIG51bWJlcnMgc2VwYXJhdGVseSBhbmQKJiM0MzsgKiBmbHVzaCBvbmx5IHRoZSBiZGV2IG1hcHBpbmdzLiBUcmFja2luZyBpcyBiZXN0IGVmZm9ydDogcmVjb3JkIG9ubHkgZGV2X3QKJiM0MzsgKiB3aXRob3V0IGhvbGRpbmcgZGV2aWNlIG9yIGlub2RlIHJlZmVyZW5jZXMsIHNvIGl0IG1heSByYWNlIHdpdGggZGV2aWNlCiYjNDM7ICogcmVtb3ZhbCBhbmQgcmUtYWRkaXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBfX2ZvbGlvX21hcmtfZGlydHkoKSB0YWtlcyBtYXBwaW5nLSZndDtpX3BhZ2VzIHdpdGggeGFfbG9ja19pcnFzYXZlKCkKJiM0MzsJICogYmVmb3JlIHJlYWNoaW5nIHRoaXMgaGVscGVyLiBVc2UgaXJxc2F2ZSBoZXJlIGFzIHdlbGwgc28gZnJuX2xvY2smIzM5O3MKJiM0MzsJICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bWVtY2ctJmd0O2Zybl9sb2NrLCBmbGFncyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobWVtY2ctJmd0O2JkZXZfZnJuW2ldLmRldiA9PSBkZXYpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWN0eCA9ICZhbXA7bWVtY2ctJmd0O2JkZXZfZnJuW2ldOwomIzQzOwkJaWYgKGN0eC0mZ3Q7aW5mbGlnaHQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQljdHgtJmd0O2RldiA9IGRldjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bWVtY2ctJmd0O2Zybl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoKICAqIEZvcmVpZ24gZGlydHkgZmx1c2hpbmcKICAqCkBAIC0zODc1LDE3ICYjNDM7MzkxMiwxNyBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLAogICogbW9zdCByZWNlbnQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgYW5kIGluaXRpYXRpbmcgcmVtb3RlIGZsdXNoZXMgb24KICAqIHRoZW0gd2hlbiBsb2NhbCB3cml0ZWJhY2sgaXNuJiMzOTt0IGVub3VnaCB0byBrZWVwIHRoZSBtZW1vcnkgY2xlYW4gZW5vdWdoLgogICoKLSAqIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgc3VjaCBtZWNoYW5pc20uICBXaGVuIGEgZm9yZWlnbgotICogcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmQgd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJiMzOTt0IG1hdGNoIC0gaXMKLSAqIGRpcnRpZWQsIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZwotICogYmRpX3dyaXRlYmFjayBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuICBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKQotICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHMKJiM0MzsgKiBGb3Igbm9uLWJkZXYgaW5vZGVzLCB3aGVuIGEgZm9yZWlnbiBwYWdlIC0gYSBwYWdlIHdob3NlIG1lbWNnIGFuZAomIzQzOyAqIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbiYjMzk7dCBtYXRjaCAtIGlzIGRpcnRpZWQsCiYjNDM7ICogbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KCkgcmVjb3JkcyB0aGUgaW5vZGUgb3duaW5nIGJkaV93cml0ZWJhY2sKJiM0MzsgKiBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpIGRlY2lkZXMgdGhhdCB0aGUKJiM0MzsgKiBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHMKICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkCiAgKiBmb3JlaWduIGJkaV93cml0ZWJhY2tzIHdoaWNoIGhhdmVuJiMzOTt0IGV4cGlyZWQuICBCb3RoIHRoZSBudW1iZXJzIG9mCiAgKiByZWNvcmRlZCBiZGlfd3JpdGViYWNrcyBhbmQgY29uY3VycmVudCBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzIGFyZQogICogbGltaXRlZCB0byBNRU1DR19DR1dCX0ZSTl9DTlQuCiAgKgotICogVGhlIG1lY2hhbmlzbSBvbmx5IHJlbWVtYmVycyBJRHMgYW5kIGRvZXNuJiMzOTt0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLgomIzQzOyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbiYjMzk7dCBob2xkIGFueSBvYmplY3QgcmVmZXJlbmNlcy4KICAqIEFzIGJlaW5nIHdyb25nIG9jY2FzaW9uYWxseSBkb2VzbiYjMzk7dCBtYXR0ZXIsIHVwZGF0ZXMgYW5kIGFjY2Vzc2VzIHRvIHRoZQogICogcmVjb3JkcyBhcmUgbG9ja2xlc3MgYW5kIHJhY3kuCiAgKi8KQEAgLTM4OTgsOCAmIzQzOzM5MzUsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbywKIAl1NjQgb2xkZXN0X2F0ID0gbm93OwogCWludCBvbGRlc3QgPSAtMTsKIAlpbnQgaTsKJiM0MzsJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKJiM0MzsJc3RydWN0IGlub2RlICpiZGV2X2lub2RlID0gbWFwcGluZyA/IG1hcHBpbmctJmd0O2hvc3QgOiBOVUxMOwomIzQzOwomIzQzOwlpZiAobWVtY2dfYmRldl9mcm5fZmx1c2hlciAmYW1wOyZhbXA7IGJkZXZfaW5vZGUgJmFtcDsmYW1wOwomIzQzOwkgICAgc2JfaXNfYmxrZGV2X3NiKGJkZXZfaW5vZGUtJmd0O2lfc2IpKSB7CiYjNDM7CQl0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgYmRldl9pbm9kZS0mZ3Q7aV9yZGV2KTsKJiM0MzsJCW1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KG1lbWNnLCBiZGV2X2lub2RlLSZndDtpX3JkZXYpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQl0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3Yik7CiYjNDM7CXRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiLCAwKTsKIAogCS8qCiAJICogUGljayB0aGUgc2xvdCB0byB1c2UuICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2xvdCBmb3IgQHdiLCBrZWVwCkBAIC0zOTQxLDYgJiM0MzszOTg3LDI1IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHgsIHdvcmspOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwliZGV2X2ZsdXNoX2J5X2RldihjdHgtJmd0O2Rldik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBkaXJ0eSB0cmFja2luZyBwYXRoIHRha2VzIGZybl9sb2NrIHdoaWxlIGhvbGRpbmcgbWFwcGluZy0mZ3Q7aV9wYWdlcy4KJiM0MzsJICogRGlzYWJsZSBsb2NhbCBJUlFzIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggSS9PIGNvbXBsZXRpb24KJiM0MzsJICogaGFuZGxlcnMgdGhhdCBhbHNvIHRha2UgbWFwcGluZy0mZ3Q7aV9wYWdlcy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDttZW1jZy0mZ3Q7ZnJuX2xvY2ssIGZsYWdzKTsKJiM0MzsJY3R4LSZndDtpbmZsaWdodCA9IGZhbHNlOwomIzQzOwljdHgtJmd0O2RldiA9IDA7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O21lbWNnLSZndDtmcm5fbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovCiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpCiB7CkBAIC0zOTQ5LDYgJiM0Mzs0MDE0LDE5IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKIAl1NjQgbm93ID0gamlmZmllc182NDsKIAlpbnQgaTsKIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV07CiYjNDM7CQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttZW1jZy0mZ3Q7ZnJuX2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmICghY3R4LSZndDtpbmZsaWdodCAmYW1wOyZhbXA7IGN0eC0mZ3Q7ZGV2KSB7CiYjNDM7CQkJY3R4LSZndDtpbmZsaWdodCA9IHRydWU7CiYjNDM7CQkJdHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgMCwgMCwgY3R4LSZndDtkZXYpOwomIzQzOwkJCXF1ZXVlX3dvcmsobWVtY2dfYmRldl9mcm5fZmx1c2hlciwgJmFtcDtjdHgtJmd0O3dvcmspOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21lbWNnLSZndDtmcm5fbG9jaywgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IG1lbWNnX2Nnd2JfZnJuICpmcm4gPSAmYW1wO21lbWNnLSZndDtjZ3diX2ZybltpXTsKIApAQCAtMzk2MSw3ICYjNDM7NDAzOSw4IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKIAkJaWYgKHRpbWVfYWZ0ZXI2NChmcm4tJmd0O2F0LCBub3cgLSBpbnR2KSAmYW1wOyZhbXA7CiAJCSAgICBhdG9taWNfcmVhZCgmYW1wO2Zybi0mZ3Q7ZG9uZS5jbnQpID09IDEpIHsKIAkJCWZybi0mZ3Q7YXQgPSAwOwotCQkJdHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgZnJuLSZndDtiZGlfaWQsIGZybi0mZ3Q7bWVtY2dfaWQpOwomIzQzOwkJCXRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi0mZ3Q7YmRpX2lkLCBmcm4tJmd0O21lbWNnX2lkLAomIzQzOwkJCQkJICAgIDApOwogCQkJY2dyb3VwX3dyaXRlYmFja19ieV9pZChmcm4tJmd0O2JkaV9pZCwgZnJuLSZndDttZW1jZ19pZCwKIAkJCQkJICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILAogCQkJCQkgICAgICAgJmFtcDtmcm4tJmd0O2RvbmUpOwpAQCAtNDIwMiw5ICYjNDM7NDI4MSwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAltZW1jZy0mZ3Q7a21lbWNnX2lkID0gLTE7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21lbWNnLSZndDtjZ3diX2xpc3QpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV07CiYjNDM7CiAJCW1lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lID0KIAkJCV9fV0JfQ09NUExFVElPTl9JTklUKCZhbXA7bWVtY2dfY2d3Yl9mcm5fd2FpdHEpOwomIzQzOwkJSU5JVF9XT1JLKCZhbXA7Y3R4LSZndDt3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKTsKJiM0MzsJCWN0eC0mZ3Q7bWVtY2cgPSBtZW1jZzsKJiM0MzsJfQomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO21lbWNnLSZndDtmcm5fbG9jayk7CiAjZW5kaWYKIAlscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpOwogCXJldHVybiBtZW1jZzsKQEAgLTQzODYsOCAmIzQzOzQ0NzEsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCWludCBfX21heWJlX3VudXNlZCBpOwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKLQlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKIAkJd2Jfd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO21lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lKTsKJiM0MzsJCWZsdXNoX3dvcmsoJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV0ud29yayk7CiYjNDM7CX0KICNlbmRpZgogCWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpICZhbXA7JmFtcDsgIWNncm91cF9tZW1vcnlfbm9zb2NrZXQpCiAJCXN0YXRpY19icmFuY2hfZGVjKCZhbXA7bWVtY2dfc29ja2V0c19lbmFibGVkX2tleSk7CkBAIC01NzAzLDYgJiM0Mzs1NzkwLDEyIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpCiAJbWVtY2dfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDttZW1jZyYjMzQ7LCBXUV9QRVJDUFUsIDApOwogCVdBUk5fT04oIW1lbWNnX3dxKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwomIzQzOwltZW1jZ19iZGV2X2Zybl9mbHVzaGVyID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7bWVtY2dfYmRldl9mcm5fZmx1c2hlciYjMzQ7LAomIzQzOwkJCQkJICAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCk7CiYjNDM7CVdBUk5fT04oIW1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpOwomIzQzOyNlbmRpZgomIzQzOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJSU5JVF9XT1JLKCZhbXA7cGVyX2NwdV9wdHIoJmFtcDttZW1jZ19zdG9jaywgY3B1KS0mZ3Q7d29yaywKIAkJCSAgZHJhaW5fbG9jYWxfbWVtY2dfc3RvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODk0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHRvIHNlZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCB0YXJnZXQgZm9yIHN5emthbGxlci4gVGhlIGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgc28gdGhhdCYjMzk7cyBnb29kLiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgZnVuY3Rpb24gYGJkZXZfZmx1c2hfYnlfZGV2YCBiZWluZyBhZGRlZCBpbiBgYmxvY2svYmRldi5jYCwgYWxvbmcgd2l0aCBhIGRlY2xhcmF0aW9uIGluIGBibGtkZXYuaGAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gYmUgZGVzaWduZWQgdG8gZmx1c2ggYSBibG9jayBkZXZpY2UgYmFzZWQgb24gaXRzIGBkZXZfdGAgaWRlbnRpZmllci4gSXQgZ3JhYnMgdGhlIGJsb2NrIGRldmljZSwgdHJpZXMgdG8gbG9jayB0aGUgYG9wZW5fbXV0ZXhgLCBjaGVja3MgaWYgaXQmIzM5O3Mgb3BlbmVkLCBhbmQgaWYgc28sIGNhbGxzIGBzeW5jX2Jsb2NrZGV2X25vd2FpdGAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBmbHVzaGluZyBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGFzeW5jaHJvbm91cyBvbmVzLCBvZnRlbiBleHBvc2UgaW50ZXJlc3RpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgYnVncy4KClRoZSBjaGFuZ2VzIHRvIGBtZW1jb250cm9sLmhgIGFyZSBhIGJpdCBtb3JlIGludm9sdmVkLiBXZSYjMzk7dmUgZ290IGEgbmV3IGBiZGV2X2Zybl9mbHVzaF9jdHhgIHN0cnVjdCBhbmQgc29tZSBhZGRpdGlvbnMgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBmbHVzaCByZXF1ZXN0cywgYWxsIHVuZGVyIHRoZSBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoaW5nLiBUaGUgdHJhY2Vwb2ludCB1cGRhdGVzIGluIGB3cml0ZWJhY2suaGAgYXJlIGxpa2VseSBqdXN0IGZvciBpbnN0cnVtZW50YXRpb24uCgpUaGUgYG1tL21lbWNvbnRyb2wuY2AgY2hhbmdlcyBhcmUgdGhlIG1lYXQgb2YgaXQuIFdlJiMzOTt2ZSBnb3QgZnVuY3Rpb25zIHRvIHRyYWNrIGZvcmVpZ24gYmxvY2sgZGV2aWNlcyAoYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCksIG1vZGlmaWNhdGlvbnMgdG8gYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAgdG8gZGV0ZWN0IGBiZGV2X2lub2RlYCBhbmQgY2FsbCB0aGUgdHJhY2tpbmcgZnVuY3Rpb24sIGBiZGV2X2Zybl9mbHVzaF93b3JrYCBiZWluZyBhZGRlZCwgbW9kaWZpY2F0aW9ucyB0byBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCB0byBxdWV1ZSB3b3JrIHRvIGBtZW1jZ19iZGV2X2Zybl9mbHVzaGVyYCwgYW5kIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uL2ZyZWVpbmcgb2YgdGhpcyB3b3JrcXVldWUgaW4gYG1lbV9jZ3JvdXBfYWxsb2NgLCBgbWVtX2Nncm91cF9jc3NfZnJlZWAgYW5kIGBtZW1fY2dyb3VwX2luaXRgIHJlc3BlY3RpdmVseS4KCk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgZGlydHkgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGZsdXNoZWQgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4gVGhlIGFkZGVkIGZsdXNoaW5nIGZ1bmN0aW9uLCB0aGUgdHJhY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBhc3luY2hyb25vdXMgd29ya3F1ZXVlIGFsbCBwb2ludCB0byBhIHBvdGVudGlhbGx5IGNvbXBsZXggaW50ZXJhY3Rpb24uIE5vdywgdGhlIG5leHQgdGhpbmcgdG8gdmVyaWZ5IGlzIHdoYXQgY29uZmlndXJhdGlvbnMgZW5hYmxlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgdXMgaG93IGJyb2FkbHkgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwuIFRoaXMgaXMgc2hhcGluZyB1cCB0byBiZSBhIHByZXR0eSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYW5kIHRoZSB0aWdodCBpbnRlZ3JhdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZSYjMzk7cyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgZmluZGluZyBpbnRlcmVzdGluZyBjb25jdXJyZW5jeSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9XUklURUJBQ0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTExMjU9Y29uZmlnIEJMS19DR1JPVVBcbi0tXG5pbml0L0tjb25maWctMTE0Ni1cbmluaXQvS2NvbmZpZzoxMTQ3OmNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG5pbml0L0tjb25maWctMTE0OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpdHNlbGYuIFNwZWNpZmljYWxseSwgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGEgbG90IG9mIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGF0IGZpbGUsIGFuZCBJJiMzOTtsbCBqdW1wIHJpZ2h0IHRvIGFyb3VuZCBsaW5lIDExNDcuIFRoYXQgZmVlbHMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgaW50by4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBidWlsZCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdE9uZSBuZWVkcyB0byBhbHNvIGVuYWJsZSBhY3R1YWwgSU8gY29udHJvbGxpbmcgbG9naWMvcG9saWN5LiBGb3JcbjExNDE6XHRcdGVuYWJsaW5nIHByb3BvcnRpb25hbCB3ZWlnaHQgZGl2aXNpb24gb2YgZGlzayBiYW5kd2lkdGggaW4gQ0ZRLCBzZXRcbjExNDI6XHRcdENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRD15OyBmb3IgZW5hYmxpbmcgdGhyb3R0bGluZyBwb2xpY3ksIHNldFxuMTE0MzpcdFx0Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15LlxuMTE0NDpcdFxuMTE0NTpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE0NjpcdFxuMTE0NzpcdGNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4xMTQ4Olx0XHRib29sXG4xMTQ5Olx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUwOlx0XHRkZWZhdWx0IHlcbjExNTE6XHRcbjExNTI6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1MzpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NDpcdFx0ZGVmYXVsdCBuXG4xMTU1Olx0XHRoZWxwXG4xMTU2Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1NzpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTg6XHRcdCAgdGFza3MuXG4xMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU3NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBvcnRhbmNlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBgQ0dST1VQX1dSSVRFQkFDS2AgZGVwZW5kcyBvbiBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAgYW5kIGRlZmF1bHRzIHRvICYjMzk7eSYjMzk7LiBTbywgcmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBhcmUgZXNzZW50aWFsIHRvIGNvbnNpZGVyIGZvciB0aGlzIHBhdGNoLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyBhY3R1YWxseSB0b3VjaGVzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIHN1YnN5c3RlbXMgbW9kaWZpZWQgYXJlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vbWVtY29udHJvbC5jYCkgYW5kIHRoZSBibG9jayBsYXllciAoYGJsb2NrL2JkZXYuY2ApLiBBbHJpZ2h0LCBzb3VuZHMgbGlrZSBpbnRlcmVzdGluZyBjb2RlLiBJcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBZZXMsIHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBjZ3JvdXBzIHdyaXRlYmFjayBhbmQgZGlydHlpbmcgcGFnZXMgb24gYmxvY2sgZGV2aWNlcy4gU28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgbG9vcCBkZXZpY2VzLCByYW1kaXNrcywgcmF3IGJsb2NrIGRldmljZXMsIG9yIGV2ZW4gZm9yZWlnbiBkaXJ0eSB0cmFja2luZyBpZiBhIHBhZ2UgaW4gb25lIG1lbWNnIGlzIGRpcnRpZWQgZm9yIGEgYmxvY2sgZGV2aWNlIHdoZXJlIHRoZSB3cml0ZWJhY2sgaXMgaGFuZGxlZCBieSBhIGRpZmZlcmVudCBtZW1jZyBvciBldmVuIHRoZSByb290IGNncm91cC4KCkdpdmVuIHRoYXQgaXQgdG91Y2hlcyB0aGUgY29yZSBzdWJzeXN0ZW1zLCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgYW5kIGl0IGlzIHJlbGF0ZWQgdG8gZXhlY3V0YWJsZSBjb2RlLCB0aGlzIHNjcmVhbXMgYFdvcnRoRnV6emluZz10cnVlYC4gVGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIGNyaXRlcmlhIHRoZXkmIzM5O3ZlIGRlZmluZWQ6IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBjb2RlIHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLiBEZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuCgpMZXQmIzM5O3Mgc2VlLCB0aGUgZnVuY3Rpb25zL3N5bWJvbHMgaW52b2x2ZWQ6IEluIGBibG9jay9iZGV2LmNgLCB3ZSBoYXZlIGBiZGV2X2ZsdXNoX2J5X2RldmAuIEluIGBtbS9tZW1jb250cm9sLmNgLCBJIHNlZSBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgICh0aGF0JiMzOTtzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gbm90ZSksIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoYW5vdGhlciBzdGF0aWMgb25lKSwgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAsIGFuZCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYC4KCkhvbGQgb24sIGxldCBtZSBjaGVjayBzb21ldGhpbmcgYWJvdXQgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eWAuIElzIHRoYXQgYW4gaW5saW5lIGZ1bmN0aW9uPyBHb3R0YSBtYWtlIHN1cmUgSSB0cmFjayBkb3duIHdoZXJlIHRoYXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgYmVmb3JlIEkgbWFrZSBhIGZpbmFsIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE1MT1zdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGRzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjctICpcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE2ODogKiBTZWUgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKCkgZm9yIGRldGFpbHMuXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjktICovXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTU5Mz12b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1OTYtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNTk3OnZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk4LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk5LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYwMDpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjAxLVx0XHRcdFx0XHRcdCAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MTMtXHRpZiAodW5saWtlbHkoXHUwMDI2bWVtY2ctXHUwMDNlY3NzICE9IHdiLVx1MDAzZW1lbWNnX2NzcykpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjE0Olx0XHRtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoZm9saW8sIHdiKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MTUtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjI3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yixcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjM0LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYzNTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjM2LVx0XHRcdFx0XHRcdCAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zODU3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZGV2X3QgZGV2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zOTE2LSAqIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbiYjMzk7dCBtYXRjaCAtIGlzIGRpcnRpZWQsXG5tbS9tZW1jb250cm9sLmM6MzkxNzogKiBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmcgYmRpX3dyaXRlYmFja1xubW0vbWVtY29udHJvbC5jLTM5MTgtICogb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKSBkZWNpZGVzIHRoYXQgdGhlXG4tLVxubW0vbWVtY29udHJvbC5jLTM5MjgtICovXG5tbS9tZW1jb250cm9sLmM6MzkyOTp2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vbWVtY29udHJvbC5jLTM5MzAtXHRcdFx0XHRcdCAgICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYwMz1zdGF0aWMgdm9pZCBmb2xpb19hY2NvdW50X2RpcnRpZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MjctXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI2Mjg6XHRcdG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShmb2xpbywgd2IpO1xubW0vcGFnZS13cml0ZWJhY2suYy0yNjI5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjkyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgc2VlIHRoYXQgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAgaXMgYSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gQW5kIGp1c3QgdG8ga2VlcCB0aGUgZnVsbCBwaWN0dXJlIGluIG1pbmQsIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gIGlzIGFsc28gZGVmaW5lZCB0aGVyZS4gR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gVGltZSB0byB0cmFjZSBpdHMgY2FsbGVycy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9mbHVzaF9mb3JlaWduJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MDA9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjE4OnZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjE5LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MzU9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzktXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjQwOnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTY0MS17XG4tLVxubW0vbWVtY29udHJvbC5jPTM4NTc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpXG4tLVxubW0vbWVtY29udHJvbC5jLTM5MTktICogbWVtY2cgbmVlZHMgdG8gc2xlZXAgZHVlIHRvIGhpZ2ggZGlydHkgcmF0aW8sIGl0IGNhbGxzXG5tbS9tZW1jb250cm9sLmM6MzkyMDogKiBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oKSB3aGljaCBxdWV1ZXMgd3JpdGViYWNrIG9uIHRoZSByZWNvcmRlZFxubW0vbWVtY29udHJvbC5jLTM5MjEtICogZm9yZWlnbiBiZGlfd3JpdGViYWNrcyB3aGljaCBoYXZlbiYjMzk7dCBleHBpcmVkLiAgQm90aCB0aGUgbnVtYmVycyBvZlxuLS1cbm1tL21lbWNvbnRyb2wuYz0zOTkwPXN0YXRpYyB2b2lkIGJkZXZfZnJuX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MDA5LS8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovXG5tbS9tZW1jb250cm9sLmM6NDAxMDp2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG5tbS9tZW1jb250cm9sLmMtNDAxMS17XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0xNzkxPXN0YXRpYyBpbnQgYmFsYW5jZV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0xODY2LVxubW0vcGFnZS13cml0ZWJhY2suYzoxODY3Olx0XHRtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24od2IpO1xubW0vcGFnZS13cml0ZWJhY2suYy0xODY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIGBiZGV2X2ZsdXNoX2J5X2RldmAqKgoKT2theSwgc28gd2UmIzM5O3ZlIGlkZW50aWZpZWQgdGhpcyBgYmRldl9mbHVzaF9ieV9kZXZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIHdlJiMzOTtyZSBpbnZlc3RpZ2F0aW5nLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggY29kZSByZXZpZXcuIFdlIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSBpdHMgYmVoYXZpb3IgYmFzZWQgb24gaXRzIG5hbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBvZiB1c2UuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFdlIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIHVzYWdlLCBzbyB3ZSYjMzk7cmUgbWFraW5nIHN1cmUgd2UgYXJlbiYjMzk7dCBtaXNzaW5nIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHRoYXQgY291bGQgbGVhZCB0byB0aGUgYmVoYXZpb3Igd2UmIzM5O3JlIG9ic2VydmluZy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgcHJvY2VzcyB0byBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JkZXZfZmx1c2hfYnlfZGV2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JkZXYuYz0yNjU9RVhQT1JUX1NZTUJPTF9HUEwoc3luY19ibG9ja2Rldl9ub3dhaXQpO1xuLS1cbmJsb2NrL2JkZXYuYy0yNjctLyoqXG5ibG9jay9iZGV2LmM6MjY4OiAqIGJkZXZfZmx1c2hfYnlfZGV2IC0gYXR0ZW1wdCB3cml0ZWJhY2sgb2YgYSBibG9jayBkZXZpY2UmIzM5O3MgcGFnZSBjYWNoZVxuYmxvY2svYmRldi5jLTI2OS0gKiBAZGV2OiB0YXJnZXQgYmxvY2sgZGV2aWNlIG51bWJlclxuLS1cbmJsb2NrL2JkZXYuYy0yNzMtICovXG5ibG9jay9iZGV2LmM6Mjc0OnZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KVxuYmxvY2svYmRldi5jLTI3NS17XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xNzEyPWludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTcxMzp2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldik7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE3MTQtdm9pZCBzeW5jX2JkZXZzKGJvb2wgd2FpdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTM5OTA9c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vbWVtY29udHJvbC5jLTM5OTUtXG5tbS9tZW1jb250cm9sLmM6Mzk5NjpcdGJkZXZfZmx1c2hfYnlfZGV2KGN0eC1cdTAwM2VkZXYpO1xubW0vbWVtY29udHJvbC5jLTM5OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjE0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9yZWlnbiBEaXJ0eSBQYWdlIEZsdXNoaW5nIGFuZCBGb2N1cyBTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXMgdHJpZ2dlcmVkLCBhbmQgSSYjMzk7bSBzdGFydGluZyBieSBsb29raW5nIGF0IGBiYWxhbmNlX2RpcnR5X3BhZ2VzYC4gSXQgY2FsbHMgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgd2hlbiB0aGUgYG1kdGNgIGhhcyBmb3JlaWduIGRpcnR5aW5nIG9yIHRoZSBkaXJ0eSByYXRpbyBpcyBoaWdoOyB0aGF0JiMzOTtzIHRoZSBjb3JlLgoKTm93LCBJJiMzOTttIHRyYWNpbmcgd2hlcmUgZWxzZSB0aGlzIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gIGZ1bmN0aW9uYWxpdHkgaXMgdG91Y2hlZC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgYmxvY2svYmRldi5jYCB3aXRoIGBiZGV2X2ZsdXNoX2J5X2RldmAuIEluIGBtbS9tZW1jb250cm9sLmNgLCB0aGVyZSYjMzk7cyBhIGJ1bmNoOiBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgIChzdGF0aWMpLCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCwgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgIChzdGF0aWMpLCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCBpdHNlbGYsIGBtZW1fY2dyb3VwX2FsbG9jYCwgYG1lbV9jZ3JvdXBfY3NzX2ZyZWVgLCBhbmQgYG1lbV9jZ3JvdXBfaW5pdGAuCgpXYWl0Li4uIGBtZW1fY2dyb3VwX2FsbG9jYCBpcyBwcmV0dHkgZ2VuZXJhbCwgaXNuJiMzOTt0IGl0PyBUaGF0JiMzOTtzIHVzZWQgZHVyaW5nIG1lbWNnIGNyZWF0aW9uLCB3aGljaCBpcyBldmVyeXdoZXJlLiBCdXQgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAsIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gLCBgYmRldl9mcm5fZmx1c2hfd29ya2AsIGBiZGV2X2ZsdXNoX2J5X2RldmAsIGFuZCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgIOKAkyB0aG9zZSBzZWVtIHNwZWNpZmljIHRvIGZvcmVpZ24gZGlydHlpbmcgYW5kIGJkZXYgZmx1c2hlcy4KCk9rYXksIGxldCYjMzk7cyBrZWVwIGdvaW5nLiBDYW4gSSBwdXQgc3RhdGljIGZ1bmN0aW9ucyBpbiBgRm9jdXNTeW1ib2xzYD8gTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBydWxlcy4gQWgsIHJpZ2h0LiBJIG5lZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMg4oCTIGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGV0Yy4gSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5IHBvaW50cy4gQW5kLCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGFyZSB0cmlja3ksIGFzIHRoZXkgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9scywgc28gdGFyZ2V0IG5vbi1zdGF0aWMgY2FsbGVycyBpbiBgLmNgIGZpbGVzLgoKQnV0IHdhaXQgYSBtaW51dGUsIHRoZSB0ZXh0IHNheXMgc3RhdGljIGZ1bmN0aW9ucyAqaW4qLmMgZmlsZXMgZG8gaGF2ZSBzeW1ib2wgYWRkcmVzc2VzISBMZXQgbWUgcmUtZXZhbHVhdGUgdGhlIGZ1bmN0aW9uczoKCiogICBgYmRldl9mbHVzaF9ieV9kZXZgIChub24tc3RhdGljKSAtIGdvb2QKKiAgIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoc3RhdGljIHdvcmsgaGFuZGxlcikgLSBPa2F5LCBtYXliZSBnb29kPwoqICAgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAgKG5vbi1zdGF0aWMpIC0gZ29vZAoqICAgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgKG5vbi1zdGF0aWMpIC0gZ29vZAoqICAgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCAoc3RhdGljIGhlbHBlcikgLSBTdGlsbCBub3Qgc3VyZS4uLgoKSXMgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCBpbmxpbmVkPyBJdCYjMzk7cyBzdGF0aWMsIGFuZCBvbmx5IGNhbGxlZCBvbmNlIHdpdGhpbiBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYC4gUGVyaGFwcy4KCkhvbGQgb24sIEkgc2VlIHNvbWV0aGluZy4gYGJkZXZfZnJuX2ZsdXNoX3dvcmtgJiMzOTtzIGFkZHJlc3MgaXMgKnRha2VuKiBpbiB0aGUgY29kZSAoYElOSVRfV09SSygmYW1wO2N0eC0mZ3Q7d29yaywgYmRldl9mcm5fZmx1c2hfd29yaylgKS4gVGhpcyBtZWFucyBpdCBjYW4gTkVWRVIgYmUgaW5saW5lZCEgSXQmIzM5O3MgZGVmaW5pdGVseSBhIGRpc3RpbmN0IHN5bWJvbCBpbiBgdm1saW51eGAuIEFuZCBgYmRldl9mbHVzaF9ieV9kZXZgIGlzIGV4cG9ydGVkLCBzbyB0aGF0IGlzIGFsc28gZGlzdGluY3QuIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgIGFuZCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCBhcmUgYm90aCBleHBvcnRlZCBmdW5jdGlvbnMsIHRvby4KCk9rYXksIG5vdyBsZXQmIzM5O3Mgc2VlIHdoYXQgY29uZmlncyBhcmUgcmVsZXZhbnQuIEkgc2VlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgYW5kIEkga25vdyBpdCBkZXBlbmRzIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYC4KCk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gQ2hlY2tpbmcgYGJsb2NrL2JkZXYuY2AsIGBiZGV2X2ZsdXNoX2J5X2RldmAgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBibG9jay9NYWtlZmlsZWAuIEkgdGhpbmsgSSYjMzk7bSBzdGFydGluZyB0byBnZXQgYSBnb29kIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JkZXZcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL01ha2VmaWxlPTY9Q09OVEVYVF9BTkFMWVNJUyA6PSB5XG5ibG9jay9NYWtlZmlsZS03LVxuYmxvY2svTWFrZWZpbGU6ODpvYmoteVx0XHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxuYmxvY2svTWFrZWZpbGUtOS1cdFx0XHRibGstZmx1c2gubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQ4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgYG9iai0kKENPTkZJR19CTE9DSylgIGluIHRoZSByb290IGBNYWtlZmlsZWAgb3IgYEtjb25maWdgLCBzcGVjaWZpY2FsbHkgdG8gc2VlIHdoYXQgYGJsb2NrL2AgZGVwZW5kcyBvbiAtIHByZXN1bWFibHkgYENPTkZJR19CTE9DS2AsIGJ1dCBsZXQmIzM5O3MgY29uZmlybS4gQWxyaWdodCwgdGhhdCYjMzk7cyBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgY2hlY2sgb3V0IGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBhbmQgdGhlc2UgYmxvY2sgY2dyb3VwIGZlYXR1cmVzLiBBaCwgeWVzLCBgbW0vbWVtY29udHJvbC5jYCBkZXBlbmRzIG9uIGBDT05GSUdfTUVNQ0dgLiBNYWtlcyBzZW5zZS4gSSBrbm93IHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgY29kZSBpbiB0aGVyZS4gSSBiZXQgaXQgaGFzIHRvIGRvIHdpdGggdGhlIGJsb2NrIGNncm91cCBzdHVmZi4KCkxldCBtZSBjaGVjayBpbnNpZGUgYG1tL21lbWNvbnRyb2wuY2AuLi4gYWgsIHllcy4gVGhlIGZvcmVpZ24gdHJhY2tpbmcgY29kZSBhbmQgdGhlIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCBhcmUgYWxsIHByb3RlY3RlZCBieSBgI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYC4gVGhhdCYjMzk7cyB0aGUgbGluay4gU28gYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBpcyBrZXkuCgpSaWdodCwgc28gdG8gdHJhY2UgdGhpcyBiYWNrLCBJIG5lZWQgdG8gY2hlY2sgYGluaXQvS2NvbmZpZ2AgYWdhaW4gdG8gY29uZmlybSB0aGUgcmVsYXRpb25zaGlwcy4gTGV0JiMzOTtzIHNlZS4uLiBgTUVNQ0dgIGRlcGVuZHMgb24gYENHUk9VUFNgLiBHb3QgaXQuIE5vdywgKnRoYXQqIGBDR1JPVVBfV1JJVEVCQUNLYCBkZXBlbmRzIG9uIGJvdGggYE1FTUNHICZhbXA7JmFtcDsgQkxLX0NHUk9VUGAuIEdvb2QuIEkmIzM5O20gZ2V0dGluZyBhIGNsZWFyZXIgcGljdHVyZS4KCk9rYXksIG15IGZpbmFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLCBJIHdhbnQgdG8gY29uZmlybSBpZiBgQkxPQ0tgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgYEJMS19DR1JPVVBgLiBJIGhhdmUgdG8gYmUgc3VyZSBvZiB0aGUgZGVwZW5kZW5jeSB0cmVlLiBJIGNhbiYjMzk7dCBidWlsZCBzb21ldGhpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24gdGhhdCYjMzk7cyBnb2luZyB0byBmYWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxuLS1cbmJsb2NrL0tjb25maWctNDEtXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxuYmxvY2svS2NvbmZpZy00My1cdGJvb2xcbmJsb2NrL0tjb25maWctNDQtXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG5ibG9jay9LY29uZmlnLTQ2LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTQ0LVxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbmJsb2NrL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE2My1cbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuYmxvY2svS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O0Nncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1wmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xMTA4PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTI0LVxuaW5pdC9LY29uZmlnOjExMjU6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTI2LVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjM5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLCBgaW5pdC9LY29uZmlnYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDExMjUsIHdoaWNoLCBiYXNlZCBvbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBsaWtlbHkgY29udGFpbnMgc29tZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgYSByZWxhdGVkIGdyb3VwaW5nIG9mIHNldHRpbmdzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGhpZ2gtbGV2ZWwgbW9kdWxlIGRlZmluaXRpb24sIGEgY3J1Y2lhbCBkZXZpY2UgZHJpdmVyIHBhcmFtZXRlciwgb3IgcGVyaGFwcyBhIHNlY3Rpb24gdGhhdCBzZXRzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbml0aWFsIHJhbWRpc2sgb3Igcm9vdCBmaWxlc3lzdGVtIG9wdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGhvdyB0aGVzZSBjb21wb25lbnRzIGNvbWUgdG9nZXRoZXIgdG8gZm9ybSB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTEyMTpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTIyOlx0XG4xMTIzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExMjQ6XHRcbjExMjU6XHRjb25maWcgQkxLX0NHUk9VUFxuMTEyNjpcdFx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4xMTI3Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4xMTI4Olx0XHRkZWZhdWx0IG5cbjExMjk6XHRcdGhlbHBcbjExMzA6XHRcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cbjExMzE6XHRcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xuMTEzMjpcdFx0cG9saWNpZXMuXG4xMTMzOlx0XG4xMTM0Olx0XHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXG4xMTM1Olx0XHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXG4xMTM2Olx0XHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cbjExMzc6XHRcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cbjExMzg6XHRcbjExMzk6XHRcdFRoaXMgb3B0aW9uIG9ubHkgZW5hYmxlcyBnZW5lcmljIEJsb2NrIElPIGNvbnRyb2xsZXIgaW5mcmFzdHJ1Y3R1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTI5CgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDg5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZvcmVpZ24gRGlydHkgVHJhY2tpbmcgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gRmlyc3QsIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgc3RyYWlnaHRmb3J3YXJkLiBgQkxLX0NHUk9VUGAgZGVwZW5kcyBvbiBgQkxPQ0tgLiBgQ0dST1VQX1dSSVRFQkFDS2AgZGVwZW5kcyBvbiBib3RoIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYC4gQW5kLCBvZiBjb3Vyc2UsIGBNRU1DR2AgcmVsaWVzIG9uIGBDR1JPVVBTYC4gU28sIHRvIGVuYWJsZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBzZXR0aW5nIGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYEJMS19DR1JPVVBgLCBhbmQgYEJMT0NLYCBjb3ZlcnMgdGhlIHJlcXVpcmVtZW50cy4gSXQmIzM5O3Mgd29ydGggbm90aW5nIHRoYXQgYENHUk9VUF9XUklURUJBQ0tgIGlzIGEgc2ltcGxlIGJvb2xlYW4gaW4gYGluaXQvS2NvbmZpZ2AgdGhhdCYjMzk7cyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGlmIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCAoYW5kIHRoZXJlZm9yZSBgQkxPQ0tgKSBhcmUgZW5hYmxlZCDigJMgc28sIGxpc3RpbmcgYWxsIGZvdXIgaW4gYEVuYWJsZUNvbmZpZ3NgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoIGFuZCBnb29kIHByYWN0aWNlIGZvciBjbGFyaXR5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gV2UmIzM5O3ZlIGdvdDoKCiogICBgYmRldl9mbHVzaF9ieV9kZXZgOiBBIG5ldyBmdW5jdGlvbiBpbnRyb2R1Y2VkIGluIGBibG9jay9iZGV2LmNgLgoqICAgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgOiBBIG5ldyB3b3JrIGZ1bmN0aW9uIGludHJvZHVjZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuCiogICBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYDogQSBtb2RpZmllZCBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC4KKiAgIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gOiBBbm90aGVyIG1vZGlmaWVkIGZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgLgoqICAgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YDogQSBuZXcgZnVuY3Rpb24gaW4gYG1tL21lbWNvbnRyb2wuY2AuCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBpZGVudGlmaWVkIGFsbCB0aGUgY2FsbGVycyBvZiB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBgYmRldl9mbHVzaF9ieV9kZXZgIGNhbGxzIGBibGtkZXZfZ2V0X25vX29wZW5gLCBgbXV0ZXhfdHJ5bG9ja2Agb24gYGJkX2Rpc2stJmd0O29wZW5fbXV0ZXhgLCBgc3luY19ibG9ja2Rldl9ub3dhaXRgLCBhbmQgYGJsa2Rldl9wdXRfbm9fb3BlbmAuCgpUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyBmb3JlaWduIGRpcnR5IHRyYWNraW5nIGZvciBibG9jayBkZXZpY2UgaW5vZGVzIGFjcm9zcyBjZ3JvdXBzLiBUaGUgZ2lzdCBpcywgd2hlbiBhIGZvcmVpZ24gYmxvY2sgZGV2aWNlIGZvbGlvIGlzIGRpcnRpZWQgd2l0aGluIGEgbWVtY2csIGluc3RlYWQgb2YgdGhlIG9sZCBiZWhhdmlvciBvZiB0cmFja2luZyB3YiBhbmQgZmx1c2hpbmcgcG90ZW50aWFsbHkgdW5yZWxhdGVkIGlub2RlcywgaXQgbm93IHJlY29yZHMgdGhlIGJsb2NrIGRldmljZSBudW1iZXIgaW4gYG1lbWNnLSZndDtiZGV2X2ZybmAgYW5kIGxhdGVyIGNhbGxzIGBiZGV2X2Zybl9mbHVzaF93b3JrYCBhc3luY2hyb25vdXNseSBvbiBgbWVtY2dfYmRldl9mcm5fZmx1c2hlcmAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgYmRldl9mbHVzaF9ieV9kZXZgLgoKVGhpcyBpcyBhIG5vbi10cml2aWFsIGNoYW5nZSwgaW52b2x2aW5nIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbG9ja2luZyB3aXRoIGBmcm5fbG9ja2AgKGEgc3BpbmxvY2sgbmVzdGVkIGluc2lkZSBgbWFwcGluZy0mZ3Q7aV9wYWdlc2ApLCBhc3luY2hyb25vdXMgd29ya3F1ZXVlIGRpc3BhdGNoIHRocm91Z2ggYG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXJgLCBsaWZlY3ljbGUgc3luY2hyb25pemF0aW9uIHVzaW5nIGBmbHVzaF93b3JrYCBpbnNpZGUgYG1lbV9jZ3JvdXBfY3NzX2ZyZWVgLCBhbmQgYmxvY2sgZGV2aWNlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IHdpdGggbXV0ZXggaGFuZGxpbmcgaW4gYGJkZXZfZmx1c2hfYnlfZGV2YC4gVGhpcyBpcyBxdWludGVzc2VudGlhbCBjb3JlIE1NL2Jsb2NrIGxheWVyIGNvZGUsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgcHJpbWUgZm9yIGZ1enppbmcuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgd2UmIzM5O3ZlIGdvdCB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgQkxPQ0tgLCBgTUVNQ0dgLCBgQkxLX0NHUk9VUGAsIGFuZCBgQ0dST1VQX1dSSVRFQkFDS2AuIFRoZSBgRm9jdXNTeW1ib2xzYDogYGJkZXZfZmx1c2hfYnlfZGV2YCwgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgLCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgLCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCwgYW5kIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gLgoKSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFzeW5jaHJvbm91cyBmb3JlaWduIHdyaXRlYmFjayBoYW5kbGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBzaGFyZWQgYWNyb3NzIG1lbW9yeSBjZ3JvdXBzLiBJdCBhZGRzIGEgbmV3IGZsdXNoZXIgd29ya3F1ZXVlLCBuZXcgd29yayB0cmFja2luZyBsb2dpYyB3aXRoIGBmcm5fbG9ja2AsIGFuZCBibG9jayBkZXZpY2UgZmx1c2ggbG9naWMuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciBjb2RlIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbGlmZXRpbWUsIGFuZCBsb2NraW5nIGlzc3VlcywgbWFraW5nIGl0IGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9mbHVzaF9ieV9kZXYmIzM0OywKICAgICYjMzQ7YmRldl9mcm5fZmx1c2hfd29yayYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mbHVzaF9mb3JlaWduJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXHUwMDNlaV9wYWdlcyksIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAobWVtY2dfYmRldl9mcm5fZmx1c2hlciksIHdvcmsgaXRlbSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIG1lbWNnIHRlYXJkb3duLCBhbmQgZGV2aWNlIGZsdXNoIGhhbmRsaW5nIGluIGJkZXZfZmx1c2hfYnlfZGV2LiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBhbmQgbGlmZWN5Y2xlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZGV2X2ZsdXNoX2J5X2RldiYjMzQ7LAogICAgJiMzNDtiZGV2X2Zybl9mbHVzaF93b3JrJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgd3JpdGViYWNrIGxvZ2ljIGJ5IGFkZGluZyBkZWRpY2F0ZWQgZm9yZWlnbiBkaXJ0eSB0cmFja2luZyBhbmQgYXN5bmNocm9ub3VzIGZsdXNoaW5nIGZvciBibG9jayBkZXZpY2UgaW5vZGVzIGFjcm9zcyBtZW1vcnkgY2dyb3Vwcy4gSXQgaW50cm9kdWNlcyBuZXcgbG9ja2luZyAoZnJuX2xvY2sgbmVzdGluZyBpbnNpZGUgbWFwcGluZy1cdTAwM2VpX3BhZ2VzKSwgYSBkZWRpY2F0ZWQgd29ya3F1ZXVlIChtZW1jZ19iZGV2X2Zybl9mbHVzaGVyKSwgd29yayBpdGVtIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgbWVtY2cgdGVhcmRvd24sIGFuZCBkZXZpY2UgZmx1c2ggaGFuZGxpbmcgaW4gYmRldl9mbHVzaF9ieV9kZXYuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnQgZnV6emluZyBmb3IgY29uY3VycmVuY3ksIGxvY2sgb3JkZXJpbmcsIGFuZCBsaWZlY3ljbGUgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBkaXJ0eSBwYWdlIHRyYWNraW5nIGFuZCB3cml0ZWJhY2sgZm9yIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcyBieSBhZGRpbmcgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgdHJhY2tpbmcgZGlydHlpbmcgb2YgYmxvY2sgZGV2aWNlIGlub2RlcywgYW5kIGZsdXNoaW5nIHRoZW0gdmlhIGRlZGljYXRlZCBhc3luY2hyb25vdXMgd29yayAoYGJkZXZfZmx1c2hfYnlfZGV2YCkuXG5cbktNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pLlxuMi4gRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4YCBpbnN0YW5jZXMgYXJlIGVtYmVkZGVkIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIChlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uKSwgYW5kIGBJTklUX1dPUksoKWAgLyBgY3R4LVx1MDAzZW1lbWNnYCBhcmUgZXhwbGljaXRseSBzZXQgZHVyaW5nIGBtZW1fY2dyb3VwX2FsbG9jKClgLlxuMy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc2NhbGFyIGFyZ3VtZW50cyAoc3VjaCBhcyBgZGV2X3QgZGV2YCBpbiB0cmFjZXBvaW50cyBhbmQgaGVscGVyIGZ1bmN0aW9ucykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGV2YWx1YXRpb24uXG40LiBUaGUgcHJpbWFyeSByaXNrcyBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgbG9jayBvcmRlcmluZyAoYGZybl9sb2NrYCBuZXN0aW5nLCBJUlEgZGlzYWJsZW1lbnQsIGFuZCBgb3Blbl9tdXRleGAgdHJ5bG9jaykgYW5kIGJsb2NrIGRldmljZSByZWZlcmVuY2UgbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgZGVidWcgY2hlY2tzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmY2ZDg0YjIyNWFjNzJiMDU0ZTQ5MTI1YjVjNjgyYjNhMjc0MzA3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDExOjM2OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jCmluZGV4IGNkODMyMzA4Mzc0MDYuLmRhMWZjNTY5MjZmZDQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iZGV2LmMKQEAgLTI2NCw2ICYjNDM7MjY0LDMwIEBAIGludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY19ibG9ja2Rldl9ub3dhaXQpOwogCiYjNDM7LyoqCiYjNDM7ICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSYjMzk7cyBwYWdlIGNhY2hlCiYjNDM7ICogQGRldjogdGFyZ2V0IGJsb2NrIGRldmljZSBudW1iZXIKJiM0MzsgKgomIzQzOyAqIFNraXAgY2xvc2VkIGRldmljZXMgb3IgZGV2aWNlcyB3aG9zZSBvcGVuX211dGV4IGlzIGJ1c3kuCiYjNDM7ICogTWF5IHNsZWVwIHdoaWxlIHN1Ym1pdHRpbmcgd3JpdGViYWNrOyBkb2VzIG5vdCB3YWl0IGZvciBhbGwgSS9PIHRvIGNvbXBsZXRlLgomIzQzOyAqLwomIzQzO3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKJiM0MzsKJiM0MzsJYmRldiA9IGJsa2Rldl9nZXRfbm9fb3BlbihkZXYsIGZhbHNlKTsKJiM0MzsJaWYgKCFiZGV2KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBQcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBjbG9zaW5nIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB3cml0ZWJhY2suICovCiYjNDM7CWlmIChtdXRleF90cnlsb2NrKCZhbXA7YmRldi0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCkpIHsKJiM0MzsJCWlmIChhdG9taWNfcmVhZCgmYW1wO2JkZXYtJmd0O2JkX29wZW5lcnMpKQomIzQzOwkJCXN5bmNfYmxvY2tkZXZfbm93YWl0KGJkZXYpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7YmRldi0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CX0KJiM0MzsJYmxrZGV2X3B1dF9ub19vcGVuKGJkZXYpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2sKICAqIGRldmljZSB2aWEgaXRzIG1hcHBpbmcuICBEb2VzIG5vdCB0YWtlIHRoZSBzdXBlcmJsb2NrIGxvY2suCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE3MTAsNiAmIzQzOzE3MTAsNyBAQCB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKIGludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwogaW50IHN5bmNfYmxvY2tkZXZfcmFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpOwogaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwomIzQzO3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KTsKIHZvaWQgc3luY19iZGV2cyhib29sIHdhaXQpOwogdm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spOwogdm9pZCBwcmludGtfYWxsX3BhcnRpdGlvbnModm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLmQ0NGQzY2U1MWI1MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xNzYsNiAmIzQzOzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4gewogCXN0cnVjdCB3Yl9jb21wbGV0aW9uIGRvbmU7CS8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBmcm5fbG9jayBwcm90ZWN0cyBkZXYgYW5kIGluZmxpZ2h0LgomIzQzOyAqIE5vIGV4dHJhIG1lbWNnIHJlZmVyZW5jZSBpcyB0YWtlbjogdGhpcyB3b3JrIGlzIGVtYmVkZGVkIGluIHRoZSBtZW1jZywKJiM0MzsgKiBhbmQgbWVtX2Nncm91cF9jc3NfZnJlZSgpIHdhaXRzIGZvciBpdCB0byBmaW5pc2ggYmVmb3JlIGZyZWVpbmcgdGhlIG1lbWNnLgomIzQzOyAqLwomIzQzO3N0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggewomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJZGV2X3QgZGV2OwomIzQzOwlib29sIGluZmxpZ2h0OwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBCdWNrZXQgZm9yIGFyYml0cmFyaWx5IGJ5dGUtc2l6ZWQgb2JqZWN0cyBjaGFyZ2VkIHRvIGEgbWVtb3J5CiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cApAQCAtMjc5LDYgJiM0MzsyOTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlzdHJ1Y3Qgd2JfZG9tYWluIGNnd2JfZG9tYWluOwogCXN0cnVjdCBtZW1jZ19jZ3diX2ZybiBjZ3diX2ZybltNRU1DR19DR1dCX0ZSTl9DTlRdOwomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IGJkZXZfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07CiYjNDM7CS8qIE5lc3RzIGluc2lkZSBtYXBwaW5nLSZndDtpX3BhZ2VzLiAqLwomIzQzOwlzcGlubG9ja190IGZybl9sb2NrOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKaW5kZXggMTNlZTA3NmNjZDE2Ni4uZmZkMWI4ZGY0MjMxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKQEAgLTI3Myw5ICYjNDM7MjczLDkgQEAgVFJBQ0VfRVZFTlQoaW5vZGVfc3dpdGNoX3dicywKIAogVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAotCVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksCiYjNDM7CVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgZGV2X3QgZGV2KSwKIAotCVRQX0FSR1MoZm9saW8sIHdiKSwKJiM0MzsJVFBfQVJHUyhmb2xpbywgd2IsIGRldiksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2FycmF5KGNoYXIsCQluYW1lLCAzMikKQEAgLTI4NCw2ICYjNDM7Mjg0LDcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAkJX19maWVsZCh1NjQsCQljZ3JvdXBfaW5vKQogCQlfX2ZpZWxkKHU2NCwJCXBhZ2VfY2dyb3VwX2lubykKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsCW1lbWNnX2lkKQomIzQzOwkJX19maWVsZChkZXZfdCwJCWRldikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC0yOTUsMzQgJiM0MzsyOTYsMzcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAkJX19lbnRyeS0mZ3Q7aW5vCQk9IGlub2RlID8gaW5vZGUtJmd0O2lfaW5vIDogMDsKIAkJX19lbnRyeS0mZ3Q7bWVtY2dfaWQJPSB3Yi0mZ3Q7bWVtY2dfY3NzLSZndDtpZDsKIAkJX19lbnRyeS0mZ3Q7Y2dyb3VwX2lubwk9IF9fdHJhY2Vfd2JfYXNzaWduX2Nncm91cCh3Yik7CiYjNDM7CQlfX2VudHJ5LSZndDtkZXYJCT0gZGV2OwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJX19lbnRyeS0mZ3Q7cGFnZV9jZ3JvdXBfaW5vID0gY2dyb3VwX2lubyhmb2xpb19tZW1jZyhmb2xpbyktJmd0O2Nzcy5jZ3JvdXApOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkpLAogCi0JVFBfcHJpbnRrKCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUmIzM0OywKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUgZGV2PSV1OiV1JiMzNDssCiAJCV9fZW50cnktJmd0O25hbWUsCiAJCV9fZW50cnktJmd0O2JkaV9pZCwKIAkJX19lbnRyeS0mZ3Q7aW5vLAogCQlfX2VudHJ5LSZndDttZW1jZ19pZCwKIAkJX19lbnRyeS0mZ3Q7Y2dyb3VwX2lubywKLQkJX19lbnRyeS0mZ3Q7cGFnZV9jZ3JvdXBfaW5vCiYjNDM7CQlfX2VudHJ5LSZndDtwYWdlX2Nncm91cF9pbm8sCiYjNDM7CQlNQUpPUihfX2VudHJ5LSZndDtkZXYpLCBNSU5PUihfX2VudHJ5LSZndDtkZXYpCiAJKQogKTsKIAogVFJBQ0VfRVZFTlQoZmx1c2hfZm9yZWlnbiwKIAogCVRQX1BST1RPKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgaW50IGZybl9iZGlfaWQsCi0JCSB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkKSwKJiM0MzsJCSB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkLCBkZXZfdCBkZXYpLAogCi0JVFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkKSwKJiM0MzsJVFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkLCBkZXYpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19hcnJheShjaGFyLAkJbmFtZSwgMzIpCiAJCV9fZmllbGQodTY0LAkJY2dyb3VwX2lubykKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsCWZybl9iZGlfaWQpCiAJCV9fZmllbGQodW5zaWduZWQgaW50LAlmcm5fbWVtY2dfaWQpCiYjNDM7CQlfX2ZpZWxkKGRldl90LAkJZGV2KQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTMzMCwxMyAmIzQzOzMzNCwxNSBAQCBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLAogCQlfX2VudHJ5LSZndDtjZ3JvdXBfaW5vCT0gX190cmFjZV93Yl9hc3NpZ25fY2dyb3VwKHdiKTsKIAkJX19lbnRyeS0mZ3Q7ZnJuX2JkaV9pZAk9IGZybl9iZGlfaWQ7CiAJCV9fZW50cnktJmd0O2Zybl9tZW1jZ19pZAk9IGZybl9tZW1jZ19pZDsKJiM0MzsJCV9fZW50cnktJmd0O2RldgkJPSBkZXY7CiAJKSwKIAotCVRQX3ByaW50aygmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1JiMzNDssCiYjNDM7CVRQX3ByaW50aygmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1IGRldj0ldToldSYjMzQ7LAogCQlfX2VudHJ5LSZndDtuYW1lLAogCQlfX2VudHJ5LSZndDtjZ3JvdXBfaW5vLAogCQlfX2VudHJ5LSZndDtmcm5fYmRpX2lkLAotCQlfX2VudHJ5LSZndDtmcm5fbWVtY2dfaWQKJiM0MzsJCV9fZW50cnktJmd0O2Zybl9tZW1jZ19pZCwKJiM0MzsJCU1BSk9SKF9fZW50cnktJmd0O2RldiksIE1JTk9SKF9fZW50cnktJmd0O2RldikKIAkpCiApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMDc4NGY2ZTQwYWVjYyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzksNiAmIzQzOzM5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWZsYWdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFja2luZy1kZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0X3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKQEAgLTEwNCw2ICYjNDM7MTA1LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptZW1jZ19wbl9jYWNoZXA7CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lbWNnX2Nnd2JfZnJuX3dhaXRxKTsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgX19yb19hZnRlcl9pbml0OwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2lzX2R5aW5nKHZvaWQpCkBAIC0zODQ1LDYgJiM0MzszODQ3LDQxIEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBCZGV2IGlub2RlcyBhcmUgY29tbW9ubHkgc2hhcmVkIGJ5IG1hbnkgbWVtY2dzLiBGbHVzaGluZyB0aGVpciBvd25lciB3YgomIzQzOyAqIGNhbiB3cml0ZSB1bnJlbGF0ZWQgZmlsZSBkYXRhLCBzbyByZWNvcmQgZGV2aWNlIG51bWJlcnMgc2VwYXJhdGVseSBhbmQKJiM0MzsgKiBmbHVzaCBvbmx5IHRoZSBiZGV2IG1hcHBpbmdzLiBUcmFja2luZyBpcyBiZXN0IGVmZm9ydDogcmVjb3JkIG9ubHkgZGV2X3QKJiM0MzsgKiB3aXRob3V0IGhvbGRpbmcgZGV2aWNlIG9yIGlub2RlIHJlZmVyZW5jZXMsIHNvIGl0IG1heSByYWNlIHdpdGggZGV2aWNlCiYjNDM7ICogcmVtb3ZhbCBhbmQgcmUtYWRkaXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBfX2ZvbGlvX21hcmtfZGlydHkoKSB0YWtlcyBtYXBwaW5nLSZndDtpX3BhZ2VzIHdpdGggeGFfbG9ja19pcnFzYXZlKCkKJiM0MzsJICogYmVmb3JlIHJlYWNoaW5nIHRoaXMgaGVscGVyLiBVc2UgaXJxc2F2ZSBoZXJlIGFzIHdlbGwgc28gZnJuX2xvY2smIzM5O3MKJiM0MzsJICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bWVtY2ctJmd0O2Zybl9sb2NrLCBmbGFncyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobWVtY2ctJmd0O2JkZXZfZnJuW2ldLmRldiA9PSBkZXYpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWN0eCA9ICZhbXA7bWVtY2ctJmd0O2JkZXZfZnJuW2ldOwomIzQzOwkJaWYgKGN0eC0mZ3Q7aW5mbGlnaHQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQljdHgtJmd0O2RldiA9IGRldjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bWVtY2ctJmd0O2Zybl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoKICAqIEZvcmVpZ24gZGlydHkgZmx1c2hpbmcKICAqCkBAIC0zODc1LDE3ICYjNDM7MzkxMiwxNyBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLAogICogbW9zdCByZWNlbnQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgYW5kIGluaXRpYXRpbmcgcmVtb3RlIGZsdXNoZXMgb24KICAqIHRoZW0gd2hlbiBsb2NhbCB3cml0ZWJhY2sgaXNuJiMzOTt0IGVub3VnaCB0byBrZWVwIHRoZSBtZW1vcnkgY2xlYW4gZW5vdWdoLgogICoKLSAqIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgc3VjaCBtZWNoYW5pc20uICBXaGVuIGEgZm9yZWlnbgotICogcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmQgd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJiMzOTt0IG1hdGNoIC0gaXMKLSAqIGRpcnRpZWQsIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZwotICogYmRpX3dyaXRlYmFjayBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuICBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKQotICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHMKJiM0MzsgKiBGb3Igbm9uLWJkZXYgaW5vZGVzLCB3aGVuIGEgZm9yZWlnbiBwYWdlIC0gYSBwYWdlIHdob3NlIG1lbWNnIGFuZAomIzQzOyAqIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbiYjMzk7dCBtYXRjaCAtIGlzIGRpcnRpZWQsCiYjNDM7ICogbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KCkgcmVjb3JkcyB0aGUgaW5vZGUgb3duaW5nIGJkaV93cml0ZWJhY2sKJiM0MzsgKiBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpIGRlY2lkZXMgdGhhdCB0aGUKJiM0MzsgKiBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHMKICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkCiAgKiBmb3JlaWduIGJkaV93cml0ZWJhY2tzIHdoaWNoIGhhdmVuJiMzOTt0IGV4cGlyZWQuICBCb3RoIHRoZSBudW1iZXJzIG9mCiAgKiByZWNvcmRlZCBiZGlfd3JpdGViYWNrcyBhbmQgY29uY3VycmVudCBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzIGFyZQogICogbGltaXRlZCB0byBNRU1DR19DR1dCX0ZSTl9DTlQuCiAgKgotICogVGhlIG1lY2hhbmlzbSBvbmx5IHJlbWVtYmVycyBJRHMgYW5kIGRvZXNuJiMzOTt0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLgomIzQzOyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbiYjMzk7dCBob2xkIGFueSBvYmplY3QgcmVmZXJlbmNlcy4KICAqIEFzIGJlaW5nIHdyb25nIG9jY2FzaW9uYWxseSBkb2VzbiYjMzk7dCBtYXR0ZXIsIHVwZGF0ZXMgYW5kIGFjY2Vzc2VzIHRvIHRoZQogICogcmVjb3JkcyBhcmUgbG9ja2xlc3MgYW5kIHJhY3kuCiAgKi8KQEAgLTM4OTgsOCAmIzQzOzM5MzUsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbywKIAl1NjQgb2xkZXN0X2F0ID0gbm93OwogCWludCBvbGRlc3QgPSAtMTsKIAlpbnQgaTsKJiM0MzsJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKJiM0MzsJc3RydWN0IGlub2RlICpiZGV2X2lub2RlID0gbWFwcGluZyA/IG1hcHBpbmctJmd0O2hvc3QgOiBOVUxMOwomIzQzOwomIzQzOwlpZiAobWVtY2dfYmRldl9mcm5fZmx1c2hlciAmYW1wOyZhbXA7IGJkZXZfaW5vZGUgJmFtcDsmYW1wOwomIzQzOwkgICAgc2JfaXNfYmxrZGV2X3NiKGJkZXZfaW5vZGUtJmd0O2lfc2IpKSB7CiYjNDM7CQl0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgYmRldl9pbm9kZS0mZ3Q7aV9yZGV2KTsKJiM0MzsJCW1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KG1lbWNnLCBiZGV2X2lub2RlLSZndDtpX3JkZXYpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQl0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3Yik7CiYjNDM7CXRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiLCAwKTsKIAogCS8qCiAJICogUGljayB0aGUgc2xvdCB0byB1c2UuICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2xvdCBmb3IgQHdiLCBrZWVwCkBAIC0zOTQxLDYgJiM0MzszOTg3LDI1IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHgsIHdvcmspOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwliZGV2X2ZsdXNoX2J5X2RldihjdHgtJmd0O2Rldik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBkaXJ0eSB0cmFja2luZyBwYXRoIHRha2VzIGZybl9sb2NrIHdoaWxlIGhvbGRpbmcgbWFwcGluZy0mZ3Q7aV9wYWdlcy4KJiM0MzsJICogRGlzYWJsZSBsb2NhbCBJUlFzIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggSS9PIGNvbXBsZXRpb24KJiM0MzsJICogaGFuZGxlcnMgdGhhdCBhbHNvIHRha2UgbWFwcGluZy0mZ3Q7aV9wYWdlcy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDttZW1jZy0mZ3Q7ZnJuX2xvY2ssIGZsYWdzKTsKJiM0MzsJY3R4LSZndDtpbmZsaWdodCA9IGZhbHNlOwomIzQzOwljdHgtJmd0O2RldiA9IDA7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O21lbWNnLSZndDtmcm5fbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovCiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpCiB7CkBAIC0zOTQ5LDYgJiM0Mzs0MDE0LDE5IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKIAl1NjQgbm93ID0gamlmZmllc182NDsKIAlpbnQgaTsKIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV07CiYjNDM7CQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttZW1jZy0mZ3Q7ZnJuX2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmICghY3R4LSZndDtpbmZsaWdodCAmYW1wOyZhbXA7IGN0eC0mZ3Q7ZGV2KSB7CiYjNDM7CQkJY3R4LSZndDtpbmZsaWdodCA9IHRydWU7CiYjNDM7CQkJdHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgMCwgMCwgY3R4LSZndDtkZXYpOwomIzQzOwkJCXF1ZXVlX3dvcmsobWVtY2dfYmRldl9mcm5fZmx1c2hlciwgJmFtcDtjdHgtJmd0O3dvcmspOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21lbWNnLSZndDtmcm5fbG9jaywgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IG1lbWNnX2Nnd2JfZnJuICpmcm4gPSAmYW1wO21lbWNnLSZndDtjZ3diX2ZybltpXTsKIApAQCAtMzk2MSw3ICYjNDM7NDAzOSw4IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKIAkJaWYgKHRpbWVfYWZ0ZXI2NChmcm4tJmd0O2F0LCBub3cgLSBpbnR2KSAmYW1wOyZhbXA7CiAJCSAgICBhdG9taWNfcmVhZCgmYW1wO2Zybi0mZ3Q7ZG9uZS5jbnQpID09IDEpIHsKIAkJCWZybi0mZ3Q7YXQgPSAwOwotCQkJdHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgZnJuLSZndDtiZGlfaWQsIGZybi0mZ3Q7bWVtY2dfaWQpOwomIzQzOwkJCXRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi0mZ3Q7YmRpX2lkLCBmcm4tJmd0O21lbWNnX2lkLAomIzQzOwkJCQkJICAgIDApOwogCQkJY2dyb3VwX3dyaXRlYmFja19ieV9pZChmcm4tJmd0O2JkaV9pZCwgZnJuLSZndDttZW1jZ19pZCwKIAkJCQkJICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILAogCQkJCQkgICAgICAgJmFtcDtmcm4tJmd0O2RvbmUpOwpAQCAtNDIwMiw5ICYjNDM7NDI4MSwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAltZW1jZy0mZ3Q7a21lbWNnX2lkID0gLTE7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21lbWNnLSZndDtjZ3diX2xpc3QpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV07CiYjNDM7CiAJCW1lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lID0KIAkJCV9fV0JfQ09NUExFVElPTl9JTklUKCZhbXA7bWVtY2dfY2d3Yl9mcm5fd2FpdHEpOwomIzQzOwkJSU5JVF9XT1JLKCZhbXA7Y3R4LSZndDt3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKTsKJiM0MzsJCWN0eC0mZ3Q7bWVtY2cgPSBtZW1jZzsKJiM0MzsJfQomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO21lbWNnLSZndDtmcm5fbG9jayk7CiAjZW5kaWYKIAlscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpOwogCXJldHVybiBtZW1jZzsKQEAgLTQzODYsOCAmIzQzOzQ0NzEsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCWludCBfX21heWJlX3VudXNlZCBpOwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKLQlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKIAkJd2Jfd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO21lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lKTsKJiM0MzsJCWZsdXNoX3dvcmsoJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV0ud29yayk7CiYjNDM7CX0KICNlbmRpZgogCWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpICZhbXA7JmFtcDsgIWNncm91cF9tZW1vcnlfbm9zb2NrZXQpCiAJCXN0YXRpY19icmFuY2hfZGVjKCZhbXA7bWVtY2dfc29ja2V0c19lbmFibGVkX2tleSk7CkBAIC01NzAzLDYgJiM0Mzs1NzkwLDEyIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpCiAJbWVtY2dfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDttZW1jZyYjMzQ7LCBXUV9QRVJDUFUsIDApOwogCVdBUk5fT04oIW1lbWNnX3dxKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwomIzQzOwltZW1jZ19iZGV2X2Zybl9mbHVzaGVyID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7bWVtY2dfYmRldl9mcm5fZmx1c2hlciYjMzQ7LAomIzQzOwkJCQkJICAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCk7CiYjNDM7CVdBUk5fT04oIW1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpOwomIzQzOyNlbmRpZgomIzQzOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJSU5JVF9XT1JLKCZhbXA7cGVyX2NwdV9wdHIoJmFtcDttZW1jZ19zdG9jaywgY3B1KS0mZ3Q7d29yaywKIAkJCSAgZHJhaW5fbG9jYWxfbWVtY2dfc3RvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQ6IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIEJsb2NrIERldmljZSBGbHVzaGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoIHdpdGggYSBmb2N1cyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gc2NydXRpbnkuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgZm9jdXNlZCBvbiBpbnRyb2R1Y2luZyBhIG1lY2hhbmlzbSBmb3IgZmx1c2hpbmcgYmxvY2sgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggZm9yZWlnbiAoaS5lLiwgbm9uLXJlc2lkZW50KSBkYXRhIHdpdGhpbiBtZW1vcnkgY2dyb3VwcywgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGViYWNrIG9wZXJhdGlvbnMuIFRoZSBgTmVlZHNLTVNBTj10cnVlYCBmbGFnIGlzIHByb2JhYmx5IHRyaWdnZXJlZCBieSBvbmUgb3IgbW9yZSBvZiBzZXZlcmFsIGZhY3RvcnMgaGVyZS4KCkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGJkZXZfZmx1c2hfYnlfZGV2YCwgdGhlIGNvcmUgZnVuY3Rpb24uIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBnZXRzIGEgYmxvY2sgZGV2aWNlIGZyb20gaXRzIGBkZXZfdGAgYW5kIGF0dGVtcHRzIGEgZmx1c2guIFRoZSBsb2NraW5nIHNlZW1zIHJlYXNvbmFibGUsIGFuZCB0aGUgYGJsa2Rldl9wdXRfbm9fb3BlbmAgc3VnZ2VzdHMgYSBzYWZlIGxpZmVjeWNsZS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4KCk5leHQsIHRoZSBuZXcgYHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHhgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFyZSBzaWduaWZpY2FudC4gVGhpcyBjb250ZXh0IHNlZW1zIHRvIHRyYWNrIGJsb2NrIGRldmljZXMgZm9yIGZsdXNoaW5nIHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAuIFRoZSBgaW5mbGlnaHRgIGZsYWcgYW5kIGBkZXZgIGZpZWxkIGFyZSBrZXkuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgdGhlc2UgZmllbGRzIGNhbiBsZWFkIHRvIGEgY29uZGl0aW9uIHdoZXJlLCB3aXRoIHNwZWNpZmljIHRpbWluZyBzY2VuYXJpb3MsIHVuaW5pdGlhbGl6ZWQgZGF0YSBjYW4gbGVhay4KClRoZSB0cmFjZSBldmVudHMsIHNwZWNpZmljYWxseSB0aGUgdXBkYXRlcyB0byBgdHJhY2tfZm9yZWlnbl9kaXJ0eWAgYW5kIGBmbHVzaF9mb3JlaWduYCB3aXRoIHRoZSBgZGV2X3RgIGFyZ3VtZW50LCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZSBgX19lbnRyeS0mZ3Q7ZGV2ID0gZGV2YCBhc3NpZ25tZW50IHdpdGhpbiBgVFBfZmFzdF9hc3NpZ25gICpjb3VsZCogYmVjb21lIHByb2JsZW1hdGljIGlmIGBkZXZgIGlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgdHJhY2UgZXZlbnQgaXMgZmlyZWQuIFNpbWlsYXJseSwgdGhlIGBNQUpPUihfX2VudHJ5LSZndDtkZXYpLCBNSU5PUihfX2VudHJ5LSZndDtkZXYpYCBpbiBgVFBfcHJpbnRrYCByZWxpZXMgb24gdGhpcyBpbml0aWFsaXplZCBkYXRhLgoKTm93LCBsZXQmIzM5O3MgbW92ZSB0byBgbW0vbWVtY29udHJvbC5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXJgIHdvcmtxdWV1ZSBhbmQgdGhlIGZ1bmN0aW9ucyBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgLCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCwgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgLCBhbmQgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgYXJlIGNlbnRyYWwgdG8gdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgIGlzIHRoZSBmaXJzdCBzcG90IHdoZXJlIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGFwcGVhcnM6IGluIHRoZSBsb29wIGBtZW1jZy0mZ3Q7YmRldl9mcm5baV0uZGV2ID09IGRldmAgYW5kIGluIGBjdHgtJmd0O2RldiA9IGRldmAgYWZ0ZXIgYSBjaGVjayBmb3IgYCFjdHgtJmd0O2luZmxpZ2h0YC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXJlIGNvdWxkIGJlIGNhc2VzIHdoZXJlIHdlIGhhdmUgdG8gZW5zdXJlIGBiZGV2X2ZybltpXS5kZXZgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE1vcmVvdmVyLCBgYmRldl9mcm5fZmx1c2hfd29ya2AgY2FsbHMgYGJkZXZfZmx1c2hfYnlfZGV2KGN0eC0mZ3Q7ZGV2KWAgYW5kIHRoZW4gcmVzZXRzIGBjdHgtJmd0O2luZmxpZ2h0YCBhbmQgYGN0eC0mZ3Q7ZGV2YCwgYnV0IHdpdGhvdXQgZ3VhcmFudGVlaW5nIGluaXRpYWxpemF0aW9uIGVsc2V3aGVyZS4gVGhpcyBpcyB3aGF0IHRyaWdnZXJlZCB0aGUgZmxhZy4KCmBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gIGFsc28gaGFzIGEga2V5IGNoZWNrIG9uIGAhY3R4LSZndDtpbmZsaWdodCAmYW1wOyZhbXA7IGN0eC0mZ3Q7ZGV2YC4gVGhlIGtleSBoZXJlIGlzIGFnYWluIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZSBzdHJ1Y3QgYGJkZXZfZnJuX2ZsdXNoX2N0eGA6IHdoYXQgaGFwcGVucyBpZiBgY3R4LSZndDtkZXZgIGlzIG5vdCBzZXQ/CgpGaW5hbGx5LCB0aGUgYWxsb2NhdGlvbiBvZiBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIGNydWNpYWwuIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGFsbCBmaWVsZHMsICppbmNsdWRpbmcqIHRoZSBgYmRldl9mcm5gIGFycmF5LCBhcmUgcHJvcGVybHkgemVyby1pbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbi4gSWYgdGhleSBhcmUgKm5vdCosIHdlIGhhdmUgYSBkZWZpbml0ZSBLTVNBTiBjYW5kaWRhdGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgYWxsb2NhdGlvbiBwYXRoIHRocm91Z2ggYG1lbV9jZ3JvdXBfYWxsb2NgIHRvIHZlcmlmeSB0aGlzLgoKTXkgcHJlbGltaW5hcnkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggKnBvdGVudGlhbGx5KiBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgYmxvY2sgZGV2aWNlIGZsdXNoaW5nIHBhdGgsIHNwZWNpZmljYWxseSBpbiBob3cgdGhlIGBiZGV2X2Zybl9mbHVzaF9jdHhgIGlzIG1hbmFnZWQgYW5kIHRoZSBgZGV2YCBmaWVsZCBpcyBoYW5kbGVkLiBUaGUgY29tYmluYXRpb24gb2Ygd29ya3F1ZXVlIHVzZSwgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBgZGV2YCB2YWx1ZXMsIGFuZCB0cmFjZSBldmVudCBsb2dnaW5nIHN0cm9uZ2x5IHN1Z2dlc3QgdGhpcywgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IHRlc3QgYW5kIHZlcmlmeS4gVGhlIGBOZWVkc0tNU0FOPXRydWVgIGZsYWcgc2VlbXMgYXBwcm9wcmlhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY1xcKHNpemVvZlxcKHN0cnVjdCBtZW1fY2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nIHdpdGggYG1lbV9jZ3JvdXBfYWxsb2NgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBhIHNwZWNpZmljIGNncm91cC4gTXkgZ28tdG8gYXBwcm9hY2ggaW4gdGhpcyBzaXR1YXRpb24gaXMgdG8gc3RhcnQgd2l0aCB0aGUgYmFzaWNzLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGF0IG1lYW5zIGNoZWNraW5nIGBtZW1fY2dyb3VwX2FsbG9jYC4gSXQmIzM5O3MgdGhlIG1vc3QgZGlyZWN0IHJvdXRlIHRvIHVuZGVyc3RhbmRpbmcgY3VycmVudCBhbGxvY2F0aW9ucy4gSSYjMzk7bGwgbGlrZWx5IHVzZSBhIHNpbXBsZSBgcmVhZC1maWxlYCBjb21tYW5kLCBvciBzb21ldGhpbmcgc2ltaWxhciwgdG8gaW5zcGVjdCBpdHMgY29udGVudHMuIFRoaXMgZ2l2ZXMgbWUgYSBzbmFwc2hvdCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGlzIG1vbWVudC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgZm9ybWluZyBoeXBvdGhlc2VzLCBwb3RlbnRpYWxseSBtb3Zpbmcgb24gdG8gbW9yZSBzb3BoaXN0aWNhdGVkIHRvb2xzIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQxOTA6XHRcbjQxOTE6XHRcdGxydXZlY19pbml0KFx1MDAyNnBuLVx1MDAzZWxydXZlYyk7XG40MTkyOlx0XHRwbi1cdTAwM2VtZW1jZyA9IG1lbWNnO1xuNDE5MzpcdFxuNDE5NDpcdFx0bWVtY2ctXHUwMDNlbm9kZWluZm9bbm9kZV0gPSBwbjtcbjQxOTU6XHRcdHJldHVybiB0cnVlO1xuNDE5NjpcdGZhaWw6XG40MTk3Olx0XHRmcmVlX21lbV9jZ3JvdXBfcGVyX25vZGVfaW5mbyhwbik7XG40MTk4Olx0XHRyZXR1cm4gZmFsc2U7XG40MTk5Olx0fVxuNDIwMDpcdFxuNDIwMTpcdHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjQyMDI6XHR7XG40MjAzOlx0XHRpbnQgbm9kZTtcbjQyMDQ6XHRcbjQyMDU6XHRcdGZvcl9lYWNoX25vZGUobm9kZSkge1xuNDIwNjpcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tub2RlXTtcbjQyMDc6XHRcdFx0aWYgKCFwbilcbjQyMDg6XHRcdFx0XHRjb250aW51ZTtcbjQyMDk6XHRcbjQyMTA6XHRcdFx0b2JqX2Nncm91cF9wdXQocG4tXHUwMDNlb3JpZ19vYmpjZyk7XG40MjExOlx0XHRcdGZyZWVfbWVtX2Nncm91cF9wZXJfbm9kZV9pbmZvKHBuKTtcbjQyMTI6XHRcdH1cbjQyMTM6XHRcdG1lbWNnMV9mcmVlX2V2ZW50cyhtZW1jZyk7XG40MjE0Olx0XHRrZnJlZShtZW1jZy1cdTAwM2V2bXN0YXRzKTtcbjQyMTU6XHRcdGZyZWVfcGVyY3B1KG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1KTtcbjQyMTY6XHRcdGtmcmVlKG1lbWNnKTtcbjQyMTc6XHR9XG40MjE4Olx0XG40MjE5Olx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjQyMjA6XHR7XG40MjIxOlx0XHRscnVfZ2VuX2V4aXRfbWVtY2cobWVtY2cpO1xuNDIyMjpcdFx0bWVtY2dfd2JfZG9tYWluX2V4aXQobWVtY2cpO1xuNDIyMzpcdFx0X19tZW1fY2dyb3VwX2ZyZWUobWVtY2cpO1xuNDIyNDpcdH1cbjQyMjU6XHRcbjQyMjY6XHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbjQyMjc6XHR7XG40MjI4Olx0XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xuNDIyOTpcdFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgxNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBhaW1lZCBhdCBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBtZW1fY2dyb3VwX2FsbG9jYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVzdCBvZiB0aGUgY29kZSByZWxhdGVkIHRvIGBtZW1fY2dyb3VwX2FsbG9jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIGNvZGUgaXMgZG9pbmcsIGJleW9uZCBqdXN0IHRoZSBiYXNpY3MuIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBoaWdoLWxldmVsIGNvbmNlcHQsIHRoZSAmIzM0O3doYXQmIzM0OyBvZiBtZW1vcnkgY2dyb3VwcywgYW5kIGl0cyBhYmlsaXR5IHRvIGxpbWl0IGFuZCBtb25pdG9yIG1lbW9yeSB1c2FnZS4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiAqaG93KiB0aGlzIGFsbG9jYXRpb24gb2NjdXJzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3I6CgoqICAgSG93IGlzIHRoZSBhbGxvY2F0aW9uIHNpemUgZGV0ZXJtaW5lZD8gSXMgaXQgYSBzdGF0aWMgdmFsdWUsIG9yIGR5bmFtaWNhbGx5IGNvbXB1dGVkIGJhc2VkIG9uIHZhcmlvdXMgZmFjdG9ycz8gV2hhdCBhcmUgdGhlIGZhY3RvcnM/CiogICBXaGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgZW1wbG95ZWQ/IEFyZSB0aGVyZSBjb250ZW50aW9uIHBvaW50cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGVhZGxvY2tzPwoqICAgSG93IGRvZXMgdGhlIGNvZGUgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgKGUuZy4sIHBhZ2UgYWxsb2NhdG9yLCBzbGFiIGFsbG9jYXRvcik/CiogICBXaGF0IGVycm9yIGhhbmRsaW5nIGlzIHByZXNlbnQ/IEFyZSB0aGVyZSBncmFjZWZ1bCBkZWdyYWRhdGlvbiBwYXRocywgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBmb3Igb3V0LW9mLW1lbW9yeSBzY2VuYXJpb3M/CiogICBIb3cgaXMgdGhlIGFsbG9jYXRpb24gYWNjb3VudGVkIGZvciB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHk/IEFyZSB0aGVyZSBwZXItY2dyb3VwIHN0YXRpc3RpY3MgdXBkYXRlZD8gV2hhdCBhYm91dCBuZXN0ZWQgY2dyb3Vwcz8KKiAgIEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBvciB0cmFkZS1vZmZzIGJlaW5nIG1hZGU/IFBlcmhhcHMgdGhlcmUgaXMgc29tZSBvdmVyLWFsbG9jYXRpb24gZm9yIHBlcmZvcm1hbmNlLgoqICAgQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzY2VuYXJpb3MgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBoYW5kbGUsIGxpa2UgTlVNQSBzeXN0ZW1zPwoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBjb250cm9sIGZsb3cgYnJhbmNoZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzZXMuIEkmIzM5O2xsIGJlIG1lbnRhbGx5IHNpbXVsYXRpbmcgdGhlIGV4ZWN1dGlvbiwgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgaG93IGBtZW1fY2dyb3VwX2FsbG9jYCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGVzc2VudGlhbCB0byBnYWluIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IGlzIGJlaW5nIGFsbG9jYXRlZCBpbiBhIGNncm91cCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDIzMDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDIzMTpcdFx0aW50IG5vZGUsIGNwdTtcbjQyMzI6XHRcdGludCBfX21heWJlX3VudXNlZCBpO1xuNDIzMzpcdFx0bG9uZyBlcnJvcjtcbjQyMzQ6XHRcbjQyMzU6XHRcdG1lbWNnID0ga21lbV9jYWNoZV96YWxsb2MobWVtY2dfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbjQyMzY6XHRcdGlmICghbWVtY2cpXG40MjM3Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuNDIzODpcdFxuNDIzOTpcdFx0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5pZCwgTlVMTCxcbjQyNDA6XHRcdFx0XHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbjQyNDE6XHRcdGlmIChlcnJvcilcbjQyNDI6XHRcdFx0Z290byBmYWlsO1xuNDI0MzpcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuNDI0NDpcdFxuNDI0NTpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDI0NjpcdFx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzKVxuNDI0NzpcdFx0XHRnb3RvIGZhaWw7XG40MjQ4Olx0XG40MjQ5Olx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxuNDI1MDpcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDI1MTpcdFx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSlcbjQyNTI6XHRcdFx0Z290byBmYWlsO1xuNDI1MzpcdFxuNDI1NDpcdFx0aWYgKCFtZW1jZzFfYWxsb2NfZXZlbnRzKG1lbWNnKSlcbjQyNTU6XHRcdFx0Z290byBmYWlsO1xuNDI1NjpcdFxuNDI1NzpcdFx0cHN0YXRjX3BjcHUgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0c19wZXJjcHUgOiBOVUxMO1xuNDI1ODpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuNDI1OTpcdFx0XHRzdGF0YyA9IHBlcl9jcHVfcHRyKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xuNDI2MDpcdFx0XHRzdGF0Yy1cdTAwM2VwYXJlbnRfcGNwdSA9IHBzdGF0Y19wY3B1O1xuNDI2MTpcdFx0XHRzdGF0Yy1cdTAwM2V2bXN0YXRzID0gbWVtY2ctXHUwMDNldm1zdGF0cztcbjQyNjI6XHRcdH1cbjQyNjM6XHRcbjQyNjQ6XHRcdGZvcl9lYWNoX25vZGUobm9kZSlcbjQyNjU6XHRcdFx0aWYgKCFhbGxvY19tZW1fY2dyb3VwX3Blcl9ub2RlX2luZm8obWVtY2csIG5vZGUpKVxuNDI2NjpcdFx0XHRcdGdvdG8gZmFpbDtcbjQyNjc6XHRcbjQyNjg6XHRcdGlmIChtZW1jZ193Yl9kb21haW5faW5pdChtZW1jZywgR0ZQX0tFUk5FTCkpXG40MjY5Olx0XHRcdGdvdG8gZmFpbDtcbjQyNzA6XHRcbjQyNzE6XHRcdElOSVRfV09SSyhcdTAwMjZtZW1jZy1cdTAwM2VoaWdoX3dvcmssIGhpZ2hfd29ya19mdW5jKTtcbjQyNzI6XHRcdHZtcHJlc3N1cmVfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2V2bXByZXNzdXJlKTtcbjQyNzM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9wZWFrcyk7XG40Mjc0Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX3BlYWtzKTtcbjQyNzU6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuNDI3NjpcdFx0bWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlID0gZ2V0X2ppZmZpZXNfNjQoKTtcbjQyNzc6XHQjaWYgQklUU19QRVJfTE9ORyBcdTAwM2MgNjRcbjQyNzg6XHRcdHNlcWxvY2tfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzb2NrZXRfcHJlc3N1cmVfc2VxbG9jayk7XG40Mjc5Olx0I2VuZGlmXG40MjgwOlx0XHRtZW1jZzFfbWVtY2dfaW5pdChtZW1jZyk7XG40MjgxOlx0XHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSAtMTtcbjQyODI6XHQjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbjQyODM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfbGlzdCk7XG40Mjg0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KSB7XG40Mjg1Olx0XHRcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuNDI4NjpcdFxuNDI4NzpcdFx0XHRtZW1jZy1cdTAwM2VjZ3diX2ZybltpXS5kb25lID1cbjQyODg6XHRcdFx0XHRfX1dCX0NPTVBMRVRJT05fSU5JVChcdTAwMjZtZW1jZ19jZ3diX2Zybl93YWl0cSk7XG40Mjg5Olx0XHRcdElOSVRfV09SSyhcdTAwMjZjdHgtXHUwMDNld29yaywgYmRldl9mcm5fZmx1c2hfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkluaXRpYWwgVGhvdWdodHMgb24gTWVtY2cgQWxsb2NhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBtZW1jZ2AgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBzZWVtcyB0byBiZSB0aGF0IGBtZW1jZ2AgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTClgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQ6IGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgYG1lbWNnYCBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBgYmRldl9mcm5gLCBnZXQgemVyby1pbml0aWFsaXplZCBmcm9tIHRoZSBnZXQtZ28uIFRoaXMgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGJlY2F1c2UgaXQgYWZmZWN0cyBob3cgd2UgY2FuIHJlbHkgb24gaW5pdGlhbCB2YWx1ZXMgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFyaXNpbmcgZnJvbSBhIGZpZWxkIG5vdCBiZWluZyBleHBsaWNpdGx5IHNldC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGF0IHRoZSB2ZXJ5IHRvcCBsZXZlbCwgdGhlIHJvb3Qgb2YgdGhlIG1lbWNnIGhpZXJhcmNoeS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlIHJvb3QgYG1lbV9jZ3JvdXBgIGlzIGluaXRpYWxpemVkIHN0YXRpY2FsbHkgZHVyaW5nIGtlcm5lbCBzZXR1cCwgb3IgaWYgaXQgZ29lcyB0aHJvdWdoIHRoZSBgbWVtX2Nncm91cF9hbGxvY2AgcGF0aCBsaWtlIG90aGVyIG1lbWNncy4gR290dGEgYmUgc3VyZSBhYm91dCB0aGUgYmFzZSBjYXNlLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGluaXRpYWxpemF0aW9uIG9mIGByb290X21lbV9jZ3JvdXBgIHNwZWNpZmljYWxseSB0byB2ZXJpZnkgaG93IGl0IGlzIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyb290X21lbV9jZ3JvdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTgzPUVYUE9SVF9TWU1CT0wobWVtb3J5X2NncnBfc3Vic3lzKTtcbm1tL21lbWNvbnRyb2wuYy04NC1cbm1tL21lbWNvbnRyb2wuYzo4NTpzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1fY2dyb3VwIF9fcmVhZF9tb3N0bHk7XG5tbS9tZW1jb250cm9sLmM6ODY6RVhQT1JUX1NZTUJPTChyb290X21lbV9jZ3JvdXApO1xubW0vbWVtY29udHJvbC5jLTg3LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTg9c3RydWN0IHZtcHJlc3N1cmUgKm1lbWNnX3RvX3ZtcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMjAtXHRpZiAoIW1lbWNnKVxubW0vbWVtY29udHJvbC5jOjEyMTpcdFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMTIyLVx0cmV0dXJuIFx1MDAyNm1lbWNnLVx1MDAzZXZtcHJlc3N1cmU7XG4tLVxubW0vbWVtY29udHJvbC5jPTMyMz1FWFBPUlRfU1lNQk9MKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XG4tLVxubW0vbWVtY29udHJvbC5jLTMzMi0gKlxubW0vbWVtY29udHJvbC5jOjMzMzogKiBJZiBtZW1jZyBpcyBib3VuZCB0byBhIHRyYWRpdGlvbmFsIGhpZXJhcmNoeSwgdGhlIGNzcyBvZiByb290X21lbV9jZ3JvdXBcbm1tL21lbWNvbnRyb2wuYy0zMzQtICogaXMgcmV0dXJuZWQuXG4tLVxubW0vbWVtY29udHJvbC5jPTMzNj1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzQwLVx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxubW0vbWVtY29udHJvbC5jOjM0MTpcdFx0cmV0dXJuIFx1MDAyNnJvb3RfbWVtX2Nncm91cC1cdTAwM2Vjc3M7XG5tbS9tZW1jb250cm9sLmMtMzQyLVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNDQtXG5tbS9tZW1jb250cm9sLmM6MzQ1Olx0cmV0dXJuIG1lbWNnID8gXHUwMDI2bWVtY2ctXHUwMDNlY3NzIDogXHUwMDI2cm9vdF9tZW1fY2dyb3VwLVx1MDAzZWNzcztcbm1tL21lbWNvbnRyb2wuYy0zNDYtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz03NzY9dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzgxLVx0aWYgKCFtZW1jZylcbm1tL21lbWNvbnRyb2wuYzo3ODI6XHRcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xubW0vbWVtY29udHJvbC5jLTc4My1cbi0tXG5tbS9tZW1jb250cm9sLmM9Nzk0PXN0YXRpYyB2b2lkIGZsdXNoX21lbWNnX3N0YXRzX2R3b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzk5LVx0ICovXG5tbS9tZW1jb250cm9sLmM6ODAwOlx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHJvb3RfbWVtX2Nncm91cCwgdHJ1ZSk7XG5tbS9tZW1jb250cm9sLmMtODAxLVx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9kZmxfd3EsIFx1MDAyNnN0YXRzX2ZsdXNoX2R3b3JrLCBGTFVTSF9USU1FKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTE1OT1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTE4My1cdFx0aWYgKHVubGlrZWx5KCFtbSkpXG5tbS9tZW1jb250cm9sLmM6MTE4NDpcdFx0XHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xubW0vbWVtY29udHJvbC5jLTExODUtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jLTExOTAtXHRcdGlmICh1bmxpa2VseSghbWVtY2cpKVxubW0vbWVtY29udHJvbC5jOjExOTE6XHRcdFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMTE5Mi1cdH0gd2hpbGUgKCFjc3NfdHJ5Z2V0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcykpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMjI1PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtY29udHJvbC5jLTEyMzItXHRpZiAoIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxubW0vbWVtY29udHJvbC5jOjEyMzM6XHRcdHJldHVybiByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMTIzNC1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTI2MD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9pdGVyKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMjcyLVx0aWYgKCFyb290KVxubW0vbWVtY29udHJvbC5jOjEyNzM6XHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMTI3NC1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTM1Mj12b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTM1NS1cdGlmICghcm9vdClcbm1tL21lbWNvbnRyb2wuYzoxMzU2Olx0XHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xubW0vbWVtY29udHJvbC5jLTEzNTctXHRpZiAocHJldiBcdTAwMjZcdTAwMjYgcHJldiAhPSByb290KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMzc1PXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMoc3RydWN0IG1lbV9jZ3JvdXAgKmRlYWRfbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTEzODctXHQgKiBwYXJlbnRfbWVtX2Nncm91cCgpIGRvZXMgbm90IHdhbGsgYWxsIHRoZSB3YXkgdXAgdG8gdGhlXG5tbS9tZW1jb250cm9sLmM6MTM4ODpcdCAqIGNncm91cCByb290IChyb290X21lbV9jZ3JvdXApLiBTbyB3ZSBoYXZlIHRvIGhhbmRsZVxubW0vbWVtY29udHJvbC5jLTEzODktXHQgKiBkZWFkX21lbWNnIGZyb20gY2dyb3VwIHJvb3Qgc2VwYXJhdGVseS5cbi0tXG5tbS9tZW1jb250cm9sLmMtMTM5MS1cdGlmICghbWVtX2Nncm91cF9pc19yb290KGxhc3QpKVxubW0vbWVtY29udHJvbC5jOjEzOTI6XHRcdF9faW52YWxpZGF0ZV9yZWNsYWltX2l0ZXJhdG9ycyhyb290X21lbV9jZ3JvdXAsXG5tbS9tZW1jb250cm9sLmMtMTM5My1cdFx0XHRcdFx0XHRkZWFkX21lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTk5ND1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMDAzLVx0aWYgKCFvb21fZG9tYWluKVxubW0vbWVtY29udHJvbC5jOjIwMDQ6XHRcdG9vbV9kb21haW4gPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMjAwNS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzA1Mj1fX2Fsd2F5c19pbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmN1cnJlbnRfb2JqX2Nncm91cCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDcyLVx0XHQgKi9cbm1tL21lbWNvbnRyb2wuYzozMDczOlx0XHRyZXR1cm4gb2JqY2cgPyA6IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VvYmpjZywgMSk7XG5tbS9tZW1jb250cm9sLmMtMzA3NC1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmMtMzA3OS1cbm1tL21lbWNvbnRyb2wuYzozMDgwOlx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VvYmpjZywgMSk7XG5tbS9tZW1jb250cm9sLmMtMzA4MS1cbi0tXG5tbS9tZW1jb250cm9sLmMtMzA5NC1cbm1tL21lbWNvbnRyb2wuYzozMDk1Olx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VvYmpjZywgMSk7XG5tbS9tZW1jb250cm9sLmMtMzA5Ni19XG4tLVxubW0vbWVtY29udHJvbC5jPTQzMDM9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNDItI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NDM0MzpcdFx0cm9vdF9tZW1fY2dyb3VwID0gbWVtY2c7XG5tbS9tZW1jb250cm9sLmMtNDM0NC1cdFx0cmV0dXJuIFx1MDAyNm1lbWNnLVx1MDAzZWNzcztcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI3Mz12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tLVxubW0vbWVtY29udHJvbC5jLTUyODItXHRpZiAoIXJvb3QpXG5tbS9tZW1jb250cm9sLmM6NTI4MzpcdFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcbm1tL21lbWNvbnRyb2wuYy01Mjg0LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NzY0PV9fc2V0dXAoXCYjMzQ7Y2dyb3VwLm1lbW9yeT1cJiMzNDssIGNncm91cF9tZW1vcnkpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NzY2LS8qXG5tbS9tZW1jb250cm9sLmM6NTc2NzogKiBNZW1vcnkgY29udHJvbGxlciBpbml0IGJlZm9yZSBjZ3JvdXBfaW5pdCgpIGluaXRpYWxpemUgcm9vdF9tZW1fY2dyb3VwLlxubW0vbWVtY29udHJvbC5jLTU3NjgtICpcbi0tXG5tbS9tZW1jb250cm9sLmM9NjMwMD12b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNjMwNS1cdGlmICghbWVtY2cpXG5tbS9tZW1jb250cm9sLmM6NjMwNjpcdFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtNjMwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENncm91cCBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLiBUaGUgY29kZSBoZXJlIGlzIHByZXR0eSBjbGVhcjsgaXQmIzM5O3MgY2FsbGluZyBgbWVtX2Nncm91cF9hbGxvY2AgZm9yICpldmVyeSogbWVtb3J5IGNncm91cCwgaW5jbHVkaW5nIHRoZSByb290IGNncm91cC4gVGhhdCBtYWtlcyBzZW5zZSwgd2UgbmVlZCB0byBpbml0aWFsaXplIHRoaW5ncyBhdCB0aGUgdG9wLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEl0JiMzOTtzIHRoZSBhbGxvY2F0aW9uIHN0ZXAsIG9idmlvdXNseSwgYnV0IHdoYXQgc3BlY2lmaWNhbGx5IGlzIGdldHRpbmcgYWxsb2NhdGVkIGF0IGVhY2ggbGV2ZWw/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzPyBIb3cgbXVjaCBtZW1vcnkgb3ZlcmhlYWQgYXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyIGNncm91cD8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgbWVtX2Nncm91cF9hbGxvY2Agbm93IHRvIGZ1bGx5IGdyYXNwIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgcm9vdCBjZ3JvdXAgYWxsb2NhdGlvbiBzcGVjaWZpY2FsbHksIGFuZCBob3cgaXQgY2FzY2FkZXMgZG93biB0byB0aGUgcmVzdC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDMwMDpcdH1cbjQzMDE6XHRcbjQzMDI6XHRzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKiBfX3JlZlxuNDMwMzpcdG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuNDMwNDpcdHtcbjQzMDU6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHBhcmVudF9jc3MpO1xuNDMwNjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xuNDMwNzpcdFx0Ym9vbCBtZW1jZ19vbl9kZmwgPSBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpO1xuNDMwODpcdFxuNDMwOTpcdFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpO1xuNDMxMDpcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XG40MzExOlx0XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG40MzEyOlx0XHRpZiAoSVNfRVJSKG1lbWNnKSlcbjQzMTM6XHRcdFx0cmV0dXJuIEVSUl9DQVNUKG1lbWNnKTtcbjQzMTQ6XHRcbjQzMTU6XHRcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuNDMxNjpcdFx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuNDMxNzpcdCNpZmRlZiBDT05GSUdfWlNXQVBcbjQzMTg6XHRcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG40MzE5Olx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG40MzIwOlx0I2VuZGlmXG40MzIxOlx0XHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7XG40MzIyOlx0XHRpZiAocGFyZW50KSB7XG40MzIzOlx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgXHUwMDI2cGFyZW50LVx1MDAzZW1lbW9yeSwgbWVtY2dfb25fZGZsKTtcbjQzMjQ6XHRcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbjQzMjU6XHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXG40MzI2Olx0XHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuNDMyNzpcdFx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG40MzI4Olx0XHRcdG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuNDMyOTpcdFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xuNDMzMDpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNla21lbSwgZmFsc2UpO1xuNDMzMTpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2V0Y3BtZW0sIFx1MDAyNnBhcmVudC1cdTAwM2V0Y3BtZW0sIGZhbHNlKTtcbjQzMzI6XHRcdFx0bWVtY2ctXHUwMDNldGNwbWVtLnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuNDMzMzpcdCNlbmRpZlxuNDMzNDpcdFx0fSBlbHNlIHtcbjQzMzU6XHRcdFx0aW5pdF9tZW1jZ19zdGF0cygpO1xuNDMzNjpcdFx0XHRpbml0X21lbWNnX2V2ZW50cygpO1xuNDMzNzpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIE5VTEwsIHRydWUpO1xuNDMzODpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XG40MzM5Olx0I2lmZGVmIENPTkZJR19NRU1DR19WMVxuNDM0MDpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XG40MzQxOlx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXRjcG1lbSwgTlVMTCwgZmFsc2UpO1xuNDM0MjpcdCNlbmRpZlxuNDM0MzpcdFx0XHRyb290X21lbV9jZ3JvdXAgPSBtZW1jZztcbjQzNDQ6XHRcdFx0cmV0dXJuIFx1MDAyNm1lbWNnLVx1MDAzZWNzcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MjEKCQkJCQkJCW91dHB1dDogMzIwCgkJCQkJCQl0aG91Z2h0czogMTcxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBvYnZpb3VzIEtNU0FOLXJlbGV2YW50IGlzc3VlcywgYnV0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIEZpcnN0LCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byByZWZpbmUgdGhlIHRyYWNraW5nIG9mIGZvcmVpZ24gZGlydHkgd3JpdGViYWNrcyByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcywgaW1wbGVtZW50aW5nIGEgcGVyLW1lbWNnIGJsb2NrIGRldmljZSBmbHVzaCB0cmFja2luZyBtZWNoYW5pc20gKGBiZGV2X2Zybl9mbHVzaF9jdHhgKSBhbmQgYXN5bmNocm9ub3VzIGZsdXNoIHdvcmsgKGBiZGV2X2ZsdXNoX2J5X2RldmApLiBUaGlzIHNob3VsZCBpbXByb3ZlIGVmZmljaWVuY3kgYnkgYXZvaWRpbmcgdGhlIGZsdXNoaW5nIG9mIHVucmVsYXRlZCB3cml0ZWJhY2tzLCBhbmQgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgbWVhbnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyBwYXR0ZXJucy4KCk5vdywgcnVubmluZyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIE51bWJlciBvbmUsIGFyZSB3ZSBzZW5kaW5nIGFueXRoaW5nIG5ldyB0byB1c2VyIHNwYWNlPyBOb3BlLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQsIGVpdGhlciB2aWEgc3lzdGVtIGNhbGxzLCBpb2N0bHMsIG9yIGFueXRoaW5nIGVsc2UuIFRoZSB0cmFjZXBvaW50cyBhcmUganVzdCByZWNvcmRpbmcgZXhpc3Rpbmcga2VybmVsIGRhdGEsIGFuZCB0aGUgc2NhbGFyIGBkZXZfdGAgaXMgcGFzc2VkIGJ5IHZhbHVlLiBTbywgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSBpbnRvIHRoZSB1c2VyIHNwYWNlLgoKTmV4dCwgYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZz8gSSYjMzk7bSBjaGVja2luZyB0aGUgY3J1Y2lhbCBjb25kaXRpb25zOiBgbWVtY2ctJmd0O2JkZXZfZnJuW2ldLmRldiA9PSBkZXZgIGFuZCBgY3R4LSZndDtpbmZsaWdodGAsIHdoaWNoIGJvdGggbG9vayBzYWZlIGdpdmVuIGBrbWVtX2NhY2hlX3phbGxvY2AgZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uLiBBbHNvLCBgYmRldl9mbHVzaF9ieV9kZXZgIGxvb2tzIG9rYXkg4oCTIHRoZSBgYmRldmAgcG9pbnRlciBpcyBhc3NpZ25lZCBmcm9tIGBibGtkZXZfZ2V0X25vX29wZW5gIGFuZCBjaGVja2VkLiBUaGUgc2xvdyBwYXRoIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgIGluaXRpYWxpemVzIHRoZSBgYmRldl9pbm9kZWAgYmVmb3JlIGl0cyB1c2UuIFRoZSBgYmRldl9mcm5fZmx1c2hfd29ya2AgY29udGV4dCBgY3R4YCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkLiBTbywgbm8gb2J2aW91cyBpc3N1ZXMgdGhlcmUuCgpUaGlyZCwgd2hhdCBhYm91dCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyBUaGUgYGJkZXZfZnJuYCBzdHJ1Y3R1cmUgaXMgZW1iZWRkZWQgaW5zaWRlIHRoZSBgbWVtX2Nncm91cGAsIHdoaWNoIGlzIHplcm9lZCBvdXQgYnkgYGttZW1fY2FjaGVfemFsbG9jYCwgZm9sbG93ZWQgYnkgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uIFRoZSBgYmRldl9mcm5fZmx1c2hfY3R4YCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQsIHRvby4gVGhlcmVmb3JlLCBuby4gTm8gcmlza3MuCgpGaW5hbGx5LCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVjayBpc3N1ZXMsIGxlbmd0aCBpc3N1ZXMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm9wZS4gV2UmIzM5O3JlIGdvb2QuCgpHaXZlbiB0aGF0LCB3aGF0ICpjb3VsZCogZ28gd3Jvbmc/IExldCYjMzk7cyBjb25zaWRlciB0aGUgdXN1YWwgc3VzcGVjdHMuIExvY2tpbmcgaXMgYSBjb25jZXJuLCBzcGVjaWZpY2FsbHkgYGZybl9sb2NrYCBzcGlubG9jayB2cy4gSVJRIGNvbnRleHQsIGFuZCBkZWFkbG9ja3MgcmVsYXRlZCB0byBgbWFwcGluZy0mZ3Q7aV9wYWdlc2Agb3IgdGhlIGBvcGVuX211dGV4YC4gVGhlcmUgaXMgYWxzbyB0aGUgcG90ZW50aWFsIGZvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIG9yIFVBRiBidWdzIHdpdGggYGJkZXYtJmd0O2JkX2Rpc2tgIG9yIHRoZSBwYWlyZWQgYGJsa2Rldl9nZXRfbm9fb3BlbmAgLyBgYmxrZGV2X3B1dF9ub19vcGVuYCBjYWxscy4gRmluYWxseSwgcmFjZSBjb25kaXRpb25zIGFyZSBhIHBvc3NpYmlsaXR5LCB3aGljaCBpcyB0aGUgbmF0dXJlIG9mIGFzeW5jaHJvbm91cyB3b3JrLgoKSG93ZXZlciwgbm9uZSBvZiB0aG9zZSBhcmUgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiBidWdzIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBLQVNBTiwgTG9ja2RlcCwgYW5kIGdlbmVyYWwga2VybmVsIHRlc3Rpbmcgc2hvdWxkIGhhbmRsZSB0aGUgZXhwZWN0ZWQgaXNzdWVzLiBLQVNBTiB3aWxsIGRldGVjdCBVQUZzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIExvY2tkZXAgY2F0Y2hlcyBsb2NrIGludmVyc2lvbiBpc3N1ZXMuCgpMZXQmIzM5O3MgZG8gb25lIGxhc3QgZG91YmxlLWNoZWNrIG9mIHRoYXQgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgc3RydWN0dXJlLiBJdCYjMzk7cyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHRoZW4gYElOSVRfV09SS2AgaXMgY2FsbGVkIGFuZCBgbWVtY2dgIGlzIGFzc2lnbmVkLiBUaGUgYGRldmAgZmllbGQgaXMgemVybywgYW5kIGBpbmZsaWdodGAgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UuIEV4Y2VsbGVudC4gRXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRyYWNlcG9pbnRzIGFyZSBwYXNzaW5nIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcGFyYW1ldGVycy4KClRoZXJlZm9yZSwgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgS01TQU4gaXMgbm90IHJlcXVpcmVkIGhlcmUuIFRoaXMgcGF0Y2ggaGFzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGZvY3VzZWQgcGF0Y2gsIGFuZCB0aGF0JiMzOTtzIGNvdmVyZWQgYnkgb3RoZXIgdGVzdGluZyB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtY2cgZGlydHkgcGFnZSB0cmFja2luZyBhbmQgd3JpdGViYWNrIGZvciBibG9jayBkZXZpY2UgcGFnZSBjYWNoZXMgYnkgYWRkaW5nIGBiZGV2X2Zybl9mbHVzaF9jdHhgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHRyYWNraW5nIGRpcnR5aW5nIG9mIGJsb2NrIGRldmljZSBpbm9kZXMsIGFuZCBmbHVzaGluZyB0aGVtIHZpYSBkZWRpY2F0ZWQgYXN5bmNocm9ub3VzIHdvcmsgKGBiZGV2X2ZsdXNoX2J5X2RldmApLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlICh2aWEgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBldGMuKS5cbjIuIERhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eGAgaW5zdGFuY2VzIGFyZSBlbWJlZGRlZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiksIGFuZCBgSU5JVF9XT1JLKClgIC8gYGN0eC1cdTAwM2VtZW1jZ2AgYXJlIGV4cGxpY2l0bHkgc2V0IGR1cmluZyBgbWVtX2Nncm91cF9hbGxvYygpYC5cbjMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHNjYWxhciBhcmd1bWVudHMgKHN1Y2ggYXMgYGRldl90IGRldmAgaW4gdHJhY2Vwb2ludHMgYW5kIGhlbHBlciBmdW5jdGlvbnMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBldmFsdWF0aW9uLlxuNC4gVGhlIHByaW1hcnkgcmlza3Mgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGxvY2sgb3JkZXJpbmcgKGBmcm5fbG9ja2AgbmVzdGluZywgSVJRIGRpc2FibGVtZW50LCBhbmQgYG9wZW5fbXV0ZXhgIHRyeWxvY2spIGFuZCBibG9jayBkZXZpY2UgcmVmZXJlbmNlIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGRlYnVnIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIGRpcnR5IHBhZ2UgdHJhY2tpbmcgYW5kIHdyaXRlYmFjayBmb3IgYmxvY2sgZGV2aWNlIHBhZ2UgY2FjaGVzIGJ5IGFkZGluZyBgYmRldl9mcm5fZmx1c2hfY3R4YCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB0cmFja2luZyBkaXJ0eWluZyBvZiBibG9jayBkZXZpY2UgaW5vZGVzLCBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgZGVkaWNhdGVkIGFzeW5jaHJvbm91cyB3b3JrIChgYmRldl9mbHVzaF9ieV9kZXZgKS5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikuXG4yLiBEYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjogYHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHhgIGluc3RhbmNlcyBhcmUgZW1iZWRkZWQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgKGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24pLCBhbmQgYElOSVRfV09SSygpYCAvIGBjdHgtXHUwMDNlbWVtY2dgIGFyZSBleHBsaWNpdGx5IHNldCBkdXJpbmcgYG1lbV9jZ3JvdXBfYWxsb2MoKWAuXG4zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzY2FsYXIgYXJndW1lbnRzIChzdWNoIGFzIGBkZXZfdCBkZXZgIGluIHRyYWNlcG9pbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgZXZhbHVhdGlvbi5cbjQuIFRoZSBwcmltYXJ5IHJpc2tzIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBsb2NrIG9yZGVyaW5nIChgZnJuX2xvY2tgIG5lc3RpbmcsIElSUSBkaXNhYmxlbWVudCwgYW5kIGBvcGVuX211dGV4YCB0cnlsb2NrKSBhbmQgYmxvY2sgZGV2aWNlIHJlZmVyZW5jZSBsaWZldGltZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM2OjM2LjI1NDYzODM1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzMxMjM1ODQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkNHUk9VUF9XUklURUJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZGV2X2ZsdXNoX2J5X2RldlwiLFxuICAgIFwiYmRldl9mcm5fZmx1c2hfd29ya1wiLFxuICAgIFwibWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZcIixcbiAgICBcIm1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aFwiLFxuICAgIFwibWVtX2Nncm91cF9mbHVzaF9mb3JlaWduXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBkaXJ0eSBwYWdlIHRyYWNraW5nIGFuZCB3cml0ZWJhY2sgZm9yIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcyBieSBhZGRpbmcgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgdHJhY2tpbmcgZGlydHlpbmcgb2YgYmxvY2sgZGV2aWNlIGlub2RlcywgYW5kIGZsdXNoaW5nIHRoZW0gdmlhIGRlZGljYXRlZCBhc3luY2hyb25vdXMgd29yayAoYGJkZXZfZmx1c2hfYnlfZGV2YCkuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pLlxcbjIuIERhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eGAgaW5zdGFuY2VzIGFyZSBlbWJlZGRlZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiksIGFuZCBgSU5JVF9XT1JLKClgIC8gYGN0eC1cXHUwMDNlbWVtY2dgIGFyZSBleHBsaWNpdGx5IHNldCBkdXJpbmcgYG1lbV9jZ3JvdXBfYWxsb2MoKWAuXFxuMy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc2NhbGFyIGFyZ3VtZW50cyAoc3VjaCBhcyBgZGV2X3QgZGV2YCBpbiB0cmFjZXBvaW50cyBhbmQgaGVscGVyIGZ1bmN0aW9ucykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGV2YWx1YXRpb24uXFxuNC4gVGhlIHByaW1hcnkgcmlza3Mgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGxvY2sgb3JkZXJpbmcgKGBmcm5fbG9ja2AgbmVzdGluZywgSVJRIGRpc2FibGVtZW50LCBhbmQgYG9wZW5fbXV0ZXhgIHRyeWxvY2spIGFuZCBibG9jayBkZXZpY2UgcmVmZXJlbmNlIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGRlYnVnIGNoZWNrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXFx1MDAzZWlfcGFnZXMpLCBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpLCB3b3JrIGl0ZW0gc3luY2hyb25pemF0aW9uIGR1cmluZyBtZW1jZyB0ZWFyZG93biwgYW5kIGRldmljZSBmbHVzaCBoYW5kbGluZyBpbiBiZGV2X2ZsdXNoX2J5X2Rldi4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgYW5kIGxpZmVjeWNsZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6MzY6MzYuMjU0NjQzMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Mzg0MTY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmNmQ4NGIyMjVhYzcyYjA1NGU0OTEyNWI1YzY4MmIzYTI3NDMwN2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTE6MzY6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXFxuaW5kZXggY2Q4MzIzMDgzNzQwNi4uZGExZmM1NjkyNmZkNCAxMDA2NDRcXG4tLS0gYS9ibG9jay9iZGV2LmNcXG4rKysgYi9ibG9jay9iZGV2LmNcXG5AQCAtMjY0LDYgKzI2NCwzMCBAQCBpbnQgc3luY19ibG9ja2Rldl9ub3dhaXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jX2Jsb2NrZGV2X25vd2FpdCk7XFxuIFxcbisvKipcXG4rICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSdzIHBhZ2UgY2FjaGVcXG4rICogQGRldjogdGFyZ2V0IGJsb2NrIGRldmljZSBudW1iZXJcXG4rICpcXG4rICogU2tpcCBjbG9zZWQgZGV2aWNlcyBvciBkZXZpY2VzIHdob3NlIG9wZW5fbXV0ZXggaXMgYnVzeS5cXG4rICogTWF5IHNsZWVwIHdoaWxlIHN1Ym1pdHRpbmcgd3JpdGViYWNrOyBkb2VzIG5vdCB3YWl0IGZvciBhbGwgSS9PIHRvIGNvbXBsZXRlLlxcbisgKi9cXG4rdm9pZCBiZGV2X2ZsdXNoX2J5X2RldihkZXZfdCBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcXG4rXFxuK1xcdGJkZXYgPSBibGtkZXZfZ2V0X25vX29wZW4oZGV2LCBmYWxzZSk7XFxuK1xcdGlmICghYmRldilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogUHJldmVudCB0aGUgZGV2aWNlIGZyb20gY2xvc2luZyBiZXR3ZWVuIHRoZSBjaGVjayBhbmQgd3JpdGViYWNrLiAqL1xcbitcXHRpZiAobXV0ZXhfdHJ5bG9jayhcXHUwMDI2YmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlb3Blbl9tdXRleCkpIHtcXG4rXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZiZGV2LVxcdTAwM2ViZF9vcGVuZXJzKSlcXG4rXFx0XFx0XFx0c3luY19ibG9ja2Rldl9ub3dhaXQoYmRldik7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcdH1cXG4rXFx0YmxrZGV2X3B1dF9ub19vcGVuKGJkZXYpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2tcXG4gICogZGV2aWNlIHZpYSBpdHMgbWFwcGluZy4gIERvZXMgbm90IHRha2UgdGhlIHN1cGVyYmxvY2sgbG9jay5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTE3MTAsNiArMTcxMCw3IEBAIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xcbiBpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcXG4gaW50IHN5bmNfYmxvY2tkZXZfcmFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpO1xcbiBpbnQgc3luY19ibG9ja2Rldl9ub3dhaXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XFxuK3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KTtcXG4gdm9pZCBzeW5jX2JkZXZzKGJvb2wgd2FpdCk7XFxuIHZvaWQgYmRldl9zdGF0eChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrKTtcXG4gdm9pZCBwcmludGtfYWxsX3BhcnRpdGlvbnModm9pZCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li5kNDRkM2NlNTFiNTBkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTc2LDYgKzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4ge1xcbiBcXHRzdHJ1Y3Qgd2JfY29tcGxldGlvbiBkb25lO1xcdC8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovXFxuIH07XFxuIFxcbisvKlxcbisgKiBmcm5fbG9jayBwcm90ZWN0cyBkZXYgYW5kIGluZmxpZ2h0LlxcbisgKiBObyBleHRyYSBtZW1jZyByZWZlcmVuY2UgaXMgdGFrZW46IHRoaXMgd29yayBpcyBlbWJlZGRlZCBpbiB0aGUgbWVtY2csXFxuKyAqIGFuZCBtZW1fY2dyb3VwX2Nzc19mcmVlKCkgd2FpdHMgZm9yIGl0IHRvIGZpbmlzaCBiZWZvcmUgZnJlZWluZyB0aGUgbWVtY2cuXFxuKyAqL1xcbitzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IHtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuK1xcdGRldl90IGRldjtcXG4rXFx0Ym9vbCBpbmZsaWdodDtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbit9O1xcbitcXG4gLypcXG4gICogQnVja2V0IGZvciBhcmJpdHJhcmlseSBieXRlLXNpemVkIG9iamVjdHMgY2hhcmdlZCB0byBhIG1lbW9yeVxcbiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cFxcbkBAIC0yNzksNiArMjkxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4gXFx0c3RydWN0IHdiX2RvbWFpbiBjZ3diX2RvbWFpbjtcXG4gXFx0c3RydWN0IG1lbWNnX2Nnd2JfZnJuIGNnd2JfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07XFxuK1xcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggYmRldl9mcm5bTUVNQ0dfQ0dXQl9GUk5fQ05UXTtcXG4rXFx0LyogTmVzdHMgaW5zaWRlIG1hcHBpbmctXFx1MDAzZWlfcGFnZXMuICovXFxuK1xcdHNwaW5sb2NrX3QgZnJuX2xvY2s7XFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXFxuaW5kZXggMTNlZTA3NmNjZDE2Ni4uZmZkMWI4ZGY0MjMxOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXFxuQEAgLTI3Myw5ICsyNzMsOSBAQCBUUkFDRV9FVkVOVChpbm9kZV9zd2l0Y2hfd2JzLFxcbiBcXG4gVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcXG4gXFxuLVxcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksXFxuK1xcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgZGV2X3QgZGV2KSxcXG4gXFxuLVxcdFRQX0FSR1MoZm9saW8sIHdiKSxcXG4rXFx0VFBfQVJHUyhmb2xpbywgd2IsIGRldiksXFxuIFxcbiBcXHRUUF9TVFJVQ1RfX2VudHJ5KFxcbiBcXHRcXHRfX2FycmF5KGNoYXIsXFx0XFx0bmFtZSwgMzIpXFxuQEAgLTI4NCw2ICsyODQsNyBAQCBUUkFDRV9FVkVOVCh0cmFja19mb3JlaWduX2RpcnR5LFxcbiBcXHRcXHRfX2ZpZWxkKHU2NCxcXHRcXHRjZ3JvdXBfaW5vKVxcbiBcXHRcXHRfX2ZpZWxkKHU2NCxcXHRcXHRwYWdlX2Nncm91cF9pbm8pXFxuIFxcdFxcdF9fZmllbGQodW5zaWduZWQgaW50LFxcdG1lbWNnX2lkKVxcbitcXHRcXHRfX2ZpZWxkKGRldl90LFxcdFxcdGRldilcXG4gXFx0KSxcXG4gXFxuIFxcdFRQX2Zhc3RfYXNzaWduKFxcbkBAIC0yOTUsMzQgKzI5NiwzNyBAQCBUUkFDRV9FVkVOVCh0cmFja19mb3JlaWduX2RpcnR5LFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vpbm9cXHRcXHQ9IGlub2RlID8gaW5vZGUtXFx1MDAzZWlfaW5vIDogMDtcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlbWVtY2dfaWRcXHQ9IHdiLVxcdTAwM2VtZW1jZ19jc3MtXFx1MDAzZWlkO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VjZ3JvdXBfaW5vXFx0PSBfX3RyYWNlX3diX2Fzc2lnbl9jZ3JvdXAod2IpO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VkZXZcXHRcXHQ9IGRldjtcXG4gXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlcGFnZV9jZ3JvdXBfaW5vID0gY2dyb3VwX2lubyhmb2xpb19tZW1jZyhmb2xpbyktXFx1MDAzZWNzcy5jZ3JvdXApO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0KSxcXG4gXFxuLVxcdFRQX3ByaW50ayhcXFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcXFwiLFxcbitcXHRUUF9wcmludGsoXFxcImJkaSAlc1slbGx1XTogaW5vPSVsbHUgbWVtY2dfaWQ9JXUgY2dyb3VwX2lubz0lbGx1IHBhZ2VfY2dyb3VwX2lubz0lbGx1IGRldj0ldToldVxcXCIsXFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZW5hbWUsXFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZWJkaV9pZCxcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlaW5vLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZCxcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlY2dyb3VwX2lubyxcXG4tXFx0XFx0X19lbnRyeS1cXHUwMDNlcGFnZV9jZ3JvdXBfaW5vXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lubyxcXG4rXFx0XFx0TUFKT1IoX19lbnRyeS1cXHUwMDNlZGV2KSwgTUlOT1IoX19lbnRyeS1cXHUwMDNlZGV2KVxcbiBcXHQpXFxuICk7XFxuIFxcbiBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLFxcbiBcXG4gXFx0VFBfUFJPVE8oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBpbnQgZnJuX2JkaV9pZCxcXG4tXFx0XFx0IHVuc2lnbmVkIGludCBmcm5fbWVtY2dfaWQpLFxcbitcXHRcXHQgdW5zaWduZWQgaW50IGZybl9tZW1jZ19pZCwgZGV2X3QgZGV2KSxcXG4gXFxuLVxcdFRQX0FSR1Mod2IsIGZybl9iZGlfaWQsIGZybl9tZW1jZ19pZCksXFxuK1xcdFRQX0FSR1Mod2IsIGZybl9iZGlfaWQsIGZybl9tZW1jZ19pZCwgZGV2KSxcXG4gXFxuIFxcdFRQX1NUUlVDVF9fZW50cnkoXFxuIFxcdFxcdF9fYXJyYXkoY2hhcixcXHRcXHRuYW1lLCAzMilcXG4gXFx0XFx0X19maWVsZCh1NjQsXFx0XFx0Y2dyb3VwX2lubylcXG4gXFx0XFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXFx0ZnJuX2JkaV9pZClcXG4gXFx0XFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXFx0ZnJuX21lbWNnX2lkKVxcbitcXHRcXHRfX2ZpZWxkKGRldl90LFxcdFxcdGRldilcXG4gXFx0KSxcXG4gXFxuIFxcdFRQX2Zhc3RfYXNzaWduKFxcbkBAIC0zMzAsMTMgKzMzNCwxNSBAQCBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VjZ3JvdXBfaW5vXFx0PSBfX3RyYWNlX3diX2Fzc2lnbl9jZ3JvdXAod2IpO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vmcm5fYmRpX2lkXFx0PSBmcm5fYmRpX2lkO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vmcm5fbWVtY2dfaWRcXHQ9IGZybl9tZW1jZ19pZDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZGV2XFx0XFx0PSBkZXY7XFxuIFxcdCksXFxuIFxcbi1cXHRUUF9wcmludGsoXFxcImJkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1XFxcIixcXG4rXFx0VFBfcHJpbnRrKFxcXCJiZGkgJXM6IGNncm91cF9pbm89JWxsdSBmcm5fYmRpX2lkPSV1IGZybl9tZW1jZ19pZD0ldSBkZXY9JXU6JXVcXFwiLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VuYW1lLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VjZ3JvdXBfaW5vLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vmcm5fYmRpX2lkLFxcbi1cXHRcXHRfX2VudHJ5LVxcdTAwM2Vmcm5fbWVtY2dfaWRcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZnJuX21lbWNnX2lkLFxcbitcXHRcXHRNQUpPUihfX2VudHJ5LVxcdTAwM2VkZXYpLCBNSU5PUihfX2VudHJ5LVxcdTAwM2VkZXYpXFxuIFxcdClcXG4gKTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjA3ODRmNmU0MGFlY2MgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTM5LDYgKzM5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jsa2Rldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0X3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGltaXRzLmhcXHUwMDNlXFxuQEAgLTEwNCw2ICsxMDUsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1lbWNnX3BuX2NhY2hlcDtcXG4gXFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgX19yb19hZnRlcl9pbml0O1xcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2lzX2R5aW5nKHZvaWQpXFxuQEAgLTM4NDUsNiArMzg0Nyw0MSBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLFxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEJkZXYgaW5vZGVzIGFyZSBjb21tb25seSBzaGFyZWQgYnkgbWFueSBtZW1jZ3MuIEZsdXNoaW5nIHRoZWlyIG93bmVyIHdiXFxuKyAqIGNhbiB3cml0ZSB1bnJlbGF0ZWQgZmlsZSBkYXRhLCBzbyByZWNvcmQgZGV2aWNlIG51bWJlcnMgc2VwYXJhdGVseSBhbmRcXG4rICogZmx1c2ggb25seSB0aGUgYmRldiBtYXBwaW5ncy4gVHJhY2tpbmcgaXMgYmVzdCBlZmZvcnQ6IHJlY29yZCBvbmx5IGRldl90XFxuKyAqIHdpdGhvdXQgaG9sZGluZyBkZXZpY2Ugb3IgaW5vZGUgcmVmZXJlbmNlcywgc28gaXQgbWF5IHJhY2Ugd2l0aCBkZXZpY2VcXG4rICogcmVtb3ZhbCBhbmQgcmUtYWRkaXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGRldl90IGRldilcXG4re1xcbitcXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogX19mb2xpb19tYXJrX2RpcnR5KCkgdGFrZXMgbWFwcGluZy1cXHUwMDNlaV9wYWdlcyB3aXRoIHhhX2xvY2tfaXJxc2F2ZSgpXFxuK1xcdCAqIGJlZm9yZSByZWFjaGluZyB0aGlzIGhlbHBlci4gVXNlIGlycXNhdmUgaGVyZSBhcyB3ZWxsIHNvIGZybl9sb2NrJ3NcXG4rXFx0ICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy5cXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZtZW1jZy1cXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XFxuK1xcdFxcdGlmIChtZW1jZy1cXHUwMDNlYmRldl9mcm5baV0uZGV2ID09IGRldilcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xcbitcXHRcXHRjdHggPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWJkZXZfZnJuW2ldO1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VpbmZsaWdodClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGN0eC1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitvdXQ6XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1lbWNnLVxcdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBGb3JlaWduIGRpcnR5IGZsdXNoaW5nXFxuICAqXFxuQEAgLTM4NzUsMTcgKzM5MTIsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgbG9uZyAqcGZpbGVwYWdlcyxcXG4gICogbW9zdCByZWNlbnQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgYW5kIGluaXRpYXRpbmcgcmVtb3RlIGZsdXNoZXMgb25cXG4gICogdGhlbSB3aGVuIGxvY2FsIHdyaXRlYmFjayBpc24ndCBlbm91Z2ggdG8ga2VlcCB0aGUgbWVtb3J5IGNsZWFuIGVub3VnaC5cXG4gICpcXG4tICogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBzdWNoIG1lY2hhbmlzbS4gIFdoZW4gYSBmb3JlaWduXFxuLSAqIHBhZ2UgLSBhIHBhZ2Ugd2hvc2UgbWVtY2cgYW5kIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbid0IG1hdGNoIC0gaXNcXG4tICogZGlydGllZCwgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KCkgcmVjb3JkcyB0aGUgaW5vZGUgb3duaW5nXFxuLSAqIGJkaV93cml0ZWJhY2sgb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiAgV2hlbiBiYWxhbmNlX2RpcnR5X3BhZ2VzKClcXG4tICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHNcXG4rICogRm9yIG5vbi1iZGV2IGlub2Rlcywgd2hlbiBhIGZvcmVpZ24gcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmRcXG4rICogd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJ3QgbWF0Y2ggLSBpcyBkaXJ0aWVkLFxcbisgKiBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmcgYmRpX3dyaXRlYmFja1xcbisgKiBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpIGRlY2lkZXMgdGhhdCB0aGVcXG4rICogbWVtY2cgbmVlZHMgdG8gc2xlZXAgZHVlIHRvIGhpZ2ggZGlydHkgcmF0aW8sIGl0IGNhbGxzXFxuICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkXFxuICAqIGZvcmVpZ24gYmRpX3dyaXRlYmFja3Mgd2hpY2ggaGF2ZW4ndCBleHBpcmVkLiAgQm90aCB0aGUgbnVtYmVycyBvZlxcbiAgKiByZWNvcmRlZCBiZGlfd3JpdGViYWNrcyBhbmQgY29uY3VycmVudCBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzIGFyZVxcbiAgKiBsaW1pdGVkIHRvIE1FTUNHX0NHV0JfRlJOX0NOVC5cXG4gICpcXG4tICogVGhlIG1lY2hhbmlzbSBvbmx5IHJlbWVtYmVycyBJRHMgYW5kIGRvZXNuJ3QgaG9sZCBhbnkgb2JqZWN0IHJlZmVyZW5jZXMuXFxuKyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbid0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLlxcbiAgKiBBcyBiZWluZyB3cm9uZyBvY2Nhc2lvbmFsbHkgZG9lc24ndCBtYXR0ZXIsIHVwZGF0ZXMgYW5kIGFjY2Vzc2VzIHRvIHRoZVxcbiAgKiByZWNvcmRzIGFyZSBsb2NrbGVzcyBhbmQgcmFjeS5cXG4gICovXFxuQEAgLTM4OTgsOCArMzkzNSwxNyBAQCB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHR1NjQgb2xkZXN0X2F0ID0gbm93O1xcbiBcXHRpbnQgb2xkZXN0ID0gLTE7XFxuIFxcdGludCBpO1xcbitcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmJkZXZfaW5vZGUgPSBtYXBwaW5nID8gbWFwcGluZy1cXHUwMDNlaG9zdCA6IE5VTEw7XFxuK1xcbitcXHRpZiAobWVtY2dfYmRldl9mcm5fZmx1c2hlciBcXHUwMDI2XFx1MDAyNiBiZGV2X2lub2RlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzYl9pc19ibGtkZXZfc2IoYmRldl9pbm9kZS1cXHUwMDNlaV9zYikpIHtcXG4rXFx0XFx0dHJhY2VfdHJhY2tfZm9yZWlnbl9kaXJ0eShmb2xpbywgd2IsIGJkZXZfaW5vZGUtXFx1MDAzZWlfcmRldik7XFxuK1xcdFxcdG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KG1lbWNnLCBiZGV2X2lub2RlLVxcdTAwM2VpX3JkZXYpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuLVxcdHRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiKTtcXG4rXFx0dHJhY2VfdHJhY2tfZm9yZWlnbl9kaXJ0eShmb2xpbywgd2IsIDApO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogUGljayB0aGUgc2xvdCB0byB1c2UuICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2xvdCBmb3IgQHdiLCBrZWVwXFxuQEAgLTM5NDEsNiArMzk4NywyNSBAQCB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGJkZXZfZnJuX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4LCB3b3JrKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGJkZXZfZmx1c2hfYnlfZGV2KGN0eC1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBkaXJ0eSB0cmFja2luZyBwYXRoIHRha2VzIGZybl9sb2NrIHdoaWxlIGhvbGRpbmcgbWFwcGluZy1cXHUwMDNlaV9wYWdlcy5cXG4rXFx0ICogRGlzYWJsZSBsb2NhbCBJUlFzIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggSS9PIGNvbXBsZXRpb25cXG4rXFx0ICogaGFuZGxlcnMgdGhhdCBhbHNvIHRha2UgbWFwcGluZy1cXHUwMDNlaV9wYWdlcy5cXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZW1lbWNnLVxcdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xcbitcXHRjdHgtXFx1MDAzZWluZmxpZ2h0ID0gZmFsc2U7XFxuK1xcdGN0eC1cXHUwMDNlZGV2ID0gMDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2VtZW1jZy1cXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4gLyogaXNzdWUgZm9yZWlnbiB3cml0ZWJhY2sgZmx1c2hlcyBmb3IgcmVjb3JkZWQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgKi9cXG4gdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbiB7XFxuQEAgLTM5NDksNiArNDAxNCwxOSBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuIFxcdHU2NCBub3cgPSBqaWZmaWVzXzY0O1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWJkZXZfZnJuW2ldO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1lbWNnLVxcdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRpZiAoIWN0eC1cXHUwMDNlaW5mbGlnaHQgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VkZXYpIHtcXG4rXFx0XFx0XFx0Y3R4LVxcdTAwM2VpbmZsaWdodCA9IHRydWU7XFxuK1xcdFxcdFxcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIDAsIDAsIGN0eC1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0cXVldWVfd29yayhtZW1jZ19iZGV2X2Zybl9mbHVzaGVyLCBcXHUwMDI2Y3R4LVxcdTAwM2V3b3JrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtZW1jZy1cXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCBtZW1jZ19jZ3diX2ZybiAqZnJuID0gXFx1MDAyNm1lbWNnLVxcdTAwM2VjZ3diX2ZybltpXTtcXG4gXFxuQEAgLTM5NjEsNyArNDAzOSw4IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4gXFx0XFx0aWYgKHRpbWVfYWZ0ZXI2NChmcm4tXFx1MDAzZWF0LCBub3cgLSBpbnR2KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmZybi1cXHUwMDNlZG9uZS5jbnQpID09IDEpIHtcXG4gXFx0XFx0XFx0ZnJuLVxcdTAwM2VhdCA9IDA7XFxuLVxcdFxcdFxcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi1cXHUwMDNlYmRpX2lkLCBmcm4tXFx1MDAzZW1lbWNnX2lkKTtcXG4rXFx0XFx0XFx0dHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgZnJuLVxcdTAwM2ViZGlfaWQsIGZybi1cXHUwMDNlbWVtY2dfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4gXFx0XFx0XFx0Y2dyb3VwX3dyaXRlYmFja19ieV9pZChmcm4tXFx1MDAzZWJkaV9pZCwgZnJuLVxcdTAwM2VtZW1jZ19pZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmZybi1cXHUwMDNlZG9uZSk7XFxuQEAgLTQyMDIsOSArNDI4MSwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0bWVtY2ctXFx1MDAzZWttZW1jZ19pZCA9IC0xO1xcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2VjZ3diX2xpc3QpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWJkZXZfZnJuW2ldO1xcbitcXG4gXFx0XFx0bWVtY2ctXFx1MDAzZWNnd2JfZnJuW2ldLmRvbmUgPVxcbiBcXHRcXHRcXHRfX1dCX0NPTVBMRVRJT05fSU5JVChcXHUwMDI2bWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xcbitcXHRcXHRJTklUX1dPUksoXFx1MDAyNmN0eC1cXHUwMDNld29yaywgYmRldl9mcm5fZmx1c2hfd29yayk7XFxuK1xcdFxcdGN0eC1cXHUwMDNlbWVtY2cgPSBtZW1jZztcXG4rXFx0fVxcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWZybl9sb2NrKTtcXG4gI2VuZGlmXFxuIFxcdGxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7XFxuIFxcdHJldHVybiBtZW1jZztcXG5AQCAtNDM4Niw4ICs0NDcxLDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcXG4gXFx0XFx0d2Jfd2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfZnJuW2ldLmRvbmUpO1xcbitcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZtZW1jZy1cXHUwMDNlYmRldl9mcm5baV0ud29yayk7XFxuK1xcdH1cXG4gI2VuZGlmXFxuIFxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxcbiBcXHRcXHRzdGF0aWNfYnJhbmNoX2RlYyhcXHUwMDI2bWVtY2dfc29ja2V0c19lbmFibGVkX2tleSk7XFxuQEAgLTU3MDMsNiArNTc5MCwxMiBAQCBpbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbiBcXHRtZW1jZ193cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwibWVtY2dcXFwiLCBXUV9QRVJDUFUsIDApO1xcbiBcXHRXQVJOX09OKCFtZW1jZ193cSk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4rXFx0bWVtY2dfYmRldl9mcm5fZmx1c2hlciA9IGFsbG9jX3dvcmtxdWV1ZShcXFwibWVtY2dfYmRldl9mcm5fZmx1c2hlclxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDApO1xcbitcXHRXQVJOX09OKCFtZW1jZ19iZGV2X2Zybl9mbHVzaGVyKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIFxcdFxcdElOSVRfV09SSyhcXHUwMDI2cGVyX2NwdV9wdHIoXFx1MDAyNm1lbWNnX3N0b2NrLCBjcHUpLVxcdTAwM2V3b3JrLFxcbiBcXHRcXHRcXHQgIGRyYWluX2xvY2FsX21lbWNnX3N0b2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6MzY6MzYuNzEwMDM0OTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTE3MTQ0MjkyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmRldl9mbHVzaF9ieV9kZXZcIixcbiAgICBcImJkZXZfZnJuX2ZsdXNoX3dvcmtcIixcbiAgICBcIm1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2XCIsXG4gICAgXCJtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhcIixcbiAgICBcIm1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXFx1MDAzZWlfcGFnZXMpLCBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpLCB3b3JrIGl0ZW0gc3luY2hyb25pemF0aW9uIGR1cmluZyBtZW1jZyB0ZWFyZG93biwgYW5kIGRldmljZSBmbHVzaCBoYW5kbGluZyBpbiBiZGV2X2ZsdXNoX2J5X2Rldi4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgYW5kIGxpZmVjeWNsZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZjZkODRiMjI1YWM3MmIwNTRlNDkxMjViNWM2ODJiM2EyNzQzMDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTE6MzY6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmNcbmluZGV4IGNkODMyMzA4Mzc0MDYuLmRhMWZjNTY5MjZmZDQgMTAwNjQ0XG4tLS0gYS9ibG9jay9iZGV2LmNcbisrKyBiL2Jsb2NrL2JkZXYuY1xuQEAgLTI2NCw2ICsyNjQsMzAgQEAgaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNfYmxvY2tkZXZfbm93YWl0KTtcbiBcbisvKipcbisgKiBiZGV2X2ZsdXNoX2J5X2RldiAtIGF0dGVtcHQgd3JpdGViYWNrIG9mIGEgYmxvY2sgZGV2aWNlJ3MgcGFnZSBjYWNoZVxuKyAqIEBkZXY6IHRhcmdldCBibG9jayBkZXZpY2UgbnVtYmVyXG4rICpcbisgKiBTa2lwIGNsb3NlZCBkZXZpY2VzIG9yIGRldmljZXMgd2hvc2Ugb3Blbl9tdXRleCBpcyBidXN5LlxuKyAqIE1heSBzbGVlcCB3aGlsZSBzdWJtaXR0aW5nIHdyaXRlYmFjazsgZG9lcyBub3Qgd2FpdCBmb3IgYWxsIEkvTyB0byBjb21wbGV0ZS5cbisgKi9cbit2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldilcbit7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xuK1xuK1x0YmRldiA9IGJsa2Rldl9nZXRfbm9fb3BlbihkZXYsIGZhbHNlKTtcbitcdGlmICghYmRldilcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogUHJldmVudCB0aGUgZGV2aWNlIGZyb20gY2xvc2luZyBiZXR3ZWVuIHRoZSBjaGVjayBhbmQgd3JpdGViYWNrLiAqL1xuK1x0aWYgKG11dGV4X3RyeWxvY2soXHUwMDI2YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpKSB7XG4rXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZiZGV2LVx1MDAzZWJkX29wZW5lcnMpKVxuK1x0XHRcdHN5bmNfYmxvY2tkZXZfbm93YWl0KGJkZXYpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0fVxuK1x0YmxrZGV2X3B1dF9ub19vcGVuKGJkZXYpO1xuK31cbitcbiAvKlxuICAqIFdyaXRlIG91dCBhbmQgd2FpdCB1cG9uIGFsbCB0aGUgZGlydHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBibG9ja1xuICAqIGRldmljZSB2aWEgaXRzIG1hcHBpbmcuICBEb2VzIG5vdCB0YWtlIHRoZSBzdXBlcmJsb2NrIGxvY2suXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLjdhNWYzZTJmMTdkNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTcxMCw2ICsxNzEwLDcgQEAgdm9pZCBpbnZhbGlkYXRlX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4gaW50IHN5bmNfYmxvY2tkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4gaW50IHN5bmNfYmxvY2tkZXZfcmFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpO1xuIGludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbit2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldik7XG4gdm9pZCBzeW5jX2JkZXZzKGJvb2wgd2FpdCk7XG4gdm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spO1xuIHZvaWQgcHJpbnRrX2FsbF9wYXJ0aXRpb25zKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLmQ0NGQzY2U1MWI1MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xNzYsNiArMTc2LDE4IEBAIHN0cnVjdCBtZW1jZ19jZ3diX2ZybiB7XG4gXHRzdHJ1Y3Qgd2JfY29tcGxldGlvbiBkb25lO1x0LyogdHJhY2tzIGluLWZsaWdodCBmb3JlaWduIHdyaXRlYmFja3MgKi9cbiB9O1xuIFxuKy8qXG4rICogZnJuX2xvY2sgcHJvdGVjdHMgZGV2IGFuZCBpbmZsaWdodC5cbisgKiBObyBleHRyYSBtZW1jZyByZWZlcmVuY2UgaXMgdGFrZW46IHRoaXMgd29yayBpcyBlbWJlZGRlZCBpbiB0aGUgbWVtY2csXG4rICogYW5kIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoKSB3YWl0cyBmb3IgaXQgdG8gZmluaXNoIGJlZm9yZSBmcmVlaW5nIHRoZSBtZW1jZy5cbisgKi9cbitzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IHtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuK1x0ZGV2X3QgZGV2O1xuK1x0Ym9vbCBpbmZsaWdodDtcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbit9O1xuK1xuIC8qXG4gICogQnVja2V0IGZvciBhcmJpdHJhcmlseSBieXRlLXNpemVkIG9iamVjdHMgY2hhcmdlZCB0byBhIG1lbW9yeVxuICAqIGNncm91cC4gVGhlIGJ1Y2tldCBjYW4gYmUgcmVwYXJlbnRlZCBpbiBvbmUgcGllY2Ugd2hlbiB0aGUgY2dyb3VwXG5AQCAtMjc5LDYgKzI5MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdHN0cnVjdCB3Yl9kb21haW4gY2d3Yl9kb21haW47XG4gXHRzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4gY2d3Yl9mcm5bTUVNQ0dfQ0dXQl9GUk5fQ05UXTtcbitcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggYmRldl9mcm5bTUVNQ0dfQ0dXQl9GUk5fQ05UXTtcbitcdC8qIE5lc3RzIGluc2lkZSBtYXBwaW5nLVx1MDAzZWlfcGFnZXMuICovXG4rXHRzcGlubG9ja190IGZybl9sb2NrO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXG5pbmRleCAxM2VlMDc2Y2NkMTY2Li5mZmQxYjhkZjQyMzE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXG5AQCAtMjczLDkgKzI3Myw5IEBAIFRSQUNFX0VWRU5UKGlub2RlX3N3aXRjaF93YnMsXG4gXG4gVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcbiBcbi1cdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksXG4rXHRUUF9QUk9UTyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIGRldl90IGRldiksXG4gXG4tXHRUUF9BUkdTKGZvbGlvLCB3YiksXG4rXHRUUF9BUkdTKGZvbGlvLCB3YiwgZGV2KSxcbiBcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdF9fYXJyYXkoY2hhcixcdFx0bmFtZSwgMzIpXG5AQCAtMjg0LDYgKzI4NCw3IEBAIFRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4gXHRcdF9fZmllbGQodTY0LFx0XHRjZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHU2NCxcdFx0cGFnZV9jZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcdG1lbWNnX2lkKVxuK1x0XHRfX2ZpZWxkKGRldl90LFx0XHRkZXYpXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtMjk1LDM0ICsyOTYsMzcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcbiBcdFx0X19lbnRyeS1cdTAwM2Vpbm9cdFx0PSBpbm9kZSA/IGlub2RlLVx1MDAzZWlfaW5vIDogMDtcbiBcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZFx0PSB3Yi1cdTAwM2VtZW1jZ19jc3MtXHUwMDNlaWQ7XG4gXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lub1x0PSBfX3RyYWNlX3diX2Fzc2lnbl9jZ3JvdXAod2IpO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWRldlx0XHQ9IGRldjtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVx1MDAzZWNzcy5jZ3JvdXApO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdCksXG4gXG4tXHRUUF9wcmludGsoXCJiZGkgJXNbJWxsdV06IGlubz0lbGx1IG1lbWNnX2lkPSV1IGNncm91cF9pbm89JWxsdSBwYWdlX2Nncm91cF9pbm89JWxsdVwiLFxuK1x0VFBfcHJpbnRrKFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUgZGV2PSV1OiV1XCIsXG4gXHRcdF9fZW50cnktXHUwMDNlbmFtZSxcbiBcdFx0X19lbnRyeS1cdTAwM2ViZGlfaWQsXG4gXHRcdF9fZW50cnktXHUwMDNlaW5vLFxuIFx0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm8sXG4tXHRcdF9fZW50cnktXHUwMDNlcGFnZV9jZ3JvdXBfaW5vXG4rXHRcdF9fZW50cnktXHUwMDNlcGFnZV9jZ3JvdXBfaW5vLFxuK1x0XHRNQUpPUihfX2VudHJ5LVx1MDAzZWRldiksIE1JTk9SKF9fZW50cnktXHUwMDNlZGV2KVxuIFx0KVxuICk7XG4gXG4gVFJBQ0VfRVZFTlQoZmx1c2hfZm9yZWlnbixcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgaW50IGZybl9iZGlfaWQsXG4tXHRcdCB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkKSxcbitcdFx0IHVuc2lnbmVkIGludCBmcm5fbWVtY2dfaWQsIGRldl90IGRldiksXG4gXG4tXHRUUF9BUkdTKHdiLCBmcm5fYmRpX2lkLCBmcm5fbWVtY2dfaWQpLFxuK1x0VFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkLCBkZXYpLFxuIFxuIFx0VFBfU1RSVUNUX19lbnRyeShcbiBcdFx0X19hcnJheShjaGFyLFx0XHRuYW1lLCAzMilcbiBcdFx0X19maWVsZCh1NjQsXHRcdGNncm91cF9pbm8pXG4gXHRcdF9fZmllbGQodW5zaWduZWQgaW50LFx0ZnJuX2JkaV9pZClcbiBcdFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXHRmcm5fbWVtY2dfaWQpXG4rXHRcdF9fZmllbGQoZGV2X3QsXHRcdGRldilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbkBAIC0zMzAsMTMgKzMzNCwxNSBAQCBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm9cdD0gX190cmFjZV93Yl9hc3NpZ25fY2dyb3VwKHdiKTtcbiBcdFx0X19lbnRyeS1cdTAwM2Vmcm5fYmRpX2lkXHQ9IGZybl9iZGlfaWQ7XG4gXHRcdF9fZW50cnktXHUwMDNlZnJuX21lbWNnX2lkXHQ9IGZybl9tZW1jZ19pZDtcbitcdFx0X19lbnRyeS1cdTAwM2VkZXZcdFx0PSBkZXY7XG4gXHQpLFxuIFxuLVx0VFBfcHJpbnRrKFwiYmRpICVzOiBjZ3JvdXBfaW5vPSVsbHUgZnJuX2JkaV9pZD0ldSBmcm5fbWVtY2dfaWQ9JXVcIixcbitcdFRQX3ByaW50ayhcImJkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1IGRldj0ldToldVwiLFxuIFx0XHRfX2VudHJ5LVx1MDAzZW5hbWUsXG4gXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lubyxcbiBcdFx0X19lbnRyeS1cdTAwM2Vmcm5fYmRpX2lkLFxuLVx0XHRfX2VudHJ5LVx1MDAzZWZybl9tZW1jZ19pZFxuK1x0XHRfX2VudHJ5LVx1MDAzZWZybl9tZW1jZ19pZCxcbitcdFx0TUFKT1IoX19lbnRyeS1cdTAwM2VkZXYpLCBNSU5PUihfX2VudHJ5LVx1MDAzZWRldilcbiBcdClcbiApO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMDc4NGY2ZTQwYWVjYyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzksNiArMzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0X3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbkBAIC0xMDQsNiArMTA1LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptZW1jZ19wbl9jYWNoZXA7XG4gXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgX19yb19hZnRlcl9pbml0O1xuICNlbmRpZlxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2lzX2R5aW5nKHZvaWQpXG5AQCAtMzg0NSw2ICszODQ3LDQxIEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXG4gXHR9XG4gfVxuIFxuKy8qXG4rICogQmRldiBpbm9kZXMgYXJlIGNvbW1vbmx5IHNoYXJlZCBieSBtYW55IG1lbWNncy4gRmx1c2hpbmcgdGhlaXIgb3duZXIgd2JcbisgKiBjYW4gd3JpdGUgdW5yZWxhdGVkIGZpbGUgZGF0YSwgc28gcmVjb3JkIGRldmljZSBudW1iZXJzIHNlcGFyYXRlbHkgYW5kXG4rICogZmx1c2ggb25seSB0aGUgYmRldiBtYXBwaW5ncy4gVHJhY2tpbmcgaXMgYmVzdCBlZmZvcnQ6IHJlY29yZCBvbmx5IGRldl90XG4rICogd2l0aG91dCBob2xkaW5nIGRldmljZSBvciBpbm9kZSByZWZlcmVuY2VzLCBzbyBpdCBtYXkgcmFjZSB3aXRoIGRldmljZVxuKyAqIHJlbW92YWwgYW5kIHJlLWFkZGl0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZGV2X3QgZGV2KVxuK3tcbitcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgaTtcbitcbitcdC8qXG4rXHQgKiBfX2ZvbGlvX21hcmtfZGlydHkoKSB0YWtlcyBtYXBwaW5nLVx1MDAzZWlfcGFnZXMgd2l0aCB4YV9sb2NrX2lycXNhdmUoKVxuK1x0ICogYmVmb3JlIHJlYWNoaW5nIHRoaXMgaGVscGVyLiBVc2UgaXJxc2F2ZSBoZXJlIGFzIHdlbGwgc28gZnJuX2xvY2snc1xuK1x0ICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWVtY2ctXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XG4rXHRcdGlmIChtZW1jZy1cdTAwM2ViZGV2X2ZybltpXS5kZXYgPT0gZGV2KVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbitcdFx0Y3R4ID0gXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV07XG4rXHRcdGlmIChjdHgtXHUwMDNlaW5mbGlnaHQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGN0eC1cdTAwM2VkZXYgPSBkZXY7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK291dDpcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWVtY2ctXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4gLypcbiAgKiBGb3JlaWduIGRpcnR5IGZsdXNoaW5nXG4gICpcbkBAIC0zODc1LDE3ICszOTEyLDE3IEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXG4gICogbW9zdCByZWNlbnQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgYW5kIGluaXRpYXRpbmcgcmVtb3RlIGZsdXNoZXMgb25cbiAgKiB0aGVtIHdoZW4gbG9jYWwgd3JpdGViYWNrIGlzbid0IGVub3VnaCB0byBrZWVwIHRoZSBtZW1vcnkgY2xlYW4gZW5vdWdoLlxuICAqXG4tICogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBzdWNoIG1lY2hhbmlzbS4gIFdoZW4gYSBmb3JlaWduXG4tICogcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmQgd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJ3QgbWF0Y2ggLSBpc1xuLSAqIGRpcnRpZWQsIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZ1xuLSAqIGJkaV93cml0ZWJhY2sgb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiAgV2hlbiBiYWxhbmNlX2RpcnR5X3BhZ2VzKClcbi0gKiBkZWNpZGVzIHRoYXQgdGhlIG1lbWNnIG5lZWRzIHRvIHNsZWVwIGR1ZSB0byBoaWdoIGRpcnR5IHJhdGlvLCBpdCBjYWxsc1xuKyAqIEZvciBub24tYmRldiBpbm9kZXMsIHdoZW4gYSBmb3JlaWduIHBhZ2UgLSBhIHBhZ2Ugd2hvc2UgbWVtY2cgYW5kXG4rICogd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJ3QgbWF0Y2ggLSBpcyBkaXJ0aWVkLFxuKyAqIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZyBiZGlfd3JpdGViYWNrXG4rICogb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKSBkZWNpZGVzIHRoYXQgdGhlXG4rICogbWVtY2cgbmVlZHMgdG8gc2xlZXAgZHVlIHRvIGhpZ2ggZGlydHkgcmF0aW8sIGl0IGNhbGxzXG4gICogbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKCkgd2hpY2ggcXVldWVzIHdyaXRlYmFjayBvbiB0aGUgcmVjb3JkZWRcbiAgKiBmb3JlaWduIGJkaV93cml0ZWJhY2tzIHdoaWNoIGhhdmVuJ3QgZXhwaXJlZC4gIEJvdGggdGhlIG51bWJlcnMgb2ZcbiAgKiByZWNvcmRlZCBiZGlfd3JpdGViYWNrcyBhbmQgY29uY3VycmVudCBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzIGFyZVxuICAqIGxpbWl0ZWQgdG8gTUVNQ0dfQ0dXQl9GUk5fQ05ULlxuICAqXG4tICogVGhlIG1lY2hhbmlzbSBvbmx5IHJlbWVtYmVycyBJRHMgYW5kIGRvZXNuJ3QgaG9sZCBhbnkgb2JqZWN0IHJlZmVyZW5jZXMuXG4rICogVGhlc2Ugd2IgcmVjb3JkcyBvbmx5IHJlbWVtYmVyIElEcyBhbmQgZG9uJ3QgaG9sZCBhbnkgb2JqZWN0IHJlZmVyZW5jZXMuXG4gICogQXMgYmVpbmcgd3Jvbmcgb2NjYXNpb25hbGx5IGRvZXNuJ3QgbWF0dGVyLCB1cGRhdGVzIGFuZCBhY2Nlc3NlcyB0byB0aGVcbiAgKiByZWNvcmRzIGFyZSBsb2NrbGVzcyBhbmQgcmFjeS5cbiAgKi9cbkBAIC0zODk4LDggKzM5MzUsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHU2NCBvbGRlc3RfYXQgPSBub3c7XG4gXHRpbnQgb2xkZXN0ID0gLTE7XG4gXHRpbnQgaTtcbitcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7XG4rXHRzdHJ1Y3QgaW5vZGUgKmJkZXZfaW5vZGUgPSBtYXBwaW5nID8gbWFwcGluZy1cdTAwM2Vob3N0IDogTlVMTDtcbitcbitcdGlmIChtZW1jZ19iZGV2X2Zybl9mbHVzaGVyIFx1MDAyNlx1MDAyNiBiZGV2X2lub2RlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNiX2lzX2Jsa2Rldl9zYihiZGV2X2lub2RlLVx1MDAzZWlfc2IpKSB7XG4rXHRcdHRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiLCBiZGV2X2lub2RlLVx1MDAzZWlfcmRldik7XG4rXHRcdG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KG1lbWNnLCBiZGV2X2lub2RlLVx1MDAzZWlfcmRldik7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbi1cdHRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiKTtcbitcdHRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiLCAwKTtcbiBcbiBcdC8qXG4gXHQgKiBQaWNrIHRoZSBzbG90IHRvIHVzZS4gIElmIHRoZXJlIGlzIGFscmVhZHkgYSBzbG90IGZvciBAd2IsIGtlZXBcbkBAIC0zOTQxLDYgKzM5ODcsMjUgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHgsIHdvcmspO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdGJkZXZfZmx1c2hfYnlfZGV2KGN0eC1cdTAwM2VkZXYpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBkaXJ0eSB0cmFja2luZyBwYXRoIHRha2VzIGZybl9sb2NrIHdoaWxlIGhvbGRpbmcgbWFwcGluZy1cdTAwM2VpX3BhZ2VzLlxuK1x0ICogRGlzYWJsZSBsb2NhbCBJUlFzIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggSS9PIGNvbXBsZXRpb25cbitcdCAqIGhhbmRsZXJzIHRoYXQgYWxzbyB0YWtlIG1hcHBpbmctXHUwMDNlaV9wYWdlcy5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZW1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rXHRjdHgtXHUwMDNlaW5mbGlnaHQgPSBmYWxzZTtcbitcdGN0eC1cdTAwM2VkZXYgPSAwO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbWVtY2ctXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4gLyogaXNzdWUgZm9yZWlnbiB3cml0ZWJhY2sgZmx1c2hlcyBmb3IgcmVjb3JkZWQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgKi9cbiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4ge1xuQEAgLTM5NDksNiArNDAxNCwxOSBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4gXHR1NjQgbm93ID0gamlmZmllc182NDtcbiBcdGludCBpO1xuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbitcdFx0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV07XG4rXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rXHRcdGlmICghY3R4LVx1MDAzZWluZmxpZ2h0IFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZGV2KSB7XG4rXHRcdFx0Y3R4LVx1MDAzZWluZmxpZ2h0ID0gdHJ1ZTtcbitcdFx0XHR0cmFjZV9mbHVzaF9mb3JlaWduKHdiLCAwLCAwLCBjdHgtXHUwMDNlZGV2KTtcbitcdFx0XHRxdWV1ZV93b3JrKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIsIFx1MDAyNmN0eC1cdTAwM2V3b3JrKTtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rXHR9XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xuIFx0XHRzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4gKmZybiA9IFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldO1xuIFxuQEAgLTM5NjEsNyArNDAzOSw4IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcbiBcdFx0aWYgKHRpbWVfYWZ0ZXI2NChmcm4tXHUwMDNlYXQsIG5vdyAtIGludHYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZnJuLVx1MDAzZWRvbmUuY250KSA9PSAxKSB7XG4gXHRcdFx0ZnJuLVx1MDAzZWF0ID0gMDtcbi1cdFx0XHR0cmFjZV9mbHVzaF9mb3JlaWduKHdiLCBmcm4tXHUwMDNlYmRpX2lkLCBmcm4tXHUwMDNlbWVtY2dfaWQpO1xuK1x0XHRcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCxcbitcdFx0XHRcdFx0ICAgIDApO1xuIFx0XHRcdGNncm91cF93cml0ZWJhY2tfYnlfaWQoZnJuLVx1MDAzZWJkaV9pZCwgZnJuLVx1MDAzZW1lbWNnX2lkLFxuIFx0XHRcdFx0XHQgICAgICAgV0JfUkVBU09OX0ZPUkVJR05fRkxVU0gsXG4gXHRcdFx0XHRcdCAgICAgICBcdTAwMjZmcm4tXHUwMDNlZG9uZSk7XG5AQCAtNDIwMiw5ICs0MjgxLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2xpc3QpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPSBcdTAwMjZtZW1jZy1cdTAwM2ViZGV2X2ZybltpXTtcbitcbiBcdFx0bWVtY2ctXHUwMDNlY2d3Yl9mcm5baV0uZG9uZSA9XG4gXHRcdFx0X19XQl9DT01QTEVUSU9OX0lOSVQoXHUwMDI2bWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xuK1x0XHRJTklUX1dPUksoXHUwMDI2Y3R4LVx1MDAzZXdvcmssIGJkZXZfZnJuX2ZsdXNoX3dvcmspO1xuK1x0XHRjdHgtXHUwMDNlbWVtY2cgPSBtZW1jZztcbitcdH1cbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrKTtcbiAjZW5kaWZcbiBcdGxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7XG4gXHRyZXR1cm4gbWVtY2c7XG5AQCAtNDM4Niw4ICs0NDcxLDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdGludCBfX21heWJlX3VudXNlZCBpO1xuIFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xuIFx0XHR3Yl93YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldLmRvbmUpO1xuK1x0XHRmbHVzaF93b3JrKFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldLndvcmspO1xuK1x0fVxuICNlbmRpZlxuIFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxuIFx0XHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcbkBAIC01NzAzLDYgKzU3OTAsMTIgQEAgaW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbiBcdG1lbWNnX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwibWVtY2dcIiwgV1FfUEVSQ1BVLCAwKTtcbiBcdFdBUk5fT04oIW1lbWNnX3dxKTtcbiBcbisjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbitcdG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgPSBhbGxvY193b3JrcXVldWUoXCJtZW1jZ19iZGV2X2Zybl9mbHVzaGVyXCIsXG4rXHRcdFx0XHRcdCAgICAgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDApO1xuK1x0V0FSTl9PTighbWVtY2dfYmRldl9mcm5fZmx1c2hlcik7XG4rI2VuZGlmXG4rXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZwZXJfY3B1X3B0cihcdTAwMjZtZW1jZ19zdG9jaywgY3B1KS1cdTAwM2V3b3JrLFxuIFx0XHRcdCAgZHJhaW5fbG9jYWxfbWVtY2dfc3RvY2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6MzY6MzYuNzEwMDM3MTgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTA2NTU4NDkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3Igc3l6a2FsbGVyLiBUaGUgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBzbyB0aGF0J3MgZ29vZC4gTm93LCBsZXQncyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgZnVuY3Rpb24gYGJkZXZfZmx1c2hfYnlfZGV2YCBiZWluZyBhZGRlZCBpbiBgYmxvY2svYmRldi5jYCwgYWxvbmcgd2l0aCBhIGRlY2xhcmF0aW9uIGluIGBibGtkZXYuaGAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gYmUgZGVzaWduZWQgdG8gZmx1c2ggYSBibG9jayBkZXZpY2UgYmFzZWQgb24gaXRzIGBkZXZfdGAgaWRlbnRpZmllci4gSXQgZ3JhYnMgdGhlIGJsb2NrIGRldmljZSwgdHJpZXMgdG8gbG9jayB0aGUgYG9wZW5fbXV0ZXhgLCBjaGVja3MgaWYgaXQncyBvcGVuZWQsIGFuZCBpZiBzbywgY2FsbHMgYHN5bmNfYmxvY2tkZXZfbm93YWl0YC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGZsdXNoaW5nIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgYXN5bmNocm9ub3VzIG9uZXMsIG9mdGVuIGV4cG9zZSBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCBidWdzLlxuXG5UaGUgY2hhbmdlcyB0byBgbWVtY29udHJvbC5oYCBhcmUgYSBiaXQgbW9yZSBpbnZvbHZlZC4gV2UndmUgZ290IGEgbmV3IGBiZGV2X2Zybl9mbHVzaF9jdHhgIHN0cnVjdCBhbmQgc29tZSBhZGRpdGlvbnMgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBmbHVzaCByZXF1ZXN0cywgYWxsIHVuZGVyIHRoZSBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoaW5nLiBUaGUgdHJhY2Vwb2ludCB1cGRhdGVzIGluIGB3cml0ZWJhY2suaGAgYXJlIGxpa2VseSBqdXN0IGZvciBpbnN0cnVtZW50YXRpb24uXG5cblRoZSBgbW0vbWVtY29udHJvbC5jYCBjaGFuZ2VzIGFyZSB0aGUgbWVhdCBvZiBpdC4gV2UndmUgZ290IGZ1bmN0aW9ucyB0byB0cmFjayBmb3JlaWduIGJsb2NrIGRldmljZXMgKGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmApLCBtb2RpZmljYXRpb25zIHRvIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgIHRvIGRldGVjdCBgYmRldl9pbm9kZWAgYW5kIGNhbGwgdGhlIHRyYWNraW5nIGZ1bmN0aW9uLCBgYmRldl9mcm5fZmx1c2hfd29ya2AgYmVpbmcgYWRkZWQsIG1vZGlmaWNhdGlvbnMgdG8gYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgdG8gcXVldWUgd29yayB0byBgbWVtY2dfYmRldl9mcm5fZmx1c2hlcmAsIGFuZCBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi9mcmVlaW5nIG9mIHRoaXMgd29ya3F1ZXVlIGluIGBtZW1fY2dyb3VwX2FsbG9jYCwgYG1lbV9jZ3JvdXBfY3NzX2ZyZWVgIGFuZCBgbWVtX2Nncm91cF9pbml0YCByZXNwZWN0aXZlbHkuXG5cbk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgZGlydHkgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGZsdXNoZWQgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4gVGhlIGFkZGVkIGZsdXNoaW5nIGZ1bmN0aW9uLCB0aGUgdHJhY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBhc3luY2hyb25vdXMgd29ya3F1ZXVlIGFsbCBwb2ludCB0byBhIHBvdGVudGlhbGx5IGNvbXBsZXggaW50ZXJhY3Rpb24uIE5vdywgdGhlIG5leHQgdGhpbmcgdG8gdmVyaWZ5IGlzIHdoYXQgY29uZmlndXJhdGlvbnMgZW5hYmxlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgdXMgaG93IGJyb2FkbHkgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwuIFRoaXMgaXMgc2hhcGluZyB1cCB0byBiZSBhIHByZXR0eSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYW5kIHRoZSB0aWdodCBpbnRlZ3JhdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZSdzIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBmaW5kaW5nIGludGVyZXN0aW5nIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM2OjQxLjc3NTYyNTAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDYxODQ3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9XUklURUJBQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMjU9Y29uZmlnIEJMS19DR1JPVVBcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTQ2LVxcbmluaXQvS2NvbmZpZzoxMTQ3OmNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXFxuaW5pdC9LY29uZmlnLTExNDgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNjo0My40ODE4MTU1NzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTQxODI5NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXRzZWxmLiBTcGVjaWZpY2FsbHksIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgYSBsb3Qgb2YgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIExldCdzIHpvb20gaW4gb24gdGhhdCBmaWxlLCBhbmQgSSdsbCBqdW1wIHJpZ2h0IHRvIGFyb3VuZCBsaW5lIDExNDcuIFRoYXQgZmVlbHMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gd2hhdCBJJ20gbG9va2luZyBpbnRvLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gYnVpbGQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNjo0Ny40MjM2NDY3NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0T25lIG5lZWRzIHRvIGFsc28gZW5hYmxlIGFjdHVhbCBJTyBjb250cm9sbGluZyBsb2dpYy9wb2xpY3kuIEZvclxcbjExNDE6XFx0XFx0ZW5hYmxpbmcgcHJvcG9ydGlvbmFsIHdlaWdodCBkaXZpc2lvbiBvZiBkaXNrIGJhbmR3aWR0aCBpbiBDRlEsIHNldFxcbjExNDI6XFx0XFx0Q09ORklHX0JGUV9HUk9VUF9JT1NDSEVEPXk7IGZvciBlbmFibGluZyB0aHJvdHRsaW5nIHBvbGljeSwgc2V0XFxuMTE0MzpcXHRcXHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXkuXFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4xMTQ2OlxcdFxcbjExNDc6XFx0Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcXG4xMTQ4OlxcdFxcdGJvb2xcXG4xMTQ5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0cgXFx1MDAyNlxcdTAwMjYgQkxLX0NHUk9VUFxcbjExNTA6XFx0XFx0ZGVmYXVsdCB5XFxuMTE1MTpcXHRcXG4xMTUyOlxcdG1lbnVjb25maWcgQ0dST1VQX1NDSEVEXFxuMTE1MzpcXHRcXHRib29sIFxcXCJDUFUgY29udHJvbGxlclxcXCJcXG4xMTU0OlxcdFxcdGRlZmF1bHQgblxcbjExNTU6XFx0XFx0aGVscFxcbjExNTY6XFx0XFx0ICBUaGlzIGZlYXR1cmUgbGV0cyBDUFUgc2NoZWR1bGVyIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmQgY29udHJvbCBDUFVcXG4xMTU3OlxcdFxcdCAgYmFuZHdpZHRoIGFsbG9jYXRpb24gdG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgdXNlcyBjZ3JvdXBzIHRvIGdyb3VwXFxuMTE1ODpcXHRcXHQgIHRhc2tzLlxcbjExNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM2OjQ3LjQyMzc1NTQ0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1NjQzMTQ1MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wb3J0YW5jZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBDR1JPVVBfV1JJVEVCQUNLYCBkZXBlbmRzIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCBhbmQgZGVmYXVsdHMgdG8gJ3knLiBTbywgcmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBhcmUgZXNzZW50aWFsIHRvIGNvbnNpZGVyIGZvciB0aGlzIHBhdGNoLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGhpbmcgYWN0dWFsbHkgdG91Y2hlcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBzdWJzeXN0ZW1zIG1vZGlmaWVkIGFyZSBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL21lbWNvbnRyb2wuY2ApIGFuZCB0aGUgYmxvY2sgbGF5ZXIgKGBibG9jay9iZGV2LmNgKS4gQWxyaWdodCwgc291bmRzIGxpa2UgaW50ZXJlc3RpbmcgY29kZS4gSXMgdGhpcyByZWFjaGFibGUgY29kZT8gWWVzLCB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gY2dyb3VwcyB3cml0ZWJhY2sgYW5kIGRpcnR5aW5nIHBhZ2VzIG9uIGJsb2NrIGRldmljZXMuIFNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgbG9vcCBkZXZpY2VzLCByYW1kaXNrcywgcmF3IGJsb2NrIGRldmljZXMsIG9yIGV2ZW4gZm9yZWlnbiBkaXJ0eSB0cmFja2luZyBpZiBhIHBhZ2UgaW4gb25lIG1lbWNnIGlzIGRpcnRpZWQgZm9yIGEgYmxvY2sgZGV2aWNlIHdoZXJlIHRoZSB3cml0ZWJhY2sgaXMgaGFuZGxlZCBieSBhIGRpZmZlcmVudCBtZW1jZyBvciBldmVuIHRoZSByb290IGNncm91cC5cblxuR2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHRoZSBjb3JlIHN1YnN5c3RlbXMsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciBhbmQgaXQgaXMgcmVsYXRlZCB0byBleGVjdXRhYmxlIGNvZGUsIHRoaXMgc2NyZWFtcyBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGlzIGZhbGxzIHNxdWFyZWx5IHdpdGhpbiB0aGUgY3JpdGVyaWEgdGhleSd2ZSBkZWZpbmVkOiBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgY29kZSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LlxuXG5MZXQncyBzZWUsIHRoZSBmdW5jdGlvbnMvc3ltYm9scyBpbnZvbHZlZDogSW4gYGJsb2NrL2JkZXYuY2AsIHdlIGhhdmUgYGJkZXZfZmx1c2hfYnlfZGV2YC4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIEkgc2VlIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmAgKHRoYXQncyBzdGF0aWMsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gbm90ZSksIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoYW5vdGhlciBzdGF0aWMgb25lKSwgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAsIGFuZCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYC5cblxuSG9sZCBvbiwgbGV0IG1lIGNoZWNrIHNvbWV0aGluZyBhYm91dCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5YC4gSXMgdGhhdCBhbiBpbmxpbmUgZnVuY3Rpb24/IEdvdHRhIG1ha2Ugc3VyZSBJIHRyYWNrIGRvd24gd2hlcmUgdGhhdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIHVzZWQgYmVmb3JlIEkgbWFrZSBhIGZpbmFsIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNzoxMy4wNjY5MDI0NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTQzNzY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTUxPXN0cnVjdCBtZW1fY2dyb3VwX3RocmVzaG9sZHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTY3LSAqXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTY4OiAqIFNlZSBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoKSBmb3IgZGV0YWlscy5cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjktICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNTkzPXZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE1OTc6dm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk4LVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk5LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE2MDA6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MDEtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjEzLVxcdGlmICh1bmxpa2VseShcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyAhPSB3Yi1cXHUwMDNlbWVtY2dfY3NzKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjE0OlxcdFxcdG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChmb2xpbywgd2IpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MTUtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjI3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YixcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzQtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYzNTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzNi1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zODU3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZGV2X3QgZGV2KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM5MTYtICogd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJ3QgbWF0Y2ggLSBpcyBkaXJ0aWVkLFxcbm1tL21lbWNvbnRyb2wuYzozOTE3OiAqIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZyBiZGlfd3JpdGViYWNrXFxubW0vbWVtY29udHJvbC5jLTM5MTgtICogb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKSBkZWNpZGVzIHRoYXQgdGhlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzkyOC0gKi9cXG5tbS9tZW1jb250cm9sLmM6MzkyOTp2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL21lbWNvbnRyb2wuYy0zOTMwLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yNjAzPXN0YXRpYyB2b2lkIGZvbGlvX2FjY291bnRfZGlydGllZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNjI3LVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjYyODpcXHRcXHRtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MjktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNzoxNC43ODIzNDU1NTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTE5OTcyMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBzZWUgdGhhdCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCBpcyBhIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBBbmQganVzdCB0byBrZWVwIHRoZSBmdWxsIHBpY3R1cmUgaW4gbWluZCwgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXMgYWxzbyBkZWZpbmVkIHRoZXJlLiBHaXZlbiB0aGF0IGNvbnRleHQsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBUaW1lIHRvIHRyYWNlIGl0cyBjYWxsZXJzLiBMZXQncyBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNzoyMC45MDIzMjAyMThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA1MDE0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9mbHVzaF9mb3JlaWduXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MDA9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYxNy1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjE4OnZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYxOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MzU9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzOS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjQwOnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2NDEte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM4NTc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzkxOS0gKiBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHNcXG5tbS9tZW1jb250cm9sLmM6MzkyMDogKiBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oKSB3aGljaCBxdWV1ZXMgd3JpdGViYWNrIG9uIHRoZSByZWNvcmRlZFxcbm1tL21lbWNvbnRyb2wuYy0zOTIxLSAqIGZvcmVpZ24gYmRpX3dyaXRlYmFja3Mgd2hpY2ggaGF2ZW4ndCBleHBpcmVkLiAgQm90aCB0aGUgbnVtYmVycyBvZlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM5OTA9c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDAwOS0vKiBpc3N1ZSBmb3JlaWduIHdyaXRlYmFjayBmbHVzaGVzIGZvciByZWNvcmRlZCBmb3JlaWduIGRpcnR5aW5nIGV2ZW50cyAqL1xcbm1tL21lbWNvbnRyb2wuYzo0MDEwOnZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG5tbS9tZW1jb250cm9sLmMtNDAxMS17XFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTE3OTE9c3RhdGljIGludCBiYWxhbmNlX2RpcnR5X3BhZ2VzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YixcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTg2Ni1cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjE4Njc6XFx0XFx0bWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHdiKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE4NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM3OjIyLjQ4MjgyODM5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzI1ODU0NzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gYGJkZXZfZmx1c2hfYnlfZGV2YCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGlkZW50aWZpZWQgdGhpcyBgYmRldl9mbHVzaF9ieV9kZXZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIHdlJ3JlIGludmVzdGlnYXRpbmcuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0aG9yb3VnaCBjb2RlIHJldmlldy4gV2UgY2FuJ3QganVzdCBhc3N1bWUgaXRzIGJlaGF2aW9yIGJhc2VkIG9uIGl0cyBuYW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgb2YgdXNlLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBXZSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBhbGwgaW5zdGFuY2VzIG9mIHRoZSBmdW5jdGlvbidzIHVzYWdlLCBzbyB3ZSdyZSBtYWtpbmcgc3VyZSB3ZSBhcmVuJ3QgbWlzc2luZyBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhlIGJlaGF2aW9yIHdlJ3JlIG9ic2VydmluZy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGRlYnVnZ2luZyBwcm9jZXNzIHRvIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNzo0NS43NDEzNzkyMDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDA4OTA1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmRldl9mbHVzaF9ieV9kZXZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmRldi5jPTI2NT1FWFBPUlRfU1lNQk9MX0dQTChzeW5jX2Jsb2NrZGV2X25vd2FpdCk7XFxuLS1cXG5ibG9jay9iZGV2LmMtMjY3LS8qKlxcbmJsb2NrL2JkZXYuYzoyNjg6ICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSdzIHBhZ2UgY2FjaGVcXG5ibG9jay9iZGV2LmMtMjY5LSAqIEBkZXY6IHRhcmdldCBibG9jayBkZXZpY2UgbnVtYmVyXFxuLS1cXG5ibG9jay9iZGV2LmMtMjczLSAqL1xcbmJsb2NrL2JkZXYuYzoyNzQ6dm9pZCBiZGV2X2ZsdXNoX2J5X2RldihkZXZfdCBkZXYpXFxuYmxvY2svYmRldi5jLTI3NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTE3MTI9aW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTcxMzp2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldik7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzE0LXZvaWQgc3luY19iZGV2cyhib29sIHdhaXQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM5OTA9c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzk5NS1cXG5tbS9tZW1jb250cm9sLmM6Mzk5NjpcXHRiZGV2X2ZsdXNoX2J5X2RldihjdHgtXFx1MDAzZWRldik7XFxubW0vbWVtY29udHJvbC5jLTM5OTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM3OjQ3LjI4MjI3NzExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NDA1OTc2ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGb3JlaWduIERpcnR5IFBhZ2UgRmx1c2hpbmcgYW5kIEZvY3VzIFN5bWJvbCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXMgdHJpZ2dlcmVkLCBhbmQgSSdtIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgYGJhbGFuY2VfZGlydHlfcGFnZXNgLiBJdCBjYWxscyBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCB3aGVuIHRoZSBgbWR0Y2AgaGFzIGZvcmVpZ24gZGlydHlpbmcgb3IgdGhlIGRpcnR5IHJhdGlvIGlzIGhpZ2g7IHRoYXQncyB0aGUgY29yZS5cblxuTm93LCBJJ20gdHJhY2luZyB3aGVyZSBlbHNlIHRoaXMgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgZnVuY3Rpb25hbGl0eSBpcyB0b3VjaGVkLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBibG9jay9iZGV2LmNgIHdpdGggYGJkZXZfZmx1c2hfYnlfZGV2YC4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIHRoZXJlJ3MgYSBidW5jaDogYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCAoc3RhdGljKSwgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAsIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoc3RhdGljKSwgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXRzZWxmLCBgbWVtX2Nncm91cF9hbGxvY2AsIGBtZW1fY2dyb3VwX2Nzc19mcmVlYCwgYW5kIGBtZW1fY2dyb3VwX2luaXRgLlxuXG5XYWl0Li4uIGBtZW1fY2dyb3VwX2FsbG9jYCBpcyBwcmV0dHkgZ2VuZXJhbCwgaXNuJ3QgaXQ/IFRoYXQncyB1c2VkIGR1cmluZyBtZW1jZyBjcmVhdGlvbiwgd2hpY2ggaXMgZXZlcnl3aGVyZS4gQnV0IGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgLCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCwgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgLCBgYmRldl9mbHVzaF9ieV9kZXZgLCBhbmQgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCDigJMgdGhvc2Ugc2VlbSBzcGVjaWZpYyB0byBmb3JlaWduIGRpcnR5aW5nIGFuZCBiZGV2IGZsdXNoZXMuXG5cbk9rYXksIGxldCdzIGtlZXAgZ29pbmcuIENhbiBJIHB1dCBzdGF0aWMgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgPyBMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHJ1bGVzLiBBaCwgcmlnaHQuIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyDigJMgYWxsb2NhdG9ycywgcGFnZSBmYXVsdCBoYW5kbGVycywgZXRjLiBJbnN0ZWFkLCBJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBBbmQsIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGluIGhlYWRlcnMgYXJlIHRyaWNreSwgYXMgdGhleSBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMsIHNvIHRhcmdldCBub24tc3RhdGljIGNhbGxlcnMgaW4gYC5jYCBmaWxlcy5cblxuQnV0IHdhaXQgYSBtaW51dGUsIHRoZSB0ZXh0IHNheXMgc3RhdGljIGZ1bmN0aW9ucyAqaW4qLmMgZmlsZXMgZG8gaGF2ZSBzeW1ib2wgYWRkcmVzc2VzISBMZXQgbWUgcmUtZXZhbHVhdGUgdGhlIGZ1bmN0aW9uczpcblxuKiAgIGBiZGV2X2ZsdXNoX2J5X2RldmAgKG5vbi1zdGF0aWMpIC0gZ29vZFxuKiAgIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoc3RhdGljIHdvcmsgaGFuZGxlcikgLSBPa2F5LCBtYXliZSBnb29kP1xuKiAgIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgIChub24tc3RhdGljKSAtIGdvb2RcbiogICBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCAobm9uLXN0YXRpYykgLSBnb29kXG4qICAgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCAoc3RhdGljIGhlbHBlcikgLSBTdGlsbCBub3Qgc3VyZS4uLlxuXG5JcyBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgIGlubGluZWQ/IEl0J3Mgc3RhdGljLCBhbmQgb25seSBjYWxsZWQgb25jZSB3aXRoaW4gYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAuIFBlcmhhcHMuXG5cbkhvbGQgb24sIEkgc2VlIHNvbWV0aGluZy4gYGJkZXZfZnJuX2ZsdXNoX3dvcmtgJ3MgYWRkcmVzcyBpcyAqdGFrZW4qIGluIHRoZSBjb2RlIChgSU5JVF9XT1JLKFx1MDAyNmN0eC1cdTAwM2V3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKWApLiBUaGlzIG1lYW5zIGl0IGNhbiBORVZFUiBiZSBpbmxpbmVkISBJdCdzIGRlZmluaXRlbHkgYSBkaXN0aW5jdCBzeW1ib2wgaW4gYHZtbGludXhgLiBBbmQgYGJkZXZfZmx1c2hfYnlfZGV2YCBpcyBleHBvcnRlZCwgc28gdGhhdCBpcyBhbHNvIGRpc3RpbmN0LiBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCBhbmQgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgYXJlIGJvdGggZXhwb3J0ZWQgZnVuY3Rpb25zLCB0b28uXG5cbk9rYXksIG5vdyBsZXQncyBzZWUgd2hhdCBjb25maWdzIGFyZSByZWxldmFudC4gSSBzZWUgYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBhbmQgSSBrbm93IGl0IGRlcGVuZHMgb24gYE1FTUNHYCBhbmQgYEJMS19DR1JPVVBgLlxuXG5Ob3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2U/IENoZWNraW5nIGBibG9jay9iZGV2LmNgLCBgYmRldl9mbHVzaF9ieV9kZXZgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CTE9DS2AgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgYmxvY2svTWFrZWZpbGVgLiBJIHRoaW5rIEknbSBzdGFydGluZyB0byBnZXQgYSBnb29kIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozODowMi42ODgyNTY1MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTMzNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJkZXZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTY9Q09OVEVYVF9BTkFMWVNJUyA6PSB5XFxuYmxvY2svTWFrZWZpbGUtNy1cXG5ibG9jay9NYWtlZmlsZTo4Om9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTktXFx0XFx0XFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjAyLjczMzM5MzE3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTI0MTI5OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGhlcmUuIEZpcnN0LCBsZXQncyBsb29rIGF0IGBvYmotJChDT05GSUdfQkxPQ0spYCBpbiB0aGUgcm9vdCBgTWFrZWZpbGVgIG9yIGBLY29uZmlnYCwgc3BlY2lmaWNhbGx5IHRvIHNlZSB3aGF0IGBibG9jay9gIGRlcGVuZHMgb24gLSBwcmVzdW1hYmx5IGBDT05GSUdfQkxPQ0tgLCBidXQgbGV0J3MgY29uZmlybS4gQWxyaWdodCwgdGhhdCdzIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgY2hlY2sgb3V0IGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBhbmQgdGhlc2UgYmxvY2sgY2dyb3VwIGZlYXR1cmVzLiBBaCwgeWVzLCBgbW0vbWVtY29udHJvbC5jYCBkZXBlbmRzIG9uIGBDT05GSUdfTUVNQ0dgLiBNYWtlcyBzZW5zZS4gSSBrbm93IHRoZXJlJ3Mgc29tZSBjb25kaXRpb25hbCBjb2RlIGluIHRoZXJlLiBJIGJldCBpdCBoYXMgdG8gZG8gd2l0aCB0aGUgYmxvY2sgY2dyb3VwIHN0dWZmLlxuXG5MZXQgbWUgY2hlY2sgaW5zaWRlIGBtbS9tZW1jb250cm9sLmNgLi4uIGFoLCB5ZXMuIFRoZSBmb3JlaWduIHRyYWNraW5nIGNvZGUgYW5kIHRoZSBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYXJlIGFsbCBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIFRoYXQncyB0aGUgbGluay4gU28gYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBpcyBrZXkuXG5cblJpZ2h0LCBzbyB0byB0cmFjZSB0aGlzIGJhY2ssIEkgbmVlZCB0byBjaGVjayBgaW5pdC9LY29uZmlnYCBhZ2FpbiB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXBzLiBMZXQncyBzZWUuLi4gYE1FTUNHYCBkZXBlbmRzIG9uIGBDR1JPVVBTYC4gR290IGl0LiBOb3csICp0aGF0KiBgQ0dST1VQX1dSSVRFQkFDS2AgZGVwZW5kcyBvbiBib3RoIGBNRU1DRyBcdTAwMjZcdTAwMjYgQkxLX0NHUk9VUGAuIEdvb2QuIEknbSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlLlxuXG5Pa2F5LCBteSBmaW5hbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgSSB3YW50IHRvIGNvbmZpcm0gaWYgYEJMT0NLYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGBCTEtfQ0dST1VQYC4gSSBoYXZlIHRvIGJlIHN1cmUgb2YgdGhlIGRlcGVuZGVuY3kgdHJlZS4gSSBjYW4ndCBidWlsZCBzb21ldGhpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24gdGhhdCdzIGdvaW5nIHRvIGZhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQ4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjA3LjY1NzUyNTg1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTM2NDA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxcbi0tXFxuYmxvY2svS2NvbmZpZy00MS1cXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxcbmJsb2NrL0tjb25maWctNDMtXFx0Ym9vbFxcbmJsb2NrL0tjb25maWctNDQtXFxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xcbmJsb2NrL0tjb25maWctNDYtXFx0Ym9vbFxcbi0tXFxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcXG4tLVxcbmJsb2NrL0tjb25maWctMTMzLVxcbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxcbmJsb2NrL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNDQtXFxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcXG5ibG9jay9LY29uZmlnLTE0Ni1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1xcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTUzLVxcbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbmJsb2NrL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNjMtXFxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXFxuYmxvY2svS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiQ2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEyNC1cXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTI2LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjA5LjIwNjg5NTg1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NzI3NjE0MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLCBgaW5pdC9LY29uZmlnYC4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTEyNSwgd2hpY2gsIGJhc2VkIG9uIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIGxpa2VseSBjb250YWlucyBzb21lIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBhIHJlbGF0ZWQgZ3JvdXBpbmcgb2Ygc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBoaWdoLWxldmVsIG1vZHVsZSBkZWZpbml0aW9uLCBhIGNydWNpYWwgZGV2aWNlIGRyaXZlciBwYXJhbWV0ZXIsIG9yIHBlcmhhcHMgYSBzZWN0aW9uIHRoYXQgc2V0cyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgaW5pdGlhbCByYW1kaXNrIG9yIHJvb3QgZmlsZXN5c3RlbSBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBob3cgdGhlc2UgY29tcG9uZW50cyBjb21lIHRvZ2V0aGVyIHRvIGZvcm0gdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGFuZCB1bmRlcnN0YW5kIHdoYXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozODoxMy45MzQ1MTI0NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTIwOlxcdFxcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxcbjExMjE6XFx0XFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjExMjQ6XFx0XFxuMTEyNTpcXHRjb25maWcgQkxLX0NHUk9VUFxcbjExMjY6XFx0XFx0Ym9vbCBcXFwiSU8gY29udHJvbGxlclxcXCJcXG4xMTI3OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4xMTI4OlxcdFxcdGRlZmF1bHQgblxcbjExMjk6XFx0XFx0aGVscFxcbjExMzA6XFx0XFx0R2VuZXJpYyBibG9jayBJTyBjb250cm9sbGVyIGNncm91cCBpbnRlcmZhY2UuIFRoaXMgaXMgdGhlIGNvbW1vblxcbjExMzE6XFx0XFx0Y2dyb3VwIGludGVyZmFjZSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB2YXJpb3VzIElPIGNvbnRyb2xsaW5nXFxuMTEzMjpcXHRcXHRwb2xpY2llcy5cXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxcbjExMzU6XFx0XFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxcbjExMzY6XFx0XFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXFxuMTEzNzpcXHRcXHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdFRoaXMgb3B0aW9uIG9ubHkgZW5hYmxlcyBnZW5lcmljIEJsb2NrIElPIGNvbnRyb2xsZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjEzLjkzNDYzOTEyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDQxNTY3ODAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvcmVpZ24gRGlydHkgVHJhY2tpbmcgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIEZpcnN0LCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gYEJMS19DR1JPVVBgIGRlcGVuZHMgb24gYEJMT0NLYC4gYENHUk9VUF9XUklURUJBQ0tgIGRlcGVuZHMgb24gYm90aCBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAuIEFuZCwgb2YgY291cnNlLCBgTUVNQ0dgIHJlbGllcyBvbiBgQ0dST1VQU2AuIFNvLCB0byBlbmFibGUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgc2V0dGluZyBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGBCTEtfQ0dST1VQYCwgYW5kIGBCTE9DS2AgY292ZXJzIHRoZSByZXF1aXJlbWVudHMuIEl0J3Mgd29ydGggbm90aW5nIHRoYXQgYENHUk9VUF9XUklURUJBQ0tgIGlzIGEgc2ltcGxlIGJvb2xlYW4gaW4gYGluaXQvS2NvbmZpZ2AgdGhhdCdzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYE1FTUNHYCBhbmQgYEJMS19DR1JPVVBgIChhbmQgdGhlcmVmb3JlIGBCTE9DS2ApIGFyZSBlbmFibGVkIOKAkyBzbywgbGlzdGluZyBhbGwgZm91ciBpbiBgRW5hYmxlQ29uZmlnc2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgYXBwcm9hY2ggYW5kIGdvb2QgcHJhY3RpY2UgZm9yIGNsYXJpdHkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gV2UndmUgZ290OlxuXG4qICAgYGJkZXZfZmx1c2hfYnlfZGV2YDogQSBuZXcgZnVuY3Rpb24gaW50cm9kdWNlZCBpbiBgYmxvY2svYmRldi5jYC5cbiogICBgYmRldl9mcm5fZmx1c2hfd29ya2A6IEEgbmV3IHdvcmsgZnVuY3Rpb24gaW50cm9kdWNlZCBpbiBgbW0vbWVtY29udHJvbC5jYC5cbiogICBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYDogQSBtb2RpZmllZCBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC5cbiogICBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYDogQW5vdGhlciBtb2RpZmllZCBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC5cbiogICBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgOiBBIG5ldyBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC5cblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGlkZW50aWZpZWQgYWxsIHRoZSBjYWxsZXJzIG9mIHRoZXNlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBiZGV2X2ZsdXNoX2J5X2RldmAgY2FsbHMgYGJsa2Rldl9nZXRfbm9fb3BlbmAsIGBtdXRleF90cnlsb2NrYCBvbiBgYmRfZGlzay1cdTAwM2VvcGVuX211dGV4YCwgYHN5bmNfYmxvY2tkZXZfbm93YWl0YCwgYW5kIGBibGtkZXZfcHV0X25vX29wZW5gLlxuXG5UaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyBmb3JlaWduIGRpcnR5IHRyYWNraW5nIGZvciBibG9jayBkZXZpY2UgaW5vZGVzIGFjcm9zcyBjZ3JvdXBzLiBUaGUgZ2lzdCBpcywgd2hlbiBhIGZvcmVpZ24gYmxvY2sgZGV2aWNlIGZvbGlvIGlzIGRpcnRpZWQgd2l0aGluIGEgbWVtY2csIGluc3RlYWQgb2YgdGhlIG9sZCBiZWhhdmlvciBvZiB0cmFja2luZyB3YiBhbmQgZmx1c2hpbmcgcG90ZW50aWFsbHkgdW5yZWxhdGVkIGlub2RlcywgaXQgbm93IHJlY29yZHMgdGhlIGJsb2NrIGRldmljZSBudW1iZXIgaW4gYG1lbWNnLVx1MDAzZWJkZXZfZnJuYCBhbmQgbGF0ZXIgY2FsbHMgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgIGFzeW5jaHJvbm91c2x5IG9uIGBtZW1jZ19iZGV2X2Zybl9mbHVzaGVyYCwgd2hpY2gsIGluIHR1cm4sIGNhbGxzIGBiZGV2X2ZsdXNoX2J5X2RldmAuXG5cblRoaXMgaXMgYSBub24tdHJpdmlhbCBjaGFuZ2UsIGludm9sdmluZyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbG9ja2luZyB3aXRoIGBmcm5fbG9ja2AgKGEgc3BpbmxvY2sgbmVzdGVkIGluc2lkZSBgbWFwcGluZy1cdTAwM2VpX3BhZ2VzYCksIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgZGlzcGF0Y2ggdGhyb3VnaCBgbWVtY2dfYmRldl9mcm5fZmx1c2hlcmAsIGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24gdXNpbmcgYGZsdXNoX3dvcmtgIGluc2lkZSBgbWVtX2Nncm91cF9jc3NfZnJlZWAsIGFuZCBibG9jayBkZXZpY2UgcmVmZXJlbmNlIG1hbmFnZW1lbnQgd2l0aCBtdXRleCBoYW5kbGluZyBpbiBgYmRldl9mbHVzaF9ieV9kZXZgLiBUaGlzIGlzIHF1aW50ZXNzZW50aWFsIGNvcmUgTU0vYmxvY2sgbGF5ZXIgY29kZSwgd2hpY2ggbWVhbnMgaXQncyBmdWxseSByZWFjaGFibGUgYW5kIHByaW1lIGZvciBmdXp6aW5nLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgd2UndmUgZ290IHRoZSBgRW5hYmxlQ29uZmlnc2A6IGBCTE9DS2AsIGBNRU1DR2AsIGBCTEtfQ0dST1VQYCwgYW5kIGBDR1JPVVBfV1JJVEVCQUNLYC4gVGhlIGBGb2N1c1N5bWJvbHNgOiBgYmRldl9mbHVzaF9ieV9kZXZgLCBgYmRldl9mcm5fZmx1c2hfd29ya2AsIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmAsIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgLCBhbmQgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAuXG5cbkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhc3luY2hyb25vdXMgZm9yZWlnbiB3cml0ZWJhY2sgaGFuZGxpbmcgZm9yIGJsb2NrIGRldmljZSBpbm9kZXMgc2hhcmVkIGFjcm9zcyBtZW1vcnkgY2dyb3Vwcy4gSXQgYWRkcyBhIG5ldyBmbHVzaGVyIHdvcmtxdWV1ZSwgbmV3IHdvcmsgdHJhY2tpbmcgbG9naWMgd2l0aCBgZnJuX2xvY2tgLCBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoIGxvZ2ljLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgY29kZSBhbmQgaW50cm9kdWNlcyBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxpZmV0aW1lLCBhbmQgbG9ja2luZyBpc3N1ZXMsIG1ha2luZyBpdCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTI5LCJPdXRwdXRUb2tlbnMiOjIyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjI4LjM1MDMxOTg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxNDEwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiLFxuICAgIFwiQ0dST1VQX1dSSVRFQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfZmx1c2hfYnlfZGV2XCIsXG4gICAgXCJiZGV2X2Zybl9mbHVzaF93b3JrXCIsXG4gICAgXCJtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldlwiLFxuICAgIFwibWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoXCIsXG4gICAgXCJtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciB3cml0ZWJhY2sgbG9naWMgYnkgYWRkaW5nIGRlZGljYXRlZCBmb3JlaWduIGRpcnR5IHRyYWNraW5nIGFuZCBhc3luY2hyb25vdXMgZmx1c2hpbmcgZm9yIGJsb2NrIGRldmljZSBpbm9kZXMgYWNyb3NzIG1lbW9yeSBjZ3JvdXBzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIChmcm5fbG9jayBuZXN0aW5nIGluc2lkZSBtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzKSwgYSBkZWRpY2F0ZWQgd29ya3F1ZXVlIChtZW1jZ19iZGV2X2Zybl9mbHVzaGVyKSwgd29yayBpdGVtIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgbWVtY2cgdGVhcmRvd24sIGFuZCBkZXZpY2UgZmx1c2ggaGFuZGxpbmcgaW4gYmRldl9mbHVzaF9ieV9kZXYuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnQgZnV6emluZyBmb3IgY29uY3VycmVuY3ksIGxvY2sgb3JkZXJpbmcsIGFuZCBsaWZlY3ljbGUgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmRldl9mbHVzaF9ieV9kZXZcIixcbiAgICBcImJkZXZfZnJuX2ZsdXNoX3dvcmtcIixcbiAgICBcIm1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2XCIsXG4gICAgXCJtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhcIixcbiAgICBcIm1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXFx1MDAzZWlfcGFnZXMpLCBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpLCB3b3JrIGl0ZW0gc3luY2hyb25pemF0aW9uIGR1cmluZyBtZW1jZyB0ZWFyZG93biwgYW5kIGRldmljZSBmbHVzaCBoYW5kbGluZyBpbiBiZGV2X2ZsdXNoX2J5X2Rldi4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgYW5kIGxpZmVjeWNsZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6Mzg6MjguNDI0NDY4NjM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNDI1MTg4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozODoyOC40MjQ5MDI1MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDUxNDIwNzk2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIGRpcnR5IHBhZ2UgdHJhY2tpbmcgYW5kIHdyaXRlYmFjayBmb3IgYmxvY2sgZGV2aWNlIHBhZ2UgY2FjaGVzIGJ5IGFkZGluZyBgYmRldl9mcm5fZmx1c2hfY3R4YCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB0cmFja2luZyBkaXJ0eWluZyBvZiBibG9jayBkZXZpY2UgaW5vZGVzLCBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgZGVkaWNhdGVkIGFzeW5jaHJvbm91cyB3b3JrIChgYmRldl9mbHVzaF9ieV9kZXZgKS5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikuXFxuMi4gRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4YCBpbnN0YW5jZXMgYXJlIGVtYmVkZGVkIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIChlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uKSwgYW5kIGBJTklUX1dPUksoKWAgLyBgY3R4LVxcdTAwM2VtZW1jZ2AgYXJlIGV4cGxpY2l0bHkgc2V0IGR1cmluZyBgbWVtX2Nncm91cF9hbGxvYygpYC5cXG4zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzY2FsYXIgYXJndW1lbnRzIChzdWNoIGFzIGBkZXZfdCBkZXZgIGluIHRyYWNlcG9pbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgZXZhbHVhdGlvbi5cXG40LiBUaGUgcHJpbWFyeSByaXNrcyBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgbG9jayBvcmRlcmluZyAoYGZybl9sb2NrYCBuZXN0aW5nLCBJUlEgZGlzYWJsZW1lbnQsIGFuZCBgb3Blbl9tdXRleGAgdHJ5bG9jaykgYW5kIGJsb2NrIGRldmljZSByZWZlcmVuY2UgbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgZGVidWcgY2hlY2tzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmY2ZDg0YjIyNWFjNzJiMDU0ZTQ5MTI1YjVjNjgyYjNhMjc0MzA3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDExOjM2OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXG5pbmRleCBjZDgzMjMwODM3NDA2Li5kYTFmYzU2OTI2ZmQ0IDEwMDY0NFxuLS0tIGEvYmxvY2svYmRldi5jXG4rKysgYi9ibG9jay9iZGV2LmNcbkBAIC0yNjQsNiArMjY0LDMwIEBAIGludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jX2Jsb2NrZGV2X25vd2FpdCk7XG4gXG4rLyoqXG4rICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSdzIHBhZ2UgY2FjaGVcbisgKiBAZGV2OiB0YXJnZXQgYmxvY2sgZGV2aWNlIG51bWJlclxuKyAqXG4rICogU2tpcCBjbG9zZWQgZGV2aWNlcyBvciBkZXZpY2VzIHdob3NlIG9wZW5fbXV0ZXggaXMgYnVzeS5cbisgKiBNYXkgc2xlZXAgd2hpbGUgc3VibWl0dGluZyB3cml0ZWJhY2s7IGRvZXMgbm90IHdhaXQgZm9yIGFsbCBJL08gdG8gY29tcGxldGUuXG4rICovXG4rdm9pZCBiZGV2X2ZsdXNoX2J5X2RldihkZXZfdCBkZXYpXG4re1xuK1x0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcbitcbitcdGJkZXYgPSBibGtkZXZfZ2V0X25vX29wZW4oZGV2LCBmYWxzZSk7XG4rXHRpZiAoIWJkZXYpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFByZXZlbnQgdGhlIGRldmljZSBmcm9tIGNsb3NpbmcgYmV0d2VlbiB0aGUgY2hlY2sgYW5kIHdyaXRlYmFjay4gKi9cbitcdGlmIChtdXRleF90cnlsb2NrKFx1MDAyNmJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VvcGVuX211dGV4KSkge1xuK1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2YmRldi1cdTAwM2ViZF9vcGVuZXJzKSlcbitcdFx0XHRzeW5jX2Jsb2NrZGV2X25vd2FpdChiZGV2KTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcdH1cbitcdGJsa2Rldl9wdXRfbm9fb3BlbihiZGV2KTtcbit9XG4rXG4gLypcbiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2tcbiAgKiBkZXZpY2UgdmlhIGl0cyBtYXBwaW5nLiAgRG9lcyBub3QgdGFrZSB0aGUgc3VwZXJibG9jayBsb2NrLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTE3MTAsNiArMTcxMCw3IEBAIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuIGludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuIGludCBzeW5jX2Jsb2NrZGV2X3JhbmdlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKTtcbiBpbnQgc3luY19ibG9ja2Rldl9ub3dhaXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4rdm9pZCBiZGV2X2ZsdXNoX2J5X2RldihkZXZfdCBkZXYpO1xuIHZvaWQgc3luY19iZGV2cyhib29sIHdhaXQpO1xuIHZvaWQgYmRldl9zdGF0eChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrKTtcbiB2b2lkIHByaW50a19hbGxfcGFydGl0aW9ucyh2b2lkKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li5kNDRkM2NlNTFiNTBkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTc2LDYgKzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4ge1xuIFx0c3RydWN0IHdiX2NvbXBsZXRpb24gZG9uZTtcdC8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovXG4gfTtcbiBcbisvKlxuKyAqIGZybl9sb2NrIHByb3RlY3RzIGRldiBhbmQgaW5mbGlnaHQuXG4rICogTm8gZXh0cmEgbWVtY2cgcmVmZXJlbmNlIGlzIHRha2VuOiB0aGlzIHdvcmsgaXMgZW1iZWRkZWQgaW4gdGhlIG1lbWNnLFxuKyAqIGFuZCBtZW1fY2dyb3VwX2Nzc19mcmVlKCkgd2FpdHMgZm9yIGl0IHRvIGZpbmlzaCBiZWZvcmUgZnJlZWluZyB0aGUgbWVtY2cuXG4rICovXG4rc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCB7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbitcdGRldl90IGRldjtcbitcdGJvb2wgaW5mbGlnaHQ7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rfTtcbitcbiAvKlxuICAqIEJ1Y2tldCBmb3IgYXJiaXRyYXJpbHkgYnl0ZS1zaXplZCBvYmplY3RzIGNoYXJnZWQgdG8gYSBtZW1vcnlcbiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cFxuQEAgLTI3OSw2ICsyOTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRzdHJ1Y3Qgd2JfZG9tYWluIGNnd2JfZG9tYWluO1xuIFx0c3RydWN0IG1lbWNnX2Nnd2JfZnJuIGNnd2JfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07XG4rXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IGJkZXZfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07XG4rXHQvKiBOZXN0cyBpbnNpZGUgbWFwcGluZy1cdTAwM2VpX3BhZ2VzLiAqL1xuK1x0c3BpbmxvY2tfdCBmcm5fbG9jaztcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaFxuaW5kZXggMTNlZTA3NmNjZDE2Ni4uZmZkMWI4ZGY0MjMxOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaFxuQEAgLTI3Myw5ICsyNzMsOSBAQCBUUkFDRV9FVkVOVChpbm9kZV9zd2l0Y2hfd2JzLFxuIFxuIFRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4gXG4tXHRUUF9QUk9UTyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpLFxuK1x0VFBfUFJPVE8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCBkZXZfdCBkZXYpLFxuIFxuLVx0VFBfQVJHUyhmb2xpbywgd2IpLFxuK1x0VFBfQVJHUyhmb2xpbywgd2IsIGRldiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2FycmF5KGNoYXIsXHRcdG5hbWUsIDMyKVxuQEAgLTI4NCw2ICsyODQsNyBAQCBUUkFDRV9FVkVOVCh0cmFja19mb3JlaWduX2RpcnR5LFxuIFx0XHRfX2ZpZWxkKHU2NCxcdFx0Y2dyb3VwX2lubylcbiBcdFx0X19maWVsZCh1NjQsXHRcdHBhZ2VfY2dyb3VwX2lubylcbiBcdFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXHRtZW1jZ19pZClcbitcdFx0X19maWVsZChkZXZfdCxcdFx0ZGV2KVxuIFx0KSxcbiBcbiBcdFRQX2Zhc3RfYXNzaWduKFxuQEAgLTI5NSwzNCArMjk2LDM3IEBAIFRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4gXHRcdF9fZW50cnktXHUwMDNlaW5vXHRcdD0gaW5vZGUgPyBpbm9kZS1cdTAwM2VpX2lubyA6IDA7XG4gXHRcdF9fZW50cnktXHUwMDNlbWVtY2dfaWRcdD0gd2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZWlkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm9cdD0gX190cmFjZV93Yl9hc3NpZ25fY2dyb3VwKHdiKTtcbitcdFx0X19lbnRyeS1cdTAwM2VkZXZcdFx0PSBkZXY7XG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0X19lbnRyeS1cdTAwM2VwYWdlX2Nncm91cF9pbm8gPSBjZ3JvdXBfaW5vKGZvbGlvX21lbWNnKGZvbGlvKS1cdTAwM2Vjc3MuY2dyb3VwKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHQpLFxuIFxuLVx0VFBfcHJpbnRrKFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcIixcbitcdFRQX3ByaW50ayhcImJkaSAlc1slbGx1XTogaW5vPSVsbHUgbWVtY2dfaWQ9JXUgY2dyb3VwX2lubz0lbGx1IHBhZ2VfY2dyb3VwX2lubz0lbGx1IGRldj0ldToldVwiLFxuIFx0XHRfX2VudHJ5LVx1MDAzZW5hbWUsXG4gXHRcdF9fZW50cnktXHUwMDNlYmRpX2lkLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWlubyxcbiBcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZCxcbiBcdFx0X19lbnRyeS1cdTAwM2VjZ3JvdXBfaW5vLFxuLVx0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lub1xuK1x0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lubyxcbitcdFx0TUFKT1IoX19lbnRyeS1cdTAwM2VkZXYpLCBNSU5PUihfX2VudHJ5LVx1MDAzZWRldilcbiBcdClcbiApO1xuIFxuIFRSQUNFX0VWRU5UKGZsdXNoX2ZvcmVpZ24sXG4gXG4gXHRUUF9QUk9UTyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGludCBmcm5fYmRpX2lkLFxuLVx0XHQgdW5zaWduZWQgaW50IGZybl9tZW1jZ19pZCksXG4rXHRcdCB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkLCBkZXZfdCBkZXYpLFxuIFxuLVx0VFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkKSxcbitcdFRQX0FSR1Mod2IsIGZybl9iZGlfaWQsIGZybl9tZW1jZ19pZCwgZGV2KSxcbiBcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdF9fYXJyYXkoY2hhcixcdFx0bmFtZSwgMzIpXG4gXHRcdF9fZmllbGQodTY0LFx0XHRjZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcdGZybl9iZGlfaWQpXG4gXHRcdF9fZmllbGQodW5zaWduZWQgaW50LFx0ZnJuX21lbWNnX2lkKVxuK1x0XHRfX2ZpZWxkKGRldl90LFx0XHRkZXYpXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtMzMwLDEzICszMzQsMTUgQEAgVFJBQ0VfRVZFTlQoZmx1c2hfZm9yZWlnbixcbiBcdFx0X19lbnRyeS1cdTAwM2VjZ3JvdXBfaW5vXHQ9IF9fdHJhY2Vfd2JfYXNzaWduX2Nncm91cCh3Yik7XG4gXHRcdF9fZW50cnktXHUwMDNlZnJuX2JkaV9pZFx0PSBmcm5fYmRpX2lkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWZybl9tZW1jZ19pZFx0PSBmcm5fbWVtY2dfaWQ7XG4rXHRcdF9fZW50cnktXHUwMDNlZGV2XHRcdD0gZGV2O1xuIFx0KSxcbiBcbi1cdFRQX3ByaW50ayhcImJkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1XCIsXG4rXHRUUF9wcmludGsoXCJiZGkgJXM6IGNncm91cF9pbm89JWxsdSBmcm5fYmRpX2lkPSV1IGZybl9tZW1jZ19pZD0ldSBkZXY9JXU6JXVcIixcbiBcdFx0X19lbnRyeS1cdTAwM2VuYW1lLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm8sXG4gXHRcdF9fZW50cnktXHUwMDNlZnJuX2JkaV9pZCxcbi1cdFx0X19lbnRyeS1cdTAwM2Vmcm5fbWVtY2dfaWRcbitcdFx0X19lbnRyeS1cdTAwM2Vmcm5fbWVtY2dfaWQsXG4rXHRcdE1BSk9SKF9fZW50cnktXHUwMDNlZGV2KSwgTUlOT1IoX19lbnRyeS1cdTAwM2VkZXYpXG4gXHQpXG4gKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjA3ODRmNmU0MGFlY2MgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5LDYgKzM5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdF9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG5AQCAtMTA0LDYgKzEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtY2dfcG5fY2FjaGVwO1xuIFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtZW1jZ19jZ3diX2Zybl93YWl0cSk7XG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptZW1jZ19iZGV2X2Zybl9mbHVzaGVyIF9fcm9fYWZ0ZXJfaW5pdDtcbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pc19keWluZyh2b2lkKVxuQEAgLTM4NDUsNiArMzg0Nyw0MSBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLFxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIEJkZXYgaW5vZGVzIGFyZSBjb21tb25seSBzaGFyZWQgYnkgbWFueSBtZW1jZ3MuIEZsdXNoaW5nIHRoZWlyIG93bmVyIHdiXG4rICogY2FuIHdyaXRlIHVucmVsYXRlZCBmaWxlIGRhdGEsIHNvIHJlY29yZCBkZXZpY2UgbnVtYmVycyBzZXBhcmF0ZWx5IGFuZFxuKyAqIGZsdXNoIG9ubHkgdGhlIGJkZXYgbWFwcGluZ3MuIFRyYWNraW5nIGlzIGJlc3QgZWZmb3J0OiByZWNvcmQgb25seSBkZXZfdFxuKyAqIHdpdGhvdXQgaG9sZGluZyBkZXZpY2Ugb3IgaW5vZGUgcmVmZXJlbmNlcywgc28gaXQgbWF5IHJhY2Ugd2l0aCBkZXZpY2VcbisgKiByZW1vdmFsIGFuZCByZS1hZGRpdGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGRldl90IGRldilcbit7XG4rXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogX19mb2xpb19tYXJrX2RpcnR5KCkgdGFrZXMgbWFwcGluZy1cdTAwM2VpX3BhZ2VzIHdpdGggeGFfbG9ja19pcnFzYXZlKClcbitcdCAqIGJlZm9yZSByZWFjaGluZyB0aGlzIGhlbHBlci4gVXNlIGlycXNhdmUgaGVyZSBhcyB3ZWxsIHNvIGZybl9sb2NrJ3NcbitcdCAqIElSUSBwcm90ZWN0aW9uIGRvZXMgbm90IGRlcGVuZCBvbiB0aGF0IG91dGVyIGxvY2tpbmcuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xuK1x0XHRpZiAobWVtY2ctXHUwMDNlYmRldl9mcm5baV0uZGV2ID09IGRldilcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XG4rXHRcdGN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuK1x0XHRpZiAoY3R4LVx1MDAzZWluZmxpZ2h0KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRjdHgtXHUwMDNlZGV2ID0gZGV2O1xuK1x0XHRicmVhaztcbitcdH1cbitvdXQ6XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rfVxuK1xuIC8qXG4gICogRm9yZWlnbiBkaXJ0eSBmbHVzaGluZ1xuICAqXG5AQCAtMzg3NSwxNyArMzkxMiwxNyBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLFxuICAqIG1vc3QgcmVjZW50IGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzIGFuZCBpbml0aWF0aW5nIHJlbW90ZSBmbHVzaGVzIG9uXG4gICogdGhlbSB3aGVuIGxvY2FsIHdyaXRlYmFjayBpc24ndCBlbm91Z2ggdG8ga2VlcCB0aGUgbWVtb3J5IGNsZWFuIGVub3VnaC5cbiAgKlxuLSAqIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgc3VjaCBtZWNoYW5pc20uICBXaGVuIGEgZm9yZWlnblxuLSAqIHBhZ2UgLSBhIHBhZ2Ugd2hvc2UgbWVtY2cgYW5kIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbid0IG1hdGNoIC0gaXNcbi0gKiBkaXJ0aWVkLCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmdcbi0gKiBiZGlfd3JpdGViYWNrIG9uIHRoZSBwYWdlIG93bmluZyBtZW1jZy4gIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpXG4tICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHNcbisgKiBGb3Igbm9uLWJkZXYgaW5vZGVzLCB3aGVuIGEgZm9yZWlnbiBwYWdlIC0gYSBwYWdlIHdob3NlIG1lbWNnIGFuZFxuKyAqIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbid0IG1hdGNoIC0gaXMgZGlydGllZCxcbisgKiBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmcgYmRpX3dyaXRlYmFja1xuKyAqIG9uIHRoZSBwYWdlIG93bmluZyBtZW1jZy4gV2hlbiBiYWxhbmNlX2RpcnR5X3BhZ2VzKCkgZGVjaWRlcyB0aGF0IHRoZVxuKyAqIG1lbWNnIG5lZWRzIHRvIHNsZWVwIGR1ZSB0byBoaWdoIGRpcnR5IHJhdGlvLCBpdCBjYWxsc1xuICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkXG4gICogZm9yZWlnbiBiZGlfd3JpdGViYWNrcyB3aGljaCBoYXZlbid0IGV4cGlyZWQuICBCb3RoIHRoZSBudW1iZXJzIG9mXG4gICogcmVjb3JkZWQgYmRpX3dyaXRlYmFja3MgYW5kIGNvbmN1cnJlbnQgaW4tZmxpZ2h0IGZvcmVpZ24gd3JpdGViYWNrcyBhcmVcbiAgKiBsaW1pdGVkIHRvIE1FTUNHX0NHV0JfRlJOX0NOVC5cbiAgKlxuLSAqIFRoZSBtZWNoYW5pc20gb25seSByZW1lbWJlcnMgSURzIGFuZCBkb2Vzbid0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLlxuKyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbid0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLlxuICAqIEFzIGJlaW5nIHdyb25nIG9jY2FzaW9uYWxseSBkb2Vzbid0IG1hdHRlciwgdXBkYXRlcyBhbmQgYWNjZXNzZXMgdG8gdGhlXG4gICogcmVjb3JkcyBhcmUgbG9ja2xlc3MgYW5kIHJhY3kuXG4gICovXG5AQCAtMzg5OCw4ICszOTM1LDE3IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHR1NjQgb2xkZXN0X2F0ID0gbm93O1xuIFx0aW50IG9sZGVzdCA9IC0xO1xuIFx0aW50IGk7XG4rXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuK1x0c3RydWN0IGlub2RlICpiZGV2X2lub2RlID0gbWFwcGluZyA/IG1hcHBpbmctXHUwMDNlaG9zdCA6IE5VTEw7XG4rXG4rXHRpZiAobWVtY2dfYmRldl9mcm5fZmx1c2hlciBcdTAwMjZcdTAwMjYgYmRldl9pbm9kZSBcdTAwMjZcdTAwMjZcbitcdCAgICBzYl9pc19ibGtkZXZfc2IoYmRldl9pbm9kZS1cdTAwM2VpX3NiKSkge1xuK1x0XHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgYmRldl9pbm9kZS1cdTAwM2VpX3JkZXYpO1xuK1x0XHRtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldihtZW1jZywgYmRldl9pbm9kZS1cdTAwM2VpX3JkZXYpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4tXHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3Yik7XG4rXHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgMCk7XG4gXG4gXHQvKlxuIFx0ICogUGljayB0aGUgc2xvdCB0byB1c2UuICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2xvdCBmb3IgQHdiLCBrZWVwXG5AQCAtMzk0MSw2ICszOTg3LDI1IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJkZXZfZnJuX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9XG4rXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4LCB3b3JrKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRiZGV2X2ZsdXNoX2J5X2RldihjdHgtXHUwMDNlZGV2KTtcbitcbitcdC8qXG4rXHQgKiBUaGUgZGlydHkgdHJhY2tpbmcgcGF0aCB0YWtlcyBmcm5fbG9jayB3aGlsZSBob2xkaW5nIG1hcHBpbmctXHUwMDNlaV9wYWdlcy5cbitcdCAqIERpc2FibGUgbG9jYWwgSVJRcyBoZXJlIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRoIEkvTyBjb21wbGV0aW9uXG4rXHQgKiBoYW5kbGVycyB0aGF0IGFsc28gdGFrZSBtYXBwaW5nLVx1MDAzZWlfcGFnZXMuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2VtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuK1x0Y3R4LVx1MDAzZWluZmxpZ2h0ID0gZmFsc2U7XG4rXHRjdHgtXHUwMDNlZGV2ID0gMDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZW1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rfVxuK1xuIC8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovXG4gdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIHtcbkBAIC0zOTQ5LDYgKzQwMTQsMTkgQEAgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIFx0dTY0IG5vdyA9IGppZmZpZXNfNjQ7XG4gXHRpbnQgaTtcbiBcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XG4rXHRcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuK1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoIWN0eC1cdTAwM2VpbmZsaWdodCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldikge1xuK1x0XHRcdGN0eC1cdTAwM2VpbmZsaWdodCA9IHRydWU7XG4rXHRcdFx0dHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgMCwgMCwgY3R4LVx1MDAzZWRldik7XG4rXHRcdFx0cXVldWVfd29yayhtZW1jZ19iZGV2X2Zybl9mbHVzaGVyLCBcdTAwMjZjdHgtXHUwMDNld29yayk7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbiBcdFx0c3RydWN0IG1lbWNnX2Nnd2JfZnJuICpmcm4gPSBcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2ZybltpXTtcbiBcbkBAIC0zOTYxLDcgKzQwMzksOCBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4gXHRcdGlmICh0aW1lX2FmdGVyNjQoZnJuLVx1MDAzZWF0LCBub3cgLSBpbnR2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmZybi1cdTAwM2Vkb25lLmNudCkgPT0gMSkge1xuIFx0XHRcdGZybi1cdTAwM2VhdCA9IDA7XG4tXHRcdFx0dHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgZnJuLVx1MDAzZWJkaV9pZCwgZnJuLVx1MDAzZW1lbWNnX2lkKTtcbitcdFx0XHR0cmFjZV9mbHVzaF9mb3JlaWduKHdiLCBmcm4tXHUwMDNlYmRpX2lkLCBmcm4tXHUwMDNlbWVtY2dfaWQsXG4rXHRcdFx0XHRcdCAgICAwKTtcbiBcdFx0XHRjZ3JvdXBfd3JpdGViYWNrX2J5X2lkKGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCxcbiBcdFx0XHRcdFx0ICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZnJuLVx1MDAzZWRvbmUpO1xuQEAgLTQyMDIsOSArNDI4MSwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IC0xO1xuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWVtY2ctXHUwMDNlY2d3Yl9saXN0KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbitcdFx0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV07XG4rXG4gXHRcdG1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldLmRvbmUgPVxuIFx0XHRcdF9fV0JfQ09NUExFVElPTl9JTklUKFx1MDAyNm1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbitcdFx0SU5JVF9XT1JLKFx1MDAyNmN0eC1cdTAwM2V3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKTtcbitcdFx0Y3R4LVx1MDAzZW1lbWNnID0gbWVtY2c7XG4rXHR9XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jayk7XG4gI2VuZGlmXG4gXHRscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpO1xuIFx0cmV0dXJuIG1lbWNnO1xuQEAgLTQzODYsOCArNDQ3MSwxMCBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRpbnQgX19tYXliZV91bnVzZWQgaTtcbiBcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbiBcdFx0d2Jfd2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2ZybltpXS5kb25lKTtcbitcdFx0Zmx1c2hfd29yayhcdTAwMjZtZW1jZy1cdTAwM2ViZGV2X2ZybltpXS53b3JrKTtcbitcdH1cbiAjZW5kaWZcbiBcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiAhY2dyb3VwX21lbW9yeV9ub3NvY2tldClcbiBcdFx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2bWVtY2dfc29ja2V0c19lbmFibGVkX2tleSk7XG5AQCAtNTcwMyw2ICs1NzkwLDEyIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4gXHRtZW1jZ193cSA9IGFsbG9jX3dvcmtxdWV1ZShcIm1lbWNnXCIsIFdRX1BFUkNQVSwgMCk7XG4gXHRXQVJOX09OKCFtZW1jZ193cSk7XG4gXG4rI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4rXHRtZW1jZ19iZGV2X2Zybl9mbHVzaGVyID0gYWxsb2Nfd29ya3F1ZXVlKFwibWVtY2dfYmRldl9mcm5fZmx1c2hlclwiLFxuK1x0XHRcdFx0XHQgICAgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAwKTtcbitcdFdBUk5fT04oIW1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpO1xuKyNlbmRpZlxuK1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuIFx0XHRJTklUX1dPUksoXHUwMDI2cGVyX2NwdV9wdHIoXHUwMDI2bWVtY2dfc3RvY2ssIGNwdSktXHUwMDNld29yayxcbiBcdFx0XHQgIGRyYWluX2xvY2FsX21lbWNnX3N0b2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjI4LjQyNDkwMzYzOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxOTM4NzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSaXNrIEFzc2Vzc21lbnQ6IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIEJsb2NrIERldmljZSBGbHVzaGluZyoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaCB3aXRoIGEgZm9jdXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIHNjcnV0aW55LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gaW50cm9kdWNpbmcgYSBtZWNoYW5pc20gZm9yIGZsdXNoaW5nIGJsb2NrIGRldmljZXMgYXNzb2NpYXRlZCB3aXRoIGZvcmVpZ24gKGkuZS4sIG5vbi1yZXNpZGVudCkgZGF0YSB3aXRoaW4gbWVtb3J5IGNncm91cHMsIGxpa2VseSByZWxhdGVkIHRvIHdyaXRlYmFjayBvcGVyYXRpb25zLiBUaGUgYE5lZWRzS01TQU49dHJ1ZWAgZmxhZyBpcyBwcm9iYWJseSB0cmlnZ2VyZWQgYnkgb25lIG9yIG1vcmUgb2Ygc2V2ZXJhbCBmYWN0b3JzIGhlcmUuXG5cbkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGJkZXZfZmx1c2hfYnlfZGV2YCwgdGhlIGNvcmUgZnVuY3Rpb24uIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBnZXRzIGEgYmxvY2sgZGV2aWNlIGZyb20gaXRzIGBkZXZfdGAgYW5kIGF0dGVtcHRzIGEgZmx1c2guIFRoZSBsb2NraW5nIHNlZW1zIHJlYXNvbmFibGUsIGFuZCB0aGUgYGJsa2Rldl9wdXRfbm9fb3BlbmAgc3VnZ2VzdHMgYSBzYWZlIGxpZmVjeWNsZS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS5cblxuTmV4dCwgdGhlIG5ldyBgc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eGAgYW5kIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYXJlIHNpZ25pZmljYW50LiBUaGlzIGNvbnRleHQgc2VlbXMgdG8gdHJhY2sgYmxvY2sgZGV2aWNlcyBmb3IgZmx1c2hpbmcgd2l0aGluIGEgbWVtb3J5IGNncm91cC4gVGhlIGBpbmZsaWdodGAgZmxhZyBhbmQgYGRldmAgZmllbGQgYXJlIGtleS4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiB0aGVzZSBmaWVsZHMgY2FuIGxlYWQgdG8gYSBjb25kaXRpb24gd2hlcmUsIHdpdGggc3BlY2lmaWMgdGltaW5nIHNjZW5hcmlvcywgdW5pbml0aWFsaXplZCBkYXRhIGNhbiBsZWFrLlxuXG5UaGUgdHJhY2UgZXZlbnRzLCBzcGVjaWZpY2FsbHkgdGhlIHVwZGF0ZXMgdG8gYHRyYWNrX2ZvcmVpZ25fZGlydHlgIGFuZCBgZmx1c2hfZm9yZWlnbmAgd2l0aCB0aGUgYGRldl90YCBhcmd1bWVudCwgYXJlIGFsc28gaW1wb3J0YW50LiBUaGUgYF9fZW50cnktXHUwMDNlZGV2ID0gZGV2YCBhc3NpZ25tZW50IHdpdGhpbiBgVFBfZmFzdF9hc3NpZ25gICpjb3VsZCogYmVjb21lIHByb2JsZW1hdGljIGlmIGBkZXZgIGlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgdHJhY2UgZXZlbnQgaXMgZmlyZWQuIFNpbWlsYXJseSwgdGhlIGBNQUpPUihfX2VudHJ5LVx1MDAzZWRldiksIE1JTk9SKF9fZW50cnktXHUwMDNlZGV2KWAgaW4gYFRQX3ByaW50a2AgcmVsaWVzIG9uIHRoaXMgaW5pdGlhbGl6ZWQgZGF0YS5cblxuTm93LCBsZXQncyBtb3ZlIHRvIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgbWVtY2dfYmRldl9mcm5fZmx1c2hlcmAgd29ya3F1ZXVlIGFuZCB0aGUgZnVuY3Rpb25zIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmAsIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgLCBgYmRldl9mcm5fZmx1c2hfd29ya2AsIGFuZCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCBhcmUgY2VudHJhbCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmAgaXMgdGhlIGZpcnN0IHNwb3Qgd2hlcmUgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgYXBwZWFyczogaW4gdGhlIGxvb3AgYG1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldLmRldiA9PSBkZXZgIGFuZCBpbiBgY3R4LVx1MDAzZWRldiA9IGRldmAgYWZ0ZXIgYSBjaGVjayBmb3IgYCFjdHgtXHUwMDNlaW5mbGlnaHRgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlcmUgY291bGQgYmUgY2FzZXMgd2hlcmUgd2UgaGF2ZSB0byBlbnN1cmUgYGJkZXZfZnJuW2ldLmRldmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTW9yZW92ZXIsIGBiZGV2X2Zybl9mbHVzaF93b3JrYCBjYWxscyBgYmRldl9mbHVzaF9ieV9kZXYoY3R4LVx1MDAzZWRldilgIGFuZCB0aGVuIHJlc2V0cyBgY3R4LVx1MDAzZWluZmxpZ2h0YCBhbmQgYGN0eC1cdTAwM2VkZXZgLCBidXQgd2l0aG91dCBndWFyYW50ZWVpbmcgaW5pdGlhbGl6YXRpb24gZWxzZXdoZXJlLiBUaGlzIGlzIHdoYXQgdHJpZ2dlcmVkIHRoZSBmbGFnLlxuXG5gbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCBhbHNvIGhhcyBhIGtleSBjaGVjayBvbiBgIWN0eC1cdTAwM2VpbmZsaWdodCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldmAuIFRoZSBrZXkgaGVyZSBpcyBhZ2FpbiB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSBvZiB0aGUgc3RydWN0IGBiZGV2X2Zybl9mbHVzaF9jdHhgOiB3aGF0IGhhcHBlbnMgaWYgYGN0eC1cdTAwM2VkZXZgIGlzIG5vdCBzZXQ/XG5cbkZpbmFsbHksIHRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgbWVtX2Nncm91cGAgaXMgY3J1Y2lhbC4gVGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYWxsIGZpZWxkcywgKmluY2x1ZGluZyogdGhlIGBiZGV2X2ZybmAgYXJyYXksIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uLiBJZiB0aGV5IGFyZSAqbm90Kiwgd2UgaGF2ZSBhIGRlZmluaXRlIEtNU0FOIGNhbmRpZGF0ZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGFsbG9jYXRpb24gcGF0aCB0aHJvdWdoIGBtZW1fY2dyb3VwX2FsbG9jYCB0byB2ZXJpZnkgdGhpcy5cblxuTXkgcHJlbGltaW5hcnkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggKnBvdGVudGlhbGx5KiBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgYmxvY2sgZGV2aWNlIGZsdXNoaW5nIHBhdGgsIHNwZWNpZmljYWxseSBpbiBob3cgdGhlIGBiZGV2X2Zybl9mbHVzaF9jdHhgIGlzIG1hbmFnZWQgYW5kIHRoZSBgZGV2YCBmaWVsZCBpcyBoYW5kbGVkLiBUaGUgY29tYmluYXRpb24gb2Ygd29ya3F1ZXVlIHVzZSwgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBgZGV2YCB2YWx1ZXMsIGFuZCB0cmFjZSBldmVudCBsb2dnaW5nIHN0cm9uZ2x5IHN1Z2dlc3QgdGhpcywgYW5kIGl0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBjYXJlZnVsbHkgdGVzdCBhbmQgdmVyaWZ5LiBUaGUgYE5lZWRzS01TQU49dHJ1ZWAgZmxhZyBzZWVtcyBhcHByb3ByaWF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEwNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjUwLjk0NDI5NDgyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NDk5NTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2NcXFxcKHNpemVvZlxcXFwoc3RydWN0IG1lbV9jZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozODo1MC45ODk5NTIyNjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTM1MTU5MTM2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nIHdpdGggYG1lbV9jZ3JvdXBfYWxsb2NgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYSBzcGVjaWZpYyBjZ3JvdXAuIE15IGdvLXRvIGFwcHJvYWNoIGluIHRoaXMgc2l0dWF0aW9uIGlzIHRvIHN0YXJ0IHdpdGggdGhlIGJhc2ljcywgYW5kIGluIHRoaXMgY2FzZSwgdGhhdCBtZWFucyBjaGVja2luZyBgbWVtX2Nncm91cF9hbGxvY2AuIEl0J3MgdGhlIG1vc3QgZGlyZWN0IHJvdXRlIHRvIHVuZGVyc3RhbmRpbmcgY3VycmVudCBhbGxvY2F0aW9ucy4gSSdsbCBsaWtlbHkgdXNlIGEgc2ltcGxlIGByZWFkLWZpbGVgIGNvbW1hbmQsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0byBpbnNwZWN0IGl0cyBjb250ZW50cy4gVGhpcyBnaXZlcyBtZSBhIHNuYXBzaG90IG9mIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhpcyBtb21lbnQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgaHlwb3RoZXNlcywgcG90ZW50aWFsbHkgbW92aW5nIG9uIHRvIG1vcmUgc29waGlzdGljYXRlZCB0b29scyBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozOTowNC41MDU4Njk1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQxOTA6XFx0XFxuNDE5MTpcXHRcXHRscnV2ZWNfaW5pdChcXHUwMDI2cG4tXFx1MDAzZWxydXZlYyk7XFxuNDE5MjpcXHRcXHRwbi1cXHUwMDNlbWVtY2cgPSBtZW1jZztcXG40MTkzOlxcdFxcbjQxOTQ6XFx0XFx0bWVtY2ctXFx1MDAzZW5vZGVpbmZvW25vZGVdID0gcG47XFxuNDE5NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MTk2OlxcdGZhaWw6XFxuNDE5NzpcXHRcXHRmcmVlX21lbV9jZ3JvdXBfcGVyX25vZGVfaW5mbyhwbik7XFxuNDE5ODpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDE5OTpcXHR9XFxuNDIwMDpcXHRcXG40MjAxOlxcdHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG40MjAyOlxcdHtcXG40MjAzOlxcdFxcdGludCBub2RlO1xcbjQyMDQ6XFx0XFxuNDIwNTpcXHRcXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcXG40MjA2OlxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tub2RlXTtcXG40MjA3OlxcdFxcdFxcdGlmICghcG4pXFxuNDIwODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40MjA5OlxcdFxcbjQyMTA6XFx0XFx0XFx0b2JqX2Nncm91cF9wdXQocG4tXFx1MDAzZW9yaWdfb2JqY2cpO1xcbjQyMTE6XFx0XFx0XFx0ZnJlZV9tZW1fY2dyb3VwX3Blcl9ub2RlX2luZm8ocG4pO1xcbjQyMTI6XFx0XFx0fVxcbjQyMTM6XFx0XFx0bWVtY2cxX2ZyZWVfZXZlbnRzKG1lbWNnKTtcXG40MjE0OlxcdFxcdGtmcmVlKG1lbWNnLVxcdTAwM2V2bXN0YXRzKTtcXG40MjE1OlxcdFxcdGZyZWVfcGVyY3B1KG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSk7XFxuNDIxNjpcXHRcXHRrZnJlZShtZW1jZyk7XFxuNDIxNzpcXHR9XFxuNDIxODpcXHRcXG40MjE5OlxcdHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNDIyMDpcXHR7XFxuNDIyMTpcXHRcXHRscnVfZ2VuX2V4aXRfbWVtY2cobWVtY2cpO1xcbjQyMjI6XFx0XFx0bWVtY2dfd2JfZG9tYWluX2V4aXQobWVtY2cpO1xcbjQyMjM6XFx0XFx0X19tZW1fY2dyb3VwX2ZyZWUobWVtY2cpO1xcbjQyMjQ6XFx0fVxcbjQyMjU6XFx0XFxuNDIyNjpcXHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG40MjI3OlxcdHtcXG40MjI4OlxcdFxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XFxuNDIyOTpcXHRcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnBzdGF0Y19wY3B1O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozOTowNC41MDYyMzQzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODMyNDMyMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbWVtX2Nncm91cF9hbGxvY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVzdCBvZiB0aGUgY29kZSByZWxhdGVkIHRvIGBtZW1fY2dyb3VwX2FsbG9jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIGNvZGUgaXMgZG9pbmcsIGJleW9uZCBqdXN0IHRoZSBiYXNpY3MuIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGhpZ2gtbGV2ZWwgY29uY2VwdCwgdGhlIFwid2hhdFwiIG9mIG1lbW9yeSBjZ3JvdXBzLCBhbmQgaXRzIGFiaWxpdHkgdG8gbGltaXQgYW5kIG1vbml0b3IgbWVtb3J5IHVzYWdlLiBOb3csIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mICpob3cqIHRoaXMgYWxsb2NhdGlvbiBvY2N1cnMuIFNwZWNpZmljYWxseSwgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yOlxuXG4qICAgSG93IGlzIHRoZSBhbGxvY2F0aW9uIHNpemUgZGV0ZXJtaW5lZD8gSXMgaXQgYSBzdGF0aWMgdmFsdWUsIG9yIGR5bmFtaWNhbGx5IGNvbXB1dGVkIGJhc2VkIG9uIHZhcmlvdXMgZmFjdG9ycz8gV2hhdCBhcmUgdGhlIGZhY3RvcnM/XG4qICAgV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkPyBBcmUgdGhlcmUgY29udGVudGlvbiBwb2ludHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2Nrcz9cbiogICBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIChlLmcuLCBwYWdlIGFsbG9jYXRvciwgc2xhYiBhbGxvY2F0b3IpP1xuKiAgIFdoYXQgZXJyb3IgaGFuZGxpbmcgaXMgcHJlc2VudD8gQXJlIHRoZXJlIGdyYWNlZnVsIGRlZ3JhZGF0aW9uIHBhdGhzLCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGZvciBvdXQtb2YtbWVtb3J5IHNjZW5hcmlvcz9cbiogICBIb3cgaXMgdGhlIGFsbG9jYXRpb24gYWNjb3VudGVkIGZvciB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHk/IEFyZSB0aGVyZSBwZXItY2dyb3VwIHN0YXRpc3RpY3MgdXBkYXRlZD8gV2hhdCBhYm91dCBuZXN0ZWQgY2dyb3Vwcz9cbiogICBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgb3IgdHJhZGUtb2ZmcyBiZWluZyBtYWRlPyBQZXJoYXBzIHRoZXJlIGlzIHNvbWUgb3Zlci1hbGxvY2F0aW9uIGZvciBwZXJmb3JtYW5jZS5cbiogICBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGhhbmRsZSwgbGlrZSBOVU1BIHN5c3RlbXM/XG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBiZSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBjb250cm9sIGZsb3cgYnJhbmNoZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzZXMuIEknbGwgYmUgbWVudGFsbHkgc2ltdWxhdGluZyB0aGUgZXhlY3V0aW9uLCBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBob3cgYG1lbV9jZ3JvdXBfYWxsb2NgIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGdhaW4gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkIGluIGEgY2dyb3VwIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM5OjA5LjMzODY2OTE1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQyMzA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQyMzE6XFx0XFx0aW50IG5vZGUsIGNwdTtcXG40MjMyOlxcdFxcdGludCBfX21heWJlX3VudXNlZCBpO1xcbjQyMzM6XFx0XFx0bG9uZyBlcnJvcjtcXG40MjM0OlxcdFxcbjQyMzU6XFx0XFx0bWVtY2cgPSBrbWVtX2NhY2hlX3phbGxvYyhtZW1jZ19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjQyMzY6XFx0XFx0aWYgKCFtZW1jZylcXG40MjM3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjQyMzg6XFx0XFxuNDIzOTpcXHRcXHRlcnJvciA9IHhhX2FsbG9jKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLmlkLCBOVUxMLFxcbjQyNDA6XFx0XFx0XFx0XFx0IFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XFxuNDI0MTpcXHRcXHRpZiAoZXJyb3IpXFxuNDI0MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDI0MzpcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuNDI0NDpcXHRcXG40MjQ1OlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzID0ga3phbGxvY19vYmooc3RydWN0IG1lbWNnX3Ztc3RhdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNDI0NjpcXHRcXHRpZiAoIW1lbWNnLVxcdTAwM2V2bXN0YXRzKVxcbjQyNDc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQyNDg6XFx0XFxuNDI0OTpcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSxcXG40MjUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjQyNTE6XFx0XFx0aWYgKCFtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUpXFxuNDI1MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDI1MzpcXHRcXG40MjU0OlxcdFxcdGlmICghbWVtY2cxX2FsbG9jX2V2ZW50cyhtZW1jZykpXFxuNDI1NTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDI1NjpcXHRcXG40MjU3OlxcdFxcdHBzdGF0Y19wY3B1ID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA6IE5VTEw7XFxuNDI1ODpcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuNDI1OTpcXHRcXHRcXHRzdGF0YyA9IHBlcl9jcHVfcHRyKG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSwgY3B1KTtcXG40MjYwOlxcdFxcdFxcdHN0YXRjLVxcdTAwM2VwYXJlbnRfcGNwdSA9IHBzdGF0Y19wY3B1O1xcbjQyNjE6XFx0XFx0XFx0c3RhdGMtXFx1MDAzZXZtc3RhdHMgPSBtZW1jZy1cXHUwMDNldm1zdGF0cztcXG40MjYyOlxcdFxcdH1cXG40MjYzOlxcdFxcbjQyNjQ6XFx0XFx0Zm9yX2VhY2hfbm9kZShub2RlKVxcbjQyNjU6XFx0XFx0XFx0aWYgKCFhbGxvY19tZW1fY2dyb3VwX3Blcl9ub2RlX2luZm8obWVtY2csIG5vZGUpKVxcbjQyNjY6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbjQyNjc6XFx0XFxuNDI2ODpcXHRcXHRpZiAobWVtY2dfd2JfZG9tYWluX2luaXQobWVtY2csIEdGUF9LRVJORUwpKVxcbjQyNjk6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQyNzA6XFx0XFxuNDI3MTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm1lbWNnLVxcdTAwM2VoaWdoX3dvcmssIGhpZ2hfd29ya19mdW5jKTtcXG40MjcyOlxcdFxcdHZtcHJlc3N1cmVfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXZtcHJlc3N1cmUpO1xcbjQyNzM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfcGVha3MpO1xcbjQyNzQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX3BlYWtzKTtcXG40Mjc1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlcGVha3NfbG9jayk7XFxuNDI3NjpcXHRcXHRtZW1jZy1cXHUwMDNlc29ja2V0X3ByZXNzdXJlID0gZ2V0X2ppZmZpZXNfNjQoKTtcXG40Mjc3OlxcdCNpZiBCSVRTX1BFUl9MT05HIFxcdTAwM2MgNjRcXG40Mjc4OlxcdFxcdHNlcWxvY2tfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXNvY2tldF9wcmVzc3VyZV9zZXFsb2NrKTtcXG40Mjc5OlxcdCNlbmRpZlxcbjQyODA6XFx0XFx0bWVtY2cxX21lbWNnX2luaXQobWVtY2cpO1xcbjQyODE6XFx0XFx0bWVtY2ctXFx1MDAzZWttZW1jZ19pZCA9IC0xO1xcbjQyODI6XFx0I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxuNDI4MzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfbGlzdCk7XFxuNDI4NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcXG40Mjg1OlxcdFxcdFxcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9IFxcdTAwMjZtZW1jZy1cXHUwMDNlYmRldl9mcm5baV07XFxuNDI4NjpcXHRcXG40Mjg3OlxcdFxcdFxcdG1lbWNnLVxcdTAwM2VjZ3diX2ZybltpXS5kb25lID1cXG40Mjg4OlxcdFxcdFxcdFxcdF9fV0JfQ09NUExFVElPTl9JTklUKFxcdTAwMjZtZW1jZ19jZ3diX2Zybl93YWl0cSk7XFxuNDI4OTpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNmN0eC1cXHUwMDNld29yaywgYmRldl9mcm5fZmx1c2hfd29yayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM5OjA5LjMzOTAxODE0MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTQ3Mjg1NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBNZW1jZyBBbGxvY2F0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGBtZW1jZ2AgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBzZWVtcyB0byBiZSB0aGF0IGBtZW1jZ2AgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTClgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudDogYWxsIHRoZSBmaWVsZHMgd2l0aGluIHRoZSBgbWVtY2dgIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGBiZGV2X2ZybmAsIGdldCB6ZXJvLWluaXRpYWxpemVkIGZyb20gdGhlIGdldC1nby4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgYmVjYXVzZSBpdCBhZmZlY3RzIGhvdyB3ZSBjYW4gcmVseSBvbiBpbml0aWFsIHZhbHVlcyBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYXJpc2luZyBmcm9tIGEgZmllbGQgbm90IGJlaW5nIGV4cGxpY2l0bHkgc2V0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBhdCB0aGUgdmVyeSB0b3AgbGV2ZWwsIHRoZSByb290IG9mIHRoZSBtZW1jZyBoaWVyYXJjaHkuIEknbSB3b25kZXJpbmcgaWYgdGhlIHJvb3QgYG1lbV9jZ3JvdXBgIGlzIGluaXRpYWxpemVkIHN0YXRpY2FsbHkgZHVyaW5nIGtlcm5lbCBzZXR1cCwgb3IgaWYgaXQgZ29lcyB0aHJvdWdoIHRoZSBgbWVtX2Nncm91cF9hbGxvY2AgcGF0aCBsaWtlIG90aGVyIG1lbWNncy4gR290dGEgYmUgc3VyZSBhYm91dCB0aGUgYmFzZSBjYXNlLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGluaXRpYWxpemF0aW9uIG9mIGByb290X21lbV9jZ3JvdXBgIHNwZWNpZmljYWxseSB0byB2ZXJpZnkgaG93IGl0IGlzIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6Mzk6MTIuMjg2MzA2NDE5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3MDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyb290X21lbV9jZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz04Mz1FWFBPUlRfU1lNQk9MKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxubW0vbWVtY29udHJvbC5jLTg0LVxcbm1tL21lbWNvbnRyb2wuYzo4NTpzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1fY2dyb3VwIF9fcmVhZF9tb3N0bHk7XFxubW0vbWVtY29udHJvbC5jOjg2OkVYUE9SVF9TWU1CT0wocm9vdF9tZW1fY2dyb3VwKTtcXG5tbS9tZW1jb250cm9sLmMtODctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTE4PXN0cnVjdCB2bXByZXNzdXJlICptZW1jZ190b192bXByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMjAtXFx0aWYgKCFtZW1jZylcXG5tbS9tZW1jb250cm9sLmM6MTIxOlxcdFxcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMjItXFx0cmV0dXJuIFxcdTAwMjZtZW1jZy1cXHUwMDNldm1wcmVzc3VyZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMjM9RVhQT1JUX1NZTUJPTChtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTMzMi0gKlxcbm1tL21lbWNvbnRyb2wuYzozMzM6ICogSWYgbWVtY2cgaXMgYm91bmQgdG8gYSB0cmFkaXRpb25hbCBoaWVyYXJjaHksIHRoZSBjc3Mgb2Ygcm9vdF9tZW1fY2dyb3VwXFxubW0vbWVtY29udHJvbC5jLTMzNC0gKiBpcyByZXR1cm5lZC5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMzY9c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzQwLVxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmM6MzQxOlxcdFxcdHJldHVybiBcXHUwMDI2cm9vdF9tZW1fY2dyb3VwLVxcdTAwM2Vjc3M7XFxubW0vbWVtY29udHJvbC5jLTM0Mi1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNDQtXFxubW0vbWVtY29udHJvbC5jOjM0NTpcXHRyZXR1cm4gbWVtY2cgPyBcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyA6IFxcdTAwMjZyb290X21lbV9jZ3JvdXAtXFx1MDAzZWNzcztcXG5tbS9tZW1jb250cm9sLmMtMzQ2LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz03NzY9dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03ODEtXFx0aWYgKCFtZW1jZylcXG5tbS9tZW1jb250cm9sLmM6NzgyOlxcdFxcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy03ODMtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Nzk0PXN0YXRpYyB2b2lkIGZsdXNoX21lbWNnX3N0YXRzX2R3b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03OTktXFx0ICovXFxubW0vbWVtY29udHJvbC5jOjgwMDpcXHRfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMocm9vdF9tZW1fY2dyb3VwLCB0cnVlKTtcXG5tbS9tZW1jb250cm9sLmMtODAxLVxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBcXHUwMDI2c3RhdHNfZmx1c2hfZHdvcmssIEZMVVNIX1RJTUUpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTExNTk9c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE4My1cXHRcXHRpZiAodW5saWtlbHkoIW1tKSlcXG5tbS9tZW1jb250cm9sLmM6MTE4NDpcXHRcXHRcXHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMTg1LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTkwLVxcdFxcdGlmICh1bmxpa2VseSghbWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzoxMTkxOlxcdFxcdFxcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMTkyLVxcdH0gd2hpbGUgKCFjc3NfdHJ5Z2V0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTIyNT1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEyMzItXFx0aWYgKCFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSlcXG5tbS9tZW1jb250cm9sLmM6MTIzMzpcXHRcXHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMjM0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTEyNjA9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfaXRlcihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMjcyLVxcdGlmICghcm9vdClcXG5tbS9tZW1jb250cm9sLmM6MTI3MzpcXHRcXHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMjc0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTEzNTI9dm9pZCBtZW1fY2dyb3VwX2l0ZXJfYnJlYWsoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTM1NS1cXHRpZiAoIXJvb3QpXFxubW0vbWVtY29udHJvbC5jOjEzNTY6XFx0XFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcXG5tbS9tZW1jb250cm9sLmMtMTM1Ny1cXHRpZiAocHJldiBcXHUwMDI2XFx1MDAyNiBwcmV2ICE9IHJvb3QpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTM3NT1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JlY2xhaW1faXRlcmF0b3JzKHN0cnVjdCBtZW1fY2dyb3VwICpkZWFkX21lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEzODctXFx0ICogcGFyZW50X21lbV9jZ3JvdXAoKSBkb2VzIG5vdCB3YWxrIGFsbCB0aGUgd2F5IHVwIHRvIHRoZVxcbm1tL21lbWNvbnRyb2wuYzoxMzg4OlxcdCAqIGNncm91cCByb290IChyb290X21lbV9jZ3JvdXApLiBTbyB3ZSBoYXZlIHRvIGhhbmRsZVxcbm1tL21lbWNvbnRyb2wuYy0xMzg5LVxcdCAqIGRlYWRfbWVtY2cgZnJvbSBjZ3JvdXAgcm9vdCBzZXBhcmF0ZWx5Llxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEzOTEtXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobGFzdCkpXFxubW0vbWVtY29udHJvbC5jOjEzOTI6XFx0XFx0X19pbnZhbGlkYXRlX3JlY2xhaW1faXRlcmF0b3JzKHJvb3RfbWVtX2Nncm91cCxcXG5tbS9tZW1jb250cm9sLmMtMTM5My1cXHRcXHRcXHRcXHRcXHRcXHRkZWFkX21lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTk0PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjAwMy1cXHRpZiAoIW9vbV9kb21haW4pXFxubW0vbWVtY29udHJvbC5jOjIwMDQ6XFx0XFx0b29tX2RvbWFpbiA9IHJvb3RfbWVtX2Nncm91cDtcXG5tbS9tZW1jb250cm9sLmMtMjAwNS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMDUyPV9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqY3VycmVudF9vYmpfY2dyb3VwKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA3Mi1cXHRcXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6MzA3MzpcXHRcXHRyZXR1cm4gb2JqY2cgPyA6IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZW9iamNnLCAxKTtcXG5tbS9tZW1jb250cm9sLmMtMzA3NC1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA3OS1cXG5tbS9tZW1jb250cm9sLmM6MzA4MDpcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHJvb3RfbWVtX2Nncm91cC1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlb2JqY2csIDEpO1xcbm1tL21lbWNvbnRyb2wuYy0zMDgxLVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwOTQtXFxubW0vbWVtY29udHJvbC5jOjMwOTU6XFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZW9iamNnLCAxKTtcXG5tbS9tZW1jb250cm9sLmMtMzA5Ni19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDMwMz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzQyLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0MzQzOlxcdFxcdHJvb3RfbWVtX2Nncm91cCA9IG1lbWNnO1xcbm1tL21lbWNvbnRyb2wuYy00MzQ0LVxcdFxcdHJldHVybiBcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjczPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjgyLVxcdGlmICghcm9vdClcXG5tbS9tZW1jb250cm9sLmM6NTI4MzpcXHRcXHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy01Mjg0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3NjQ9X19zZXR1cChcXFwiY2dyb3VwLm1lbW9yeT1cXFwiLCBjZ3JvdXBfbWVtb3J5KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzY2LS8qXFxubW0vbWVtY29udHJvbC5jOjU3Njc6ICogTWVtb3J5IGNvbnRyb2xsZXIgaW5pdCBiZWZvcmUgY2dyb3VwX2luaXQoKSBpbml0aWFsaXplIHJvb3RfbWVtX2Nncm91cC5cXG5tbS9tZW1jb250cm9sLmMtNTc2OC0gKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYzMDA9dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjMwNS1cXHRpZiAoIW1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYzo2MzA2OlxcdFxcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy02MzA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozOToxMi4zMzE5ODE4NThaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjU2MjU1NDAyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDZ3JvdXAgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtZW1fY2dyb3VwX2Nzc19hbGxvY2AuIFRoZSBjb2RlIGhlcmUgaXMgcHJldHR5IGNsZWFyOyBpdCdzIGNhbGxpbmcgYG1lbV9jZ3JvdXBfYWxsb2NgIGZvciAqZXZlcnkqIG1lbW9yeSBjZ3JvdXAsIGluY2x1ZGluZyB0aGUgcm9vdCBjZ3JvdXAuIFRoYXQgbWFrZXMgc2Vuc2UsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGluZ3MgYXQgdGhlIHRvcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJdCdzIHRoZSBhbGxvY2F0aW9uIHN0ZXAsIG9idmlvdXNseSwgYnV0IHdoYXQgc3BlY2lmaWNhbGx5IGlzIGdldHRpbmcgYWxsb2NhdGVkIGF0IGVhY2ggbGV2ZWw/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzPyBIb3cgbXVjaCBtZW1vcnkgb3ZlcmhlYWQgYXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyIGNncm91cD8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgbWVtX2Nncm91cF9hbGxvY2Agbm93IHRvIGZ1bGx5IGdyYXNwIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSByb290IGNncm91cCBhbGxvY2F0aW9uIHNwZWNpZmljYWxseSwgYW5kIGhvdyBpdCBjYXNjYWRlcyBkb3duIHRvIHRoZSByZXN0LiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTo0MDoxNy45NTc1MjQ4NDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzAwOlxcdH1cXG40MzAxOlxcdFxcbjQzMDI6XFx0c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICogX19yZWZcXG40MzAzOlxcdG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbjQzMDQ6XFx0e1xcbjQzMDU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MocGFyZW50X2Nzcyk7XFxuNDMwNjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7XFxuNDMwNzpcXHRcXHRib29sIG1lbWNnX29uX2RmbCA9IGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxuNDMwODpcXHRcXG40MzA5OlxcdFxcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTtcXG40MzEwOlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpO1xcbjQzMTE6XFx0XFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcbjQzMTI6XFx0XFx0aWYgKElTX0VSUihtZW1jZykpXFxuNDMxMzpcXHRcXHRcXHRyZXR1cm4gRVJSX0NBU1QobWVtY2cpO1xcbjQzMTQ6XFx0XFxuNDMxNTpcXHRcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xcbjQzMTY6XFx0XFx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xcbjQzMTc6XFx0I2lmZGVmIENPTkZJR19aU1dBUFxcbjQzMTg6XFx0XFx0bWVtY2ctXFx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XFxuNDMxOTpcXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2V6c3dhcF93cml0ZWJhY2ssIHRydWUpO1xcbjQzMjA6XFx0I2VuZGlmXFxuNDMyMTpcXHRcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcXG40MzIyOlxcdFxcdGlmIChwYXJlbnQpIHtcXG40MzIzOlxcdFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBcXHUwMDI2cGFyZW50LVxcdTAwM2VtZW1vcnksIG1lbWNnX29uX2RmbCk7XFxuNDMyNDpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN3YXAsIGZhbHNlKTtcXG40MzI1OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG40MzI2OlxcdFxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcXG40MzI3OlxcdFxcdFxcdG1lbWNnLVxcdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuNDMyODpcXHRcXHRcXHRtZW1jZy1cXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuNDMyOTpcXHRcXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vvb21fa2lsbF9kaXNhYmxlLCBSRUFEX09OQ0UocGFyZW50LVxcdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XFxuNDMzMDpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIFxcdTAwMjZwYXJlbnQtXFx1MDAzZWttZW0sIGZhbHNlKTtcXG40MzMxOlxcdFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldGNwbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2V0Y3BtZW0sIGZhbHNlKTtcXG40MzMyOlxcdFxcdFxcdG1lbWNnLVxcdTAwM2V0Y3BtZW0udHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuNDMzMzpcXHQjZW5kaWZcXG40MzM0OlxcdFxcdH0gZWxzZSB7XFxuNDMzNTpcXHRcXHRcXHRpbml0X21lbWNnX3N0YXRzKCk7XFxuNDMzNjpcXHRcXHRcXHRpbml0X21lbWNnX2V2ZW50cygpO1xcbjQzMzc6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIE5VTEwsIHRydWUpO1xcbjQzMzg6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XFxuNDMzOTpcXHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuNDM0MDpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcXG40MzQxOlxcdFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldGNwbWVtLCBOVUxMLCBmYWxzZSk7XFxuNDM0MjpcXHQjZW5kaWZcXG40MzQzOlxcdFxcdFxcdHJvb3RfbWVtX2Nncm91cCA9IG1lbWNnO1xcbjQzNDQ6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTo0MDoxNy45NTc5MDUxODVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU2MDkwNTQ4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgb2J2aW91cyBLTVNBTi1yZWxldmFudCBpc3N1ZXMsIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLiBGaXJzdCwgdGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byByZWZpbmUgdGhlIHRyYWNraW5nIG9mIGZvcmVpZ24gZGlydHkgd3JpdGViYWNrcyByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcywgaW1wbGVtZW50aW5nIGEgcGVyLW1lbWNnIGJsb2NrIGRldmljZSBmbHVzaCB0cmFja2luZyBtZWNoYW5pc20gKGBiZGV2X2Zybl9mbHVzaF9jdHhgKSBhbmQgYXN5bmNocm9ub3VzIGZsdXNoIHdvcmsgKGBiZGV2X2ZsdXNoX2J5X2RldmApLiBUaGlzIHNob3VsZCBpbXByb3ZlIGVmZmljaWVuY3kgYnkgYXZvaWRpbmcgdGhlIGZsdXNoaW5nIG9mIHVucmVsYXRlZCB3cml0ZWJhY2tzLCBhbmQgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgbWVhbnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyBwYXR0ZXJucy5cblxuTm93LCBydW5uaW5nIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gTnVtYmVyIG9uZSwgYXJlIHdlIHNlbmRpbmcgYW55dGhpbmcgbmV3IHRvIHVzZXIgc3BhY2U/IE5vcGUuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCwgZWl0aGVyIHZpYSBzeXN0ZW0gY2FsbHMsIGlvY3Rscywgb3IgYW55dGhpbmcgZWxzZS4gVGhlIHRyYWNlcG9pbnRzIGFyZSBqdXN0IHJlY29yZGluZyBleGlzdGluZyBrZXJuZWwgZGF0YSwgYW5kIHRoZSBzY2FsYXIgYGRldl90YCBpcyBwYXNzZWQgYnkgdmFsdWUuIFNvLCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IGludG8gdGhlIHVzZXIgc3BhY2UuXG5cbk5leHQsIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmc/IEknbSBjaGVja2luZyB0aGUgY3J1Y2lhbCBjb25kaXRpb25zOiBgbWVtY2ctXHUwMDNlYmRldl9mcm5baV0uZGV2ID09IGRldmAgYW5kIGBjdHgtXHUwMDNlaW5mbGlnaHRgLCB3aGljaCBib3RoIGxvb2sgc2FmZSBnaXZlbiBga21lbV9jYWNoZV96YWxsb2NgIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gQWxzbywgYGJkZXZfZmx1c2hfYnlfZGV2YCBsb29rcyBva2F5IOKAkyB0aGUgYGJkZXZgIHBvaW50ZXIgaXMgYXNzaWduZWQgZnJvbSBgYmxrZGV2X2dldF9ub19vcGVuYCBhbmQgY2hlY2tlZC4gVGhlIHNsb3cgcGF0aCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCBpbml0aWFsaXplcyB0aGUgYGJkZXZfaW5vZGVgIGJlZm9yZSBpdHMgdXNlLiBUaGUgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgIGNvbnRleHQgYGN0eGAgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZC4gU28sIG5vIG9idmlvdXMgaXNzdWVzIHRoZXJlLlxuXG5UaGlyZCwgd2hhdCBhYm91dCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyBUaGUgYGJkZXZfZnJuYCBzdHJ1Y3R1cmUgaXMgZW1iZWRkZWQgaW5zaWRlIHRoZSBgbWVtX2Nncm91cGAsIHdoaWNoIGlzIHplcm9lZCBvdXQgYnkgYGttZW1fY2FjaGVfemFsbG9jYCwgZm9sbG93ZWQgYnkgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uIFRoZSBgYmRldl9mcm5fZmx1c2hfY3R4YCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQsIHRvby4gVGhlcmVmb3JlLCBuby4gTm8gcmlza3MuXG5cbkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgYm91bmRzIGNoZWNrIGlzc3VlcywgbGVuZ3RoIGlzc3Vlcywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyBOb3BlLiBXZSdyZSBnb29kLlxuXG5HaXZlbiB0aGF0LCB3aGF0ICpjb3VsZCogZ28gd3Jvbmc/IExldCdzIGNvbnNpZGVyIHRoZSB1c3VhbCBzdXNwZWN0cy4gTG9ja2luZyBpcyBhIGNvbmNlcm4sIHNwZWNpZmljYWxseSBgZnJuX2xvY2tgIHNwaW5sb2NrIHZzLiBJUlEgY29udGV4dCwgYW5kIGRlYWRsb2NrcyByZWxhdGVkIHRvIGBtYXBwaW5nLVx1MDAzZWlfcGFnZXNgIG9yIHRoZSBgb3Blbl9tdXRleGAuIFRoZXJlIGlzIGFsc28gdGhlIHBvdGVudGlhbCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBvciBVQUYgYnVncyB3aXRoIGBiZGV2LVx1MDAzZWJkX2Rpc2tgIG9yIHRoZSBwYWlyZWQgYGJsa2Rldl9nZXRfbm9fb3BlbmAgLyBgYmxrZGV2X3B1dF9ub19vcGVuYCBjYWxscy4gRmluYWxseSwgcmFjZSBjb25kaXRpb25zIGFyZSBhIHBvc3NpYmlsaXR5LCB3aGljaCBpcyB0aGUgbmF0dXJlIG9mIGFzeW5jaHJvbm91cyB3b3JrLlxuXG5Ib3dldmVyLCBub25lIG9mIHRob3NlIGFyZSAqdW5pbml0aWFsaXplZCBtZW1vcnkqIGJ1Z3MgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QuIEtBU0FOLCBMb2NrZGVwLCBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBzaG91bGQgaGFuZGxlIHRoZSBleHBlY3RlZCBpc3N1ZXMuIEtBU0FOIHdpbGwgZGV0ZWN0IFVBRnMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gTG9ja2RlcCBjYXRjaGVzIGxvY2sgaW52ZXJzaW9uIGlzc3Vlcy5cblxuTGV0J3MgZG8gb25lIGxhc3QgZG91YmxlLWNoZWNrIG9mIHRoYXQgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgc3RydWN0dXJlLiBJdCdzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCwgdGhlbiBgSU5JVF9XT1JLYCBpcyBjYWxsZWQgYW5kIGBtZW1jZ2AgaXMgYXNzaWduZWQuIFRoZSBgZGV2YCBmaWVsZCBpcyB6ZXJvLCBhbmQgYGluZmxpZ2h0YCBpcyBpbml0aWFsaXplZCB0byBmYWxzZS4gRXhjZWxsZW50LiBFdmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVHJhY2Vwb2ludHMgYXJlIHBhc3NpbmcgZXhwbGljaXRseSBpbml0aWFsaXplZCBwYXJhbWV0ZXJzLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLiBUaGlzIHBhdGNoIGhhcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGZvY3VzZWQgcGF0Y2gsIGFuZCB0aGF0J3MgY292ZXJlZCBieSBvdGhlciB0ZXN0aW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkyMSwiT3V0cHV0VG9rZW5zIjozMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6NDA6NTMuNTY2OTYzMTM0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBkaXJ0eSBwYWdlIHRyYWNraW5nIGFuZCB3cml0ZWJhY2sgZm9yIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcyBieSBhZGRpbmcgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgdHJhY2tpbmcgZGlydHlpbmcgb2YgYmxvY2sgZGV2aWNlIGlub2RlcywgYW5kIGZsdXNoaW5nIHRoZW0gdmlhIGRlZGljYXRlZCBhc3luY2hyb25vdXMgd29yayAoYGJkZXZfZmx1c2hfYnlfZGV2YCkuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pLlxcbjIuIERhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eGAgaW5zdGFuY2VzIGFyZSBlbWJlZGRlZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiksIGFuZCBgSU5JVF9XT1JLKClgIC8gYGN0eC1cXHUwMDNlbWVtY2dgIGFyZSBleHBsaWNpdGx5IHNldCBkdXJpbmcgYG1lbV9jZ3JvdXBfYWxsb2MoKWAuXFxuMy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc2NhbGFyIGFyZ3VtZW50cyAoc3VjaCBhcyBgZGV2X3QgZGV2YCBpbiB0cmFjZXBvaW50cyBhbmQgaGVscGVyIGZ1bmN0aW9ucykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGV2YWx1YXRpb24uXFxuNC4gVGhlIHByaW1hcnkgcmlza3Mgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGxvY2sgb3JkZXJpbmcgKGBmcm5fbG9ja2AgbmVzdGluZywgSVJRIGRpc2FibGVtZW50LCBhbmQgYG9wZW5fbXV0ZXhgIHRyeWxvY2spIGFuZCBibG9jayBkZXZpY2UgcmVmZXJlbmNlIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGRlYnVnIGNoZWNrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIGRpcnR5IHBhZ2UgdHJhY2tpbmcgYW5kIHdyaXRlYmFjayBmb3IgYmxvY2sgZGV2aWNlIHBhZ2UgY2FjaGVzIGJ5IGFkZGluZyBgYmRldl9mcm5fZmx1c2hfY3R4YCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB0cmFja2luZyBkaXJ0eWluZyBvZiBibG9jayBkZXZpY2UgaW5vZGVzLCBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgZGVkaWNhdGVkIGFzeW5jaHJvbm91cyB3b3JrIChgYmRldl9mbHVzaF9ieV9kZXZgKS5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikuXFxuMi4gRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4YCBpbnN0YW5jZXMgYXJlIGVtYmVkZGVkIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIChlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uKSwgYW5kIGBJTklUX1dPUksoKWAgLyBgY3R4LVxcdTAwM2VtZW1jZ2AgYXJlIGV4cGxpY2l0bHkgc2V0IGR1cmluZyBgbWVtX2Nncm91cF9hbGxvYygpYC5cXG4zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzY2FsYXIgYXJndW1lbnRzIChzdWNoIGFzIGBkZXZfdCBkZXZgIGluIHRyYWNlcG9pbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgZXZhbHVhdGlvbi5cXG40LiBUaGUgcHJpbWFyeSByaXNrcyBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgbG9jayBvcmRlcmluZyAoYGZybl9sb2NrYCBuZXN0aW5nLCBJUlEgZGlzYWJsZW1lbnQsIGFuZCBgb3Blbl9tdXRleGAgdHJ5bG9jaykgYW5kIGJsb2NrIGRldmljZSByZWZlcmVuY2UgbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgZGVidWcgY2hlY2tzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 11:18:05 +0000 UTC FinishedAt: 2026-09-14 11:40:54 +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": "5a609d962aa41cdb78dce495126dc4292c887254", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "MEMCG", "BLK_CGROUP", "CGROUP_WRITEBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "5a609d962aa41cdb78dce495126dc4292c887254", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK", "MEMCG", "BLK_CGROUP", "CGROUP_WRITEBACK" ], "series_id": "af52325d-8ef1-4a0f-a799-6d231567fbf7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bdev_flush_by_dev", "bdev_frn_flush_work", "mem_cgroup_track_foreign_bdev", "mem_cgroup_track_foreign_dirty_slowpath", "mem_cgroup_flush_foreign" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "5a609d962aa41cdb78dce495126dc4292c887254", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7Q0dST1VQX1dSSVRFQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JkZXZfZmx1c2hfYnlfZGV2JiMzNDssCiAgICAmIzM0O2JkZXZfZnJuX2ZsdXNoX3dvcmsmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIGRpcnR5IHBhZ2UgdHJhY2tpbmcgYW5kIHdyaXRlYmFjayBmb3IgYmxvY2sgZGV2aWNlIHBhZ2UgY2FjaGVzIGJ5IGFkZGluZyBgYmRldl9mcm5fZmx1c2hfY3R4YCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB0cmFja2luZyBkaXJ0eWluZyBvZiBibG9jayBkZXZpY2UgaW5vZGVzLCBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgZGVkaWNhdGVkIGFzeW5jaHJvbm91cyB3b3JrIChgYmRldl9mbHVzaF9ieV9kZXZgKS5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikuXG4yLiBEYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjogYHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHhgIGluc3RhbmNlcyBhcmUgZW1iZWRkZWQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgKGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24pLCBhbmQgYElOSVRfV09SSygpYCAvIGBjdHgtXHUwMDNlbWVtY2dgIGFyZSBleHBsaWNpdGx5IHNldCBkdXJpbmcgYG1lbV9jZ3JvdXBfYWxsb2MoKWAuXG4zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzY2FsYXIgYXJndW1lbnRzIChzdWNoIGFzIGBkZXZfdCBkZXZgIGluIHRyYWNlcG9pbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgZXZhbHVhdGlvbi5cbjQuIFRoZSBwcmltYXJ5IHJpc2tzIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBsb2NrIG9yZGVyaW5nIChgZnJuX2xvY2tgIG5lc3RpbmcsIElSUSBkaXNhYmxlbWVudCwgYW5kIGBvcGVuX211dGV4YCB0cnlsb2NrKSBhbmQgYmxvY2sgZGV2aWNlIHJlZmVyZW5jZSBsaWZldGltZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXHUwMDNlaV9wYWdlcyksIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAobWVtY2dfYmRldl9mcm5fZmx1c2hlciksIHdvcmsgaXRlbSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIG1lbWNnIHRlYXJkb3duLCBhbmQgZGV2aWNlIGZsdXNoIGhhbmRsaW5nIGluIGJkZXZfZmx1c2hfYnlfZGV2LiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBhbmQgbGlmZWN5Y2xlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmY2ZDg0YjIyNWFjNzJiMDU0ZTQ5MTI1YjVjNjgyYjNhMjc0MzA3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDExOjM2OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JkZXYuYyBiL2Jsb2NrL2JkZXYuY1xuaW5kZXggY2Q4MzIzMDgzNzQwNi4uZGExZmM1NjkyNmZkNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2JkZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmRldi5jXG5AQCAtMjY0LDYgJiM0MzsyNjQsMzAgQEAgaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNfYmxvY2tkZXZfbm93YWl0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJkZXZfZmx1c2hfYnlfZGV2IC0gYXR0ZW1wdCB3cml0ZWJhY2sgb2YgYSBibG9jayBkZXZpY2UmIzM5O3MgcGFnZSBjYWNoZVxuJiM0MzsgKiBAZGV2OiB0YXJnZXQgYmxvY2sgZGV2aWNlIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBTa2lwIGNsb3NlZCBkZXZpY2VzIG9yIGRldmljZXMgd2hvc2Ugb3Blbl9tdXRleCBpcyBidXN5LlxuJiM0MzsgKiBNYXkgc2xlZXAgd2hpbGUgc3VibWl0dGluZyB3cml0ZWJhY2s7IGRvZXMgbm90IHdhaXQgZm9yIGFsbCBJL08gdG8gY29tcGxldGUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7XG4mIzQzO1xuJiM0MztcdGJkZXYgPSBibGtkZXZfZ2V0X25vX29wZW4oZGV2LCBmYWxzZSk7XG4mIzQzO1x0aWYgKCFiZGV2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBQcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBjbG9zaW5nIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB3cml0ZWJhY2suICovXG4mIzQzO1x0aWYgKG11dGV4X3RyeWxvY2soXHUwMDI2YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpKSB7XG4mIzQzO1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2YmRldi1cdTAwM2ViZF9vcGVuZXJzKSlcbiYjNDM7XHRcdFx0c3luY19ibG9ja2Rldl9ub3dhaXQoYmRldik7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdH1cbiYjNDM7XHRibGtkZXZfcHV0X25vX29wZW4oYmRldik7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2tcbiAgKiBkZXZpY2UgdmlhIGl0cyBtYXBwaW5nLiAgRG9lcyBub3QgdGFrZSB0aGUgc3VwZXJibG9jayBsb2NrLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTE3MTAsNiAmIzQzOzE3MTAsNyBAQCB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbiBpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbiBpbnQgc3luY19ibG9ja2Rldl9yYW5nZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBsb2ZmX3QgbHN0YXJ0LCBsb2ZmX3QgbGVuZCk7XG4gaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuJiM0Mzt2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldik7XG4gdm9pZCBzeW5jX2JkZXZzKGJvb2wgd2FpdCk7XG4gdm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spO1xuIHZvaWQgcHJpbnRrX2FsbF9wYXJ0aXRpb25zKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLmQ0NGQzY2U1MWI1MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xNzYsNiAmIzQzOzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4ge1xuIFx0c3RydWN0IHdiX2NvbXBsZXRpb24gZG9uZTtcdC8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovXG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogZnJuX2xvY2sgcHJvdGVjdHMgZGV2IGFuZCBpbmZsaWdodC5cbiYjNDM7ICogTm8gZXh0cmEgbWVtY2cgcmVmZXJlbmNlIGlzIHRha2VuOiB0aGlzIHdvcmsgaXMgZW1iZWRkZWQgaW4gdGhlIG1lbWNnLFxuJiM0MzsgKiBhbmQgbWVtX2Nncm91cF9jc3NfZnJlZSgpIHdhaXRzIGZvciBpdCB0byBmaW5pc2ggYmVmb3JlIGZyZWVpbmcgdGhlIG1lbWNnLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCB7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4mIzQzO1x0ZGV2X3QgZGV2O1xuJiM0MztcdGJvb2wgaW5mbGlnaHQ7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0Mzt9O1xuJiM0MztcbiAvKlxuICAqIEJ1Y2tldCBmb3IgYXJiaXRyYXJpbHkgYnl0ZS1zaXplZCBvYmplY3RzIGNoYXJnZWQgdG8gYSBtZW1vcnlcbiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cFxuQEAgLTI3OSw2ICYjNDM7MjkxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIFx0c3RydWN0IHdiX2RvbWFpbiBjZ3diX2RvbWFpbjtcbiBcdHN0cnVjdCBtZW1jZ19jZ3diX2ZybiBjZ3diX2ZybltNRU1DR19DR1dCX0ZSTl9DTlRdO1xuJiM0MztcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggYmRldl9mcm5bTUVNQ0dfQ0dXQl9GUk5fQ05UXTtcbiYjNDM7XHQvKiBOZXN0cyBpbnNpZGUgbWFwcGluZy1cdTAwM2VpX3BhZ2VzLiAqL1xuJiM0MztcdHNwaW5sb2NrX3QgZnJuX2xvY2s7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcbmluZGV4IDEzZWUwNzZjY2QxNjYuLmZmZDFiOGRmNDIzMTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcbkBAIC0yNzMsOSAmIzQzOzI3Myw5IEBAIFRSQUNFX0VWRU5UKGlub2RlX3N3aXRjaF93YnMsXG4gXG4gVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcbiBcbi1cdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksXG4mIzQzO1x0VFBfUFJPVE8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCBkZXZfdCBkZXYpLFxuIFxuLVx0VFBfQVJHUyhmb2xpbywgd2IpLFxuJiM0MztcdFRQX0FSR1MoZm9saW8sIHdiLCBkZXYpLFxuIFxuIFx0VFBfU1RSVUNUX19lbnRyeShcbiBcdFx0X19hcnJheShjaGFyLFx0XHRuYW1lLCAzMilcbkBAIC0yODQsNiAmIzQzOzI4NCw3IEBAIFRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4gXHRcdF9fZmllbGQodTY0LFx0XHRjZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHU2NCxcdFx0cGFnZV9jZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcdG1lbWNnX2lkKVxuJiM0MztcdFx0X19maWVsZChkZXZfdCxcdFx0ZGV2KVxuIFx0KSxcbiBcbiBcdFRQX2Zhc3RfYXNzaWduKFxuQEAgLTI5NSwzNCAmIzQzOzI5NiwzNyBAQCBUUkFDRV9FVkVOVCh0cmFja19mb3JlaWduX2RpcnR5LFxuIFx0XHRfX2VudHJ5LVx1MDAzZWlub1x0XHQ9IGlub2RlID8gaW5vZGUtXHUwMDNlaV9pbm8gOiAwO1xuIFx0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkXHQ9IHdiLVx1MDAzZW1lbWNnX2Nzcy1cdTAwM2VpZDtcbiBcdFx0X19lbnRyeS1cdTAwM2VjZ3JvdXBfaW5vXHQ9IF9fdHJhY2Vfd2JfYXNzaWduX2Nncm91cCh3Yik7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWRldlx0XHQ9IGRldjtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVx1MDAzZWNzcy5jZ3JvdXApO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdCksXG4gXG4tXHRUUF9wcmludGsoXCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcJiMzNDssXG4mIzQzO1x0VFBfcHJpbnRrKFwmIzM0O2JkaSAlc1slbGx1XTogaW5vPSVsbHUgbWVtY2dfaWQ9JXUgY2dyb3VwX2lubz0lbGx1IHBhZ2VfY2dyb3VwX2lubz0lbGx1IGRldj0ldToldVwmIzM0OyxcbiBcdFx0X19lbnRyeS1cdTAwM2VuYW1lLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWJkaV9pZCxcbiBcdFx0X19lbnRyeS1cdTAwM2Vpbm8sXG4gXHRcdF9fZW50cnktXHUwMDNlbWVtY2dfaWQsXG4gXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lubyxcbi1cdFx0X19lbnRyeS1cdTAwM2VwYWdlX2Nncm91cF9pbm9cbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlcGFnZV9jZ3JvdXBfaW5vLFxuJiM0MztcdFx0TUFKT1IoX19lbnRyeS1cdTAwM2VkZXYpLCBNSU5PUihfX2VudHJ5LVx1MDAzZWRldilcbiBcdClcbiApO1xuIFxuIFRSQUNFX0VWRU5UKGZsdXNoX2ZvcmVpZ24sXG4gXG4gXHRUUF9QUk9UTyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGludCBmcm5fYmRpX2lkLFxuLVx0XHQgdW5zaWduZWQgaW50IGZybl9tZW1jZ19pZCksXG4mIzQzO1x0XHQgdW5zaWduZWQgaW50IGZybl9tZW1jZ19pZCwgZGV2X3QgZGV2KSxcbiBcbi1cdFRQX0FSR1Mod2IsIGZybl9iZGlfaWQsIGZybl9tZW1jZ19pZCksXG4mIzQzO1x0VFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkLCBkZXYpLFxuIFxuIFx0VFBfU1RSVUNUX19lbnRyeShcbiBcdFx0X19hcnJheShjaGFyLFx0XHRuYW1lLCAzMilcbiBcdFx0X19maWVsZCh1NjQsXHRcdGNncm91cF9pbm8pXG4gXHRcdF9fZmllbGQodW5zaWduZWQgaW50LFx0ZnJuX2JkaV9pZClcbiBcdFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXHRmcm5fbWVtY2dfaWQpXG4mIzQzO1x0XHRfX2ZpZWxkKGRldl90LFx0XHRkZXYpXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtMzMwLDEzICYjNDM7MzM0LDE1IEBAIFRSQUNFX0VWRU5UKGZsdXNoX2ZvcmVpZ24sXG4gXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lub1x0PSBfX3RyYWNlX3diX2Fzc2lnbl9jZ3JvdXAod2IpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWZybl9iZGlfaWRcdD0gZnJuX2JkaV9pZDtcbiBcdFx0X19lbnRyeS1cdTAwM2Vmcm5fbWVtY2dfaWRcdD0gZnJuX21lbWNnX2lkO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VkZXZcdFx0PSBkZXY7XG4gXHQpLFxuIFxuLVx0VFBfcHJpbnRrKFwmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1XCYjMzQ7LFxuJiM0MztcdFRQX3ByaW50ayhcJiMzNDtiZGkgJXM6IGNncm91cF9pbm89JWxsdSBmcm5fYmRpX2lkPSV1IGZybl9tZW1jZ19pZD0ldSBkZXY9JXU6JXVcJiMzNDssXG4gXHRcdF9fZW50cnktXHUwMDNlbmFtZSxcbiBcdFx0X19lbnRyeS1cdTAwM2VjZ3JvdXBfaW5vLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWZybl9iZGlfaWQsXG4tXHRcdF9fZW50cnktXHUwMDNlZnJuX21lbWNnX2lkXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWZybl9tZW1jZ19pZCxcbiYjNDM7XHRcdE1BSk9SKF9fZW50cnktXHUwMDNlZGV2KSwgTUlOT1IoX19lbnRyeS1cdTAwM2VkZXYpXG4gXHQpXG4gKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjA3ODRmNmU0MGFlY2MgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5LDYgJiM0MzszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iYWNraW5nLWRldi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0X3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbkBAIC0xMDQsNiAmIzQzOzEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtY2dfcG5fY2FjaGVwO1xuIFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtZW1jZ19jZ3diX2Zybl93YWl0cSk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWVtY2dfYmRldl9mcm5fZmx1c2hlciBfX3JvX2FmdGVyX2luaXQ7XG4gI2VuZGlmXG4gXG4gc3RhdGljIGlubGluZSBib29sIHRhc2tfaXNfZHlpbmcodm9pZClcbkBAIC0zODQ1LDYgJiM0MzszODQ3LDQxIEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBCZGV2IGlub2RlcyBhcmUgY29tbW9ubHkgc2hhcmVkIGJ5IG1hbnkgbWVtY2dzLiBGbHVzaGluZyB0aGVpciBvd25lciB3YlxuJiM0MzsgKiBjYW4gd3JpdGUgdW5yZWxhdGVkIGZpbGUgZGF0YSwgc28gcmVjb3JkIGRldmljZSBudW1iZXJzIHNlcGFyYXRlbHkgYW5kXG4mIzQzOyAqIGZsdXNoIG9ubHkgdGhlIGJkZXYgbWFwcGluZ3MuIFRyYWNraW5nIGlzIGJlc3QgZWZmb3J0OiByZWNvcmQgb25seSBkZXZfdFxuJiM0MzsgKiB3aXRob3V0IGhvbGRpbmcgZGV2aWNlIG9yIGlub2RlIHJlZmVyZW5jZXMsIHNvIGl0IG1heSByYWNlIHdpdGggZGV2aWNlXG4mIzQzOyAqIHJlbW92YWwgYW5kIHJlLWFkZGl0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBfX2ZvbGlvX21hcmtfZGlydHkoKSB0YWtlcyBtYXBwaW5nLVx1MDAzZWlfcGFnZXMgd2l0aCB4YV9sb2NrX2lycXNhdmUoKVxuJiM0MztcdCAqIGJlZm9yZSByZWFjaGluZyB0aGlzIGhlbHBlci4gVXNlIGlycXNhdmUgaGVyZSBhcyB3ZWxsIHNvIGZybl9sb2NrJiMzOTtzXG4mIzQzO1x0ICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChtZW1jZy1cdTAwM2ViZGV2X2ZybltpXS5kZXYgPT0gZGV2KVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuJiM0MztcdFx0aWYgKGN0eC1cdTAwM2VpbmZsaWdodClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRjdHgtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogRm9yZWlnbiBkaXJ0eSBmbHVzaGluZ1xuICAqXG5AQCAtMzg3NSwxNyAmIzQzOzM5MTIsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgbG9uZyAqcGZpbGVwYWdlcyxcbiAgKiBtb3N0IHJlY2VudCBmb3JlaWduIGRpcnR5aW5nIGV2ZW50cyBhbmQgaW5pdGlhdGluZyByZW1vdGUgZmx1c2hlcyBvblxuICAqIHRoZW0gd2hlbiBsb2NhbCB3cml0ZWJhY2sgaXNuJiMzOTt0IGVub3VnaCB0byBrZWVwIHRoZSBtZW1vcnkgY2xlYW4gZW5vdWdoLlxuICAqXG4tICogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBzdWNoIG1lY2hhbmlzbS4gIFdoZW4gYSBmb3JlaWduXG4tICogcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmQgd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJiMzOTt0IG1hdGNoIC0gaXNcbi0gKiBkaXJ0aWVkLCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmdcbi0gKiBiZGlfd3JpdGViYWNrIG9uIHRoZSBwYWdlIG93bmluZyBtZW1jZy4gIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpXG4tICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHNcbiYjNDM7ICogRm9yIG5vbi1iZGV2IGlub2Rlcywgd2hlbiBhIGZvcmVpZ24gcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmRcbiYjNDM7ICogd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJiMzOTt0IG1hdGNoIC0gaXMgZGlydGllZCxcbiYjNDM7ICogbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KCkgcmVjb3JkcyB0aGUgaW5vZGUgb3duaW5nIGJkaV93cml0ZWJhY2tcbiYjNDM7ICogb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKSBkZWNpZGVzIHRoYXQgdGhlXG4mIzQzOyAqIG1lbWNnIG5lZWRzIHRvIHNsZWVwIGR1ZSB0byBoaWdoIGRpcnR5IHJhdGlvLCBpdCBjYWxsc1xuICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkXG4gICogZm9yZWlnbiBiZGlfd3JpdGViYWNrcyB3aGljaCBoYXZlbiYjMzk7dCBleHBpcmVkLiAgQm90aCB0aGUgbnVtYmVycyBvZlxuICAqIHJlY29yZGVkIGJkaV93cml0ZWJhY2tzIGFuZCBjb25jdXJyZW50IGluLWZsaWdodCBmb3JlaWduIHdyaXRlYmFja3MgYXJlXG4gICogbGltaXRlZCB0byBNRU1DR19DR1dCX0ZSTl9DTlQuXG4gICpcbi0gKiBUaGUgbWVjaGFuaXNtIG9ubHkgcmVtZW1iZXJzIElEcyBhbmQgZG9lc24mIzM5O3QgaG9sZCBhbnkgb2JqZWN0IHJlZmVyZW5jZXMuXG4mIzQzOyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbiYjMzk7dCBob2xkIGFueSBvYmplY3QgcmVmZXJlbmNlcy5cbiAgKiBBcyBiZWluZyB3cm9uZyBvY2Nhc2lvbmFsbHkgZG9lc24mIzM5O3QgbWF0dGVyLCB1cGRhdGVzIGFuZCBhY2Nlc3NlcyB0byB0aGVcbiAgKiByZWNvcmRzIGFyZSBsb2NrbGVzcyBhbmQgcmFjeS5cbiAgKi9cbkBAIC0zODk4LDggJiM0MzszOTM1LDE3IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHR1NjQgb2xkZXN0X2F0ID0gbm93O1xuIFx0aW50IG9sZGVzdCA9IC0xO1xuIFx0aW50IGk7XG4mIzQzO1x0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmJkZXZfaW5vZGUgPSBtYXBwaW5nID8gbWFwcGluZy1cdTAwM2Vob3N0IDogTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgXHUwMDI2XHUwMDI2IGJkZXZfaW5vZGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNiX2lzX2Jsa2Rldl9zYihiZGV2X2lub2RlLVx1MDAzZWlfc2IpKSB7XG4mIzQzO1x0XHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgYmRldl9pbm9kZS1cdTAwM2VpX3JkZXYpO1xuJiM0MztcdFx0bWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYobWVtY2csIGJkZXZfaW5vZGUtXHUwMDNlaV9yZGV2KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXG4tXHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3Yik7XG4mIzQzO1x0dHJhY2VfdHJhY2tfZm9yZWlnbl9kaXJ0eShmb2xpbywgd2IsIDApO1xuIFxuIFx0LypcbiBcdCAqIFBpY2sgdGhlIHNsb3QgdG8gdXNlLiAgSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNsb3QgZm9yIEB3Yiwga2VlcFxuQEAgLTM5NDEsNiAmIzQzOzM5ODcsMjUgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJkZXZfZnJuX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4LCB3b3JrKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRiZGV2X2ZsdXNoX2J5X2RldihjdHgtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGlydHkgdHJhY2tpbmcgcGF0aCB0YWtlcyBmcm5fbG9jayB3aGlsZSBob2xkaW5nIG1hcHBpbmctXHUwMDNlaV9wYWdlcy5cbiYjNDM7XHQgKiBEaXNhYmxlIGxvY2FsIElSUXMgaGVyZSB0byBhdm9pZCBkZWFkbG9ja3Mgd2l0aCBJL08gY29tcGxldGlvblxuJiM0MztcdCAqIGhhbmRsZXJzIHRoYXQgYWxzbyB0YWtlIG1hcHBpbmctXHUwMDNlaV9wYWdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbWVtY2ctXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRjdHgtXHUwMDNlaW5mbGlnaHQgPSBmYWxzZTtcbiYjNDM7XHRjdHgtXHUwMDNlZGV2ID0gMDtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2VtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovXG4gdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIHtcbkBAIC0zOTQ5LDYgJiM0Mzs0MDE0LDE5IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcbiBcdHU2NCBub3cgPSBqaWZmaWVzXzY0O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV07XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRpZiAoIWN0eC1cdTAwM2VpbmZsaWdodCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldikge1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlaW5mbGlnaHQgPSB0cnVlO1xuJiM0MztcdFx0XHR0cmFjZV9mbHVzaF9mb3JlaWduKHdiLCAwLCAwLCBjdHgtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0cXVldWVfd29yayhtZW1jZ19iZGV2X2Zybl9mbHVzaGVyLCBcdTAwMjZjdHgtXHUwMDNld29yayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IG1lbWNnX2Nnd2JfZnJuICpmcm4gPSBcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2ZybltpXTtcbiBcbkBAIC0zOTYxLDcgJiM0Mzs0MDM5LDggQEAgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIFx0XHRpZiAodGltZV9hZnRlcjY0KGZybi1cdTAwM2VhdCwgbm93IC0gaW50dikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZmcm4tXHUwMDNlZG9uZS5jbnQpID09IDEpIHtcbiBcdFx0XHRmcm4tXHUwMDNlYXQgPSAwO1xuLVx0XHRcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCk7XG4mIzQzO1x0XHRcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAwKTtcbiBcdFx0XHRjZ3JvdXBfd3JpdGViYWNrX2J5X2lkKGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCxcbiBcdFx0XHRcdFx0ICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZnJuLVx1MDAzZWRvbmUpO1xuQEAgLTQyMDIsOSAmIzQzOzQyODEsMTUgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSAtMTtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfbGlzdCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuJiM0MztcbiBcdFx0bWVtY2ctXHUwMDNlY2d3Yl9mcm5baV0uZG9uZSA9XG4gXHRcdFx0X19XQl9DT01QTEVUSU9OX0lOSVQoXHUwMDI2bWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xuJiM0MztcdFx0SU5JVF9XT1JLKFx1MDAyNmN0eC1cdTAwM2V3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VtZW1jZyA9IG1lbWNnO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jayk7XG4gI2VuZGlmXG4gXHRscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpO1xuIFx0cmV0dXJuIG1lbWNnO1xuQEAgLTQzODYsOCAmIzQzOzQ0NzEsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XG4gXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0d2Jfd2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2ZybltpXS5kb25lKTtcbiYjNDM7XHRcdGZsdXNoX3dvcmsoXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV0ud29yayk7XG4mIzQzO1x0fVxuICNlbmRpZlxuIFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxuIFx0XHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcbkBAIC01NzAzLDYgJiM0Mzs1NzkwLDEyIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4gXHRtZW1jZ193cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDttZW1jZ1wmIzM0OywgV1FfUEVSQ1BVLCAwKTtcbiBcdFdBUk5fT04oIW1lbWNnX3dxKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4mIzQzO1x0bWVtY2dfYmRldl9mcm5fZmx1c2hlciA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDttZW1jZ19iZGV2X2Zybl9mbHVzaGVyXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCk7XG4mIzQzO1x0V0FSTl9PTighbWVtY2dfYmRldl9mcm5fZmx1c2hlcik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnBlcl9jcHVfcHRyKFx1MDAyNm1lbWNnX3N0b2NrLCBjcHUpLVx1MDAzZXdvcmssXG4gXHRcdFx0ICBkcmFpbl9sb2NhbF9tZW1jZ19zdG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9mbHVzaF9ieV9kZXYmIzM0OywKICAgICYjMzQ7YmRldl9mcm5fZmx1c2hfd29yayYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mbHVzaF9mb3JlaWduJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXHUwMDNlaV9wYWdlcyksIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAobWVtY2dfYmRldl9mcm5fZmx1c2hlciksIHdvcmsgaXRlbSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIG1lbWNnIHRlYXJkb3duLCBhbmQgZGV2aWNlIGZsdXNoIGhhbmRsaW5nIGluIGJkZXZfZmx1c2hfYnlfZGV2LiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBhbmQgbGlmZWN5Y2xlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmY2ZDg0YjIyNWFjNzJiMDU0ZTQ5MTI1YjVjNjgyYjNhMjc0MzA3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDExOjM2OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jCmluZGV4IGNkODMyMzA4Mzc0MDYuLmRhMWZjNTY5MjZmZDQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iZGV2LmMKQEAgLTI2NCw2ICYjNDM7MjY0LDMwIEBAIGludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY19ibG9ja2Rldl9ub3dhaXQpOwogCiYjNDM7LyoqCiYjNDM7ICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSYjMzk7cyBwYWdlIGNhY2hlCiYjNDM7ICogQGRldjogdGFyZ2V0IGJsb2NrIGRldmljZSBudW1iZXIKJiM0MzsgKgomIzQzOyAqIFNraXAgY2xvc2VkIGRldmljZXMgb3IgZGV2aWNlcyB3aG9zZSBvcGVuX211dGV4IGlzIGJ1c3kuCiYjNDM7ICogTWF5IHNsZWVwIHdoaWxlIHN1Ym1pdHRpbmcgd3JpdGViYWNrOyBkb2VzIG5vdCB3YWl0IGZvciBhbGwgSS9PIHRvIGNvbXBsZXRlLgomIzQzOyAqLwomIzQzO3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKJiM0MzsKJiM0MzsJYmRldiA9IGJsa2Rldl9nZXRfbm9fb3BlbihkZXYsIGZhbHNlKTsKJiM0MzsJaWYgKCFiZGV2KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBQcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBjbG9zaW5nIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB3cml0ZWJhY2suICovCiYjNDM7CWlmIChtdXRleF90cnlsb2NrKCZhbXA7YmRldi0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCkpIHsKJiM0MzsJCWlmIChhdG9taWNfcmVhZCgmYW1wO2JkZXYtJmd0O2JkX29wZW5lcnMpKQomIzQzOwkJCXN5bmNfYmxvY2tkZXZfbm93YWl0KGJkZXYpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7YmRldi0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CX0KJiM0MzsJYmxrZGV2X3B1dF9ub19vcGVuKGJkZXYpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2sKICAqIGRldmljZSB2aWEgaXRzIG1hcHBpbmcuICBEb2VzIG5vdCB0YWtlIHRoZSBzdXBlcmJsb2NrIGxvY2suCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE3MTAsNiAmIzQzOzE3MTAsNyBAQCB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKIGludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwogaW50IHN5bmNfYmxvY2tkZXZfcmFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpOwogaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwomIzQzO3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KTsKIHZvaWQgc3luY19iZGV2cyhib29sIHdhaXQpOwogdm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spOwogdm9pZCBwcmludGtfYWxsX3BhcnRpdGlvbnModm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLmQ0NGQzY2U1MWI1MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xNzYsNiAmIzQzOzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4gewogCXN0cnVjdCB3Yl9jb21wbGV0aW9uIGRvbmU7CS8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBmcm5fbG9jayBwcm90ZWN0cyBkZXYgYW5kIGluZmxpZ2h0LgomIzQzOyAqIE5vIGV4dHJhIG1lbWNnIHJlZmVyZW5jZSBpcyB0YWtlbjogdGhpcyB3b3JrIGlzIGVtYmVkZGVkIGluIHRoZSBtZW1jZywKJiM0MzsgKiBhbmQgbWVtX2Nncm91cF9jc3NfZnJlZSgpIHdhaXRzIGZvciBpdCB0byBmaW5pc2ggYmVmb3JlIGZyZWVpbmcgdGhlIG1lbWNnLgomIzQzOyAqLwomIzQzO3N0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggewomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJZGV2X3QgZGV2OwomIzQzOwlib29sIGluZmxpZ2h0OwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBCdWNrZXQgZm9yIGFyYml0cmFyaWx5IGJ5dGUtc2l6ZWQgb2JqZWN0cyBjaGFyZ2VkIHRvIGEgbWVtb3J5CiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cApAQCAtMjc5LDYgJiM0MzsyOTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlzdHJ1Y3Qgd2JfZG9tYWluIGNnd2JfZG9tYWluOwogCXN0cnVjdCBtZW1jZ19jZ3diX2ZybiBjZ3diX2ZybltNRU1DR19DR1dCX0ZSTl9DTlRdOwomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IGJkZXZfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07CiYjNDM7CS8qIE5lc3RzIGluc2lkZSBtYXBwaW5nLSZndDtpX3BhZ2VzLiAqLwomIzQzOwlzcGlubG9ja190IGZybl9sb2NrOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKaW5kZXggMTNlZTA3NmNjZDE2Ni4uZmZkMWI4ZGY0MjMxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKQEAgLTI3Myw5ICYjNDM7MjczLDkgQEAgVFJBQ0VfRVZFTlQoaW5vZGVfc3dpdGNoX3dicywKIAogVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAotCVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksCiYjNDM7CVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgZGV2X3QgZGV2KSwKIAotCVRQX0FSR1MoZm9saW8sIHdiKSwKJiM0MzsJVFBfQVJHUyhmb2xpbywgd2IsIGRldiksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2FycmF5KGNoYXIsCQluYW1lLCAzMikKQEAgLTI4NCw2ICYjNDM7Mjg0LDcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAkJX19maWVsZCh1NjQsCQljZ3JvdXBfaW5vKQogCQlfX2ZpZWxkKHU2NCwJCXBhZ2VfY2dyb3VwX2lubykKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsCW1lbWNnX2lkKQomIzQzOwkJX19maWVsZChkZXZfdCwJCWRldikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC0yOTUsMzQgJiM0MzsyOTYsMzcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAkJX19lbnRyeS0mZ3Q7aW5vCQk9IGlub2RlID8gaW5vZGUtJmd0O2lfaW5vIDogMDsKIAkJX19lbnRyeS0mZ3Q7bWVtY2dfaWQJPSB3Yi0mZ3Q7bWVtY2dfY3NzLSZndDtpZDsKIAkJX19lbnRyeS0mZ3Q7Y2dyb3VwX2lubwk9IF9fdHJhY2Vfd2JfYXNzaWduX2Nncm91cCh3Yik7CiYjNDM7CQlfX2VudHJ5LSZndDtkZXYJCT0gZGV2OwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJX19lbnRyeS0mZ3Q7cGFnZV9jZ3JvdXBfaW5vID0gY2dyb3VwX2lubyhmb2xpb19tZW1jZyhmb2xpbyktJmd0O2Nzcy5jZ3JvdXApOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkpLAogCi0JVFBfcHJpbnRrKCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUmIzM0OywKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUgZGV2PSV1OiV1JiMzNDssCiAJCV9fZW50cnktJmd0O25hbWUsCiAJCV9fZW50cnktJmd0O2JkaV9pZCwKIAkJX19lbnRyeS0mZ3Q7aW5vLAogCQlfX2VudHJ5LSZndDttZW1jZ19pZCwKIAkJX19lbnRyeS0mZ3Q7Y2dyb3VwX2lubywKLQkJX19lbnRyeS0mZ3Q7cGFnZV9jZ3JvdXBfaW5vCiYjNDM7CQlfX2VudHJ5LSZndDtwYWdlX2Nncm91cF9pbm8sCiYjNDM7CQlNQUpPUihfX2VudHJ5LSZndDtkZXYpLCBNSU5PUihfX2VudHJ5LSZndDtkZXYpCiAJKQogKTsKIAogVFJBQ0VfRVZFTlQoZmx1c2hfZm9yZWlnbiwKIAogCVRQX1BST1RPKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgaW50IGZybl9iZGlfaWQsCi0JCSB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkKSwKJiM0MzsJCSB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkLCBkZXZfdCBkZXYpLAogCi0JVFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkKSwKJiM0MzsJVFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkLCBkZXYpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19hcnJheShjaGFyLAkJbmFtZSwgMzIpCiAJCV9fZmllbGQodTY0LAkJY2dyb3VwX2lubykKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsCWZybl9iZGlfaWQpCiAJCV9fZmllbGQodW5zaWduZWQgaW50LAlmcm5fbWVtY2dfaWQpCiYjNDM7CQlfX2ZpZWxkKGRldl90LAkJZGV2KQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTMzMCwxMyAmIzQzOzMzNCwxNSBAQCBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLAogCQlfX2VudHJ5LSZndDtjZ3JvdXBfaW5vCT0gX190cmFjZV93Yl9hc3NpZ25fY2dyb3VwKHdiKTsKIAkJX19lbnRyeS0mZ3Q7ZnJuX2JkaV9pZAk9IGZybl9iZGlfaWQ7CiAJCV9fZW50cnktJmd0O2Zybl9tZW1jZ19pZAk9IGZybl9tZW1jZ19pZDsKJiM0MzsJCV9fZW50cnktJmd0O2RldgkJPSBkZXY7CiAJKSwKIAotCVRQX3ByaW50aygmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1JiMzNDssCiYjNDM7CVRQX3ByaW50aygmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1IGRldj0ldToldSYjMzQ7LAogCQlfX2VudHJ5LSZndDtuYW1lLAogCQlfX2VudHJ5LSZndDtjZ3JvdXBfaW5vLAogCQlfX2VudHJ5LSZndDtmcm5fYmRpX2lkLAotCQlfX2VudHJ5LSZndDtmcm5fbWVtY2dfaWQKJiM0MzsJCV9fZW50cnktJmd0O2Zybl9tZW1jZ19pZCwKJiM0MzsJCU1BSk9SKF9fZW50cnktJmd0O2RldiksIE1JTk9SKF9fZW50cnktJmd0O2RldikKIAkpCiApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMDc4NGY2ZTQwYWVjYyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzksNiAmIzQzOzM5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWZsYWdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFja2luZy1kZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0X3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKQEAgLTEwNCw2ICYjNDM7MTA1LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptZW1jZ19wbl9jYWNoZXA7CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lbWNnX2Nnd2JfZnJuX3dhaXRxKTsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgX19yb19hZnRlcl9pbml0OwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2lzX2R5aW5nKHZvaWQpCkBAIC0zODQ1LDYgJiM0MzszODQ3LDQxIEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBCZGV2IGlub2RlcyBhcmUgY29tbW9ubHkgc2hhcmVkIGJ5IG1hbnkgbWVtY2dzLiBGbHVzaGluZyB0aGVpciBvd25lciB3YgomIzQzOyAqIGNhbiB3cml0ZSB1bnJlbGF0ZWQgZmlsZSBkYXRhLCBzbyByZWNvcmQgZGV2aWNlIG51bWJlcnMgc2VwYXJhdGVseSBhbmQKJiM0MzsgKiBmbHVzaCBvbmx5IHRoZSBiZGV2IG1hcHBpbmdzLiBUcmFja2luZyBpcyBiZXN0IGVmZm9ydDogcmVjb3JkIG9ubHkgZGV2X3QKJiM0MzsgKiB3aXRob3V0IGhvbGRpbmcgZGV2aWNlIG9yIGlub2RlIHJlZmVyZW5jZXMsIHNvIGl0IG1heSByYWNlIHdpdGggZGV2aWNlCiYjNDM7ICogcmVtb3ZhbCBhbmQgcmUtYWRkaXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBfX2ZvbGlvX21hcmtfZGlydHkoKSB0YWtlcyBtYXBwaW5nLSZndDtpX3BhZ2VzIHdpdGggeGFfbG9ja19pcnFzYXZlKCkKJiM0MzsJICogYmVmb3JlIHJlYWNoaW5nIHRoaXMgaGVscGVyLiBVc2UgaXJxc2F2ZSBoZXJlIGFzIHdlbGwgc28gZnJuX2xvY2smIzM5O3MKJiM0MzsJICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bWVtY2ctJmd0O2Zybl9sb2NrLCBmbGFncyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobWVtY2ctJmd0O2JkZXZfZnJuW2ldLmRldiA9PSBkZXYpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWN0eCA9ICZhbXA7bWVtY2ctJmd0O2JkZXZfZnJuW2ldOwomIzQzOwkJaWYgKGN0eC0mZ3Q7aW5mbGlnaHQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQljdHgtJmd0O2RldiA9IGRldjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bWVtY2ctJmd0O2Zybl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoKICAqIEZvcmVpZ24gZGlydHkgZmx1c2hpbmcKICAqCkBAIC0zODc1LDE3ICYjNDM7MzkxMiwxNyBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLAogICogbW9zdCByZWNlbnQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgYW5kIGluaXRpYXRpbmcgcmVtb3RlIGZsdXNoZXMgb24KICAqIHRoZW0gd2hlbiBsb2NhbCB3cml0ZWJhY2sgaXNuJiMzOTt0IGVub3VnaCB0byBrZWVwIHRoZSBtZW1vcnkgY2xlYW4gZW5vdWdoLgogICoKLSAqIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgc3VjaCBtZWNoYW5pc20uICBXaGVuIGEgZm9yZWlnbgotICogcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmQgd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJiMzOTt0IG1hdGNoIC0gaXMKLSAqIGRpcnRpZWQsIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZwotICogYmRpX3dyaXRlYmFjayBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuICBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKQotICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHMKJiM0MzsgKiBGb3Igbm9uLWJkZXYgaW5vZGVzLCB3aGVuIGEgZm9yZWlnbiBwYWdlIC0gYSBwYWdlIHdob3NlIG1lbWNnIGFuZAomIzQzOyAqIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbiYjMzk7dCBtYXRjaCAtIGlzIGRpcnRpZWQsCiYjNDM7ICogbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KCkgcmVjb3JkcyB0aGUgaW5vZGUgb3duaW5nIGJkaV93cml0ZWJhY2sKJiM0MzsgKiBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpIGRlY2lkZXMgdGhhdCB0aGUKJiM0MzsgKiBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHMKICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkCiAgKiBmb3JlaWduIGJkaV93cml0ZWJhY2tzIHdoaWNoIGhhdmVuJiMzOTt0IGV4cGlyZWQuICBCb3RoIHRoZSBudW1iZXJzIG9mCiAgKiByZWNvcmRlZCBiZGlfd3JpdGViYWNrcyBhbmQgY29uY3VycmVudCBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzIGFyZQogICogbGltaXRlZCB0byBNRU1DR19DR1dCX0ZSTl9DTlQuCiAgKgotICogVGhlIG1lY2hhbmlzbSBvbmx5IHJlbWVtYmVycyBJRHMgYW5kIGRvZXNuJiMzOTt0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLgomIzQzOyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbiYjMzk7dCBob2xkIGFueSBvYmplY3QgcmVmZXJlbmNlcy4KICAqIEFzIGJlaW5nIHdyb25nIG9jY2FzaW9uYWxseSBkb2VzbiYjMzk7dCBtYXR0ZXIsIHVwZGF0ZXMgYW5kIGFjY2Vzc2VzIHRvIHRoZQogICogcmVjb3JkcyBhcmUgbG9ja2xlc3MgYW5kIHJhY3kuCiAgKi8KQEAgLTM4OTgsOCAmIzQzOzM5MzUsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbywKIAl1NjQgb2xkZXN0X2F0ID0gbm93OwogCWludCBvbGRlc3QgPSAtMTsKIAlpbnQgaTsKJiM0MzsJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKJiM0MzsJc3RydWN0IGlub2RlICpiZGV2X2lub2RlID0gbWFwcGluZyA/IG1hcHBpbmctJmd0O2hvc3QgOiBOVUxMOwomIzQzOwomIzQzOwlpZiAobWVtY2dfYmRldl9mcm5fZmx1c2hlciAmYW1wOyZhbXA7IGJkZXZfaW5vZGUgJmFtcDsmYW1wOwomIzQzOwkgICAgc2JfaXNfYmxrZGV2X3NiKGJkZXZfaW5vZGUtJmd0O2lfc2IpKSB7CiYjNDM7CQl0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgYmRldl9pbm9kZS0mZ3Q7aV9yZGV2KTsKJiM0MzsJCW1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KG1lbWNnLCBiZGV2X2lub2RlLSZndDtpX3JkZXYpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQl0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3Yik7CiYjNDM7CXRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiLCAwKTsKIAogCS8qCiAJICogUGljayB0aGUgc2xvdCB0byB1c2UuICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2xvdCBmb3IgQHdiLCBrZWVwCkBAIC0zOTQxLDYgJiM0MzszOTg3LDI1IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHgsIHdvcmspOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwliZGV2X2ZsdXNoX2J5X2RldihjdHgtJmd0O2Rldik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBkaXJ0eSB0cmFja2luZyBwYXRoIHRha2VzIGZybl9sb2NrIHdoaWxlIGhvbGRpbmcgbWFwcGluZy0mZ3Q7aV9wYWdlcy4KJiM0MzsJICogRGlzYWJsZSBsb2NhbCBJUlFzIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggSS9PIGNvbXBsZXRpb24KJiM0MzsJICogaGFuZGxlcnMgdGhhdCBhbHNvIHRha2UgbWFwcGluZy0mZ3Q7aV9wYWdlcy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDttZW1jZy0mZ3Q7ZnJuX2xvY2ssIGZsYWdzKTsKJiM0MzsJY3R4LSZndDtpbmZsaWdodCA9IGZhbHNlOwomIzQzOwljdHgtJmd0O2RldiA9IDA7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O21lbWNnLSZndDtmcm5fbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovCiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpCiB7CkBAIC0zOTQ5LDYgJiM0Mzs0MDE0LDE5IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKIAl1NjQgbm93ID0gamlmZmllc182NDsKIAlpbnQgaTsKIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV07CiYjNDM7CQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttZW1jZy0mZ3Q7ZnJuX2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmICghY3R4LSZndDtpbmZsaWdodCAmYW1wOyZhbXA7IGN0eC0mZ3Q7ZGV2KSB7CiYjNDM7CQkJY3R4LSZndDtpbmZsaWdodCA9IHRydWU7CiYjNDM7CQkJdHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgMCwgMCwgY3R4LSZndDtkZXYpOwomIzQzOwkJCXF1ZXVlX3dvcmsobWVtY2dfYmRldl9mcm5fZmx1c2hlciwgJmFtcDtjdHgtJmd0O3dvcmspOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21lbWNnLSZndDtmcm5fbG9jaywgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IG1lbWNnX2Nnd2JfZnJuICpmcm4gPSAmYW1wO21lbWNnLSZndDtjZ3diX2ZybltpXTsKIApAQCAtMzk2MSw3ICYjNDM7NDAzOSw4IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKIAkJaWYgKHRpbWVfYWZ0ZXI2NChmcm4tJmd0O2F0LCBub3cgLSBpbnR2KSAmYW1wOyZhbXA7CiAJCSAgICBhdG9taWNfcmVhZCgmYW1wO2Zybi0mZ3Q7ZG9uZS5jbnQpID09IDEpIHsKIAkJCWZybi0mZ3Q7YXQgPSAwOwotCQkJdHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgZnJuLSZndDtiZGlfaWQsIGZybi0mZ3Q7bWVtY2dfaWQpOwomIzQzOwkJCXRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi0mZ3Q7YmRpX2lkLCBmcm4tJmd0O21lbWNnX2lkLAomIzQzOwkJCQkJICAgIDApOwogCQkJY2dyb3VwX3dyaXRlYmFja19ieV9pZChmcm4tJmd0O2JkaV9pZCwgZnJuLSZndDttZW1jZ19pZCwKIAkJCQkJICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILAogCQkJCQkgICAgICAgJmFtcDtmcm4tJmd0O2RvbmUpOwpAQCAtNDIwMiw5ICYjNDM7NDI4MSwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAltZW1jZy0mZ3Q7a21lbWNnX2lkID0gLTE7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21lbWNnLSZndDtjZ3diX2xpc3QpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV07CiYjNDM7CiAJCW1lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lID0KIAkJCV9fV0JfQ09NUExFVElPTl9JTklUKCZhbXA7bWVtY2dfY2d3Yl9mcm5fd2FpdHEpOwomIzQzOwkJSU5JVF9XT1JLKCZhbXA7Y3R4LSZndDt3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKTsKJiM0MzsJCWN0eC0mZ3Q7bWVtY2cgPSBtZW1jZzsKJiM0MzsJfQomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO21lbWNnLSZndDtmcm5fbG9jayk7CiAjZW5kaWYKIAlscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpOwogCXJldHVybiBtZW1jZzsKQEAgLTQzODYsOCAmIzQzOzQ0NzEsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCWludCBfX21heWJlX3VudXNlZCBpOwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKLQlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKIAkJd2Jfd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO21lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lKTsKJiM0MzsJCWZsdXNoX3dvcmsoJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV0ud29yayk7CiYjNDM7CX0KICNlbmRpZgogCWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpICZhbXA7JmFtcDsgIWNncm91cF9tZW1vcnlfbm9zb2NrZXQpCiAJCXN0YXRpY19icmFuY2hfZGVjKCZhbXA7bWVtY2dfc29ja2V0c19lbmFibGVkX2tleSk7CkBAIC01NzAzLDYgJiM0Mzs1NzkwLDEyIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpCiAJbWVtY2dfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDttZW1jZyYjMzQ7LCBXUV9QRVJDUFUsIDApOwogCVdBUk5fT04oIW1lbWNnX3dxKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwomIzQzOwltZW1jZ19iZGV2X2Zybl9mbHVzaGVyID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7bWVtY2dfYmRldl9mcm5fZmx1c2hlciYjMzQ7LAomIzQzOwkJCQkJICAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCk7CiYjNDM7CVdBUk5fT04oIW1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpOwomIzQzOyNlbmRpZgomIzQzOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJSU5JVF9XT1JLKCZhbXA7cGVyX2NwdV9wdHIoJmFtcDttZW1jZ19zdG9jaywgY3B1KS0mZ3Q7d29yaywKIAkJCSAgZHJhaW5fbG9jYWxfbWVtY2dfc3RvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODk0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHRvIHNlZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCB0YXJnZXQgZm9yIHN5emthbGxlci4gVGhlIGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgc28gdGhhdCYjMzk7cyBnb29kLiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgZnVuY3Rpb24gYGJkZXZfZmx1c2hfYnlfZGV2YCBiZWluZyBhZGRlZCBpbiBgYmxvY2svYmRldi5jYCwgYWxvbmcgd2l0aCBhIGRlY2xhcmF0aW9uIGluIGBibGtkZXYuaGAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gYmUgZGVzaWduZWQgdG8gZmx1c2ggYSBibG9jayBkZXZpY2UgYmFzZWQgb24gaXRzIGBkZXZfdGAgaWRlbnRpZmllci4gSXQgZ3JhYnMgdGhlIGJsb2NrIGRldmljZSwgdHJpZXMgdG8gbG9jayB0aGUgYG9wZW5fbXV0ZXhgLCBjaGVja3MgaWYgaXQmIzM5O3Mgb3BlbmVkLCBhbmQgaWYgc28sIGNhbGxzIGBzeW5jX2Jsb2NrZGV2X25vd2FpdGAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBmbHVzaGluZyBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGFzeW5jaHJvbm91cyBvbmVzLCBvZnRlbiBleHBvc2UgaW50ZXJlc3RpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgYnVncy4KClRoZSBjaGFuZ2VzIHRvIGBtZW1jb250cm9sLmhgIGFyZSBhIGJpdCBtb3JlIGludm9sdmVkLiBXZSYjMzk7dmUgZ290IGEgbmV3IGBiZGV2X2Zybl9mbHVzaF9jdHhgIHN0cnVjdCBhbmQgc29tZSBhZGRpdGlvbnMgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBmbHVzaCByZXF1ZXN0cywgYWxsIHVuZGVyIHRoZSBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoaW5nLiBUaGUgdHJhY2Vwb2ludCB1cGRhdGVzIGluIGB3cml0ZWJhY2suaGAgYXJlIGxpa2VseSBqdXN0IGZvciBpbnN0cnVtZW50YXRpb24uCgpUaGUgYG1tL21lbWNvbnRyb2wuY2AgY2hhbmdlcyBhcmUgdGhlIG1lYXQgb2YgaXQuIFdlJiMzOTt2ZSBnb3QgZnVuY3Rpb25zIHRvIHRyYWNrIGZvcmVpZ24gYmxvY2sgZGV2aWNlcyAoYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCksIG1vZGlmaWNhdGlvbnMgdG8gYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAgdG8gZGV0ZWN0IGBiZGV2X2lub2RlYCBhbmQgY2FsbCB0aGUgdHJhY2tpbmcgZnVuY3Rpb24sIGBiZGV2X2Zybl9mbHVzaF93b3JrYCBiZWluZyBhZGRlZCwgbW9kaWZpY2F0aW9ucyB0byBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCB0byBxdWV1ZSB3b3JrIHRvIGBtZW1jZ19iZGV2X2Zybl9mbHVzaGVyYCwgYW5kIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uL2ZyZWVpbmcgb2YgdGhpcyB3b3JrcXVldWUgaW4gYG1lbV9jZ3JvdXBfYWxsb2NgLCBgbWVtX2Nncm91cF9jc3NfZnJlZWAgYW5kIGBtZW1fY2dyb3VwX2luaXRgIHJlc3BlY3RpdmVseS4KCk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgZGlydHkgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGZsdXNoZWQgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4gVGhlIGFkZGVkIGZsdXNoaW5nIGZ1bmN0aW9uLCB0aGUgdHJhY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBhc3luY2hyb25vdXMgd29ya3F1ZXVlIGFsbCBwb2ludCB0byBhIHBvdGVudGlhbGx5IGNvbXBsZXggaW50ZXJhY3Rpb24uIE5vdywgdGhlIG5leHQgdGhpbmcgdG8gdmVyaWZ5IGlzIHdoYXQgY29uZmlndXJhdGlvbnMgZW5hYmxlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgdXMgaG93IGJyb2FkbHkgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwuIFRoaXMgaXMgc2hhcGluZyB1cCB0byBiZSBhIHByZXR0eSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYW5kIHRoZSB0aWdodCBpbnRlZ3JhdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZSYjMzk7cyBhIGhpZ2ggcHJvYmFiaWxpdHkgb2YgZmluZGluZyBpbnRlcmVzdGluZyBjb25jdXJyZW5jeSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9XUklURUJBQ0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTExMjU9Y29uZmlnIEJMS19DR1JPVVBcbi0tXG5pbml0L0tjb25maWctMTE0Ni1cbmluaXQvS2NvbmZpZzoxMTQ3OmNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG5pbml0L0tjb25maWctMTE0OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSwgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpdHNlbGYuIFNwZWNpZmljYWxseSwgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGEgbG90IG9mIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgem9vbSBpbiBvbiB0aGF0IGZpbGUsIGFuZCBJJiMzOTtsbCBqdW1wIHJpZ2h0IHRvIGFyb3VuZCBsaW5lIDExNDcuIFRoYXQgZmVlbHMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgaW50by4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBidWlsZCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdE9uZSBuZWVkcyB0byBhbHNvIGVuYWJsZSBhY3R1YWwgSU8gY29udHJvbGxpbmcgbG9naWMvcG9saWN5LiBGb3JcbjExNDE6XHRcdGVuYWJsaW5nIHByb3BvcnRpb25hbCB3ZWlnaHQgZGl2aXNpb24gb2YgZGlzayBiYW5kd2lkdGggaW4gQ0ZRLCBzZXRcbjExNDI6XHRcdENPTkZJR19CRlFfR1JPVVBfSU9TQ0hFRD15OyBmb3IgZW5hYmxpbmcgdGhyb3R0bGluZyBwb2xpY3ksIHNldFxuMTE0MzpcdFx0Q09ORklHX0JMS19ERVZfVEhST1RUTElORz15LlxuMTE0NDpcdFxuMTE0NTpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE0NjpcdFxuMTE0NzpcdGNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4xMTQ4Olx0XHRib29sXG4xMTQ5Olx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUwOlx0XHRkZWZhdWx0IHlcbjExNTE6XHRcbjExNTI6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1MzpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NDpcdFx0ZGVmYXVsdCBuXG4xMTU1Olx0XHRoZWxwXG4xMTU2Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1NzpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTg6XHRcdCAgdGFza3MuXG4xMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU3NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBvcnRhbmNlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBgQ0dST1VQX1dSSVRFQkFDS2AgZGVwZW5kcyBvbiBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAgYW5kIGRlZmF1bHRzIHRvICYjMzk7eSYjMzk7LiBTbywgcmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBhcmUgZXNzZW50aWFsIHRvIGNvbnNpZGVyIGZvciB0aGlzIHBhdGNoLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyBhY3R1YWxseSB0b3VjaGVzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIHN1YnN5c3RlbXMgbW9kaWZpZWQgYXJlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW0vbWVtY29udHJvbC5jYCkgYW5kIHRoZSBibG9jayBsYXllciAoYGJsb2NrL2JkZXYuY2ApLiBBbHJpZ2h0LCBzb3VuZHMgbGlrZSBpbnRlcmVzdGluZyBjb2RlLiBJcyB0aGlzIHJlYWNoYWJsZSBjb2RlPyBZZXMsIHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBjZ3JvdXBzIHdyaXRlYmFjayBhbmQgZGlydHlpbmcgcGFnZXMgb24gYmxvY2sgZGV2aWNlcy4gU28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgbG9vcCBkZXZpY2VzLCByYW1kaXNrcywgcmF3IGJsb2NrIGRldmljZXMsIG9yIGV2ZW4gZm9yZWlnbiBkaXJ0eSB0cmFja2luZyBpZiBhIHBhZ2UgaW4gb25lIG1lbWNnIGlzIGRpcnRpZWQgZm9yIGEgYmxvY2sgZGV2aWNlIHdoZXJlIHRoZSB3cml0ZWJhY2sgaXMgaGFuZGxlZCBieSBhIGRpZmZlcmVudCBtZW1jZyBvciBldmVuIHRoZSByb290IGNncm91cC4KCkdpdmVuIHRoYXQgaXQgdG91Y2hlcyB0aGUgY29yZSBzdWJzeXN0ZW1zLCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgYW5kIGl0IGlzIHJlbGF0ZWQgdG8gZXhlY3V0YWJsZSBjb2RlLCB0aGlzIHNjcmVhbXMgYFdvcnRoRnV6emluZz10cnVlYC4gVGhpcyBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIGNyaXRlcmlhIHRoZXkmIzM5O3ZlIGRlZmluZWQ6IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBjb2RlIHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLiBEZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuCgpMZXQmIzM5O3Mgc2VlLCB0aGUgZnVuY3Rpb25zL3N5bWJvbHMgaW52b2x2ZWQ6IEluIGBibG9jay9iZGV2LmNgLCB3ZSBoYXZlIGBiZGV2X2ZsdXNoX2J5X2RldmAuIEluIGBtbS9tZW1jb250cm9sLmNgLCBJIHNlZSBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgICh0aGF0JiMzOTtzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gbm90ZSksIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoYW5vdGhlciBzdGF0aWMgb25lKSwgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAsIGFuZCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYC4KCkhvbGQgb24sIGxldCBtZSBjaGVjayBzb21ldGhpbmcgYWJvdXQgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eWAuIElzIHRoYXQgYW4gaW5saW5lIGZ1bmN0aW9uPyBHb3R0YSBtYWtlIHN1cmUgSSB0cmFjayBkb3duIHdoZXJlIHRoYXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgYmVmb3JlIEkgbWFrZSBhIGZpbmFsIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE1MT1zdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGRzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjctICpcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE2ODogKiBTZWUgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKCkgZm9yIGRldGFpbHMuXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjktICovXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTU5Mz12b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE1OTYtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNTk3OnZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk4LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk5LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYwMDpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjAxLVx0XHRcdFx0XHRcdCAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MTMtXHRpZiAodW5saWtlbHkoXHUwMDI2bWVtY2ctXHUwMDNlY3NzICE9IHdiLVx1MDAzZW1lbWNnX2NzcykpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjE0Olx0XHRtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoZm9saW8sIHdiKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MTUtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjI3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yixcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjM0LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYzNTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjM2LVx0XHRcdFx0XHRcdCAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zODU3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZGV2X3QgZGV2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zOTE2LSAqIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbiYjMzk7dCBtYXRjaCAtIGlzIGRpcnRpZWQsXG5tbS9tZW1jb250cm9sLmM6MzkxNzogKiBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmcgYmRpX3dyaXRlYmFja1xubW0vbWVtY29udHJvbC5jLTM5MTgtICogb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKSBkZWNpZGVzIHRoYXQgdGhlXG4tLVxubW0vbWVtY29udHJvbC5jLTM5MjgtICovXG5tbS9tZW1jb250cm9sLmM6MzkyOTp2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vbWVtY29udHJvbC5jLTM5MzAtXHRcdFx0XHRcdCAgICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYwMz1zdGF0aWMgdm9pZCBmb2xpb19hY2NvdW50X2RpcnRpZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MjctXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI2Mjg6XHRcdG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShmb2xpbywgd2IpO1xubW0vcGFnZS13cml0ZWJhY2suYy0yNjI5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjkyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgc2VlIHRoYXQgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAgaXMgYSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gQW5kIGp1c3QgdG8ga2VlcCB0aGUgZnVsbCBwaWN0dXJlIGluIG1pbmQsIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gIGlzIGFsc28gZGVmaW5lZCB0aGVyZS4gR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gVGltZSB0byB0cmFjZSBpdHMgY2FsbGVycy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9mbHVzaF9mb3JlaWduJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MDA9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MTctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjE4OnZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjE5LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MzU9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzktXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjQwOnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTY0MS17XG4tLVxubW0vbWVtY29udHJvbC5jPTM4NTc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpXG4tLVxubW0vbWVtY29udHJvbC5jLTM5MTktICogbWVtY2cgbmVlZHMgdG8gc2xlZXAgZHVlIHRvIGhpZ2ggZGlydHkgcmF0aW8sIGl0IGNhbGxzXG5tbS9tZW1jb250cm9sLmM6MzkyMDogKiBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oKSB3aGljaCBxdWV1ZXMgd3JpdGViYWNrIG9uIHRoZSByZWNvcmRlZFxubW0vbWVtY29udHJvbC5jLTM5MjEtICogZm9yZWlnbiBiZGlfd3JpdGViYWNrcyB3aGljaCBoYXZlbiYjMzk7dCBleHBpcmVkLiAgQm90aCB0aGUgbnVtYmVycyBvZlxuLS1cbm1tL21lbWNvbnRyb2wuYz0zOTkwPXN0YXRpYyB2b2lkIGJkZXZfZnJuX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MDA5LS8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovXG5tbS9tZW1jb250cm9sLmM6NDAxMDp2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG5tbS9tZW1jb250cm9sLmMtNDAxMS17XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0xNzkxPXN0YXRpYyBpbnQgYmFsYW5jZV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0xODY2LVxubW0vcGFnZS13cml0ZWJhY2suYzoxODY3Olx0XHRtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24od2IpO1xubW0vcGFnZS13cml0ZWJhY2suYy0xODY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIGBiZGV2X2ZsdXNoX2J5X2RldmAqKgoKT2theSwgc28gd2UmIzM5O3ZlIGlkZW50aWZpZWQgdGhpcyBgYmRldl9mbHVzaF9ieV9kZXZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIHdlJiMzOTtyZSBpbnZlc3RpZ2F0aW5nLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwZXJmb3JtIGEgdGhvcm91Z2ggY29kZSByZXZpZXcuIFdlIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSBpdHMgYmVoYXZpb3IgYmFzZWQgb24gaXRzIG5hbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBvZiB1c2UuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFdlIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNrIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIHVzYWdlLCBzbyB3ZSYjMzk7cmUgbWFraW5nIHN1cmUgd2UgYXJlbiYjMzk7dCBtaXNzaW5nIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHRoYXQgY291bGQgbGVhZCB0byB0aGUgYmVoYXZpb3Igd2UmIzM5O3JlIG9ic2VydmluZy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgcHJvY2VzcyB0byBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JkZXZfZmx1c2hfYnlfZGV2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JkZXYuYz0yNjU9RVhQT1JUX1NZTUJPTF9HUEwoc3luY19ibG9ja2Rldl9ub3dhaXQpO1xuLS1cbmJsb2NrL2JkZXYuYy0yNjctLyoqXG5ibG9jay9iZGV2LmM6MjY4OiAqIGJkZXZfZmx1c2hfYnlfZGV2IC0gYXR0ZW1wdCB3cml0ZWJhY2sgb2YgYSBibG9jayBkZXZpY2UmIzM5O3MgcGFnZSBjYWNoZVxuYmxvY2svYmRldi5jLTI2OS0gKiBAZGV2OiB0YXJnZXQgYmxvY2sgZGV2aWNlIG51bWJlclxuLS1cbmJsb2NrL2JkZXYuYy0yNzMtICovXG5ibG9jay9iZGV2LmM6Mjc0OnZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KVxuYmxvY2svYmRldi5jLTI3NS17XG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xNzEyPWludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTcxMzp2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldik7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTE3MTQtdm9pZCBzeW5jX2JkZXZzKGJvb2wgd2FpdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTM5OTA9c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vbWVtY29udHJvbC5jLTM5OTUtXG5tbS9tZW1jb250cm9sLmM6Mzk5NjpcdGJkZXZfZmx1c2hfYnlfZGV2KGN0eC1cdTAwM2VkZXYpO1xubW0vbWVtY29udHJvbC5jLTM5OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjE0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9yZWlnbiBEaXJ0eSBQYWdlIEZsdXNoaW5nIGFuZCBGb2N1cyBTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXMgdHJpZ2dlcmVkLCBhbmQgSSYjMzk7bSBzdGFydGluZyBieSBsb29raW5nIGF0IGBiYWxhbmNlX2RpcnR5X3BhZ2VzYC4gSXQgY2FsbHMgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgd2hlbiB0aGUgYG1kdGNgIGhhcyBmb3JlaWduIGRpcnR5aW5nIG9yIHRoZSBkaXJ0eSByYXRpbyBpcyBoaWdoOyB0aGF0JiMzOTtzIHRoZSBjb3JlLgoKTm93LCBJJiMzOTttIHRyYWNpbmcgd2hlcmUgZWxzZSB0aGlzIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gIGZ1bmN0aW9uYWxpdHkgaXMgdG91Y2hlZC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgYmxvY2svYmRldi5jYCB3aXRoIGBiZGV2X2ZsdXNoX2J5X2RldmAuIEluIGBtbS9tZW1jb250cm9sLmNgLCB0aGVyZSYjMzk7cyBhIGJ1bmNoOiBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgIChzdGF0aWMpLCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCwgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgIChzdGF0aWMpLCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCBpdHNlbGYsIGBtZW1fY2dyb3VwX2FsbG9jYCwgYG1lbV9jZ3JvdXBfY3NzX2ZyZWVgLCBhbmQgYG1lbV9jZ3JvdXBfaW5pdGAuCgpXYWl0Li4uIGBtZW1fY2dyb3VwX2FsbG9jYCBpcyBwcmV0dHkgZ2VuZXJhbCwgaXNuJiMzOTt0IGl0PyBUaGF0JiMzOTtzIHVzZWQgZHVyaW5nIG1lbWNnIGNyZWF0aW9uLCB3aGljaCBpcyBldmVyeXdoZXJlLiBCdXQgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAsIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gLCBgYmRldl9mcm5fZmx1c2hfd29ya2AsIGBiZGV2X2ZsdXNoX2J5X2RldmAsIGFuZCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgIOKAkyB0aG9zZSBzZWVtIHNwZWNpZmljIHRvIGZvcmVpZ24gZGlydHlpbmcgYW5kIGJkZXYgZmx1c2hlcy4KCk9rYXksIGxldCYjMzk7cyBrZWVwIGdvaW5nLiBDYW4gSSBwdXQgc3RhdGljIGZ1bmN0aW9ucyBpbiBgRm9jdXNTeW1ib2xzYD8gTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBydWxlcy4gQWgsIHJpZ2h0LiBJIG5lZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMg4oCTIGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGV0Yy4gSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5IHBvaW50cy4gQW5kLCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGFyZSB0cmlja3ksIGFzIHRoZXkgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9scywgc28gdGFyZ2V0IG5vbi1zdGF0aWMgY2FsbGVycyBpbiBgLmNgIGZpbGVzLgoKQnV0IHdhaXQgYSBtaW51dGUsIHRoZSB0ZXh0IHNheXMgc3RhdGljIGZ1bmN0aW9ucyAqaW4qLmMgZmlsZXMgZG8gaGF2ZSBzeW1ib2wgYWRkcmVzc2VzISBMZXQgbWUgcmUtZXZhbHVhdGUgdGhlIGZ1bmN0aW9uczoKCiogICBgYmRldl9mbHVzaF9ieV9kZXZgIChub24tc3RhdGljKSAtIGdvb2QKKiAgIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoc3RhdGljIHdvcmsgaGFuZGxlcikgLSBPa2F5LCBtYXliZSBnb29kPwoqICAgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAgKG5vbi1zdGF0aWMpIC0gZ29vZAoqICAgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgKG5vbi1zdGF0aWMpIC0gZ29vZAoqICAgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCAoc3RhdGljIGhlbHBlcikgLSBTdGlsbCBub3Qgc3VyZS4uLgoKSXMgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCBpbmxpbmVkPyBJdCYjMzk7cyBzdGF0aWMsIGFuZCBvbmx5IGNhbGxlZCBvbmNlIHdpdGhpbiBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYC4gUGVyaGFwcy4KCkhvbGQgb24sIEkgc2VlIHNvbWV0aGluZy4gYGJkZXZfZnJuX2ZsdXNoX3dvcmtgJiMzOTtzIGFkZHJlc3MgaXMgKnRha2VuKiBpbiB0aGUgY29kZSAoYElOSVRfV09SSygmYW1wO2N0eC0mZ3Q7d29yaywgYmRldl9mcm5fZmx1c2hfd29yaylgKS4gVGhpcyBtZWFucyBpdCBjYW4gTkVWRVIgYmUgaW5saW5lZCEgSXQmIzM5O3MgZGVmaW5pdGVseSBhIGRpc3RpbmN0IHN5bWJvbCBpbiBgdm1saW51eGAuIEFuZCBgYmRldl9mbHVzaF9ieV9kZXZgIGlzIGV4cG9ydGVkLCBzbyB0aGF0IGlzIGFsc28gZGlzdGluY3QuIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgIGFuZCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCBhcmUgYm90aCBleHBvcnRlZCBmdW5jdGlvbnMsIHRvby4KCk9rYXksIG5vdyBsZXQmIzM5O3Mgc2VlIHdoYXQgY29uZmlncyBhcmUgcmVsZXZhbnQuIEkgc2VlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AgYW5kIEkga25vdyBpdCBkZXBlbmRzIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYC4KCk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gQ2hlY2tpbmcgYGJsb2NrL2JkZXYuY2AsIGBiZGV2X2ZsdXNoX2J5X2RldmAgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBibG9jay9NYWtlZmlsZWAuIEkgdGhpbmsgSSYjMzk7bSBzdGFydGluZyB0byBnZXQgYSBnb29kIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JkZXZcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL01ha2VmaWxlPTY9Q09OVEVYVF9BTkFMWVNJUyA6PSB5XG5ibG9jay9NYWtlZmlsZS03LVxuYmxvY2svTWFrZWZpbGU6ODpvYmoteVx0XHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxuYmxvY2svTWFrZWZpbGUtOS1cdFx0XHRibGstZmx1c2gubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQ4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgYG9iai0kKENPTkZJR19CTE9DSylgIGluIHRoZSByb290IGBNYWtlZmlsZWAgb3IgYEtjb25maWdgLCBzcGVjaWZpY2FsbHkgdG8gc2VlIHdoYXQgYGJsb2NrL2AgZGVwZW5kcyBvbiAtIHByZXN1bWFibHkgYENPTkZJR19CTE9DS2AsIGJ1dCBsZXQmIzM5O3MgY29uZmlybS4gQWxyaWdodCwgdGhhdCYjMzk7cyBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgY2hlY2sgb3V0IGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBhbmQgdGhlc2UgYmxvY2sgY2dyb3VwIGZlYXR1cmVzLiBBaCwgeWVzLCBgbW0vbWVtY29udHJvbC5jYCBkZXBlbmRzIG9uIGBDT05GSUdfTUVNQ0dgLiBNYWtlcyBzZW5zZS4gSSBrbm93IHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgY29kZSBpbiB0aGVyZS4gSSBiZXQgaXQgaGFzIHRvIGRvIHdpdGggdGhlIGJsb2NrIGNncm91cCBzdHVmZi4KCkxldCBtZSBjaGVjayBpbnNpZGUgYG1tL21lbWNvbnRyb2wuY2AuLi4gYWgsIHllcy4gVGhlIGZvcmVpZ24gdHJhY2tpbmcgY29kZSBhbmQgdGhlIG5ldyBmaWVsZHMgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCBhcmUgYWxsIHByb3RlY3RlZCBieSBgI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYC4gVGhhdCYjMzk7cyB0aGUgbGluay4gU28gYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBpcyBrZXkuCgpSaWdodCwgc28gdG8gdHJhY2UgdGhpcyBiYWNrLCBJIG5lZWQgdG8gY2hlY2sgYGluaXQvS2NvbmZpZ2AgYWdhaW4gdG8gY29uZmlybSB0aGUgcmVsYXRpb25zaGlwcy4gTGV0JiMzOTtzIHNlZS4uLiBgTUVNQ0dgIGRlcGVuZHMgb24gYENHUk9VUFNgLiBHb3QgaXQuIE5vdywgKnRoYXQqIGBDR1JPVVBfV1JJVEVCQUNLYCBkZXBlbmRzIG9uIGJvdGggYE1FTUNHICZhbXA7JmFtcDsgQkxLX0NHUk9VUGAuIEdvb2QuIEkmIzM5O20gZ2V0dGluZyBhIGNsZWFyZXIgcGljdHVyZS4KCk9rYXksIG15IGZpbmFsIHBpZWNlIG9mIGluZm9ybWF0aW9uLCBJIHdhbnQgdG8gY29uZmlybSBpZiBgQkxPQ0tgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgYEJMS19DR1JPVVBgLiBJIGhhdmUgdG8gYmUgc3VyZSBvZiB0aGUgZGVwZW5kZW5jeSB0cmVlLiBJIGNhbiYjMzk7dCBidWlsZCBzb21ldGhpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24gdGhhdCYjMzk7cyBnb2luZyB0byBmYWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxuLS1cbmJsb2NrL0tjb25maWctNDEtXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxuYmxvY2svS2NvbmZpZy00My1cdGJvb2xcbmJsb2NrL0tjb25maWctNDQtXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG5ibG9jay9LY29uZmlnLTQ2LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTQ0LVxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbmJsb2NrL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE2My1cbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuYmxvY2svS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O0Nncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1wmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xMTA4PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTI0LVxuaW5pdC9LY29uZmlnOjExMjU6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTI2LVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjM5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLCBgaW5pdC9LY29uZmlnYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDExMjUsIHdoaWNoLCBiYXNlZCBvbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBsaWtlbHkgY29udGFpbnMgc29tZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgYSByZWxhdGVkIGdyb3VwaW5nIG9mIHNldHRpbmdzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGhpZ2gtbGV2ZWwgbW9kdWxlIGRlZmluaXRpb24sIGEgY3J1Y2lhbCBkZXZpY2UgZHJpdmVyIHBhcmFtZXRlciwgb3IgcGVyaGFwcyBhIHNlY3Rpb24gdGhhdCBzZXRzIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbml0aWFsIHJhbWRpc2sgb3Igcm9vdCBmaWxlc3lzdGVtIG9wdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGhvdyB0aGVzZSBjb21wb25lbnRzIGNvbWUgdG9nZXRoZXIgdG8gZm9ybSB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTEyMTpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTIyOlx0XG4xMTIzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExMjQ6XHRcbjExMjU6XHRjb25maWcgQkxLX0NHUk9VUFxuMTEyNjpcdFx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4xMTI3Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4xMTI4Olx0XHRkZWZhdWx0IG5cbjExMjk6XHRcdGhlbHBcbjExMzA6XHRcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cbjExMzE6XHRcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xuMTEzMjpcdFx0cG9saWNpZXMuXG4xMTMzOlx0XG4xMTM0Olx0XHRDdXJyZW50bHksIENGUSBJTyBzY2hlZHVsZXIgdXNlcyBpdCB0byByZWNvZ25pemUgdGFzayBncm91cHMgYW5kXG4xMTM1Olx0XHRjb250cm9sIGRpc2sgYmFuZHdpZHRoIGFsbG9jYXRpb24gKHByb3BvcnRpb25hbCB0aW1lIHNsaWNlIGFsbG9jYXRpb24pXG4xMTM2Olx0XHR0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCBpcyBhbHNvIHVzZWQgYnkgYmlvIHRocm90dGxpbmcgbG9naWMgaW5cbjExMzc6XHRcdGJsb2NrIGxheWVyIHRvIGltcGxlbWVudCB1cHBlciBsaW1pdCBpbiBJTyByYXRlcyBvbiBhIGRldmljZS5cbjExMzg6XHRcbjExMzk6XHRcdFRoaXMgb3B0aW9uIG9ubHkgZW5hYmxlcyBnZW5lcmljIEJsb2NrIElPIGNvbnRyb2xsZXIgaW5mcmFzdHJ1Y3R1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTI5CgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDg5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZvcmVpZ24gRGlydHkgVHJhY2tpbmcgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gRmlyc3QsIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgc3RyYWlnaHRmb3J3YXJkLiBgQkxLX0NHUk9VUGAgZGVwZW5kcyBvbiBgQkxPQ0tgLiBgQ0dST1VQX1dSSVRFQkFDS2AgZGVwZW5kcyBvbiBib3RoIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYC4gQW5kLCBvZiBjb3Vyc2UsIGBNRU1DR2AgcmVsaWVzIG9uIGBDR1JPVVBTYC4gU28sIHRvIGVuYWJsZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBzZXR0aW5nIGBDR1JPVVBfV1JJVEVCQUNLYCwgYE1FTUNHYCwgYEJMS19DR1JPVVBgLCBhbmQgYEJMT0NLYCBjb3ZlcnMgdGhlIHJlcXVpcmVtZW50cy4gSXQmIzM5O3Mgd29ydGggbm90aW5nIHRoYXQgYENHUk9VUF9XUklURUJBQ0tgIGlzIGEgc2ltcGxlIGJvb2xlYW4gaW4gYGluaXQvS2NvbmZpZ2AgdGhhdCYjMzk7cyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGlmIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCAoYW5kIHRoZXJlZm9yZSBgQkxPQ0tgKSBhcmUgZW5hYmxlZCDigJMgc28sIGxpc3RpbmcgYWxsIGZvdXIgaW4gYEVuYWJsZUNvbmZpZ3NgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IGFwcHJvYWNoIGFuZCBnb29kIHByYWN0aWNlIGZvciBjbGFyaXR5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gV2UmIzM5O3ZlIGdvdDoKCiogICBgYmRldl9mbHVzaF9ieV9kZXZgOiBBIG5ldyBmdW5jdGlvbiBpbnRyb2R1Y2VkIGluIGBibG9jay9iZGV2LmNgLgoqICAgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgOiBBIG5ldyB3b3JrIGZ1bmN0aW9uIGludHJvZHVjZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuCiogICBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYDogQSBtb2RpZmllZCBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC4KKiAgIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gOiBBbm90aGVyIG1vZGlmaWVkIGZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgLgoqICAgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YDogQSBuZXcgZnVuY3Rpb24gaW4gYG1tL21lbWNvbnRyb2wuY2AuCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBpZGVudGlmaWVkIGFsbCB0aGUgY2FsbGVycyBvZiB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBgYmRldl9mbHVzaF9ieV9kZXZgIGNhbGxzIGBibGtkZXZfZ2V0X25vX29wZW5gLCBgbXV0ZXhfdHJ5bG9ja2Agb24gYGJkX2Rpc2stJmd0O29wZW5fbXV0ZXhgLCBgc3luY19ibG9ja2Rldl9ub3dhaXRgLCBhbmQgYGJsa2Rldl9wdXRfbm9fb3BlbmAuCgpUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyBmb3JlaWduIGRpcnR5IHRyYWNraW5nIGZvciBibG9jayBkZXZpY2UgaW5vZGVzIGFjcm9zcyBjZ3JvdXBzLiBUaGUgZ2lzdCBpcywgd2hlbiBhIGZvcmVpZ24gYmxvY2sgZGV2aWNlIGZvbGlvIGlzIGRpcnRpZWQgd2l0aGluIGEgbWVtY2csIGluc3RlYWQgb2YgdGhlIG9sZCBiZWhhdmlvciBvZiB0cmFja2luZyB3YiBhbmQgZmx1c2hpbmcgcG90ZW50aWFsbHkgdW5yZWxhdGVkIGlub2RlcywgaXQgbm93IHJlY29yZHMgdGhlIGJsb2NrIGRldmljZSBudW1iZXIgaW4gYG1lbWNnLSZndDtiZGV2X2ZybmAgYW5kIGxhdGVyIGNhbGxzIGBiZGV2X2Zybl9mbHVzaF93b3JrYCBhc3luY2hyb25vdXNseSBvbiBgbWVtY2dfYmRldl9mcm5fZmx1c2hlcmAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgYmRldl9mbHVzaF9ieV9kZXZgLgoKVGhpcyBpcyBhIG5vbi10cml2aWFsIGNoYW5nZSwgaW52b2x2aW5nIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbG9ja2luZyB3aXRoIGBmcm5fbG9ja2AgKGEgc3BpbmxvY2sgbmVzdGVkIGluc2lkZSBgbWFwcGluZy0mZ3Q7aV9wYWdlc2ApLCBhc3luY2hyb25vdXMgd29ya3F1ZXVlIGRpc3BhdGNoIHRocm91Z2ggYG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXJgLCBsaWZlY3ljbGUgc3luY2hyb25pemF0aW9uIHVzaW5nIGBmbHVzaF93b3JrYCBpbnNpZGUgYG1lbV9jZ3JvdXBfY3NzX2ZyZWVgLCBhbmQgYmxvY2sgZGV2aWNlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IHdpdGggbXV0ZXggaGFuZGxpbmcgaW4gYGJkZXZfZmx1c2hfYnlfZGV2YC4gVGhpcyBpcyBxdWludGVzc2VudGlhbCBjb3JlIE1NL2Jsb2NrIGxheWVyIGNvZGUsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgcHJpbWUgZm9yIGZ1enppbmcuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgd2UmIzM5O3ZlIGdvdCB0aGUgYEVuYWJsZUNvbmZpZ3NgOiBgQkxPQ0tgLCBgTUVNQ0dgLCBgQkxLX0NHUk9VUGAsIGFuZCBgQ0dST1VQX1dSSVRFQkFDS2AuIFRoZSBgRm9jdXNTeW1ib2xzYDogYGJkZXZfZmx1c2hfYnlfZGV2YCwgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgLCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgLCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCwgYW5kIGBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gLgoKSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFzeW5jaHJvbm91cyBmb3JlaWduIHdyaXRlYmFjayBoYW5kbGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBzaGFyZWQgYWNyb3NzIG1lbW9yeSBjZ3JvdXBzLiBJdCBhZGRzIGEgbmV3IGZsdXNoZXIgd29ya3F1ZXVlLCBuZXcgd29yayB0cmFja2luZyBsb2dpYyB3aXRoIGBmcm5fbG9ja2AsIGFuZCBibG9jayBkZXZpY2UgZmx1c2ggbG9naWMuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciBjb2RlIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSwgbGlmZXRpbWUsIGFuZCBsb2NraW5nIGlzc3VlcywgbWFraW5nIGl0IGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfV1JJVEVCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9mbHVzaF9ieV9kZXYmIzM0OywKICAgICYjMzQ7YmRldl9mcm5fZmx1c2hfd29yayYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mbHVzaF9mb3JlaWduJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXHUwMDNlaV9wYWdlcyksIGEgZGVkaWNhdGVkIHdvcmtxdWV1ZSAobWVtY2dfYmRldl9mcm5fZmx1c2hlciksIHdvcmsgaXRlbSBzeW5jaHJvbml6YXRpb24gZHVyaW5nIG1lbWNnIHRlYXJkb3duLCBhbmQgZGV2aWNlIGZsdXNoIGhhbmRsaW5nIGluIGJkZXZfZmx1c2hfYnlfZGV2LiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCB3YXJyYW50IGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5LCBsb2NrIG9yZGVyaW5nLCBhbmQgbGlmZWN5Y2xlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0NHUk9VUF9XUklURUJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZGV2X2ZsdXNoX2J5X2RldiYjMzQ7LAogICAgJiMzNDtiZGV2X2Zybl9mbHVzaF93b3JrJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgd3JpdGViYWNrIGxvZ2ljIGJ5IGFkZGluZyBkZWRpY2F0ZWQgZm9yZWlnbiBkaXJ0eSB0cmFja2luZyBhbmQgYXN5bmNocm9ub3VzIGZsdXNoaW5nIGZvciBibG9jayBkZXZpY2UgaW5vZGVzIGFjcm9zcyBtZW1vcnkgY2dyb3Vwcy4gSXQgaW50cm9kdWNlcyBuZXcgbG9ja2luZyAoZnJuX2xvY2sgbmVzdGluZyBpbnNpZGUgbWFwcGluZy1cdTAwM2VpX3BhZ2VzKSwgYSBkZWRpY2F0ZWQgd29ya3F1ZXVlIChtZW1jZ19iZGV2X2Zybl9mbHVzaGVyKSwgd29yayBpdGVtIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgbWVtY2cgdGVhcmRvd24sIGFuZCBkZXZpY2UgZmx1c2ggaGFuZGxpbmcgaW4gYmRldl9mbHVzaF9ieV9kZXYuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnQgZnV6emluZyBmb3IgY29uY3VycmVuY3ksIGxvY2sgb3JkZXJpbmcsIGFuZCBsaWZlY3ljbGUgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBkaXJ0eSBwYWdlIHRyYWNraW5nIGFuZCB3cml0ZWJhY2sgZm9yIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcyBieSBhZGRpbmcgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgdHJhY2tpbmcgZGlydHlpbmcgb2YgYmxvY2sgZGV2aWNlIGlub2RlcywgYW5kIGZsdXNoaW5nIHRoZW0gdmlhIGRlZGljYXRlZCBhc3luY2hyb25vdXMgd29yayAoYGJkZXZfZmx1c2hfYnlfZGV2YCkuXG5cbktNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pLlxuMi4gRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4YCBpbnN0YW5jZXMgYXJlIGVtYmVkZGVkIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIChlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uKSwgYW5kIGBJTklUX1dPUksoKWAgLyBgY3R4LVx1MDAzZW1lbWNnYCBhcmUgZXhwbGljaXRseSBzZXQgZHVyaW5nIGBtZW1fY2dyb3VwX2FsbG9jKClgLlxuMy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc2NhbGFyIGFyZ3VtZW50cyAoc3VjaCBhcyBgZGV2X3QgZGV2YCBpbiB0cmFjZXBvaW50cyBhbmQgaGVscGVyIGZ1bmN0aW9ucykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGV2YWx1YXRpb24uXG40LiBUaGUgcHJpbWFyeSByaXNrcyBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgbG9jayBvcmRlcmluZyAoYGZybl9sb2NrYCBuZXN0aW5nLCBJUlEgZGlzYWJsZW1lbnQsIGFuZCBgb3Blbl9tdXRleGAgdHJ5bG9jaykgYW5kIGJsb2NrIGRldmljZSByZWZlcmVuY2UgbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgZGVidWcgY2hlY2tzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmY2ZDg0YjIyNWFjNzJiMDU0ZTQ5MTI1YjVjNjgyYjNhMjc0MzA3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDExOjM2OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jCmluZGV4IGNkODMyMzA4Mzc0MDYuLmRhMWZjNTY5MjZmZDQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iZGV2LmMKQEAgLTI2NCw2ICYjNDM7MjY0LDMwIEBAIGludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY19ibG9ja2Rldl9ub3dhaXQpOwogCiYjNDM7LyoqCiYjNDM7ICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSYjMzk7cyBwYWdlIGNhY2hlCiYjNDM7ICogQGRldjogdGFyZ2V0IGJsb2NrIGRldmljZSBudW1iZXIKJiM0MzsgKgomIzQzOyAqIFNraXAgY2xvc2VkIGRldmljZXMgb3IgZGV2aWNlcyB3aG9zZSBvcGVuX211dGV4IGlzIGJ1c3kuCiYjNDM7ICogTWF5IHNsZWVwIHdoaWxlIHN1Ym1pdHRpbmcgd3JpdGViYWNrOyBkb2VzIG5vdCB3YWl0IGZvciBhbGwgSS9PIHRvIGNvbXBsZXRlLgomIzQzOyAqLwomIzQzO3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKJiM0MzsKJiM0MzsJYmRldiA9IGJsa2Rldl9nZXRfbm9fb3BlbihkZXYsIGZhbHNlKTsKJiM0MzsJaWYgKCFiZGV2KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBQcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBjbG9zaW5nIGJldHdlZW4gdGhlIGNoZWNrIGFuZCB3cml0ZWJhY2suICovCiYjNDM7CWlmIChtdXRleF90cnlsb2NrKCZhbXA7YmRldi0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCkpIHsKJiM0MzsJCWlmIChhdG9taWNfcmVhZCgmYW1wO2JkZXYtJmd0O2JkX29wZW5lcnMpKQomIzQzOwkJCXN5bmNfYmxvY2tkZXZfbm93YWl0KGJkZXYpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7YmRldi0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CX0KJiM0MzsJYmxrZGV2X3B1dF9ub19vcGVuKGJkZXYpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2sKICAqIGRldmljZSB2aWEgaXRzIG1hcHBpbmcuICBEb2VzIG5vdCB0YWtlIHRoZSBzdXBlcmJsb2NrIGxvY2suCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE3MTAsNiAmIzQzOzE3MTAsNyBAQCB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKIGludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwogaW50IHN5bmNfYmxvY2tkZXZfcmFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpOwogaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwomIzQzO3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KTsKIHZvaWQgc3luY19iZGV2cyhib29sIHdhaXQpOwogdm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spOwogdm9pZCBwcmludGtfYWxsX3BhcnRpdGlvbnModm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLmQ0NGQzY2U1MWI1MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xNzYsNiAmIzQzOzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4gewogCXN0cnVjdCB3Yl9jb21wbGV0aW9uIGRvbmU7CS8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBmcm5fbG9jayBwcm90ZWN0cyBkZXYgYW5kIGluZmxpZ2h0LgomIzQzOyAqIE5vIGV4dHJhIG1lbWNnIHJlZmVyZW5jZSBpcyB0YWtlbjogdGhpcyB3b3JrIGlzIGVtYmVkZGVkIGluIHRoZSBtZW1jZywKJiM0MzsgKiBhbmQgbWVtX2Nncm91cF9jc3NfZnJlZSgpIHdhaXRzIGZvciBpdCB0byBmaW5pc2ggYmVmb3JlIGZyZWVpbmcgdGhlIG1lbWNnLgomIzQzOyAqLwomIzQzO3N0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggewomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKJiM0MzsJZGV2X3QgZGV2OwomIzQzOwlib29sIGluZmxpZ2h0OwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBCdWNrZXQgZm9yIGFyYml0cmFyaWx5IGJ5dGUtc2l6ZWQgb2JqZWN0cyBjaGFyZ2VkIHRvIGEgbWVtb3J5CiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cApAQCAtMjc5LDYgJiM0MzsyOTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlzdHJ1Y3Qgd2JfZG9tYWluIGNnd2JfZG9tYWluOwogCXN0cnVjdCBtZW1jZ19jZ3diX2ZybiBjZ3diX2ZybltNRU1DR19DR1dCX0ZSTl9DTlRdOwomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IGJkZXZfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07CiYjNDM7CS8qIE5lc3RzIGluc2lkZSBtYXBwaW5nLSZndDtpX3BhZ2VzLiAqLwomIzQzOwlzcGlubG9ja190IGZybl9sb2NrOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKaW5kZXggMTNlZTA3NmNjZDE2Ni4uZmZkMWI4ZGY0MjMxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmgKQEAgLTI3Myw5ICYjNDM7MjczLDkgQEAgVFJBQ0VfRVZFTlQoaW5vZGVfc3dpdGNoX3dicywKIAogVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAotCVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksCiYjNDM7CVRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgZGV2X3QgZGV2KSwKIAotCVRQX0FSR1MoZm9saW8sIHdiKSwKJiM0MzsJVFBfQVJHUyhmb2xpbywgd2IsIGRldiksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2FycmF5KGNoYXIsCQluYW1lLCAzMikKQEAgLTI4NCw2ICYjNDM7Mjg0LDcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAkJX19maWVsZCh1NjQsCQljZ3JvdXBfaW5vKQogCQlfX2ZpZWxkKHU2NCwJCXBhZ2VfY2dyb3VwX2lubykKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsCW1lbWNnX2lkKQomIzQzOwkJX19maWVsZChkZXZfdCwJCWRldikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC0yOTUsMzQgJiM0MzsyOTYsMzcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSwKIAkJX19lbnRyeS0mZ3Q7aW5vCQk9IGlub2RlID8gaW5vZGUtJmd0O2lfaW5vIDogMDsKIAkJX19lbnRyeS0mZ3Q7bWVtY2dfaWQJPSB3Yi0mZ3Q7bWVtY2dfY3NzLSZndDtpZDsKIAkJX19lbnRyeS0mZ3Q7Y2dyb3VwX2lubwk9IF9fdHJhY2Vfd2JfYXNzaWduX2Nncm91cCh3Yik7CiYjNDM7CQlfX2VudHJ5LSZndDtkZXYJCT0gZGV2OwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJX19lbnRyeS0mZ3Q7cGFnZV9jZ3JvdXBfaW5vID0gY2dyb3VwX2lubyhmb2xpb19tZW1jZyhmb2xpbyktJmd0O2Nzcy5jZ3JvdXApOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkpLAogCi0JVFBfcHJpbnRrKCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUmIzM0OywKJiM0MzsJVFBfcHJpbnRrKCYjMzQ7YmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUgZGV2PSV1OiV1JiMzNDssCiAJCV9fZW50cnktJmd0O25hbWUsCiAJCV9fZW50cnktJmd0O2JkaV9pZCwKIAkJX19lbnRyeS0mZ3Q7aW5vLAogCQlfX2VudHJ5LSZndDttZW1jZ19pZCwKIAkJX19lbnRyeS0mZ3Q7Y2dyb3VwX2lubywKLQkJX19lbnRyeS0mZ3Q7cGFnZV9jZ3JvdXBfaW5vCiYjNDM7CQlfX2VudHJ5LSZndDtwYWdlX2Nncm91cF9pbm8sCiYjNDM7CQlNQUpPUihfX2VudHJ5LSZndDtkZXYpLCBNSU5PUihfX2VudHJ5LSZndDtkZXYpCiAJKQogKTsKIAogVFJBQ0VfRVZFTlQoZmx1c2hfZm9yZWlnbiwKIAogCVRQX1BST1RPKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgaW50IGZybl9iZGlfaWQsCi0JCSB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkKSwKJiM0MzsJCSB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkLCBkZXZfdCBkZXYpLAogCi0JVFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkKSwKJiM0MzsJVFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkLCBkZXYpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19hcnJheShjaGFyLAkJbmFtZSwgMzIpCiAJCV9fZmllbGQodTY0LAkJY2dyb3VwX2lubykKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsCWZybl9iZGlfaWQpCiAJCV9fZmllbGQodW5zaWduZWQgaW50LAlmcm5fbWVtY2dfaWQpCiYjNDM7CQlfX2ZpZWxkKGRldl90LAkJZGV2KQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTMzMCwxMyAmIzQzOzMzNCwxNSBAQCBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLAogCQlfX2VudHJ5LSZndDtjZ3JvdXBfaW5vCT0gX190cmFjZV93Yl9hc3NpZ25fY2dyb3VwKHdiKTsKIAkJX19lbnRyeS0mZ3Q7ZnJuX2JkaV9pZAk9IGZybl9iZGlfaWQ7CiAJCV9fZW50cnktJmd0O2Zybl9tZW1jZ19pZAk9IGZybl9tZW1jZ19pZDsKJiM0MzsJCV9fZW50cnktJmd0O2RldgkJPSBkZXY7CiAJKSwKIAotCVRQX3ByaW50aygmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1JiMzNDssCiYjNDM7CVRQX3ByaW50aygmIzM0O2JkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1IGRldj0ldToldSYjMzQ7LAogCQlfX2VudHJ5LSZndDtuYW1lLAogCQlfX2VudHJ5LSZndDtjZ3JvdXBfaW5vLAogCQlfX2VudHJ5LSZndDtmcm5fYmRpX2lkLAotCQlfX2VudHJ5LSZndDtmcm5fbWVtY2dfaWQKJiM0MzsJCV9fZW50cnktJmd0O2Zybl9tZW1jZ19pZCwKJiM0MzsJCU1BSk9SKF9fZW50cnktJmd0O2RldiksIE1JTk9SKF9fZW50cnktJmd0O2RldikKIAkpCiApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMDc4NGY2ZTQwYWVjYyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzksNiAmIzQzOzM5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlLWZsYWdzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFja2luZy1kZXYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0X3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKQEAgLTEwNCw2ICYjNDM7MTA1LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptZW1jZ19wbl9jYWNoZXA7CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lbWNnX2Nnd2JfZnJuX3dhaXRxKTsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgX19yb19hZnRlcl9pbml0OwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2lzX2R5aW5nKHZvaWQpCkBAIC0zODQ1LDYgJiM0MzszODQ3LDQxIEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBCZGV2IGlub2RlcyBhcmUgY29tbW9ubHkgc2hhcmVkIGJ5IG1hbnkgbWVtY2dzLiBGbHVzaGluZyB0aGVpciBvd25lciB3YgomIzQzOyAqIGNhbiB3cml0ZSB1bnJlbGF0ZWQgZmlsZSBkYXRhLCBzbyByZWNvcmQgZGV2aWNlIG51bWJlcnMgc2VwYXJhdGVseSBhbmQKJiM0MzsgKiBmbHVzaCBvbmx5IHRoZSBiZGV2IG1hcHBpbmdzLiBUcmFja2luZyBpcyBiZXN0IGVmZm9ydDogcmVjb3JkIG9ubHkgZGV2X3QKJiM0MzsgKiB3aXRob3V0IGhvbGRpbmcgZGV2aWNlIG9yIGlub2RlIHJlZmVyZW5jZXMsIHNvIGl0IG1heSByYWNlIHdpdGggZGV2aWNlCiYjNDM7ICogcmVtb3ZhbCBhbmQgcmUtYWRkaXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBfX2ZvbGlvX21hcmtfZGlydHkoKSB0YWtlcyBtYXBwaW5nLSZndDtpX3BhZ2VzIHdpdGggeGFfbG9ja19pcnFzYXZlKCkKJiM0MzsJICogYmVmb3JlIHJlYWNoaW5nIHRoaXMgaGVscGVyLiBVc2UgaXJxc2F2ZSBoZXJlIGFzIHdlbGwgc28gZnJuX2xvY2smIzM5O3MKJiM0MzsJICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bWVtY2ctJmd0O2Zybl9sb2NrLCBmbGFncyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobWVtY2ctJmd0O2JkZXZfZnJuW2ldLmRldiA9PSBkZXYpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWN0eCA9ICZhbXA7bWVtY2ctJmd0O2JkZXZfZnJuW2ldOwomIzQzOwkJaWYgKGN0eC0mZ3Q7aW5mbGlnaHQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQljdHgtJmd0O2RldiA9IGRldjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bWVtY2ctJmd0O2Zybl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoKICAqIEZvcmVpZ24gZGlydHkgZmx1c2hpbmcKICAqCkBAIC0zODc1LDE3ICYjNDM7MzkxMiwxNyBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLAogICogbW9zdCByZWNlbnQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgYW5kIGluaXRpYXRpbmcgcmVtb3RlIGZsdXNoZXMgb24KICAqIHRoZW0gd2hlbiBsb2NhbCB3cml0ZWJhY2sgaXNuJiMzOTt0IGVub3VnaCB0byBrZWVwIHRoZSBtZW1vcnkgY2xlYW4gZW5vdWdoLgogICoKLSAqIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgc3VjaCBtZWNoYW5pc20uICBXaGVuIGEgZm9yZWlnbgotICogcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmQgd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJiMzOTt0IG1hdGNoIC0gaXMKLSAqIGRpcnRpZWQsIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZwotICogYmRpX3dyaXRlYmFjayBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuICBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKQotICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHMKJiM0MzsgKiBGb3Igbm9uLWJkZXYgaW5vZGVzLCB3aGVuIGEgZm9yZWlnbiBwYWdlIC0gYSBwYWdlIHdob3NlIG1lbWNnIGFuZAomIzQzOyAqIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbiYjMzk7dCBtYXRjaCAtIGlzIGRpcnRpZWQsCiYjNDM7ICogbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KCkgcmVjb3JkcyB0aGUgaW5vZGUgb3duaW5nIGJkaV93cml0ZWJhY2sKJiM0MzsgKiBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpIGRlY2lkZXMgdGhhdCB0aGUKJiM0MzsgKiBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHMKICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkCiAgKiBmb3JlaWduIGJkaV93cml0ZWJhY2tzIHdoaWNoIGhhdmVuJiMzOTt0IGV4cGlyZWQuICBCb3RoIHRoZSBudW1iZXJzIG9mCiAgKiByZWNvcmRlZCBiZGlfd3JpdGViYWNrcyBhbmQgY29uY3VycmVudCBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzIGFyZQogICogbGltaXRlZCB0byBNRU1DR19DR1dCX0ZSTl9DTlQuCiAgKgotICogVGhlIG1lY2hhbmlzbSBvbmx5IHJlbWVtYmVycyBJRHMgYW5kIGRvZXNuJiMzOTt0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLgomIzQzOyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbiYjMzk7dCBob2xkIGFueSBvYmplY3QgcmVmZXJlbmNlcy4KICAqIEFzIGJlaW5nIHdyb25nIG9jY2FzaW9uYWxseSBkb2VzbiYjMzk7dCBtYXR0ZXIsIHVwZGF0ZXMgYW5kIGFjY2Vzc2VzIHRvIHRoZQogICogcmVjb3JkcyBhcmUgbG9ja2xlc3MgYW5kIHJhY3kuCiAgKi8KQEAgLTM4OTgsOCAmIzQzOzM5MzUsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbywKIAl1NjQgb2xkZXN0X2F0ID0gbm93OwogCWludCBvbGRlc3QgPSAtMTsKIAlpbnQgaTsKJiM0MzsJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTsKJiM0MzsJc3RydWN0IGlub2RlICpiZGV2X2lub2RlID0gbWFwcGluZyA/IG1hcHBpbmctJmd0O2hvc3QgOiBOVUxMOwomIzQzOwomIzQzOwlpZiAobWVtY2dfYmRldl9mcm5fZmx1c2hlciAmYW1wOyZhbXA7IGJkZXZfaW5vZGUgJmFtcDsmYW1wOwomIzQzOwkgICAgc2JfaXNfYmxrZGV2X3NiKGJkZXZfaW5vZGUtJmd0O2lfc2IpKSB7CiYjNDM7CQl0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgYmRldl9pbm9kZS0mZ3Q7aV9yZGV2KTsKJiM0MzsJCW1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KG1lbWNnLCBiZGV2X2lub2RlLSZndDtpX3JkZXYpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQl0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3Yik7CiYjNDM7CXRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiLCAwKTsKIAogCS8qCiAJICogUGljayB0aGUgc2xvdCB0byB1c2UuICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2xvdCBmb3IgQHdiLCBrZWVwCkBAIC0zOTQxLDYgJiM0MzszOTg3LDI1IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHgsIHdvcmspOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwliZGV2X2ZsdXNoX2J5X2RldihjdHgtJmd0O2Rldik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBkaXJ0eSB0cmFja2luZyBwYXRoIHRha2VzIGZybl9sb2NrIHdoaWxlIGhvbGRpbmcgbWFwcGluZy0mZ3Q7aV9wYWdlcy4KJiM0MzsJICogRGlzYWJsZSBsb2NhbCBJUlFzIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggSS9PIGNvbXBsZXRpb24KJiM0MzsJICogaGFuZGxlcnMgdGhhdCBhbHNvIHRha2UgbWFwcGluZy0mZ3Q7aV9wYWdlcy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDttZW1jZy0mZ3Q7ZnJuX2xvY2ssIGZsYWdzKTsKJiM0MzsJY3R4LSZndDtpbmZsaWdodCA9IGZhbHNlOwomIzQzOwljdHgtJmd0O2RldiA9IDA7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O21lbWNnLSZndDtmcm5fbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovCiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpCiB7CkBAIC0zOTQ5LDYgJiM0Mzs0MDE0LDE5IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKIAl1NjQgbm93ID0gamlmZmllc182NDsKIAlpbnQgaTsKIAomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV07CiYjNDM7CQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttZW1jZy0mZ3Q7ZnJuX2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmICghY3R4LSZndDtpbmZsaWdodCAmYW1wOyZhbXA7IGN0eC0mZ3Q7ZGV2KSB7CiYjNDM7CQkJY3R4LSZndDtpbmZsaWdodCA9IHRydWU7CiYjNDM7CQkJdHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgMCwgMCwgY3R4LSZndDtkZXYpOwomIzQzOwkJCXF1ZXVlX3dvcmsobWVtY2dfYmRldl9mcm5fZmx1c2hlciwgJmFtcDtjdHgtJmd0O3dvcmspOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21lbWNnLSZndDtmcm5fbG9jaywgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKIAkJc3RydWN0IG1lbWNnX2Nnd2JfZnJuICpmcm4gPSAmYW1wO21lbWNnLSZndDtjZ3diX2ZybltpXTsKIApAQCAtMzk2MSw3ICYjNDM7NDAzOSw4IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKIAkJaWYgKHRpbWVfYWZ0ZXI2NChmcm4tJmd0O2F0LCBub3cgLSBpbnR2KSAmYW1wOyZhbXA7CiAJCSAgICBhdG9taWNfcmVhZCgmYW1wO2Zybi0mZ3Q7ZG9uZS5jbnQpID09IDEpIHsKIAkJCWZybi0mZ3Q7YXQgPSAwOwotCQkJdHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgZnJuLSZndDtiZGlfaWQsIGZybi0mZ3Q7bWVtY2dfaWQpOwomIzQzOwkJCXRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi0mZ3Q7YmRpX2lkLCBmcm4tJmd0O21lbWNnX2lkLAomIzQzOwkJCQkJICAgIDApOwogCQkJY2dyb3VwX3dyaXRlYmFja19ieV9pZChmcm4tJmd0O2JkaV9pZCwgZnJuLSZndDttZW1jZ19pZCwKIAkJCQkJICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILAogCQkJCQkgICAgICAgJmFtcDtmcm4tJmd0O2RvbmUpOwpAQCAtNDIwMiw5ICYjNDM7NDI4MSwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAltZW1jZy0mZ3Q7a21lbWNnX2lkID0gLTE7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKIAlJTklUX0xJU1RfSEVBRCgmYW1wO21lbWNnLSZndDtjZ3diX2xpc3QpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV07CiYjNDM7CiAJCW1lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lID0KIAkJCV9fV0JfQ09NUExFVElPTl9JTklUKCZhbXA7bWVtY2dfY2d3Yl9mcm5fd2FpdHEpOwomIzQzOwkJSU5JVF9XT1JLKCZhbXA7Y3R4LSZndDt3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKTsKJiM0MzsJCWN0eC0mZ3Q7bWVtY2cgPSBtZW1jZzsKJiM0MzsJfQomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO21lbWNnLSZndDtmcm5fbG9jayk7CiAjZW5kaWYKIAlscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpOwogCXJldHVybiBtZW1jZzsKQEAgLTQzODYsOCAmIzQzOzQ0NzEsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQogCWludCBfX21heWJlX3VudXNlZCBpOwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0sKLQlmb3IgKGkgPSAwOyBpICZsdDsgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpJiM0MzsmIzQzOykKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspIHsKIAkJd2Jfd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO21lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lKTsKJiM0MzsJCWZsdXNoX3dvcmsoJmFtcDttZW1jZy0mZ3Q7YmRldl9mcm5baV0ud29yayk7CiYjNDM7CX0KICNlbmRpZgogCWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpICZhbXA7JmFtcDsgIWNncm91cF9tZW1vcnlfbm9zb2NrZXQpCiAJCXN0YXRpY19icmFuY2hfZGVjKCZhbXA7bWVtY2dfc29ja2V0c19lbmFibGVkX2tleSk7CkBAIC01NzAzLDYgJiM0Mzs1NzkwLDEyIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpCiAJbWVtY2dfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDttZW1jZyYjMzQ7LCBXUV9QRVJDUFUsIDApOwogCVdBUk5fT04oIW1lbWNnX3dxKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDSwomIzQzOwltZW1jZ19iZGV2X2Zybl9mbHVzaGVyID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7bWVtY2dfYmRldl9mcm5fZmx1c2hlciYjMzQ7LAomIzQzOwkJCQkJICAgICAgIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMCk7CiYjNDM7CVdBUk5fT04oIW1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpOwomIzQzOyNlbmRpZgomIzQzOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJSU5JVF9XT1JLKCZhbXA7cGVyX2NwdV9wdHIoJmFtcDttZW1jZ19zdG9jaywgY3B1KS0mZ3Q7d29yaywKIAkJCSAgZHJhaW5fbG9jYWxfbWVtY2dfc3RvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDk4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQ6IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIEJsb2NrIERldmljZSBGbHVzaGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoIHdpdGggYSBmb2N1cyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gc2NydXRpbnkuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgZm9jdXNlZCBvbiBpbnRyb2R1Y2luZyBhIG1lY2hhbmlzbSBmb3IgZmx1c2hpbmcgYmxvY2sgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggZm9yZWlnbiAoaS5lLiwgbm9uLXJlc2lkZW50KSBkYXRhIHdpdGhpbiBtZW1vcnkgY2dyb3VwcywgbGlrZWx5IHJlbGF0ZWQgdG8gd3JpdGViYWNrIG9wZXJhdGlvbnMuIFRoZSBgTmVlZHNLTVNBTj10cnVlYCBmbGFnIGlzIHByb2JhYmx5IHRyaWdnZXJlZCBieSBvbmUgb3IgbW9yZSBvZiBzZXZlcmFsIGZhY3RvcnMgaGVyZS4KCkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGJkZXZfZmx1c2hfYnlfZGV2YCwgdGhlIGNvcmUgZnVuY3Rpb24uIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBnZXRzIGEgYmxvY2sgZGV2aWNlIGZyb20gaXRzIGBkZXZfdGAgYW5kIGF0dGVtcHRzIGEgZmx1c2guIFRoZSBsb2NraW5nIHNlZW1zIHJlYXNvbmFibGUsIGFuZCB0aGUgYGJsa2Rldl9wdXRfbm9fb3BlbmAgc3VnZ2VzdHMgYSBzYWZlIGxpZmVjeWNsZS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4KCk5leHQsIHRoZSBuZXcgYHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHhgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byBgc3RydWN0IG1lbV9jZ3JvdXBgIGFyZSBzaWduaWZpY2FudC4gVGhpcyBjb250ZXh0IHNlZW1zIHRvIHRyYWNrIGJsb2NrIGRldmljZXMgZm9yIGZsdXNoaW5nIHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAuIFRoZSBgaW5mbGlnaHRgIGZsYWcgYW5kIGBkZXZgIGZpZWxkIGFyZSBrZXkuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgdGhlc2UgZmllbGRzIGNhbiBsZWFkIHRvIGEgY29uZGl0aW9uIHdoZXJlLCB3aXRoIHNwZWNpZmljIHRpbWluZyBzY2VuYXJpb3MsIHVuaW5pdGlhbGl6ZWQgZGF0YSBjYW4gbGVhay4KClRoZSB0cmFjZSBldmVudHMsIHNwZWNpZmljYWxseSB0aGUgdXBkYXRlcyB0byBgdHJhY2tfZm9yZWlnbl9kaXJ0eWAgYW5kIGBmbHVzaF9mb3JlaWduYCB3aXRoIHRoZSBgZGV2X3RgIGFyZ3VtZW50LCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZSBgX19lbnRyeS0mZ3Q7ZGV2ID0gZGV2YCBhc3NpZ25tZW50IHdpdGhpbiBgVFBfZmFzdF9hc3NpZ25gICpjb3VsZCogYmVjb21lIHByb2JsZW1hdGljIGlmIGBkZXZgIGlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgdHJhY2UgZXZlbnQgaXMgZmlyZWQuIFNpbWlsYXJseSwgdGhlIGBNQUpPUihfX2VudHJ5LSZndDtkZXYpLCBNSU5PUihfX2VudHJ5LSZndDtkZXYpYCBpbiBgVFBfcHJpbnRrYCByZWxpZXMgb24gdGhpcyBpbml0aWFsaXplZCBkYXRhLgoKTm93LCBsZXQmIzM5O3MgbW92ZSB0byBgbW0vbWVtY29udHJvbC5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXJgIHdvcmtxdWV1ZSBhbmQgdGhlIGZ1bmN0aW9ucyBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgLCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCwgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgLCBhbmQgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgYXJlIGNlbnRyYWwgdG8gdGhlIG5ldyBmdW5jdGlvbmFsaXR5LiBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgIGlzIHRoZSBmaXJzdCBzcG90IHdoZXJlIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGFwcGVhcnM6IGluIHRoZSBsb29wIGBtZW1jZy0mZ3Q7YmRldl9mcm5baV0uZGV2ID09IGRldmAgYW5kIGluIGBjdHgtJmd0O2RldiA9IGRldmAgYWZ0ZXIgYSBjaGVjayBmb3IgYCFjdHgtJmd0O2luZmxpZ2h0YC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZXJlIGNvdWxkIGJlIGNhc2VzIHdoZXJlIHdlIGhhdmUgdG8gZW5zdXJlIGBiZGV2X2ZybltpXS5kZXZgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE1vcmVvdmVyLCBgYmRldl9mcm5fZmx1c2hfd29ya2AgY2FsbHMgYGJkZXZfZmx1c2hfYnlfZGV2KGN0eC0mZ3Q7ZGV2KWAgYW5kIHRoZW4gcmVzZXRzIGBjdHgtJmd0O2luZmxpZ2h0YCBhbmQgYGN0eC0mZ3Q7ZGV2YCwgYnV0IHdpdGhvdXQgZ3VhcmFudGVlaW5nIGluaXRpYWxpemF0aW9uIGVsc2V3aGVyZS4gVGhpcyBpcyB3aGF0IHRyaWdnZXJlZCB0aGUgZmxhZy4KCmBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25gIGFsc28gaGFzIGEga2V5IGNoZWNrIG9uIGAhY3R4LSZndDtpbmZsaWdodCAmYW1wOyZhbXA7IGN0eC0mZ3Q7ZGV2YC4gVGhlIGtleSBoZXJlIGlzIGFnYWluIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlIG9mIHRoZSBzdHJ1Y3QgYGJkZXZfZnJuX2ZsdXNoX2N0eGA6IHdoYXQgaGFwcGVucyBpZiBgY3R4LSZndDtkZXZgIGlzIG5vdCBzZXQ/CgpGaW5hbGx5LCB0aGUgYWxsb2NhdGlvbiBvZiBgc3RydWN0IG1lbV9jZ3JvdXBgIGlzIGNydWNpYWwuIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGFsbCBmaWVsZHMsICppbmNsdWRpbmcqIHRoZSBgYmRldl9mcm5gIGFycmF5LCBhcmUgcHJvcGVybHkgemVyby1pbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbi4gSWYgdGhleSBhcmUgKm5vdCosIHdlIGhhdmUgYSBkZWZpbml0ZSBLTVNBTiBjYW5kaWRhdGUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgYWxsb2NhdGlvbiBwYXRoIHRocm91Z2ggYG1lbV9jZ3JvdXBfYWxsb2NgIHRvIHZlcmlmeSB0aGlzLgoKTXkgcHJlbGltaW5hcnkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggKnBvdGVudGlhbGx5KiBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgYmxvY2sgZGV2aWNlIGZsdXNoaW5nIHBhdGgsIHNwZWNpZmljYWxseSBpbiBob3cgdGhlIGBiZGV2X2Zybl9mbHVzaF9jdHhgIGlzIG1hbmFnZWQgYW5kIHRoZSBgZGV2YCBmaWVsZCBpcyBoYW5kbGVkLiBUaGUgY29tYmluYXRpb24gb2Ygd29ya3F1ZXVlIHVzZSwgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBgZGV2YCB2YWx1ZXMsIGFuZCB0cmFjZSBldmVudCBsb2dnaW5nIHN0cm9uZ2x5IHN1Z2dlc3QgdGhpcywgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IHRlc3QgYW5kIHZlcmlmeS4gVGhlIGBOZWVkc0tNU0FOPXRydWVgIGZsYWcgc2VlbXMgYXBwcm9wcmlhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY1xcKHNpemVvZlxcKHN0cnVjdCBtZW1fY2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nIHdpdGggYG1lbV9jZ3JvdXBfYWxsb2NgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBhIHNwZWNpZmljIGNncm91cC4gTXkgZ28tdG8gYXBwcm9hY2ggaW4gdGhpcyBzaXR1YXRpb24gaXMgdG8gc3RhcnQgd2l0aCB0aGUgYmFzaWNzLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGF0IG1lYW5zIGNoZWNraW5nIGBtZW1fY2dyb3VwX2FsbG9jYC4gSXQmIzM5O3MgdGhlIG1vc3QgZGlyZWN0IHJvdXRlIHRvIHVuZGVyc3RhbmRpbmcgY3VycmVudCBhbGxvY2F0aW9ucy4gSSYjMzk7bGwgbGlrZWx5IHVzZSBhIHNpbXBsZSBgcmVhZC1maWxlYCBjb21tYW5kLCBvciBzb21ldGhpbmcgc2ltaWxhciwgdG8gaW5zcGVjdCBpdHMgY29udGVudHMuIFRoaXMgZ2l2ZXMgbWUgYSBzbmFwc2hvdCBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGlzIG1vbWVudC4gRnJvbSB0aGVyZSwgSSBjYW4gc3RhcnQgZm9ybWluZyBoeXBvdGhlc2VzLCBwb3RlbnRpYWxseSBtb3Zpbmcgb24gdG8gbW9yZSBzb3BoaXN0aWNhdGVkIHRvb2xzIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQxOTA6XHRcbjQxOTE6XHRcdGxydXZlY19pbml0KFx1MDAyNnBuLVx1MDAzZWxydXZlYyk7XG40MTkyOlx0XHRwbi1cdTAwM2VtZW1jZyA9IG1lbWNnO1xuNDE5MzpcdFxuNDE5NDpcdFx0bWVtY2ctXHUwMDNlbm9kZWluZm9bbm9kZV0gPSBwbjtcbjQxOTU6XHRcdHJldHVybiB0cnVlO1xuNDE5NjpcdGZhaWw6XG40MTk3Olx0XHRmcmVlX21lbV9jZ3JvdXBfcGVyX25vZGVfaW5mbyhwbik7XG40MTk4Olx0XHRyZXR1cm4gZmFsc2U7XG40MTk5Olx0fVxuNDIwMDpcdFxuNDIwMTpcdHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjQyMDI6XHR7XG40MjAzOlx0XHRpbnQgbm9kZTtcbjQyMDQ6XHRcbjQyMDU6XHRcdGZvcl9lYWNoX25vZGUobm9kZSkge1xuNDIwNjpcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tub2RlXTtcbjQyMDc6XHRcdFx0aWYgKCFwbilcbjQyMDg6XHRcdFx0XHRjb250aW51ZTtcbjQyMDk6XHRcbjQyMTA6XHRcdFx0b2JqX2Nncm91cF9wdXQocG4tXHUwMDNlb3JpZ19vYmpjZyk7XG40MjExOlx0XHRcdGZyZWVfbWVtX2Nncm91cF9wZXJfbm9kZV9pbmZvKHBuKTtcbjQyMTI6XHRcdH1cbjQyMTM6XHRcdG1lbWNnMV9mcmVlX2V2ZW50cyhtZW1jZyk7XG40MjE0Olx0XHRrZnJlZShtZW1jZy1cdTAwM2V2bXN0YXRzKTtcbjQyMTU6XHRcdGZyZWVfcGVyY3B1KG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1KTtcbjQyMTY6XHRcdGtmcmVlKG1lbWNnKTtcbjQyMTc6XHR9XG40MjE4Olx0XG40MjE5Olx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjQyMjA6XHR7XG40MjIxOlx0XHRscnVfZ2VuX2V4aXRfbWVtY2cobWVtY2cpO1xuNDIyMjpcdFx0bWVtY2dfd2JfZG9tYWluX2V4aXQobWVtY2cpO1xuNDIyMzpcdFx0X19tZW1fY2dyb3VwX2ZyZWUobWVtY2cpO1xuNDIyNDpcdH1cbjQyMjU6XHRcbjQyMjY6XHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbjQyMjc6XHR7XG40MjI4Olx0XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xuNDIyOTpcdFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgxNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBhaW1lZCBhdCBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBtZW1fY2dyb3VwX2FsbG9jYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVzdCBvZiB0aGUgY29kZSByZWxhdGVkIHRvIGBtZW1fY2dyb3VwX2FsbG9jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIGNvZGUgaXMgZG9pbmcsIGJleW9uZCBqdXN0IHRoZSBiYXNpY3MuIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBoaWdoLWxldmVsIGNvbmNlcHQsIHRoZSAmIzM0O3doYXQmIzM0OyBvZiBtZW1vcnkgY2dyb3VwcywgYW5kIGl0cyBhYmlsaXR5IHRvIGxpbWl0IGFuZCBtb25pdG9yIG1lbW9yeSB1c2FnZS4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCB1bmRlcnN0YW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiAqaG93KiB0aGlzIGFsbG9jYXRpb24gb2NjdXJzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3I6CgoqICAgSG93IGlzIHRoZSBhbGxvY2F0aW9uIHNpemUgZGV0ZXJtaW5lZD8gSXMgaXQgYSBzdGF0aWMgdmFsdWUsIG9yIGR5bmFtaWNhbGx5IGNvbXB1dGVkIGJhc2VkIG9uIHZhcmlvdXMgZmFjdG9ycz8gV2hhdCBhcmUgdGhlIGZhY3RvcnM/CiogICBXaGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgZW1wbG95ZWQ/IEFyZSB0aGVyZSBjb250ZW50aW9uIHBvaW50cyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZGVhZGxvY2tzPwoqICAgSG93IGRvZXMgdGhlIGNvZGUgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgKGUuZy4sIHBhZ2UgYWxsb2NhdG9yLCBzbGFiIGFsbG9jYXRvcik/CiogICBXaGF0IGVycm9yIGhhbmRsaW5nIGlzIHByZXNlbnQ/IEFyZSB0aGVyZSBncmFjZWZ1bCBkZWdyYWRhdGlvbiBwYXRocywgb3IgYXJlIHRoZXJlIHBvdGVudGlhbCBmb3Igb3V0LW9mLW1lbW9yeSBzY2VuYXJpb3M/CiogICBIb3cgaXMgdGhlIGFsbG9jYXRpb24gYWNjb3VudGVkIGZvciB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHk/IEFyZSB0aGVyZSBwZXItY2dyb3VwIHN0YXRpc3RpY3MgdXBkYXRlZD8gV2hhdCBhYm91dCBuZXN0ZWQgY2dyb3Vwcz8KKiAgIEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBvciB0cmFkZS1vZmZzIGJlaW5nIG1hZGU/IFBlcmhhcHMgdGhlcmUgaXMgc29tZSBvdmVyLWFsbG9jYXRpb24gZm9yIHBlcmZvcm1hbmNlLgoqICAgQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzY2VuYXJpb3MgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBoYW5kbGUsIGxpa2UgTlVNQSBzeXN0ZW1zPwoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBjb250cm9sIGZsb3cgYnJhbmNoZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzZXMuIEkmIzM5O2xsIGJlIG1lbnRhbGx5IHNpbXVsYXRpbmcgdGhlIGV4ZWN1dGlvbiwgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgaG93IGBtZW1fY2dyb3VwX2FsbG9jYCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGVzc2VudGlhbCB0byBnYWluIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IGlzIGJlaW5nIGFsbG9jYXRlZCBpbiBhIGNncm91cCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDIzMDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDIzMTpcdFx0aW50IG5vZGUsIGNwdTtcbjQyMzI6XHRcdGludCBfX21heWJlX3VudXNlZCBpO1xuNDIzMzpcdFx0bG9uZyBlcnJvcjtcbjQyMzQ6XHRcbjQyMzU6XHRcdG1lbWNnID0ga21lbV9jYWNoZV96YWxsb2MobWVtY2dfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbjQyMzY6XHRcdGlmICghbWVtY2cpXG40MjM3Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuNDIzODpcdFxuNDIzOTpcdFx0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5pZCwgTlVMTCxcbjQyNDA6XHRcdFx0XHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbjQyNDE6XHRcdGlmIChlcnJvcilcbjQyNDI6XHRcdFx0Z290byBmYWlsO1xuNDI0MzpcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuNDI0NDpcdFxuNDI0NTpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDI0NjpcdFx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzKVxuNDI0NzpcdFx0XHRnb3RvIGZhaWw7XG40MjQ4Olx0XG40MjQ5Olx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxuNDI1MDpcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDI1MTpcdFx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSlcbjQyNTI6XHRcdFx0Z290byBmYWlsO1xuNDI1MzpcdFxuNDI1NDpcdFx0aWYgKCFtZW1jZzFfYWxsb2NfZXZlbnRzKG1lbWNnKSlcbjQyNTU6XHRcdFx0Z290byBmYWlsO1xuNDI1NjpcdFxuNDI1NzpcdFx0cHN0YXRjX3BjcHUgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0c19wZXJjcHUgOiBOVUxMO1xuNDI1ODpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuNDI1OTpcdFx0XHRzdGF0YyA9IHBlcl9jcHVfcHRyKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xuNDI2MDpcdFx0XHRzdGF0Yy1cdTAwM2VwYXJlbnRfcGNwdSA9IHBzdGF0Y19wY3B1O1xuNDI2MTpcdFx0XHRzdGF0Yy1cdTAwM2V2bXN0YXRzID0gbWVtY2ctXHUwMDNldm1zdGF0cztcbjQyNjI6XHRcdH1cbjQyNjM6XHRcbjQyNjQ6XHRcdGZvcl9lYWNoX25vZGUobm9kZSlcbjQyNjU6XHRcdFx0aWYgKCFhbGxvY19tZW1fY2dyb3VwX3Blcl9ub2RlX2luZm8obWVtY2csIG5vZGUpKVxuNDI2NjpcdFx0XHRcdGdvdG8gZmFpbDtcbjQyNjc6XHRcbjQyNjg6XHRcdGlmIChtZW1jZ193Yl9kb21haW5faW5pdChtZW1jZywgR0ZQX0tFUk5FTCkpXG40MjY5Olx0XHRcdGdvdG8gZmFpbDtcbjQyNzA6XHRcbjQyNzE6XHRcdElOSVRfV09SSyhcdTAwMjZtZW1jZy1cdTAwM2VoaWdoX3dvcmssIGhpZ2hfd29ya19mdW5jKTtcbjQyNzI6XHRcdHZtcHJlc3N1cmVfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2V2bXByZXNzdXJlKTtcbjQyNzM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9wZWFrcyk7XG40Mjc0Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX3BlYWtzKTtcbjQyNzU6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuNDI3NjpcdFx0bWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlID0gZ2V0X2ppZmZpZXNfNjQoKTtcbjQyNzc6XHQjaWYgQklUU19QRVJfTE9ORyBcdTAwM2MgNjRcbjQyNzg6XHRcdHNlcWxvY2tfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzb2NrZXRfcHJlc3N1cmVfc2VxbG9jayk7XG40Mjc5Olx0I2VuZGlmXG40MjgwOlx0XHRtZW1jZzFfbWVtY2dfaW5pdChtZW1jZyk7XG40MjgxOlx0XHRtZW1jZy1cdTAwM2VrbWVtY2dfaWQgPSAtMTtcbjQyODI6XHQjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbjQyODM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfbGlzdCk7XG40Mjg0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KSB7XG40Mjg1Olx0XHRcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuNDI4NjpcdFxuNDI4NzpcdFx0XHRtZW1jZy1cdTAwM2VjZ3diX2ZybltpXS5kb25lID1cbjQyODg6XHRcdFx0XHRfX1dCX0NPTVBMRVRJT05fSU5JVChcdTAwMjZtZW1jZ19jZ3diX2Zybl93YWl0cSk7XG40Mjg5Olx0XHRcdElOSVRfV09SSyhcdTAwMjZjdHgtXHUwMDNld29yaywgYmRldl9mcm5fZmx1c2hfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDExOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkluaXRpYWwgVGhvdWdodHMgb24gTWVtY2cgQWxsb2NhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBtZW1jZ2AgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBzZWVtcyB0byBiZSB0aGF0IGBtZW1jZ2AgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTClgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQ6IGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgYG1lbWNnYCBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBgYmRldl9mcm5gLCBnZXQgemVyby1pbml0aWFsaXplZCBmcm9tIHRoZSBnZXQtZ28uIFRoaXMgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGJlY2F1c2UgaXQgYWZmZWN0cyBob3cgd2UgY2FuIHJlbHkgb24gaW5pdGlhbCB2YWx1ZXMgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFyaXNpbmcgZnJvbSBhIGZpZWxkIG5vdCBiZWluZyBleHBsaWNpdGx5IHNldC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGF0IHRoZSB2ZXJ5IHRvcCBsZXZlbCwgdGhlIHJvb3Qgb2YgdGhlIG1lbWNnIGhpZXJhcmNoeS4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlIHJvb3QgYG1lbV9jZ3JvdXBgIGlzIGluaXRpYWxpemVkIHN0YXRpY2FsbHkgZHVyaW5nIGtlcm5lbCBzZXR1cCwgb3IgaWYgaXQgZ29lcyB0aHJvdWdoIHRoZSBgbWVtX2Nncm91cF9hbGxvY2AgcGF0aCBsaWtlIG90aGVyIG1lbWNncy4gR290dGEgYmUgc3VyZSBhYm91dCB0aGUgYmFzZSBjYXNlLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGluaXRpYWxpemF0aW9uIG9mIGByb290X21lbV9jZ3JvdXBgIHNwZWNpZmljYWxseSB0byB2ZXJpZnkgaG93IGl0IGlzIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyb290X21lbV9jZ3JvdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTgzPUVYUE9SVF9TWU1CT0wobWVtb3J5X2NncnBfc3Vic3lzKTtcbm1tL21lbWNvbnRyb2wuYy04NC1cbm1tL21lbWNvbnRyb2wuYzo4NTpzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1fY2dyb3VwIF9fcmVhZF9tb3N0bHk7XG5tbS9tZW1jb250cm9sLmM6ODY6RVhQT1JUX1NZTUJPTChyb290X21lbV9jZ3JvdXApO1xubW0vbWVtY29udHJvbC5jLTg3LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTg9c3RydWN0IHZtcHJlc3N1cmUgKm1lbWNnX3RvX3ZtcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMjAtXHRpZiAoIW1lbWNnKVxubW0vbWVtY29udHJvbC5jOjEyMTpcdFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMTIyLVx0cmV0dXJuIFx1MDAyNm1lbWNnLVx1MDAzZXZtcHJlc3N1cmU7XG4tLVxubW0vbWVtY29udHJvbC5jPTMyMz1FWFBPUlRfU1lNQk9MKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XG4tLVxubW0vbWVtY29udHJvbC5jLTMzMi0gKlxubW0vbWVtY29udHJvbC5jOjMzMzogKiBJZiBtZW1jZyBpcyBib3VuZCB0byBhIHRyYWRpdGlvbmFsIGhpZXJhcmNoeSwgdGhlIGNzcyBvZiByb290X21lbV9jZ3JvdXBcbm1tL21lbWNvbnRyb2wuYy0zMzQtICogaXMgcmV0dXJuZWQuXG4tLVxubW0vbWVtY29udHJvbC5jPTMzNj1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzQwLVx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxubW0vbWVtY29udHJvbC5jOjM0MTpcdFx0cmV0dXJuIFx1MDAyNnJvb3RfbWVtX2Nncm91cC1cdTAwM2Vjc3M7XG5tbS9tZW1jb250cm9sLmMtMzQyLVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zNDQtXG5tbS9tZW1jb250cm9sLmM6MzQ1Olx0cmV0dXJuIG1lbWNnID8gXHUwMDI2bWVtY2ctXHUwMDNlY3NzIDogXHUwMDI2cm9vdF9tZW1fY2dyb3VwLVx1MDAzZWNzcztcbm1tL21lbWNvbnRyb2wuYy0zNDYtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz03NzY9dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzgxLVx0aWYgKCFtZW1jZylcbm1tL21lbWNvbnRyb2wuYzo3ODI6XHRcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xubW0vbWVtY29udHJvbC5jLTc4My1cbi0tXG5tbS9tZW1jb250cm9sLmM9Nzk0PXN0YXRpYyB2b2lkIGZsdXNoX21lbWNnX3N0YXRzX2R3b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS9tZW1jb250cm9sLmMtNzk5LVx0ICovXG5tbS9tZW1jb250cm9sLmM6ODAwOlx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHJvb3RfbWVtX2Nncm91cCwgdHJ1ZSk7XG5tbS9tZW1jb250cm9sLmMtODAxLVx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9kZmxfd3EsIFx1MDAyNnN0YXRzX2ZsdXNoX2R3b3JrLCBGTFVTSF9USU1FKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTE1OT1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTE4My1cdFx0aWYgKHVubGlrZWx5KCFtbSkpXG5tbS9tZW1jb250cm9sLmM6MTE4NDpcdFx0XHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xubW0vbWVtY29udHJvbC5jLTExODUtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jLTExOTAtXHRcdGlmICh1bmxpa2VseSghbWVtY2cpKVxubW0vbWVtY29udHJvbC5jOjExOTE6XHRcdFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMTE5Mi1cdH0gd2hpbGUgKCFjc3NfdHJ5Z2V0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcykpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMjI1PXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtY29udHJvbC5jLTEyMzItXHRpZiAoIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKVxubW0vbWVtY29udHJvbC5jOjEyMzM6XHRcdHJldHVybiByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMTIzNC1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTI2MD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9pdGVyKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMjcyLVx0aWYgKCFyb290KVxubW0vbWVtY29udHJvbC5jOjEyNzM6XHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMTI3NC1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTM1Mj12b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTM1NS1cdGlmICghcm9vdClcbm1tL21lbWNvbnRyb2wuYzoxMzU2Olx0XHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xubW0vbWVtY29udHJvbC5jLTEzNTctXHRpZiAocHJldiBcdTAwMjZcdTAwMjYgcHJldiAhPSByb290KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMzc1PXN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMoc3RydWN0IG1lbV9jZ3JvdXAgKmRlYWRfbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTEzODctXHQgKiBwYXJlbnRfbWVtX2Nncm91cCgpIGRvZXMgbm90IHdhbGsgYWxsIHRoZSB3YXkgdXAgdG8gdGhlXG5tbS9tZW1jb250cm9sLmM6MTM4ODpcdCAqIGNncm91cCByb290IChyb290X21lbV9jZ3JvdXApLiBTbyB3ZSBoYXZlIHRvIGhhbmRsZVxubW0vbWVtY29udHJvbC5jLTEzODktXHQgKiBkZWFkX21lbWNnIGZyb20gY2dyb3VwIHJvb3Qgc2VwYXJhdGVseS5cbi0tXG5tbS9tZW1jb250cm9sLmMtMTM5MS1cdGlmICghbWVtX2Nncm91cF9pc19yb290KGxhc3QpKVxubW0vbWVtY29udHJvbC5jOjEzOTI6XHRcdF9faW52YWxpZGF0ZV9yZWNsYWltX2l0ZXJhdG9ycyhyb290X21lbV9jZ3JvdXAsXG5tbS9tZW1jb250cm9sLmMtMTM5My1cdFx0XHRcdFx0XHRkZWFkX21lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTk5ND1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9nZXRfb29tX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMDAzLVx0aWYgKCFvb21fZG9tYWluKVxubW0vbWVtY29udHJvbC5jOjIwMDQ6XHRcdG9vbV9kb21haW4gPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtMjAwNS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzA1Mj1fX2Fsd2F5c19pbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmN1cnJlbnRfb2JqX2Nncm91cCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDcyLVx0XHQgKi9cbm1tL21lbWNvbnRyb2wuYzozMDczOlx0XHRyZXR1cm4gb2JqY2cgPyA6IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VvYmpjZywgMSk7XG5tbS9tZW1jb250cm9sLmMtMzA3NC1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmMtMzA3OS1cbm1tL21lbWNvbnRyb2wuYzozMDgwOlx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VvYmpjZywgMSk7XG5tbS9tZW1jb250cm9sLmMtMzA4MS1cbi0tXG5tbS9tZW1jb250cm9sLmMtMzA5NC1cbm1tL21lbWNvbnRyb2wuYzozMDk1Olx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXHUwMDNlbm9kZWluZm9bbmlkXS1cdTAwM2VvYmpjZywgMSk7XG5tbS9tZW1jb250cm9sLmMtMzA5Ni19XG4tLVxubW0vbWVtY29udHJvbC5jPTQzMDM9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNDItI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NDM0MzpcdFx0cm9vdF9tZW1fY2dyb3VwID0gbWVtY2c7XG5tbS9tZW1jb250cm9sLmMtNDM0NC1cdFx0cmV0dXJuIFx1MDAyNm1lbWNnLVx1MDAzZWNzcztcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI3Mz12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tLVxubW0vbWVtY29udHJvbC5jLTUyODItXHRpZiAoIXJvb3QpXG5tbS9tZW1jb250cm9sLmM6NTI4MzpcdFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcbm1tL21lbWNvbnRyb2wuYy01Mjg0LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NzY0PV9fc2V0dXAoXCYjMzQ7Y2dyb3VwLm1lbW9yeT1cJiMzNDssIGNncm91cF9tZW1vcnkpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NzY2LS8qXG5tbS9tZW1jb250cm9sLmM6NTc2NzogKiBNZW1vcnkgY29udHJvbGxlciBpbml0IGJlZm9yZSBjZ3JvdXBfaW5pdCgpIGluaXRpYWxpemUgcm9vdF9tZW1fY2dyb3VwLlxubW0vbWVtY29udHJvbC5jLTU3NjgtICpcbi0tXG5tbS9tZW1jb250cm9sLmM9NjMwMD12b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtNjMwNS1cdGlmICghbWVtY2cpXG5tbS9tZW1jb250cm9sLmM6NjMwNjpcdFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XG5tbS9tZW1jb250cm9sLmMtNjMwNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENncm91cCBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLiBUaGUgY29kZSBoZXJlIGlzIHByZXR0eSBjbGVhcjsgaXQmIzM5O3MgY2FsbGluZyBgbWVtX2Nncm91cF9hbGxvY2AgZm9yICpldmVyeSogbWVtb3J5IGNncm91cCwgaW5jbHVkaW5nIHRoZSByb290IGNncm91cC4gVGhhdCBtYWtlcyBzZW5zZSwgd2UgbmVlZCB0byBpbml0aWFsaXplIHRoaW5ncyBhdCB0aGUgdG9wLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEl0JiMzOTtzIHRoZSBhbGxvY2F0aW9uIHN0ZXAsIG9idmlvdXNseSwgYnV0IHdoYXQgc3BlY2lmaWNhbGx5IGlzIGdldHRpbmcgYWxsb2NhdGVkIGF0IGVhY2ggbGV2ZWw/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzPyBIb3cgbXVjaCBtZW1vcnkgb3ZlcmhlYWQgYXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyIGNncm91cD8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgbWVtX2Nncm91cF9hbGxvY2Agbm93IHRvIGZ1bGx5IGdyYXNwIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgcm9vdCBjZ3JvdXAgYWxsb2NhdGlvbiBzcGVjaWZpY2FsbHksIGFuZCBob3cgaXQgY2FzY2FkZXMgZG93biB0byB0aGUgcmVzdC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDMwMDpcdH1cbjQzMDE6XHRcbjQzMDI6XHRzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKiBfX3JlZlxuNDMwMzpcdG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuNDMwNDpcdHtcbjQzMDU6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHBhcmVudF9jc3MpO1xuNDMwNjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xuNDMwNzpcdFx0Ym9vbCBtZW1jZ19vbl9kZmwgPSBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpO1xuNDMwODpcdFxuNDMwOTpcdFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpO1xuNDMxMDpcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XG40MzExOlx0XHRzZXRfYWN0aXZlX21lbWNnKG9sZF9tZW1jZyk7XG40MzEyOlx0XHRpZiAoSVNfRVJSKG1lbWNnKSlcbjQzMTM6XHRcdFx0cmV0dXJuIEVSUl9DQVNUKG1lbWNnKTtcbjQzMTQ6XHRcbjQzMTU6XHRcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuNDMxNjpcdFx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuNDMxNzpcdCNpZmRlZiBDT05GSUdfWlNXQVBcbjQzMTg6XHRcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG40MzE5Olx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG40MzIwOlx0I2VuZGlmXG40MzIxOlx0XHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7XG40MzIyOlx0XHRpZiAocGFyZW50KSB7XG40MzIzOlx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgXHUwMDI2cGFyZW50LVx1MDAzZW1lbW9yeSwgbWVtY2dfb25fZGZsKTtcbjQzMjQ6XHRcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbjQzMjU6XHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXG40MzI2Olx0XHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuNDMyNzpcdFx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG40MzI4Olx0XHRcdG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuNDMyOTpcdFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xuNDMzMDpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNla21lbSwgZmFsc2UpO1xuNDMzMTpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2V0Y3BtZW0sIFx1MDAyNnBhcmVudC1cdTAwM2V0Y3BtZW0sIGZhbHNlKTtcbjQzMzI6XHRcdFx0bWVtY2ctXHUwMDNldGNwbWVtLnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuNDMzMzpcdCNlbmRpZlxuNDMzNDpcdFx0fSBlbHNlIHtcbjQzMzU6XHRcdFx0aW5pdF9tZW1jZ19zdGF0cygpO1xuNDMzNjpcdFx0XHRpbml0X21lbWNnX2V2ZW50cygpO1xuNDMzNzpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIE5VTEwsIHRydWUpO1xuNDMzODpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XG40MzM5Olx0I2lmZGVmIENPTkZJR19NRU1DR19WMVxuNDM0MDpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XG40MzQxOlx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXRjcG1lbSwgTlVMTCwgZmFsc2UpO1xuNDM0MjpcdCNlbmRpZlxuNDM0MzpcdFx0XHRyb290X21lbV9jZ3JvdXAgPSBtZW1jZztcbjQzNDQ6XHRcdFx0cmV0dXJuIFx1MDAyNm1lbWNnLVx1MDAzZWNzcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MjEKCQkJCQkJCW91dHB1dDogMzIwCgkJCQkJCQl0aG91Z2h0czogMTcxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBvYnZpb3VzIEtNU0FOLXJlbGV2YW50IGlzc3VlcywgYnV0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIEZpcnN0LCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBpcyB0byByZWZpbmUgdGhlIHRyYWNraW5nIG9mIGZvcmVpZ24gZGlydHkgd3JpdGViYWNrcyByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcywgaW1wbGVtZW50aW5nIGEgcGVyLW1lbWNnIGJsb2NrIGRldmljZSBmbHVzaCB0cmFja2luZyBtZWNoYW5pc20gKGBiZGV2X2Zybl9mbHVzaF9jdHhgKSBhbmQgYXN5bmNocm9ub3VzIGZsdXNoIHdvcmsgKGBiZGV2X2ZsdXNoX2J5X2RldmApLiBUaGlzIHNob3VsZCBpbXByb3ZlIGVmZmljaWVuY3kgYnkgYXZvaWRpbmcgdGhlIGZsdXNoaW5nIG9mIHVucmVsYXRlZCB3cml0ZWJhY2tzLCBhbmQgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgbWVhbnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyBwYXR0ZXJucy4KCk5vdywgcnVubmluZyB0aHJvdWdoIHRoZSBjaGVja2xpc3QuIE51bWJlciBvbmUsIGFyZSB3ZSBzZW5kaW5nIGFueXRoaW5nIG5ldyB0byB1c2VyIHNwYWNlPyBOb3BlLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQsIGVpdGhlciB2aWEgc3lzdGVtIGNhbGxzLCBpb2N0bHMsIG9yIGFueXRoaW5nIGVsc2UuIFRoZSB0cmFjZXBvaW50cyBhcmUganVzdCByZWNvcmRpbmcgZXhpc3Rpbmcga2VybmVsIGRhdGEsIGFuZCB0aGUgc2NhbGFyIGBkZXZfdGAgaXMgcGFzc2VkIGJ5IHZhbHVlLiBTbywgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSBpbnRvIHRoZSB1c2VyIHNwYWNlLgoKTmV4dCwgYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZz8gSSYjMzk7bSBjaGVja2luZyB0aGUgY3J1Y2lhbCBjb25kaXRpb25zOiBgbWVtY2ctJmd0O2JkZXZfZnJuW2ldLmRldiA9PSBkZXZgIGFuZCBgY3R4LSZndDtpbmZsaWdodGAsIHdoaWNoIGJvdGggbG9vayBzYWZlIGdpdmVuIGBrbWVtX2NhY2hlX3phbGxvY2AgZ3VhcmFudGVlcyB6ZXJvLWluaXRpYWxpemF0aW9uLiBBbHNvLCBgYmRldl9mbHVzaF9ieV9kZXZgIGxvb2tzIG9rYXkg4oCTIHRoZSBgYmRldmAgcG9pbnRlciBpcyBhc3NpZ25lZCBmcm9tIGBibGtkZXZfZ2V0X25vX29wZW5gIGFuZCBjaGVja2VkLiBUaGUgc2xvdyBwYXRoIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgIGluaXRpYWxpemVzIHRoZSBgYmRldl9pbm9kZWAgYmVmb3JlIGl0cyB1c2UuIFRoZSBgYmRldl9mcm5fZmx1c2hfd29ya2AgY29udGV4dCBgY3R4YCBpcyBhbHNvIGZ1bGx5IGluaXRpYWxpemVkLiBTbywgbm8gb2J2aW91cyBpc3N1ZXMgdGhlcmUuCgpUaGlyZCwgd2hhdCBhYm91dCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyBUaGUgYGJkZXZfZnJuYCBzdHJ1Y3R1cmUgaXMgZW1iZWRkZWQgaW5zaWRlIHRoZSBgbWVtX2Nncm91cGAsIHdoaWNoIGlzIHplcm9lZCBvdXQgYnkgYGttZW1fY2FjaGVfemFsbG9jYCwgZm9sbG93ZWQgYnkgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uIFRoZSBgYmRldl9mcm5fZmx1c2hfY3R4YCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQsIHRvby4gVGhlcmVmb3JlLCBuby4gTm8gcmlza3MuCgpGaW5hbGx5LCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVjayBpc3N1ZXMsIGxlbmd0aCBpc3N1ZXMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm9wZS4gV2UmIzM5O3JlIGdvb2QuCgpHaXZlbiB0aGF0LCB3aGF0ICpjb3VsZCogZ28gd3Jvbmc/IExldCYjMzk7cyBjb25zaWRlciB0aGUgdXN1YWwgc3VzcGVjdHMuIExvY2tpbmcgaXMgYSBjb25jZXJuLCBzcGVjaWZpY2FsbHkgYGZybl9sb2NrYCBzcGlubG9jayB2cy4gSVJRIGNvbnRleHQsIGFuZCBkZWFkbG9ja3MgcmVsYXRlZCB0byBgbWFwcGluZy0mZ3Q7aV9wYWdlc2Agb3IgdGhlIGBvcGVuX211dGV4YC4gVGhlcmUgaXMgYWxzbyB0aGUgcG90ZW50aWFsIGZvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIG9yIFVBRiBidWdzIHdpdGggYGJkZXYtJmd0O2JkX2Rpc2tgIG9yIHRoZSBwYWlyZWQgYGJsa2Rldl9nZXRfbm9fb3BlbmAgLyBgYmxrZGV2X3B1dF9ub19vcGVuYCBjYWxscy4gRmluYWxseSwgcmFjZSBjb25kaXRpb25zIGFyZSBhIHBvc3NpYmlsaXR5LCB3aGljaCBpcyB0aGUgbmF0dXJlIG9mIGFzeW5jaHJvbm91cyB3b3JrLgoKSG93ZXZlciwgbm9uZSBvZiB0aG9zZSBhcmUgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiBidWdzIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBLQVNBTiwgTG9ja2RlcCwgYW5kIGdlbmVyYWwga2VybmVsIHRlc3Rpbmcgc2hvdWxkIGhhbmRsZSB0aGUgZXhwZWN0ZWQgaXNzdWVzLiBLQVNBTiB3aWxsIGRldGVjdCBVQUZzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIExvY2tkZXAgY2F0Y2hlcyBsb2NrIGludmVyc2lvbiBpc3N1ZXMuCgpMZXQmIzM5O3MgZG8gb25lIGxhc3QgZG91YmxlLWNoZWNrIG9mIHRoYXQgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgc3RydWN0dXJlLiBJdCYjMzk7cyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHRoZW4gYElOSVRfV09SS2AgaXMgY2FsbGVkIGFuZCBgbWVtY2dgIGlzIGFzc2lnbmVkLiBUaGUgYGRldmAgZmllbGQgaXMgemVybywgYW5kIGBpbmZsaWdodGAgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UuIEV4Y2VsbGVudC4gRXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRyYWNlcG9pbnRzIGFyZSBwYXNzaW5nIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcGFyYW1ldGVycy4KClRoZXJlZm9yZSwgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgS01TQU4gaXMgbm90IHJlcXVpcmVkIGhlcmUuIFRoaXMgcGF0Y2ggaGFzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGZvY3VzZWQgcGF0Y2gsIGFuZCB0aGF0JiMzOTtzIGNvdmVyZWQgYnkgb3RoZXIgdGVzdGluZyB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtY2cgZGlydHkgcGFnZSB0cmFja2luZyBhbmQgd3JpdGViYWNrIGZvciBibG9jayBkZXZpY2UgcGFnZSBjYWNoZXMgYnkgYWRkaW5nIGBiZGV2X2Zybl9mbHVzaF9jdHhgIHRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHRyYWNraW5nIGRpcnR5aW5nIG9mIGJsb2NrIGRldmljZSBpbm9kZXMsIGFuZCBmbHVzaGluZyB0aGVtIHZpYSBkZWRpY2F0ZWQgYXN5bmNocm9ub3VzIHdvcmsgKGBiZGV2X2ZsdXNoX2J5X2RldmApLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzOiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlICh2aWEgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBldGMuKS5cbjIuIERhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eGAgaW5zdGFuY2VzIGFyZSBlbWJlZGRlZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiksIGFuZCBgSU5JVF9XT1JLKClgIC8gYGN0eC1cdTAwM2VtZW1jZ2AgYXJlIGV4cGxpY2l0bHkgc2V0IGR1cmluZyBgbWVtX2Nncm91cF9hbGxvYygpYC5cbjMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHNjYWxhciBhcmd1bWVudHMgKHN1Y2ggYXMgYGRldl90IGRldmAgaW4gdHJhY2Vwb2ludHMgYW5kIGhlbHBlciBmdW5jdGlvbnMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBldmFsdWF0aW9uLlxuNC4gVGhlIHByaW1hcnkgcmlza3Mgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGxvY2sgb3JkZXJpbmcgKGBmcm5fbG9ja2AgbmVzdGluZywgSVJRIGRpc2FibGVtZW50LCBhbmQgYG9wZW5fbXV0ZXhgIHRyeWxvY2spIGFuZCBibG9jayBkZXZpY2UgcmVmZXJlbmNlIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGRlYnVnIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIGRpcnR5IHBhZ2UgdHJhY2tpbmcgYW5kIHdyaXRlYmFjayBmb3IgYmxvY2sgZGV2aWNlIHBhZ2UgY2FjaGVzIGJ5IGFkZGluZyBgYmRldl9mcm5fZmx1c2hfY3R4YCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB0cmFja2luZyBkaXJ0eWluZyBvZiBibG9jayBkZXZpY2UgaW5vZGVzLCBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgZGVkaWNhdGVkIGFzeW5jaHJvbm91cyB3b3JrIChgYmRldl9mbHVzaF9ieV9kZXZgKS5cblxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikuXG4yLiBEYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjogYHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHhgIGluc3RhbmNlcyBhcmUgZW1iZWRkZWQgaW4gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgKGVuc3VyaW5nIHplcm8taW5pdGlhbGl6YXRpb24pLCBhbmQgYElOSVRfV09SSygpYCAvIGBjdHgtXHUwMDNlbWVtY2dgIGFyZSBleHBsaWNpdGx5IHNldCBkdXJpbmcgYG1lbV9jZ3JvdXBfYWxsb2MoKWAuXG4zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzY2FsYXIgYXJndW1lbnRzIChzdWNoIGFzIGBkZXZfdCBkZXZgIGluIHRyYWNlcG9pbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgZXZhbHVhdGlvbi5cbjQuIFRoZSBwcmltYXJ5IHJpc2tzIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBsb2NrIG9yZGVyaW5nIChgZnJuX2xvY2tgIG5lc3RpbmcsIElSUSBkaXNhYmxlbWVudCwgYW5kIGBvcGVuX211dGV4YCB0cnlsb2NrKSBhbmQgYmxvY2sgZGV2aWNlIHJlZmVyZW5jZSBsaWZldGltZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM2OjM2LjI1NDYzODM1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzMxMjM1ODQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkNHUk9VUF9XUklURUJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZGV2X2ZsdXNoX2J5X2RldlwiLFxuICAgIFwiYmRldl9mcm5fZmx1c2hfd29ya1wiLFxuICAgIFwibWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZcIixcbiAgICBcIm1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aFwiLFxuICAgIFwibWVtX2Nncm91cF9mbHVzaF9mb3JlaWduXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBkaXJ0eSBwYWdlIHRyYWNraW5nIGFuZCB3cml0ZWJhY2sgZm9yIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcyBieSBhZGRpbmcgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgdHJhY2tpbmcgZGlydHlpbmcgb2YgYmxvY2sgZGV2aWNlIGlub2RlcywgYW5kIGZsdXNoaW5nIHRoZW0gdmlhIGRlZGljYXRlZCBhc3luY2hyb25vdXMgd29yayAoYGJkZXZfZmx1c2hfYnlfZGV2YCkuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pLlxcbjIuIERhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eGAgaW5zdGFuY2VzIGFyZSBlbWJlZGRlZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiksIGFuZCBgSU5JVF9XT1JLKClgIC8gYGN0eC1cXHUwMDNlbWVtY2dgIGFyZSBleHBsaWNpdGx5IHNldCBkdXJpbmcgYG1lbV9jZ3JvdXBfYWxsb2MoKWAuXFxuMy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc2NhbGFyIGFyZ3VtZW50cyAoc3VjaCBhcyBgZGV2X3QgZGV2YCBpbiB0cmFjZXBvaW50cyBhbmQgaGVscGVyIGZ1bmN0aW9ucykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGV2YWx1YXRpb24uXFxuNC4gVGhlIHByaW1hcnkgcmlza3Mgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGxvY2sgb3JkZXJpbmcgKGBmcm5fbG9ja2AgbmVzdGluZywgSVJRIGRpc2FibGVtZW50LCBhbmQgYG9wZW5fbXV0ZXhgIHRyeWxvY2spIGFuZCBibG9jayBkZXZpY2UgcmVmZXJlbmNlIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGRlYnVnIGNoZWNrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXFx1MDAzZWlfcGFnZXMpLCBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpLCB3b3JrIGl0ZW0gc3luY2hyb25pemF0aW9uIGR1cmluZyBtZW1jZyB0ZWFyZG93biwgYW5kIGRldmljZSBmbHVzaCBoYW5kbGluZyBpbiBiZGV2X2ZsdXNoX2J5X2Rldi4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgYW5kIGxpZmVjeWNsZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6MzY6MzYuMjU0NjQzMjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Mzg0MTY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmNmQ4NGIyMjVhYzcyYjA1NGU0OTEyNWI1YzY4MmIzYTI3NDMwN2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTE6MzY6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXFxuaW5kZXggY2Q4MzIzMDgzNzQwNi4uZGExZmM1NjkyNmZkNCAxMDA2NDRcXG4tLS0gYS9ibG9jay9iZGV2LmNcXG4rKysgYi9ibG9jay9iZGV2LmNcXG5AQCAtMjY0LDYgKzI2NCwzMCBAQCBpbnQgc3luY19ibG9ja2Rldl9ub3dhaXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jX2Jsb2NrZGV2X25vd2FpdCk7XFxuIFxcbisvKipcXG4rICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSdzIHBhZ2UgY2FjaGVcXG4rICogQGRldjogdGFyZ2V0IGJsb2NrIGRldmljZSBudW1iZXJcXG4rICpcXG4rICogU2tpcCBjbG9zZWQgZGV2aWNlcyBvciBkZXZpY2VzIHdob3NlIG9wZW5fbXV0ZXggaXMgYnVzeS5cXG4rICogTWF5IHNsZWVwIHdoaWxlIHN1Ym1pdHRpbmcgd3JpdGViYWNrOyBkb2VzIG5vdCB3YWl0IGZvciBhbGwgSS9PIHRvIGNvbXBsZXRlLlxcbisgKi9cXG4rdm9pZCBiZGV2X2ZsdXNoX2J5X2RldihkZXZfdCBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcXG4rXFxuK1xcdGJkZXYgPSBibGtkZXZfZ2V0X25vX29wZW4oZGV2LCBmYWxzZSk7XFxuK1xcdGlmICghYmRldilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogUHJldmVudCB0aGUgZGV2aWNlIGZyb20gY2xvc2luZyBiZXR3ZWVuIHRoZSBjaGVjayBhbmQgd3JpdGViYWNrLiAqL1xcbitcXHRpZiAobXV0ZXhfdHJ5bG9jayhcXHUwMDI2YmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlb3Blbl9tdXRleCkpIHtcXG4rXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZiZGV2LVxcdTAwM2ViZF9vcGVuZXJzKSlcXG4rXFx0XFx0XFx0c3luY19ibG9ja2Rldl9ub3dhaXQoYmRldik7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YmRldi1cXHUwMDNlYmRfZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcdH1cXG4rXFx0YmxrZGV2X3B1dF9ub19vcGVuKGJkZXYpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2tcXG4gICogZGV2aWNlIHZpYSBpdHMgbWFwcGluZy4gIERvZXMgbm90IHRha2UgdGhlIHN1cGVyYmxvY2sgbG9jay5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTE3MTAsNiArMTcxMCw3IEBAIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xcbiBpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcXG4gaW50IHN5bmNfYmxvY2tkZXZfcmFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpO1xcbiBpbnQgc3luY19ibG9ja2Rldl9ub3dhaXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XFxuK3ZvaWQgYmRldl9mbHVzaF9ieV9kZXYoZGV2X3QgZGV2KTtcXG4gdm9pZCBzeW5jX2JkZXZzKGJvb2wgd2FpdCk7XFxuIHZvaWQgYmRldl9zdGF0eChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrKTtcXG4gdm9pZCBwcmludGtfYWxsX3BhcnRpdGlvbnModm9pZCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li5kNDRkM2NlNTFiNTBkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTc2LDYgKzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4ge1xcbiBcXHRzdHJ1Y3Qgd2JfY29tcGxldGlvbiBkb25lO1xcdC8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovXFxuIH07XFxuIFxcbisvKlxcbisgKiBmcm5fbG9jayBwcm90ZWN0cyBkZXYgYW5kIGluZmxpZ2h0LlxcbisgKiBObyBleHRyYSBtZW1jZyByZWZlcmVuY2UgaXMgdGFrZW46IHRoaXMgd29yayBpcyBlbWJlZGRlZCBpbiB0aGUgbWVtY2csXFxuKyAqIGFuZCBtZW1fY2dyb3VwX2Nzc19mcmVlKCkgd2FpdHMgZm9yIGl0IHRvIGZpbmlzaCBiZWZvcmUgZnJlZWluZyB0aGUgbWVtY2cuXFxuKyAqL1xcbitzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IHtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuK1xcdGRldl90IGRldjtcXG4rXFx0Ym9vbCBpbmZsaWdodDtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbit9O1xcbitcXG4gLypcXG4gICogQnVja2V0IGZvciBhcmJpdHJhcmlseSBieXRlLXNpemVkIG9iamVjdHMgY2hhcmdlZCB0byBhIG1lbW9yeVxcbiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cFxcbkBAIC0yNzksNiArMjkxLDkgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4gXFx0c3RydWN0IHdiX2RvbWFpbiBjZ3diX2RvbWFpbjtcXG4gXFx0c3RydWN0IG1lbWNnX2Nnd2JfZnJuIGNnd2JfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07XFxuK1xcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggYmRldl9mcm5bTUVNQ0dfQ0dXQl9GUk5fQ05UXTtcXG4rXFx0LyogTmVzdHMgaW5zaWRlIG1hcHBpbmctXFx1MDAzZWlfcGFnZXMuICovXFxuK1xcdHNwaW5sb2NrX3QgZnJuX2xvY2s7XFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXFxuaW5kZXggMTNlZTA3NmNjZDE2Ni4uZmZkMWI4ZGY0MjMxOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXFxuQEAgLTI3Myw5ICsyNzMsOSBAQCBUUkFDRV9FVkVOVChpbm9kZV9zd2l0Y2hfd2JzLFxcbiBcXG4gVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcXG4gXFxuLVxcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksXFxuK1xcdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgZGV2X3QgZGV2KSxcXG4gXFxuLVxcdFRQX0FSR1MoZm9saW8sIHdiKSxcXG4rXFx0VFBfQVJHUyhmb2xpbywgd2IsIGRldiksXFxuIFxcbiBcXHRUUF9TVFJVQ1RfX2VudHJ5KFxcbiBcXHRcXHRfX2FycmF5KGNoYXIsXFx0XFx0bmFtZSwgMzIpXFxuQEAgLTI4NCw2ICsyODQsNyBAQCBUUkFDRV9FVkVOVCh0cmFja19mb3JlaWduX2RpcnR5LFxcbiBcXHRcXHRfX2ZpZWxkKHU2NCxcXHRcXHRjZ3JvdXBfaW5vKVxcbiBcXHRcXHRfX2ZpZWxkKHU2NCxcXHRcXHRwYWdlX2Nncm91cF9pbm8pXFxuIFxcdFxcdF9fZmllbGQodW5zaWduZWQgaW50LFxcdG1lbWNnX2lkKVxcbitcXHRcXHRfX2ZpZWxkKGRldl90LFxcdFxcdGRldilcXG4gXFx0KSxcXG4gXFxuIFxcdFRQX2Zhc3RfYXNzaWduKFxcbkBAIC0yOTUsMzQgKzI5NiwzNyBAQCBUUkFDRV9FVkVOVCh0cmFja19mb3JlaWduX2RpcnR5LFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vpbm9cXHRcXHQ9IGlub2RlID8gaW5vZGUtXFx1MDAzZWlfaW5vIDogMDtcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlbWVtY2dfaWRcXHQ9IHdiLVxcdTAwM2VtZW1jZ19jc3MtXFx1MDAzZWlkO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VjZ3JvdXBfaW5vXFx0PSBfX3RyYWNlX3diX2Fzc2lnbl9jZ3JvdXAod2IpO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VkZXZcXHRcXHQ9IGRldjtcXG4gXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlcGFnZV9jZ3JvdXBfaW5vID0gY2dyb3VwX2lubyhmb2xpb19tZW1jZyhmb2xpbyktXFx1MDAzZWNzcy5jZ3JvdXApO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0KSxcXG4gXFxuLVxcdFRQX3ByaW50ayhcXFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcXFwiLFxcbitcXHRUUF9wcmludGsoXFxcImJkaSAlc1slbGx1XTogaW5vPSVsbHUgbWVtY2dfaWQ9JXUgY2dyb3VwX2lubz0lbGx1IHBhZ2VfY2dyb3VwX2lubz0lbGx1IGRldj0ldToldVxcXCIsXFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZW5hbWUsXFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZWJkaV9pZCxcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlaW5vLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VtZW1jZ19pZCxcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlY2dyb3VwX2lubyxcXG4tXFx0XFx0X19lbnRyeS1cXHUwMDNlcGFnZV9jZ3JvdXBfaW5vXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZXBhZ2VfY2dyb3VwX2lubyxcXG4rXFx0XFx0TUFKT1IoX19lbnRyeS1cXHUwMDNlZGV2KSwgTUlOT1IoX19lbnRyeS1cXHUwMDNlZGV2KVxcbiBcXHQpXFxuICk7XFxuIFxcbiBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLFxcbiBcXG4gXFx0VFBfUFJPVE8oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBpbnQgZnJuX2JkaV9pZCxcXG4tXFx0XFx0IHVuc2lnbmVkIGludCBmcm5fbWVtY2dfaWQpLFxcbitcXHRcXHQgdW5zaWduZWQgaW50IGZybl9tZW1jZ19pZCwgZGV2X3QgZGV2KSxcXG4gXFxuLVxcdFRQX0FSR1Mod2IsIGZybl9iZGlfaWQsIGZybl9tZW1jZ19pZCksXFxuK1xcdFRQX0FSR1Mod2IsIGZybl9iZGlfaWQsIGZybl9tZW1jZ19pZCwgZGV2KSxcXG4gXFxuIFxcdFRQX1NUUlVDVF9fZW50cnkoXFxuIFxcdFxcdF9fYXJyYXkoY2hhcixcXHRcXHRuYW1lLCAzMilcXG4gXFx0XFx0X19maWVsZCh1NjQsXFx0XFx0Y2dyb3VwX2lubylcXG4gXFx0XFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXFx0ZnJuX2JkaV9pZClcXG4gXFx0XFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXFx0ZnJuX21lbWNnX2lkKVxcbitcXHRcXHRfX2ZpZWxkKGRldl90LFxcdFxcdGRldilcXG4gXFx0KSxcXG4gXFxuIFxcdFRQX2Zhc3RfYXNzaWduKFxcbkBAIC0zMzAsMTMgKzMzNCwxNSBAQCBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VjZ3JvdXBfaW5vXFx0PSBfX3RyYWNlX3diX2Fzc2lnbl9jZ3JvdXAod2IpO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vmcm5fYmRpX2lkXFx0PSBmcm5fYmRpX2lkO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vmcm5fbWVtY2dfaWRcXHQ9IGZybl9tZW1jZ19pZDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZGV2XFx0XFx0PSBkZXY7XFxuIFxcdCksXFxuIFxcbi1cXHRUUF9wcmludGsoXFxcImJkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1XFxcIixcXG4rXFx0VFBfcHJpbnRrKFxcXCJiZGkgJXM6IGNncm91cF9pbm89JWxsdSBmcm5fYmRpX2lkPSV1IGZybl9tZW1jZ19pZD0ldSBkZXY9JXU6JXVcXFwiLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VuYW1lLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VjZ3JvdXBfaW5vLFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vmcm5fYmRpX2lkLFxcbi1cXHRcXHRfX2VudHJ5LVxcdTAwM2Vmcm5fbWVtY2dfaWRcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlZnJuX21lbWNnX2lkLFxcbitcXHRcXHRNQUpPUihfX2VudHJ5LVxcdTAwM2VkZXYpLCBNSU5PUihfX2VudHJ5LVxcdTAwM2VkZXYpXFxuIFxcdClcXG4gKTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjA3ODRmNmU0MGFlY2MgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTM5LDYgKzM5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NtcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jsa2Rldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0X3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGltaXRzLmhcXHUwMDNlXFxuQEAgLTEwNCw2ICsxMDUsNyBAQCBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1lbWNnX3BuX2NhY2hlcDtcXG4gXFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xcbiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgX19yb19hZnRlcl9pbml0O1xcbiAjZW5kaWZcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2lzX2R5aW5nKHZvaWQpXFxuQEAgLTM4NDUsNiArMzg0Nyw0MSBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLFxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEJkZXYgaW5vZGVzIGFyZSBjb21tb25seSBzaGFyZWQgYnkgbWFueSBtZW1jZ3MuIEZsdXNoaW5nIHRoZWlyIG93bmVyIHdiXFxuKyAqIGNhbiB3cml0ZSB1bnJlbGF0ZWQgZmlsZSBkYXRhLCBzbyByZWNvcmQgZGV2aWNlIG51bWJlcnMgc2VwYXJhdGVseSBhbmRcXG4rICogZmx1c2ggb25seSB0aGUgYmRldiBtYXBwaW5ncy4gVHJhY2tpbmcgaXMgYmVzdCBlZmZvcnQ6IHJlY29yZCBvbmx5IGRldl90XFxuKyAqIHdpdGhvdXQgaG9sZGluZyBkZXZpY2Ugb3IgaW5vZGUgcmVmZXJlbmNlcywgc28gaXQgbWF5IHJhY2Ugd2l0aCBkZXZpY2VcXG4rICogcmVtb3ZhbCBhbmQgcmUtYWRkaXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGRldl90IGRldilcXG4re1xcbitcXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogX19mb2xpb19tYXJrX2RpcnR5KCkgdGFrZXMgbWFwcGluZy1cXHUwMDNlaV9wYWdlcyB3aXRoIHhhX2xvY2tfaXJxc2F2ZSgpXFxuK1xcdCAqIGJlZm9yZSByZWFjaGluZyB0aGlzIGhlbHBlci4gVXNlIGlycXNhdmUgaGVyZSBhcyB3ZWxsIHNvIGZybl9sb2NrJ3NcXG4rXFx0ICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy5cXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZtZW1jZy1cXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XFxuK1xcdFxcdGlmIChtZW1jZy1cXHUwMDNlYmRldl9mcm5baV0uZGV2ID09IGRldilcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xcbitcXHRcXHRjdHggPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWJkZXZfZnJuW2ldO1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VpbmZsaWdodClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGN0eC1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitvdXQ6XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1lbWNnLVxcdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBGb3JlaWduIGRpcnR5IGZsdXNoaW5nXFxuICAqXFxuQEAgLTM4NzUsMTcgKzM5MTIsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgbG9uZyAqcGZpbGVwYWdlcyxcXG4gICogbW9zdCByZWNlbnQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgYW5kIGluaXRpYXRpbmcgcmVtb3RlIGZsdXNoZXMgb25cXG4gICogdGhlbSB3aGVuIGxvY2FsIHdyaXRlYmFjayBpc24ndCBlbm91Z2ggdG8ga2VlcCB0aGUgbWVtb3J5IGNsZWFuIGVub3VnaC5cXG4gICpcXG4tICogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBzdWNoIG1lY2hhbmlzbS4gIFdoZW4gYSBmb3JlaWduXFxuLSAqIHBhZ2UgLSBhIHBhZ2Ugd2hvc2UgbWVtY2cgYW5kIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbid0IG1hdGNoIC0gaXNcXG4tICogZGlydGllZCwgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KCkgcmVjb3JkcyB0aGUgaW5vZGUgb3duaW5nXFxuLSAqIGJkaV93cml0ZWJhY2sgb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiAgV2hlbiBiYWxhbmNlX2RpcnR5X3BhZ2VzKClcXG4tICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHNcXG4rICogRm9yIG5vbi1iZGV2IGlub2Rlcywgd2hlbiBhIGZvcmVpZ24gcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmRcXG4rICogd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJ3QgbWF0Y2ggLSBpcyBkaXJ0aWVkLFxcbisgKiBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmcgYmRpX3dyaXRlYmFja1xcbisgKiBvbiB0aGUgcGFnZSBvd25pbmcgbWVtY2cuIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpIGRlY2lkZXMgdGhhdCB0aGVcXG4rICogbWVtY2cgbmVlZHMgdG8gc2xlZXAgZHVlIHRvIGhpZ2ggZGlydHkgcmF0aW8sIGl0IGNhbGxzXFxuICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkXFxuICAqIGZvcmVpZ24gYmRpX3dyaXRlYmFja3Mgd2hpY2ggaGF2ZW4ndCBleHBpcmVkLiAgQm90aCB0aGUgbnVtYmVycyBvZlxcbiAgKiByZWNvcmRlZCBiZGlfd3JpdGViYWNrcyBhbmQgY29uY3VycmVudCBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzIGFyZVxcbiAgKiBsaW1pdGVkIHRvIE1FTUNHX0NHV0JfRlJOX0NOVC5cXG4gICpcXG4tICogVGhlIG1lY2hhbmlzbSBvbmx5IHJlbWVtYmVycyBJRHMgYW5kIGRvZXNuJ3QgaG9sZCBhbnkgb2JqZWN0IHJlZmVyZW5jZXMuXFxuKyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbid0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLlxcbiAgKiBBcyBiZWluZyB3cm9uZyBvY2Nhc2lvbmFsbHkgZG9lc24ndCBtYXR0ZXIsIHVwZGF0ZXMgYW5kIGFjY2Vzc2VzIHRvIHRoZVxcbiAgKiByZWNvcmRzIGFyZSBsb2NrbGVzcyBhbmQgcmFjeS5cXG4gICovXFxuQEAgLTM4OTgsOCArMzkzNSwxNyBAQCB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHR1NjQgb2xkZXN0X2F0ID0gbm93O1xcbiBcXHRpbnQgb2xkZXN0ID0gLTE7XFxuIFxcdGludCBpO1xcbitcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmJkZXZfaW5vZGUgPSBtYXBwaW5nID8gbWFwcGluZy1cXHUwMDNlaG9zdCA6IE5VTEw7XFxuK1xcbitcXHRpZiAobWVtY2dfYmRldl9mcm5fZmx1c2hlciBcXHUwMDI2XFx1MDAyNiBiZGV2X2lub2RlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzYl9pc19ibGtkZXZfc2IoYmRldl9pbm9kZS1cXHUwMDNlaV9zYikpIHtcXG4rXFx0XFx0dHJhY2VfdHJhY2tfZm9yZWlnbl9kaXJ0eShmb2xpbywgd2IsIGJkZXZfaW5vZGUtXFx1MDAzZWlfcmRldik7XFxuK1xcdFxcdG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KG1lbWNnLCBiZGV2X2lub2RlLVxcdTAwM2VpX3JkZXYpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuLVxcdHRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiKTtcXG4rXFx0dHJhY2VfdHJhY2tfZm9yZWlnbl9kaXJ0eShmb2xpbywgd2IsIDApO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogUGljayB0aGUgc2xvdCB0byB1c2UuICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2xvdCBmb3IgQHdiLCBrZWVwXFxuQEAgLTM5NDEsNiArMzk4NywyNSBAQCB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGJkZXZfZnJuX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4LCB3b3JrKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGJkZXZfZmx1c2hfYnlfZGV2KGN0eC1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBkaXJ0eSB0cmFja2luZyBwYXRoIHRha2VzIGZybl9sb2NrIHdoaWxlIGhvbGRpbmcgbWFwcGluZy1cXHUwMDNlaV9wYWdlcy5cXG4rXFx0ICogRGlzYWJsZSBsb2NhbCBJUlFzIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggSS9PIGNvbXBsZXRpb25cXG4rXFx0ICogaGFuZGxlcnMgdGhhdCBhbHNvIHRha2UgbWFwcGluZy1cXHUwMDNlaV9wYWdlcy5cXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZW1lbWNnLVxcdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xcbitcXHRjdHgtXFx1MDAzZWluZmxpZ2h0ID0gZmFsc2U7XFxuK1xcdGN0eC1cXHUwMDNlZGV2ID0gMDtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2VtZW1jZy1cXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4gLyogaXNzdWUgZm9yZWlnbiB3cml0ZWJhY2sgZmx1c2hlcyBmb3IgcmVjb3JkZWQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgKi9cXG4gdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbiB7XFxuQEAgLTM5NDksNiArNDAxNCwxOSBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuIFxcdHU2NCBub3cgPSBqaWZmaWVzXzY0O1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWJkZXZfZnJuW2ldO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1lbWNnLVxcdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRpZiAoIWN0eC1cXHUwMDNlaW5mbGlnaHQgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VkZXYpIHtcXG4rXFx0XFx0XFx0Y3R4LVxcdTAwM2VpbmZsaWdodCA9IHRydWU7XFxuK1xcdFxcdFxcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIDAsIDAsIGN0eC1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0cXVldWVfd29yayhtZW1jZ19iZGV2X2Zybl9mbHVzaGVyLCBcXHUwMDI2Y3R4LVxcdTAwM2V3b3JrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtZW1jZy1cXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XFxuIFxcdFxcdHN0cnVjdCBtZW1jZ19jZ3diX2ZybiAqZnJuID0gXFx1MDAyNm1lbWNnLVxcdTAwM2VjZ3diX2ZybltpXTtcXG4gXFxuQEAgLTM5NjEsNyArNDAzOSw4IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4gXFx0XFx0aWYgKHRpbWVfYWZ0ZXI2NChmcm4tXFx1MDAzZWF0LCBub3cgLSBpbnR2KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNmZybi1cXHUwMDNlZG9uZS5jbnQpID09IDEpIHtcXG4gXFx0XFx0XFx0ZnJuLVxcdTAwM2VhdCA9IDA7XFxuLVxcdFxcdFxcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi1cXHUwMDNlYmRpX2lkLCBmcm4tXFx1MDAzZW1lbWNnX2lkKTtcXG4rXFx0XFx0XFx0dHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgZnJuLVxcdTAwM2ViZGlfaWQsIGZybi1cXHUwMDNlbWVtY2dfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4gXFx0XFx0XFx0Y2dyb3VwX3dyaXRlYmFja19ieV9pZChmcm4tXFx1MDAzZWJkaV9pZCwgZnJuLVxcdTAwM2VtZW1jZ19pZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmZybi1cXHUwMDNlZG9uZSk7XFxuQEAgLTQyMDIsOSArNDI4MSwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0bWVtY2ctXFx1MDAzZWttZW1jZ19pZCA9IC0xO1xcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2VjZ3diX2xpc3QpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWJkZXZfZnJuW2ldO1xcbitcXG4gXFx0XFx0bWVtY2ctXFx1MDAzZWNnd2JfZnJuW2ldLmRvbmUgPVxcbiBcXHRcXHRcXHRfX1dCX0NPTVBMRVRJT05fSU5JVChcXHUwMDI2bWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xcbitcXHRcXHRJTklUX1dPUksoXFx1MDAyNmN0eC1cXHUwMDNld29yaywgYmRldl9mcm5fZmx1c2hfd29yayk7XFxuK1xcdFxcdGN0eC1cXHUwMDNlbWVtY2cgPSBtZW1jZztcXG4rXFx0fVxcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWZybl9sb2NrKTtcXG4gI2VuZGlmXFxuIFxcdGxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7XFxuIFxcdHJldHVybiBtZW1jZztcXG5AQCAtNDM4Niw4ICs0NDcxLDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKVxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcXG4gXFx0XFx0d2Jfd2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfZnJuW2ldLmRvbmUpO1xcbitcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZtZW1jZy1cXHUwMDNlYmRldl9mcm5baV0ud29yayk7XFxuK1xcdH1cXG4gI2VuZGlmXFxuIFxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxcbiBcXHRcXHRzdGF0aWNfYnJhbmNoX2RlYyhcXHUwMDI2bWVtY2dfc29ja2V0c19lbmFibGVkX2tleSk7XFxuQEAgLTU3MDMsNiArNTc5MCwxMiBAQCBpbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbiBcXHRtZW1jZ193cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwibWVtY2dcXFwiLCBXUV9QRVJDUFUsIDApO1xcbiBcXHRXQVJOX09OKCFtZW1jZ193cSk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG4rXFx0bWVtY2dfYmRldl9mcm5fZmx1c2hlciA9IGFsbG9jX3dvcmtxdWV1ZShcXFwibWVtY2dfYmRldl9mcm5fZmx1c2hlclxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDApO1xcbitcXHRXQVJOX09OKCFtZW1jZ19iZGV2X2Zybl9mbHVzaGVyKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIFxcdFxcdElOSVRfV09SSyhcXHUwMDI2cGVyX2NwdV9wdHIoXFx1MDAyNm1lbWNnX3N0b2NrLCBjcHUpLVxcdTAwM2V3b3JrLFxcbiBcXHRcXHRcXHQgIGRyYWluX2xvY2FsX21lbWNnX3N0b2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6MzY6MzYuNzEwMDM0OTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMTE3MTQ0MjkyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmRldl9mbHVzaF9ieV9kZXZcIixcbiAgICBcImJkZXZfZnJuX2ZsdXNoX3dvcmtcIixcbiAgICBcIm1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2XCIsXG4gICAgXCJtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhcIixcbiAgICBcIm1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXFx1MDAzZWlfcGFnZXMpLCBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpLCB3b3JrIGl0ZW0gc3luY2hyb25pemF0aW9uIGR1cmluZyBtZW1jZyB0ZWFyZG93biwgYW5kIGRldmljZSBmbHVzaCBoYW5kbGluZyBpbiBiZGV2X2ZsdXNoX2J5X2Rldi4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgYW5kIGxpZmVjeWNsZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZjZkODRiMjI1YWM3MmIwNTRlNDkxMjViNWM2ODJiM2EyNzQzMDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTE6MzY6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmNcbmluZGV4IGNkODMyMzA4Mzc0MDYuLmRhMWZjNTY5MjZmZDQgMTAwNjQ0XG4tLS0gYS9ibG9jay9iZGV2LmNcbisrKyBiL2Jsb2NrL2JkZXYuY1xuQEAgLTI2NCw2ICsyNjQsMzAgQEAgaW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNfYmxvY2tkZXZfbm93YWl0KTtcbiBcbisvKipcbisgKiBiZGV2X2ZsdXNoX2J5X2RldiAtIGF0dGVtcHQgd3JpdGViYWNrIG9mIGEgYmxvY2sgZGV2aWNlJ3MgcGFnZSBjYWNoZVxuKyAqIEBkZXY6IHRhcmdldCBibG9jayBkZXZpY2UgbnVtYmVyXG4rICpcbisgKiBTa2lwIGNsb3NlZCBkZXZpY2VzIG9yIGRldmljZXMgd2hvc2Ugb3Blbl9tdXRleCBpcyBidXN5LlxuKyAqIE1heSBzbGVlcCB3aGlsZSBzdWJtaXR0aW5nIHdyaXRlYmFjazsgZG9lcyBub3Qgd2FpdCBmb3IgYWxsIEkvTyB0byBjb21wbGV0ZS5cbisgKi9cbit2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldilcbit7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2O1xuK1xuK1x0YmRldiA9IGJsa2Rldl9nZXRfbm9fb3BlbihkZXYsIGZhbHNlKTtcbitcdGlmICghYmRldilcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogUHJldmVudCB0aGUgZGV2aWNlIGZyb20gY2xvc2luZyBiZXR3ZWVuIHRoZSBjaGVjayBhbmQgd3JpdGViYWNrLiAqL1xuK1x0aWYgKG11dGV4X3RyeWxvY2soXHUwMDI2YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpKSB7XG4rXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZiZGV2LVx1MDAzZWJkX29wZW5lcnMpKVxuK1x0XHRcdHN5bmNfYmxvY2tkZXZfbm93YWl0KGJkZXYpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2YmRldi1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0fVxuK1x0YmxrZGV2X3B1dF9ub19vcGVuKGJkZXYpO1xuK31cbitcbiAvKlxuICAqIFdyaXRlIG91dCBhbmQgd2FpdCB1cG9uIGFsbCB0aGUgZGlydHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBibG9ja1xuICAqIGRldmljZSB2aWEgaXRzIG1hcHBpbmcuICBEb2VzIG5vdCB0YWtlIHRoZSBzdXBlcmJsb2NrIGxvY2suXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLjdhNWYzZTJmMTdkNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTcxMCw2ICsxNzEwLDcgQEAgdm9pZCBpbnZhbGlkYXRlX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4gaW50IHN5bmNfYmxvY2tkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4gaW50IHN5bmNfYmxvY2tkZXZfcmFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpO1xuIGludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTtcbit2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldik7XG4gdm9pZCBzeW5jX2JkZXZzKGJvb2wgd2FpdCk7XG4gdm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spO1xuIHZvaWQgcHJpbnRrX2FsbF9wYXJ0aXRpb25zKHZvaWQpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLmQ0NGQzY2U1MWI1MGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xNzYsNiArMTc2LDE4IEBAIHN0cnVjdCBtZW1jZ19jZ3diX2ZybiB7XG4gXHRzdHJ1Y3Qgd2JfY29tcGxldGlvbiBkb25lO1x0LyogdHJhY2tzIGluLWZsaWdodCBmb3JlaWduIHdyaXRlYmFja3MgKi9cbiB9O1xuIFxuKy8qXG4rICogZnJuX2xvY2sgcHJvdGVjdHMgZGV2IGFuZCBpbmZsaWdodC5cbisgKiBObyBleHRyYSBtZW1jZyByZWZlcmVuY2UgaXMgdGFrZW46IHRoaXMgd29yayBpcyBlbWJlZGRlZCBpbiB0aGUgbWVtY2csXG4rICogYW5kIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoKSB3YWl0cyBmb3IgaXQgdG8gZmluaXNoIGJlZm9yZSBmcmVlaW5nIHRoZSBtZW1jZy5cbisgKi9cbitzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IHtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuK1x0ZGV2X3QgZGV2O1xuK1x0Ym9vbCBpbmZsaWdodDtcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbit9O1xuK1xuIC8qXG4gICogQnVja2V0IGZvciBhcmJpdHJhcmlseSBieXRlLXNpemVkIG9iamVjdHMgY2hhcmdlZCB0byBhIG1lbW9yeVxuICAqIGNncm91cC4gVGhlIGJ1Y2tldCBjYW4gYmUgcmVwYXJlbnRlZCBpbiBvbmUgcGllY2Ugd2hlbiB0aGUgY2dyb3VwXG5AQCAtMjc5LDYgKzI5MSw5IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbiBcdHN0cnVjdCB3Yl9kb21haW4gY2d3Yl9kb21haW47XG4gXHRzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4gY2d3Yl9mcm5bTUVNQ0dfQ0dXQl9GUk5fQ05UXTtcbitcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggYmRldl9mcm5bTUVNQ0dfQ0dXQl9GUk5fQ05UXTtcbitcdC8qIE5lc3RzIGluc2lkZSBtYXBwaW5nLVx1MDAzZWlfcGFnZXMuICovXG4rXHRzcGlubG9ja190IGZybl9sb2NrO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXG5pbmRleCAxM2VlMDc2Y2NkMTY2Li5mZmQxYjhkZjQyMzE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXG5AQCAtMjczLDkgKzI3Myw5IEBAIFRSQUNFX0VWRU5UKGlub2RlX3N3aXRjaF93YnMsXG4gXG4gVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcbiBcbi1cdFRQX1BST1RPKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiksXG4rXHRUUF9QUk9UTyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIGRldl90IGRldiksXG4gXG4tXHRUUF9BUkdTKGZvbGlvLCB3YiksXG4rXHRUUF9BUkdTKGZvbGlvLCB3YiwgZGV2KSxcbiBcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdF9fYXJyYXkoY2hhcixcdFx0bmFtZSwgMzIpXG5AQCAtMjg0LDYgKzI4NCw3IEBAIFRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4gXHRcdF9fZmllbGQodTY0LFx0XHRjZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHU2NCxcdFx0cGFnZV9jZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcdG1lbWNnX2lkKVxuK1x0XHRfX2ZpZWxkKGRldl90LFx0XHRkZXYpXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtMjk1LDM0ICsyOTYsMzcgQEAgVFJBQ0VfRVZFTlQodHJhY2tfZm9yZWlnbl9kaXJ0eSxcbiBcdFx0X19lbnRyeS1cdTAwM2Vpbm9cdFx0PSBpbm9kZSA/IGlub2RlLVx1MDAzZWlfaW5vIDogMDtcbiBcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZFx0PSB3Yi1cdTAwM2VtZW1jZ19jc3MtXHUwMDNlaWQ7XG4gXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lub1x0PSBfX3RyYWNlX3diX2Fzc2lnbl9jZ3JvdXAod2IpO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWRldlx0XHQ9IGRldjtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lubyA9IGNncm91cF9pbm8oZm9saW9fbWVtY2coZm9saW8pLVx1MDAzZWNzcy5jZ3JvdXApO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdCksXG4gXG4tXHRUUF9wcmludGsoXCJiZGkgJXNbJWxsdV06IGlubz0lbGx1IG1lbWNnX2lkPSV1IGNncm91cF9pbm89JWxsdSBwYWdlX2Nncm91cF9pbm89JWxsdVwiLFxuK1x0VFBfcHJpbnRrKFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHUgZGV2PSV1OiV1XCIsXG4gXHRcdF9fZW50cnktXHUwMDNlbmFtZSxcbiBcdFx0X19lbnRyeS1cdTAwM2ViZGlfaWQsXG4gXHRcdF9fZW50cnktXHUwMDNlaW5vLFxuIFx0XHRfX2VudHJ5LVx1MDAzZW1lbWNnX2lkLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm8sXG4tXHRcdF9fZW50cnktXHUwMDNlcGFnZV9jZ3JvdXBfaW5vXG4rXHRcdF9fZW50cnktXHUwMDNlcGFnZV9jZ3JvdXBfaW5vLFxuK1x0XHRNQUpPUihfX2VudHJ5LVx1MDAzZWRldiksIE1JTk9SKF9fZW50cnktXHUwMDNlZGV2KVxuIFx0KVxuICk7XG4gXG4gVFJBQ0VfRVZFTlQoZmx1c2hfZm9yZWlnbixcbiBcbiBcdFRQX1BST1RPKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgdW5zaWduZWQgaW50IGZybl9iZGlfaWQsXG4tXHRcdCB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkKSxcbitcdFx0IHVuc2lnbmVkIGludCBmcm5fbWVtY2dfaWQsIGRldl90IGRldiksXG4gXG4tXHRUUF9BUkdTKHdiLCBmcm5fYmRpX2lkLCBmcm5fbWVtY2dfaWQpLFxuK1x0VFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkLCBkZXYpLFxuIFxuIFx0VFBfU1RSVUNUX19lbnRyeShcbiBcdFx0X19hcnJheShjaGFyLFx0XHRuYW1lLCAzMilcbiBcdFx0X19maWVsZCh1NjQsXHRcdGNncm91cF9pbm8pXG4gXHRcdF9fZmllbGQodW5zaWduZWQgaW50LFx0ZnJuX2JkaV9pZClcbiBcdFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXHRmcm5fbWVtY2dfaWQpXG4rXHRcdF9fZmllbGQoZGV2X3QsXHRcdGRldilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbkBAIC0zMzAsMTMgKzMzNCwxNSBAQCBUUkFDRV9FVkVOVChmbHVzaF9mb3JlaWduLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm9cdD0gX190cmFjZV93Yl9hc3NpZ25fY2dyb3VwKHdiKTtcbiBcdFx0X19lbnRyeS1cdTAwM2Vmcm5fYmRpX2lkXHQ9IGZybl9iZGlfaWQ7XG4gXHRcdF9fZW50cnktXHUwMDNlZnJuX21lbWNnX2lkXHQ9IGZybl9tZW1jZ19pZDtcbitcdFx0X19lbnRyeS1cdTAwM2VkZXZcdFx0PSBkZXY7XG4gXHQpLFxuIFxuLVx0VFBfcHJpbnRrKFwiYmRpICVzOiBjZ3JvdXBfaW5vPSVsbHUgZnJuX2JkaV9pZD0ldSBmcm5fbWVtY2dfaWQ9JXVcIixcbitcdFRQX3ByaW50ayhcImJkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1IGRldj0ldToldVwiLFxuIFx0XHRfX2VudHJ5LVx1MDAzZW5hbWUsXG4gXHRcdF9fZW50cnktXHUwMDNlY2dyb3VwX2lubyxcbiBcdFx0X19lbnRyeS1cdTAwM2Vmcm5fYmRpX2lkLFxuLVx0XHRfX2VudHJ5LVx1MDAzZWZybl9tZW1jZ19pZFxuK1x0XHRfX2VudHJ5LVx1MDAzZWZybl9tZW1jZ19pZCxcbitcdFx0TUFKT1IoX19lbnRyeS1cdTAwM2VkZXYpLCBNSU5PUihfX2VudHJ5LVx1MDAzZWRldilcbiBcdClcbiApO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMDc4NGY2ZTQwYWVjYyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzksNiArMzksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZS1mbGFncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0X3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbkBAIC0xMDQsNiArMTA1LDcgQEAgc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptZW1jZ19wbl9jYWNoZXA7XG4gXG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgX19yb19hZnRlcl9pbml0O1xuICNlbmRpZlxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2lzX2R5aW5nKHZvaWQpXG5AQCAtMzg0NSw2ICszODQ3LDQxIEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXG4gXHR9XG4gfVxuIFxuKy8qXG4rICogQmRldiBpbm9kZXMgYXJlIGNvbW1vbmx5IHNoYXJlZCBieSBtYW55IG1lbWNncy4gRmx1c2hpbmcgdGhlaXIgb3duZXIgd2JcbisgKiBjYW4gd3JpdGUgdW5yZWxhdGVkIGZpbGUgZGF0YSwgc28gcmVjb3JkIGRldmljZSBudW1iZXJzIHNlcGFyYXRlbHkgYW5kXG4rICogZmx1c2ggb25seSB0aGUgYmRldiBtYXBwaW5ncy4gVHJhY2tpbmcgaXMgYmVzdCBlZmZvcnQ6IHJlY29yZCBvbmx5IGRldl90XG4rICogd2l0aG91dCBob2xkaW5nIGRldmljZSBvciBpbm9kZSByZWZlcmVuY2VzLCBzbyBpdCBtYXkgcmFjZSB3aXRoIGRldmljZVxuKyAqIHJlbW92YWwgYW5kIHJlLWFkZGl0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZGV2X3QgZGV2KVxuK3tcbitcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgaTtcbitcbitcdC8qXG4rXHQgKiBfX2ZvbGlvX21hcmtfZGlydHkoKSB0YWtlcyBtYXBwaW5nLVx1MDAzZWlfcGFnZXMgd2l0aCB4YV9sb2NrX2lycXNhdmUoKVxuK1x0ICogYmVmb3JlIHJlYWNoaW5nIHRoaXMgaGVscGVyLiBVc2UgaXJxc2F2ZSBoZXJlIGFzIHdlbGwgc28gZnJuX2xvY2snc1xuK1x0ICogSVJRIHByb3RlY3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoYXQgb3V0ZXIgbG9ja2luZy5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWVtY2ctXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XG4rXHRcdGlmIChtZW1jZy1cdTAwM2ViZGV2X2ZybltpXS5kZXYgPT0gZGV2KVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbitcdFx0Y3R4ID0gXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV07XG4rXHRcdGlmIChjdHgtXHUwMDNlaW5mbGlnaHQpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGN0eC1cdTAwM2VkZXYgPSBkZXY7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK291dDpcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWVtY2ctXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4gLypcbiAgKiBGb3JlaWduIGRpcnR5IGZsdXNoaW5nXG4gICpcbkBAIC0zODc1LDE3ICszOTEyLDE3IEBAIHZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXG4gICogbW9zdCByZWNlbnQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgYW5kIGluaXRpYXRpbmcgcmVtb3RlIGZsdXNoZXMgb25cbiAgKiB0aGVtIHdoZW4gbG9jYWwgd3JpdGViYWNrIGlzbid0IGVub3VnaCB0byBrZWVwIHRoZSBtZW1vcnkgY2xlYW4gZW5vdWdoLlxuICAqXG4tICogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGltcGxlbWVudCBzdWNoIG1lY2hhbmlzbS4gIFdoZW4gYSBmb3JlaWduXG4tICogcGFnZSAtIGEgcGFnZSB3aG9zZSBtZW1jZyBhbmQgd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJ3QgbWF0Y2ggLSBpc1xuLSAqIGRpcnRpZWQsIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZ1xuLSAqIGJkaV93cml0ZWJhY2sgb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiAgV2hlbiBiYWxhbmNlX2RpcnR5X3BhZ2VzKClcbi0gKiBkZWNpZGVzIHRoYXQgdGhlIG1lbWNnIG5lZWRzIHRvIHNsZWVwIGR1ZSB0byBoaWdoIGRpcnR5IHJhdGlvLCBpdCBjYWxsc1xuKyAqIEZvciBub24tYmRldiBpbm9kZXMsIHdoZW4gYSBmb3JlaWduIHBhZ2UgLSBhIHBhZ2Ugd2hvc2UgbWVtY2cgYW5kXG4rICogd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJ3QgbWF0Y2ggLSBpcyBkaXJ0aWVkLFxuKyAqIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZyBiZGlfd3JpdGViYWNrXG4rICogb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKSBkZWNpZGVzIHRoYXQgdGhlXG4rICogbWVtY2cgbmVlZHMgdG8gc2xlZXAgZHVlIHRvIGhpZ2ggZGlydHkgcmF0aW8sIGl0IGNhbGxzXG4gICogbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKCkgd2hpY2ggcXVldWVzIHdyaXRlYmFjayBvbiB0aGUgcmVjb3JkZWRcbiAgKiBmb3JlaWduIGJkaV93cml0ZWJhY2tzIHdoaWNoIGhhdmVuJ3QgZXhwaXJlZC4gIEJvdGggdGhlIG51bWJlcnMgb2ZcbiAgKiByZWNvcmRlZCBiZGlfd3JpdGViYWNrcyBhbmQgY29uY3VycmVudCBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzIGFyZVxuICAqIGxpbWl0ZWQgdG8gTUVNQ0dfQ0dXQl9GUk5fQ05ULlxuICAqXG4tICogVGhlIG1lY2hhbmlzbSBvbmx5IHJlbWVtYmVycyBJRHMgYW5kIGRvZXNuJ3QgaG9sZCBhbnkgb2JqZWN0IHJlZmVyZW5jZXMuXG4rICogVGhlc2Ugd2IgcmVjb3JkcyBvbmx5IHJlbWVtYmVyIElEcyBhbmQgZG9uJ3QgaG9sZCBhbnkgb2JqZWN0IHJlZmVyZW5jZXMuXG4gICogQXMgYmVpbmcgd3Jvbmcgb2NjYXNpb25hbGx5IGRvZXNuJ3QgbWF0dGVyLCB1cGRhdGVzIGFuZCBhY2Nlc3NlcyB0byB0aGVcbiAgKiByZWNvcmRzIGFyZSBsb2NrbGVzcyBhbmQgcmFjeS5cbiAgKi9cbkBAIC0zODk4LDggKzM5MzUsMTcgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHU2NCBvbGRlc3RfYXQgPSBub3c7XG4gXHRpbnQgb2xkZXN0ID0gLTE7XG4gXHRpbnQgaTtcbitcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7XG4rXHRzdHJ1Y3QgaW5vZGUgKmJkZXZfaW5vZGUgPSBtYXBwaW5nID8gbWFwcGluZy1cdTAwM2Vob3N0IDogTlVMTDtcbitcbitcdGlmIChtZW1jZ19iZGV2X2Zybl9mbHVzaGVyIFx1MDAyNlx1MDAyNiBiZGV2X2lub2RlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNiX2lzX2Jsa2Rldl9zYihiZGV2X2lub2RlLVx1MDAzZWlfc2IpKSB7XG4rXHRcdHRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiLCBiZGV2X2lub2RlLVx1MDAzZWlfcmRldik7XG4rXHRcdG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KG1lbWNnLCBiZGV2X2lub2RlLVx1MDAzZWlfcmRldik7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbi1cdHRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiKTtcbitcdHRyYWNlX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiLCAwKTtcbiBcbiBcdC8qXG4gXHQgKiBQaWNrIHRoZSBzbG90IHRvIHVzZS4gIElmIHRoZXJlIGlzIGFscmVhZHkgYSBzbG90IGZvciBAd2IsIGtlZXBcbkBAIC0zOTQxLDYgKzM5ODcsMjUgQEAgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHgsIHdvcmspO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdGJkZXZfZmx1c2hfYnlfZGV2KGN0eC1cdTAwM2VkZXYpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBkaXJ0eSB0cmFja2luZyBwYXRoIHRha2VzIGZybl9sb2NrIHdoaWxlIGhvbGRpbmcgbWFwcGluZy1cdTAwM2VpX3BhZ2VzLlxuK1x0ICogRGlzYWJsZSBsb2NhbCBJUlFzIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGggSS9PIGNvbXBsZXRpb25cbitcdCAqIGhhbmRsZXJzIHRoYXQgYWxzbyB0YWtlIG1hcHBpbmctXHUwMDNlaV9wYWdlcy5cbitcdCAqL1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZW1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rXHRjdHgtXHUwMDNlaW5mbGlnaHQgPSBmYWxzZTtcbitcdGN0eC1cdTAwM2VkZXYgPSAwO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbWVtY2ctXHUwMDNlZnJuX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4gLyogaXNzdWUgZm9yZWlnbiB3cml0ZWJhY2sgZmx1c2hlcyBmb3IgcmVjb3JkZWQgZm9yZWlnbiBkaXJ0eWluZyBldmVudHMgKi9cbiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4ge1xuQEAgLTM5NDksNiArNDAxNCwxOSBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4gXHR1NjQgbm93ID0gamlmZmllc182NDtcbiBcdGludCBpO1xuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbitcdFx0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV07XG4rXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rXHRcdGlmICghY3R4LVx1MDAzZWluZmxpZ2h0IFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlZGV2KSB7XG4rXHRcdFx0Y3R4LVx1MDAzZWluZmxpZ2h0ID0gdHJ1ZTtcbitcdFx0XHR0cmFjZV9mbHVzaF9mb3JlaWduKHdiLCAwLCAwLCBjdHgtXHUwMDNlZGV2KTtcbitcdFx0XHRxdWV1ZV93b3JrKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIsIFx1MDAyNmN0eC1cdTAwM2V3b3JrKTtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rXHR9XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xuIFx0XHRzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4gKmZybiA9IFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldO1xuIFxuQEAgLTM5NjEsNyArNDAzOSw4IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcbiBcdFx0aWYgKHRpbWVfYWZ0ZXI2NChmcm4tXHUwMDNlYXQsIG5vdyAtIGludHYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2ZnJuLVx1MDAzZWRvbmUuY250KSA9PSAxKSB7XG4gXHRcdFx0ZnJuLVx1MDAzZWF0ID0gMDtcbi1cdFx0XHR0cmFjZV9mbHVzaF9mb3JlaWduKHdiLCBmcm4tXHUwMDNlYmRpX2lkLCBmcm4tXHUwMDNlbWVtY2dfaWQpO1xuK1x0XHRcdHRyYWNlX2ZsdXNoX2ZvcmVpZ24od2IsIGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCxcbitcdFx0XHRcdFx0ICAgIDApO1xuIFx0XHRcdGNncm91cF93cml0ZWJhY2tfYnlfaWQoZnJuLVx1MDAzZWJkaV9pZCwgZnJuLVx1MDAzZW1lbWNnX2lkLFxuIFx0XHRcdFx0XHQgICAgICAgV0JfUkVBU09OX0ZPUkVJR05fRkxVU0gsXG4gXHRcdFx0XHRcdCAgICAgICBcdTAwMjZmcm4tXHUwMDNlZG9uZSk7XG5AQCAtNDIwMiw5ICs0MjgxLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0bWVtY2ctXHUwMDNla21lbWNnX2lkID0gLTE7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2xpc3QpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHggPSBcdTAwMjZtZW1jZy1cdTAwM2ViZGV2X2ZybltpXTtcbitcbiBcdFx0bWVtY2ctXHUwMDNlY2d3Yl9mcm5baV0uZG9uZSA9XG4gXHRcdFx0X19XQl9DT01QTEVUSU9OX0lOSVQoXHUwMDI2bWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xuK1x0XHRJTklUX1dPUksoXHUwMDI2Y3R4LVx1MDAzZXdvcmssIGJkZXZfZnJuX2ZsdXNoX3dvcmspO1xuK1x0XHRjdHgtXHUwMDNlbWVtY2cgPSBtZW1jZztcbitcdH1cbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrKTtcbiAjZW5kaWZcbiBcdGxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7XG4gXHRyZXR1cm4gbWVtY2c7XG5AQCAtNDM4Niw4ICs0NDcxLDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcdGludCBfX21heWJlX3VudXNlZCBpO1xuIFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xuIFx0XHR3Yl93YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNm1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldLmRvbmUpO1xuK1x0XHRmbHVzaF93b3JrKFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldLndvcmspO1xuK1x0fVxuICNlbmRpZlxuIFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxuIFx0XHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZtZW1jZ19zb2NrZXRzX2VuYWJsZWRfa2V5KTtcbkBAIC01NzAzLDYgKzU3OTAsMTIgQEAgaW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbiBcdG1lbWNnX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwibWVtY2dcIiwgV1FfUEVSQ1BVLCAwKTtcbiBcdFdBUk5fT04oIW1lbWNnX3dxKTtcbiBcbisjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbitcdG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIgPSBhbGxvY193b3JrcXVldWUoXCJtZW1jZ19iZGV2X2Zybl9mbHVzaGVyXCIsXG4rXHRcdFx0XHRcdCAgICAgICBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDApO1xuK1x0V0FSTl9PTighbWVtY2dfYmRldl9mcm5fZmx1c2hlcik7XG4rI2VuZGlmXG4rXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZwZXJfY3B1X3B0cihcdTAwMjZtZW1jZ19zdG9jaywgY3B1KS1cdTAwM2V3b3JrLFxuIFx0XHRcdCAgZHJhaW5fbG9jYWxfbWVtY2dfc3RvY2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6MzY6MzYuNzEwMDM3MTgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTA2NTU4NDkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3Igc3l6a2FsbGVyLiBUaGUgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBzbyB0aGF0J3MgZ29vZC4gTm93LCBsZXQncyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgZnVuY3Rpb24gYGJkZXZfZmx1c2hfYnlfZGV2YCBiZWluZyBhZGRlZCBpbiBgYmxvY2svYmRldi5jYCwgYWxvbmcgd2l0aCBhIGRlY2xhcmF0aW9uIGluIGBibGtkZXYuaGAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gYmUgZGVzaWduZWQgdG8gZmx1c2ggYSBibG9jayBkZXZpY2UgYmFzZWQgb24gaXRzIGBkZXZfdGAgaWRlbnRpZmllci4gSXQgZ3JhYnMgdGhlIGJsb2NrIGRldmljZSwgdHJpZXMgdG8gbG9jayB0aGUgYG9wZW5fbXV0ZXhgLCBjaGVja3MgaWYgaXQncyBvcGVuZWQsIGFuZCBpZiBzbywgY2FsbHMgYHN5bmNfYmxvY2tkZXZfbm93YWl0YC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGZsdXNoaW5nIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgYXN5bmNocm9ub3VzIG9uZXMsIG9mdGVuIGV4cG9zZSBpbnRlcmVzdGluZyByYWNlIGNvbmRpdGlvbnMgYW5kIHBvdGVudGlhbCBidWdzLlxuXG5UaGUgY2hhbmdlcyB0byBgbWVtY29udHJvbC5oYCBhcmUgYSBiaXQgbW9yZSBpbnZvbHZlZC4gV2UndmUgZ290IGEgbmV3IGBiZGV2X2Zybl9mbHVzaF9jdHhgIHN0cnVjdCBhbmQgc29tZSBhZGRpdGlvbnMgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBmbHVzaCByZXF1ZXN0cywgYWxsIHVuZGVyIHRoZSBgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoaW5nLiBUaGUgdHJhY2Vwb2ludCB1cGRhdGVzIGluIGB3cml0ZWJhY2suaGAgYXJlIGxpa2VseSBqdXN0IGZvciBpbnN0cnVtZW50YXRpb24uXG5cblRoZSBgbW0vbWVtY29udHJvbC5jYCBjaGFuZ2VzIGFyZSB0aGUgbWVhdCBvZiBpdC4gV2UndmUgZ290IGZ1bmN0aW9ucyB0byB0cmFjayBmb3JlaWduIGJsb2NrIGRldmljZXMgKGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmApLCBtb2RpZmljYXRpb25zIHRvIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgIHRvIGRldGVjdCBgYmRldl9pbm9kZWAgYW5kIGNhbGwgdGhlIHRyYWNraW5nIGZ1bmN0aW9uLCBgYmRldl9mcm5fZmx1c2hfd29ya2AgYmVpbmcgYWRkZWQsIG1vZGlmaWNhdGlvbnMgdG8gYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgdG8gcXVldWUgd29yayB0byBgbWVtY2dfYmRldl9mcm5fZmx1c2hlcmAsIGFuZCBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi9mcmVlaW5nIG9mIHRoaXMgd29ya3F1ZXVlIGluIGBtZW1fY2dyb3VwX2FsbG9jYCwgYG1lbV9jZ3JvdXBfY3NzX2ZyZWVgIGFuZCBgbWVtX2Nncm91cF9pbml0YCByZXNwZWN0aXZlbHkuXG5cbk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgaW50ZXJhY3Rpb24gYmV0d2VlbiBtZW1vcnkgY2dyb3VwcyBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgZGlydHkgcGFnZXMgYXJlIHRyYWNrZWQgYW5kIGZsdXNoZWQgaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4gVGhlIGFkZGVkIGZsdXNoaW5nIGZ1bmN0aW9uLCB0aGUgdHJhY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBhc3luY2hyb25vdXMgd29ya3F1ZXVlIGFsbCBwb2ludCB0byBhIHBvdGVudGlhbGx5IGNvbXBsZXggaW50ZXJhY3Rpb24uIE5vdywgdGhlIG5leHQgdGhpbmcgdG8gdmVyaWZ5IGlzIHdoYXQgY29uZmlndXJhdGlvbnMgZW5hYmxlIGBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgdXMgaG93IGJyb2FkbHkgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwuIFRoaXMgaXMgc2hhcGluZyB1cCB0byBiZSBhIHByZXR0eSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYW5kIHRoZSB0aWdodCBpbnRlZ3JhdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZSdzIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBmaW5kaW5nIGludGVyZXN0aW5nIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM2OjQxLjc3NTYyNTAyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDYxODQ3ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9XUklURUJBQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExMjU9Y29uZmlnIEJMS19DR1JPVVBcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTQ2LVxcbmluaXQvS2NvbmZpZzoxMTQ3OmNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXFxuaW5pdC9LY29uZmlnLTExNDgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNjo0My40ODE4MTU1NzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTQxODI5NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gd2hlcmUgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXRzZWxmLiBTcGVjaWZpY2FsbHksIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgYSBsb3Qgb2YgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIExldCdzIHpvb20gaW4gb24gdGhhdCBmaWxlLCBhbmQgSSdsbCBqdW1wIHJpZ2h0IHRvIGFyb3VuZCBsaW5lIDExNDcuIFRoYXQgZmVlbHMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gd2hhdCBJJ20gbG9va2luZyBpbnRvLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gYnVpbGQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNjo0Ny40MjM2NDY3NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0T25lIG5lZWRzIHRvIGFsc28gZW5hYmxlIGFjdHVhbCBJTyBjb250cm9sbGluZyBsb2dpYy9wb2xpY3kuIEZvclxcbjExNDE6XFx0XFx0ZW5hYmxpbmcgcHJvcG9ydGlvbmFsIHdlaWdodCBkaXZpc2lvbiBvZiBkaXNrIGJhbmR3aWR0aCBpbiBDRlEsIHNldFxcbjExNDI6XFx0XFx0Q09ORklHX0JGUV9HUk9VUF9JT1NDSEVEPXk7IGZvciBlbmFibGluZyB0aHJvdHRsaW5nIHBvbGljeSwgc2V0XFxuMTE0MzpcXHRcXHRDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HPXkuXFxuMTE0NDpcXHRcXG4xMTQ1OlxcdFxcdFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9ibGtpby1jb250cm9sbGVyLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4xMTQ2OlxcdFxcbjExNDc6XFx0Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcXG4xMTQ4OlxcdFxcdGJvb2xcXG4xMTQ5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0cgXFx1MDAyNlxcdTAwMjYgQkxLX0NHUk9VUFxcbjExNTA6XFx0XFx0ZGVmYXVsdCB5XFxuMTE1MTpcXHRcXG4xMTUyOlxcdG1lbnVjb25maWcgQ0dST1VQX1NDSEVEXFxuMTE1MzpcXHRcXHRib29sIFxcXCJDUFUgY29udHJvbGxlclxcXCJcXG4xMTU0OlxcdFxcdGRlZmF1bHQgblxcbjExNTU6XFx0XFx0aGVscFxcbjExNTY6XFx0XFx0ICBUaGlzIGZlYXR1cmUgbGV0cyBDUFUgc2NoZWR1bGVyIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmQgY29udHJvbCBDUFVcXG4xMTU3OlxcdFxcdCAgYmFuZHdpZHRoIGFsbG9jYXRpb24gdG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgdXNlcyBjZ3JvdXBzIHRvIGdyb3VwXFxuMTE1ODpcXHRcXHQgIHRhc2tzLlxcbjExNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM2OjQ3LjQyMzc1NTQ0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1NjQzMTQ1MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wb3J0YW5jZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBDR1JPVVBfV1JJVEVCQUNLYCBkZXBlbmRzIG9uIGBNRU1DR2AgYW5kIGBCTEtfQ0dST1VQYCBhbmQgZGVmYXVsdHMgdG8gJ3knLiBTbywgcmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IHRob3NlIHR3byBjb25maWd1cmF0aW9ucyBhcmUgZXNzZW50aWFsIHRvIGNvbnNpZGVyIGZvciB0aGlzIHBhdGNoLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGhpbmcgYWN0dWFsbHkgdG91Y2hlcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBzdWJzeXN0ZW1zIG1vZGlmaWVkIGFyZSBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL21lbWNvbnRyb2wuY2ApIGFuZCB0aGUgYmxvY2sgbGF5ZXIgKGBibG9jay9iZGV2LmNgKS4gQWxyaWdodCwgc291bmRzIGxpa2UgaW50ZXJlc3RpbmcgY29kZS4gSXMgdGhpcyByZWFjaGFibGUgY29kZT8gWWVzLCB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gY2dyb3VwcyB3cml0ZWJhY2sgYW5kIGRpcnR5aW5nIHBhZ2VzIG9uIGJsb2NrIGRldmljZXMuIFNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgbG9vcCBkZXZpY2VzLCByYW1kaXNrcywgcmF3IGJsb2NrIGRldmljZXMsIG9yIGV2ZW4gZm9yZWlnbiBkaXJ0eSB0cmFja2luZyBpZiBhIHBhZ2UgaW4gb25lIG1lbWNnIGlzIGRpcnRpZWQgZm9yIGEgYmxvY2sgZGV2aWNlIHdoZXJlIHRoZSB3cml0ZWJhY2sgaXMgaGFuZGxlZCBieSBhIGRpZmZlcmVudCBtZW1jZyBvciBldmVuIHRoZSByb290IGNncm91cC5cblxuR2l2ZW4gdGhhdCBpdCB0b3VjaGVzIHRoZSBjb3JlIHN1YnN5c3RlbXMsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciBhbmQgaXQgaXMgcmVsYXRlZCB0byBleGVjdXRhYmxlIGNvZGUsIHRoaXMgc2NyZWFtcyBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGlzIGZhbGxzIHNxdWFyZWx5IHdpdGhpbiB0aGUgY3JpdGVyaWEgdGhleSd2ZSBkZWZpbmVkOiBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgY29kZSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LlxuXG5MZXQncyBzZWUsIHRoZSBmdW5jdGlvbnMvc3ltYm9scyBpbnZvbHZlZDogSW4gYGJsb2NrL2JkZXYuY2AsIHdlIGhhdmUgYGJkZXZfZmx1c2hfYnlfZGV2YC4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIEkgc2VlIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmAgKHRoYXQncyBzdGF0aWMsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gbm90ZSksIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoYW5vdGhlciBzdGF0aWMgb25lKSwgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAsIGFuZCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYC5cblxuSG9sZCBvbiwgbGV0IG1lIGNoZWNrIHNvbWV0aGluZyBhYm91dCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5YC4gSXMgdGhhdCBhbiBpbmxpbmUgZnVuY3Rpb24/IEdvdHRhIG1ha2Ugc3VyZSBJIHRyYWNrIGRvd24gd2hlcmUgdGhhdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIHVzZWQgYmVmb3JlIEkgbWFrZSBhIGZpbmFsIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNzoxMy4wNjY5MDI0NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTQzNzY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTUxPXN0cnVjdCBtZW1fY2dyb3VwX3RocmVzaG9sZHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTY3LSAqXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTY4OiAqIFNlZSBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoKSBmb3IgZGV0YWlscy5cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjktICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNTkzPXZvaWQgbWVtX2Nncm91cF93Yl9zdGF0cyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGxvbmcgKnBmaWxlcGFnZXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE1OTc6dm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGgoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk4LVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNTk5LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE2MDA6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MDEtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNjEzLVxcdGlmICh1bmxpa2VseShcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyAhPSB3Yi1cXHUwMDNlbWVtY2dfY3NzKSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjE0OlxcdFxcdG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChmb2xpbywgd2IpO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MTUtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjI3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3diX3N0YXRzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YixcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2MzQtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYzNTpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzNi1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zODU3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZGV2X3QgZGV2KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM5MTYtICogd3JpdGViYWNrIG93bmVyc2hpcHMgZG9uJ3QgbWF0Y2ggLSBpcyBkaXJ0aWVkLFxcbm1tL21lbWNvbnRyb2wuYzozOTE3OiAqIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eSgpIHJlY29yZHMgdGhlIGlub2RlIG93bmluZyBiZGlfd3JpdGViYWNrXFxubW0vbWVtY29udHJvbC5jLTM5MTgtICogb24gdGhlIHBhZ2Ugb3duaW5nIG1lbWNnLiBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMoKSBkZWNpZGVzIHRoYXQgdGhlXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzkyOC0gKi9cXG5tbS9tZW1jb250cm9sLmM6MzkyOTp2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL21lbWNvbnRyb2wuYy0zOTMwLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yNjAzPXN0YXRpYyB2b2lkIGZvbGlvX2FjY291bnRfZGlydGllZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNjI3LVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjYyODpcXHRcXHRtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoZm9saW8sIHdiKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MjktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNzoxNC43ODIzNDU1NTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MTE5OTcyMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBzZWUgdGhhdCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCBpcyBhIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBBbmQganVzdCB0byBrZWVwIHRoZSBmdWxsIHBpY3R1cmUgaW4gbWluZCwgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXMgYWxzbyBkZWZpbmVkIHRoZXJlLiBHaXZlbiB0aGF0IGNvbnRleHQsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBUaW1lIHRvIHRyYWNlIGl0cyBjYWxsZXJzLiBMZXQncyBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNzoyMC45MDIzMjAyMThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA1MDE0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9mbHVzaF9mb3JlaWduXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MDA9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYxNy1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjE4OnZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYxOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MzU9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzOS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjQwOnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2NDEte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM4NTc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBkZXZfdCBkZXYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzkxOS0gKiBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHNcXG5tbS9tZW1jb250cm9sLmM6MzkyMDogKiBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oKSB3aGljaCBxdWV1ZXMgd3JpdGViYWNrIG9uIHRoZSByZWNvcmRlZFxcbm1tL21lbWNvbnRyb2wuYy0zOTIxLSAqIGZvcmVpZ24gYmRpX3dyaXRlYmFja3Mgd2hpY2ggaGF2ZW4ndCBleHBpcmVkLiAgQm90aCB0aGUgbnVtYmVycyBvZlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTM5OTA9c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDAwOS0vKiBpc3N1ZSBmb3JlaWduIHdyaXRlYmFjayBmbHVzaGVzIGZvciByZWNvcmRlZCBmb3JlaWduIGRpcnR5aW5nIGV2ZW50cyAqL1xcbm1tL21lbWNvbnRyb2wuYzo0MDEwOnZvaWQgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG5tbS9tZW1jb250cm9sLmMtNDAxMS17XFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTE3OTE9c3RhdGljIGludCBiYWxhbmNlX2RpcnR5X3BhZ2VzKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YixcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMTg2Ni1cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjE4Njc6XFx0XFx0bWVtX2Nncm91cF9mbHVzaF9mb3JlaWduKHdiKTtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTE4NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM3OjIyLjQ4MjgyODM5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzI1ODU0NzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gYGJkZXZfZmx1c2hfYnlfZGV2YCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGlkZW50aWZpZWQgdGhpcyBgYmRldl9mbHVzaF9ieV9kZXZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIHdlJ3JlIGludmVzdGlnYXRpbmcuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBlcmZvcm0gYSB0aG9yb3VnaCBjb2RlIHJldmlldy4gV2UgY2FuJ3QganVzdCBhc3N1bWUgaXRzIGJlaGF2aW9yIGJhc2VkIG9uIGl0cyBuYW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgb2YgdXNlLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBXZSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBhbGwgaW5zdGFuY2VzIG9mIHRoZSBmdW5jdGlvbidzIHVzYWdlLCBzbyB3ZSdyZSBtYWtpbmcgc3VyZSB3ZSBhcmVuJ3QgbWlzc2luZyBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhlIGJlaGF2aW9yIHdlJ3JlIG9ic2VydmluZy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGRlYnVnZ2luZyBwcm9jZXNzIHRvIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozNzo0NS43NDEzNzkyMDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDA4OTA1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmRldl9mbHVzaF9ieV9kZXZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmRldi5jPTI2NT1FWFBPUlRfU1lNQk9MX0dQTChzeW5jX2Jsb2NrZGV2X25vd2FpdCk7XFxuLS1cXG5ibG9jay9iZGV2LmMtMjY3LS8qKlxcbmJsb2NrL2JkZXYuYzoyNjg6ICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSdzIHBhZ2UgY2FjaGVcXG5ibG9jay9iZGV2LmMtMjY5LSAqIEBkZXY6IHRhcmdldCBibG9jayBkZXZpY2UgbnVtYmVyXFxuLS1cXG5ibG9jay9iZGV2LmMtMjczLSAqL1xcbmJsb2NrL2JkZXYuYzoyNzQ6dm9pZCBiZGV2X2ZsdXNoX2J5X2RldihkZXZfdCBkZXYpXFxuYmxvY2svYmRldi5jLTI3NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTE3MTI9aW50IHN5bmNfYmxvY2tkZXZfbm93YWl0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTcxMzp2b2lkIGJkZXZfZmx1c2hfYnlfZGV2KGRldl90IGRldik7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xNzE0LXZvaWQgc3luY19iZGV2cyhib29sIHdhaXQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTM5OTA9c3RhdGljIHZvaWQgYmRldl9mcm5fZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzk5NS1cXG5tbS9tZW1jb250cm9sLmM6Mzk5NjpcXHRiZGV2X2ZsdXNoX2J5X2RldihjdHgtXFx1MDAzZWRldik7XFxubW0vbWVtY29udHJvbC5jLTM5OTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM3OjQ3LjI4MjI3NzExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NDA1OTc2ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGb3JlaWduIERpcnR5IFBhZ2UgRmx1c2hpbmcgYW5kIEZvY3VzIFN5bWJvbCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXMgdHJpZ2dlcmVkLCBhbmQgSSdtIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgYGJhbGFuY2VfZGlydHlfcGFnZXNgLiBJdCBjYWxscyBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCB3aGVuIHRoZSBgbWR0Y2AgaGFzIGZvcmVpZ24gZGlydHlpbmcgb3IgdGhlIGRpcnR5IHJhdGlvIGlzIGhpZ2g7IHRoYXQncyB0aGUgY29yZS5cblxuTm93LCBJJ20gdHJhY2luZyB3aGVyZSBlbHNlIHRoaXMgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgZnVuY3Rpb25hbGl0eSBpcyB0b3VjaGVkLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBibG9jay9iZGV2LmNgIHdpdGggYGJkZXZfZmx1c2hfYnlfZGV2YC4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIHRoZXJlJ3MgYSBidW5jaDogYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCAoc3RhdGljKSwgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAsIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoc3RhdGljKSwgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgaXRzZWxmLCBgbWVtX2Nncm91cF9hbGxvY2AsIGBtZW1fY2dyb3VwX2Nzc19mcmVlYCwgYW5kIGBtZW1fY2dyb3VwX2luaXRgLlxuXG5XYWl0Li4uIGBtZW1fY2dyb3VwX2FsbG9jYCBpcyBwcmV0dHkgZ2VuZXJhbCwgaXNuJ3QgaXQ/IFRoYXQncyB1c2VkIGR1cmluZyBtZW1jZyBjcmVhdGlvbiwgd2hpY2ggaXMgZXZlcnl3aGVyZS4gQnV0IGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgLCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCwgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgLCBgYmRldl9mbHVzaF9ieV9kZXZgLCBhbmQgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCDigJMgdGhvc2Ugc2VlbSBzcGVjaWZpYyB0byBmb3JlaWduIGRpcnR5aW5nIGFuZCBiZGV2IGZsdXNoZXMuXG5cbk9rYXksIGxldCdzIGtlZXAgZ29pbmcuIENhbiBJIHB1dCBzdGF0aWMgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgPyBMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHJ1bGVzLiBBaCwgcmlnaHQuIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyDigJMgYWxsb2NhdG9ycywgcGFnZSBmYXVsdCBoYW5kbGVycywgZXRjLiBJbnN0ZWFkLCBJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBBbmQsIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGluIGhlYWRlcnMgYXJlIHRyaWNreSwgYXMgdGhleSBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMsIHNvIHRhcmdldCBub24tc3RhdGljIGNhbGxlcnMgaW4gYC5jYCBmaWxlcy5cblxuQnV0IHdhaXQgYSBtaW51dGUsIHRoZSB0ZXh0IHNheXMgc3RhdGljIGZ1bmN0aW9ucyAqaW4qLmMgZmlsZXMgZG8gaGF2ZSBzeW1ib2wgYWRkcmVzc2VzISBMZXQgbWUgcmUtZXZhbHVhdGUgdGhlIGZ1bmN0aW9uczpcblxuKiAgIGBiZGV2X2ZsdXNoX2J5X2RldmAgKG5vbi1zdGF0aWMpIC0gZ29vZFxuKiAgIGBiZGV2X2Zybl9mbHVzaF93b3JrYCAoc3RhdGljIHdvcmsgaGFuZGxlcikgLSBPa2F5LCBtYXliZSBnb29kP1xuKiAgIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgIChub24tc3RhdGljKSAtIGdvb2RcbiogICBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCAobm9uLXN0YXRpYykgLSBnb29kXG4qICAgYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2YCAoc3RhdGljIGhlbHBlcikgLSBTdGlsbCBub3Qgc3VyZS4uLlxuXG5JcyBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgIGlubGluZWQ/IEl0J3Mgc3RhdGljLCBhbmQgb25seSBjYWxsZWQgb25jZSB3aXRoaW4gYG1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9kaXJ0eV9zbG93cGF0aGAuIFBlcmhhcHMuXG5cbkhvbGQgb24sIEkgc2VlIHNvbWV0aGluZy4gYGJkZXZfZnJuX2ZsdXNoX3dvcmtgJ3MgYWRkcmVzcyBpcyAqdGFrZW4qIGluIHRoZSBjb2RlIChgSU5JVF9XT1JLKFx1MDAyNmN0eC1cdTAwM2V3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKWApLiBUaGlzIG1lYW5zIGl0IGNhbiBORVZFUiBiZSBpbmxpbmVkISBJdCdzIGRlZmluaXRlbHkgYSBkaXN0aW5jdCBzeW1ib2wgaW4gYHZtbGludXhgLiBBbmQgYGJkZXZfZmx1c2hfYnlfZGV2YCBpcyBleHBvcnRlZCwgc28gdGhhdCBpcyBhbHNvIGRpc3RpbmN0LiBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCBhbmQgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAgYXJlIGJvdGggZXhwb3J0ZWQgZnVuY3Rpb25zLCB0b28uXG5cbk9rYXksIG5vdyBsZXQncyBzZWUgd2hhdCBjb25maWdzIGFyZSByZWxldmFudC4gSSBzZWUgYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBhbmQgSSBrbm93IGl0IGRlcGVuZHMgb24gYE1FTUNHYCBhbmQgYEJMS19DR1JPVVBgLlxuXG5Ob3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2U/IENoZWNraW5nIGBibG9jay9iZGV2LmNgLCBgYmRldl9mbHVzaF9ieV9kZXZgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CTE9DS2AgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayBgYmxvY2svTWFrZWZpbGVgLiBJIHRoaW5rIEknbSBzdGFydGluZyB0byBnZXQgYSBnb29kIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozODowMi42ODgyNTY1MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTMzNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJkZXZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL01ha2VmaWxlPTY9Q09OVEVYVF9BTkFMWVNJUyA6PSB5XFxuYmxvY2svTWFrZWZpbGUtNy1cXG5ibG9jay9NYWtlZmlsZTo4Om9iai15XFx0XFx0Oj0gYmRldi5vIGZvcHMubyBiaW8ubyBlbGV2YXRvci5vIGJsay1jb3JlLm8gYmxrLXN5c2ZzLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTktXFx0XFx0XFx0YmxrLWZsdXNoLm8gYmxrLXNldHRpbmdzLm8gYmxrLWlvYy5vIGJsay1tYXAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjAyLjczMzM5MzE3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0OTI0MTI5OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGhlcmUuIEZpcnN0LCBsZXQncyBsb29rIGF0IGBvYmotJChDT05GSUdfQkxPQ0spYCBpbiB0aGUgcm9vdCBgTWFrZWZpbGVgIG9yIGBLY29uZmlnYCwgc3BlY2lmaWNhbGx5IHRvIHNlZSB3aGF0IGBibG9jay9gIGRlcGVuZHMgb24gLSBwcmVzdW1hYmx5IGBDT05GSUdfQkxPQ0tgLCBidXQgbGV0J3MgY29uZmlybS4gQWxyaWdodCwgdGhhdCdzIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgY2hlY2sgb3V0IGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBhbmQgdGhlc2UgYmxvY2sgY2dyb3VwIGZlYXR1cmVzLiBBaCwgeWVzLCBgbW0vbWVtY29udHJvbC5jYCBkZXBlbmRzIG9uIGBDT05GSUdfTUVNQ0dgLiBNYWtlcyBzZW5zZS4gSSBrbm93IHRoZXJlJ3Mgc29tZSBjb25kaXRpb25hbCBjb2RlIGluIHRoZXJlLiBJIGJldCBpdCBoYXMgdG8gZG8gd2l0aCB0aGUgYmxvY2sgY2dyb3VwIHN0dWZmLlxuXG5MZXQgbWUgY2hlY2sgaW5zaWRlIGBtbS9tZW1jb250cm9sLmNgLi4uIGFoLCB5ZXMuIFRoZSBmb3JlaWduIHRyYWNraW5nIGNvZGUgYW5kIHRoZSBuZXcgZmllbGRzIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYXJlIGFsbCBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS2AuIFRoYXQncyB0aGUgbGluay4gU28gYENPTkZJR19DR1JPVVBfV1JJVEVCQUNLYCBpcyBrZXkuXG5cblJpZ2h0LCBzbyB0byB0cmFjZSB0aGlzIGJhY2ssIEkgbmVlZCB0byBjaGVjayBgaW5pdC9LY29uZmlnYCBhZ2FpbiB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXBzLiBMZXQncyBzZWUuLi4gYE1FTUNHYCBkZXBlbmRzIG9uIGBDR1JPVVBTYC4gR290IGl0LiBOb3csICp0aGF0KiBgQ0dST1VQX1dSSVRFQkFDS2AgZGVwZW5kcyBvbiBib3RoIGBNRU1DRyBcdTAwMjZcdTAwMjYgQkxLX0NHUk9VUGAuIEdvb2QuIEknbSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlLlxuXG5Pa2F5LCBteSBmaW5hbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgSSB3YW50IHRvIGNvbmZpcm0gaWYgYEJMT0NLYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGBCTEtfQ0dST1VQYC4gSSBoYXZlIHRvIGJlIHN1cmUgb2YgdGhlIGRlcGVuZGVuY3kgdHJlZS4gSSBjYW4ndCBidWlsZCBzb21ldGhpbmcgd2l0aCBhIGNvbmZpZ3VyYXRpb24gdGhhdCdzIGdvaW5nIHRvIGZhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQ4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjA3LjY1NzUyNTg1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTM2NDA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxcbi0tXFxuYmxvY2svS2NvbmZpZy00MS1cXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxcbmJsb2NrL0tjb25maWctNDMtXFx0Ym9vbFxcbmJsb2NrL0tjb25maWctNDQtXFxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xcbmJsb2NrL0tjb25maWctNDYtXFx0Ym9vbFxcbi0tXFxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcXG4tLVxcbmJsb2NrL0tjb25maWctMTMzLVxcbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxcbmJsb2NrL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNDQtXFxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcXG5ibG9jay9LY29uZmlnLTE0Ni1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1xcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTUzLVxcbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxcbmJsb2NrL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNjMtXFxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXFxuYmxvY2svS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiQ2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnPTExMDg9Y29uZmlnIE1FTUNHX1YxXFxuLS1cXG5pbml0L0tjb25maWctMTEyNC1cXG5pbml0L0tjb25maWc6MTEyNTpjb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTI2LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjA5LjIwNjg5NTg1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NzI3NjE0MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLCBgaW5pdC9LY29uZmlnYC4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTEyNSwgd2hpY2gsIGJhc2VkIG9uIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIGxpa2VseSBjb250YWlucyBzb21lIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBhIHJlbGF0ZWQgZ3JvdXBpbmcgb2Ygc2V0dGluZ3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBoaWdoLWxldmVsIG1vZHVsZSBkZWZpbml0aW9uLCBhIGNydWNpYWwgZGV2aWNlIGRyaXZlciBwYXJhbWV0ZXIsIG9yIHBlcmhhcHMgYSBzZWN0aW9uIHRoYXQgc2V0cyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgaW5pdGlhbCByYW1kaXNrIG9yIHJvb3QgZmlsZXN5c3RlbSBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBob3cgdGhlc2UgY29tcG9uZW50cyBjb21lIHRvZ2V0aGVyIHRvIGZvcm0gdGhlIG92ZXJhbGwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGFuZCB1bmRlcnN0YW5kIHdoYXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozODoxMy45MzQ1MTI0NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTIwOlxcdFxcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxcbjExMjE6XFx0XFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjExMjQ6XFx0XFxuMTEyNTpcXHRjb25maWcgQkxLX0NHUk9VUFxcbjExMjY6XFx0XFx0Ym9vbCBcXFwiSU8gY29udHJvbGxlclxcXCJcXG4xMTI3OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4xMTI4OlxcdFxcdGRlZmF1bHQgblxcbjExMjk6XFx0XFx0aGVscFxcbjExMzA6XFx0XFx0R2VuZXJpYyBibG9jayBJTyBjb250cm9sbGVyIGNncm91cCBpbnRlcmZhY2UuIFRoaXMgaXMgdGhlIGNvbW1vblxcbjExMzE6XFx0XFx0Y2dyb3VwIGludGVyZmFjZSB3aGljaCBzaG91bGQgYmUgdXNlZCBieSB2YXJpb3VzIElPIGNvbnRyb2xsaW5nXFxuMTEzMjpcXHRcXHRwb2xpY2llcy5cXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxcbjExMzU6XFx0XFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxcbjExMzY6XFx0XFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXFxuMTEzNzpcXHRcXHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXFxuMTEzODpcXHRcXG4xMTM5OlxcdFxcdFRoaXMgb3B0aW9uIG9ubHkgZW5hYmxlcyBnZW5lcmljIEJsb2NrIElPIGNvbnRyb2xsZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjEzLjkzNDYzOTEyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNDQxNTY3ODAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvcmVpZ24gRGlydHkgVHJhY2tpbmcgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIEZpcnN0LCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gYEJMS19DR1JPVVBgIGRlcGVuZHMgb24gYEJMT0NLYC4gYENHUk9VUF9XUklURUJBQ0tgIGRlcGVuZHMgb24gYm90aCBgTUVNQ0dgIGFuZCBgQkxLX0NHUk9VUGAuIEFuZCwgb2YgY291cnNlLCBgTUVNQ0dgIHJlbGllcyBvbiBgQ0dST1VQU2AuIFNvLCB0byBlbmFibGUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgc2V0dGluZyBgQ0dST1VQX1dSSVRFQkFDS2AsIGBNRU1DR2AsIGBCTEtfQ0dST1VQYCwgYW5kIGBCTE9DS2AgY292ZXJzIHRoZSByZXF1aXJlbWVudHMuIEl0J3Mgd29ydGggbm90aW5nIHRoYXQgYENHUk9VUF9XUklURUJBQ0tgIGlzIGEgc2ltcGxlIGJvb2xlYW4gaW4gYGluaXQvS2NvbmZpZ2AgdGhhdCdzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYE1FTUNHYCBhbmQgYEJMS19DR1JPVVBgIChhbmQgdGhlcmVmb3JlIGBCTE9DS2ApIGFyZSBlbmFibGVkIOKAkyBzbywgbGlzdGluZyBhbGwgZm91ciBpbiBgRW5hYmxlQ29uZmlnc2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgYXBwcm9hY2ggYW5kIGdvb2QgcHJhY3RpY2UgZm9yIGNsYXJpdHkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gV2UndmUgZ290OlxuXG4qICAgYGJkZXZfZmx1c2hfYnlfZGV2YDogQSBuZXcgZnVuY3Rpb24gaW50cm9kdWNlZCBpbiBgYmxvY2svYmRldi5jYC5cbiogICBgYmRldl9mcm5fZmx1c2hfd29ya2A6IEEgbmV3IHdvcmsgZnVuY3Rpb24gaW50cm9kdWNlZCBpbiBgbW0vbWVtY29udHJvbC5jYC5cbiogICBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYDogQSBtb2RpZmllZCBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC5cbiogICBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYDogQW5vdGhlciBtb2RpZmllZCBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC5cbiogICBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2JkZXZgOiBBIG5ldyBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC5cblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGlkZW50aWZpZWQgYWxsIHRoZSBjYWxsZXJzIG9mIHRoZXNlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBiZGV2X2ZsdXNoX2J5X2RldmAgY2FsbHMgYGJsa2Rldl9nZXRfbm9fb3BlbmAsIGBtdXRleF90cnlsb2NrYCBvbiBgYmRfZGlzay1cdTAwM2VvcGVuX211dGV4YCwgYHN5bmNfYmxvY2tkZXZfbm93YWl0YCwgYW5kIGBibGtkZXZfcHV0X25vX29wZW5gLlxuXG5UaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyBmb3JlaWduIGRpcnR5IHRyYWNraW5nIGZvciBibG9jayBkZXZpY2UgaW5vZGVzIGFjcm9zcyBjZ3JvdXBzLiBUaGUgZ2lzdCBpcywgd2hlbiBhIGZvcmVpZ24gYmxvY2sgZGV2aWNlIGZvbGlvIGlzIGRpcnRpZWQgd2l0aGluIGEgbWVtY2csIGluc3RlYWQgb2YgdGhlIG9sZCBiZWhhdmlvciBvZiB0cmFja2luZyB3YiBhbmQgZmx1c2hpbmcgcG90ZW50aWFsbHkgdW5yZWxhdGVkIGlub2RlcywgaXQgbm93IHJlY29yZHMgdGhlIGJsb2NrIGRldmljZSBudW1iZXIgaW4gYG1lbWNnLVx1MDAzZWJkZXZfZnJuYCBhbmQgbGF0ZXIgY2FsbHMgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgIGFzeW5jaHJvbm91c2x5IG9uIGBtZW1jZ19iZGV2X2Zybl9mbHVzaGVyYCwgd2hpY2gsIGluIHR1cm4sIGNhbGxzIGBiZGV2X2ZsdXNoX2J5X2RldmAuXG5cblRoaXMgaXMgYSBub24tdHJpdmlhbCBjaGFuZ2UsIGludm9sdmluZyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbG9ja2luZyB3aXRoIGBmcm5fbG9ja2AgKGEgc3BpbmxvY2sgbmVzdGVkIGluc2lkZSBgbWFwcGluZy1cdTAwM2VpX3BhZ2VzYCksIGFzeW5jaHJvbm91cyB3b3JrcXVldWUgZGlzcGF0Y2ggdGhyb3VnaCBgbWVtY2dfYmRldl9mcm5fZmx1c2hlcmAsIGxpZmVjeWNsZSBzeW5jaHJvbml6YXRpb24gdXNpbmcgYGZsdXNoX3dvcmtgIGluc2lkZSBgbWVtX2Nncm91cF9jc3NfZnJlZWAsIGFuZCBibG9jayBkZXZpY2UgcmVmZXJlbmNlIG1hbmFnZW1lbnQgd2l0aCBtdXRleCBoYW5kbGluZyBpbiBgYmRldl9mbHVzaF9ieV9kZXZgLiBUaGlzIGlzIHF1aW50ZXNzZW50aWFsIGNvcmUgTU0vYmxvY2sgbGF5ZXIgY29kZSwgd2hpY2ggbWVhbnMgaXQncyBmdWxseSByZWFjaGFibGUgYW5kIHByaW1lIGZvciBmdXp6aW5nLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgd2UndmUgZ290IHRoZSBgRW5hYmxlQ29uZmlnc2A6IGBCTE9DS2AsIGBNRU1DR2AsIGBCTEtfQ0dST1VQYCwgYW5kIGBDR1JPVVBfV1JJVEVCQUNLYC4gVGhlIGBGb2N1c1N5bWJvbHNgOiBgYmRldl9mbHVzaF9ieV9kZXZgLCBgYmRldl9mcm5fZmx1c2hfd29ya2AsIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmAsIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgLCBhbmQgYG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbmAuXG5cbkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhc3luY2hyb25vdXMgZm9yZWlnbiB3cml0ZWJhY2sgaGFuZGxpbmcgZm9yIGJsb2NrIGRldmljZSBpbm9kZXMgc2hhcmVkIGFjcm9zcyBtZW1vcnkgY2dyb3Vwcy4gSXQgYWRkcyBhIG5ldyBmbHVzaGVyIHdvcmtxdWV1ZSwgbmV3IHdvcmsgdHJhY2tpbmcgbG9naWMgd2l0aCBgZnJuX2xvY2tgLCBhbmQgYmxvY2sgZGV2aWNlIGZsdXNoIGxvZ2ljLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgY29kZSBhbmQgaW50cm9kdWNlcyBwb3RlbnRpYWwgY29uY3VycmVuY3ksIGxpZmV0aW1lLCBhbmQgbG9ja2luZyBpc3N1ZXMsIG1ha2luZyBpdCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTI5LCJPdXRwdXRUb2tlbnMiOjIyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjI4LjM1MDMxOTg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxNDEwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMT0NLXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQkxLX0NHUk9VUFwiLFxuICAgIFwiQ0dST1VQX1dSSVRFQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfZmx1c2hfYnlfZGV2XCIsXG4gICAgXCJiZGV2X2Zybl9mbHVzaF93b3JrXCIsXG4gICAgXCJtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldlwiLFxuICAgIFwibWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoXCIsXG4gICAgXCJtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciB3cml0ZWJhY2sgbG9naWMgYnkgYWRkaW5nIGRlZGljYXRlZCBmb3JlaWduIGRpcnR5IHRyYWNraW5nIGFuZCBhc3luY2hyb25vdXMgZmx1c2hpbmcgZm9yIGJsb2NrIGRldmljZSBpbm9kZXMgYWNyb3NzIG1lbW9yeSBjZ3JvdXBzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2NraW5nIChmcm5fbG9jayBuZXN0aW5nIGluc2lkZSBtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzKSwgYSBkZWRpY2F0ZWQgd29ya3F1ZXVlIChtZW1jZ19iZGV2X2Zybl9mbHVzaGVyKSwgd29yayBpdGVtIHN5bmNocm9uaXphdGlvbiBkdXJpbmcgbWVtY2cgdGVhcmRvd24sIGFuZCBkZXZpY2UgZmx1c2ggaGFuZGxpbmcgaW4gYmRldl9mbHVzaF9ieV9kZXYuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHdhcnJhbnQgZnV6emluZyBmb3IgY29uY3VycmVuY3ksIGxvY2sgb3JkZXJpbmcsIGFuZCBsaWZlY3ljbGUgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJDR1JPVVBfV1JJVEVCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmRldl9mbHVzaF9ieV9kZXZcIixcbiAgICBcImJkZXZfZnJuX2ZsdXNoX3dvcmtcIixcbiAgICBcIm1lbV9jZ3JvdXBfdHJhY2tfZm9yZWlnbl9iZGV2XCIsXG4gICAgXCJtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhcIixcbiAgICBcIm1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIHdyaXRlYmFjayBsb2dpYyBieSBhZGRpbmcgZGVkaWNhdGVkIGZvcmVpZ24gZGlydHkgdHJhY2tpbmcgYW5kIGFzeW5jaHJvbm91cyBmbHVzaGluZyBmb3IgYmxvY2sgZGV2aWNlIGlub2RlcyBhY3Jvc3MgbWVtb3J5IGNncm91cHMuIEl0IGludHJvZHVjZXMgbmV3IGxvY2tpbmcgKGZybl9sb2NrIG5lc3RpbmcgaW5zaWRlIG1hcHBpbmctXFx1MDAzZWlfcGFnZXMpLCBhIGRlZGljYXRlZCB3b3JrcXVldWUgKG1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpLCB3b3JrIGl0ZW0gc3luY2hyb25pemF0aW9uIGR1cmluZyBtZW1jZyB0ZWFyZG93biwgYW5kIGRldmljZSBmbHVzaCBoYW5kbGluZyBpbiBiZGV2X2ZsdXNoX2J5X2Rldi4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgd2FycmFudCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSwgbG9jayBvcmRlcmluZywgYW5kIGxpZmVjeWNsZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6Mzg6MjguNDI0NDY4NjM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNDI1MTg4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozODoyOC40MjQ5MDI1MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDUxNDIwNzk2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIGRpcnR5IHBhZ2UgdHJhY2tpbmcgYW5kIHdyaXRlYmFjayBmb3IgYmxvY2sgZGV2aWNlIHBhZ2UgY2FjaGVzIGJ5IGFkZGluZyBgYmRldl9mcm5fZmx1c2hfY3R4YCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB0cmFja2luZyBkaXJ0eWluZyBvZiBibG9jayBkZXZpY2UgaW5vZGVzLCBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgZGVkaWNhdGVkIGFzeW5jaHJvbm91cyB3b3JrIChgYmRldl9mbHVzaF9ieV9kZXZgKS5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikuXFxuMi4gRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4YCBpbnN0YW5jZXMgYXJlIGVtYmVkZGVkIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIChlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uKSwgYW5kIGBJTklUX1dPUksoKWAgLyBgY3R4LVxcdTAwM2VtZW1jZ2AgYXJlIGV4cGxpY2l0bHkgc2V0IGR1cmluZyBgbWVtX2Nncm91cF9hbGxvYygpYC5cXG4zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzY2FsYXIgYXJndW1lbnRzIChzdWNoIGFzIGBkZXZfdCBkZXZgIGluIHRyYWNlcG9pbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgZXZhbHVhdGlvbi5cXG40LiBUaGUgcHJpbWFyeSByaXNrcyBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgbG9jayBvcmRlcmluZyAoYGZybl9sb2NrYCBuZXN0aW5nLCBJUlEgZGlzYWJsZW1lbnQsIGFuZCBgb3Blbl9tdXRleGAgdHJ5bG9jaykgYW5kIGJsb2NrIGRldmljZSByZWZlcmVuY2UgbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgZGVidWcgY2hlY2tzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmY2ZDg0YjIyNWFjNzJiMDU0ZTQ5MTI1YjVjNjgyYjNhMjc0MzA3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDExOjM2OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXG5pbmRleCBjZDgzMjMwODM3NDA2Li5kYTFmYzU2OTI2ZmQ0IDEwMDY0NFxuLS0tIGEvYmxvY2svYmRldi5jXG4rKysgYi9ibG9jay9iZGV2LmNcbkBAIC0yNjQsNiArMjY0LDMwIEBAIGludCBzeW5jX2Jsb2NrZGV2X25vd2FpdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jX2Jsb2NrZGV2X25vd2FpdCk7XG4gXG4rLyoqXG4rICogYmRldl9mbHVzaF9ieV9kZXYgLSBhdHRlbXB0IHdyaXRlYmFjayBvZiBhIGJsb2NrIGRldmljZSdzIHBhZ2UgY2FjaGVcbisgKiBAZGV2OiB0YXJnZXQgYmxvY2sgZGV2aWNlIG51bWJlclxuKyAqXG4rICogU2tpcCBjbG9zZWQgZGV2aWNlcyBvciBkZXZpY2VzIHdob3NlIG9wZW5fbXV0ZXggaXMgYnVzeS5cbisgKiBNYXkgc2xlZXAgd2hpbGUgc3VibWl0dGluZyB3cml0ZWJhY2s7IGRvZXMgbm90IHdhaXQgZm9yIGFsbCBJL08gdG8gY29tcGxldGUuXG4rICovXG4rdm9pZCBiZGV2X2ZsdXNoX2J5X2RldihkZXZfdCBkZXYpXG4re1xuK1x0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldjtcbitcbitcdGJkZXYgPSBibGtkZXZfZ2V0X25vX29wZW4oZGV2LCBmYWxzZSk7XG4rXHRpZiAoIWJkZXYpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFByZXZlbnQgdGhlIGRldmljZSBmcm9tIGNsb3NpbmcgYmV0d2VlbiB0aGUgY2hlY2sgYW5kIHdyaXRlYmFjay4gKi9cbitcdGlmIChtdXRleF90cnlsb2NrKFx1MDAyNmJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VvcGVuX211dGV4KSkge1xuK1x0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2YmRldi1cdTAwM2ViZF9vcGVuZXJzKSlcbitcdFx0XHRzeW5jX2Jsb2NrZGV2X25vd2FpdChiZGV2KTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbitcdH1cbitcdGJsa2Rldl9wdXRfbm9fb3BlbihiZGV2KTtcbit9XG4rXG4gLypcbiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2tcbiAgKiBkZXZpY2UgdmlhIGl0cyBtYXBwaW5nLiAgRG9lcyBub3QgdGFrZSB0aGUgc3VwZXJibG9jayBsb2NrLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li43YTVmM2UyZjE3ZDZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTE3MTAsNiArMTcxMCw3IEBAIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuIGludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpO1xuIGludCBzeW5jX2Jsb2NrZGV2X3JhbmdlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKTtcbiBpbnQgc3luY19ibG9ja2Rldl9ub3dhaXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7XG4rdm9pZCBiZGV2X2ZsdXNoX2J5X2RldihkZXZfdCBkZXYpO1xuIHZvaWQgc3luY19iZGV2cyhib29sIHdhaXQpO1xuIHZvaWQgYmRldl9zdGF0eChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrKTtcbiB2b2lkIHByaW50a19hbGxfcGFydGl0aW9ucyh2b2lkKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li5kNDRkM2NlNTFiNTBkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTc2LDYgKzE3NiwxOCBAQCBzdHJ1Y3QgbWVtY2dfY2d3Yl9mcm4ge1xuIFx0c3RydWN0IHdiX2NvbXBsZXRpb24gZG9uZTtcdC8qIHRyYWNrcyBpbi1mbGlnaHQgZm9yZWlnbiB3cml0ZWJhY2tzICovXG4gfTtcbiBcbisvKlxuKyAqIGZybl9sb2NrIHByb3RlY3RzIGRldiBhbmQgaW5mbGlnaHQuXG4rICogTm8gZXh0cmEgbWVtY2cgcmVmZXJlbmNlIGlzIHRha2VuOiB0aGlzIHdvcmsgaXMgZW1iZWRkZWQgaW4gdGhlIG1lbWNnLFxuKyAqIGFuZCBtZW1fY2dyb3VwX2Nzc19mcmVlKCkgd2FpdHMgZm9yIGl0IHRvIGZpbmlzaCBiZWZvcmUgZnJlZWluZyB0aGUgbWVtY2cuXG4rICovXG4rc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCB7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbitcdGRldl90IGRldjtcbitcdGJvb2wgaW5mbGlnaHQ7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rfTtcbitcbiAvKlxuICAqIEJ1Y2tldCBmb3IgYXJiaXRyYXJpbHkgYnl0ZS1zaXplZCBvYmplY3RzIGNoYXJnZWQgdG8gYSBtZW1vcnlcbiAgKiBjZ3JvdXAuIFRoZSBidWNrZXQgY2FuIGJlIHJlcGFyZW50ZWQgaW4gb25lIHBpZWNlIHdoZW4gdGhlIGNncm91cFxuQEAgLTI3OSw2ICsyOTEsOSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4gXHRzdHJ1Y3Qgd2JfZG9tYWluIGNnd2JfZG9tYWluO1xuIFx0c3RydWN0IG1lbWNnX2Nnd2JfZnJuIGNnd2JfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07XG4rXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4IGJkZXZfZnJuW01FTUNHX0NHV0JfRlJOX0NOVF07XG4rXHQvKiBOZXN0cyBpbnNpZGUgbWFwcGluZy1cdTAwM2VpX3BhZ2VzLiAqL1xuK1x0c3BpbmxvY2tfdCBmcm5fbG9jaztcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd3JpdGViYWNrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaFxuaW5kZXggMTNlZTA3NmNjZDE2Ni4uZmZkMWI4ZGY0MjMxOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaFxuQEAgLTI3Myw5ICsyNzMsOSBAQCBUUkFDRV9FVkVOVChpbm9kZV9zd2l0Y2hfd2JzLFxuIFxuIFRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4gXG4tXHRUUF9QUk9UTyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpLFxuK1x0VFBfUFJPVE8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCBkZXZfdCBkZXYpLFxuIFxuLVx0VFBfQVJHUyhmb2xpbywgd2IpLFxuK1x0VFBfQVJHUyhmb2xpbywgd2IsIGRldiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2FycmF5KGNoYXIsXHRcdG5hbWUsIDMyKVxuQEAgLTI4NCw2ICsyODQsNyBAQCBUUkFDRV9FVkVOVCh0cmFja19mb3JlaWduX2RpcnR5LFxuIFx0XHRfX2ZpZWxkKHU2NCxcdFx0Y2dyb3VwX2lubylcbiBcdFx0X19maWVsZCh1NjQsXHRcdHBhZ2VfY2dyb3VwX2lubylcbiBcdFx0X19maWVsZCh1bnNpZ25lZCBpbnQsXHRtZW1jZ19pZClcbitcdFx0X19maWVsZChkZXZfdCxcdFx0ZGV2KVxuIFx0KSxcbiBcbiBcdFRQX2Zhc3RfYXNzaWduKFxuQEAgLTI5NSwzNCArMjk2LDM3IEBAIFRSQUNFX0VWRU5UKHRyYWNrX2ZvcmVpZ25fZGlydHksXG4gXHRcdF9fZW50cnktXHUwMDNlaW5vXHRcdD0gaW5vZGUgPyBpbm9kZS1cdTAwM2VpX2lubyA6IDA7XG4gXHRcdF9fZW50cnktXHUwMDNlbWVtY2dfaWRcdD0gd2ItXHUwMDNlbWVtY2dfY3NzLVx1MDAzZWlkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm9cdD0gX190cmFjZV93Yl9hc3NpZ25fY2dyb3VwKHdiKTtcbitcdFx0X19lbnRyeS1cdTAwM2VkZXZcdFx0PSBkZXY7XG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0X19lbnRyeS1cdTAwM2VwYWdlX2Nncm91cF9pbm8gPSBjZ3JvdXBfaW5vKGZvbGlvX21lbWNnKGZvbGlvKS1cdTAwM2Vjc3MuY2dyb3VwKTtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHQpLFxuIFxuLVx0VFBfcHJpbnRrKFwiYmRpICVzWyVsbHVdOiBpbm89JWxsdSBtZW1jZ19pZD0ldSBjZ3JvdXBfaW5vPSVsbHUgcGFnZV9jZ3JvdXBfaW5vPSVsbHVcIixcbitcdFRQX3ByaW50ayhcImJkaSAlc1slbGx1XTogaW5vPSVsbHUgbWVtY2dfaWQ9JXUgY2dyb3VwX2lubz0lbGx1IHBhZ2VfY2dyb3VwX2lubz0lbGx1IGRldj0ldToldVwiLFxuIFx0XHRfX2VudHJ5LVx1MDAzZW5hbWUsXG4gXHRcdF9fZW50cnktXHUwMDNlYmRpX2lkLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWlubyxcbiBcdFx0X19lbnRyeS1cdTAwM2VtZW1jZ19pZCxcbiBcdFx0X19lbnRyeS1cdTAwM2VjZ3JvdXBfaW5vLFxuLVx0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lub1xuK1x0XHRfX2VudHJ5LVx1MDAzZXBhZ2VfY2dyb3VwX2lubyxcbitcdFx0TUFKT1IoX19lbnRyeS1cdTAwM2VkZXYpLCBNSU5PUihfX2VudHJ5LVx1MDAzZWRldilcbiBcdClcbiApO1xuIFxuIFRSQUNFX0VWRU5UKGZsdXNoX2ZvcmVpZ24sXG4gXG4gXHRUUF9QUk9UTyhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHVuc2lnbmVkIGludCBmcm5fYmRpX2lkLFxuLVx0XHQgdW5zaWduZWQgaW50IGZybl9tZW1jZ19pZCksXG4rXHRcdCB1bnNpZ25lZCBpbnQgZnJuX21lbWNnX2lkLCBkZXZfdCBkZXYpLFxuIFxuLVx0VFBfQVJHUyh3YiwgZnJuX2JkaV9pZCwgZnJuX21lbWNnX2lkKSxcbitcdFRQX0FSR1Mod2IsIGZybl9iZGlfaWQsIGZybl9tZW1jZ19pZCwgZGV2KSxcbiBcbiBcdFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdF9fYXJyYXkoY2hhcixcdFx0bmFtZSwgMzIpXG4gXHRcdF9fZmllbGQodTY0LFx0XHRjZ3JvdXBfaW5vKVxuIFx0XHRfX2ZpZWxkKHVuc2lnbmVkIGludCxcdGZybl9iZGlfaWQpXG4gXHRcdF9fZmllbGQodW5zaWduZWQgaW50LFx0ZnJuX21lbWNnX2lkKVxuK1x0XHRfX2ZpZWxkKGRldl90LFx0XHRkZXYpXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtMzMwLDEzICszMzQsMTUgQEAgVFJBQ0VfRVZFTlQoZmx1c2hfZm9yZWlnbixcbiBcdFx0X19lbnRyeS1cdTAwM2VjZ3JvdXBfaW5vXHQ9IF9fdHJhY2Vfd2JfYXNzaWduX2Nncm91cCh3Yik7XG4gXHRcdF9fZW50cnktXHUwMDNlZnJuX2JkaV9pZFx0PSBmcm5fYmRpX2lkO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWZybl9tZW1jZ19pZFx0PSBmcm5fbWVtY2dfaWQ7XG4rXHRcdF9fZW50cnktXHUwMDNlZGV2XHRcdD0gZGV2O1xuIFx0KSxcbiBcbi1cdFRQX3ByaW50ayhcImJkaSAlczogY2dyb3VwX2lubz0lbGx1IGZybl9iZGlfaWQ9JXUgZnJuX21lbWNnX2lkPSV1XCIsXG4rXHRUUF9wcmludGsoXCJiZGkgJXM6IGNncm91cF9pbm89JWxsdSBmcm5fYmRpX2lkPSV1IGZybl9tZW1jZ19pZD0ldSBkZXY9JXU6JXVcIixcbiBcdFx0X19lbnRyeS1cdTAwM2VuYW1lLFxuIFx0XHRfX2VudHJ5LVx1MDAzZWNncm91cF9pbm8sXG4gXHRcdF9fZW50cnktXHUwMDNlZnJuX2JkaV9pZCxcbi1cdFx0X19lbnRyeS1cdTAwM2Vmcm5fbWVtY2dfaWRcbitcdFx0X19lbnRyeS1cdTAwM2Vmcm5fbWVtY2dfaWQsXG4rXHRcdE1BSk9SKF9fZW50cnktXHUwMDNlZGV2KSwgTUlOT1IoX19lbnRyeS1cdTAwM2VkZXYpXG4gXHQpXG4gKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjA3ODRmNmU0MGFlY2MgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTM5LDYgKzM5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdF9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG5AQCAtMTA0LDYgKzEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtY2dfcG5fY2FjaGVwO1xuIFxuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtZW1jZ19jZ3diX2Zybl93YWl0cSk7XG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptZW1jZ19iZGV2X2Zybl9mbHVzaGVyIF9fcm9fYWZ0ZXJfaW5pdDtcbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pc19keWluZyh2b2lkKVxuQEAgLTM4NDUsNiArMzg0Nyw0MSBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLFxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIEJkZXYgaW5vZGVzIGFyZSBjb21tb25seSBzaGFyZWQgYnkgbWFueSBtZW1jZ3MuIEZsdXNoaW5nIHRoZWlyIG93bmVyIHdiXG4rICogY2FuIHdyaXRlIHVucmVsYXRlZCBmaWxlIGRhdGEsIHNvIHJlY29yZCBkZXZpY2UgbnVtYmVycyBzZXBhcmF0ZWx5IGFuZFxuKyAqIGZsdXNoIG9ubHkgdGhlIGJkZXYgbWFwcGluZ3MuIFRyYWNraW5nIGlzIGJlc3QgZWZmb3J0OiByZWNvcmQgb25seSBkZXZfdFxuKyAqIHdpdGhvdXQgaG9sZGluZyBkZXZpY2Ugb3IgaW5vZGUgcmVmZXJlbmNlcywgc28gaXQgbWF5IHJhY2Ugd2l0aCBkZXZpY2VcbisgKiByZW1vdmFsIGFuZCByZS1hZGRpdGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGRldl90IGRldilcbit7XG4rXHRzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4ICpjdHg7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogX19mb2xpb19tYXJrX2RpcnR5KCkgdGFrZXMgbWFwcGluZy1cdTAwM2VpX3BhZ2VzIHdpdGggeGFfbG9ja19pcnFzYXZlKClcbitcdCAqIGJlZm9yZSByZWFjaGluZyB0aGlzIGhlbHBlci4gVXNlIGlycXNhdmUgaGVyZSBhcyB3ZWxsIHNvIGZybl9sb2NrJ3NcbitcdCAqIElSUSBwcm90ZWN0aW9uIGRvZXMgbm90IGRlcGVuZCBvbiB0aGF0IG91dGVyIGxvY2tpbmcuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKykge1xuK1x0XHRpZiAobWVtY2ctXHUwMDNlYmRldl9mcm5baV0uZGV2ID09IGRldilcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XG4rXHRcdGN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuK1x0XHRpZiAoY3R4LVx1MDAzZWluZmxpZ2h0KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRjdHgtXHUwMDNlZGV2ID0gZGV2O1xuK1x0XHRicmVhaztcbitcdH1cbitvdXQ6XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rfVxuK1xuIC8qXG4gICogRm9yZWlnbiBkaXJ0eSBmbHVzaGluZ1xuICAqXG5AQCAtMzg3NSwxNyArMzkxMiwxNyBAQCB2b2lkIG1lbV9jZ3JvdXBfd2Jfc3RhdHMoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpwZmlsZXBhZ2VzLFxuICAqIG1vc3QgcmVjZW50IGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzIGFuZCBpbml0aWF0aW5nIHJlbW90ZSBmbHVzaGVzIG9uXG4gICogdGhlbSB3aGVuIGxvY2FsIHdyaXRlYmFjayBpc24ndCBlbm91Z2ggdG8ga2VlcCB0aGUgbWVtb3J5IGNsZWFuIGVub3VnaC5cbiAgKlxuLSAqIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgc3VjaCBtZWNoYW5pc20uICBXaGVuIGEgZm9yZWlnblxuLSAqIHBhZ2UgLSBhIHBhZ2Ugd2hvc2UgbWVtY2cgYW5kIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbid0IG1hdGNoIC0gaXNcbi0gKiBkaXJ0aWVkLCBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmdcbi0gKiBiZGlfd3JpdGViYWNrIG9uIHRoZSBwYWdlIG93bmluZyBtZW1jZy4gIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpXG4tICogZGVjaWRlcyB0aGF0IHRoZSBtZW1jZyBuZWVkcyB0byBzbGVlcCBkdWUgdG8gaGlnaCBkaXJ0eSByYXRpbywgaXQgY2FsbHNcbisgKiBGb3Igbm9uLWJkZXYgaW5vZGVzLCB3aGVuIGEgZm9yZWlnbiBwYWdlIC0gYSBwYWdlIHdob3NlIG1lbWNnIGFuZFxuKyAqIHdyaXRlYmFjayBvd25lcnNoaXBzIGRvbid0IG1hdGNoIC0gaXMgZGlydGllZCxcbisgKiBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHkoKSByZWNvcmRzIHRoZSBpbm9kZSBvd25pbmcgYmRpX3dyaXRlYmFja1xuKyAqIG9uIHRoZSBwYWdlIG93bmluZyBtZW1jZy4gV2hlbiBiYWxhbmNlX2RpcnR5X3BhZ2VzKCkgZGVjaWRlcyB0aGF0IHRoZVxuKyAqIG1lbWNnIG5lZWRzIHRvIHNsZWVwIGR1ZSB0byBoaWdoIGRpcnR5IHJhdGlvLCBpdCBjYWxsc1xuICAqIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbigpIHdoaWNoIHF1ZXVlcyB3cml0ZWJhY2sgb24gdGhlIHJlY29yZGVkXG4gICogZm9yZWlnbiBiZGlfd3JpdGViYWNrcyB3aGljaCBoYXZlbid0IGV4cGlyZWQuICBCb3RoIHRoZSBudW1iZXJzIG9mXG4gICogcmVjb3JkZWQgYmRpX3dyaXRlYmFja3MgYW5kIGNvbmN1cnJlbnQgaW4tZmxpZ2h0IGZvcmVpZ24gd3JpdGViYWNrcyBhcmVcbiAgKiBsaW1pdGVkIHRvIE1FTUNHX0NHV0JfRlJOX0NOVC5cbiAgKlxuLSAqIFRoZSBtZWNoYW5pc20gb25seSByZW1lbWJlcnMgSURzIGFuZCBkb2Vzbid0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLlxuKyAqIFRoZXNlIHdiIHJlY29yZHMgb25seSByZW1lbWJlciBJRHMgYW5kIGRvbid0IGhvbGQgYW55IG9iamVjdCByZWZlcmVuY2VzLlxuICAqIEFzIGJlaW5nIHdyb25nIG9jY2FzaW9uYWxseSBkb2Vzbid0IG1hdHRlciwgdXBkYXRlcyBhbmQgYWNjZXNzZXMgdG8gdGhlXG4gICogcmVjb3JkcyBhcmUgbG9ja2xlc3MgYW5kIHJhY3kuXG4gICovXG5AQCAtMzg5OCw4ICszOTM1LDE3IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHR1NjQgb2xkZXN0X2F0ID0gbm93O1xuIFx0aW50IG9sZGVzdCA9IC0xO1xuIFx0aW50IGk7XG4rXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuK1x0c3RydWN0IGlub2RlICpiZGV2X2lub2RlID0gbWFwcGluZyA/IG1hcHBpbmctXHUwMDNlaG9zdCA6IE5VTEw7XG4rXG4rXHRpZiAobWVtY2dfYmRldl9mcm5fZmx1c2hlciBcdTAwMjZcdTAwMjYgYmRldl9pbm9kZSBcdTAwMjZcdTAwMjZcbitcdCAgICBzYl9pc19ibGtkZXZfc2IoYmRldl9pbm9kZS1cdTAwM2VpX3NiKSkge1xuK1x0XHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgYmRldl9pbm9kZS1cdTAwM2VpX3JkZXYpO1xuK1x0XHRtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldihtZW1jZywgYmRldl9pbm9kZS1cdTAwM2VpX3JkZXYpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4tXHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3Yik7XG4rXHR0cmFjZV90cmFja19mb3JlaWduX2RpcnR5KGZvbGlvLCB3YiwgMCk7XG4gXG4gXHQvKlxuIFx0ICogUGljayB0aGUgc2xvdCB0byB1c2UuICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2xvdCBmb3IgQHdiLCBrZWVwXG5AQCAtMzk0MSw2ICszOTg3LDI1IEBAIHZvaWQgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJkZXZfZnJuX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9XG4rXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4LCB3b3JrKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRiZGV2X2ZsdXNoX2J5X2RldihjdHgtXHUwMDNlZGV2KTtcbitcbitcdC8qXG4rXHQgKiBUaGUgZGlydHkgdHJhY2tpbmcgcGF0aCB0YWtlcyBmcm5fbG9jayB3aGlsZSBob2xkaW5nIG1hcHBpbmctXHUwMDNlaV9wYWdlcy5cbitcdCAqIERpc2FibGUgbG9jYWwgSVJRcyBoZXJlIHRvIGF2b2lkIGRlYWRsb2NrcyB3aXRoIEkvTyBjb21wbGV0aW9uXG4rXHQgKiBoYW5kbGVycyB0aGF0IGFsc28gdGFrZSBtYXBwaW5nLVx1MDAzZWlfcGFnZXMuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2VtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuK1x0Y3R4LVx1MDAzZWluZmxpZ2h0ID0gZmFsc2U7XG4rXHRjdHgtXHUwMDNlZGV2ID0gMDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZW1lbWNnLVx1MDAzZWZybl9sb2NrLCBmbGFncyk7XG4rfVxuK1xuIC8qIGlzc3VlIGZvcmVpZ24gd3JpdGViYWNrIGZsdXNoZXMgZm9yIHJlY29yZGVkIGZvcmVpZ24gZGlydHlpbmcgZXZlbnRzICovXG4gdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIHtcbkBAIC0zOTQ5LDYgKzQwMTQsMTkgQEAgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX2ZvcmVpZ24oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuIFx0dTY0IG5vdyA9IGppZmZpZXNfNjQ7XG4gXHRpbnQgaTtcbiBcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKSB7XG4rXHRcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9IFx1MDAyNm1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldO1xuK1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoIWN0eC1cdTAwM2VpbmZsaWdodCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldikge1xuK1x0XHRcdGN0eC1cdTAwM2VpbmZsaWdodCA9IHRydWU7XG4rXHRcdFx0dHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgMCwgMCwgY3R4LVx1MDAzZWRldik7XG4rXHRcdFx0cXVldWVfd29yayhtZW1jZ19iZGV2X2Zybl9mbHVzaGVyLCBcdTAwMjZjdHgtXHUwMDNld29yayk7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jaywgZmxhZ3MpO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbiBcdFx0c3RydWN0IG1lbWNnX2Nnd2JfZnJuICpmcm4gPSBcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2ZybltpXTtcbiBcbkBAIC0zOTYxLDcgKzQwMzksOCBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfZm9yZWlnbihzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpXG4gXHRcdGlmICh0aW1lX2FmdGVyNjQoZnJuLVx1MDAzZWF0LCBub3cgLSBpbnR2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNmZybi1cdTAwM2Vkb25lLmNudCkgPT0gMSkge1xuIFx0XHRcdGZybi1cdTAwM2VhdCA9IDA7XG4tXHRcdFx0dHJhY2VfZmx1c2hfZm9yZWlnbih3YiwgZnJuLVx1MDAzZWJkaV9pZCwgZnJuLVx1MDAzZW1lbWNnX2lkKTtcbitcdFx0XHR0cmFjZV9mbHVzaF9mb3JlaWduKHdiLCBmcm4tXHUwMDNlYmRpX2lkLCBmcm4tXHUwMDNlbWVtY2dfaWQsXG4rXHRcdFx0XHRcdCAgICAwKTtcbiBcdFx0XHRjZ3JvdXBfd3JpdGViYWNrX2J5X2lkKGZybi1cdTAwM2ViZGlfaWQsIGZybi1cdTAwM2VtZW1jZ19pZCxcbiBcdFx0XHRcdFx0ICAgICAgIFdCX1JFQVNPTl9GT1JFSUdOX0ZMVVNILFxuIFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZnJuLVx1MDAzZWRvbmUpO1xuQEAgLTQyMDIsOSArNDI4MSwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdG1lbWNnLVx1MDAzZWttZW1jZ19pZCA9IC0xO1xuICNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWVtY2ctXHUwMDNlY2d3Yl9saXN0KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbitcdFx0c3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eCAqY3R4ID0gXHUwMDI2bWVtY2ctXHUwMDNlYmRldl9mcm5baV07XG4rXG4gXHRcdG1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldLmRvbmUgPVxuIFx0XHRcdF9fV0JfQ09NUExFVElPTl9JTklUKFx1MDAyNm1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbitcdFx0SU5JVF9XT1JLKFx1MDAyNmN0eC1cdTAwM2V3b3JrLCBiZGV2X2Zybl9mbHVzaF93b3JrKTtcbitcdFx0Y3R4LVx1MDAzZW1lbWNnID0gbWVtY2c7XG4rXHR9XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vmcm5fbG9jayk7XG4gI2VuZGlmXG4gXHRscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpO1xuIFx0cmV0dXJuIG1lbWNnO1xuQEAgLTQzODYsOCArNDQ3MSwxMCBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRpbnQgX19tYXliZV91bnVzZWQgaTtcbiBcbiAjaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcbiBcdFx0d2Jfd2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZtZW1jZy1cdTAwM2VjZ3diX2ZybltpXS5kb25lKTtcbitcdFx0Zmx1c2hfd29yayhcdTAwMjZtZW1jZy1cdTAwM2ViZGV2X2ZybltpXS53b3JrKTtcbitcdH1cbiAjZW5kaWZcbiBcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNiAhY2dyb3VwX21lbW9yeV9ub3NvY2tldClcbiBcdFx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2bWVtY2dfc29ja2V0c19lbmFibGVkX2tleSk7XG5AQCAtNTcwMyw2ICs1NzkwLDEyIEBAIGludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4gXHRtZW1jZ193cSA9IGFsbG9jX3dvcmtxdWV1ZShcIm1lbWNnXCIsIFdRX1BFUkNQVSwgMCk7XG4gXHRXQVJOX09OKCFtZW1jZ193cSk7XG4gXG4rI2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG4rXHRtZW1jZ19iZGV2X2Zybl9mbHVzaGVyID0gYWxsb2Nfd29ya3F1ZXVlKFwibWVtY2dfYmRldl9mcm5fZmx1c2hlclwiLFxuK1x0XHRcdFx0XHQgICAgICAgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAwKTtcbitcdFdBUk5fT04oIW1lbWNnX2JkZXZfZnJuX2ZsdXNoZXIpO1xuKyNlbmRpZlxuK1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuIFx0XHRJTklUX1dPUksoXHUwMDI2cGVyX2NwdV9wdHIoXHUwMDI2bWVtY2dfc3RvY2ssIGNwdSktXHUwMDNld29yayxcbiBcdFx0XHQgIGRyYWluX2xvY2FsX21lbWNnX3N0b2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjI4LjQyNDkwMzYzOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxOTM4NzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSaXNrIEFzc2Vzc21lbnQ6IFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIEJsb2NrIERldmljZSBGbHVzaGluZyoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBwYXRjaCB3aXRoIGEgZm9jdXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIHNjcnV0aW55LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gaW50cm9kdWNpbmcgYSBtZWNoYW5pc20gZm9yIGZsdXNoaW5nIGJsb2NrIGRldmljZXMgYXNzb2NpYXRlZCB3aXRoIGZvcmVpZ24gKGkuZS4sIG5vbi1yZXNpZGVudCkgZGF0YSB3aXRoaW4gbWVtb3J5IGNncm91cHMsIGxpa2VseSByZWxhdGVkIHRvIHdyaXRlYmFjayBvcGVyYXRpb25zLiBUaGUgYE5lZWRzS01TQU49dHJ1ZWAgZmxhZyBpcyBwcm9iYWJseSB0cmlnZ2VyZWQgYnkgb25lIG9yIG1vcmUgb2Ygc2V2ZXJhbCBmYWN0b3JzIGhlcmUuXG5cbkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGJkZXZfZmx1c2hfYnlfZGV2YCwgdGhlIGNvcmUgZnVuY3Rpb24uIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCBnZXRzIGEgYmxvY2sgZGV2aWNlIGZyb20gaXRzIGBkZXZfdGAgYW5kIGF0dGVtcHRzIGEgZmx1c2guIFRoZSBsb2NraW5nIHNlZW1zIHJlYXNvbmFibGUsIGFuZCB0aGUgYGJsa2Rldl9wdXRfbm9fb3BlbmAgc3VnZ2VzdHMgYSBzYWZlIGxpZmVjeWNsZS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS5cblxuTmV4dCwgdGhlIG5ldyBgc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eGAgYW5kIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYXJlIHNpZ25pZmljYW50LiBUaGlzIGNvbnRleHQgc2VlbXMgdG8gdHJhY2sgYmxvY2sgZGV2aWNlcyBmb3IgZmx1c2hpbmcgd2l0aGluIGEgbWVtb3J5IGNncm91cC4gVGhlIGBpbmZsaWdodGAgZmxhZyBhbmQgYGRldmAgZmllbGQgYXJlIGtleS4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiB0aGVzZSBmaWVsZHMgY2FuIGxlYWQgdG8gYSBjb25kaXRpb24gd2hlcmUsIHdpdGggc3BlY2lmaWMgdGltaW5nIHNjZW5hcmlvcywgdW5pbml0aWFsaXplZCBkYXRhIGNhbiBsZWFrLlxuXG5UaGUgdHJhY2UgZXZlbnRzLCBzcGVjaWZpY2FsbHkgdGhlIHVwZGF0ZXMgdG8gYHRyYWNrX2ZvcmVpZ25fZGlydHlgIGFuZCBgZmx1c2hfZm9yZWlnbmAgd2l0aCB0aGUgYGRldl90YCBhcmd1bWVudCwgYXJlIGFsc28gaW1wb3J0YW50LiBUaGUgYF9fZW50cnktXHUwMDNlZGV2ID0gZGV2YCBhc3NpZ25tZW50IHdpdGhpbiBgVFBfZmFzdF9hc3NpZ25gICpjb3VsZCogYmVjb21lIHByb2JsZW1hdGljIGlmIGBkZXZgIGlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgdHJhY2UgZXZlbnQgaXMgZmlyZWQuIFNpbWlsYXJseSwgdGhlIGBNQUpPUihfX2VudHJ5LVx1MDAzZWRldiksIE1JTk9SKF9fZW50cnktXHUwMDNlZGV2KWAgaW4gYFRQX3ByaW50a2AgcmVsaWVzIG9uIHRoaXMgaW5pdGlhbGl6ZWQgZGF0YS5cblxuTm93LCBsZXQncyBtb3ZlIHRvIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgbWVtY2dfYmRldl9mcm5fZmx1c2hlcmAgd29ya3F1ZXVlIGFuZCB0aGUgZnVuY3Rpb25zIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmAsIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fZGlydHlfc2xvd3BhdGhgLCBgYmRldl9mcm5fZmx1c2hfd29ya2AsIGFuZCBgbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCBhcmUgY2VudHJhbCB0byB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuIGBtZW1fY2dyb3VwX3RyYWNrX2ZvcmVpZ25fYmRldmAgaXMgdGhlIGZpcnN0IHNwb3Qgd2hlcmUgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgYXBwZWFyczogaW4gdGhlIGxvb3AgYG1lbWNnLVx1MDAzZWJkZXZfZnJuW2ldLmRldiA9PSBkZXZgIGFuZCBpbiBgY3R4LVx1MDAzZWRldiA9IGRldmAgYWZ0ZXIgYSBjaGVjayBmb3IgYCFjdHgtXHUwMDNlaW5mbGlnaHRgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlcmUgY291bGQgYmUgY2FzZXMgd2hlcmUgd2UgaGF2ZSB0byBlbnN1cmUgYGJkZXZfZnJuW2ldLmRldmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTW9yZW92ZXIsIGBiZGV2X2Zybl9mbHVzaF93b3JrYCBjYWxscyBgYmRldl9mbHVzaF9ieV9kZXYoY3R4LVx1MDAzZWRldilgIGFuZCB0aGVuIHJlc2V0cyBgY3R4LVx1MDAzZWluZmxpZ2h0YCBhbmQgYGN0eC1cdTAwM2VkZXZgLCBidXQgd2l0aG91dCBndWFyYW50ZWVpbmcgaW5pdGlhbGl6YXRpb24gZWxzZXdoZXJlLiBUaGlzIGlzIHdoYXQgdHJpZ2dlcmVkIHRoZSBmbGFnLlxuXG5gbWVtX2Nncm91cF9mbHVzaF9mb3JlaWduYCBhbHNvIGhhcyBhIGtleSBjaGVjayBvbiBgIWN0eC1cdTAwM2VpbmZsaWdodCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldmAuIFRoZSBrZXkgaGVyZSBpcyBhZ2FpbiB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZSBvZiB0aGUgc3RydWN0IGBiZGV2X2Zybl9mbHVzaF9jdHhgOiB3aGF0IGhhcHBlbnMgaWYgYGN0eC1cdTAwM2VkZXZgIGlzIG5vdCBzZXQ/XG5cbkZpbmFsbHksIHRoZSBhbGxvY2F0aW9uIG9mIGBzdHJ1Y3QgbWVtX2Nncm91cGAgaXMgY3J1Y2lhbC4gVGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYWxsIGZpZWxkcywgKmluY2x1ZGluZyogdGhlIGBiZGV2X2ZybmAgYXJyYXksIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uLiBJZiB0aGV5IGFyZSAqbm90Kiwgd2UgaGF2ZSBhIGRlZmluaXRlIEtNU0FOIGNhbmRpZGF0ZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGFsbG9jYXRpb24gcGF0aCB0aHJvdWdoIGBtZW1fY2dyb3VwX2FsbG9jYCB0byB2ZXJpZnkgdGhpcy5cblxuTXkgcHJlbGltaW5hcnkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggKnBvdGVudGlhbGx5KiBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBpbiB0aGUgYmxvY2sgZGV2aWNlIGZsdXNoaW5nIHBhdGgsIHNwZWNpZmljYWxseSBpbiBob3cgdGhlIGBiZGV2X2Zybl9mbHVzaF9jdHhgIGlzIG1hbmFnZWQgYW5kIHRoZSBgZGV2YCBmaWVsZCBpcyBoYW5kbGVkLiBUaGUgY29tYmluYXRpb24gb2Ygd29ya3F1ZXVlIHVzZSwgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBgZGV2YCB2YWx1ZXMsIGFuZCB0cmFjZSBldmVudCBsb2dnaW5nIHN0cm9uZ2x5IHN1Z2dlc3QgdGhpcywgYW5kIGl0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBjYXJlZnVsbHkgdGVzdCBhbmQgdmVyaWZ5LiBUaGUgYE5lZWRzS01TQU49dHJ1ZWAgZmxhZyBzZWVtcyBhcHByb3ByaWF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEwNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM4OjUwLjk0NDI5NDgyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NDk5NTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2NcXFxcKHNpemVvZlxcXFwoc3RydWN0IG1lbV9jZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozODo1MC45ODk5NTIyNjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTM1MTU5MTM2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nIHdpdGggYG1lbV9jZ3JvdXBfYWxsb2NgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYSBzcGVjaWZpYyBjZ3JvdXAuIE15IGdvLXRvIGFwcHJvYWNoIGluIHRoaXMgc2l0dWF0aW9uIGlzIHRvIHN0YXJ0IHdpdGggdGhlIGJhc2ljcywgYW5kIGluIHRoaXMgY2FzZSwgdGhhdCBtZWFucyBjaGVja2luZyBgbWVtX2Nncm91cF9hbGxvY2AuIEl0J3MgdGhlIG1vc3QgZGlyZWN0IHJvdXRlIHRvIHVuZGVyc3RhbmRpbmcgY3VycmVudCBhbGxvY2F0aW9ucy4gSSdsbCBsaWtlbHkgdXNlIGEgc2ltcGxlIGByZWFkLWZpbGVgIGNvbW1hbmQsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0byBpbnNwZWN0IGl0cyBjb250ZW50cy4gVGhpcyBnaXZlcyBtZSBhIHNuYXBzaG90IG9mIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhpcyBtb21lbnQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgaHlwb3RoZXNlcywgcG90ZW50aWFsbHkgbW92aW5nIG9uIHRvIG1vcmUgc29waGlzdGljYXRlZCB0b29scyBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozOTowNC41MDU4Njk1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQxOTA6XFx0XFxuNDE5MTpcXHRcXHRscnV2ZWNfaW5pdChcXHUwMDI2cG4tXFx1MDAzZWxydXZlYyk7XFxuNDE5MjpcXHRcXHRwbi1cXHUwMDNlbWVtY2cgPSBtZW1jZztcXG40MTkzOlxcdFxcbjQxOTQ6XFx0XFx0bWVtY2ctXFx1MDAzZW5vZGVpbmZvW25vZGVdID0gcG47XFxuNDE5NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40MTk2OlxcdGZhaWw6XFxuNDE5NzpcXHRcXHRmcmVlX21lbV9jZ3JvdXBfcGVyX25vZGVfaW5mbyhwbik7XFxuNDE5ODpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNDE5OTpcXHR9XFxuNDIwMDpcXHRcXG40MjAxOlxcdHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG40MjAyOlxcdHtcXG40MjAzOlxcdFxcdGludCBub2RlO1xcbjQyMDQ6XFx0XFxuNDIwNTpcXHRcXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcXG40MjA2OlxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tub2RlXTtcXG40MjA3OlxcdFxcdFxcdGlmICghcG4pXFxuNDIwODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40MjA5OlxcdFxcbjQyMTA6XFx0XFx0XFx0b2JqX2Nncm91cF9wdXQocG4tXFx1MDAzZW9yaWdfb2JqY2cpO1xcbjQyMTE6XFx0XFx0XFx0ZnJlZV9tZW1fY2dyb3VwX3Blcl9ub2RlX2luZm8ocG4pO1xcbjQyMTI6XFx0XFx0fVxcbjQyMTM6XFx0XFx0bWVtY2cxX2ZyZWVfZXZlbnRzKG1lbWNnKTtcXG40MjE0OlxcdFxcdGtmcmVlKG1lbWNnLVxcdTAwM2V2bXN0YXRzKTtcXG40MjE1OlxcdFxcdGZyZWVfcGVyY3B1KG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSk7XFxuNDIxNjpcXHRcXHRrZnJlZShtZW1jZyk7XFxuNDIxNzpcXHR9XFxuNDIxODpcXHRcXG40MjE5OlxcdHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNDIyMDpcXHR7XFxuNDIyMTpcXHRcXHRscnVfZ2VuX2V4aXRfbWVtY2cobWVtY2cpO1xcbjQyMjI6XFx0XFx0bWVtY2dfd2JfZG9tYWluX2V4aXQobWVtY2cpO1xcbjQyMjM6XFx0XFx0X19tZW1fY2dyb3VwX2ZyZWUobWVtY2cpO1xcbjQyMjQ6XFx0fVxcbjQyMjU6XFx0XFxuNDIyNjpcXHRzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG40MjI3OlxcdHtcXG40MjI4OlxcdFxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XFxuNDIyOTpcXHRcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnBzdGF0Y19wY3B1O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozOTowNC41MDYyMzQzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODMyNDMyMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbWVtX2Nncm91cF9hbGxvY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVzdCBvZiB0aGUgY29kZSByZWxhdGVkIHRvIGBtZW1fY2dyb3VwX2FsbG9jYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIGNvZGUgaXMgZG9pbmcsIGJleW9uZCBqdXN0IHRoZSBiYXNpY3MuIEknbSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGhpZ2gtbGV2ZWwgY29uY2VwdCwgdGhlIFwid2hhdFwiIG9mIG1lbW9yeSBjZ3JvdXBzLCBhbmQgaXRzIGFiaWxpdHkgdG8gbGltaXQgYW5kIG1vbml0b3IgbWVtb3J5IHVzYWdlLiBOb3csIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mICpob3cqIHRoaXMgYWxsb2NhdGlvbiBvY2N1cnMuIFNwZWNpZmljYWxseSwgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yOlxuXG4qICAgSG93IGlzIHRoZSBhbGxvY2F0aW9uIHNpemUgZGV0ZXJtaW5lZD8gSXMgaXQgYSBzdGF0aWMgdmFsdWUsIG9yIGR5bmFtaWNhbGx5IGNvbXB1dGVkIGJhc2VkIG9uIHZhcmlvdXMgZmFjdG9ycz8gV2hhdCBhcmUgdGhlIGZhY3RvcnM/XG4qICAgV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkPyBBcmUgdGhlcmUgY29udGVudGlvbiBwb2ludHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2Nrcz9cbiogICBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIChlLmcuLCBwYWdlIGFsbG9jYXRvciwgc2xhYiBhbGxvY2F0b3IpP1xuKiAgIFdoYXQgZXJyb3IgaGFuZGxpbmcgaXMgcHJlc2VudD8gQXJlIHRoZXJlIGdyYWNlZnVsIGRlZ3JhZGF0aW9uIHBhdGhzLCBvciBhcmUgdGhlcmUgcG90ZW50aWFsIGZvciBvdXQtb2YtbWVtb3J5IHNjZW5hcmlvcz9cbiogICBIb3cgaXMgdGhlIGFsbG9jYXRpb24gYWNjb3VudGVkIGZvciB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHk/IEFyZSB0aGVyZSBwZXItY2dyb3VwIHN0YXRpc3RpY3MgdXBkYXRlZD8gV2hhdCBhYm91dCBuZXN0ZWQgY2dyb3Vwcz9cbiogICBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgb3IgdHJhZGUtb2ZmcyBiZWluZyBtYWRlPyBQZXJoYXBzIHRoZXJlIGlzIHNvbWUgb3Zlci1hbGxvY2F0aW9uIGZvciBwZXJmb3JtYW5jZS5cbiogICBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHNjZW5hcmlvcyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGhhbmRsZSwgbGlrZSBOVU1BIHN5c3RlbXM/XG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBiZSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBjb250cm9sIGZsb3cgYnJhbmNoZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzZXMuIEknbGwgYmUgbWVudGFsbHkgc2ltdWxhdGluZyB0aGUgZXhlY3V0aW9uLCBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBob3cgYG1lbV9jZ3JvdXBfYWxsb2NgIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGdhaW4gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkIGluIGEgY2dyb3VwIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM5OjA5LjMzODY2OTE1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQyMzA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQyMzE6XFx0XFx0aW50IG5vZGUsIGNwdTtcXG40MjMyOlxcdFxcdGludCBfX21heWJlX3VudXNlZCBpO1xcbjQyMzM6XFx0XFx0bG9uZyBlcnJvcjtcXG40MjM0OlxcdFxcbjQyMzU6XFx0XFx0bWVtY2cgPSBrbWVtX2NhY2hlX3phbGxvYyhtZW1jZ19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbjQyMzY6XFx0XFx0aWYgKCFtZW1jZylcXG40MjM3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjQyMzg6XFx0XFxuNDIzOTpcXHRcXHRlcnJvciA9IHhhX2FsbG9jKFxcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcXHUwMDI2bWVtY2ctXFx1MDAzZWlkLmlkLCBOVUxMLFxcbjQyNDA6XFx0XFx0XFx0XFx0IFhBX0xJTUlUKDEsIE1FTV9DR1JPVVBfSURfTUFYKSwgR0ZQX0tFUk5FTCk7XFxuNDI0MTpcXHRcXHRpZiAoZXJyb3IpXFxuNDI0MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDI0MzpcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuNDI0NDpcXHRcXG40MjQ1OlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzID0ga3phbGxvY19vYmooc3RydWN0IG1lbWNnX3Ztc3RhdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNDI0NjpcXHRcXHRpZiAoIW1lbWNnLVxcdTAwM2V2bXN0YXRzKVxcbjQyNDc6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQyNDg6XFx0XFxuNDI0OTpcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSxcXG40MjUwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjQyNTE6XFx0XFx0aWYgKCFtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUpXFxuNDI1MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDI1MzpcXHRcXG40MjU0OlxcdFxcdGlmICghbWVtY2cxX2FsbG9jX2V2ZW50cyhtZW1jZykpXFxuNDI1NTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDI1NjpcXHRcXG40MjU3OlxcdFxcdHBzdGF0Y19wY3B1ID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA6IE5VTEw7XFxuNDI1ODpcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuNDI1OTpcXHRcXHRcXHRzdGF0YyA9IHBlcl9jcHVfcHRyKG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSwgY3B1KTtcXG40MjYwOlxcdFxcdFxcdHN0YXRjLVxcdTAwM2VwYXJlbnRfcGNwdSA9IHBzdGF0Y19wY3B1O1xcbjQyNjE6XFx0XFx0XFx0c3RhdGMtXFx1MDAzZXZtc3RhdHMgPSBtZW1jZy1cXHUwMDNldm1zdGF0cztcXG40MjYyOlxcdFxcdH1cXG40MjYzOlxcdFxcbjQyNjQ6XFx0XFx0Zm9yX2VhY2hfbm9kZShub2RlKVxcbjQyNjU6XFx0XFx0XFx0aWYgKCFhbGxvY19tZW1fY2dyb3VwX3Blcl9ub2RlX2luZm8obWVtY2csIG5vZGUpKVxcbjQyNjY6XFx0XFx0XFx0XFx0Z290byBmYWlsO1xcbjQyNjc6XFx0XFxuNDI2ODpcXHRcXHRpZiAobWVtY2dfd2JfZG9tYWluX2luaXQobWVtY2csIEdGUF9LRVJORUwpKVxcbjQyNjk6XFx0XFx0XFx0Z290byBmYWlsO1xcbjQyNzA6XFx0XFxuNDI3MTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm1lbWNnLVxcdTAwM2VoaWdoX3dvcmssIGhpZ2hfd29ya19mdW5jKTtcXG40MjcyOlxcdFxcdHZtcHJlc3N1cmVfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXZtcHJlc3N1cmUpO1xcbjQyNzM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfcGVha3MpO1xcbjQyNzQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX3BlYWtzKTtcXG40Mjc1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlcGVha3NfbG9jayk7XFxuNDI3NjpcXHRcXHRtZW1jZy1cXHUwMDNlc29ja2V0X3ByZXNzdXJlID0gZ2V0X2ppZmZpZXNfNjQoKTtcXG40Mjc3OlxcdCNpZiBCSVRTX1BFUl9MT05HIFxcdTAwM2MgNjRcXG40Mjc4OlxcdFxcdHNlcWxvY2tfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXNvY2tldF9wcmVzc3VyZV9zZXFsb2NrKTtcXG40Mjc5OlxcdCNlbmRpZlxcbjQyODA6XFx0XFx0bWVtY2cxX21lbWNnX2luaXQobWVtY2cpO1xcbjQyODE6XFx0XFx0bWVtY2ctXFx1MDAzZWttZW1jZ19pZCA9IC0xO1xcbjQyODI6XFx0I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxuNDI4MzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZWNnd2JfbGlzdCk7XFxuNDI4NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspIHtcXG40Mjg1OlxcdFxcdFxcdHN0cnVjdCBiZGV2X2Zybl9mbHVzaF9jdHggKmN0eCA9IFxcdTAwMjZtZW1jZy1cXHUwMDNlYmRldl9mcm5baV07XFxuNDI4NjpcXHRcXG40Mjg3OlxcdFxcdFxcdG1lbWNnLVxcdTAwM2VjZ3diX2ZybltpXS5kb25lID1cXG40Mjg4OlxcdFxcdFxcdFxcdF9fV0JfQ09NUExFVElPTl9JTklUKFxcdTAwMjZtZW1jZ19jZ3diX2Zybl93YWl0cSk7XFxuNDI4OTpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNmN0eC1cXHUwMDNld29yaywgYmRldl9mcm5fZmx1c2hfd29yayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDExOjM5OjA5LjMzOTAxODE0MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTQ3Mjg1NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBNZW1jZyBBbGxvY2F0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGBtZW1jZ2AgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBzZWVtcyB0byBiZSB0aGF0IGBtZW1jZ2AgaW5zdGFuY2VzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTClgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudDogYWxsIHRoZSBmaWVsZHMgd2l0aGluIHRoZSBgbWVtY2dgIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGBiZGV2X2ZybmAsIGdldCB6ZXJvLWluaXRpYWxpemVkIGZyb20gdGhlIGdldC1nby4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgYmVjYXVzZSBpdCBhZmZlY3RzIGhvdyB3ZSBjYW4gcmVseSBvbiBpbml0aWFsIHZhbHVlcyBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYXJpc2luZyBmcm9tIGEgZmllbGQgbm90IGJlaW5nIGV4cGxpY2l0bHkgc2V0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBhdCB0aGUgdmVyeSB0b3AgbGV2ZWwsIHRoZSByb290IG9mIHRoZSBtZW1jZyBoaWVyYXJjaHkuIEknbSB3b25kZXJpbmcgaWYgdGhlIHJvb3QgYG1lbV9jZ3JvdXBgIGlzIGluaXRpYWxpemVkIHN0YXRpY2FsbHkgZHVyaW5nIGtlcm5lbCBzZXR1cCwgb3IgaWYgaXQgZ29lcyB0aHJvdWdoIHRoZSBgbWVtX2Nncm91cF9hbGxvY2AgcGF0aCBsaWtlIG90aGVyIG1lbWNncy4gR290dGEgYmUgc3VyZSBhYm91dCB0aGUgYmFzZSBjYXNlLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGluaXRpYWxpemF0aW9uIG9mIGByb290X21lbV9jZ3JvdXBgIHNwZWNpZmljYWxseSB0byB2ZXJpZnkgaG93IGl0IGlzIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6Mzk6MTIuMjg2MzA2NDE5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3MDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyb290X21lbV9jZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz04Mz1FWFBPUlRfU1lNQk9MKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxubW0vbWVtY29udHJvbC5jLTg0LVxcbm1tL21lbWNvbnRyb2wuYzo4NTpzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1fY2dyb3VwIF9fcmVhZF9tb3N0bHk7XFxubW0vbWVtY29udHJvbC5jOjg2OkVYUE9SVF9TWU1CT0wocm9vdF9tZW1fY2dyb3VwKTtcXG5tbS9tZW1jb250cm9sLmMtODctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTE4PXN0cnVjdCB2bXByZXNzdXJlICptZW1jZ190b192bXByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMjAtXFx0aWYgKCFtZW1jZylcXG5tbS9tZW1jb250cm9sLmM6MTIxOlxcdFxcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMjItXFx0cmV0dXJuIFxcdTAwMjZtZW1jZy1cXHUwMDNldm1wcmVzc3VyZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMjM9RVhQT1JUX1NZTUJPTChtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTMzMi0gKlxcbm1tL21lbWNvbnRyb2wuYzozMzM6ICogSWYgbWVtY2cgaXMgYm91bmQgdG8gYSB0cmFkaXRpb25hbCBoaWVyYXJjaHksIHRoZSBjc3Mgb2Ygcm9vdF9tZW1fY2dyb3VwXFxubW0vbWVtY29udHJvbC5jLTMzNC0gKiBpcyByZXR1cm5lZC5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMzY9c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzQwLVxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5tbS9tZW1jb250cm9sLmM6MzQxOlxcdFxcdHJldHVybiBcXHUwMDI2cm9vdF9tZW1fY2dyb3VwLVxcdTAwM2Vjc3M7XFxubW0vbWVtY29udHJvbC5jLTM0Mi1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zNDQtXFxubW0vbWVtY29udHJvbC5jOjM0NTpcXHRyZXR1cm4gbWVtY2cgPyBcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyA6IFxcdTAwMjZyb290X21lbV9jZ3JvdXAtXFx1MDAzZWNzcztcXG5tbS9tZW1jb250cm9sLmMtMzQ2LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz03NzY9dm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03ODEtXFx0aWYgKCFtZW1jZylcXG5tbS9tZW1jb250cm9sLmM6NzgyOlxcdFxcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy03ODMtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Nzk0PXN0YXRpYyB2b2lkIGZsdXNoX21lbWNnX3N0YXRzX2R3b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03OTktXFx0ICovXFxubW0vbWVtY29udHJvbC5jOjgwMDpcXHRfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMocm9vdF9tZW1fY2dyb3VwLCB0cnVlKTtcXG5tbS9tZW1jb250cm9sLmMtODAxLVxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBcXHUwMDI2c3RhdHNfZmx1c2hfZHdvcmssIEZMVVNIX1RJTUUpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTExNTk9c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE4My1cXHRcXHRpZiAodW5saWtlbHkoIW1tKSlcXG5tbS9tZW1jb250cm9sLmM6MTE4NDpcXHRcXHRcXHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMTg1LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTkwLVxcdFxcdGlmICh1bmxpa2VseSghbWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzoxMTkxOlxcdFxcdFxcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMTkyLVxcdH0gd2hpbGUgKCFjc3NfdHJ5Z2V0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTIyNT1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEyMzItXFx0aWYgKCFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSlcXG5tbS9tZW1jb250cm9sLmM6MTIzMzpcXHRcXHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMjM0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTEyNjA9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfaXRlcihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMjcyLVxcdGlmICghcm9vdClcXG5tbS9tZW1jb250cm9sLmM6MTI3MzpcXHRcXHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy0xMjc0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTEzNTI9dm9pZCBtZW1fY2dyb3VwX2l0ZXJfYnJlYWsoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTM1NS1cXHRpZiAoIXJvb3QpXFxubW0vbWVtY29udHJvbC5jOjEzNTY6XFx0XFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcXG5tbS9tZW1jb250cm9sLmMtMTM1Ny1cXHRpZiAocHJldiBcXHUwMDI2XFx1MDAyNiBwcmV2ICE9IHJvb3QpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTM3NT1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JlY2xhaW1faXRlcmF0b3JzKHN0cnVjdCBtZW1fY2dyb3VwICpkZWFkX21lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEzODctXFx0ICogcGFyZW50X21lbV9jZ3JvdXAoKSBkb2VzIG5vdCB3YWxrIGFsbCB0aGUgd2F5IHVwIHRvIHRoZVxcbm1tL21lbWNvbnRyb2wuYzoxMzg4OlxcdCAqIGNncm91cCByb290IChyb290X21lbV9jZ3JvdXApLiBTbyB3ZSBoYXZlIHRvIGhhbmRsZVxcbm1tL21lbWNvbnRyb2wuYy0xMzg5LVxcdCAqIGRlYWRfbWVtY2cgZnJvbSBjZ3JvdXAgcm9vdCBzZXBhcmF0ZWx5Llxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEzOTEtXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobGFzdCkpXFxubW0vbWVtY29udHJvbC5jOjEzOTI6XFx0XFx0X19pbnZhbGlkYXRlX3JlY2xhaW1faXRlcmF0b3JzKHJvb3RfbWVtX2Nncm91cCxcXG5tbS9tZW1jb250cm9sLmMtMTM5My1cXHRcXHRcXHRcXHRcXHRcXHRkZWFkX21lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTk0PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2dldF9vb21fZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp2aWN0aW0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjAwMy1cXHRpZiAoIW9vbV9kb21haW4pXFxubW0vbWVtY29udHJvbC5jOjIwMDQ6XFx0XFx0b29tX2RvbWFpbiA9IHJvb3RfbWVtX2Nncm91cDtcXG5tbS9tZW1jb250cm9sLmMtMjAwNS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMDUyPV9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqY3VycmVudF9vYmpfY2dyb3VwKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA3Mi1cXHRcXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6MzA3MzpcXHRcXHRyZXR1cm4gb2JqY2cgPyA6IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZW9iamNnLCAxKTtcXG5tbS9tZW1jb250cm9sLmMtMzA3NC1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzA3OS1cXG5tbS9tZW1jb250cm9sLmM6MzA4MDpcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHJvb3RfbWVtX2Nncm91cC1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlb2JqY2csIDEpO1xcbm1tL21lbWNvbnRyb2wuYy0zMDgxLVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwOTQtXFxubW0vbWVtY29udHJvbC5jOjMwOTU6XFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyb290X21lbV9jZ3JvdXAtXFx1MDAzZW5vZGVpbmZvW25pZF0tXFx1MDAzZW9iamNnLCAxKTtcXG5tbS9tZW1jb250cm9sLmMtMzA5Ni19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDMwMz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzQyLSNlbmRpZlxcbm1tL21lbWNvbnRyb2wuYzo0MzQzOlxcdFxcdHJvb3RfbWVtX2Nncm91cCA9IG1lbWNnO1xcbm1tL21lbWNvbnRyb2wuYy00MzQ0LVxcdFxcdHJldHVybiBcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjczPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjgyLVxcdGlmICghcm9vdClcXG5tbS9tZW1jb250cm9sLmM6NTI4MzpcXHRcXHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy01Mjg0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3NjQ9X19zZXR1cChcXFwiY2dyb3VwLm1lbW9yeT1cXFwiLCBjZ3JvdXBfbWVtb3J5KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzY2LS8qXFxubW0vbWVtY29udHJvbC5jOjU3Njc6ICogTWVtb3J5IGNvbnRyb2xsZXIgaW5pdCBiZWZvcmUgY2dyb3VwX2luaXQoKSBpbml0aWFsaXplIHJvb3RfbWVtX2Nncm91cC5cXG5tbS9tZW1jb250cm9sLmMtNTc2OC0gKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYzMDA9dm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjMwNS1cXHRpZiAoIW1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYzo2MzA2OlxcdFxcdG1lbWNnID0gcm9vdF9tZW1fY2dyb3VwO1xcbm1tL21lbWNvbnRyb2wuYy02MzA3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTozOToxMi4zMzE5ODE4NThaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjU2MjU1NDAyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDZ3JvdXAgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtZW1fY2dyb3VwX2Nzc19hbGxvY2AuIFRoZSBjb2RlIGhlcmUgaXMgcHJldHR5IGNsZWFyOyBpdCdzIGNhbGxpbmcgYG1lbV9jZ3JvdXBfYWxsb2NgIGZvciAqZXZlcnkqIG1lbW9yeSBjZ3JvdXAsIGluY2x1ZGluZyB0aGUgcm9vdCBjZ3JvdXAuIFRoYXQgbWFrZXMgc2Vuc2UsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGluZ3MgYXQgdGhlIHRvcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJdCdzIHRoZSBhbGxvY2F0aW9uIHN0ZXAsIG9idmlvdXNseSwgYnV0IHdoYXQgc3BlY2lmaWNhbGx5IGlzIGdldHRpbmcgYWxsb2NhdGVkIGF0IGVhY2ggbGV2ZWw/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzPyBIb3cgbXVjaCBtZW1vcnkgb3ZlcmhlYWQgYXJlIHdlIHRhbGtpbmcgYWJvdXQgcGVyIGNncm91cD8gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgbWVtX2Nncm91cF9hbGxvY2Agbm93IHRvIGZ1bGx5IGdyYXNwIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSByb290IGNncm91cCBhbGxvY2F0aW9uIHNwZWNpZmljYWxseSwgYW5kIGhvdyBpdCBjYXNjYWRlcyBkb3duIHRvIHRoZSByZXN0LiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3NzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTo0MDoxNy45NTc1MjQ4NDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc4NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzAwOlxcdH1cXG40MzAxOlxcdFxcbjQzMDI6XFx0c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICogX19yZWZcXG40MzAzOlxcdG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbjQzMDQ6XFx0e1xcbjQzMDU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MocGFyZW50X2Nzcyk7XFxuNDMwNjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7XFxuNDMwNzpcXHRcXHRib29sIG1lbWNnX29uX2RmbCA9IGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxuNDMwODpcXHRcXG40MzA5OlxcdFxcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTtcXG40MzEwOlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpO1xcbjQzMTE6XFx0XFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcbjQzMTI6XFx0XFx0aWYgKElTX0VSUihtZW1jZykpXFxuNDMxMzpcXHRcXHRcXHRyZXR1cm4gRVJSX0NBU1QobWVtY2cpO1xcbjQzMTQ6XFx0XFxuNDMxNTpcXHRcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xcbjQzMTY6XFx0XFx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xcbjQzMTc6XFx0I2lmZGVmIENPTkZJR19aU1dBUFxcbjQzMTg6XFx0XFx0bWVtY2ctXFx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XFxuNDMxOTpcXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2V6c3dhcF93cml0ZWJhY2ssIHRydWUpO1xcbjQzMjA6XFx0I2VuZGlmXFxuNDMyMTpcXHRcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcXG40MzIyOlxcdFxcdGlmIChwYXJlbnQpIHtcXG40MzIzOlxcdFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBcXHUwMDI2cGFyZW50LVxcdTAwM2VtZW1vcnksIG1lbWNnX29uX2RmbCk7XFxuNDMyNDpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN3YXAsIGZhbHNlKTtcXG40MzI1OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG40MzI2OlxcdFxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcXG40MzI3OlxcdFxcdFxcdG1lbWNnLVxcdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuNDMyODpcXHRcXHRcXHRtZW1jZy1cXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuNDMyOTpcXHRcXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vvb21fa2lsbF9kaXNhYmxlLCBSRUFEX09OQ0UocGFyZW50LVxcdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XFxuNDMzMDpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIFxcdTAwMjZwYXJlbnQtXFx1MDAzZWttZW0sIGZhbHNlKTtcXG40MzMxOlxcdFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldGNwbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2V0Y3BtZW0sIGZhbHNlKTtcXG40MzMyOlxcdFxcdFxcdG1lbWNnLVxcdTAwM2V0Y3BtZW0udHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuNDMzMzpcXHQjZW5kaWZcXG40MzM0OlxcdFxcdH0gZWxzZSB7XFxuNDMzNTpcXHRcXHRcXHRpbml0X21lbWNnX3N0YXRzKCk7XFxuNDMzNjpcXHRcXHRcXHRpbml0X21lbWNnX2V2ZW50cygpO1xcbjQzMzc6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIE5VTEwsIHRydWUpO1xcbjQzMzg6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XFxuNDMzOTpcXHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuNDM0MDpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcXG40MzQxOlxcdFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldGNwbWVtLCBOVUxMLCBmYWxzZSk7XFxuNDM0MjpcXHQjZW5kaWZcXG40MzQzOlxcdFxcdFxcdHJvb3RfbWVtX2Nncm91cCA9IG1lbWNnO1xcbjQzNDQ6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMTo0MDoxNy45NTc5MDUxODVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU2MDkwNTQ4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgb2J2aW91cyBLTVNBTi1yZWxldmFudCBpc3N1ZXMsIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLiBGaXJzdCwgdGhlIHBhdGNoJ3MgcHVycG9zZSBpcyB0byByZWZpbmUgdGhlIHRyYWNraW5nIG9mIGZvcmVpZ24gZGlydHkgd3JpdGViYWNrcyByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcywgaW1wbGVtZW50aW5nIGEgcGVyLW1lbWNnIGJsb2NrIGRldmljZSBmbHVzaCB0cmFja2luZyBtZWNoYW5pc20gKGBiZGV2X2Zybl9mbHVzaF9jdHhgKSBhbmQgYXN5bmNocm9ub3VzIGZsdXNoIHdvcmsgKGBiZGV2X2ZsdXNoX2J5X2RldmApLiBUaGlzIHNob3VsZCBpbXByb3ZlIGVmZmljaWVuY3kgYnkgYXZvaWRpbmcgdGhlIGZsdXNoaW5nIG9mIHVucmVsYXRlZCB3cml0ZWJhY2tzLCBhbmQgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgbWVhbnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyBwYXR0ZXJucy5cblxuTm93LCBydW5uaW5nIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gTnVtYmVyIG9uZSwgYXJlIHdlIHNlbmRpbmcgYW55dGhpbmcgbmV3IHRvIHVzZXIgc3BhY2U/IE5vcGUuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCwgZWl0aGVyIHZpYSBzeXN0ZW0gY2FsbHMsIGlvY3Rscywgb3IgYW55dGhpbmcgZWxzZS4gVGhlIHRyYWNlcG9pbnRzIGFyZSBqdXN0IHJlY29yZGluZyBleGlzdGluZyBrZXJuZWwgZGF0YSwgYW5kIHRoZSBzY2FsYXIgYGRldl90YCBpcyBwYXNzZWQgYnkgdmFsdWUuIFNvLCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IGludG8gdGhlIHVzZXIgc3BhY2UuXG5cbk5leHQsIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmc/IEknbSBjaGVja2luZyB0aGUgY3J1Y2lhbCBjb25kaXRpb25zOiBgbWVtY2ctXHUwMDNlYmRldl9mcm5baV0uZGV2ID09IGRldmAgYW5kIGBjdHgtXHUwMDNlaW5mbGlnaHRgLCB3aGljaCBib3RoIGxvb2sgc2FmZSBnaXZlbiBga21lbV9jYWNoZV96YWxsb2NgIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gQWxzbywgYGJkZXZfZmx1c2hfYnlfZGV2YCBsb29rcyBva2F5IOKAkyB0aGUgYGJkZXZgIHBvaW50ZXIgaXMgYXNzaWduZWQgZnJvbSBgYmxrZGV2X2dldF9ub19vcGVuYCBhbmQgY2hlY2tlZC4gVGhlIHNsb3cgcGF0aCBgbWVtX2Nncm91cF90cmFja19mb3JlaWduX2RpcnR5X3Nsb3dwYXRoYCBpbml0aWFsaXplcyB0aGUgYGJkZXZfaW5vZGVgIGJlZm9yZSBpdHMgdXNlLiBUaGUgYGJkZXZfZnJuX2ZsdXNoX3dvcmtgIGNvbnRleHQgYGN0eGAgaXMgYWxzbyBmdWxseSBpbml0aWFsaXplZC4gU28sIG5vIG9idmlvdXMgaXNzdWVzIHRoZXJlLlxuXG5UaGlyZCwgd2hhdCBhYm91dCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyBUaGUgYGJkZXZfZnJuYCBzdHJ1Y3R1cmUgaXMgZW1iZWRkZWQgaW5zaWRlIHRoZSBgbWVtX2Nncm91cGAsIHdoaWNoIGlzIHplcm9lZCBvdXQgYnkgYGttZW1fY2FjaGVfemFsbG9jYCwgZm9sbG93ZWQgYnkgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uIFRoZSBgYmRldl9mcm5fZmx1c2hfY3R4YCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQsIHRvby4gVGhlcmVmb3JlLCBuby4gTm8gcmlza3MuXG5cbkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgYm91bmRzIGNoZWNrIGlzc3VlcywgbGVuZ3RoIGlzc3Vlcywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhPyBOb3BlLiBXZSdyZSBnb29kLlxuXG5HaXZlbiB0aGF0LCB3aGF0ICpjb3VsZCogZ28gd3Jvbmc/IExldCdzIGNvbnNpZGVyIHRoZSB1c3VhbCBzdXNwZWN0cy4gTG9ja2luZyBpcyBhIGNvbmNlcm4sIHNwZWNpZmljYWxseSBgZnJuX2xvY2tgIHNwaW5sb2NrIHZzLiBJUlEgY29udGV4dCwgYW5kIGRlYWRsb2NrcyByZWxhdGVkIHRvIGBtYXBwaW5nLVx1MDAzZWlfcGFnZXNgIG9yIHRoZSBgb3Blbl9tdXRleGAuIFRoZXJlIGlzIGFsc28gdGhlIHBvdGVudGlhbCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBvciBVQUYgYnVncyB3aXRoIGBiZGV2LVx1MDAzZWJkX2Rpc2tgIG9yIHRoZSBwYWlyZWQgYGJsa2Rldl9nZXRfbm9fb3BlbmAgLyBgYmxrZGV2X3B1dF9ub19vcGVuYCBjYWxscy4gRmluYWxseSwgcmFjZSBjb25kaXRpb25zIGFyZSBhIHBvc3NpYmlsaXR5LCB3aGljaCBpcyB0aGUgbmF0dXJlIG9mIGFzeW5jaHJvbm91cyB3b3JrLlxuXG5Ib3dldmVyLCBub25lIG9mIHRob3NlIGFyZSAqdW5pbml0aWFsaXplZCBtZW1vcnkqIGJ1Z3MgdGhhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QuIEtBU0FOLCBMb2NrZGVwLCBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBzaG91bGQgaGFuZGxlIHRoZSBleHBlY3RlZCBpc3N1ZXMuIEtBU0FOIHdpbGwgZGV0ZWN0IFVBRnMsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gTG9ja2RlcCBjYXRjaGVzIGxvY2sgaW52ZXJzaW9uIGlzc3Vlcy5cblxuTGV0J3MgZG8gb25lIGxhc3QgZG91YmxlLWNoZWNrIG9mIHRoYXQgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgc3RydWN0dXJlLiBJdCdzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCwgdGhlbiBgSU5JVF9XT1JLYCBpcyBjYWxsZWQgYW5kIGBtZW1jZ2AgaXMgYXNzaWduZWQuIFRoZSBgZGV2YCBmaWVsZCBpcyB6ZXJvLCBhbmQgYGluZmxpZ2h0YCBpcyBpbml0aWFsaXplZCB0byBmYWxzZS4gRXhjZWxsZW50LiBFdmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVHJhY2Vwb2ludHMgYXJlIHBhc3NpbmcgZXhwbGljaXRseSBpbml0aWFsaXplZCBwYXJhbWV0ZXJzLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLiBUaGlzIHBhdGNoIGhhcyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGZvY3VzZWQgcGF0Y2gsIGFuZCB0aGF0J3MgY292ZXJlZCBieSBvdGhlciB0ZXN0aW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkyMSwiT3V0cHV0VG9rZW5zIjozMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTE6NDA6NTMuNTY2OTYzMTM0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBkaXJ0eSBwYWdlIHRyYWNraW5nIGFuZCB3cml0ZWJhY2sgZm9yIGJsb2NrIGRldmljZSBwYWdlIGNhY2hlcyBieSBhZGRpbmcgYGJkZXZfZnJuX2ZsdXNoX2N0eGAgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgdHJhY2tpbmcgZGlydHlpbmcgb2YgYmxvY2sgZGV2aWNlIGlub2RlcywgYW5kIGZsdXNoaW5nIHRoZW0gdmlhIGRlZGljYXRlZCBhc3luY2hyb25vdXMgd29yayAoYGJkZXZfZmx1c2hfYnlfZGV2YCkuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3M6IE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pLlxcbjIuIERhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJkZXZfZnJuX2ZsdXNoX2N0eGAgaW5zdGFuY2VzIGFyZSBlbWJlZGRlZCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiksIGFuZCBgSU5JVF9XT1JLKClgIC8gYGN0eC1cXHUwMDNlbWVtY2dgIGFyZSBleHBsaWNpdGx5IHNldCBkdXJpbmcgYG1lbV9jZ3JvdXBfYWxsb2MoKWAuXFxuMy4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc2NhbGFyIGFyZ3VtZW50cyAoc3VjaCBhcyBgZGV2X3QgZGV2YCBpbiB0cmFjZXBvaW50cyBhbmQgaGVscGVyIGZ1bmN0aW9ucykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGV2YWx1YXRpb24uXFxuNC4gVGhlIHByaW1hcnkgcmlza3Mgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGxvY2sgb3JkZXJpbmcgKGBmcm5fbG9ja2AgbmVzdGluZywgSVJRIGRpc2FibGVtZW50LCBhbmQgYG9wZW5fbXV0ZXhgIHRyeWxvY2spIGFuZCBibG9jayBkZXZpY2UgcmVmZXJlbmNlIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGRlYnVnIGNoZWNrcy5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIGRpcnR5IHBhZ2UgdHJhY2tpbmcgYW5kIHdyaXRlYmFjayBmb3IgYmxvY2sgZGV2aWNlIHBhZ2UgY2FjaGVzIGJ5IGFkZGluZyBgYmRldl9mcm5fZmx1c2hfY3R4YCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB0cmFja2luZyBkaXJ0eWluZyBvZiBibG9jayBkZXZpY2UgaW5vZGVzLCBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgZGVkaWNhdGVkIGFzeW5jaHJvbm91cyB3b3JrIChgYmRldl9mbHVzaF9ieV9kZXZgKS5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrczogTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikuXFxuMi4gRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYmRldl9mcm5fZmx1c2hfY3R4YCBpbnN0YW5jZXMgYXJlIGVtYmVkZGVkIGluIGBzdHJ1Y3QgbWVtX2Nncm91cGAsIHdoaWNoIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIChlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uKSwgYW5kIGBJTklUX1dPUksoKWAgLyBgY3R4LVxcdTAwM2VtZW1jZ2AgYXJlIGV4cGxpY2l0bHkgc2V0IGR1cmluZyBgbWVtX2Nncm91cF9hbGxvYygpYC5cXG4zLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzY2FsYXIgYXJndW1lbnRzIChzdWNoIGFzIGBkZXZfdCBkZXZgIGluIHRyYWNlcG9pbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb25zKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgZXZhbHVhdGlvbi5cXG40LiBUaGUgcHJpbWFyeSByaXNrcyBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgbG9jayBvcmRlcmluZyAoYGZybl9sb2NrYCBuZXN0aW5nLCBJUlEgZGlzYWJsZW1lbnQsIGFuZCBgb3Blbl9tdXRleGAgdHJ5bG9jaykgYW5kIGJsb2NrIGRldmljZSByZWZlcmVuY2UgbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgZGVidWcgY2hlY2tzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[1] Phase: Succeeded StartedAt: 2026-09-14 11:40:57 +0000 UTC FinishedAt: 2026-09-14 11:40:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 11:40:57 +0000 UTC FinishedAt: 2026-09-14 11:40:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2] Phase: Succeeded StartedAt: 2026-09-14 11:40:57 +0000 UTC FinishedAt: 2026-09-14 15:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 11:40:57 +0000 UTC FinishedAt: 2026-09-14 15:20:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","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-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","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-09-14 11:40:57 +0000 UTC FinishedAt: 2026-09-14 11:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","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-09-14 11:40:57 +0000 UTC FinishedAt: 2026-09-14 11:41:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"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-workflowjbj5c/series-workflowjbj5c-convert-artifact-3475624472/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","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-09-14 11:41:07 +0000 UTC FinishedAt: 2026-09-14 11:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","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-09-14 11:41:07 +0000 UTC FinishedAt: 2026-09-14 11:57:00 +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:*59b805c9-a688-4fcd-a4c8-2f954993497a,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-workflowjbj5c/series-workflowjbj5c-convert-artifact-3475624472/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": "8dad6cf1-f6b0-4b73-a2a8-e9fdc88fd871", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-760811342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","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-09-14 11:41:07 +0000 UTC FinishedAt: 2026-09-14 11:56:50 +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:*59b805c9-a688-4fcd-a4c8-2f954993497a,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-workflowjbj5c/series-workflowjbj5c-convert-artifact-3475624472/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": "8dad6cf1-f6b0-4b73-a2a8-e9fdc88fd871", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-760811342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 11:57:00 +0000 UTC FinishedAt: 2026-09-14 11:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","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: Skipped StartedAt: 2026-09-14 11:57:00 +0000 UTC FinishedAt: 2026-09-14 11:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 11:57:00 +0000 UTC FinishedAt: 2026-09-14 11:57:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 11:57:00 +0000 UTC FinishedAt: 2026-09-14 11:57:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","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-workflowjbj5c/series-workflowjbj5c-convert-artifact-2218786175/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 11:57:10 +0000 UTC FinishedAt: 2026-09-14 11:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 11:57:10 +0000 UTC FinishedAt: 2026-09-14 11:58:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8dad6cf1-f6b0-4b73-a2a8-e9fdc88fd871,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-760811342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 11:59:08 +0000 UTC FinishedAt: 2026-09-14 11:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 11:59:08 +0000 UTC FinishedAt: 2026-09-14 11:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 11:59:08 +0000 UTC FinishedAt: 2026-09-14 12:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 11:59:08 +0000 UTC FinishedAt: 2026-09-14 12:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*59b805c9-a688-4fcd-a4c8-2f954993497a,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-workflowjbj5c/series-workflowjbj5c-convert-artifact-2218786175/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": "5791e784-d193-4932-8f15-d208d78e77f9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-3763520403/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 11:59:08 +0000 UTC FinishedAt: 2026-09-14 12:15:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*59b805c9-a688-4fcd-a4c8-2f954993497a,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-workflowjbj5c/series-workflowjbj5c-convert-artifact-2218786175/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": "5791e784-d193-4932-8f15-d208d78e77f9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-3763520403/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 12:15:44 +0000 UTC FinishedAt: 2026-09-14 12:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 12:15:44 +0000 UTC FinishedAt: 2026-09-14 12:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 12:15:44 +0000 UTC FinishedAt: 2026-09-14 12:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 12:15:44 +0000 UTC FinishedAt: 2026-09-14 12:17:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5791e784-d193-4932-8f15-d208d78e77f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-3763520403/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 12:17:34 +0000 UTC FinishedAt: 2026-09-14 15:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 12:17:34 +0000 UTC FinishedAt: 2026-09-14 15:20:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8dad6cf1-f6b0-4b73-a2a8-e9fdc88fd871,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5791e784-d193-4932-8f15-d208d78e77f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-760811342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-3763520403/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 12:17:34 +0000 UTC FinishedAt: 2026-09-14 12:17:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 12:17:34 +0000 UTC FinishedAt: 2026-09-14 12:17:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-convert-artifact-1885612312/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 12:17:34 +0000 UTC FinishedAt: 2026-09-14 12:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 12:17:34 +0000 UTC FinishedAt: 2026-09-14 12:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 12:17:34 +0000 UTC FinishedAt: 2026-09-14 12:17:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 12:17:45 +0000 UTC FinishedAt: 2026-09-14 15:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbj5c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"5a609d962aa41cdb78dce495126dc4292c887254","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_flush_by_dev","bdev_frn_flush_work","mem_cgroup_track_foreign_bdev","mem_cgroup_track_foreign_dirty_slowpath","mem_cgroup_flush_foreign"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a609d962aa41cdb78dce495126dc4292c887254","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK","MEMCG","BLK_CGROUP","CGROUP_WRITEBACK"],"series_id":"af52325d-8ef1-4a0f-a799-6d231567fbf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 12:17:45 +0000 UTC FinishedAt: 2026-09-14 15:20:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8dad6cf1-f6b0-4b73-a2a8-e9fdc88fd871,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5791e784-d193-4932-8f15-d208d78e77f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-760811342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-build-action-3763520403/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbj5c/series-workflowjbj5c-convert-artifact-1885612312/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}