Name: series-workflowpslcb Phase: Succeeded StartedAt: 2026-08-27 18:31:56 +0000 UTC FinishedAt: 2026-08-27 22:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[0] Phase: Succeeded StartedAt: 2026-08-27 18:31:56 +0000 UTC FinishedAt: 2026-08-27 18:53:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 18:31:56 +0000 UTC FinishedAt: 2026-08-27 18:53:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "81eb1867e059bf1dbbfbba536385a5cb26f700cd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_ADVANCED_ROUTER", "IP_ROUTE_MULTIPATH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "81eb1867e059bf1dbbfbba536385a5cb26f700cd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_ADVANCED_ROUTER", "IP_ROUTE_MULTIPATH" ], "series_id": "486f7e96-1932-4073-a200-cc7cc3c3dfc2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib_create_info", "fib_table_insert", "fib_sync_down_dev", "fib_sync_up" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7ZmliX3RhYmxlX2luc2VydCYjMzQ7LAogICAgJiMzNDtmaWJfc3luY19kb3duX2RldiYjMzQ7LAogICAgJiMzNDtmaWJfc3luY191cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGBmaWJfcmViYWxhbmNlYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBgdXBwZXJfYm91bmRgIGZvciBtdWx0aXBhdGggcm91dGVzLiBJZiB0aGUgYHRvdGFsYCB3ZWlnaHQgb2YgYWxsIHZhbGlkIG5leHRob3BzIGlzIDAsIHRoZSBwcmV2aW91cyBjb2RlIHdvdWxkIGF0dGVtcHQgdG8gZGl2aWRlIGJ5IGB0b3RhbGAsIGNhdXNpbmcgYSBkaXZpZGUtYnktemVybyBleGNlcHRpb24uIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzIGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgaWYgYHRvdGFsYCBpcyAwIGFuZCBzZXR0aW5nIGB1cHBlcl9ib3VuZCA9IC0xYCBpbiB0aGF0IGNhc2UuIFRoaXMgaXMgYSBzdGFuZGFyZCBhcml0aG1ldGljIGJ1ZyAoZGl2aWRlLWJ5LXplcm8pIHRoYXQgY2FuIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBmdXp6aW5nIChvciBVQlNBTikuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGFueSBpc3N1ZXMgdGhhdCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NzU2YTA0MWU3NjdlOTJhMDVlODA5ZWU3MTFmNGZiNzUyYzc4MjU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTg6NDk6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5pbmRleCAwNDgzNTE5YjdmYjBkLi43YTM2MmYyZTJjMmJkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbkBAIC04NzQsNyAmIzQzOzg3NCw3IEBAIHN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcbiBcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuIFx0XHRpbnQgdXBwZXJfYm91bmQ7XG4gXG4tXHRcdGlmIChuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpIHtcbiYjNDM7XHRcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4gXHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiBcdFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7ZmliX3RhYmxlX2luc2VydCYjMzQ7LAogICAgJiMzNDtmaWJfc3luY19kb3duX2RldiYjMzQ7LAogICAgJiMzNDtmaWJfc3luY191cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NzU2YTA0MWU3NjdlOTJhMDVlODA5ZWU3MTFmNGZiNzUyYzc4MjU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTg6NDk6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggMDQ4MzUxOWI3ZmIwZC4uN2EzNjJmMmUyYzJiZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtODc0LDcgJiM0Mzs4NzQsNyBAQCBzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpCiAJY2hhbmdlX25leHRob3BzKGZpKSB7CiAJCWludCB1cHBlcl9ib3VuZDsKIAotCQlpZiAobmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2ZsYWdzICZhbXA7IFJUTkhfRl9ERUFEKSB7CiYjNDM7CQlpZiAoIXRvdGFsIHx8IG5leHRob3BfbmgtJmd0O2ZpYl9uaF9mbGFncyAmYW1wOyBSVE5IX0ZfREVBRCkgewogCQkJdXBwZXJfYm91bmQgPSAtMTsKIAkJfSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2RldikgJmFtcDsmYW1wOwogCQkJICAgbmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2ZsYWdzICZhbXA7IFJUTkhfRl9MSU5LRE9XTikgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJvdXRpbmcgVGFibGUgUmViYWxhbmNpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBsYW5kZWQgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBgZmliX3JlYmFsYW5jZWAgZnVuY3Rpb24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGl0JiMzOTtzIG1vZGlmeWluZyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgb3JpZ2luYWwgY2hlY2sgd2FzIGBpZiAobmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2ZsYWdzICZhbXA7IFJUTkhfRl9ERUFEKWAuIE5vdywgdGhlIGNvZGUgY2hlY2tzIGBpZiAoIXRvdGFsIHx8IG5leHRob3BfbmgtJmd0O2ZpYl9uaF9mbGFncyAmYW1wOyBSVE5IX0ZfREVBRClgLiBJIGltbWVkaWF0ZWx5IGhhdmUgcXVlc3Rpb25zLiBXaHkgdGhlIGFkZGl0aW9uIG9mIGAhdG90YWxgPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IGBmaWJfcmViYWxhbmNlYCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyB0aGUgcm91dGluZyB0YWJsZSYjMzk7cyBpbnRlZ3JpdHksIGVuc3VyaW5nIHRoZSBiZXN0IHBhdGhzIGFyZSBjaG9zZW4sIGFuZCBoYW5kbGluZyByb3V0ZSBjaGFuZ2VzIGVmZmljaWVudGx5LgoKTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoZSBgdG90YWxgIHZhcmlhYmxlIGxpa2VseSBwbGF5cyBhIHJvbGUgaW4gdGhlIGxvZ2ljIG9mIGhvdyBtYW55IG5leHQtaG9wcyB3ZSBoYXZlIHRvIHdvcmsgd2l0aC4gQWRkaW5nIHRoYXQgYCF0b3RhbGAgY2hlY2sgc3VnZ2VzdHMgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGEgc2NlbmFyaW8gd2hlcmUgdGhlcmUgYXJlIG5vIHZhbGlkIG5leHQtaG9wcywgYW5kIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgJiMzNDtlbXB0eSYjMzQ7IG9yICYjMzQ7bm8gdmFsaWQgcm91dGVzJiMzNDsgY2FzZS4gVGhpcyBjaGFuZ2UgY291bGQgYmUgaW50cm9kdWNlZCB0byBwcmV2ZW50IGEgc3BlY2lmaWMgY29uZGl0aW9uLCBsaWtlbHkgYSBkb3VibGUtZnJlZSwgYSBkaXZpZGUtYnktemVybywgb3Igc29tZSBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3IuIEl0IGNvdWxkIGFsc28gYmUgaW50ZW5kZWQgdG8gbWFrZSBzdXJlIGEgdmFsaWQgcm91dGUgZXhpc3RzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhpcyBjaGFuZ2UgdG8gdHJ1bHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBhbmQgdGhlIHNwZWNpZmljIHByb2JsZW0gdGhpcyBwYXRjaCBpcyBtZWFudCB0byBhZGRyZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBtZWFuaW5nIG9mIGB0b3RhbGAgaXMgb2J2aW91c2x5IGtleSBoZXJlLCBhbG9uZyB3aXRoIHRoZSBsYXJnZXIgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3JlYmFsYW5jZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NzQyPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtODUyLS8qIG9ubHkgY2FsbGVkIHdoZW4gZmliX25oIGlzIGludGVncmF0ZWQgaW50byBmaWJfaW5mbyAqL1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjg1MzpzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtODU0LXtcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9ODkzPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTAxLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjkwMjojZGVmaW5lIGZpYl9yZWJhbGFuY2UoZmkpIGRvIHsgfSB3aGlsZSAoMClcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MDMtXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzNzY9c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTU1NC1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxNTU1Olx0XHRmaWJfcmViYWxhbmNlKGZpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNTU2LVx0fVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTQzPWludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMDAyLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIwMDM6XHRcdGZpYl9yZWJhbGFuY2UoZmkpO1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwMDQtXHR9XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIwOTI9aW50IGZpYl9zeW5jX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgbmhfZmxhZ3MpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxNDQtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjE0NTpcdFx0ZmliX3JlYmFsYW5jZShmaSk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE0Ni1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqQW5hbHl6aW5nIGBmaWJfcmViYWxhbmNlYCBDYWxscyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGhpdHMgYGZpYl9yZWJhbGFuY2VgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBwbGFjZXM6IGBmaWJfY3JlYXRlX2luZm9gLCBgZmliX3N5bmNfZG93bl9kZXZgLCBhbmQgYGZpYl9zeW5jX3VwYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgaXQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGlzIGNoYW5nZSB3aWxsIGJlIGluIHRob3NlIGNvbnRleHRzLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZmliX3JlYmFsYW5jZWAgY29kZSBpdHNlbGYgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsIGNvbnRleHRzIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdH1cbiA4NTE6XHRcbiA4NTI6XHQvKiBvbmx5IGNhbGxlZCB3aGVuIGZpYl9uaCBpcyBpbnRlZ3JhdGVkIGludG8gZmliX2luZm8gKi9cbiA4NTM6XHRzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXG4gODU0Olx0e1xuIDg1NTpcdFx0aW50IHRvdGFsO1xuIDg1NjpcdFx0aW50IHc7XG4gODU3Olx0XG4gODU4Olx0XHRpZiAoZmliX2luZm9fbnVtX3BhdGgoZmkpIFx1MDAzYyAyKVxuIDg1OTpcdFx0XHRyZXR1cm47XG4gODYwOlx0XG4gODYxOlx0XHR0b3RhbCA9IDA7XG4gODYyOlx0XHRmb3JfbmV4dGhvcHMoZmkpIHtcbiA4NjM6XHRcdFx0aWYgKG5oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpXG4gODY0Olx0XHRcdFx0Y29udGludWU7XG4gODY1Olx0XG4gODY2Olx0XHRcdGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmgtXHUwMDNlZmliX25oX2RldikgXHUwMDI2XHUwMDI2XG4gODY3Olx0XHRcdCAgICBuaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9MSU5LRE9XTilcbiA4Njg6XHRcdFx0XHRjb250aW51ZTtcbiA4Njk6XHRcbiA4NzA6XHRcdFx0dG90YWwgJiM0Mzs9IG5oLVx1MDAzZWZpYl9uaF93ZWlnaHQ7XG4gODcxOlx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XG4gODcyOlx0XG4gODczOlx0XHR3ID0gMDtcbiA4NzQ6XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuIDg3NTpcdFx0XHRpbnQgdXBwZXJfYm91bmQ7XG4gODc2Olx0XG4gODc3Olx0XHRcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4gODc4Olx0XHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiA4Nzk6XHRcdFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiA4ODA6XHRcdFx0XHQgICBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XG4gODgxOlx0XHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiA4ODI6XHRcdFx0fSBlbHNlIHtcbiA4ODM6XHRcdFx0XHR3ICYjNDM7PSBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF93ZWlnaHQ7XG4gODg0Olx0XHRcdFx0dXBwZXJfYm91bmQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCl3IFx1MDAzY1x1MDAzYyAzMSxcbiA4ODU6XHRcdFx0XHRcdFx0XHRcdCAgICB0b3RhbCkgLSAxO1xuIDg4NjpcdFx0XHR9XG4gODg3Olx0XG4gODg4Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2bmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfdXBwZXJfYm91bmQsIHVwcGVyX2JvdW5kKTtcbiA4ODk6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbiA4OTA6XHR9XG4gODkxOlx0I2Vsc2UgLyogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCAqL1xuIDg5MjpcdFxuIDg5MzpcdHN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcbiA4OTQ6XHRcdFx0ICAgICAgIGludCByZW1haW5pbmcsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXG4gODk1Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gODk2Olx0e1xuIDg5NzpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNdWx0aXBhdGggc3VwcG9ydCBub3QgZW5hYmxlZCBpbiBrZXJuZWxcJiMzNDspO1xuIDg5ODpcdFxuIDg5OTpcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpLVBhdGggUm91dGluZyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcm91dGluZyBpc3N1ZSwgYW5kIHRoZSBjb2RlIHBvaW50cyBtZSB0byBgZmliX3JlYmFsYW5jZWAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gbXVsdGktcGF0aCByb3V0aW5nLCB3aGljaCBpcyBzb21ldGhpbmcgSSYjMzk7bSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGggaW4gdGhpcyBjb250ZXh0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdCwgY29uc2lkZXJpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBBaCwgaGVyZSB3ZSBnbywgaXQmIzM5O3MgbmVzdGxlZCB1bmRlciBgI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBzZWN0aW9uIGlzIGFjdGl2ZS4gSSBzZWUgdGhlIGAjZWxzZWAgYmxvY2sgYXQgbGluZSA4OTEuIFRoYXQgbWVhbnMgYGZpYl9yZWJhbGFuY2VgICppcyogZGVmaW5lZCB3aGVuIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBpcyBlbmFibGVkLCBhcyBJIHN1c3BlY3RlZC4gTm93IEkgd2FudCB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYG5ldC9pcHY0YCB0byBjb25maXJtIGV4YWN0bHkgaG93IHRoYXQgZmVhdHVyZSBpcyBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NjM9Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWctNzktXG5uZXQvaXB2NC9LY29uZmlnOjgwOmNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcbm5ldC9pcHY0L0tjb25maWctODEtXHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTYKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTXVsdGlwYXRoIFJvdXRpbmcgQnVnZml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYElQX1JPVVRFX01VTFRJUEFUSGAuIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBpc3N1ZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGB0b3RhbGAgaXMgemVyby4gVGhpcyBoYXBwZW5zIHdoZW4gYWxsIHRoZSBuZXh0IGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGhhdmUgYSBsaW5rIGRvd24gc3RhdHVzLiBJbiB0aGF0IHNjZW5hcmlvLCB0aGUgY2FsY3VsYXRpb24gYHVwcGVyX2JvdW5kID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKCh1NjQpdyAmbHQ7Jmx0OyAzMSwgdG90YWwpIC0gMTtgIHdpbGwgaW5ldml0YWJseSByZXN1bHQgaW4gYSBkaXZpc2lvbiBieSB6ZXJvIGVycm9yLgoKVGhlIGZpeCBpcyBzaW1wbGU6IGFkZCBhIGAhdG90YWwgfHxgIGNvbmRpdGlvbiB0byBwcmV2ZW50IHRoZSBwcm9ibGVtYXRpYyBjYWxjdWxhdGlvbiB3aGVuIGB0b3RhbGAgaXMgemVyby4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2xlYXIgYnVnZml4LCBhbmQgbm90aGluZyB0byBjb21wbGljYXRlIHRoZSBjb2RlLiBEZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBydW4uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHdoZXJlIHRoZSBwcm9ibGVtIGNhbiBvY2N1ci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBhdHRhY2sgc3VyZmFjZS4gYGZpYl9yZWJhbGFuY2VgIGlzIHN0YXRpYzsgb2theS4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGZpYl9jcmVhdGVfaW5mb2AsIGBmaWJfc3luY19kb3duX2RldmAsIGFuZCBgZmliX3N5bmNfdXBgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRob3NlIGFyZSBzdGF0aWMsIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX2NyZWF0ZV9pbmZvfGZpYl9zeW5jX2Rvd25fZGV2fGZpYl9zeW5jX3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM3NS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM3Ny1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTE5MjQ9dm9pZCBmaWJfc3luY19tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIG9yaWdfbXR1KVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQyLSAqL1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjE5NDM6aW50IGZpYl9zeW5jX2Rvd25fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGJvb2wgZm9yY2UpXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTk0NC17XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIwMTA9c3RhdGljIHZvaWQgZmliX3NlbGVjdF9kZWZhdWx0KGNvbnN0IHN0cnVjdCBmbG93aTQgKmZscCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5MS0gKi9cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMDkyOmludCBmaWJfc3luY191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIG5oX2ZsYWdzKVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwOTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzYzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgQ2FuZGlkYXRlcyBmb3IgRXhhbWluYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgY29uY2VwdCBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBjbGVhcmx5ICpkeW5hbWljKi4gVGhpbmdzIGFyZW4mIzM5O3QgZml4ZWQ7IHRoZXkmIzM5O3JlIGluIGZsdXguIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG93YXJkcyBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMgYXMgcHJpbWUgYXJlYXMgb2YgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZmliX2NyZWF0ZV9pbmZvYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAuIFRoZXNlIHNlZW0gbGlrZSBsaWtlbHkgc3BvdHMgdG8gZmluZCB0aGUga2luZCBvZiBkeW5hbWlzbSBJJiMzOTttIGxvb2tpbmcgZm9yLgoKTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgaW50ZXJuYWwgdG8gYSBtb2R1bGUsIG9yIGFyZSB0aGV5IGV4cG9ydGVkIGFuZCBwb3RlbnRpYWxseSB1c2VkIGV4dGVybmFsbHk/IFRoYXQgd2lsbCBkaXJlY3RseSBpbXBhY3QgaG93IEkgYXBwcm9hY2ggbXkgYW5hbHlzaXMuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBsaW5rYWdlcyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb25zIGZyb20gb3V0c2lkZS4gSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyAqdXNlZCouIExldCYjMzk7cyBnZXQgY3JhY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9jcmVhdGVfaW5mb3xmaWJfc3luY19kb3duX2RldnxmaWJfc3luY191cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNDY1PXN0YXRpYyB2b2lkIGZpYl9kaXNhYmxlX2lwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ2Ny17XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNDY4Olx0aWYgKGZpYl9zeW5jX2Rvd25fZGV2KGRldiwgZXZlbnQsIGZvcmNlKSlcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE0NjktXHRcdGZpYl9mbHVzaChkZXZfbmV0KGRldikpO1xuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE0NzU9c3RhdGljIGludCBmaWJfaW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ4NC0jaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTQ4NTpcdFx0ZmliX3N5bmNfdXAoZGV2LCBSVE5IX0ZfREVBRCk7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDg2LSNlbmRpZlxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE1MDY9c3RhdGljIGludCBmaWJfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MzEtI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MzI6XHRcdGZpYl9zeW5jX3VwKGRldiwgUlROSF9GX0RFQUQpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUzMy0jZW5kaWZcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTQyLVx0XHRpZiAoZmxhZ3MgXHUwMDI2IChJRkZfUlVOTklORyB8IElGRl9MT1dFUl9VUCkpXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNTQzOlx0XHRcdGZpYl9zeW5jX3VwKGRldiwgUlROSF9GX0xJTktET1dOKTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDQtXHRcdGVsc2Vcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NDU6XHRcdFx0ZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZmFsc2UpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTU0Ni1cdFx0cnRfY2FjaGVfZmx1c2gobmV0KTtcbi0tXG5uZXQvaXB2NC9maWJfbG9va3VwLmg9Mzg9dm9pZCBmaWJfcmVsZWFzZV9pbmZvKHN0cnVjdCBmaWJfaW5mbyAqKTtcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxubmV0L2lwdjQvZmliX2xvb2t1cC5oLTQwLVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzNTI9c3RhdGljIGJvb2wgZmliX3ZhbGlkX3ByZWZzcmMoc3RydWN0IGZpYl9jb25maWcgKmNmZywgX19iZTMyIGZpYl9wcmVmc3JjKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc1LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzNzY6c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc3LVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MTkyND12b2lkIGZpYl9zeW5jX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgb3JpZ19tdHUpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE5NDItICovXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTk0MzppbnQgZmliX3N5bmNfZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCwgYm9vbCBmb3JjZSlcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQ0LXtcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjAxMD1zdGF0aWMgdm9pZCBmaWJfc2VsZWN0X2RlZmF1bHQoY29uc3Qgc3RydWN0IGZsb3dpNCAqZmxwLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMDkxLSAqL1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIwOTI6aW50IGZpYl9zeW5jX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgbmhfZmxhZ3MpXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5My17XG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYz0xMTk0PWludCBmaWJfdGFibGVfaW5zZXJ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl90YWJsZSAqdGIsXG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjExLVxubmV0L2lwdjQvZmliX3RyaWUuYzoxMjEyOlx0ZmkgPSBmaWJfY3JlYXRlX2luZm8oY2ZnLCBleHRhY2spO1xubmV0L2lwdjQvZmliX3RyaWUuYy0xMjEzLVx0aWYgKElTX0VSUihmaSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc1MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRklCIEluc2VydGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBmbG93IGZvciBob3cgRklCIGVudHJpZXMgZ2V0IGNyZWF0ZWQgYW5kIHN5bmNocm9uaXplZC4gSXQgbG9va3MgbGlrZSBgZmliX2NyZWF0ZV9pbmZvYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgZmliX3RhYmxlX2luc2VydGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IGBmaWJfc3luY19kb3duX2RldmAgYW5kIGBmaWJfc3luY191cGAgYXJlIHRyaWdnZXJlZCBieSBuZXRkZXYgZXZlbnQgaGFuZGxlcnMuIEdpdmVuIHRoYXQgYGZpYl90YWJsZV9pbnNlcnRgIHNlZW1zIHRvIGJlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBhbiBlbnRyeSwgSSB0aGluayBpdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIExldCBtZSBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBmaWJfdGFibGVfaW5zZXJ0YCBhbmQgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW5pdGlhbCBpbnNlcnRpb24gbG9naWMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZXNlIG90aGVyIGtleSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl90YWJsZV9pbnNlcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9NjQ2PWludCBpcF9ydF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBydGVudHJ5ICpydClcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy02NzEtXHRcdFx0XHRpZiAodGIpXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo2NzI6XHRcdFx0XHRcdGVyciA9IGZpYl90YWJsZV9pbnNlcnQobmV0LCB0Yixcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTY3My1cdFx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZjZmcsIE5VTEwpO1xuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTkzMD1zdGF0aWMgaW50IGluZXRfcnRtX25ld3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTk0OS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjk1MDpcdGVyciA9IGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YiwgXHUwMDI2Y2ZnLCBleHRhY2spO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtOTUxLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGNmZy5mY190eXBlID09IFJUTl9MT0NBTClcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xMTEyPXN0YXRpYyB2b2lkIGZpYl9tYWdpYyhpbnQgY21kLCBpbnQgdHlwZSwgX19iZTMyIGRzdCwgaW50IGRzdF9sZW4sXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTE0Ni1cdGlmIChjbWQgPT0gUlRNX05FV1JPVVRFKVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTE0NzpcdFx0ZmliX3RhYmxlX2luc2VydChuZXQsIHRiLCBcdTAwMjZjZmcsIE5VTEwpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTE0OC1cdGVsc2Vcbi0tXG5uZXQvaXB2NC9maWJfdHJpZS5jPTExOTA9c3RhdGljIHZvaWQgZmliX3JlbW92ZV9hbGlhcyhzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IGtleV92ZWN0b3IgKnRwLFxuLS1cbm5ldC9pcHY0L2ZpYl90cmllLmMtMTE5My0vKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwuICovXG5uZXQvaXB2NC9maWJfdHJpZS5jOjExOTQ6aW50IGZpYl90YWJsZV9pbnNlcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3RhYmxlICp0Yixcbm5ldC9pcHY0L2ZpYl90cmllLmMtMTE5NS1cdFx0ICAgICBzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjQgUm91dGluZyBUYWJsZSBVcGRhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBJUHY0IHJvdXRpbmcgdGFibGUgc3R1ZmYsIGFuZCBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIGNsZWFybHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgZm9yIGhhbmRsaW5nIGBSVE1fTkVXUk9VVEVgIG5ldGxpbmsgbWVzc2FnZXMuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCwgYSBkZWZpbml0ZSBmb2N1cyBzeW1ib2wuIEkgYWxzbyBzZWUgdGhhdCBgZmliX3N5bmNfZG93bl9kZXZgIGFuZCBgZmliX3N5bmNfdXBgIHNlZW0gcmVsZXZhbnQsIGJ1dCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGZpdCBpbi4gQWgsIHllcywgYGZpYl9zeW5jX2Rvd25fZGV2YCBnZXRzIGNhbGxlZCBmcm9tIGBmaWJfZGlzYWJsZV9pcGAgYW5kIGBmaWJfbmV0ZGV2X2V2ZW50YCwgYW5kIGBmaWJfc3luY191cGAgaXMgaW52b2tlZCBieSBgZmliX2luZXRhZGRyX2V2ZW50YCBhcyB3ZWxsLiBTbywgYGZpYl9uZXRkZXZfZXZlbnRgLCBgZmliX2luZXRhZGRyX2V2ZW50YCwgYW5kIHRoYXQgYGluZXRfcnRtX25ld3JvdXRlYCDigJMgdGhvc2UgbG9vayBsaWtlIHByb21pc2luZyBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJvdXRlIGNoYW5nZXMgYXJlIGhhbmRsZWQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIG11bHRpcGF0aCByb3V0aW5nIGlzIGVuYWJsZWQsIHNvLCBsZXQmIzM5O3MgbG9vayBhdCBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBiZWhhdmlvcj8gVGhlIGNvcmUgbG9naWMsIEkmIzM5O20gYXNzdW1pbmcsIGlzIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBJJiMzOTtsbCBoYXZlIHRvIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCB0byBzZWUgdGhlIGRldGFpbHMgYXJvdW5kIHRoYXQgYElQX1JPVVRFX01VTFRJUEFUSGAgY29uZmlnIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICBSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgZG9jdW1lbnRhdGlvbiBhdFxuICA3NjpcdFx0ICBcdTAwM2NodHRwczovL2xhcnRjLm9yZy9ob3d0by9sYXJ0Yy5ycGRiLmh0bWxcdTAwM2VcbiAgNzc6XHRcbiAgNzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzk6XHRcbiAgODA6XHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXG4gIDgxOlx0XHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuICA4MjpcdFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgTm9ybWFsbHksIHRoZSByb3V0aW5nIHRhYmxlcyBzcGVjaWZ5IGEgc2luZ2xlIGFjdGlvbiB0byBiZSB0YWtlbiBpblxuICA4NTpcdFx0ICBhIGRldGVybWluaXN0aWMgbWFubmVyIGZvciBhIGdpdmVuIHBhY2tldC4gSWYgeW91IHNheSBZIGhlcmVcbiAgODY6XHRcdCAgaG93ZXZlciwgaXQgYmVjb21lcyBwb3NzaWJsZSB0byBhdHRhY2ggc2V2ZXJhbCBhY3Rpb25zIHRvIGEgcGFja2V0XG4gIDg3Olx0XHQgIHBhdHRlcm4sIGluIGVmZmVjdCBzcGVjaWZ5aW5nIHNldmVyYWwgYWx0ZXJuYXRpdmUgcGF0aHMgdG8gdHJhdmVsXG4gIDg4Olx0XHQgIGZvciB0aG9zZSBwYWNrZXRzLiBUaGUgcm91dGVyIGNvbnNpZGVycyBhbGwgdGhlc2UgcGF0aHMgdG8gYmUgb2ZcbiAgODk6XHRcdCAgZXF1YWwgXCYjMzQ7Y29zdFwmIzM0OyBhbmQgY2hvb3NlcyBvbmUgb2YgdGhlbSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIGZhc2hpb25cbiAgOTA6XHRcdCAgaWYgYSBtYXRjaGluZyBwYWNrZXQgYXJyaXZlcy5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgSVBfUk9VVEVfVkVSQk9TRVxuICA5MzpcdFx0Ym9vbCBcJiMzNDtJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgUm91dGluZyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIHJvdXRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSYjMzk7dmUgaGl0IGEgZGVwZW5kZW5jeS4gSSBzZWUgdGhhdCBgSVBfUk9VVEVfTVVMVElQQVRIYCByZWxpZXMgb24gYElQX0FEVkFOQ0VEX1JPVVRFUmAuIFRoYXQmIzM5O3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGdpdmVuIHRoZSBuYXR1cmUgb2YgbXVsdGlwYXRoIHJvdXRpbmcuIElmIEkgd2FudCB0byBlbmFibGUgdGhhdCBmdW5jdGlvbmFsaXR5LCBJIGZpcnN0IG5lZWQgdG8gZW5zdXJlIHRoZSBhZHZhbmNlZCByb3V0aW5nIGZlYXR1cmVzIGFyZSBidWlsdC1pbiBvciBhdmFpbGFibGUgYXMgYSBtb2R1bGUuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgSVBfQURWQU5DRURfUk9VVEVSYC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBzZWUgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCBhcyBhIG1vZHVsZS4gRGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHNldHRpbmcsIEkgbWlnaHQgbmVlZCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuIElmIGl0JiMzOTtzIGRpc2FibGVkLCBJJiMzOTtsbCBoYXZlIHRvIHdlaWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIGFuZCwgb2YgY291cnNlLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3Mgcm91dGluZyBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29uZmlnIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTU9Y29uZmlnIElQX01VTFRJQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTQtXG5uZXQvaXB2NC9LY29uZmlnOjE1OmNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMTYtXHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBDaGVjazogYElQX0FEVkFOQ0VEX1JPVVRFUmAqKgoKT2theSwgdGltZSB0byBkaXZlIGluIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3JlIHNxdWFyZWQgYXdheS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJ1biBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgb24gYElQX0FEVkFOQ0VEX1JPVVRFUmAuIFdlIGFsbCBrbm93IHRoZXNlIHRoaW5ncyBjYW4gZ2V0IGNvbXBsZXggcXVpY2tseSwgZXNwZWNpYWxseSB3aXRoIGFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2xzIGFuZCBwb3RlbnRpYWxseSBjdXN0b20gY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgbGlicmFyaWVzLCBvdGhlciByb3V0aW5nIGRhZW1vbnMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBldmVuIGtlcm5lbCBtb2R1bGVzIGFyZSBwcmVzZW50LCBjb21wYXRpYmxlLCBhbmQgd29ya2luZyBhcyBleHBlY3RlZC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGJhc2ljIHBhY2thZ2UgY2hlY2s7IGl04oCZcyBhIGRlZXAgZGl2ZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggYW55IG90aGVyIG5ldHdvcmsgc2VydmljZXMgcnVubmluZywgdmVyc2lvbiBpbmNvbXBhdGliaWxpdGllcyB3aXRoIHRoZSB1bmRlcmx5aW5nIE9TLCBhbmQgb2YgY291cnNlLCBhbnkga25vd24sIG9yIHBvdGVudGlhbCwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbWFwcGluZyB0aG9zZSByZWxhdGlvbnNoaXBzOyBubyBwb2ludCBidWlsZGluZyBhIGhvdXNlIG9mIGNhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0XHQgIGludGVuZCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3BcbiAgMTE6XHRcdCAgb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXMgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIE1vcmVcbiAgMTI6XHRcdCAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1CT05FIGlzIG9uIHRoZSBXV1cgYXRcbiAgMTM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cuc2F2ZXR6LmNvbS9tYm9uZS9cdTAwM2UuIEZvciBtb3N0IHBlb3BsZSwgaXQmIzM5O3Mgc2FmZSB0byBzYXkgTi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXG4gIDE2Olx0XHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgSWYgeW91IGludGVuZCB0byBydW4geW91ciBMaW51eCBib3ggbW9zdGx5IGFzIGEgcm91dGVyLCBpLmUuIGFzIGFcbiAgMTk6XHRcdCAgY29tcHV0ZXIgdGhhdCBmb3J3YXJkcyBhbmQgcmVkaXN0cmlidXRlcyBuZXR3b3JrIHBhY2tldHMsIHNheSBZOyB5b3VcbiAgMjA6XHRcdCAgd2lsbCB0aGVuIGJlIHByZXNlbnRlZCB3aXRoIHNldmVyYWwgb3B0aW9ucyB0aGF0IGFsbG93IG1vcmUgcHJlY2lzZVxuICAyMTpcdFx0ICBjb250cm9sIGFib3V0IHRoZSByb3V0aW5nIHByb2Nlc3MuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiB3b24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZSBrZXJuZWw6XG4gIDI0Olx0XHQgIGFuc3dlcmluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxuICAyNTpcdFx0ICBxdWVzdGlvbnMgYWJvdXQgYWR2YW5jZWQgcm91dGluZy5cbiAgMjY6XHRcbiAgMjc6XHRcdCAgTm90ZSB0aGF0IHlvdXIgYm94IGNhbiBvbmx5IGFjdCBhcyBhIHJvdXRlciBpZiB5b3UgZW5hYmxlIElQXG4gIDI4Olx0XHQgIGZvcndhcmRpbmcgaW4geW91ciBrZXJuZWw7IHlvdSBjYW4gZG8gdGhhdCBieSBzYXlpbmcgWSB0byBcJiMzNDsvcHJvY1xuICAyOTpcdFx0ICBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGFuZCBcJiMzNDtTeXNjdGwgc3VwcG9ydFwmIzM0OyBiZWxvdyBhbmQgZXhlY3V0aW5nIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzY2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFJvdXRlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgSVBfQURWQU5DRURfUk9VVEVSYCBhcHBlYXJzIHRvIGJlIGEgc3RhbmRhbG9uZSBmZWF0dXJlLCBhcyBpdCBoYXMgbm8gZGVjbGFyZWQgZGVwZW5kZW5jaWVzLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgSVBfQURWQU5DRURfUk9VVEVSYCBpdHNlbGYsIGFuZCBhbHNvIGBJUF9ST1VURV9NVUxUSVBBVEhgLCBqdXN0IHRvIGJlIGNlcnRhaW4uCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBzcGFjZSB0byBzZWUgaWYgSSYjMzk7bSBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsLiBUaGUgcmVsZXZhbnQgY29kZSBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJvdXRpbmcgc2VtYW50aWNzIGFyZSBkZWZpbmVkLCBzbyBpdCYjMzk7cyBhIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zLgoKQSBxdWljayB0aG91Z2h0LCBkbyBJIG5lZWQgdG8gY29uY2VybiBteXNlbGYgd2l0aCB3aGV0aGVyIGBmaWJfc2VtYW50aWNzLmNgIGlzIGFsd2F5cyBjb21waWxlZCBvciBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzPyBJZiBpdCBpc24mIzM5O3QgYWx3YXlzIHByZXNlbnQsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG90ZW50aWFsIGNvbXBpbGUtdGltZSBkZXBlbmRlbmN5LCBhbmQgdHJhY2sgZG93biB3aGF0ZXZlciBjb25maWcgaXMgcmVzcG9uc2libGUgZm9yIGl0cyBhdmFpbGFiaWxpdHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgY29uc2lkZXJhdGlvbiBpbiBtaW5kLCBhcyBJIGxvb2sgdGhyb3VnaCB0aGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3NlbWFudGljcy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNC1cdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE1Olx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBJUHY0IFJvdXRpbmcgU2VtYW50aWNzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYGZpYl9zZW1hbnRpY3Mub2AsIGFuZCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgSVB2NCBvbmx5LiBUaGF0IG5hcnJvd3MgdGhlIGZpZWxkIGRvd24gY29uc2lkZXJhYmx5LiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlIGFyZSBgSVBfQURWQU5DRURfUk9VVEVSYCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAsIHdoaWNoIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzLCBhbmQgYmFzZWQgb24gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwsIEkmIzM5O20gaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IGBpbmV0X3J0bV9uZXdyb3V0ZWAsIGBmaWJfbmV0ZGV2X2V2ZW50YCwgYW5kIGBmaWJfaW5ldGFkZHJfZXZlbnRgLgoKSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIGBmaWJfbmV0ZGV2X2V2ZW50YCBhbmQgYGZpYl9pbmV0YWRkcl9ldmVudGAgYXJlIG5vdGlmaWVyIGNhbGxiYWNrcy4gVGhhdCBtZWFucyB0aGV5IGFyZSBsaWtlbHkgdHJpZ2dlcmVkIGJ5IHNwZWNpZmljIGV2ZW50cy4gTGV0IG1lIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0ICp3aGVyZSogdGhvc2UgZXZlbnRzIG9yaWdpbmF0ZS4gQWgsIHJpZ2h0LCBgZmliX25ldGRldl9ldmVudGAgaXMgdGllZCB0byBuZXRkZXYgZXZlbnRzIGxpa2UgYE5FVERFVl9VUGAgYW5kIGBORVRERVZfRE9XTmAuIFNpbWlsYXJseSwgYGZpYl9pbmV0YWRkcl9ldmVudGAgaG9va3MgaW50byBpbmV0YWRkciBldmVudHMsIGFsc28gbGlrZSBgTkVUREVWX1VQYCBhbmQgYE5FVERFVl9ET1dOYC4KCkZ1enppbmcgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBhIGNsZWFyIHdpbjsgaXQgZGlyZWN0bHkgbWFuaXB1bGF0ZXMgdGhlIHJvdXRpbmcgdGFibGUgYnkgYWRkaW5nIHJvdXRlcy4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHRhcmdldC4gTm93LCBJIGRpZCBzZWUgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBleHBvcnRlZCwgYnV0IHRob3NlIHNlZW0gdG8gYmUgY2FsbGVkICpieSogdGhlIG5vdGlmaWVyIGNhbGxiYWNrcy4gTm90IGlkZWFsIGZvciBhIGRpcmVjdCBmdXp6aW5nIHRhcmdldC4KClNvLCB0aGUgY29yZSBzZXQgZm9yIGZ1enppbmcgd2lsbCBiZSBgaW5ldF9ydG1fbmV3cm91dGVgLCBgZmliX25ldGRldl9ldmVudGAsIGFuZCBgZmliX2luZXRhZGRyX2V2ZW50YC4gQnV0IHdhaXQuLi4gY2hlY2tpbmcgYGZpYl9uZXRkZXZfZXZlbnRgLi4uIGl0JiMzOTtzICpzdGF0aWMqLiBPa2F5LCBsZXQgbWUgY29uZmlybSBpdCYjMzk7cyByZWFsbHkgc3RhdGljLCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBzb21ldGhpbmcuIFRoYXQgY2hhbmdlcyBteSBzdHJhdGVneSBzb21ld2hhdDsgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGNoYWluIHRoYXQgdHJpZ2dlcnMgYGZpYl9uZXRkZXZfZXZlbnRgIGlmIGl0IGlzIGluZGVlZCBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9uZXRkZXZfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTQ3NT1zdGF0aWMgaW50IGZpYl9pbmV0YWRkcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTA1LVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTUwNjpzdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTA3LXtcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNTY5PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmliX25ldGRldl9ub3RpZmllciA9IHtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NzA6XHQubm90aWZpZXJfY2FsbCA9IGZpYl9uZXRkZXZfZXZlbnQsXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTcxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODIyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiByZWxpZXMgb24gc3RhdGljIGZ1bmN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGFyZ3VtZW50IGlzIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCB3aGljaCBjYW4gY2F1c2UgcHJvYmxlbXMuIEJ1dCwgd2FpdCwgYGZpYl9uZXRkZXZfZXZlbnRgIGlzIGEgKm5vdGlmaWVyIGNhbGxiYWNrKiwgbWVhbmluZyBpdHMgYWRkcmVzcyBpcyB0YWtlbi4gVGhlcmVmb3JlLCBpdCAqY2FuJiMzOTt0KiBiZSBpbmxpbmVkLiBTbywgdGhlIG9yaWdpbmFsIGNvbmNlcm4gaXMgbW9vdCwgaGVyZS4KCkhtbW0sIGJ1dCB3aGF0IGFib3V0IGFsdGVybmF0aXZlIEFQSSBjYWxscz8gQ291bGQgYGZpYl9zeW5jX2Rvd25fZGV2YCBvciBgZmliX3N5bmNfdXBgIHdvcms/IFRoZXkgYXJlIG5vbi1zdGF0aWMsIHNvIHRoZXkgKmNvdWxkKiBiZSBleHBvcnRlZC4gVGhhdCB3b3VsZCBiZSBpZGVhbC4gSSBzaG91bGQgY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSwgaW4gZmFjdCwgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZpYl9zeW5jX2Rvd25fZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOgoKKipJbnZlc3RpZ2F0aW5nIE5vbi1FeHBvcnRlZCwgTm9uLVN0YXRpYyBTeW1ib2xzIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgc28gdGhlc2Ugc3ltYm9scyBhcmVuJiMzOTt0IGV4cG9zZWQgdmlhIGBFWFBPUlRfU1lNQk9MYCwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhpcyBtb2R1bGUgb3IgdGhlIGtlcm5lbCBpdHNlbGYuIEJ1dCB0aGV5JiMzOTtyZSAqYWxzbyogbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1bnVzdWFsLiBUeXBpY2FsbHksIGludGVybmFsIHN5bWJvbHMgYXJlIHN0YXRpYyB0byBwcmV2ZW50IGFjY2lkZW50YWwgZXh0ZXJuYWwgbGlua2FnZS4gVGhpcyB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSYjMzk7cmUgbm9uLXN0YXRpYyB3aXRob3V0IGJlaW5nIGV4cG9ydGVkLiBUaGUgY29tcGlsZXIgc2hvdWxkIHdhcm4gaWYgeW91IGNyZWF0ZSBhIG5vbi1zdGF0aWMgc3ltYm9sIHRoYXQgaXMgbm90IGV4cG9ydGVkLgoKTGV0IG1lIGV4YW1pbmUgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBzcGVjaWZpY2FsbHkuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gc2VlIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQuIE15IG5leHQgdGhvdWdodCBpcyBob3cgdGhleSBhcmUgYmVpbmcgdXNlZC4gQXJlIHRoZXkgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCBvciBhcmUgdGhleSBwb3RlbnRpYWxseSBiZWluZyBhY2Nlc3NlZCBmcm9tIGFub3RoZXIgcGFydCBvZiB0aGUga2VybmVsIGluIGEgcm91bmRhYm91dCB3YXkg4oCTIHBlcmhhcHMgdmlhIGEgZnVuY3Rpb24gcG9pbnRlciBvciBpbmRpcmVjdCBsaW5rYWdlIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZz8gVGhlcmUgY291bGQgYmUgYSBjbGV2ZXIgZGVzaWduIHBhdHRlcm4gaW4gcGxheSwgb3IsIHBvdGVudGlhbGx5LCBhIHN1YnRsZSBidWcgd2FpdGluZyB0byBiZSB1bmNvdmVyZWQuIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9zeW5jX2Rvd25fZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE0NjU9c3RhdGljIHZvaWQgZmliX2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDY3LXtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE0Njg6XHRpZiAoZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZm9yY2UpKVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ2OS1cdFx0ZmliX2ZsdXNoKGRldl9uZXQoZGV2KSk7XG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTU0NC1cdFx0ZWxzZVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTU0NTpcdFx0XHRmaWJfc3luY19kb3duX2RldihkZXYsIGV2ZW50LCBmYWxzZSk7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTQ2LVx0XHRydF9jYWNoZV9mbHVzaChuZXQpO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTI0PXZvaWQgZmliX3N5bmNfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBvcmlnX210dSlcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTk0Mi0gKi9cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxOTQzOmludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE5NDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJvdXRlIFN5bmNocm9uaXphdGlvbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyByb3V0ZSBzeW5jaHJvbml6YXRpb24gbG9naWMsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGBpbmV0X3J0bV9uZXdyb3V0ZWAsIGBmaWJfc3luY19kb3duX2RldmAsIGFuZCBgZmliX3N5bmNfdXBgIGFzIHRoZSBrZXkgZnVuY3Rpb25zLiBCdXQgaGFuZyBvbiwgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBhcmUgdHJpZ2dlcmVkIGJ5IGBmaWJfbmV0ZGV2X2V2ZW50YCBhbmQgYGZpYl9pbmV0YWRkcl9ldmVudGAuIE5vdywgYXJlIHRob3NlIHRoZSAqb25seSogY2FsbGVycyBvZiB0aG9zZSB0d28gZnVuY3Rpb25zPyBMZXQgbWUgc2VlLi4uIEFoYSEgYGZpYl9kaXNhYmxlX2lwYCBhbHNvIGNhbGxzIGBmaWJfc3luY19kb3duX2RldmAuIEFuZCBndWVzcyB3aGF0PyBgZmliX2Rpc2FibGVfaXBgIGl0c2VsZiBpcyBjYWxsZWQgYnkgdGhvc2Ugc2FtZSBgZmliX2luZXRhZGRyX2V2ZW50YCBhbmQgYGZpYl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9ucy4gQWxyaWdodCwgc28gdGhlIHJlYWwgZW50cnkgcG9pbnRzLCB0aGUgb25lcyB0byBmb2N1cyBvbiBmb3IgdGhpcyBwcm9jZXNzLCBhcmUgcmVhbGx5IGBpbmV0X3J0bV9uZXdyb3V0ZWAsIGBmaWJfc3luY19kb3duX2RldmAsIGFuZCBgZmliX3N5bmNfdXBgLiBIb2xkIG9uLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhhdCBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIG5vdCBzdGF0aWMsIHRoYXQgd291bGQgYmUgdmVyeSB1c2VmdWwsIGxldCBtZSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9ydG1fbmV3cm91dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9ODk2PXN0YXRpYyBpbnQgaW5ldF9ydG1fZGVscm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtOTI5LVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6OTMwOnN0YXRpYyBpbnQgaW5ldF9ydG1fbmV3cm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05MzEtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTcxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgZmliX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNzEyLVx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX05FV1JPVVRFLFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTcxMzpcdCAuZG9pdCA9IGluZXRfcnRtX25ld3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTcxNC1cdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9ERUxST1VURSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NjUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0aGVzZSBmdW5jdGlvbiBjYWxscyBmb3Igb3VyIHB1cnBvc2VzLiBJdCBsb29rcyBsaWtlIGBpbmV0X3J0bV9uZXdyb3V0ZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGluaXRpYWxseSBtYWtlcyBtZSB0aGluayBpdCYjMzk7cyBpbmxpbmVkLiBIb3dldmVyLCBJIHNlZSBpdHMgYWRkcmVzcyBpcyBhY3R1YWxseSB1c2VkIGluIGBmaWJfcnRubF9tc2dfaGFuZGxlcnNgLiBUaGlzIG1lYW5zIGl0ICppc24mIzM5O3QqIGJlaW5nIGlubGluZWQsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHRlY2huaWNhbGx5IGEgc3RhdGljIGZ1bmN0aW9uLgoKVGhlIGluc3RydWN0aW9ucyBJJiMzOTttIHdvcmtpbmcgZnJvbSBzYXkgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNpbmNlIGBpbmV0X3J0bV9uZXdyb3V0ZWAgaXMgaGFuZGxpbmcgbmV0bGluaywgaXQmIzM5O3MgZGVmaW5pdGVseSBub3QgaW5saW5lZCBhbmQgZml0cyB0aGUgYmlsbC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYW5kIG1haW50YWluIGNvbnNpc3RlbmN5IHdpdGggdGhlIGd1aWRlbGluZXMsIEkgdGhpbmsgaXQmIzM5O3MgYWxzbyB3b3J0aCBpbmNsdWRpbmcgYGZpYl90YWJsZV9pbnNlcnRgIGluIHRoZSBzb2x1dGlvbiwgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGlzIGFsc28gbm9uLXN0YXRpYywgcHJvdmlkaW5nIGFuIGV4dHJhIGxheWVyIG9mIGNsYXJpdHkuIE5vdyBJJiMzOTtsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGZpYl90YWJsZV9pbnNlcnRgIHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfdGFibGVfaW5zZXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTY0Nj1pbnQgaXBfcnRfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcnRlbnRyeSAqcnQpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNjcxLVx0XHRcdFx0aWYgKHRiKVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6NjcyOlx0XHRcdFx0XHRlcnIgPSBmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy02NzMtXHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y2ZnLCBOVUxMKTtcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz05MzA9c3RhdGljIGludCBpbmV0X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05NDktXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo5NTA6XHRlcnIgPSBmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsIFx1MDAyNmNmZywgZXh0YWNrKTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTk1MS1cdGlmICghZXJyIFx1MDAyNlx1MDAyNiBjZmcuZmNfdHlwZSA9PSBSVE5fTE9DQUwpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTExMj1zdGF0aWMgdm9pZCBmaWJfbWFnaWMoaW50IGNtZCwgaW50IHR5cGUsIF9fYmUzMiBkc3QsIGludCBkc3RfbGVuLFxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTExNDYtXHRpZiAoY21kID09IFJUTV9ORVdST1VURSlcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjExNDc6XHRcdGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YiwgXHUwMDI2Y2ZnLCBOVUxMKTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTExNDgtXHRlbHNlXG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYz0xMTkwPXN0YXRpYyB2b2lkIGZpYl9yZW1vdmVfYWxpYXMoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCBrZXlfdmVjdG9yICp0cCxcbi0tXG5uZXQvaXB2NC9maWJfdHJpZS5jLTExOTMtLyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MLiAqL1xubmV0L2lwdjQvZmliX3RyaWUuYzoxMTk0OmludCBmaWJfdGFibGVfaW5zZXJ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl90YWJsZSAqdGIsXG5uZXQvaXB2NC9maWJfdHJpZS5jLTExOTUtXHRcdCAgICAgc3RydWN0IGZpYl9jb25maWcgKmNmZywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIGBmaWJfdGFibGVfaW5zZXJ0YCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gc3RhcnQgd2l0aC4gQW5kIHNpbmNlIGl0JiMzOTtzIG5vbi1zdGF0aWMsIHRoYXQgbGlrZWx5IG1lYW5zIGl0IGlzIHVzZWQgZXh0ZXJuYWxseS4gVGhhdCBtYWtlcyBpdCBtb3JlIGludGVyZXN0aW5nIGZvciB3aGF0IEkgd2FudCB0byBhY2NvbXBsaXNoLiBUaGVuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBpbiB0aGUgYW5hbHlzaXMsIHNpbmNlIHRoZXkmIzM5O3JlIHByb2JhYmx5IHRpZWQgaW4gc29tZWhvdy4KCldhaXQgYSBtaW51dGUsIHdoYXQgYWJvdXQgYGZpYl9jcmVhdGVfaW5mb2A/IFRoYXQmIzM5O3MgYWxzbyBub24tc3RhdGljLCBhbmQgaXQgYWN0dWFsbHkgY2FsbHMgYGZpYl9yZWJhbGFuY2VgLiBPa2F5LCB0aGF0JiMzOTtzIGltcG9ydGFudC4gSSBuZWVkIHRvIGluY2x1ZGUgYGZpYl9jcmVhdGVfaW5mb2AgaW4gdGhlIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyB0byBhbmFseXplIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuCgpOb3csIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgYElQX1JPVVRFX01VTFRJUEFUSGAgYW5kIGBJUF9BRFZBTkNFRF9ST1VURVJgIGNvbWluZyBpbnRvIHBsYXkgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGF0IHBsYXksIG9yIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgdGhhdCBpcyBhZmZlY3RlZCBieSB0aGVzZSBjb25maWdzLiBKdXN0IHRvIG1ha2Ugc3VyZSwgSSBzaG91bGQgY2hlY2sgYElQX0FEVkFOQ0VEX1JPVVRFUmAgYWdhaW4gdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTU9Y29uZmlnIElQX01VTFRJQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTQtXG5uZXQvaXB2NC9LY29uZmlnOjE1OmNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMTYtXHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBJUF9BRFZBTkNFRF9ST1VURVJgIGl0c2VsZiBkb2VzbiYjMzk7dCBoYXZlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgYWNjb3VudGVkIGZvciAqZXZlcnl0aGluZyogdGhhdCBtaWdodCBiZSBpbmRpcmVjdGx5IHJlcXVpcmVkLiBUaGUga2V5IGlzIHRvIGV4YW1pbmUgdGhlIGltcGFjdCBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLgoKUmlnaHQsIGBmaWJfcmViYWxhbmNlYC4uLiB0aGF0JiMzOTtzIHRoZSBvbmUuIEkgcmVtZW1iZXIgaXQmIzM5O3Mgb25seSBkZWZpbmVkIHdoZW4gYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgYElQX1JPVVRFX01VTFRJUEFUSGAgdGhlIGNydWNpYWwgZmFjdG9yIGhlcmUuIEFuZCwgYXMgYSBtYXR0ZXIgb2YgZmFjdCwgYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgdGhlICpwYXJlbnQqIGNvbmZpZyB0aGF0IGFjdHVhbGx5IG1ha2VzIGBJUF9ST1VURV9NVUxUSVBBVEhgIGF2YWlsYWJsZSB0byBiZWdpbiB3aXRoLgoKVGhlcmVmb3JlLCB0aGUgRW5hYmxlQ29uZmlncyBsaXN0IHdpbGwgbmVlZCBib3RoIG9mIHRoZXNlLiBTbywgdGhlIGNvcnJlY3Qgd2F5IHRvIHNwZWNpZnkgdGhlIGRlcGVuZGVuY2llcyBpczogYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LCAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7XWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFib3V0IGBmaWJfcmViYWxhbmNlYCBvbmUgbW9yZSB0aW1lLiBObyBoYXJtIGluIGJlaW5nIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0fVxuIDg1MTpcdFxuIDg1MjpcdC8qIG9ubHkgY2FsbGVkIHdoZW4gZmliX25oIGlzIGludGVncmF0ZWQgaW50byBmaWJfaW5mbyAqL1xuIDg1MzpcdHN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcbiA4NTQ6XHR7XG4gODU1Olx0XHRpbnQgdG90YWw7XG4gODU2Olx0XHRpbnQgdztcbiA4NTc6XHRcbiA4NTg6XHRcdGlmIChmaWJfaW5mb19udW1fcGF0aChmaSkgXHUwMDNjIDIpXG4gODU5Olx0XHRcdHJldHVybjtcbiA4NjA6XHRcbiA4NjE6XHRcdHRvdGFsID0gMDtcbiA4NjI6XHRcdGZvcl9uZXh0aG9wcyhmaSkge1xuIDg2MzpcdFx0XHRpZiAobmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfREVBRClcbiA4NjQ6XHRcdFx0XHRjb250aW51ZTtcbiA4NjU6XHRcbiA4NjY6XHRcdFx0aWYgKGlwX2lnbm9yZV9saW5rZG93bihuaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiA4Njc6XHRcdFx0ICAgIG5oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKVxuIDg2ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDg2OTpcdFxuIDg3MDpcdFx0XHR0b3RhbCAmIzQzOz0gbmgtXHUwMDNlZmliX25oX3dlaWdodDtcbiA4NzE6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbiA4NzI6XHRcbiA4NzM6XHRcdHcgPSAwO1xuIDg3NDpcdFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4gODc1Olx0XHRcdGludCB1cHBlcl9ib3VuZDtcbiA4NzY6XHRcbiA4Nzc6XHRcdFx0aWYgKCF0b3RhbCB8fCBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpIHtcbiA4Nzg6XHRcdFx0XHR1cHBlcl9ib3VuZCA9IC0xO1xuIDg3OTpcdFx0XHR9IGVsc2UgaWYgKGlwX2lnbm9yZV9saW5rZG93bihuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9kZXYpIFx1MDAyNlx1MDAyNlxuIDg4MDpcdFx0XHRcdCAgIG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfTElOS0RPV04pIHtcbiA4ODE6XHRcdFx0XHR1cHBlcl9ib3VuZCA9IC0xO1xuIDg4MjpcdFx0XHR9IGVsc2Uge1xuIDg4MzpcdFx0XHRcdHcgJiM0Mzs9IG5leHRob3BfbmgtXHUwMDNlZmliX25oX3dlaWdodDtcbiA4ODQ6XHRcdFx0XHR1cHBlcl9ib3VuZCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KXcgXHUwMDNjXHUwMDNjIDMxLFxuIDg4NTpcdFx0XHRcdFx0XHRcdFx0ICAgIHRvdGFsKSAtIDE7XG4gODg2Olx0XHRcdH1cbiA4ODc6XHRcbiA4ODg6XHRcdFx0YXRvbWljX3NldChcdTAwMjZuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCwgdXBwZXJfYm91bmQpO1xuIDg4OTpcdFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xuIDg5MDpcdH1cbiA4OTE6XHQjZWxzZSAvKiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIICovXG4gODkyOlx0XG4gODkzOlx0c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxuIDg5NDpcdFx0XHQgICAgICAgaW50IHJlbWFpbmluZywgc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbiA4OTU6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA4OTY6XHR7XG4gODk3Olx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O011bHRpcGF0aCBzdXBwb3J0IG5vdCBlbmFibGVkIGluIGtlcm5lbFwmIzM0Oyk7XG4gODk4Olx0XG4gODk5Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMzEKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogMjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUm91dGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBuYXN0eSBkaXZpZGUtYnktemVybyB2dWxuZXJhYmlsaXR5LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGluIGBmaWJfcmViYWxhbmNlYCwgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGEgbXVsdGlwYXRoIHJvdXRlIGhhcyAqYWxsKiBpdHMgbmV4dGhvcHMgaW4gYSBkZWFkIG9yIGxpbmtkb3duIHN0YXRlLiBUaGF0IHdvdWxkIGxlYWQgdG8gYSBgdG90YWxgIHdlaWdodCBvZiB6ZXJvLCBhbmQgdGhlbiB3ZSYjMzk7cmUgZGl2aWRpbmcgYnkgemVybyDigJMgY2xhc3NpYyBidWcgbWF0ZXJpYWwuIFRoZSBmaXggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hlY2sgYCF0b3RhbGAgYW5kIHNldCBgdXBwZXJfYm91bmQgPSAtMWAgYWNjb3JkaW5nbHkuIFNpbXBsZSwgYnV0IGNyaXRpY2FsIGZvciBzdGFiaWxpdHkuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBidWcgZml4IGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZSwgbm90aGluZyBlbHNlLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHBvaW50cyBvZiBlbnRyeSwgYW5kIEkgc2VlIHRoZXkgYXJlIGFsbCBvdmVyIHRoZSBwbGFjZS4gSSBjYW4gc2VlIHRoZSByZWFjaGFibGUgcGF0aHMgdGhyb3VnaCBgZmliX2NyZWF0ZV9pbmZvYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAgYW5kIGBmaWJfdGFibGVfaW5zZXJ0YC4gVGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgYWRkaW5nIHJvdXRlcyB0aHJvdWdoIG5ldGxpbmsgb3IgaGFuZGxpbmcgbmV0d29yayBkZXZpY2UgKG5ldGRldikgZXZlbnRzLiBUaGF0IG5ldGxpbmsgcGF0aCBpcyBhIGNsZWFyIGF0dGFjayB2ZWN0b3IgaGVyZS4KCkJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBnaXZlbiwgSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGlzIHJ1bm5pbmcgd2l0aCBgSVBfQURWQU5DRURfUk9VVEVSYCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAgZW5hYmxlZCwgc2luY2UgaXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoaXMgbXVsdGlwYXRoIHJvdXRpbmcgdG8gZXZlbiBiZSBwb3NzaWJsZS4gVGhpcyBwYXRjaCBzZWVtcyBsb3cgaGFuZ2luZyBmcnVpdCBmb3IgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7ZmliX3RhYmxlX2luc2VydCYjMzQ7LAogICAgJiMzNDtmaWJfc3luY19kb3duX2RldiYjMzQ7LAogICAgJiMzNDtmaWJfc3luY191cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7ZmliX3RhYmxlX2luc2VydCYjMzQ7LAogICAgJiMzNDtmaWJfc3luY19kb3duX2RldiYjMzQ7LAogICAgJiMzNDtmaWJfc3luY191cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGB1cHBlcl9ib3VuZGAgZm9yIG11bHRpcGF0aCByb3V0ZXMuIElmIHRoZSBgdG90YWxgIHdlaWdodCBvZiBhbGwgdmFsaWQgbmV4dGhvcHMgaXMgMCwgdGhlIHByZXZpb3VzIGNvZGUgd291bGQgYXR0ZW1wdCB0byBkaXZpZGUgYnkgYHRvdGFsYCwgY2F1c2luZyBhIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbi4gVGhlIHBhdGNoIHByZXZlbnRzIHRoaXMgYnkgZXhwbGljaXRseSBjaGVja2luZyBpZiBgdG90YWxgIGlzIDAgYW5kIHNldHRpbmcgYHVwcGVyX2JvdW5kID0gLTFgIGluIHRoYXQgY2FzZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGFyaXRobWV0aWMgYnVnIChkaXZpZGUtYnktemVybykgdGhhdCBjYW4gYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIGZ1enppbmcgKG9yIFVCU0FOKS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgYW55IGlzc3VlcyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3NTZhMDQxZTc2N2U5MmEwNWU4MDllZTcxMWY0ZmI3NTJjNzgyNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAxODo0OToxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwppbmRleCAwNDgzNTE5YjdmYjBkLi43YTM2MmYyZTJjMmJkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCkBAIC04NzQsNyAmIzQzOzg3NCw3IEBAIHN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSkKIAljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKIAkJaW50IHVwcGVyX2JvdW5kOwogCi0JCWlmIChuZXh0aG9wX25oLSZndDtmaWJfbmhfZmxhZ3MgJmFtcDsgUlROSF9GX0RFQUQpIHsKJiM0MzsJCWlmICghdG90YWwgfHwgbmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2ZsYWdzICZhbXA7IFJUTkhfRl9ERUFEKSB7CiAJCQl1cHBlcl9ib3VuZCA9IC0xOwogCQl9IGVsc2UgaWYgKGlwX2lnbm9yZV9saW5rZG93bihuZXh0aG9wX25oLSZndDtmaWJfbmhfZGV2KSAmYW1wOyZhbXA7CiAJCQkgICBuZXh0aG9wX25oLSZndDtmaWJfbmhfZmxhZ3MgJmFtcDsgUlROSF9GX0xJTktET1dOKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUm91dGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGZpYl9yZWJhbGFuY2VgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0JiMzOTtzIG1vZGlmeWluZyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIGZvciBgIXRvdGFsYCBiZWZvcmUgZXhhbWluaW5nIHRoZSBgUlROSF9GX0RFQURgIGZsYWcgb24gdGhlIG5leHQgaG9wLiBNeSBndXQgc2F5cyB0aGlzIGlzIGxpa2VseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRpdmlkZS1ieS16ZXJvIG9yLCBwb3NzaWJseSwgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgc2NlbmFyaW8gd2hlcmUgYHRvdGFsYCBpcyB6ZXJvLiBBIHplcm8gdmFsdWUgaW4gYHRvdGFsYCwgZGVwZW5kaW5nIG9uIHdoZXJlIGl0JiMzOTtzIHVzZWQsIGNvdWxkIGxlYWQgdG8gc29tZSBuYXN0eSBwcm9ibGVtcy4KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZmliX3JlYmFsYW5jZWAgdG8gY29uZmlybSB0aGlzIGh1bmNoIGFuZCB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHdoYXQgYHRvdGFsYCByZXByZXNlbnRzLCBob3cgaXQmIzM5O3MgY2FsY3VsYXRlZCwgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGggYG5leHRob3BfbmhgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgZml4LiBLbm93aW5nIHRoZSBvcmlnaW5hbCBsb2dpYyBmbG93IG9mIGBmaWJfcmViYWxhbmNlYCBpcyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGNhbGN1bGF0aW9ucyBvciBhcnJheSBhY2Nlc3NlcyB0aGF0IHVzZSBgdG90YWxgIGFzIGEgZGl2aXNvciBvciBpbmRleC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBkZWNpZGUgaWYgdGhlIGZpeCBpcyBjb3JyZWN0LCBhbmQgaWYgYW55IG90aGVyIGNvbnNpZGVyYXRpb25zIGFyZSBuZWVkZWQgdG8gbWFrZSB0aGUgY2hhbmdlIG1vcmUgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfcmViYWxhbmNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz03NDI9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04NTItLyogb25seSBjYWxsZWQgd2hlbiBmaWJfbmggaXMgaW50ZWdyYXRlZCBpbnRvIGZpYl9pbmZvICovXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6ODUzOnN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04NTQte1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz04OTM9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MDEtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTAyOiNkZWZpbmUgZmliX3JlYmFsYW5jZShmaSkgZG8geyB9IHdoaWxlICgwKVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkwMy1cbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MTM3Nj1zdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNTU0LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjE1NTU6XHRcdGZpYl9yZWJhbGFuY2UoZmkpO1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE1NTYtXHR9XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTE5NDM9aW50IGZpYl9zeW5jX2Rvd25fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGJvb2wgZm9yY2UpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwMDItXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjAwMzpcdFx0ZmliX3JlYmFsYW5jZShmaSk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjAwNC1cdH1cbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjA5Mj1pbnQgZmliX3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE0NC1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMTQ1Olx0XHRmaWJfcmViYWxhbmNlKGZpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTQ2LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGZpYl9yZWJhbGFuY2VgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmaWJfcmViYWxhbmNlYCB3aXRoaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIEZJQiAoRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlKSwgZW5zdXJpbmcgdGhhdCByb3V0aW5nIHRhYmxlcyBhcmUgYmFsYW5jZWQgYW5kIGVmZmljaWVudC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHdoeSBhbmQgd2hlbiB0aGlzIGlzIGNhbGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIGBmaWJfdGFibGVgLCBgZmliX2luZm9gLCBhbmQgdGhlIG92ZXJhbGwgcm91dGUgbG9va3VwIHByb2Nlc3MuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZC4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgdG9wb2xvZ3ksIGhvdyBpdCByZWFjdHMgdG8gcm91dGUgYWRkaXRpb25zLCBkZWxldGlvbnMsIGFuZCBtb2RpZmljYXRpb25zLCBhbmQgaG93IGl0IGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZXNlIG9wZXJhdGlvbnMuIEFyZSB0aGV5IHVzaW5nIFJDVSBoZXJlLCBvciBzb21lIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2w/IEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7cmUgcmVseWluZyBvbiBwZXItQ1BVIGRhdGEgc3RydWN0dXJlcyBvciBnbG9iYWwgbG9ja3MsIGFuZCB3aGF0IHRyYWRlLW9mZnMgdGhleSYjMzk7dmUgbWFkZSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgc2NhbGFiaWxpdHkuIEkmIzM5O2xsIGFsc28gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggZnJhZ21lbnRhdGlvbiBhbmQgcGF0aCBNVFUgZGlzY292ZXJ5IGlmIGFwcGxpY2FibGUuIEluIGdlbmVyYWwsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBrZXkgcGxheWVyIGluIHRoZSByZWxpYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgSVB2NCByb3V0aW5nIGluIHRoZSBMaW51eCBrZXJuZWwuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIHRoZSByZWJhbGFuY2luZyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdH1cbiA4NTE6XHRcbiA4NTI6XHQvKiBvbmx5IGNhbGxlZCB3aGVuIGZpYl9uaCBpcyBpbnRlZ3JhdGVkIGludG8gZmliX2luZm8gKi9cbiA4NTM6XHRzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXG4gODU0Olx0e1xuIDg1NTpcdFx0aW50IHRvdGFsO1xuIDg1NjpcdFx0aW50IHc7XG4gODU3Olx0XG4gODU4Olx0XHRpZiAoZmliX2luZm9fbnVtX3BhdGgoZmkpIFx1MDAzYyAyKVxuIDg1OTpcdFx0XHRyZXR1cm47XG4gODYwOlx0XG4gODYxOlx0XHR0b3RhbCA9IDA7XG4gODYyOlx0XHRmb3JfbmV4dGhvcHMoZmkpIHtcbiA4NjM6XHRcdFx0aWYgKG5oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpXG4gODY0Olx0XHRcdFx0Y29udGludWU7XG4gODY1Olx0XG4gODY2Olx0XHRcdGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmgtXHUwMDNlZmliX25oX2RldikgXHUwMDI2XHUwMDI2XG4gODY3Olx0XHRcdCAgICBuaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9MSU5LRE9XTilcbiA4Njg6XHRcdFx0XHRjb250aW51ZTtcbiA4Njk6XHRcbiA4NzA6XHRcdFx0dG90YWwgJiM0Mzs9IG5oLVx1MDAzZWZpYl9uaF93ZWlnaHQ7XG4gODcxOlx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XG4gODcyOlx0XG4gODczOlx0XHR3ID0gMDtcbiA4NzQ6XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuIDg3NTpcdFx0XHRpbnQgdXBwZXJfYm91bmQ7XG4gODc2Olx0XG4gODc3Olx0XHRcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4gODc4Olx0XHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiA4Nzk6XHRcdFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiA4ODA6XHRcdFx0XHQgICBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XG4gODgxOlx0XHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiA4ODI6XHRcdFx0fSBlbHNlIHtcbiA4ODM6XHRcdFx0XHR3ICYjNDM7PSBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF93ZWlnaHQ7XG4gODg0Olx0XHRcdFx0dXBwZXJfYm91bmQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCl3IFx1MDAzY1x1MDAzYyAzMSxcbiA4ODU6XHRcdFx0XHRcdFx0XHRcdCAgICB0b3RhbCkgLSAxO1xuIDg4NjpcdFx0XHR9XG4gODg3Olx0XG4gODg4Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2bmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfdXBwZXJfYm91bmQsIHVwcGVyX2JvdW5kKTtcbiA4ODk6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbiA4OTA6XHR9XG4gODkxOlx0I2Vsc2UgLyogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCAqL1xuIDg5MjpcdFxuIDg5MzpcdHN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcbiA4OTQ6XHRcdFx0ICAgICAgIGludCByZW1haW5pbmcsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXG4gODk1Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gODk2Olx0e1xuIDg5NzpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNdWx0aXBhdGggc3VwcG9ydCBub3QgZW5hYmxlZCBpbiBrZXJuZWxcJiMzNDspO1xuIDg5ODpcdFxuIDg5OTpcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTcKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgZGl2aWRlLWJ5LXplcm8gdnVsbmVyYWJpbGl0eS4gVGhlIGNvcmUgaXNzdWUgaXMgd2l0aGluIHRoZSBgZmliX3JlYmFsYW5jZWAgZnVuY3Rpb24gd2hlcmUgYHVwcGVyX2JvdW5kYCBpcyBiZWluZyBjYWxjdWxhdGVkLiBQcmV2aW91c2x5LCBpZiB0aGUgdG90YWwgd2VpZ2h0IChgdG90YWxgKSBvZiB2YWxpZCBuZXh0IGhvcHMgd2FzIHplcm8sIHRoZSBjb2RlIHdvdWxkIGF0dGVtcHQgYSBkaXZpc2lvbiBieSB6ZXJvIGluIHRoZSBgRElWX1JPVU5EX0NMT1NFU1RfVUxMYCBtYWNyby4gT2J2aW91c2x5LCB0aGF0IGNhdXNlcyBhIGNyYXNoLiBUaGUgZml4IGlzIGVsZWdhbnQ6IGl0IHNpbXBseSBhZGRzIGEgY2hlY2sgZm9yIGAhdG90YWxgIGJlZm9yZSB0aGUgZGl2aXNpb24uIElmIGB0b3RhbGAgaXMgemVybywgd2Ugc2tpcCB0aGUgZGl2aXNpb24gYW5kIHNldCBgdXBwZXJfYm91bmRgIHRvIC0xLiBUaGF0IGF2b2lkcyB0aGUgY3Jhc2guCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhci4gVGhlIHZ1bG5lcmFiaWxpdHkgaXMgYSBzdGFuZGFyZCBhcml0aG1ldGljIGVycm9yLiBJdCYjMzk7cyBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgd2hhdCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2guIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcsIGZ1enppbmcsIFVCU0FOLCBvciBLQVNBTiB3b3VsZCBlYXNpbHkgaWRlbnRpZnkgdGhlIHByb2JsZW0uIEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlOyBpdCYjMzk7cyBvdmVya2lsbC4gSXQmIzM5O3MgYSBjbGVhbiwgZWZmaWNpZW50IGZpeCB0byBhIHByZXZlbnRhYmxlIGNyYXNoLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHN0YW5kYXJkLCBydW4tb2YtdGhlLW1pbGwgYXJpdGhtZXRpYyBidWcuIE5vIG5lZWQgZm9yIHRoZSBoZWF2eSBhcnRpbGxlcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGBmaWJfcmViYWxhbmNlYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBgdXBwZXJfYm91bmRgIGZvciBtdWx0aXBhdGggcm91dGVzLiBJZiB0aGUgYHRvdGFsYCB3ZWlnaHQgb2YgYWxsIHZhbGlkIG5leHRob3BzIGlzIDAsIHRoZSBwcmV2aW91cyBjb2RlIHdvdWxkIGF0dGVtcHQgdG8gZGl2aWRlIGJ5IGB0b3RhbGAsIGNhdXNpbmcgYSBkaXZpZGUtYnktemVybyBleGNlcHRpb24uIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzIGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgaWYgYHRvdGFsYCBpcyAwIGFuZCBzZXR0aW5nIGB1cHBlcl9ib3VuZCA9IC0xYCBpbiB0aGF0IGNhc2UuIFRoaXMgaXMgYSBzdGFuZGFyZCBhcml0aG1ldGljIGJ1ZyAoZGl2aWRlLWJ5LXplcm8pIHRoYXQgY2FuIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBmdXp6aW5nIChvciBVQlNBTikuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGFueSBpc3N1ZXMgdGhhdCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGB1cHBlcl9ib3VuZGAgZm9yIG11bHRpcGF0aCByb3V0ZXMuIElmIHRoZSBgdG90YWxgIHdlaWdodCBvZiBhbGwgdmFsaWQgbmV4dGhvcHMgaXMgMCwgdGhlIHByZXZpb3VzIGNvZGUgd291bGQgYXR0ZW1wdCB0byBkaXZpZGUgYnkgYHRvdGFsYCwgY2F1c2luZyBhIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbi4gVGhlIHBhdGNoIHByZXZlbnRzIHRoaXMgYnkgZXhwbGljaXRseSBjaGVja2luZyBpZiBgdG90YWxgIGlzIDAgYW5kIHNldHRpbmcgYHVwcGVyX2JvdW5kID0gLTFgIGluIHRoYXQgY2FzZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGFyaXRobWV0aWMgYnVnIChkaXZpZGUtYnktemVybykgdGhhdCBjYW4gYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIGZ1enppbmcgKG9yIFVCU0FOKS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgYW55IGlzc3VlcyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjE1LjM3MDkyODExNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDI3MTUxNjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiZmliX3RhYmxlX2luc2VydFwiLFxuICAgIFwiZmliX3N5bmNfZG93bl9kZXZcIixcbiAgICBcImZpYl9zeW5jX3VwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBjYWxjdWxhdGluZyB0aGUgYHVwcGVyX2JvdW5kYCBmb3IgbXVsdGlwYXRoIHJvdXRlcy4gSWYgdGhlIGB0b3RhbGAgd2VpZ2h0IG9mIGFsbCB2YWxpZCBuZXh0aG9wcyBpcyAwLCB0aGUgcHJldmlvdXMgY29kZSB3b3VsZCBhdHRlbXB0IHRvIGRpdmlkZSBieSBgdG90YWxgLCBjYXVzaW5nIGEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGB0b3RhbGAgaXMgMCBhbmQgc2V0dGluZyBgdXBwZXJfYm91bmQgPSAtMWAgaW4gdGhhdCBjYXNlLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXJpdGhtZXRpYyBidWcgKGRpdmlkZS1ieS16ZXJvKSB0aGF0IGNhbiBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgb3IgZnV6emluZyAob3IgVUJTQU4pLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBhbnkgaXNzdWVzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjE1LjM3MDkzMjk4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1NTQ2MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzc1NmEwNDFlNzY3ZTkyYTA1ZTgwOWVlNzExZjRmYjc1MmM3ODI1OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxODo0OToxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcXG5pbmRleCAwNDgzNTE5YjdmYjBkLi43YTM2MmYyZTJjMmJkIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xcbisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xcbkBAIC04NzQsNyArODc0LDcgQEAgc3RhdGljIHZvaWQgZmliX3JlYmFsYW5jZShzdHJ1Y3QgZmliX2luZm8gKmZpKVxcbiBcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4gXFx0XFx0aW50IHVwcGVyX2JvdW5kO1xcbiBcXG4tXFx0XFx0aWYgKG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9ERUFEKSB7XFxuK1xcdFxcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0RFQUQpIHtcXG4gXFx0XFx0XFx0dXBwZXJfYm91bmQgPSAtMTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjE1LjkwNzA4NTcyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwNDAwMzQ0NjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiZmliX3RhYmxlX2luc2VydFwiLFxuICAgIFwiZmliX3N5bmNfZG93bl9kZXZcIixcbiAgICBcImZpYl9zeW5jX3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gYWxsIG5leHRob3BzIGluIGEgbXVsdGlwYXRoIHJvdXRlIGFyZSBlaXRoZXIgZGVhZCBvciBsaW5rZG93biwgcmVzdWx0aW5nIGluIGEgdG90YWwgd2VpZ2h0IG9mIHplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NCByb3V0aW5nIGNvcmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayByb3V0ZSBhZGRpdGlvbnMgKGBmaWJfdGFibGVfaW5zZXJ0YCwgYGZpYl9jcmVhdGVfaW5mb2ApIGFuZCBuZXRkZXYgc3RhdGUgY2hhbmdlcyAoYGZpYl9zeW5jX2Rvd25fZGV2YCwgYGZpYl9zeW5jX3VwYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NzU2YTA0MWU3NjdlOTJhMDVlODA5ZWU3MTFmNGZiNzUyYzc4MjU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTg6NDk6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbmluZGV4IDA0ODM1MTliN2ZiMGQuLjdhMzYyZjJlMmMyYmQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuQEAgLTg3NCw3ICs4NzQsNyBAQCBzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXG4gXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcbiBcdFx0aW50IHVwcGVyX2JvdW5kO1xuIFxuLVx0XHRpZiAobmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4rXHRcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4gXHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiBcdFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo0OToxNS45MDcwODczNzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ0OTQ3MjQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSb3V0aW5nIFRhYmxlIFJlYmFsYW5jaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGxhbmRlZCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBmaWJfcmViYWxhbmNlYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQncyBtb2RpZnlpbmcgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBgaWYgKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfREVBRClgLiBOb3csIHRoZSBjb2RlIGNoZWNrcyBgaWYgKCF0b3RhbCB8fCBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpYC4gSSBpbW1lZGlhdGVseSBoYXZlIHF1ZXN0aW9ucy4gV2h5IHRoZSBhZGRpdGlvbiBvZiBgIXRvdGFsYD8gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IGBmaWJfcmViYWxhbmNlYCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyB0aGUgcm91dGluZyB0YWJsZSdzIGludGVncml0eSwgZW5zdXJpbmcgdGhlIGJlc3QgcGF0aHMgYXJlIGNob3NlbiwgYW5kIGhhbmRsaW5nIHJvdXRlIGNoYW5nZXMgZWZmaWNpZW50bHkuXG5cbk15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGUgYHRvdGFsYCB2YXJpYWJsZSBsaWtlbHkgcGxheXMgYSByb2xlIGluIHRoZSBsb2dpYyBvZiBob3cgbWFueSBuZXh0LWhvcHMgd2UgaGF2ZSB0byB3b3JrIHdpdGguIEFkZGluZyB0aGF0IGAhdG90YWxgIGNoZWNrIHN1Z2dlc3RzIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBhIHNjZW5hcmlvIHdoZXJlIHRoZXJlIGFyZSBubyB2YWxpZCBuZXh0LWhvcHMsIGFuZCB3ZSdyZSBoYW5kbGluZyB0aGUgXCJlbXB0eVwiIG9yIFwibm8gdmFsaWQgcm91dGVzXCIgY2FzZS4gVGhpcyBjaGFuZ2UgY291bGQgYmUgaW50cm9kdWNlZCB0byBwcmV2ZW50IGEgc3BlY2lmaWMgY29uZGl0aW9uLCBsaWtlbHkgYSBkb3VibGUtZnJlZSwgYSBkaXZpZGUtYnktemVybywgb3Igc29tZSBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3IuIEl0IGNvdWxkIGFsc28gYmUgaW50ZW5kZWQgdG8gbWFrZSBzdXJlIGEgdmFsaWQgcm91dGUgZXhpc3RzLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGNoYW5nZSB0byB0cnVseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgc3BlY2lmaWMgcHJvYmxlbSB0aGlzIHBhdGNoIGlzIG1lYW50IHRvIGFkZHJlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIG1lYW5pbmcgb2YgYHRvdGFsYCBpcyBvYnZpb3VzbHkga2V5IGhlcmUsIGFsb25nIHdpdGggdGhlIGxhcmdlciBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjI2LjM1NjU2MTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjU5NDk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfcmViYWxhbmNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NzQyPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04NTItLyogb25seSBjYWxsZWQgd2hlbiBmaWJfbmggaXMgaW50ZWdyYXRlZCBpbnRvIGZpYl9pbmZvICovXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjg1MzpzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTg1NC17XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9ODkzPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MDEtXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjkwMjojZGVmaW5lIGZpYl9yZWJhbGFuY2UoZmkpIGRvIHsgfSB3aGlsZSAoMClcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTAzLVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzNzY9c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNTU0LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxNTU1OlxcdFxcdGZpYl9yZWJhbGFuY2UoZmkpO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNTU2LVxcdH1cXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTQzPWludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwMDItXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIwMDM6XFx0XFx0ZmliX3JlYmFsYW5jZShmaSk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwMDQtXFx0fVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIwOTI9aW50IGZpYl9zeW5jX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgbmhfZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE0NC1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjE0NTpcXHRcXHRmaWJfcmViYWxhbmNlKGZpKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE0Ni1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjI2LjQ1OTE2MTAxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NDI2ODA3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyBgZmliX3JlYmFsYW5jZWAgQ2FsbHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGhpdHMgYGZpYl9yZWJhbGFuY2VgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNldmVyYWwga2V5IHBsYWNlczogYGZpYl9jcmVhdGVfaW5mb2AsIGBmaWJfc3luY19kb3duX2RldmAsIGFuZCBgZmliX3N5bmNfdXBgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGl0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2Ugd2lsbCBiZSBpbiB0aG9zZSBjb250ZXh0cy4gTGV0J3MgZGl2ZSBpbnRvIHRoZSBgZmliX3JlYmFsYW5jZWAgY29kZSBpdHNlbGYgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbCBjb250ZXh0cyB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NDk6NDMuODg1OTczNDM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0fVxcbiA4NTE6XFx0XFxuIDg1MjpcXHQvKiBvbmx5IGNhbGxlZCB3aGVuIGZpYl9uaCBpcyBpbnRlZ3JhdGVkIGludG8gZmliX2luZm8gKi9cXG4gODUzOlxcdHN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcXG4gODU0OlxcdHtcXG4gODU1OlxcdFxcdGludCB0b3RhbDtcXG4gODU2OlxcdFxcdGludCB3O1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRpZiAoZmliX2luZm9fbnVtX3BhdGgoZmkpIFxcdTAwM2MgMilcXG4gODU5OlxcdFxcdFxcdHJldHVybjtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0dG90YWwgPSAwO1xcbiA4NjI6XFx0XFx0Zm9yX25leHRob3BzKGZpKSB7XFxuIDg2MzpcXHRcXHRcXHRpZiAobmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9ERUFEKVxcbiA4NjQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdFxcdGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmgtXFx1MDAzZWZpYl9uaF9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuIDg2NzpcXHRcXHRcXHQgICAgbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9MSU5LRE9XTilcXG4gODY4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHRcXHR0b3RhbCArPSBuaC1cXHUwMDNlZmliX25oX3dlaWdodDtcXG4gODcxOlxcdFxcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0dyA9IDA7XFxuIDg3NDpcXHRcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4gODc1OlxcdFxcdFxcdGludCB1cHBlcl9ib3VuZDtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0XFx0aWYgKCF0b3RhbCB8fCBuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBSVE5IX0ZfREVBRCkge1xcbiA4Nzg6XFx0XFx0XFx0XFx0dXBwZXJfYm91bmQgPSAtMTtcXG4gODc5OlxcdFxcdFxcdH0gZWxzZSBpZiAoaXBfaWdub3JlX2xpbmtkb3duKG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuIDg4MDpcXHRcXHRcXHRcXHQgICBuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBSVE5IX0ZfTElOS0RPV04pIHtcXG4gODgxOlxcdFxcdFxcdFxcdHVwcGVyX2JvdW5kID0gLTE7XFxuIDg4MjpcXHRcXHRcXHR9IGVsc2Uge1xcbiA4ODM6XFx0XFx0XFx0XFx0dyArPSBuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfd2VpZ2h0O1xcbiA4ODQ6XFx0XFx0XFx0XFx0dXBwZXJfYm91bmQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCl3IFxcdTAwM2NcXHUwMDNjIDMxLFxcbiA4ODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHRvdGFsKSAtIDE7XFxuIDg4NjpcXHRcXHRcXHR9XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCwgdXBwZXJfYm91bmQpO1xcbiA4ODk6XFx0XFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xcbiA4OTA6XFx0fVxcbiA4OTE6XFx0I2Vsc2UgLyogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCAqL1xcbiA4OTI6XFx0XFxuIDg5MzpcXHRzdGF0aWMgaW50IGZpYl9nZXRfbmhzKHN0cnVjdCBmaWJfaW5mbyAqZmksIHN0cnVjdCBydG5leHRob3AgKnJ0bmgsXFxuIDg5NDpcXHRcXHRcXHQgICAgICAgaW50IHJlbWFpbmluZywgc3RydWN0IGZpYl9jb25maWcgKmNmZyxcXG4gODk1OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDg5NjpcXHR7XFxuIDg5NzpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJNdWx0aXBhdGggc3VwcG9ydCBub3QgZW5hYmxlZCBpbiBrZXJuZWxcXFwiKTtcXG4gODk4OlxcdFxcbiA4OTk6XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjQzLjg4NjEyODM0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNDg0NjI1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTXVsdGktUGF0aCBSb3V0aW5nIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcm91dGluZyBpc3N1ZSwgYW5kIHRoZSBjb2RlIHBvaW50cyBtZSB0byBgZmliX3JlYmFsYW5jZWAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBtdWx0aS1wYXRoIHJvdXRpbmcsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIGluIHRoaXMgY29udGV4dC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBjb3JyZWN0LCBjb25zaWRlcmluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEFoLCBoZXJlIHdlIGdvLCBpdCdzIG5lc3RsZWQgdW5kZXIgYCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgc2VjdGlvbiBpcyBhY3RpdmUuIEkgc2VlIHRoZSBgI2Vsc2VgIGJsb2NrIGF0IGxpbmUgODkxLiBUaGF0IG1lYW5zIGBmaWJfcmViYWxhbmNlYCAqaXMqIGRlZmluZWQgd2hlbiBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgaXMgZW5hYmxlZCwgYXMgSSBzdXNwZWN0ZWQuIE5vdyBJIHdhbnQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBuZXQvaXB2NGAgdG8gY29uZmlybSBleGFjdGx5IGhvdyB0aGF0IGZlYXR1cmUgaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUwOjA0LjM3MDc1NTMzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA1Njc5OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NjM9Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy03OS1cXG5uZXQvaXB2NC9LY29uZmlnOjgwOmNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcXG5uZXQvaXB2NC9LY29uZmlnLTgxLVxcdGJvb2wgXFxcIklQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTA6MDQuOTgxMzQxOTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQwMzAxMTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNdWx0aXBhdGggUm91dGluZyBCdWdmaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYElQX1JPVVRFX01VTFRJUEFUSGAuIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBpc3N1ZSwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYHRvdGFsYCBpcyB6ZXJvLiBUaGlzIGhhcHBlbnMgd2hlbiBhbGwgdGhlIG5leHQgaG9wcyBpbiBhIG11bHRpcGF0aCByb3V0ZSBhcmUgZWl0aGVyIGRlYWQgb3IgaGF2ZSBhIGxpbmsgZG93biBzdGF0dXMuIEluIHRoYXQgc2NlbmFyaW8sIHRoZSBjYWxjdWxhdGlvbiBgdXBwZXJfYm91bmQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCl3IFx1MDAzY1x1MDAzYyAzMSwgdG90YWwpIC0gMTtgIHdpbGwgaW5ldml0YWJseSByZXN1bHQgaW4gYSBkaXZpc2lvbiBieSB6ZXJvIGVycm9yLlxuXG5UaGUgZml4IGlzIHNpbXBsZTogYWRkIGEgYCF0b3RhbCB8fGAgY29uZGl0aW9uIHRvIHByZXZlbnQgdGhlIHByb2JsZW1hdGljIGNhbGN1bGF0aW9uIHdoZW4gYHRvdGFsYCBpcyB6ZXJvLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBidWdmaXgsIGFuZCBub3RoaW5nIHRvIGNvbXBsaWNhdGUgdGhlIGNvZGUuIERlZmluaXRlbHkgd29ydGggYSB0aG9yb3VnaCBmdXp6aW5nIHJ1bi5cblxuTm93LCBsZXQncyBsb29rIGF0IHdoZXJlIHRoZSBwcm9ibGVtIGNhbiBvY2N1ci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBhdHRhY2sgc3VyZmFjZS4gYGZpYl9yZWJhbGFuY2VgIGlzIHN0YXRpYzsgb2theS4gSXQncyBjYWxsZWQgZnJvbSBgZmliX2NyZWF0ZV9pbmZvYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aG9zZSBhcmUgc3RhdGljLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTYsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTA6MjEuMzg0MzU2MDA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQyMTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfY3JlYXRlX2luZm98ZmliX3N5bmNfZG93bl9kZXZ8ZmliX3N5bmNfdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc1LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNzctXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTI0PXZvaWQgZmliX3N5bmNfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBvcmlnX210dSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQyLSAqL1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxOTQzOmludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQ0LXtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMDEwPXN0YXRpYyB2b2lkIGZpYl9zZWxlY3RfZGVmYXVsdChjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbHAsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5MS0gKi9cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjA5MjppbnQgZmliX3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncylcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUwOjIxLjQ2NDc4NTA0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTEzNjQ5NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBDYW5kaWRhdGVzIGZvciBFeGFtaW5hdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmNlcHQgSSdtIHdvcmtpbmcgd2l0aCBpcyBjbGVhcmx5ICpkeW5hbWljKi4gVGhpbmdzIGFyZW4ndCBmaXhlZDsgdGhleSdyZSBpbiBmbHV4LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvd2FyZHMgYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zIGFzIHByaW1lIGFyZWFzIG9mIGludGVyZXN0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBgZmliX2NyZWF0ZV9pbmZvYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAuIFRoZXNlIHNlZW0gbGlrZSBsaWtlbHkgc3BvdHMgdG8gZmluZCB0aGUga2luZCBvZiBkeW5hbWlzbSBJJ20gbG9va2luZyBmb3IuXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IGludGVybmFsIHRvIGEgbW9kdWxlLCBvciBhcmUgdGhleSBleHBvcnRlZCBhbmQgcG90ZW50aWFsbHkgdXNlZCBleHRlcm5hbGx5PyBUaGF0IHdpbGwgZGlyZWN0bHkgaW1wYWN0IGhvdyBJIGFwcHJvYWNoIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgbGlua2FnZXMgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGludGVyYWN0aW9ucyBmcm9tIG91dHNpZGUuIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhleSdyZSBiZWluZyAqdXNlZCouIExldCdzIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM2MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUwOjI1Ljk3ODQzNzczOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MjY2NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX2NyZWF0ZV9pbmZvfGZpYl9zeW5jX2Rvd25fZGV2fGZpYl9zeW5jX3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNDY1PXN0YXRpYyB2b2lkIGZpYl9kaXNhYmxlX2lwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDY3LXtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNDY4OlxcdGlmIChmaWJfc3luY19kb3duX2RldihkZXYsIGV2ZW50LCBmb3JjZSkpXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ2OS1cXHRcXHRmaWJfZmx1c2goZGV2X25ldChkZXYpKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE0NzU9c3RhdGljIGludCBmaWJfaW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDg0LSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTQ4NTpcXHRcXHRmaWJfc3luY191cChkZXYsIFJUTkhfRl9ERUFEKTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDg2LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTMxLSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTUzMjpcXHRcXHRmaWJfc3luY191cChkZXYsIFJUTkhfRl9ERUFEKTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTMzLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTU0Mi1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoSUZGX1JVTk5JTkcgfCBJRkZfTE9XRVJfVVApKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NDM6XFx0XFx0XFx0ZmliX3N5bmNfdXAoZGV2LCBSVE5IX0ZfTElOS0RPV04pO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDQtXFx0XFx0ZWxzZVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NDU6XFx0XFx0XFx0ZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZmFsc2UpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDYtXFx0XFx0cnRfY2FjaGVfZmx1c2gobmV0KTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaD0zOD12b2lkIGZpYl9yZWxlYXNlX2luZm8oc3RydWN0IGZpYl9pbmZvICopO1xcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC00MC1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc1LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNzctXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTI0PXZvaWQgZmliX3N5bmNfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBvcmlnX210dSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQyLSAqL1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxOTQzOmludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQ0LXtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMDEwPXN0YXRpYyB2b2lkIGZpYl9zZWxlY3RfZGVmYXVsdChjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbHAsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5MS0gKi9cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjA5MjppbnQgZmliX3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncylcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5My17XFxuLS1cXG5uZXQvaXB2NC9maWJfdHJpZS5jPTExOTQ9aW50IGZpYl90YWJsZV9pbnNlcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3RhYmxlICp0YixcXG4tLVxcbm5ldC9pcHY0L2ZpYl90cmllLmMtMTIxMS1cXG5uZXQvaXB2NC9maWJfdHJpZS5jOjEyMTI6XFx0ZmkgPSBmaWJfY3JlYXRlX2luZm8oY2ZnLCBleHRhY2spO1xcbm5ldC9pcHY0L2ZpYl90cmllLmMtMTIxMy1cXHRpZiAoSVNfRVJSKGZpKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MDoyNi4wNTMyNjg4NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMzYyNTI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZJQiBJbnNlcnRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgZm9yIGhvdyBGSUIgZW50cmllcyBnZXQgY3JlYXRlZCBhbmQgc3luY2hyb25pemVkLiBJdCBsb29rcyBsaWtlIGBmaWJfY3JlYXRlX2luZm9gIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGBmaWJfdGFibGVfaW5zZXJ0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBhcmUgdHJpZ2dlcmVkIGJ5IG5ldGRldiBldmVudCBoYW5kbGVycy4gR2l2ZW4gdGhhdCBgZmliX3RhYmxlX2luc2VydGAgc2VlbXMgdG8gYmUgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFuIGVudHJ5LCBJIHRoaW5rIGl0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiBMZXQgbWUgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgZmliX3RhYmxlX2luc2VydGAgYW5kIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW5pdGlhbCBpbnNlcnRpb24gbG9naWMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZXNlIG90aGVyIGtleSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MDoyOS43NjY4OTY0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5NTAzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3RhYmxlX2luc2VydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9NjQ2PWludCBpcF9ydF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBydGVudHJ5ICpydClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTY3MS1cXHRcXHRcXHRcXHRpZiAodGIpXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6NjcyOlxcdFxcdFxcdFxcdFxcdGVyciA9IGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YixcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy02NzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjZmcsIE5VTEwpO1xcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9OTMwPXN0YXRpYyBpbnQgaW5ldF9ydG1fbmV3cm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05NDktXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6OTUwOlxcdGVyciA9IGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YiwgXFx1MDAyNmNmZywgZXh0YWNrKTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05NTEtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgY2ZnLmZjX3R5cGUgPT0gUlROX0xPQ0FMKVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTExMj1zdGF0aWMgdm9pZCBmaWJfbWFnaWMoaW50IGNtZCwgaW50IHR5cGUsIF9fYmUzMiBkc3QsIGludCBkc3RfbGVuLFxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTE0Ni1cXHRpZiAoY21kID09IFJUTV9ORVdST1VURSlcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxMTQ3OlxcdFxcdGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YiwgXFx1MDAyNmNmZywgTlVMTCk7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTE0OC1cXHRlbHNlXFxuLS1cXG5uZXQvaXB2NC9maWJfdHJpZS5jPTExOTA9c3RhdGljIHZvaWQgZmliX3JlbW92ZV9hbGlhcyhzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IGtleV92ZWN0b3IgKnRwLFxcbi0tXFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMTkzLS8qIENhbGxlciBtdXN0IGhvbGQgUlROTC4gKi9cXG5uZXQvaXB2NC9maWJfdHJpZS5jOjExOTQ6aW50IGZpYl90YWJsZV9pbnNlcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3RhYmxlICp0YixcXG5uZXQvaXB2NC9maWJfdHJpZS5jLTExOTUtXFx0XFx0ICAgICBzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUwOjI5Ljg1Mzg1MDQ0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzczNDkwMDU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NCBSb3V0aW5nIFRhYmxlIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBJUHY0IHJvdXRpbmcgdGFibGUgc3R1ZmYsIGFuZCBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIGNsZWFybHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgZm9yIGhhbmRsaW5nIGBSVE1fTkVXUk9VVEVgIG5ldGxpbmsgbWVzc2FnZXMuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LCBhIGRlZmluaXRlIGZvY3VzIHN5bWJvbC4gSSBhbHNvIHNlZSB0aGF0IGBmaWJfc3luY19kb3duX2RldmAgYW5kIGBmaWJfc3luY191cGAgc2VlbSByZWxldmFudCwgYnV0IGxldCdzIHNlZSBob3cgdGhleSBmaXQgaW4uIEFoLCB5ZXMsIGBmaWJfc3luY19kb3duX2RldmAgZ2V0cyBjYWxsZWQgZnJvbSBgZmliX2Rpc2FibGVfaXBgIGFuZCBgZmliX25ldGRldl9ldmVudGAsIGFuZCBgZmliX3N5bmNfdXBgIGlzIGludm9rZWQgYnkgYGZpYl9pbmV0YWRkcl9ldmVudGAgYXMgd2VsbC4gU28sIGBmaWJfbmV0ZGV2X2V2ZW50YCwgYGZpYl9pbmV0YWRkcl9ldmVudGAsIGFuZCB0aGF0IGBpbmV0X3J0bV9uZXdyb3V0ZWAg4oCTIHRob3NlIGxvb2sgbGlrZSBwcm9taXNpbmcgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyByb3V0ZSBjaGFuZ2VzIGFyZSBoYW5kbGVkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIG11bHRpcGF0aCByb3V0aW5nIGlzIGVuYWJsZWQsIHNvLCBsZXQncyBsb29rIGF0IGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGltcGFjdCB0aGlzIGJlaGF2aW9yPyBUaGUgY29yZSBsb2dpYywgSSdtIGFzc3VtaW5nLCBpcyBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSSdsbCBoYXZlIHRvIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCB0byBzZWUgdGhlIGRldGFpbHMgYXJvdW5kIHRoYXQgYElQX1JPVVRFX01VTFRJUEFUSGAgY29uZmlnIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MTowMy41ODg3NTM3MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0XFx0ICBSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgZG9jdW1lbnRhdGlvbiBhdFxcbiAgNzY6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9sYXJ0Yy5vcmcvaG93dG8vbGFydGMucnBkYi5odG1sXFx1MDAzZVxcbiAgNzc6XFx0XFxuICA3ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA3OTpcXHRcXG4gIDgwOlxcdGNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcXG4gIDgxOlxcdFxcdGJvb2wgXFxcIklQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXFxuICA4MzpcXHRcXHRoZWxwXFxuICA4NDpcXHRcXHQgIE5vcm1hbGx5LCB0aGUgcm91dGluZyB0YWJsZXMgc3BlY2lmeSBhIHNpbmdsZSBhY3Rpb24gdG8gYmUgdGFrZW4gaW5cXG4gIDg1OlxcdFxcdCAgYSBkZXRlcm1pbmlzdGljIG1hbm5lciBmb3IgYSBnaXZlbiBwYWNrZXQuIElmIHlvdSBzYXkgWSBoZXJlXFxuICA4NjpcXHRcXHQgIGhvd2V2ZXIsIGl0IGJlY29tZXMgcG9zc2libGUgdG8gYXR0YWNoIHNldmVyYWwgYWN0aW9ucyB0byBhIHBhY2tldFxcbiAgODc6XFx0XFx0ICBwYXR0ZXJuLCBpbiBlZmZlY3Qgc3BlY2lmeWluZyBzZXZlcmFsIGFsdGVybmF0aXZlIHBhdGhzIHRvIHRyYXZlbFxcbiAgODg6XFx0XFx0ICBmb3IgdGhvc2UgcGFja2V0cy4gVGhlIHJvdXRlciBjb25zaWRlcnMgYWxsIHRoZXNlIHBhdGhzIHRvIGJlIG9mXFxuICA4OTpcXHRcXHQgIGVxdWFsIFxcXCJjb3N0XFxcIiBhbmQgY2hvb3NlcyBvbmUgb2YgdGhlbSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIGZhc2hpb25cXG4gIDkwOlxcdFxcdCAgaWYgYSBtYXRjaGluZyBwYWNrZXQgYXJyaXZlcy5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIElQX1JPVVRFX1ZFUkJPU0VcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIklQOiB2ZXJib3NlIHJvdXRlIG1vbml0b3JpbmdcXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MTowMy41ODg5MDAwNjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzQ5OTIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgUm91dGluZyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCdzIHJvdXRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSd2ZSBoaXQgYSBkZXBlbmRlbmN5LiBJIHNlZSB0aGF0IGBJUF9ST1VURV9NVUxUSVBBVEhgIHJlbGllcyBvbiBgSVBfQURWQU5DRURfUk9VVEVSYC4gVGhhdCdzIG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLCBnaXZlbiB0aGUgbmF0dXJlIG9mIG11bHRpcGF0aCByb3V0aW5nLiBJZiBJIHdhbnQgdG8gZW5hYmxlIHRoYXQgZnVuY3Rpb25hbGl0eSwgSSBmaXJzdCBuZWVkIHRvIGVuc3VyZSB0aGUgYWR2YW5jZWQgcm91dGluZyBmZWF0dXJlcyBhcmUgYnVpbHQtaW4gb3IgYXZhaWxhYmxlIGFzIGEgbW9kdWxlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgSVBfQURWQU5DRURfUk9VVEVSYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIHNlZSBpZiBpdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgYXMgYSBtb2R1bGUuIERlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzZXR0aW5nLCBJIG1pZ2h0IG5lZWQgdG8gbWFrZSBzb21lIGFkanVzdG1lbnRzLiBJZiBpdCdzIGRpc2FibGVkLCBJJ2xsIGhhdmUgdG8gd2VpZ2ggdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBpdC4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGRlcGVuZGVuY2llcyBhbmQsIG9mIGNvdXJzZSwgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgcm91dGluZyBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29uZmlnIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjA3LjIzMjQwMzM4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0NjI5ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTU9Y29uZmlnIElQX01VTFRJQ0FTVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNC1cXG5uZXQvaXB2NC9LY29uZmlnOjE1OmNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcXG5uZXQvaXB2NC9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIklQOiBhZHZhbmNlZCByb3V0ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjA3Ljg0NzAzNzgyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE5NjAzODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlcGVuZGVuY3kgQ2hlY2s6IGBJUF9BRFZBTkNFRF9ST1VURVJgKipcblxuT2theSwgdGltZSB0byBkaXZlIGluIGFuZCBtYWtlIHN1cmUgd2UncmUgc3F1YXJlZCBhd2F5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcnVuIGEgZGVwZW5kZW5jeSBhbmFseXNpcyBvbiBgSVBfQURWQU5DRURfUk9VVEVSYC4gV2UgYWxsIGtub3cgdGhlc2UgdGhpbmdzIGNhbiBnZXQgY29tcGxleCBxdWlja2x5LCBlc3BlY2lhbGx5IHdpdGggYWR2YW5jZWQgcm91dGluZyBwcm90b2NvbHMgYW5kIHBvdGVudGlhbGx5IGN1c3RvbSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBsaWJyYXJpZXMsIG90aGVyIHJvdXRpbmcgZGFlbW9ucywgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kIGV2ZW4ga2VybmVsIG1vZHVsZXMgYXJlIHByZXNlbnQsIGNvbXBhdGlibGUsIGFuZCB3b3JraW5nIGFzIGV4cGVjdGVkLiBUaGlzIGlzbid0IGp1c3QgYSBiYXNpYyBwYWNrYWdlIGNoZWNrOyBpdOKAmXMgYSBkZWVwIGRpdmUuIEknbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggYW55IG90aGVyIG5ldHdvcmsgc2VydmljZXMgcnVubmluZywgdmVyc2lvbiBpbmNvbXBhdGliaWxpdGllcyB3aXRoIHRoZSB1bmRlcmx5aW5nIE9TLCBhbmQgb2YgY291cnNlLCBhbnkga25vd24sIG9yIHBvdGVudGlhbCwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBzdGFydCBieSBtYXBwaW5nIHRob3NlIHJlbGF0aW9uc2hpcHM7IG5vIHBvaW50IGJ1aWxkaW5nIGEgaG91c2Ugb2YgY2FyZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MToxMS44NjY2NDQ4NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMDpcXHRcXHQgIGludGVuZCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3BcXG4gIDExOlxcdFxcdCAgb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXMgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIE1vcmVcXG4gIDEyOlxcdFxcdCAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1CT05FIGlzIG9uIHRoZSBXV1cgYXRcXG4gIDEzOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnNhdmV0ei5jb20vbWJvbmUvXFx1MDAzZS4gRm9yIG1vc3QgcGVvcGxlLCBpdCdzIHNhZmUgdG8gc2F5IE4uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIklQOiBhZHZhbmNlZCByb3V0ZXJcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIElmIHlvdSBpbnRlbmQgdG8gcnVuIHlvdXIgTGludXggYm94IG1vc3RseSBhcyBhIHJvdXRlciwgaS5lLiBhcyBhXFxuICAxOTpcXHRcXHQgIGNvbXB1dGVyIHRoYXQgZm9yd2FyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgbmV0d29yayBwYWNrZXRzLCBzYXkgWTsgeW91XFxuICAyMDpcXHRcXHQgIHdpbGwgdGhlbiBiZSBwcmVzZW50ZWQgd2l0aCBzZXZlcmFsIG9wdGlvbnMgdGhhdCBhbGxvdyBtb3JlIHByZWNpc2VcXG4gIDIxOlxcdFxcdCAgY29udHJvbCBhYm91dCB0aGUgcm91dGluZyBwcm9jZXNzLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIFRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiB3b24ndCBkaXJlY3RseSBhZmZlY3QgdGhlIGtlcm5lbDpcXG4gIDI0OlxcdFxcdCAgYW5zd2VyaW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAyNTpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCBhZHZhbmNlZCByb3V0aW5nLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIE5vdGUgdGhhdCB5b3VyIGJveCBjYW4gb25seSBhY3QgYXMgYSByb3V0ZXIgaWYgeW91IGVuYWJsZSBJUFxcbiAgMjg6XFx0XFx0ICBmb3J3YXJkaW5nIGluIHlvdXIga2VybmVsOyB5b3UgY2FuIGRvIHRoYXQgYnkgc2F5aW5nIFkgdG8gXFxcIi9wcm9jXFxuICAyOTpcXHRcXHQgIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGFuZCBcXFwiU3lzY3RsIHN1cHBvcnRcXFwiIGJlbG93IGFuZCBleGVjdXRpbmcgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjExLjg2NjcxODkyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQzOTY5NDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFJvdXRlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYElQX0FEVkFOQ0VEX1JPVVRFUmAgYXBwZWFycyB0byBiZSBhIHN0YW5kYWxvbmUgZmVhdHVyZSwgYXMgaXQgaGFzIG5vIGRlY2xhcmVkIGRlcGVuZGVuY2llcy4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXRzZWxmLCBhbmQgYWxzbyBgSVBfUk9VVEVfTVVMVElQQVRIYCwganVzdCB0byBiZSBjZXJ0YWluLlxuXG5Ob3csIEknbGwgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIHNwYWNlIHRvIHNlZSBpZiBJJ20gbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC4gVGhlIHJlbGV2YW50IGNvZGUgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSByb3V0aW5nIHNlbWFudGljcyBhcmUgZGVmaW5lZCwgc28gaXQncyBhIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zLlxuXG5BIHF1aWNrIHRob3VnaHQsIGRvIEkgbmVlZCB0byBjb25jZXJuIG15c2VsZiB3aXRoIHdoZXRoZXIgYGZpYl9zZW1hbnRpY3MuY2AgaXMgYWx3YXlzIGNvbXBpbGVkIG9yIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3M/IElmIGl0IGlzbid0IGFsd2F5cyBwcmVzZW50LCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciBhIHBvdGVudGlhbCBjb21waWxlLXRpbWUgZGVwZW5kZW5jeSwgYW5kIHRyYWNrIGRvd24gd2hhdGV2ZXIgY29uZmlnIGlzIHJlc3BvbnNpYmxlIGZvciBpdHMgYXZhaWxhYmlsaXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGNvbnNpZGVyYXRpb24gaW4gbWluZCwgYXMgSSBsb29rIHRocm91Z2ggdGhlIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjIzLjMwNjQxNTYyOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA2NDY3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3NlbWFudGljcy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTE0LVxcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE1OlxcdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE2LVxcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MToyMy4zNzcwNjc0NTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NDA0OTg2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBJUHY0IFJvdXRpbmcgU2VtYW50aWNzKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGBmaWJfc2VtYW50aWNzLm9gLCBhbmQgYXMgZXhwZWN0ZWQsIGl0J3MgSVB2NCBvbmx5LiBUaGF0IG5hcnJvd3MgdGhlIGZpZWxkIGRvd24gY29uc2lkZXJhYmx5LiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlIGFyZSBgSVBfQURWQU5DRURfUk9VVEVSYCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAsIHdoaWNoIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzLCBhbmQgYmFzZWQgb24gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwsIEknbSBpbml0aWFsbHkgdGhpbmtpbmcgYWJvdXQgYGluZXRfcnRtX25ld3JvdXRlYCwgYGZpYl9uZXRkZXZfZXZlbnRgLCBhbmQgYGZpYl9pbmV0YWRkcl9ldmVudGAuXG5cbkhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBgZmliX25ldGRldl9ldmVudGAgYW5kIGBmaWJfaW5ldGFkZHJfZXZlbnRgIGFyZSBub3RpZmllciBjYWxsYmFja3MuIFRoYXQgbWVhbnMgdGhleSBhcmUgbGlrZWx5IHRyaWdnZXJlZCBieSBzcGVjaWZpYyBldmVudHMuIExldCBtZSBzZWUgaWYgSSBjYW4gZmlndXJlIG91dCAqd2hlcmUqIHRob3NlIGV2ZW50cyBvcmlnaW5hdGUuIEFoLCByaWdodCwgYGZpYl9uZXRkZXZfZXZlbnRgIGlzIHRpZWQgdG8gbmV0ZGV2IGV2ZW50cyBsaWtlIGBORVRERVZfVVBgIGFuZCBgTkVUREVWX0RPV05gLiBTaW1pbGFybHksIGBmaWJfaW5ldGFkZHJfZXZlbnRgIGhvb2tzIGludG8gaW5ldGFkZHIgZXZlbnRzLCBhbHNvIGxpa2UgYE5FVERFVl9VUGAgYW5kIGBORVRERVZfRE9XTmAuXG5cbkZ1enppbmcgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBhIGNsZWFyIHdpbjsgaXQgZGlyZWN0bHkgbWFuaXB1bGF0ZXMgdGhlIHJvdXRpbmcgdGFibGUgYnkgYWRkaW5nIHJvdXRlcy4gVGhhdCdzIGEgZGVmaW5pdGUgdGFyZ2V0LiBOb3csIEkgZGlkIHNlZSBgZmliX3N5bmNfZG93bl9kZXZgIGFuZCBgZmliX3N5bmNfdXBgIGV4cG9ydGVkLCBidXQgdGhvc2Ugc2VlbSB0byBiZSBjYWxsZWQgKmJ5KiB0aGUgbm90aWZpZXIgY2FsbGJhY2tzLiBOb3QgaWRlYWwgZm9yIGEgZGlyZWN0IGZ1enppbmcgdGFyZ2V0LlxuXG5TbywgdGhlIGNvcmUgc2V0IGZvciBmdXp6aW5nIHdpbGwgYmUgYGluZXRfcnRtX25ld3JvdXRlYCwgYGZpYl9uZXRkZXZfZXZlbnRgLCBhbmQgYGZpYl9pbmV0YWRkcl9ldmVudGAuIEJ1dCB3YWl0Li4uIGNoZWNraW5nIGBmaWJfbmV0ZGV2X2V2ZW50YC4uLiBpdCdzICpzdGF0aWMqLiBPa2F5LCBsZXQgbWUgY29uZmlybSBpdCdzIHJlYWxseSBzdGF0aWMsIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIHNvbWV0aGluZy4gVGhhdCBjaGFuZ2VzIG15IHN0cmF0ZWd5IHNvbWV3aGF0OyBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gdGhhdCB0cmlnZ2VycyBgZmliX25ldGRldl9ldmVudGAgaWYgaXQgaXMgaW5kZWVkIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MTozNS4wMTc1NjkxNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Mjc4NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9uZXRkZXZfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE0NzU9c3RhdGljIGludCBmaWJfaW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTA1LVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MDY6c3RhdGljIGludCBmaWJfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MDcte1xcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTU2OT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZpYl9uZXRkZXZfbm90aWZpZXIgPSB7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTU3MDpcXHQubm90aWZpZXJfY2FsbCA9IGZpYl9uZXRkZXZfZXZlbnQsXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTU3MS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MTozNS4xMDI4NTMxODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMDE2MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgSW1wbGljYXRpb25zIG9mIFN0YXRpYyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiByZWxpZXMgb24gc3RhdGljIGZ1bmN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGFyZ3VtZW50IGlzIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHdoaWNoIGNhbiBjYXVzZSBwcm9ibGVtcy4gQnV0LCB3YWl0LCBgZmliX25ldGRldl9ldmVudGAgaXMgYSAqbm90aWZpZXIgY2FsbGJhY2sqLCBtZWFuaW5nIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaGVyZWZvcmUsIGl0ICpjYW4ndCogYmUgaW5saW5lZC4gU28sIHRoZSBvcmlnaW5hbCBjb25jZXJuIGlzIG1vb3QsIGhlcmUuXG5cbkhtbW0sIGJ1dCB3aGF0IGFib3V0IGFsdGVybmF0aXZlIEFQSSBjYWxscz8gQ291bGQgYGZpYl9zeW5jX2Rvd25fZGV2YCBvciBgZmliX3N5bmNfdXBgIHdvcms/IFRoZXkgYXJlIG5vbi1zdGF0aWMsIHNvIHRoZXkgKmNvdWxkKiBiZSBleHBvcnRlZC4gVGhhdCB3b3VsZCBiZSBpZGVhbC4gSSBzaG91bGQgY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSwgaW4gZmFjdCwgZXhwb3J0ZWQuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjQwLjIxMzAxODY4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMzg5MTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZpYl9zeW5jX2Rvd25fZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTE6NDAuMjczMTY1NjgyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjA0NTg2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLUV4cG9ydGVkLCBOb24tU3RhdGljIFN5bWJvbHMgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIHNvIHRoZXNlIHN5bWJvbHMgYXJlbid0IGV4cG9zZWQgdmlhIGBFWFBPUlRfU1lNQk9MYCwgd2hpY2ggbWVhbnMgdGhleSdyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGlzIG1vZHVsZSBvciB0aGUga2VybmVsIGl0c2VsZi4gQnV0IHRoZXkncmUgKmFsc28qIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgdW51c3VhbC4gVHlwaWNhbGx5LCBpbnRlcm5hbCBzeW1ib2xzIGFyZSBzdGF0aWMgdG8gcHJldmVudCBhY2NpZGVudGFsIGV4dGVybmFsIGxpbmthZ2UuIFRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkncmUgbm9uLXN0YXRpYyB3aXRob3V0IGJlaW5nIGV4cG9ydGVkLiBUaGUgY29tcGlsZXIgc2hvdWxkIHdhcm4gaWYgeW91IGNyZWF0ZSBhIG5vbi1zdGF0aWMgc3ltYm9sIHRoYXQgaXMgbm90IGV4cG9ydGVkLlxuXG5MZXQgbWUgZXhhbWluZSBgZmliX3N5bmNfZG93bl9kZXZgIGFuZCBgZmliX3N5bmNfdXBgIHNwZWNpZmljYWxseS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBzZWUgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQgYW5kIHdoZXJlIHRoZXkgYXJlIGNhbGxlZC4gTXkgbmV4dCB0aG91Z2h0IGlzIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkLiBBcmUgdGhleSB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQsIG9yIGFyZSB0aGV5IHBvdGVudGlhbGx5IGJlaW5nIGFjY2Vzc2VkIGZyb20gYW5vdGhlciBwYXJ0IG9mIHRoZSBrZXJuZWwgaW4gYSByb3VuZGFib3V0IHdheSDigJMgcGVyaGFwcyB2aWEgYSBmdW5jdGlvbiBwb2ludGVyIG9yIGluZGlyZWN0IGxpbmthZ2UgSSdtIG5vdCBpbW1lZGlhdGVseSBzZWVpbmc/IFRoZXJlIGNvdWxkIGJlIGEgY2xldmVyIGRlc2lnbiBwYXR0ZXJuIGluIHBsYXksIG9yLCBwb3RlbnRpYWxseSwgYSBzdWJ0bGUgYnVnIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLiBMZXQncyBkZWx2ZSBpbiBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTc5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTE6NDQuMzkzNjI3NDQ5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI0MzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfc3luY19kb3duX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTQ2NT1zdGF0aWMgdm9pZCBmaWJfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ2Ny17XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTQ2ODpcXHRpZiAoZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZm9yY2UpKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE0NjktXFx0XFx0ZmliX2ZsdXNoKGRldl9uZXQoZGV2KSk7XFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNTA2PXN0YXRpYyBpbnQgZmliX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDQtXFx0XFx0ZWxzZVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NDU6XFx0XFx0XFx0ZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZmFsc2UpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDYtXFx0XFx0cnRfY2FjaGVfZmx1c2gobmV0KTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTI0PXZvaWQgZmliX3N5bmNfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBvcmlnX210dSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQyLSAqL1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxOTQzOmludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTE6NDQuNDYyODc0ODM0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2Mzk2MDYwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUm91dGUgU3luY2hyb25pemF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyByb3V0ZSBzeW5jaHJvbml6YXRpb24gbG9naWMsIGFuZCBpdCdzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgYGluZXRfcnRtX25ld3JvdXRlYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAgYXMgdGhlIGtleSBmdW5jdGlvbnMuIEJ1dCBoYW5nIG9uLCBgZmliX3N5bmNfZG93bl9kZXZgIGFuZCBgZmliX3N5bmNfdXBgIGFyZSB0cmlnZ2VyZWQgYnkgYGZpYl9uZXRkZXZfZXZlbnRgIGFuZCBgZmliX2luZXRhZGRyX2V2ZW50YC4gTm93LCBhcmUgdGhvc2UgdGhlICpvbmx5KiBjYWxsZXJzIG9mIHRob3NlIHR3byBmdW5jdGlvbnM/IExldCBtZSBzZWUuLi4gQWhhISBgZmliX2Rpc2FibGVfaXBgIGFsc28gY2FsbHMgYGZpYl9zeW5jX2Rvd25fZGV2YC4gQW5kIGd1ZXNzIHdoYXQ/IGBmaWJfZGlzYWJsZV9pcGAgaXRzZWxmIGlzIGNhbGxlZCBieSB0aG9zZSBzYW1lIGBmaWJfaW5ldGFkZHJfZXZlbnRgIGFuZCBgZmliX25ldGRldl9ldmVudGAgZnVuY3Rpb25zLiBBbHJpZ2h0LCBzbyB0aGUgcmVhbCBlbnRyeSBwb2ludHMsIHRoZSBvbmVzIHRvIGZvY3VzIG9uIGZvciB0aGlzIHByb2Nlc3MsIGFyZSByZWFsbHkgYGluZXRfcnRtX25ld3JvdXRlYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAuIEhvbGQgb24sIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoYXQgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBub3Qgc3RhdGljLCB0aGF0IHdvdWxkIGJlIHZlcnkgdXNlZnVsLCBsZXQgbWUgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUyOjAwLjg1ODkzODE5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDA2OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfcnRtX25ld3JvdXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9maWJfZnJvbnRlbmQuYz04OTY9c3RhdGljIGludCBpbmV0X3J0bV9kZWxyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTkyOS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo5MzA6c3RhdGljIGludCBpbmV0X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05MzEtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNzExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBmaWJfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNzEyLVxcdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9ORVdST1VURSxcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNzEzOlxcdCAuZG9pdCA9IGluZXRfcnRtX25ld3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE3MTQtXFx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX0RFTFJPVVRFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjowMC45NjA5NDk1MDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1NTE5MjM0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBoYW5kbGUgdGhlc2UgZnVuY3Rpb24gY2FsbHMgZm9yIG91ciBwdXJwb3Nlcy4gSXQgbG9va3MgbGlrZSBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbml0aWFsbHkgbWFrZXMgbWUgdGhpbmsgaXQncyBpbmxpbmVkLiBIb3dldmVyLCBJIHNlZSBpdHMgYWRkcmVzcyBpcyBhY3R1YWxseSB1c2VkIGluIGBmaWJfcnRubF9tc2dfaGFuZGxlcnNgLiBUaGlzIG1lYW5zIGl0ICppc24ndCogYmVpbmcgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXQncyB0ZWNobmljYWxseSBhIHN0YXRpYyBmdW5jdGlvbi5cblxuVGhlIGluc3RydWN0aW9ucyBJJ20gd29ya2luZyBmcm9tIHNheSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBoYW5kbGluZyBuZXRsaW5rLCBpdCdzIGRlZmluaXRlbHkgbm90IGlubGluZWQgYW5kIGZpdHMgdGhlIGJpbGwuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBtYWludGFpbiBjb25zaXN0ZW5jeSB3aXRoIHRoZSBndWlkZWxpbmVzLCBJIHRoaW5rIGl0J3MgYWxzbyB3b3J0aCBpbmNsdWRpbmcgYGZpYl90YWJsZV9pbnNlcnRgIGluIHRoZSBzb2x1dGlvbiwgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGlzIGFsc28gbm9uLXN0YXRpYywgcHJvdmlkaW5nIGFuIGV4dHJhIGxheWVyIG9mIGNsYXJpdHkuIE5vdyBJJ2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZmliX3RhYmxlX2luc2VydGAgdG8gYmUgY29tcGxldGVseSBjb25maWRlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjY1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUyOjEyLjUxMjg3NjU2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNTUxNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl90YWJsZV9pbnNlcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTY0Nj1pbnQgaXBfcnRfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcnRlbnRyeSAqcnQpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy02NzEtXFx0XFx0XFx0XFx0aWYgKHRiKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjY3MjpcXHRcXHRcXHRcXHRcXHRlcnIgPSBmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNjczLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y2ZnLCBOVUxMKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTkzMD1zdGF0aWMgaW50IGluZXRfcnRtX25ld3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtOTQ5LVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjk1MDpcXHRlcnIgPSBmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsIFxcdTAwMjZjZmcsIGV4dGFjayk7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtOTUxLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGNmZy5mY190eXBlID09IFJUTl9MT0NBTClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTExMTI9c3RhdGljIHZvaWQgZmliX21hZ2ljKGludCBjbWQsIGludCB0eXBlLCBfX2JlMzIgZHN0LCBpbnQgZHN0X2xlbixcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTExNDYtXFx0aWYgKGNtZCA9PSBSVE1fTkVXUk9VVEUpXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTE0NzpcXHRcXHRmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsIFxcdTAwMjZjZmcsIE5VTEwpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTExNDgtXFx0ZWxzZVxcbi0tXFxubmV0L2lwdjQvZmliX3RyaWUuYz0xMTkwPXN0YXRpYyB2b2lkIGZpYl9yZW1vdmVfYWxpYXMoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCBrZXlfdmVjdG9yICp0cCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl90cmllLmMtMTE5My0vKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwuICovXFxubmV0L2lwdjQvZmliX3RyaWUuYzoxMTk0OmludCBmaWJfdGFibGVfaW5zZXJ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl90YWJsZSAqdGIsXFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMTk1LVxcdFxcdCAgICAgc3RydWN0IGZpYl9jb25maWcgKmNmZywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjoxMi45NzY0MzM4NDdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MzgwNzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSXQgc2VlbXMgbGlrZSBgZmliX3RhYmxlX2luc2VydGAgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBpdCBhIGdvb2Qgc3ltYm9sIHRvIHN0YXJ0IHdpdGguIEFuZCBzaW5jZSBpdCdzIG5vbi1zdGF0aWMsIHRoYXQgbGlrZWx5IG1lYW5zIGl0IGlzIHVzZWQgZXh0ZXJuYWxseS4gVGhhdCBtYWtlcyBpdCBtb3JlIGludGVyZXN0aW5nIGZvciB3aGF0IEkgd2FudCB0byBhY2NvbXBsaXNoLiBUaGVuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBpbiB0aGUgYW5hbHlzaXMsIHNpbmNlIHRoZXkncmUgcHJvYmFibHkgdGllZCBpbiBzb21laG93LlxuXG5XYWl0IGEgbWludXRlLCB3aGF0IGFib3V0IGBmaWJfY3JlYXRlX2luZm9gPyBUaGF0J3MgYWxzbyBub24tc3RhdGljLCBhbmQgaXQgYWN0dWFsbHkgY2FsbHMgYGZpYl9yZWJhbGFuY2VgLiBPa2F5LCB0aGF0J3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gaW5jbHVkZSBgZmliX2NyZWF0ZV9pbmZvYCBpbiB0aGUgY29yZSBzZXQgb2YgZnVuY3Rpb25zIHRvIGFuYWx5emUgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC5cblxuTm93LCBiZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgYElQX1JPVVRFX01VTFRJUEFUSGAgYW5kIGBJUF9BRFZBTkNFRF9ST1VURVJgIGNvbWluZyBpbnRvIHBsYXkgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGF0IHBsYXksIG9yIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSB0aGF0IGlzIGFmZmVjdGVkIGJ5IHRoZXNlIGNvbmZpZ3MuIEp1c3QgdG8gbWFrZSBzdXJlLCBJIHNob3VsZCBjaGVjayBgSVBfQURWQU5DRURfUk9VVEVSYCBhZ2FpbiB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1OTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6MjEuMzIwMjQ1MDQxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI4MTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz01PWNvbmZpZyBJUF9NVUxUSUNBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTQtXFxubmV0L2lwdjQvS2NvbmZpZzoxNTpjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJJUDogYWR2YW5jZWQgcm91dGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjoyMS4zNzM1MzcyNjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNDcxNzk3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgSVBfQURWQU5DRURfUk9VVEVSYCBpdHNlbGYgZG9lc24ndCBoYXZlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGFjY291bnRlZCBmb3IgKmV2ZXJ5dGhpbmcqIHRoYXQgbWlnaHQgYmUgaW5kaXJlY3RseSByZXF1aXJlZC4gVGhlIGtleSBpcyB0byBleGFtaW5lIHRoZSBpbXBhY3Qgb2YgcmVsYXRlZCBjb25maWd1cmF0aW9ucy5cblxuUmlnaHQsIGBmaWJfcmViYWxhbmNlYC4uLiB0aGF0J3MgdGhlIG9uZS4gSSByZW1lbWJlciBpdCdzIG9ubHkgZGVmaW5lZCB3aGVuIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIGBJUF9ST1VURV9NVUxUSVBBVEhgIHRoZSBjcnVjaWFsIGZhY3RvciBoZXJlLiBBbmQsIGFzIGEgbWF0dGVyIG9mIGZhY3QsIGBJUF9BRFZBTkNFRF9ST1VURVJgIGlzIHRoZSAqcGFyZW50KiBjb25maWcgdGhhdCBhY3R1YWxseSBtYWtlcyBgSVBfUk9VVEVfTVVMVElQQVRIYCBhdmFpbGFibGUgdG8gYmVnaW4gd2l0aC5cblxuVGhlcmVmb3JlLCB0aGUgRW5hYmxlQ29uZmlncyBsaXN0IHdpbGwgbmVlZCBib3RoIG9mIHRoZXNlLiBTbywgdGhlIGNvcnJlY3Qgd2F5IHRvIHNwZWNpZnkgdGhlIGRlcGVuZGVuY2llcyBpczogYEVuYWJsZUNvbmZpZ3M6IFtcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLCBcIklQX1JPVVRFX01VTFRJUEFUSFwiXWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhYm91dCBgZmliX3JlYmFsYW5jZWAgb25lIG1vcmUgdGltZS4gTm8gaGFybSBpbiBiZWluZyB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6MzEuNDIwNzE5ODQ2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdH1cXG4gODUxOlxcdFxcbiA4NTI6XFx0Lyogb25seSBjYWxsZWQgd2hlbiBmaWJfbmggaXMgaW50ZWdyYXRlZCBpbnRvIGZpYl9pbmZvICovXFxuIDg1MzpcXHRzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXFxuIDg1NDpcXHR7XFxuIDg1NTpcXHRcXHRpbnQgdG90YWw7XFxuIDg1NjpcXHRcXHRpbnQgdztcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0aWYgKGZpYl9pbmZvX251bV9wYXRoKGZpKSBcXHUwMDNjIDIpXFxuIDg1OTpcXHRcXHRcXHRyZXR1cm47XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdHRvdGFsID0gMDtcXG4gODYyOlxcdFxcdGZvcl9uZXh0aG9wcyhmaSkge1xcbiA4NjM6XFx0XFx0XFx0aWYgKG5oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBSVE5IX0ZfREVBRClcXG4gODY0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4NjU6XFx0XFxuIDg2NjpcXHRcXHRcXHRpZiAoaXBfaWdub3JlX2xpbmtkb3duKG5oLVxcdTAwM2VmaWJfbmhfZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiA4Njc6XFx0XFx0XFx0ICAgIG5oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBSVE5IX0ZfTElOS0RPV04pXFxuIDg2ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODY5OlxcdFxcbiA4NzA6XFx0XFx0XFx0dG90YWwgKz0gbmgtXFx1MDAzZWZpYl9uaF93ZWlnaHQ7XFxuIDg3MTpcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XFxuIDg3MjpcXHRcXG4gODczOlxcdFxcdHcgPSAwO1xcbiA4NzQ6XFx0XFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XFxuIDg3NTpcXHRcXHRcXHRpbnQgdXBwZXJfYm91bmQ7XFxuIDg3NjpcXHRcXG4gODc3OlxcdFxcdFxcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0RFQUQpIHtcXG4gODc4OlxcdFxcdFxcdFxcdHVwcGVyX2JvdW5kID0gLTE7XFxuIDg3OTpcXHRcXHRcXHR9IGVsc2UgaWYgKGlwX2lnbm9yZV9saW5rZG93bihuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiA4ODA6XFx0XFx0XFx0XFx0ICAgbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XFxuIDg4MTpcXHRcXHRcXHRcXHR1cHBlcl9ib3VuZCA9IC0xO1xcbiA4ODI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gODgzOlxcdFxcdFxcdFxcdHcgKz0gbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX3dlaWdodDtcXG4gODg0OlxcdFxcdFxcdFxcdHVwcGVyX2JvdW5kID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKCh1NjQpdyBcXHUwMDNjXFx1MDAzYyAzMSxcXG4gODg1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB0b3RhbCkgLSAxO1xcbiA4ODY6XFx0XFx0XFx0fVxcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfdXBwZXJfYm91bmQsIHVwcGVyX2JvdW5kKTtcXG4gODg5OlxcdFxcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcXG4gODkwOlxcdH1cXG4gODkxOlxcdCNlbHNlIC8qIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggKi9cXG4gODkyOlxcdFxcbiA4OTM6XFx0c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxcbiA4OTQ6XFx0XFx0XFx0ICAgICAgIGludCByZW1haW5pbmcsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxuIDg5NTpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA4OTY6XFx0e1xcbiA4OTc6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTXVsdGlwYXRoIHN1cHBvcnQgbm90IGVuYWJsZWQgaW4ga2VybmVsXFxcIik7XFxuIDg5ODpcXHRcXG4gODk5OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjozMS40MjA4ODMxNTZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0OTYxMzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIFJvdXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBuYXN0eSBkaXZpZGUtYnktemVybyB2dWxuZXJhYmlsaXR5LiBTcGVjaWZpY2FsbHksIGl0J3MgaW4gYGZpYl9yZWJhbGFuY2VgLCBhbmQgaXQncyB0cmlnZ2VyZWQgd2hlbiBhIG11bHRpcGF0aCByb3V0ZSBoYXMgKmFsbCogaXRzIG5leHRob3BzIGluIGEgZGVhZCBvciBsaW5rZG93biBzdGF0ZS4gVGhhdCB3b3VsZCBsZWFkIHRvIGEgYHRvdGFsYCB3ZWlnaHQgb2YgemVybywgYW5kIHRoZW4gd2UncmUgZGl2aWRpbmcgYnkgemVybyDigJMgY2xhc3NpYyBidWcgbWF0ZXJpYWwuIFRoZSBmaXggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hlY2sgYCF0b3RhbGAgYW5kIHNldCBgdXBwZXJfYm91bmQgPSAtMWAgYWNjb3JkaW5nbHkuIFNpbXBsZSwgYnV0IGNyaXRpY2FsIGZvciBzdGFiaWxpdHkuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNsZWFyIGJ1ZyBmaXggaW4gdGhlIElQdjQgcm91dGluZyBjb3JlLCBub3RoaW5nIGVsc2UuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcG9pbnRzIG9mIGVudHJ5LCBhbmQgSSBzZWUgdGhleSBhcmUgYWxsIG92ZXIgdGhlIHBsYWNlLiBJIGNhbiBzZWUgdGhlIHJlYWNoYWJsZSBwYXRocyB0aHJvdWdoIGBmaWJfY3JlYXRlX2luZm9gLCBgZmliX3N5bmNfZG93bl9kZXZgLCBhbmQgYGZpYl9zeW5jX3VwYCBhbmQgYGZpYl90YWJsZV9pbnNlcnRgLiBUaGVzZSBhcmUgYWxsIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBhZGRpbmcgcm91dGVzIHRocm91Z2ggbmV0bGluayBvciBoYW5kbGluZyBuZXR3b3JrIGRldmljZSAobmV0ZGV2KSBldmVudHMuIFRoYXQgbmV0bGluayBwYXRoIGlzIGEgY2xlYXIgYXR0YWNrIHZlY3RvciBoZXJlLlxuXG5CYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4sIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGlzIHJ1bm5pbmcgd2l0aCBgSVBfQURWQU5DRURfUk9VVEVSYCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAgZW5hYmxlZCwgc2luY2UgaXQncyByZXF1aXJlZCBmb3IgdGhpcyBtdWx0aXBhdGggcm91dGluZyB0byBldmVuIGJlIHBvc3NpYmxlLiBUaGlzIHBhdGNoIHNlZW1zIGxvdyBoYW5naW5nIGZydWl0IGZvciBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMSwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjozOS43NzA0OTk5NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDAyODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaWJfY3JlYXRlX2luZm9cIixcbiAgICBcImZpYl90YWJsZV9pbnNlcnRcIixcbiAgICBcImZpYl9zeW5jX2Rvd25fZGV2XCIsXG4gICAgXCJmaWJfc3luY191cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGBmaWJfcmViYWxhbmNlYCB3aGVuIGFsbCBuZXh0aG9wcyBpbiBhIG11bHRpcGF0aCByb3V0ZSBhcmUgZWl0aGVyIGRlYWQgb3IgbGlua2Rvd24sIHJlc3VsdGluZyBpbiBhIHRvdGFsIHdlaWdodCBvZiB6ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjQgcm91dGluZyBjb3JlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgcm91dGUgYWRkaXRpb25zIChgZmliX3RhYmxlX2luc2VydGAsIGBmaWJfY3JlYXRlX2luZm9gKSBhbmQgbmV0ZGV2IHN0YXRlIGNoYW5nZXMgKGBmaWJfc3luY19kb3duX2RldmAsIGBmaWJfc3luY191cGApLiBJdCByZXF1aXJlcyBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgdG8gYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiZmliX3RhYmxlX2luc2VydFwiLFxuICAgIFwiZmliX3N5bmNfZG93bl9kZXZcIixcbiAgICBcImZpYl9zeW5jX3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gYWxsIG5leHRob3BzIGluIGEgbXVsdGlwYXRoIHJvdXRlIGFyZSBlaXRoZXIgZGVhZCBvciBsaW5rZG93biwgcmVzdWx0aW5nIGluIGEgdG90YWwgd2VpZ2h0IG9mIHplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NCByb3V0aW5nIGNvcmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayByb3V0ZSBhZGRpdGlvbnMgKGBmaWJfdGFibGVfaW5zZXJ0YCwgYGZpYl9jcmVhdGVfaW5mb2ApIGFuZCBuZXRkZXYgc3RhdGUgY2hhbmdlcyAoYGZpYl9zeW5jX2Rvd25fZGV2YCwgYGZpYl9zeW5jX3VwYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjozOS45MTA1MzczNVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MzE4OTg1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjozOS45MTMzNTg3MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNTcyOTA3MzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGB1cHBlcl9ib3VuZGAgZm9yIG11bHRpcGF0aCByb3V0ZXMuIElmIHRoZSBgdG90YWxgIHdlaWdodCBvZiBhbGwgdmFsaWQgbmV4dGhvcHMgaXMgMCwgdGhlIHByZXZpb3VzIGNvZGUgd291bGQgYXR0ZW1wdCB0byBkaXZpZGUgYnkgYHRvdGFsYCwgY2F1c2luZyBhIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbi4gVGhlIHBhdGNoIHByZXZlbnRzIHRoaXMgYnkgZXhwbGljaXRseSBjaGVja2luZyBpZiBgdG90YWxgIGlzIDAgYW5kIHNldHRpbmcgYHVwcGVyX2JvdW5kID0gLTFgIGluIHRoYXQgY2FzZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGFyaXRobWV0aWMgYnVnIChkaXZpZGUtYnktemVybykgdGhhdCBjYW4gYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIGZ1enppbmcgKG9yIFVCU0FOKS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgYW55IGlzc3VlcyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzc1NmEwNDFlNzY3ZTkyYTA1ZTgwOWVlNzExZjRmYjc1MmM3ODI1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDE4OjQ5OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5pbmRleCAwNDgzNTE5YjdmYjBkLi43YTM2MmYyZTJjMmJkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG4rKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbkBAIC04NzQsNyArODc0LDcgQEAgc3RhdGljIHZvaWQgZmliX3JlYmFsYW5jZShzdHJ1Y3QgZmliX2luZm8gKmZpKVxuIFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4gXHRcdGludCB1cHBlcl9ib3VuZDtcbiBcbi1cdFx0aWYgKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfREVBRCkge1xuK1x0XHRpZiAoIXRvdGFsIHx8IG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfREVBRCkge1xuIFx0XHRcdHVwcGVyX2JvdW5kID0gLTE7XG4gXHRcdH0gZWxzZSBpZiAoaXBfaWdub3JlX2xpbmtkb3duKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2RldikgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9MSU5LRE9XTikge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6MzkuOTEzMzYwMTk5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MzkxMTkwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBSb3V0aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGZpYl9yZWJhbGFuY2VgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MgbW9kaWZ5aW5nIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjaGVjayBmb3IgYCF0b3RhbGAgYmVmb3JlIGV4YW1pbmluZyB0aGUgYFJUTkhfRl9ERUFEYCBmbGFnIG9uIHRoZSBuZXh0IGhvcC4gTXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBvciwgcG9zc2libHksIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIHNjZW5hcmlvIHdoZXJlIGB0b3RhbGAgaXMgemVyby4gQSB6ZXJvIHZhbHVlIGluIGB0b3RhbGAsIGRlcGVuZGluZyBvbiB3aGVyZSBpdCdzIHVzZWQsIGNvdWxkIGxlYWQgdG8gc29tZSBuYXN0eSBwcm9ibGVtcy5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmaWJfcmViYWxhbmNlYCB0byBjb25maXJtIHRoaXMgaHVuY2ggYW5kIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQuIEkgbmVlZCB0byBzZWUgd2hhdCBgdG90YWxgIHJlcHJlc2VudHMsIGhvdyBpdCdzIGNhbGN1bGF0ZWQsIGFuZCBob3cgaXQncyB1c2VkIHdpdGggYG5leHRob3BfbmhgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgZml4LiBLbm93aW5nIHRoZSBvcmlnaW5hbCBsb2dpYyBmbG93IG9mIGBmaWJfcmViYWxhbmNlYCBpcyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgY2FsY3VsYXRpb25zIG9yIGFycmF5IGFjY2Vzc2VzIHRoYXQgdXNlIGB0b3RhbGAgYXMgYSBkaXZpc29yIG9yIGluZGV4LiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gZGVjaWRlIGlmIHRoZSBmaXggaXMgY29ycmVjdCwgYW5kIGlmIGFueSBvdGhlciBjb25zaWRlcmF0aW9ucyBhcmUgbmVlZGVkIHRvIG1ha2UgdGhlIGNoYW5nZSBtb3JlIHJvYnVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUyOjQ3Ljc1MjQ4MjQ2MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzYzNzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9yZWJhbGFuY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz03NDI9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTg1Mi0vKiBvbmx5IGNhbGxlZCB3aGVuIGZpYl9uaCBpcyBpbnRlZ3JhdGVkIGludG8gZmliX2luZm8gKi9cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6ODUzOnN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtODU0LXtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz04OTM9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkwMS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTAyOiNkZWZpbmUgZmliX3JlYmFsYW5jZShmaSkgZG8geyB9IHdoaWxlICgwKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MDMtXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MTM3Nj1zdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE1NTQtXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjE1NTU6XFx0XFx0ZmliX3JlYmFsYW5jZShmaSk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE1NTYtXFx0fVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTE5NDM9aW50IGZpYl9zeW5jX2Rvd25fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGJvb2wgZm9yY2UpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjAwMi1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjAwMzpcXHRcXHRmaWJfcmViYWxhbmNlKGZpKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjAwNC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjA5Mj1pbnQgZmliX3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTQ0LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMTQ1OlxcdFxcdGZpYl9yZWJhbGFuY2UoZmkpO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTQ2LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6NDcuODYxMjUwOTIzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTA0Mjk0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBmaWJfcmViYWxhbmNlYCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmaWJfcmViYWxhbmNlYCB3aXRoaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIEZJQiAoRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlKSwgZW5zdXJpbmcgdGhhdCByb3V0aW5nIHRhYmxlcyBhcmUgYmFsYW5jZWQgYW5kIGVmZmljaWVudC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2Ygd2h5IGFuZCB3aGVuIHRoaXMgaXMgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYGZpYl90YWJsZWAsIGBmaWJfaW5mb2AsIGFuZCB0aGUgb3ZlcmFsbCByb3V0ZSBsb29rdXAgcHJvY2Vzcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQuIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgdG9wb2xvZ3ksIGhvdyBpdCByZWFjdHMgdG8gcm91dGUgYWRkaXRpb25zLCBkZWxldGlvbnMsIGFuZCBtb2RpZmljYXRpb25zLCBhbmQgaG93IGl0IGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZXNlIG9wZXJhdGlvbnMuIEFyZSB0aGV5IHVzaW5nIFJDVSBoZXJlLCBvciBzb21lIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2w/IEkgd2FudCB0byBzZWUgaWYgdGhleSdyZSByZWx5aW5nIG9uIHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGdsb2JhbCBsb2NrcywgYW5kIHdoYXQgdHJhZGUtb2ZmcyB0aGV5J3ZlIG1hZGUgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIHNjYWxhYmlsaXR5LiBJJ2xsIGFsc28gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggZnJhZ21lbnRhdGlvbiBhbmQgcGF0aCBNVFUgZGlzY292ZXJ5IGlmIGFwcGxpY2FibGUuIEluIGdlbmVyYWwsIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGtleSBwbGF5ZXIgaW4gdGhlIHJlbGlhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBJUHY0IHJvdXRpbmcgaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGltcGxlbWVudGVkIHRoZSByZWJhbGFuY2luZyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUyOjUzLjkxMTY4NDA0N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHR9XFxuIDg1MTpcXHRcXG4gODUyOlxcdC8qIG9ubHkgY2FsbGVkIHdoZW4gZmliX25oIGlzIGludGVncmF0ZWQgaW50byBmaWJfaW5mbyAqL1xcbiA4NTM6XFx0c3RhdGljIHZvaWQgZmliX3JlYmFsYW5jZShzdHJ1Y3QgZmliX2luZm8gKmZpKVxcbiA4NTQ6XFx0e1xcbiA4NTU6XFx0XFx0aW50IHRvdGFsO1xcbiA4NTY6XFx0XFx0aW50IHc7XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdGlmIChmaWJfaW5mb19udW1fcGF0aChmaSkgXFx1MDAzYyAyKVxcbiA4NTk6XFx0XFx0XFx0cmV0dXJuO1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRcXHR0b3RhbCA9IDA7XFxuIDg2MjpcXHRcXHRmb3JfbmV4dGhvcHMoZmkpIHtcXG4gODYzOlxcdFxcdFxcdGlmIChuaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0RFQUQpXFxuIDg2NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0XFx0aWYgKGlwX2lnbm9yZV9saW5rZG93bihuaC1cXHUwMDNlZmliX25oX2RldikgXFx1MDAyNlxcdTAwMjZcXG4gODY3OlxcdFxcdFxcdCAgICBuaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0xJTktET1dOKVxcbiA4Njg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdFxcdHRvdGFsICs9IG5oLVxcdTAwM2VmaWJfbmhfd2VpZ2h0O1xcbiA4NzE6XFx0XFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHR3ID0gMDtcXG4gODc0OlxcdFxcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xcbiA4NzU6XFx0XFx0XFx0aW50IHVwcGVyX2JvdW5kO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRcXHRpZiAoIXRvdGFsIHx8IG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9ERUFEKSB7XFxuIDg3ODpcXHRcXHRcXHRcXHR1cHBlcl9ib3VuZCA9IC0xO1xcbiA4Nzk6XFx0XFx0XFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldikgXFx1MDAyNlxcdTAwMjZcXG4gODgwOlxcdFxcdFxcdFxcdCAgIG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9MSU5LRE9XTikge1xcbiA4ODE6XFx0XFx0XFx0XFx0dXBwZXJfYm91bmQgPSAtMTtcXG4gODgyOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg4MzpcXHRcXHRcXHRcXHR3ICs9IG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF93ZWlnaHQ7XFxuIDg4NDpcXHRcXHRcXHRcXHR1cHBlcl9ib3VuZCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KXcgXFx1MDAzY1xcdTAwM2MgMzEsXFxuIDg4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgdG90YWwpIC0gMTtcXG4gODg2OlxcdFxcdFxcdH1cXG4gODg3OlxcdFxcbiA4ODg6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2bmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kLCB1cHBlcl9ib3VuZCk7XFxuIDg4OTpcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XFxuIDg5MDpcXHR9XFxuIDg5MTpcXHQjZWxzZSAvKiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIICovXFxuIDg5MjpcXHRcXG4gODkzOlxcdHN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcXG4gODk0OlxcdFxcdFxcdCAgICAgICBpbnQgcmVtYWluaW5nLCBzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbiA4OTU6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gODk2OlxcdHtcXG4gODk3OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk11bHRpcGF0aCBzdXBwb3J0IG5vdCBlbmFibGVkIGluIGtlcm5lbFxcXCIpO1xcbiA4OTg6XFx0XFxuIDg5OTpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6NTMuOTExOTMyNDQ3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzMwNDc4OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgZGl2aWRlLWJ5LXplcm8gdnVsbmVyYWJpbGl0eS4gVGhlIGNvcmUgaXNzdWUgaXMgd2l0aGluIHRoZSBgZmliX3JlYmFsYW5jZWAgZnVuY3Rpb24gd2hlcmUgYHVwcGVyX2JvdW5kYCBpcyBiZWluZyBjYWxjdWxhdGVkLiBQcmV2aW91c2x5LCBpZiB0aGUgdG90YWwgd2VpZ2h0IChgdG90YWxgKSBvZiB2YWxpZCBuZXh0IGhvcHMgd2FzIHplcm8sIHRoZSBjb2RlIHdvdWxkIGF0dGVtcHQgYSBkaXZpc2lvbiBieSB6ZXJvIGluIHRoZSBgRElWX1JPVU5EX0NMT1NFU1RfVUxMYCBtYWNyby4gT2J2aW91c2x5LCB0aGF0IGNhdXNlcyBhIGNyYXNoLiBUaGUgZml4IGlzIGVsZWdhbnQ6IGl0IHNpbXBseSBhZGRzIGEgY2hlY2sgZm9yIGAhdG90YWxgIGJlZm9yZSB0aGUgZGl2aXNpb24uIElmIGB0b3RhbGAgaXMgemVybywgd2Ugc2tpcCB0aGUgZGl2aXNpb24gYW5kIHNldCBgdXBwZXJfYm91bmRgIHRvIC0xLiBUaGF0IGF2b2lkcyB0aGUgY3Jhc2guXG5cblRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyLiBUaGUgdnVsbmVyYWJpbGl0eSBpcyBhIHN0YW5kYXJkIGFyaXRobWV0aWMgZXJyb3IuIEl0J3Mgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIHdoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIHdoZXJlIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLCBmdXp6aW5nLCBVQlNBTiwgb3IgS0FTQU4gd291bGQgZWFzaWx5IGlkZW50aWZ5IHRoZSBwcm9ibGVtLiBLTVNBTiBpc24ndCByZWxldmFudCBoZXJlOyBpdCdzIG92ZXJraWxsLiBJdCdzIGEgY2xlYW4sIGVmZmljaWVudCBmaXggdG8gYSBwcmV2ZW50YWJsZSBjcmFzaC4gV2UncmUgbG9va2luZyBhdCBhIHN0YW5kYXJkLCBydW4tb2YtdGhlLW1pbGwgYXJpdGhtZXRpYyBidWcuIE5vIG5lZWQgZm9yIHRoZSBoZWF2eSBhcnRpbGxlcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTcsIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTM6MDUuNjQyNDE0MTg2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBjYWxjdWxhdGluZyB0aGUgYHVwcGVyX2JvdW5kYCBmb3IgbXVsdGlwYXRoIHJvdXRlcy4gSWYgdGhlIGB0b3RhbGAgd2VpZ2h0IG9mIGFsbCB2YWxpZCBuZXh0aG9wcyBpcyAwLCB0aGUgcHJldmlvdXMgY29kZSB3b3VsZCBhdHRlbXB0IHRvIGRpdmlkZSBieSBgdG90YWxgLCBjYXVzaW5nIGEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGB0b3RhbGAgaXMgMCBhbmQgc2V0dGluZyBgdXBwZXJfYm91bmQgPSAtMWAgaW4gdGhhdCBjYXNlLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXJpdGhtZXRpYyBidWcgKGRpdmlkZS1ieS16ZXJvKSB0aGF0IGNhbiBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgb3IgZnV6emluZyAob3IgVUJTQU4pLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBhbnkgaXNzdWVzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBjYWxjdWxhdGluZyB0aGUgYHVwcGVyX2JvdW5kYCBmb3IgbXVsdGlwYXRoIHJvdXRlcy4gSWYgdGhlIGB0b3RhbGAgd2VpZ2h0IG9mIGFsbCB2YWxpZCBuZXh0aG9wcyBpcyAwLCB0aGUgcHJldmlvdXMgY29kZSB3b3VsZCBhdHRlbXB0IHRvIGRpdmlkZSBieSBgdG90YWxgLCBjYXVzaW5nIGEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGB0b3RhbGAgaXMgMCBhbmQgc2V0dGluZyBgdXBwZXJfYm91bmQgPSAtMWAgaW4gdGhhdCBjYXNlLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXJpdGhtZXRpYyBidWcgKGRpdmlkZS1ieS16ZXJvKSB0aGF0IGNhbiBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgb3IgZnV6emluZyAob3IgVUJTQU4pLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBhbnkgaXNzdWVzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpslcb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 18:31:56 +0000 UTC FinishedAt: 2026-08-27 18:53:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "81eb1867e059bf1dbbfbba536385a5cb26f700cd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_ADVANCED_ROUTER", "IP_ROUTE_MULTIPATH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "81eb1867e059bf1dbbfbba536385a5cb26f700cd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_ADVANCED_ROUTER", "IP_ROUTE_MULTIPATH" ], "series_id": "486f7e96-1932-4073-a200-cc7cc3c3dfc2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "fib_create_info", "fib_table_insert", "fib_sync_down_dev", "fib_sync_up" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7ZmliX3RhYmxlX2luc2VydCYjMzQ7LAogICAgJiMzNDtmaWJfc3luY19kb3duX2RldiYjMzQ7LAogICAgJiMzNDtmaWJfc3luY191cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGBmaWJfcmViYWxhbmNlYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBgdXBwZXJfYm91bmRgIGZvciBtdWx0aXBhdGggcm91dGVzLiBJZiB0aGUgYHRvdGFsYCB3ZWlnaHQgb2YgYWxsIHZhbGlkIG5leHRob3BzIGlzIDAsIHRoZSBwcmV2aW91cyBjb2RlIHdvdWxkIGF0dGVtcHQgdG8gZGl2aWRlIGJ5IGB0b3RhbGAsIGNhdXNpbmcgYSBkaXZpZGUtYnktemVybyBleGNlcHRpb24uIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzIGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgaWYgYHRvdGFsYCBpcyAwIGFuZCBzZXR0aW5nIGB1cHBlcl9ib3VuZCA9IC0xYCBpbiB0aGF0IGNhc2UuIFRoaXMgaXMgYSBzdGFuZGFyZCBhcml0aG1ldGljIGJ1ZyAoZGl2aWRlLWJ5LXplcm8pIHRoYXQgY2FuIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBmdXp6aW5nIChvciBVQlNBTikuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGFueSBpc3N1ZXMgdGhhdCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NzU2YTA0MWU3NjdlOTJhMDVlODA5ZWU3MTFmNGZiNzUyYzc4MjU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTg6NDk6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5pbmRleCAwNDgzNTE5YjdmYjBkLi43YTM2MmYyZTJjMmJkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbkBAIC04NzQsNyAmIzQzOzg3NCw3IEBAIHN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcbiBcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuIFx0XHRpbnQgdXBwZXJfYm91bmQ7XG4gXG4tXHRcdGlmIChuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpIHtcbiYjNDM7XHRcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4gXHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiBcdFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7ZmliX3RhYmxlX2luc2VydCYjMzQ7LAogICAgJiMzNDtmaWJfc3luY19kb3duX2RldiYjMzQ7LAogICAgJiMzNDtmaWJfc3luY191cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NzU2YTA0MWU3NjdlOTJhMDVlODA5ZWU3MTFmNGZiNzUyYzc4MjU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTg6NDk6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggMDQ4MzUxOWI3ZmIwZC4uN2EzNjJmMmUyYzJiZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtODc0LDcgJiM0Mzs4NzQsNyBAQCBzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpCiAJY2hhbmdlX25leHRob3BzKGZpKSB7CiAJCWludCB1cHBlcl9ib3VuZDsKIAotCQlpZiAobmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2ZsYWdzICZhbXA7IFJUTkhfRl9ERUFEKSB7CiYjNDM7CQlpZiAoIXRvdGFsIHx8IG5leHRob3BfbmgtJmd0O2ZpYl9uaF9mbGFncyAmYW1wOyBSVE5IX0ZfREVBRCkgewogCQkJdXBwZXJfYm91bmQgPSAtMTsKIAkJfSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2RldikgJmFtcDsmYW1wOwogCQkJICAgbmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2ZsYWdzICZhbXA7IFJUTkhfRl9MSU5LRE9XTikgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJvdXRpbmcgVGFibGUgUmViYWxhbmNpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBsYW5kZWQgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBgZmliX3JlYmFsYW5jZWAgZnVuY3Rpb24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIGl0JiMzOTtzIG1vZGlmeWluZyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgb3JpZ2luYWwgY2hlY2sgd2FzIGBpZiAobmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2ZsYWdzICZhbXA7IFJUTkhfRl9ERUFEKWAuIE5vdywgdGhlIGNvZGUgY2hlY2tzIGBpZiAoIXRvdGFsIHx8IG5leHRob3BfbmgtJmd0O2ZpYl9uaF9mbGFncyAmYW1wOyBSVE5IX0ZfREVBRClgLiBJIGltbWVkaWF0ZWx5IGhhdmUgcXVlc3Rpb25zLiBXaHkgdGhlIGFkZGl0aW9uIG9mIGAhdG90YWxgPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IGBmaWJfcmViYWxhbmNlYCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyB0aGUgcm91dGluZyB0YWJsZSYjMzk7cyBpbnRlZ3JpdHksIGVuc3VyaW5nIHRoZSBiZXN0IHBhdGhzIGFyZSBjaG9zZW4sIGFuZCBoYW5kbGluZyByb3V0ZSBjaGFuZ2VzIGVmZmljaWVudGx5LgoKTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoZSBgdG90YWxgIHZhcmlhYmxlIGxpa2VseSBwbGF5cyBhIHJvbGUgaW4gdGhlIGxvZ2ljIG9mIGhvdyBtYW55IG5leHQtaG9wcyB3ZSBoYXZlIHRvIHdvcmsgd2l0aC4gQWRkaW5nIHRoYXQgYCF0b3RhbGAgY2hlY2sgc3VnZ2VzdHMgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGEgc2NlbmFyaW8gd2hlcmUgdGhlcmUgYXJlIG5vIHZhbGlkIG5leHQtaG9wcywgYW5kIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgJiMzNDtlbXB0eSYjMzQ7IG9yICYjMzQ7bm8gdmFsaWQgcm91dGVzJiMzNDsgY2FzZS4gVGhpcyBjaGFuZ2UgY291bGQgYmUgaW50cm9kdWNlZCB0byBwcmV2ZW50IGEgc3BlY2lmaWMgY29uZGl0aW9uLCBsaWtlbHkgYSBkb3VibGUtZnJlZSwgYSBkaXZpZGUtYnktemVybywgb3Igc29tZSBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3IuIEl0IGNvdWxkIGFsc28gYmUgaW50ZW5kZWQgdG8gbWFrZSBzdXJlIGEgdmFsaWQgcm91dGUgZXhpc3RzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhpcyBjaGFuZ2UgdG8gdHJ1bHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBhbmQgdGhlIHNwZWNpZmljIHByb2JsZW0gdGhpcyBwYXRjaCBpcyBtZWFudCB0byBhZGRyZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBtZWFuaW5nIG9mIGB0b3RhbGAgaXMgb2J2aW91c2x5IGtleSBoZXJlLCBhbG9uZyB3aXRoIHRoZSBsYXJnZXIgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3JlYmFsYW5jZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NzQyPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtODUyLS8qIG9ubHkgY2FsbGVkIHdoZW4gZmliX25oIGlzIGludGVncmF0ZWQgaW50byBmaWJfaW5mbyAqL1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjg1MzpzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtODU0LXtcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9ODkzPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTAxLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjkwMjojZGVmaW5lIGZpYl9yZWJhbGFuY2UoZmkpIGRvIHsgfSB3aGlsZSAoMClcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MDMtXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzNzY9c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTU1NC1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxNTU1Olx0XHRmaWJfcmViYWxhbmNlKGZpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNTU2LVx0fVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTQzPWludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMDAyLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIwMDM6XHRcdGZpYl9yZWJhbGFuY2UoZmkpO1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwMDQtXHR9XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIwOTI9aW50IGZpYl9zeW5jX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgbmhfZmxhZ3MpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIxNDQtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjE0NTpcdFx0ZmliX3JlYmFsYW5jZShmaSk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE0Ni1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqQW5hbHl6aW5nIGBmaWJfcmViYWxhbmNlYCBDYWxscyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGhpdHMgYGZpYl9yZWJhbGFuY2VgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBwbGFjZXM6IGBmaWJfY3JlYXRlX2luZm9gLCBgZmliX3N5bmNfZG93bl9kZXZgLCBhbmQgYGZpYl9zeW5jX3VwYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgaXQsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGlzIGNoYW5nZSB3aWxsIGJlIGluIHRob3NlIGNvbnRleHRzLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZmliX3JlYmFsYW5jZWAgY29kZSBpdHNlbGYgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsIGNvbnRleHRzIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdH1cbiA4NTE6XHRcbiA4NTI6XHQvKiBvbmx5IGNhbGxlZCB3aGVuIGZpYl9uaCBpcyBpbnRlZ3JhdGVkIGludG8gZmliX2luZm8gKi9cbiA4NTM6XHRzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXG4gODU0Olx0e1xuIDg1NTpcdFx0aW50IHRvdGFsO1xuIDg1NjpcdFx0aW50IHc7XG4gODU3Olx0XG4gODU4Olx0XHRpZiAoZmliX2luZm9fbnVtX3BhdGgoZmkpIFx1MDAzYyAyKVxuIDg1OTpcdFx0XHRyZXR1cm47XG4gODYwOlx0XG4gODYxOlx0XHR0b3RhbCA9IDA7XG4gODYyOlx0XHRmb3JfbmV4dGhvcHMoZmkpIHtcbiA4NjM6XHRcdFx0aWYgKG5oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpXG4gODY0Olx0XHRcdFx0Y29udGludWU7XG4gODY1Olx0XG4gODY2Olx0XHRcdGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmgtXHUwMDNlZmliX25oX2RldikgXHUwMDI2XHUwMDI2XG4gODY3Olx0XHRcdCAgICBuaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9MSU5LRE9XTilcbiA4Njg6XHRcdFx0XHRjb250aW51ZTtcbiA4Njk6XHRcbiA4NzA6XHRcdFx0dG90YWwgJiM0Mzs9IG5oLVx1MDAzZWZpYl9uaF93ZWlnaHQ7XG4gODcxOlx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XG4gODcyOlx0XG4gODczOlx0XHR3ID0gMDtcbiA4NzQ6XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuIDg3NTpcdFx0XHRpbnQgdXBwZXJfYm91bmQ7XG4gODc2Olx0XG4gODc3Olx0XHRcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4gODc4Olx0XHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiA4Nzk6XHRcdFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiA4ODA6XHRcdFx0XHQgICBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XG4gODgxOlx0XHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiA4ODI6XHRcdFx0fSBlbHNlIHtcbiA4ODM6XHRcdFx0XHR3ICYjNDM7PSBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF93ZWlnaHQ7XG4gODg0Olx0XHRcdFx0dXBwZXJfYm91bmQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCl3IFx1MDAzY1x1MDAzYyAzMSxcbiA4ODU6XHRcdFx0XHRcdFx0XHRcdCAgICB0b3RhbCkgLSAxO1xuIDg4NjpcdFx0XHR9XG4gODg3Olx0XG4gODg4Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2bmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfdXBwZXJfYm91bmQsIHVwcGVyX2JvdW5kKTtcbiA4ODk6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbiA4OTA6XHR9XG4gODkxOlx0I2Vsc2UgLyogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCAqL1xuIDg5MjpcdFxuIDg5MzpcdHN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcbiA4OTQ6XHRcdFx0ICAgICAgIGludCByZW1haW5pbmcsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXG4gODk1Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gODk2Olx0e1xuIDg5NzpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNdWx0aXBhdGggc3VwcG9ydCBub3QgZW5hYmxlZCBpbiBrZXJuZWxcJiMzNDspO1xuIDg5ODpcdFxuIDg5OTpcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpLVBhdGggUm91dGluZyBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcm91dGluZyBpc3N1ZSwgYW5kIHRoZSBjb2RlIHBvaW50cyBtZSB0byBgZmliX3JlYmFsYW5jZWAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gbXVsdGktcGF0aCByb3V0aW5nLCB3aGljaCBpcyBzb21ldGhpbmcgSSYjMzk7bSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGggaW4gdGhpcyBjb250ZXh0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgY29ycmVjdCwgY29uc2lkZXJpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBBaCwgaGVyZSB3ZSBnbywgaXQmIzM5O3MgbmVzdGxlZCB1bmRlciBgI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBzZWN0aW9uIGlzIGFjdGl2ZS4gSSBzZWUgdGhlIGAjZWxzZWAgYmxvY2sgYXQgbGluZSA4OTEuIFRoYXQgbWVhbnMgYGZpYl9yZWJhbGFuY2VgICppcyogZGVmaW5lZCB3aGVuIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBpcyBlbmFibGVkLCBhcyBJIHN1c3BlY3RlZC4gTm93IEkgd2FudCB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYG5ldC9pcHY0YCB0byBjb25maXJtIGV4YWN0bHkgaG93IHRoYXQgZmVhdHVyZSBpcyBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NjM9Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWctNzktXG5uZXQvaXB2NC9LY29uZmlnOjgwOmNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcbm5ldC9pcHY0L0tjb25maWctODEtXHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTYKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTXVsdGlwYXRoIFJvdXRpbmcgQnVnZml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYElQX1JPVVRFX01VTFRJUEFUSGAuIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBpc3N1ZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIGB0b3RhbGAgaXMgemVyby4gVGhpcyBoYXBwZW5zIHdoZW4gYWxsIHRoZSBuZXh0IGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGhhdmUgYSBsaW5rIGRvd24gc3RhdHVzLiBJbiB0aGF0IHNjZW5hcmlvLCB0aGUgY2FsY3VsYXRpb24gYHVwcGVyX2JvdW5kID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKCh1NjQpdyAmbHQ7Jmx0OyAzMSwgdG90YWwpIC0gMTtgIHdpbGwgaW5ldml0YWJseSByZXN1bHQgaW4gYSBkaXZpc2lvbiBieSB6ZXJvIGVycm9yLgoKVGhlIGZpeCBpcyBzaW1wbGU6IGFkZCBhIGAhdG90YWwgfHxgIGNvbmRpdGlvbiB0byBwcmV2ZW50IHRoZSBwcm9ibGVtYXRpYyBjYWxjdWxhdGlvbiB3aGVuIGB0b3RhbGAgaXMgemVyby4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2xlYXIgYnVnZml4LCBhbmQgbm90aGluZyB0byBjb21wbGljYXRlIHRoZSBjb2RlLiBEZWZpbml0ZWx5IHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBydW4uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHdoZXJlIHRoZSBwcm9ibGVtIGNhbiBvY2N1ci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBhdHRhY2sgc3VyZmFjZS4gYGZpYl9yZWJhbGFuY2VgIGlzIHN0YXRpYzsgb2theS4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGZpYl9jcmVhdGVfaW5mb2AsIGBmaWJfc3luY19kb3duX2RldmAsIGFuZCBgZmliX3N5bmNfdXBgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRob3NlIGFyZSBzdGF0aWMsIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX2NyZWF0ZV9pbmZvfGZpYl9zeW5jX2Rvd25fZGV2fGZpYl9zeW5jX3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM3NS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTM3Ny1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTE5MjQ9dm9pZCBmaWJfc3luY19tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIG9yaWdfbXR1KVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQyLSAqL1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjE5NDM6aW50IGZpYl9zeW5jX2Rvd25fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGJvb2wgZm9yY2UpXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTk0NC17XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIwMTA9c3RhdGljIHZvaWQgZmliX3NlbGVjdF9kZWZhdWx0KGNvbnN0IHN0cnVjdCBmbG93aTQgKmZscCwgc3RydWN0IGZpYl9yZXN1bHQgKnJlcylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5MS0gKi9cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMDkyOmludCBmaWJfc3luY191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIG5oX2ZsYWdzKVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwOTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzYzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgQ2FuZGlkYXRlcyBmb3IgRXhhbWluYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgY29uY2VwdCBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBjbGVhcmx5ICpkeW5hbWljKi4gVGhpbmdzIGFyZW4mIzM5O3QgZml4ZWQ7IHRoZXkmIzM5O3JlIGluIGZsdXguIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG93YXJkcyBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMgYXMgcHJpbWUgYXJlYXMgb2YgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgZmliX2NyZWF0ZV9pbmZvYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAuIFRoZXNlIHNlZW0gbGlrZSBsaWtlbHkgc3BvdHMgdG8gZmluZCB0aGUga2luZCBvZiBkeW5hbWlzbSBJJiMzOTttIGxvb2tpbmcgZm9yLgoKTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgaW50ZXJuYWwgdG8gYSBtb2R1bGUsIG9yIGFyZSB0aGV5IGV4cG9ydGVkIGFuZCBwb3RlbnRpYWxseSB1c2VkIGV4dGVybmFsbHk/IFRoYXQgd2lsbCBkaXJlY3RseSBpbXBhY3QgaG93IEkgYXBwcm9hY2ggbXkgYW5hbHlzaXMuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBsaW5rYWdlcyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb25zIGZyb20gb3V0c2lkZS4gSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyAqdXNlZCouIExldCYjMzk7cyBnZXQgY3JhY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9jcmVhdGVfaW5mb3xmaWJfc3luY19kb3duX2RldnxmaWJfc3luY191cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNDY1PXN0YXRpYyB2b2lkIGZpYl9kaXNhYmxlX2lwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ2Ny17XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNDY4Olx0aWYgKGZpYl9zeW5jX2Rvd25fZGV2KGRldiwgZXZlbnQsIGZvcmNlKSlcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE0NjktXHRcdGZpYl9mbHVzaChkZXZfbmV0KGRldikpO1xuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE0NzU9c3RhdGljIGludCBmaWJfaW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ4NC0jaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTQ4NTpcdFx0ZmliX3N5bmNfdXAoZGV2LCBSVE5IX0ZfREVBRCk7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDg2LSNlbmRpZlxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE1MDY9c3RhdGljIGludCBmaWJfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MzEtI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MzI6XHRcdGZpYl9zeW5jX3VwKGRldiwgUlROSF9GX0RFQUQpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUzMy0jZW5kaWZcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTQyLVx0XHRpZiAoZmxhZ3MgXHUwMDI2IChJRkZfUlVOTklORyB8IElGRl9MT1dFUl9VUCkpXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNTQzOlx0XHRcdGZpYl9zeW5jX3VwKGRldiwgUlROSF9GX0xJTktET1dOKTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDQtXHRcdGVsc2Vcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NDU6XHRcdFx0ZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZmFsc2UpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTU0Ni1cdFx0cnRfY2FjaGVfZmx1c2gobmV0KTtcbi0tXG5uZXQvaXB2NC9maWJfbG9va3VwLmg9Mzg9dm9pZCBmaWJfcmVsZWFzZV9pbmZvKHN0cnVjdCBmaWJfaW5mbyAqKTtcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxubmV0L2lwdjQvZmliX2xvb2t1cC5oLTQwLVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzNTI9c3RhdGljIGJvb2wgZmliX3ZhbGlkX3ByZWZzcmMoc3RydWN0IGZpYl9jb25maWcgKmNmZywgX19iZTMyIGZpYl9wcmVmc3JjKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc1LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjEzNzY6c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc3LVx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MTkyND12b2lkIGZpYl9zeW5jX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgb3JpZ19tdHUpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE5NDItICovXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MTk0MzppbnQgZmliX3N5bmNfZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCwgYm9vbCBmb3JjZSlcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQ0LXtcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjAxMD1zdGF0aWMgdm9pZCBmaWJfc2VsZWN0X2RlZmF1bHQoY29uc3Qgc3RydWN0IGZsb3dpNCAqZmxwLCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMDkxLSAqL1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIwOTI6aW50IGZpYl9zeW5jX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgbmhfZmxhZ3MpXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5My17XG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYz0xMTk0PWludCBmaWJfdGFibGVfaW5zZXJ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl90YWJsZSAqdGIsXG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYy0xMjExLVxubmV0L2lwdjQvZmliX3RyaWUuYzoxMjEyOlx0ZmkgPSBmaWJfY3JlYXRlX2luZm8oY2ZnLCBleHRhY2spO1xubmV0L2lwdjQvZmliX3RyaWUuYy0xMjEzLVx0aWYgKElTX0VSUihmaSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc1MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRklCIEluc2VydGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBmbG93IGZvciBob3cgRklCIGVudHJpZXMgZ2V0IGNyZWF0ZWQgYW5kIHN5bmNocm9uaXplZC4gSXQgbG9va3MgbGlrZSBgZmliX2NyZWF0ZV9pbmZvYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgZmliX3RhYmxlX2luc2VydGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IGBmaWJfc3luY19kb3duX2RldmAgYW5kIGBmaWJfc3luY191cGAgYXJlIHRyaWdnZXJlZCBieSBuZXRkZXYgZXZlbnQgaGFuZGxlcnMuIEdpdmVuIHRoYXQgYGZpYl90YWJsZV9pbnNlcnRgIHNlZW1zIHRvIGJlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBhbiBlbnRyeSwgSSB0aGluayBpdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIExldCBtZSBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBmaWJfdGFibGVfaW5zZXJ0YCBhbmQgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW5pdGlhbCBpbnNlcnRpb24gbG9naWMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZXNlIG90aGVyIGtleSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl90YWJsZV9pbnNlcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9NjQ2PWludCBpcF9ydF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBydGVudHJ5ICpydClcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy02NzEtXHRcdFx0XHRpZiAodGIpXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo2NzI6XHRcdFx0XHRcdGVyciA9IGZpYl90YWJsZV9pbnNlcnQobmV0LCB0Yixcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTY3My1cdFx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZjZmcsIE5VTEwpO1xuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTkzMD1zdGF0aWMgaW50IGluZXRfcnRtX25ld3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTk0OS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjk1MDpcdGVyciA9IGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YiwgXHUwMDI2Y2ZnLCBleHRhY2spO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtOTUxLVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGNmZy5mY190eXBlID09IFJUTl9MT0NBTClcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xMTEyPXN0YXRpYyB2b2lkIGZpYl9tYWdpYyhpbnQgY21kLCBpbnQgdHlwZSwgX19iZTMyIGRzdCwgaW50IGRzdF9sZW4sXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTE0Ni1cdGlmIChjbWQgPT0gUlRNX05FV1JPVVRFKVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTE0NzpcdFx0ZmliX3RhYmxlX2luc2VydChuZXQsIHRiLCBcdTAwMjZjZmcsIE5VTEwpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTE0OC1cdGVsc2Vcbi0tXG5uZXQvaXB2NC9maWJfdHJpZS5jPTExOTA9c3RhdGljIHZvaWQgZmliX3JlbW92ZV9hbGlhcyhzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IGtleV92ZWN0b3IgKnRwLFxuLS1cbm5ldC9pcHY0L2ZpYl90cmllLmMtMTE5My0vKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwuICovXG5uZXQvaXB2NC9maWJfdHJpZS5jOjExOTQ6aW50IGZpYl90YWJsZV9pbnNlcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3RhYmxlICp0Yixcbm5ldC9pcHY0L2ZpYl90cmllLmMtMTE5NS1cdFx0ICAgICBzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjQgUm91dGluZyBUYWJsZSBVcGRhdGVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBJUHY0IHJvdXRpbmcgdGFibGUgc3R1ZmYsIGFuZCBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIGNsZWFybHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgZm9yIGhhbmRsaW5nIGBSVE1fTkVXUk9VVEVgIG5ldGxpbmsgbWVzc2FnZXMuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCwgYSBkZWZpbml0ZSBmb2N1cyBzeW1ib2wuIEkgYWxzbyBzZWUgdGhhdCBgZmliX3N5bmNfZG93bl9kZXZgIGFuZCBgZmliX3N5bmNfdXBgIHNlZW0gcmVsZXZhbnQsIGJ1dCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGZpdCBpbi4gQWgsIHllcywgYGZpYl9zeW5jX2Rvd25fZGV2YCBnZXRzIGNhbGxlZCBmcm9tIGBmaWJfZGlzYWJsZV9pcGAgYW5kIGBmaWJfbmV0ZGV2X2V2ZW50YCwgYW5kIGBmaWJfc3luY191cGAgaXMgaW52b2tlZCBieSBgZmliX2luZXRhZGRyX2V2ZW50YCBhcyB3ZWxsLiBTbywgYGZpYl9uZXRkZXZfZXZlbnRgLCBgZmliX2luZXRhZGRyX2V2ZW50YCwgYW5kIHRoYXQgYGluZXRfcnRtX25ld3JvdXRlYCDigJMgdGhvc2UgbG9vayBsaWtlIHByb21pc2luZyBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJvdXRlIGNoYW5nZXMgYXJlIGhhbmRsZWQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIG11bHRpcGF0aCByb3V0aW5nIGlzIGVuYWJsZWQsIHNvLCBsZXQmIzM5O3MgbG9vayBhdCBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBiZWhhdmlvcj8gVGhlIGNvcmUgbG9naWMsIEkmIzM5O20gYXNzdW1pbmcsIGlzIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBJJiMzOTtsbCBoYXZlIHRvIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCB0byBzZWUgdGhlIGRldGFpbHMgYXJvdW5kIHRoYXQgYElQX1JPVVRFX01VTFRJUEFUSGAgY29uZmlnIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICBSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgZG9jdW1lbnRhdGlvbiBhdFxuICA3NjpcdFx0ICBcdTAwM2NodHRwczovL2xhcnRjLm9yZy9ob3d0by9sYXJ0Yy5ycGRiLmh0bWxcdTAwM2VcbiAgNzc6XHRcbiAgNzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzk6XHRcbiAgODA6XHRjb25maWcgSVBfUk9VVEVfTVVMVElQQVRIXG4gIDgxOlx0XHRib29sIFwmIzM0O0lQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFwmIzM0O1xuICA4MjpcdFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdCAgTm9ybWFsbHksIHRoZSByb3V0aW5nIHRhYmxlcyBzcGVjaWZ5IGEgc2luZ2xlIGFjdGlvbiB0byBiZSB0YWtlbiBpblxuICA4NTpcdFx0ICBhIGRldGVybWluaXN0aWMgbWFubmVyIGZvciBhIGdpdmVuIHBhY2tldC4gSWYgeW91IHNheSBZIGhlcmVcbiAgODY6XHRcdCAgaG93ZXZlciwgaXQgYmVjb21lcyBwb3NzaWJsZSB0byBhdHRhY2ggc2V2ZXJhbCBhY3Rpb25zIHRvIGEgcGFja2V0XG4gIDg3Olx0XHQgIHBhdHRlcm4sIGluIGVmZmVjdCBzcGVjaWZ5aW5nIHNldmVyYWwgYWx0ZXJuYXRpdmUgcGF0aHMgdG8gdHJhdmVsXG4gIDg4Olx0XHQgIGZvciB0aG9zZSBwYWNrZXRzLiBUaGUgcm91dGVyIGNvbnNpZGVycyBhbGwgdGhlc2UgcGF0aHMgdG8gYmUgb2ZcbiAgODk6XHRcdCAgZXF1YWwgXCYjMzQ7Y29zdFwmIzM0OyBhbmQgY2hvb3NlcyBvbmUgb2YgdGhlbSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIGZhc2hpb25cbiAgOTA6XHRcdCAgaWYgYSBtYXRjaGluZyBwYWNrZXQgYXJyaXZlcy5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgSVBfUk9VVEVfVkVSQk9TRVxuICA5MzpcdFx0Ym9vbCBcJiMzNDtJUDogdmVyYm9zZSByb3V0ZSBtb25pdG9yaW5nXCYjMzQ7XG4gIDk0Olx0XHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzg2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgUm91dGluZyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIHJvdXRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSYjMzk7dmUgaGl0IGEgZGVwZW5kZW5jeS4gSSBzZWUgdGhhdCBgSVBfUk9VVEVfTVVMVElQQVRIYCByZWxpZXMgb24gYElQX0FEVkFOQ0VEX1JPVVRFUmAuIFRoYXQmIzM5O3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGdpdmVuIHRoZSBuYXR1cmUgb2YgbXVsdGlwYXRoIHJvdXRpbmcuIElmIEkgd2FudCB0byBlbmFibGUgdGhhdCBmdW5jdGlvbmFsaXR5LCBJIGZpcnN0IG5lZWQgdG8gZW5zdXJlIHRoZSBhZHZhbmNlZCByb3V0aW5nIGZlYXR1cmVzIGFyZSBidWlsdC1pbiBvciBhdmFpbGFibGUgYXMgYSBtb2R1bGUuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgSVBfQURWQU5DRURfUk9VVEVSYC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBzZWUgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCBhcyBhIG1vZHVsZS4gRGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHNldHRpbmcsIEkgbWlnaHQgbmVlZCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuIElmIGl0JiMzOTtzIGRpc2FibGVkLCBJJiMzOTtsbCBoYXZlIHRvIHdlaWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIGFuZCwgb2YgY291cnNlLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3Mgcm91dGluZyBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29uZmlnIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTU9Y29uZmlnIElQX01VTFRJQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTQtXG5uZXQvaXB2NC9LY29uZmlnOjE1OmNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMTYtXHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBDaGVjazogYElQX0FEVkFOQ0VEX1JPVVRFUmAqKgoKT2theSwgdGltZSB0byBkaXZlIGluIGFuZCBtYWtlIHN1cmUgd2UmIzM5O3JlIHNxdWFyZWQgYXdheS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJ1biBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgb24gYElQX0FEVkFOQ0VEX1JPVVRFUmAuIFdlIGFsbCBrbm93IHRoZXNlIHRoaW5ncyBjYW4gZ2V0IGNvbXBsZXggcXVpY2tseSwgZXNwZWNpYWxseSB3aXRoIGFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2xzIGFuZCBwb3RlbnRpYWxseSBjdXN0b20gY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYWxsIHRoZSBuZWNlc3NhcnkgbGlicmFyaWVzLCBvdGhlciByb3V0aW5nIGRhZW1vbnMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBldmVuIGtlcm5lbCBtb2R1bGVzIGFyZSBwcmVzZW50LCBjb21wYXRpYmxlLCBhbmQgd29ya2luZyBhcyBleHBlY3RlZC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGJhc2ljIHBhY2thZ2UgY2hlY2s7IGl04oCZcyBhIGRlZXAgZGl2ZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggYW55IG90aGVyIG5ldHdvcmsgc2VydmljZXMgcnVubmluZywgdmVyc2lvbiBpbmNvbXBhdGliaWxpdGllcyB3aXRoIHRoZSB1bmRlcmx5aW5nIE9TLCBhbmQgb2YgY291cnNlLCBhbnkga25vd24sIG9yIHBvdGVudGlhbCwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbWFwcGluZyB0aG9zZSByZWxhdGlvbnNoaXBzOyBubyBwb2ludCBidWlsZGluZyBhIGhvdXNlIG9mIGNhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDEwOlx0XHQgIGludGVuZCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3BcbiAgMTE6XHRcdCAgb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXMgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIE1vcmVcbiAgMTI6XHRcdCAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1CT05FIGlzIG9uIHRoZSBXV1cgYXRcbiAgMTM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93d3cuc2F2ZXR6LmNvbS9tYm9uZS9cdTAwM2UuIEZvciBtb3N0IHBlb3BsZSwgaXQmIzM5O3Mgc2FmZSB0byBzYXkgTi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXG4gIDE2Olx0XHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgSWYgeW91IGludGVuZCB0byBydW4geW91ciBMaW51eCBib3ggbW9zdGx5IGFzIGEgcm91dGVyLCBpLmUuIGFzIGFcbiAgMTk6XHRcdCAgY29tcHV0ZXIgdGhhdCBmb3J3YXJkcyBhbmQgcmVkaXN0cmlidXRlcyBuZXR3b3JrIHBhY2tldHMsIHNheSBZOyB5b3VcbiAgMjA6XHRcdCAgd2lsbCB0aGVuIGJlIHByZXNlbnRlZCB3aXRoIHNldmVyYWwgb3B0aW9ucyB0aGF0IGFsbG93IG1vcmUgcHJlY2lzZVxuICAyMTpcdFx0ICBjb250cm9sIGFib3V0IHRoZSByb3V0aW5nIHByb2Nlc3MuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiB3b24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZSBrZXJuZWw6XG4gIDI0Olx0XHQgIGFuc3dlcmluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxuICAyNTpcdFx0ICBxdWVzdGlvbnMgYWJvdXQgYWR2YW5jZWQgcm91dGluZy5cbiAgMjY6XHRcbiAgMjc6XHRcdCAgTm90ZSB0aGF0IHlvdXIgYm94IGNhbiBvbmx5IGFjdCBhcyBhIHJvdXRlciBpZiB5b3UgZW5hYmxlIElQXG4gIDI4Olx0XHQgIGZvcndhcmRpbmcgaW4geW91ciBrZXJuZWw7IHlvdSBjYW4gZG8gdGhhdCBieSBzYXlpbmcgWSB0byBcJiMzNDsvcHJvY1xuICAyOTpcdFx0ICBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGFuZCBcJiMzNDtTeXNjdGwgc3VwcG9ydFwmIzM0OyBiZWxvdyBhbmQgZXhlY3V0aW5nIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzY2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFJvdXRlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgSVBfQURWQU5DRURfUk9VVEVSYCBhcHBlYXJzIHRvIGJlIGEgc3RhbmRhbG9uZSBmZWF0dXJlLCBhcyBpdCBoYXMgbm8gZGVjbGFyZWQgZGVwZW5kZW5jaWVzLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgSVBfQURWQU5DRURfUk9VVEVSYCBpdHNlbGYsIGFuZCBhbHNvIGBJUF9ST1VURV9NVUxUSVBBVEhgLCBqdXN0IHRvIGJlIGNlcnRhaW4uCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBzcGFjZSB0byBzZWUgaWYgSSYjMzk7bSBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsLiBUaGUgcmVsZXZhbnQgY29kZSBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJvdXRpbmcgc2VtYW50aWNzIGFyZSBkZWZpbmVkLCBzbyBpdCYjMzk7cyBhIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zLgoKQSBxdWljayB0aG91Z2h0LCBkbyBJIG5lZWQgdG8gY29uY2VybiBteXNlbGYgd2l0aCB3aGV0aGVyIGBmaWJfc2VtYW50aWNzLmNgIGlzIGFsd2F5cyBjb21waWxlZCBvciBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzPyBJZiBpdCBpc24mIzM5O3QgYWx3YXlzIHByZXNlbnQsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIGEgcG90ZW50aWFsIGNvbXBpbGUtdGltZSBkZXBlbmRlbmN5LCBhbmQgdHJhY2sgZG93biB3aGF0ZXZlciBjb25maWcgaXMgcmVzcG9uc2libGUgZm9yIGl0cyBhdmFpbGFiaWxpdHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgY29uc2lkZXJhdGlvbiBpbiBtaW5kLCBhcyBJIGxvb2sgdGhyb3VnaCB0aGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmliX3NlbWFudGljcy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNC1cdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE1Olx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBJUHY0IFJvdXRpbmcgU2VtYW50aWNzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYGZpYl9zZW1hbnRpY3Mub2AsIGFuZCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgSVB2NCBvbmx5LiBUaGF0IG5hcnJvd3MgdGhlIGZpZWxkIGRvd24gY29uc2lkZXJhYmx5LiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlIGFyZSBgSVBfQURWQU5DRURfUk9VVEVSYCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAsIHdoaWNoIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzLCBhbmQgYmFzZWQgb24gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwsIEkmIzM5O20gaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IGBpbmV0X3J0bV9uZXdyb3V0ZWAsIGBmaWJfbmV0ZGV2X2V2ZW50YCwgYW5kIGBmaWJfaW5ldGFkZHJfZXZlbnRgLgoKSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIGBmaWJfbmV0ZGV2X2V2ZW50YCBhbmQgYGZpYl9pbmV0YWRkcl9ldmVudGAgYXJlIG5vdGlmaWVyIGNhbGxiYWNrcy4gVGhhdCBtZWFucyB0aGV5IGFyZSBsaWtlbHkgdHJpZ2dlcmVkIGJ5IHNwZWNpZmljIGV2ZW50cy4gTGV0IG1lIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0ICp3aGVyZSogdGhvc2UgZXZlbnRzIG9yaWdpbmF0ZS4gQWgsIHJpZ2h0LCBgZmliX25ldGRldl9ldmVudGAgaXMgdGllZCB0byBuZXRkZXYgZXZlbnRzIGxpa2UgYE5FVERFVl9VUGAgYW5kIGBORVRERVZfRE9XTmAuIFNpbWlsYXJseSwgYGZpYl9pbmV0YWRkcl9ldmVudGAgaG9va3MgaW50byBpbmV0YWRkciBldmVudHMsIGFsc28gbGlrZSBgTkVUREVWX1VQYCBhbmQgYE5FVERFVl9ET1dOYC4KCkZ1enppbmcgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBhIGNsZWFyIHdpbjsgaXQgZGlyZWN0bHkgbWFuaXB1bGF0ZXMgdGhlIHJvdXRpbmcgdGFibGUgYnkgYWRkaW5nIHJvdXRlcy4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHRhcmdldC4gTm93LCBJIGRpZCBzZWUgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBleHBvcnRlZCwgYnV0IHRob3NlIHNlZW0gdG8gYmUgY2FsbGVkICpieSogdGhlIG5vdGlmaWVyIGNhbGxiYWNrcy4gTm90IGlkZWFsIGZvciBhIGRpcmVjdCBmdXp6aW5nIHRhcmdldC4KClNvLCB0aGUgY29yZSBzZXQgZm9yIGZ1enppbmcgd2lsbCBiZSBgaW5ldF9ydG1fbmV3cm91dGVgLCBgZmliX25ldGRldl9ldmVudGAsIGFuZCBgZmliX2luZXRhZGRyX2V2ZW50YC4gQnV0IHdhaXQuLi4gY2hlY2tpbmcgYGZpYl9uZXRkZXZfZXZlbnRgLi4uIGl0JiMzOTtzICpzdGF0aWMqLiBPa2F5LCBsZXQgbWUgY29uZmlybSBpdCYjMzk7cyByZWFsbHkgc3RhdGljLCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBzb21ldGhpbmcuIFRoYXQgY2hhbmdlcyBteSBzdHJhdGVneSBzb21ld2hhdDsgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGNoYWluIHRoYXQgdHJpZ2dlcnMgYGZpYl9uZXRkZXZfZXZlbnRgIGlmIGl0IGlzIGluZGVlZCBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9uZXRkZXZfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTQ3NT1zdGF0aWMgaW50IGZpYl9pbmV0YWRkcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTA1LVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTUwNjpzdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTA3LXtcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNTY5PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmliX25ldGRldl9ub3RpZmllciA9IHtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NzA6XHQubm90aWZpZXJfY2FsbCA9IGZpYl9uZXRkZXZfZXZlbnQsXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTcxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODIyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiByZWxpZXMgb24gc3RhdGljIGZ1bmN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGFyZ3VtZW50IGlzIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCB3aGljaCBjYW4gY2F1c2UgcHJvYmxlbXMuIEJ1dCwgd2FpdCwgYGZpYl9uZXRkZXZfZXZlbnRgIGlzIGEgKm5vdGlmaWVyIGNhbGxiYWNrKiwgbWVhbmluZyBpdHMgYWRkcmVzcyBpcyB0YWtlbi4gVGhlcmVmb3JlLCBpdCAqY2FuJiMzOTt0KiBiZSBpbmxpbmVkLiBTbywgdGhlIG9yaWdpbmFsIGNvbmNlcm4gaXMgbW9vdCwgaGVyZS4KCkhtbW0sIGJ1dCB3aGF0IGFib3V0IGFsdGVybmF0aXZlIEFQSSBjYWxscz8gQ291bGQgYGZpYl9zeW5jX2Rvd25fZGV2YCBvciBgZmliX3N5bmNfdXBgIHdvcms/IFRoZXkgYXJlIG5vbi1zdGF0aWMsIHNvIHRoZXkgKmNvdWxkKiBiZSBleHBvcnRlZC4gVGhhdCB3b3VsZCBiZSBpZGVhbC4gSSBzaG91bGQgY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSwgaW4gZmFjdCwgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmZpYl9zeW5jX2Rvd25fZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOgoKKipJbnZlc3RpZ2F0aW5nIE5vbi1FeHBvcnRlZCwgTm9uLVN0YXRpYyBTeW1ib2xzIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgc28gdGhlc2Ugc3ltYm9scyBhcmVuJiMzOTt0IGV4cG9zZWQgdmlhIGBFWFBPUlRfU1lNQk9MYCwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhpcyBtb2R1bGUgb3IgdGhlIGtlcm5lbCBpdHNlbGYuIEJ1dCB0aGV5JiMzOTtyZSAqYWxzbyogbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1bnVzdWFsLiBUeXBpY2FsbHksIGludGVybmFsIHN5bWJvbHMgYXJlIHN0YXRpYyB0byBwcmV2ZW50IGFjY2lkZW50YWwgZXh0ZXJuYWwgbGlua2FnZS4gVGhpcyB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSYjMzk7cmUgbm9uLXN0YXRpYyB3aXRob3V0IGJlaW5nIGV4cG9ydGVkLiBUaGUgY29tcGlsZXIgc2hvdWxkIHdhcm4gaWYgeW91IGNyZWF0ZSBhIG5vbi1zdGF0aWMgc3ltYm9sIHRoYXQgaXMgbm90IGV4cG9ydGVkLgoKTGV0IG1lIGV4YW1pbmUgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBzcGVjaWZpY2FsbHkuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gc2VlIHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQuIE15IG5leHQgdGhvdWdodCBpcyBob3cgdGhleSBhcmUgYmVpbmcgdXNlZC4gQXJlIHRoZXkgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCBvciBhcmUgdGhleSBwb3RlbnRpYWxseSBiZWluZyBhY2Nlc3NlZCBmcm9tIGFub3RoZXIgcGFydCBvZiB0aGUga2VybmVsIGluIGEgcm91bmRhYm91dCB3YXkg4oCTIHBlcmhhcHMgdmlhIGEgZnVuY3Rpb24gcG9pbnRlciBvciBpbmRpcmVjdCBsaW5rYWdlIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZz8gVGhlcmUgY291bGQgYmUgYSBjbGV2ZXIgZGVzaWduIHBhdHRlcm4gaW4gcGxheSwgb3IsIHBvdGVudGlhbGx5LCBhIHN1YnRsZSBidWcgd2FpdGluZyB0byBiZSB1bmNvdmVyZWQuIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpYl9zeW5jX2Rvd25fZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE0NjU9c3RhdGljIHZvaWQgZmliX2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDY3LXtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE0Njg6XHRpZiAoZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZm9yY2UpKVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ2OS1cdFx0ZmliX2ZsdXNoKGRldl9uZXQoZGV2KSk7XG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTU0NC1cdFx0ZWxzZVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTU0NTpcdFx0XHRmaWJfc3luY19kb3duX2RldihkZXYsIGV2ZW50LCBmYWxzZSk7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTQ2LVx0XHRydF9jYWNoZV9mbHVzaChuZXQpO1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTI0PXZvaWQgZmliX3N5bmNfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBvcmlnX210dSlcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMTk0Mi0gKi9cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxOTQzOmludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE5NDQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJvdXRlIFN5bmNocm9uaXphdGlvbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyByb3V0ZSBzeW5jaHJvbml6YXRpb24gbG9naWMsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IGBpbmV0X3J0bV9uZXdyb3V0ZWAsIGBmaWJfc3luY19kb3duX2RldmAsIGFuZCBgZmliX3N5bmNfdXBgIGFzIHRoZSBrZXkgZnVuY3Rpb25zLiBCdXQgaGFuZyBvbiwgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBhcmUgdHJpZ2dlcmVkIGJ5IGBmaWJfbmV0ZGV2X2V2ZW50YCBhbmQgYGZpYl9pbmV0YWRkcl9ldmVudGAuIE5vdywgYXJlIHRob3NlIHRoZSAqb25seSogY2FsbGVycyBvZiB0aG9zZSB0d28gZnVuY3Rpb25zPyBMZXQgbWUgc2VlLi4uIEFoYSEgYGZpYl9kaXNhYmxlX2lwYCBhbHNvIGNhbGxzIGBmaWJfc3luY19kb3duX2RldmAuIEFuZCBndWVzcyB3aGF0PyBgZmliX2Rpc2FibGVfaXBgIGl0c2VsZiBpcyBjYWxsZWQgYnkgdGhvc2Ugc2FtZSBgZmliX2luZXRhZGRyX2V2ZW50YCBhbmQgYGZpYl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9ucy4gQWxyaWdodCwgc28gdGhlIHJlYWwgZW50cnkgcG9pbnRzLCB0aGUgb25lcyB0byBmb2N1cyBvbiBmb3IgdGhpcyBwcm9jZXNzLCBhcmUgcmVhbGx5IGBpbmV0X3J0bV9uZXdyb3V0ZWAsIGBmaWJfc3luY19kb3duX2RldmAsIGFuZCBgZmliX3N5bmNfdXBgLiBIb2xkIG9uLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhhdCBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIG5vdCBzdGF0aWMsIHRoYXQgd291bGQgYmUgdmVyeSB1c2VmdWwsIGxldCBtZSBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldF9ydG1fbmV3cm91dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9ODk2PXN0YXRpYyBpbnQgaW5ldF9ydG1fZGVscm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtOTI5LVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6OTMwOnN0YXRpYyBpbnQgaW5ldF9ydG1fbmV3cm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05MzEtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTcxMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgZmliX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0Y29uc3QgPSB7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNzEyLVx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX05FV1JPVVRFLFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTcxMzpcdCAuZG9pdCA9IGluZXRfcnRtX25ld3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTcxNC1cdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9ERUxST1VURSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NjUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0aGVzZSBmdW5jdGlvbiBjYWxscyBmb3Igb3VyIHB1cnBvc2VzLiBJdCBsb29rcyBsaWtlIGBpbmV0X3J0bV9uZXdyb3V0ZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGluaXRpYWxseSBtYWtlcyBtZSB0aGluayBpdCYjMzk7cyBpbmxpbmVkLiBIb3dldmVyLCBJIHNlZSBpdHMgYWRkcmVzcyBpcyBhY3R1YWxseSB1c2VkIGluIGBmaWJfcnRubF9tc2dfaGFuZGxlcnNgLiBUaGlzIG1lYW5zIGl0ICppc24mIzM5O3QqIGJlaW5nIGlubGluZWQsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHRlY2huaWNhbGx5IGEgc3RhdGljIGZ1bmN0aW9uLgoKVGhlIGluc3RydWN0aW9ucyBJJiMzOTttIHdvcmtpbmcgZnJvbSBzYXkgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFNpbmNlIGBpbmV0X3J0bV9uZXdyb3V0ZWAgaXMgaGFuZGxpbmcgbmV0bGluaywgaXQmIzM5O3MgZGVmaW5pdGVseSBub3QgaW5saW5lZCBhbmQgZml0cyB0aGUgYmlsbC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYW5kIG1haW50YWluIGNvbnNpc3RlbmN5IHdpdGggdGhlIGd1aWRlbGluZXMsIEkgdGhpbmsgaXQmIzM5O3MgYWxzbyB3b3J0aCBpbmNsdWRpbmcgYGZpYl90YWJsZV9pbnNlcnRgIGluIHRoZSBzb2x1dGlvbiwgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGlzIGFsc28gbm9uLXN0YXRpYywgcHJvdmlkaW5nIGFuIGV4dHJhIGxheWVyIG9mIGNsYXJpdHkuIE5vdyBJJiMzOTtsbCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGZpYl90YWJsZV9pbnNlcnRgIHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfdGFibGVfaW5zZXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTY0Nj1pbnQgaXBfcnRfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcnRlbnRyeSAqcnQpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNjcxLVx0XHRcdFx0aWYgKHRiKVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6NjcyOlx0XHRcdFx0XHRlcnIgPSBmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy02NzMtXHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2Y2ZnLCBOVUxMKTtcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz05MzA9c3RhdGljIGludCBpbmV0X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05NDktXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo5NTA6XHRlcnIgPSBmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsIFx1MDAyNmNmZywgZXh0YWNrKTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTk1MS1cdGlmICghZXJyIFx1MDAyNlx1MDAyNiBjZmcuZmNfdHlwZSA9PSBSVE5fTE9DQUwpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTExMj1zdGF0aWMgdm9pZCBmaWJfbWFnaWMoaW50IGNtZCwgaW50IHR5cGUsIF9fYmUzMiBkc3QsIGludCBkc3RfbGVuLFxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTExNDYtXHRpZiAoY21kID09IFJUTV9ORVdST1VURSlcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjExNDc6XHRcdGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YiwgXHUwMDI2Y2ZnLCBOVUxMKTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTExNDgtXHRlbHNlXG4tLVxubmV0L2lwdjQvZmliX3RyaWUuYz0xMTkwPXN0YXRpYyB2b2lkIGZpYl9yZW1vdmVfYWxpYXMoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCBrZXlfdmVjdG9yICp0cCxcbi0tXG5uZXQvaXB2NC9maWJfdHJpZS5jLTExOTMtLyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MLiAqL1xubmV0L2lwdjQvZmliX3RyaWUuYzoxMTk0OmludCBmaWJfdGFibGVfaW5zZXJ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl90YWJsZSAqdGIsXG5uZXQvaXB2NC9maWJfdHJpZS5jLTExOTUtXHRcdCAgICAgc3RydWN0IGZpYl9jb25maWcgKmNmZywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIGBmaWJfdGFibGVfaW5zZXJ0YCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gc3RhcnQgd2l0aC4gQW5kIHNpbmNlIGl0JiMzOTtzIG5vbi1zdGF0aWMsIHRoYXQgbGlrZWx5IG1lYW5zIGl0IGlzIHVzZWQgZXh0ZXJuYWxseS4gVGhhdCBtYWtlcyBpdCBtb3JlIGludGVyZXN0aW5nIGZvciB3aGF0IEkgd2FudCB0byBhY2NvbXBsaXNoLiBUaGVuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBpbiB0aGUgYW5hbHlzaXMsIHNpbmNlIHRoZXkmIzM5O3JlIHByb2JhYmx5IHRpZWQgaW4gc29tZWhvdy4KCldhaXQgYSBtaW51dGUsIHdoYXQgYWJvdXQgYGZpYl9jcmVhdGVfaW5mb2A/IFRoYXQmIzM5O3MgYWxzbyBub24tc3RhdGljLCBhbmQgaXQgYWN0dWFsbHkgY2FsbHMgYGZpYl9yZWJhbGFuY2VgLiBPa2F5LCB0aGF0JiMzOTtzIGltcG9ydGFudC4gSSBuZWVkIHRvIGluY2x1ZGUgYGZpYl9jcmVhdGVfaW5mb2AgaW4gdGhlIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyB0byBhbmFseXplIGFzIHdlbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuCgpOb3csIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgYElQX1JPVVRFX01VTFRJUEFUSGAgYW5kIGBJUF9BRFZBTkNFRF9ST1VURVJgIGNvbWluZyBpbnRvIHBsYXkgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGF0IHBsYXksIG9yIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgdGhhdCBpcyBhZmZlY3RlZCBieSB0aGVzZSBjb25maWdzLiBKdXN0IHRvIG1ha2Ugc3VyZSwgSSBzaG91bGQgY2hlY2sgYElQX0FEVkFOQ0VEX1JPVVRFUmAgYWdhaW4gdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTU9Y29uZmlnIElQX01VTFRJQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTQtXG5uZXQvaXB2NC9LY29uZmlnOjE1OmNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMTYtXHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBJUF9BRFZBTkNFRF9ST1VURVJgIGl0c2VsZiBkb2VzbiYjMzk7dCBoYXZlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgYWNjb3VudGVkIGZvciAqZXZlcnl0aGluZyogdGhhdCBtaWdodCBiZSBpbmRpcmVjdGx5IHJlcXVpcmVkLiBUaGUga2V5IGlzIHRvIGV4YW1pbmUgdGhlIGltcGFjdCBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLgoKUmlnaHQsIGBmaWJfcmViYWxhbmNlYC4uLiB0aGF0JiMzOTtzIHRoZSBvbmUuIEkgcmVtZW1iZXIgaXQmIzM5O3Mgb25seSBkZWZpbmVkIHdoZW4gYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgYElQX1JPVVRFX01VTFRJUEFUSGAgdGhlIGNydWNpYWwgZmFjdG9yIGhlcmUuIEFuZCwgYXMgYSBtYXR0ZXIgb2YgZmFjdCwgYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgdGhlICpwYXJlbnQqIGNvbmZpZyB0aGF0IGFjdHVhbGx5IG1ha2VzIGBJUF9ST1VURV9NVUxUSVBBVEhgIGF2YWlsYWJsZSB0byBiZWdpbiB3aXRoLgoKVGhlcmVmb3JlLCB0aGUgRW5hYmxlQ29uZmlncyBsaXN0IHdpbGwgbmVlZCBib3RoIG9mIHRoZXNlLiBTbywgdGhlIGNvcnJlY3Qgd2F5IHRvIHNwZWNpZnkgdGhlIGRlcGVuZGVuY2llcyBpczogYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LCAmIzM0O0lQX1JPVVRFX01VTFRJUEFUSCYjMzQ7XWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFib3V0IGBmaWJfcmViYWxhbmNlYCBvbmUgbW9yZSB0aW1lLiBObyBoYXJtIGluIGJlaW5nIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0fVxuIDg1MTpcdFxuIDg1MjpcdC8qIG9ubHkgY2FsbGVkIHdoZW4gZmliX25oIGlzIGludGVncmF0ZWQgaW50byBmaWJfaW5mbyAqL1xuIDg1MzpcdHN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcbiA4NTQ6XHR7XG4gODU1Olx0XHRpbnQgdG90YWw7XG4gODU2Olx0XHRpbnQgdztcbiA4NTc6XHRcbiA4NTg6XHRcdGlmIChmaWJfaW5mb19udW1fcGF0aChmaSkgXHUwMDNjIDIpXG4gODU5Olx0XHRcdHJldHVybjtcbiA4NjA6XHRcbiA4NjE6XHRcdHRvdGFsID0gMDtcbiA4NjI6XHRcdGZvcl9uZXh0aG9wcyhmaSkge1xuIDg2MzpcdFx0XHRpZiAobmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfREVBRClcbiA4NjQ6XHRcdFx0XHRjb250aW51ZTtcbiA4NjU6XHRcbiA4NjY6XHRcdFx0aWYgKGlwX2lnbm9yZV9saW5rZG93bihuaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiA4Njc6XHRcdFx0ICAgIG5oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKVxuIDg2ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDg2OTpcdFxuIDg3MDpcdFx0XHR0b3RhbCAmIzQzOz0gbmgtXHUwMDNlZmliX25oX3dlaWdodDtcbiA4NzE6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbiA4NzI6XHRcbiA4NzM6XHRcdHcgPSAwO1xuIDg3NDpcdFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4gODc1Olx0XHRcdGludCB1cHBlcl9ib3VuZDtcbiA4NzY6XHRcbiA4Nzc6XHRcdFx0aWYgKCF0b3RhbCB8fCBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpIHtcbiA4Nzg6XHRcdFx0XHR1cHBlcl9ib3VuZCA9IC0xO1xuIDg3OTpcdFx0XHR9IGVsc2UgaWYgKGlwX2lnbm9yZV9saW5rZG93bihuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9kZXYpIFx1MDAyNlx1MDAyNlxuIDg4MDpcdFx0XHRcdCAgIG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfTElOS0RPV04pIHtcbiA4ODE6XHRcdFx0XHR1cHBlcl9ib3VuZCA9IC0xO1xuIDg4MjpcdFx0XHR9IGVsc2Uge1xuIDg4MzpcdFx0XHRcdHcgJiM0Mzs9IG5leHRob3BfbmgtXHUwMDNlZmliX25oX3dlaWdodDtcbiA4ODQ6XHRcdFx0XHR1cHBlcl9ib3VuZCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KXcgXHUwMDNjXHUwMDNjIDMxLFxuIDg4NTpcdFx0XHRcdFx0XHRcdFx0ICAgIHRvdGFsKSAtIDE7XG4gODg2Olx0XHRcdH1cbiA4ODc6XHRcbiA4ODg6XHRcdFx0YXRvbWljX3NldChcdTAwMjZuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCwgdXBwZXJfYm91bmQpO1xuIDg4OTpcdFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xuIDg5MDpcdH1cbiA4OTE6XHQjZWxzZSAvKiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIICovXG4gODkyOlx0XG4gODkzOlx0c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxuIDg5NDpcdFx0XHQgICAgICAgaW50IHJlbWFpbmluZywgc3RydWN0IGZpYl9jb25maWcgKmNmZyxcbiA4OTU6XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA4OTY6XHR7XG4gODk3Olx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O011bHRpcGF0aCBzdXBwb3J0IG5vdCBlbmFibGVkIGluIGtlcm5lbFwmIzM0Oyk7XG4gODk4Olx0XG4gODk5Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMzEKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogMjk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUm91dGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBuYXN0eSBkaXZpZGUtYnktemVybyB2dWxuZXJhYmlsaXR5LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGluIGBmaWJfcmViYWxhbmNlYCwgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIGEgbXVsdGlwYXRoIHJvdXRlIGhhcyAqYWxsKiBpdHMgbmV4dGhvcHMgaW4gYSBkZWFkIG9yIGxpbmtkb3duIHN0YXRlLiBUaGF0IHdvdWxkIGxlYWQgdG8gYSBgdG90YWxgIHdlaWdodCBvZiB6ZXJvLCBhbmQgdGhlbiB3ZSYjMzk7cmUgZGl2aWRpbmcgYnkgemVybyDigJMgY2xhc3NpYyBidWcgbWF0ZXJpYWwuIFRoZSBmaXggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hlY2sgYCF0b3RhbGAgYW5kIHNldCBgdXBwZXJfYm91bmQgPSAtMWAgYWNjb3JkaW5nbHkuIFNpbXBsZSwgYnV0IGNyaXRpY2FsIGZvciBzdGFiaWxpdHkuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBidWcgZml4IGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZSwgbm90aGluZyBlbHNlLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHBvaW50cyBvZiBlbnRyeSwgYW5kIEkgc2VlIHRoZXkgYXJlIGFsbCBvdmVyIHRoZSBwbGFjZS4gSSBjYW4gc2VlIHRoZSByZWFjaGFibGUgcGF0aHMgdGhyb3VnaCBgZmliX2NyZWF0ZV9pbmZvYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAgYW5kIGBmaWJfdGFibGVfaW5zZXJ0YC4gVGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgYWRkaW5nIHJvdXRlcyB0aHJvdWdoIG5ldGxpbmsgb3IgaGFuZGxpbmcgbmV0d29yayBkZXZpY2UgKG5ldGRldikgZXZlbnRzLiBUaGF0IG5ldGxpbmsgcGF0aCBpcyBhIGNsZWFyIGF0dGFjayB2ZWN0b3IgaGVyZS4KCkJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBnaXZlbiwgSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGlzIHJ1bm5pbmcgd2l0aCBgSVBfQURWQU5DRURfUk9VVEVSYCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAgZW5hYmxlZCwgc2luY2UgaXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoaXMgbXVsdGlwYXRoIHJvdXRpbmcgdG8gZXZlbiBiZSBwb3NzaWJsZS4gVGhpcyBwYXRjaCBzZWVtcyBsb3cgaGFuZ2luZyBmcnVpdCBmb3IgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7ZmliX3RhYmxlX2luc2VydCYjMzQ7LAogICAgJiMzNDtmaWJfc3luY19kb3duX2RldiYjMzQ7LAogICAgJiMzNDtmaWJfc3luY191cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUF9ST1VURV9NVUxUSVBBVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaWJfY3JlYXRlX2luZm8mIzM0OywKICAgICYjMzQ7ZmliX3RhYmxlX2luc2VydCYjMzQ7LAogICAgJiMzNDtmaWJfc3luY19kb3duX2RldiYjMzQ7LAogICAgJiMzNDtmaWJfc3luY191cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGB1cHBlcl9ib3VuZGAgZm9yIG11bHRpcGF0aCByb3V0ZXMuIElmIHRoZSBgdG90YWxgIHdlaWdodCBvZiBhbGwgdmFsaWQgbmV4dGhvcHMgaXMgMCwgdGhlIHByZXZpb3VzIGNvZGUgd291bGQgYXR0ZW1wdCB0byBkaXZpZGUgYnkgYHRvdGFsYCwgY2F1c2luZyBhIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbi4gVGhlIHBhdGNoIHByZXZlbnRzIHRoaXMgYnkgZXhwbGljaXRseSBjaGVja2luZyBpZiBgdG90YWxgIGlzIDAgYW5kIHNldHRpbmcgYHVwcGVyX2JvdW5kID0gLTFgIGluIHRoYXQgY2FzZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGFyaXRobWV0aWMgYnVnIChkaXZpZGUtYnktemVybykgdGhhdCBjYW4gYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIGZ1enppbmcgKG9yIFVCU0FOKS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgYW55IGlzc3VlcyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3NTZhMDQxZTc2N2U5MmEwNWU4MDllZTcxMWY0ZmI3NTJjNzgyNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAxODo0OToxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwppbmRleCAwNDgzNTE5YjdmYjBkLi43YTM2MmYyZTJjMmJkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCkBAIC04NzQsNyAmIzQzOzg3NCw3IEBAIHN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSkKIAljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKIAkJaW50IHVwcGVyX2JvdW5kOwogCi0JCWlmIChuZXh0aG9wX25oLSZndDtmaWJfbmhfZmxhZ3MgJmFtcDsgUlROSF9GX0RFQUQpIHsKJiM0MzsJCWlmICghdG90YWwgfHwgbmV4dGhvcF9uaC0mZ3Q7ZmliX25oX2ZsYWdzICZhbXA7IFJUTkhfRl9ERUFEKSB7CiAJCQl1cHBlcl9ib3VuZCA9IC0xOwogCQl9IGVsc2UgaWYgKGlwX2lnbm9yZV9saW5rZG93bihuZXh0aG9wX25oLSZndDtmaWJfbmhfZGV2KSAmYW1wOyZhbXA7CiAJCQkgICBuZXh0aG9wX25oLSZndDtmaWJfbmhfZmxhZ3MgJmFtcDsgUlROSF9GX0xJTktET1dOKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmsgUm91dGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGZpYl9yZWJhbGFuY2VgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0JiMzOTtzIG1vZGlmeWluZyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIGZvciBgIXRvdGFsYCBiZWZvcmUgZXhhbWluaW5nIHRoZSBgUlROSF9GX0RFQURgIGZsYWcgb24gdGhlIG5leHQgaG9wLiBNeSBndXQgc2F5cyB0aGlzIGlzIGxpa2VseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGRpdmlkZS1ieS16ZXJvIG9yLCBwb3NzaWJseSwgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgc2NlbmFyaW8gd2hlcmUgYHRvdGFsYCBpcyB6ZXJvLiBBIHplcm8gdmFsdWUgaW4gYHRvdGFsYCwgZGVwZW5kaW5nIG9uIHdoZXJlIGl0JiMzOTtzIHVzZWQsIGNvdWxkIGxlYWQgdG8gc29tZSBuYXN0eSBwcm9ibGVtcy4KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZmliX3JlYmFsYW5jZWAgdG8gY29uZmlybSB0aGlzIGh1bmNoIGFuZCB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHdoYXQgYHRvdGFsYCByZXByZXNlbnRzLCBob3cgaXQmIzM5O3MgY2FsY3VsYXRlZCwgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGggYG5leHRob3BfbmhgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgZml4LiBLbm93aW5nIHRoZSBvcmlnaW5hbCBsb2dpYyBmbG93IG9mIGBmaWJfcmViYWxhbmNlYCBpcyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGNhbGN1bGF0aW9ucyBvciBhcnJheSBhY2Nlc3NlcyB0aGF0IHVzZSBgdG90YWxgIGFzIGEgZGl2aXNvciBvciBpbmRleC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBkZWNpZGUgaWYgdGhlIGZpeCBpcyBjb3JyZWN0LCBhbmQgaWYgYW55IG90aGVyIGNvbnNpZGVyYXRpb25zIGFyZSBuZWVkZWQgdG8gbWFrZSB0aGUgY2hhbmdlIG1vcmUgcm9idXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfcmViYWxhbmNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZmliX3NlbWFudGljcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz03NDI9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04NTItLyogb25seSBjYWxsZWQgd2hlbiBmaWJfbmggaXMgaW50ZWdyYXRlZCBpbnRvIGZpYl9pbmZvICovXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6ODUzOnN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04NTQte1xuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz04OTM9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MDEtXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTAyOiNkZWZpbmUgZmliX3JlYmFsYW5jZShmaSkgZG8geyB9IHdoaWxlICgwKVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkwMy1cbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MTM3Nj1zdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNTU0LVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjE1NTU6XHRcdGZpYl9yZWJhbGFuY2UoZmkpO1xubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE1NTYtXHR9XG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTE5NDM9aW50IGZpYl9zeW5jX2Rvd25fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGJvb2wgZm9yY2UpXG4tLVxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwMDItXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjAwMzpcdFx0ZmliX3JlYmFsYW5jZShmaSk7XG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjAwNC1cdH1cbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjA5Mj1pbnQgZmliX3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncylcbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE0NC1cbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMTQ1Olx0XHRmaWJfcmViYWxhbmNlKGZpKTtcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTQ2LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGZpYl9yZWJhbGFuY2VgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmaWJfcmViYWxhbmNlYCB3aXRoaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIEZJQiAoRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlKSwgZW5zdXJpbmcgdGhhdCByb3V0aW5nIHRhYmxlcyBhcmUgYmFsYW5jZWQgYW5kIGVmZmljaWVudC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHdoeSBhbmQgd2hlbiB0aGlzIGlzIGNhbGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIGBmaWJfdGFibGVgLCBgZmliX2luZm9gLCBhbmQgdGhlIG92ZXJhbGwgcm91dGUgbG9va3VwIHByb2Nlc3MuIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBlbXBsb3llZC4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgdG9wb2xvZ3ksIGhvdyBpdCByZWFjdHMgdG8gcm91dGUgYWRkaXRpb25zLCBkZWxldGlvbnMsIGFuZCBtb2RpZmljYXRpb25zLCBhbmQgaG93IGl0IGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZXNlIG9wZXJhdGlvbnMuIEFyZSB0aGV5IHVzaW5nIFJDVSBoZXJlLCBvciBzb21lIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2w/IEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7cmUgcmVseWluZyBvbiBwZXItQ1BVIGRhdGEgc3RydWN0dXJlcyBvciBnbG9iYWwgbG9ja3MsIGFuZCB3aGF0IHRyYWRlLW9mZnMgdGhleSYjMzk7dmUgbWFkZSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgc2NhbGFiaWxpdHkuIEkmIzM5O2xsIGFsc28gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggZnJhZ21lbnRhdGlvbiBhbmQgcGF0aCBNVFUgZGlzY292ZXJ5IGlmIGFwcGxpY2FibGUuIEluIGdlbmVyYWwsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBrZXkgcGxheWVyIGluIHRoZSByZWxpYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgSVB2NCByb3V0aW5nIGluIHRoZSBMaW51eCBrZXJuZWwuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIHRoZSByZWJhbGFuY2luZyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9maWJfc2VtYW50aWNzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdH1cbiA4NTE6XHRcbiA4NTI6XHQvKiBvbmx5IGNhbGxlZCB3aGVuIGZpYl9uaCBpcyBpbnRlZ3JhdGVkIGludG8gZmliX2luZm8gKi9cbiA4NTM6XHRzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXG4gODU0Olx0e1xuIDg1NTpcdFx0aW50IHRvdGFsO1xuIDg1NjpcdFx0aW50IHc7XG4gODU3Olx0XG4gODU4Olx0XHRpZiAoZmliX2luZm9fbnVtX3BhdGgoZmkpIFx1MDAzYyAyKVxuIDg1OTpcdFx0XHRyZXR1cm47XG4gODYwOlx0XG4gODYxOlx0XHR0b3RhbCA9IDA7XG4gODYyOlx0XHRmb3JfbmV4dGhvcHMoZmkpIHtcbiA4NjM6XHRcdFx0aWYgKG5oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpXG4gODY0Olx0XHRcdFx0Y29udGludWU7XG4gODY1Olx0XG4gODY2Olx0XHRcdGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmgtXHUwMDNlZmliX25oX2RldikgXHUwMDI2XHUwMDI2XG4gODY3Olx0XHRcdCAgICBuaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9MSU5LRE9XTilcbiA4Njg6XHRcdFx0XHRjb250aW51ZTtcbiA4Njk6XHRcbiA4NzA6XHRcdFx0dG90YWwgJiM0Mzs9IG5oLVx1MDAzZWZpYl9uaF93ZWlnaHQ7XG4gODcxOlx0XHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XG4gODcyOlx0XG4gODczOlx0XHR3ID0gMDtcbiA4NzQ6XHRcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xuIDg3NTpcdFx0XHRpbnQgdXBwZXJfYm91bmQ7XG4gODc2Olx0XG4gODc3Olx0XHRcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4gODc4Olx0XHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiA4Nzk6XHRcdFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiA4ODA6XHRcdFx0XHQgICBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XG4gODgxOlx0XHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiA4ODI6XHRcdFx0fSBlbHNlIHtcbiA4ODM6XHRcdFx0XHR3ICYjNDM7PSBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF93ZWlnaHQ7XG4gODg0Olx0XHRcdFx0dXBwZXJfYm91bmQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCl3IFx1MDAzY1x1MDAzYyAzMSxcbiA4ODU6XHRcdFx0XHRcdFx0XHRcdCAgICB0b3RhbCkgLSAxO1xuIDg4NjpcdFx0XHR9XG4gODg3Olx0XG4gODg4Olx0XHRcdGF0b21pY19zZXQoXHUwMDI2bmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfdXBwZXJfYm91bmQsIHVwcGVyX2JvdW5kKTtcbiA4ODk6XHRcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcbiA4OTA6XHR9XG4gODkxOlx0I2Vsc2UgLyogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCAqL1xuIDg5MjpcdFxuIDg5MzpcdHN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcbiA4OTQ6XHRcdFx0ICAgICAgIGludCByZW1haW5pbmcsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXG4gODk1Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gODk2Olx0e1xuIDg5NzpcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtNdWx0aXBhdGggc3VwcG9ydCBub3QgZW5hYmxlZCBpbiBrZXJuZWxcJiMzNDspO1xuIDg5ODpcdFxuIDg5OTpcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTcKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgZGl2aWRlLWJ5LXplcm8gdnVsbmVyYWJpbGl0eS4gVGhlIGNvcmUgaXNzdWUgaXMgd2l0aGluIHRoZSBgZmliX3JlYmFsYW5jZWAgZnVuY3Rpb24gd2hlcmUgYHVwcGVyX2JvdW5kYCBpcyBiZWluZyBjYWxjdWxhdGVkLiBQcmV2aW91c2x5LCBpZiB0aGUgdG90YWwgd2VpZ2h0IChgdG90YWxgKSBvZiB2YWxpZCBuZXh0IGhvcHMgd2FzIHplcm8sIHRoZSBjb2RlIHdvdWxkIGF0dGVtcHQgYSBkaXZpc2lvbiBieSB6ZXJvIGluIHRoZSBgRElWX1JPVU5EX0NMT1NFU1RfVUxMYCBtYWNyby4gT2J2aW91c2x5LCB0aGF0IGNhdXNlcyBhIGNyYXNoLiBUaGUgZml4IGlzIGVsZWdhbnQ6IGl0IHNpbXBseSBhZGRzIGEgY2hlY2sgZm9yIGAhdG90YWxgIGJlZm9yZSB0aGUgZGl2aXNpb24uIElmIGB0b3RhbGAgaXMgemVybywgd2Ugc2tpcCB0aGUgZGl2aXNpb24gYW5kIHNldCBgdXBwZXJfYm91bmRgIHRvIC0xLiBUaGF0IGF2b2lkcyB0aGUgY3Jhc2guCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhci4gVGhlIHZ1bG5lcmFiaWxpdHkgaXMgYSBzdGFuZGFyZCBhcml0aG1ldGljIGVycm9yLiBJdCYjMzk7cyBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgd2hhdCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2guIFRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugd2hlcmUgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcsIGZ1enppbmcsIFVCU0FOLCBvciBLQVNBTiB3b3VsZCBlYXNpbHkgaWRlbnRpZnkgdGhlIHByb2JsZW0uIEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlOyBpdCYjMzk7cyBvdmVya2lsbC4gSXQmIzM5O3MgYSBjbGVhbiwgZWZmaWNpZW50IGZpeCB0byBhIHByZXZlbnRhYmxlIGNyYXNoLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHN0YW5kYXJkLCBydW4tb2YtdGhlLW1pbGwgYXJpdGhtZXRpYyBidWcuIE5vIG5lZWQgZm9yIHRoZSBoZWF2eSBhcnRpbGxlcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGBmaWJfcmViYWxhbmNlYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBgdXBwZXJfYm91bmRgIGZvciBtdWx0aXBhdGggcm91dGVzLiBJZiB0aGUgYHRvdGFsYCB3ZWlnaHQgb2YgYWxsIHZhbGlkIG5leHRob3BzIGlzIDAsIHRoZSBwcmV2aW91cyBjb2RlIHdvdWxkIGF0dGVtcHQgdG8gZGl2aWRlIGJ5IGB0b3RhbGAsIGNhdXNpbmcgYSBkaXZpZGUtYnktemVybyBleGNlcHRpb24uIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGlzIGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcgaWYgYHRvdGFsYCBpcyAwIGFuZCBzZXR0aW5nIGB1cHBlcl9ib3VuZCA9IC0xYCBpbiB0aGF0IGNhc2UuIFRoaXMgaXMgYSBzdGFuZGFyZCBhcml0aG1ldGljIGJ1ZyAoZGl2aWRlLWJ5LXplcm8pIHRoYXQgY2FuIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBmdXp6aW5nIChvciBVQlNBTikuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm8tbGVha3MsIG9yIGFueSBpc3N1ZXMgdGhhdCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGB1cHBlcl9ib3VuZGAgZm9yIG11bHRpcGF0aCByb3V0ZXMuIElmIHRoZSBgdG90YWxgIHdlaWdodCBvZiBhbGwgdmFsaWQgbmV4dGhvcHMgaXMgMCwgdGhlIHByZXZpb3VzIGNvZGUgd291bGQgYXR0ZW1wdCB0byBkaXZpZGUgYnkgYHRvdGFsYCwgY2F1c2luZyBhIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbi4gVGhlIHBhdGNoIHByZXZlbnRzIHRoaXMgYnkgZXhwbGljaXRseSBjaGVja2luZyBpZiBgdG90YWxgIGlzIDAgYW5kIHNldHRpbmcgYHVwcGVyX2JvdW5kID0gLTFgIGluIHRoYXQgY2FzZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGFyaXRobWV0aWMgYnVnIChkaXZpZGUtYnktemVybykgdGhhdCBjYW4gYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIGZ1enppbmcgKG9yIFVCU0FOKS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgYW55IGlzc3VlcyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjE1LjM3MDkyODExNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDI3MTUxNjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiZmliX3RhYmxlX2luc2VydFwiLFxuICAgIFwiZmliX3N5bmNfZG93bl9kZXZcIixcbiAgICBcImZpYl9zeW5jX3VwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBjYWxjdWxhdGluZyB0aGUgYHVwcGVyX2JvdW5kYCBmb3IgbXVsdGlwYXRoIHJvdXRlcy4gSWYgdGhlIGB0b3RhbGAgd2VpZ2h0IG9mIGFsbCB2YWxpZCBuZXh0aG9wcyBpcyAwLCB0aGUgcHJldmlvdXMgY29kZSB3b3VsZCBhdHRlbXB0IHRvIGRpdmlkZSBieSBgdG90YWxgLCBjYXVzaW5nIGEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGB0b3RhbGAgaXMgMCBhbmQgc2V0dGluZyBgdXBwZXJfYm91bmQgPSAtMWAgaW4gdGhhdCBjYXNlLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXJpdGhtZXRpYyBidWcgKGRpdmlkZS1ieS16ZXJvKSB0aGF0IGNhbiBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgb3IgZnV6emluZyAob3IgVUJTQU4pLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBhbnkgaXNzdWVzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBhbGwgbmV4dGhvcHMgaW4gYSBtdWx0aXBhdGggcm91dGUgYXJlIGVpdGhlciBkZWFkIG9yIGxpbmtkb3duLCByZXN1bHRpbmcgaW4gYSB0b3RhbCB3ZWlnaHQgb2YgemVyby4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IHJvdXRpbmcgY29yZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIHJvdXRlIGFkZGl0aW9ucyAoYGZpYl90YWJsZV9pbnNlcnRgLCBgZmliX2NyZWF0ZV9pbmZvYCkgYW5kIG5ldGRldiBzdGF0ZSBjaGFuZ2VzIChgZmliX3N5bmNfZG93bl9kZXZgLCBgZmliX3N5bmNfdXBgKS4gSXQgcmVxdWlyZXMgYENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhgIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjE1LjM3MDkzMjk4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1NTQ2MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzc1NmEwNDFlNzY3ZTkyYTA1ZTgwOWVlNzExZjRmYjc1MmM3ODI1OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxODo0OToxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcXG5pbmRleCAwNDgzNTE5YjdmYjBkLi43YTM2MmYyZTJjMmJkIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xcbisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xcbkBAIC04NzQsNyArODc0LDcgQEAgc3RhdGljIHZvaWQgZmliX3JlYmFsYW5jZShzdHJ1Y3QgZmliX2luZm8gKmZpKVxcbiBcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4gXFx0XFx0aW50IHVwcGVyX2JvdW5kO1xcbiBcXG4tXFx0XFx0aWYgKG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9ERUFEKSB7XFxuK1xcdFxcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0RFQUQpIHtcXG4gXFx0XFx0XFx0dXBwZXJfYm91bmQgPSAtMTtcXG4gXFx0XFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjE1LjkwNzA4NTcyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwNDAwMzQ0NjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiZmliX3RhYmxlX2luc2VydFwiLFxuICAgIFwiZmliX3N5bmNfZG93bl9kZXZcIixcbiAgICBcImZpYl9zeW5jX3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gYWxsIG5leHRob3BzIGluIGEgbXVsdGlwYXRoIHJvdXRlIGFyZSBlaXRoZXIgZGVhZCBvciBsaW5rZG93biwgcmVzdWx0aW5nIGluIGEgdG90YWwgd2VpZ2h0IG9mIHplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NCByb3V0aW5nIGNvcmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayByb3V0ZSBhZGRpdGlvbnMgKGBmaWJfdGFibGVfaW5zZXJ0YCwgYGZpYl9jcmVhdGVfaW5mb2ApIGFuZCBuZXRkZXYgc3RhdGUgY2hhbmdlcyAoYGZpYl9zeW5jX2Rvd25fZGV2YCwgYGZpYl9zeW5jX3VwYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NzU2YTA0MWU3NjdlOTJhMDVlODA5ZWU3MTFmNGZiNzUyYzc4MjU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTg6NDk6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbmluZGV4IDA0ODM1MTliN2ZiMGQuLjdhMzYyZjJlMmMyYmQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1xuQEAgLTg3NCw3ICs4NzQsNyBAQCBzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXG4gXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcbiBcdFx0aW50IHVwcGVyX2JvdW5kO1xuIFxuLVx0XHRpZiAobmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4rXHRcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9ERUFEKSB7XG4gXHRcdFx0dXBwZXJfYm91bmQgPSAtMTtcbiBcdFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZGV2KSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo0OToxNS45MDcwODczNzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ0OTQ3MjQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSb3V0aW5nIFRhYmxlIFJlYmFsYW5jaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGxhbmRlZCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBmaWJfcmViYWxhbmNlYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQncyBtb2RpZnlpbmcgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBgaWYgKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfREVBRClgLiBOb3csIHRoZSBjb2RlIGNoZWNrcyBgaWYgKCF0b3RhbCB8fCBuZXh0aG9wX25oLVx1MDAzZWZpYl9uaF9mbGFncyBcdTAwMjYgUlROSF9GX0RFQUQpYC4gSSBpbW1lZGlhdGVseSBoYXZlIHF1ZXN0aW9ucy4gV2h5IHRoZSBhZGRpdGlvbiBvZiBgIXRvdGFsYD8gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IGBmaWJfcmViYWxhbmNlYCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyB0aGUgcm91dGluZyB0YWJsZSdzIGludGVncml0eSwgZW5zdXJpbmcgdGhlIGJlc3QgcGF0aHMgYXJlIGNob3NlbiwgYW5kIGhhbmRsaW5nIHJvdXRlIGNoYW5nZXMgZWZmaWNpZW50bHkuXG5cbk15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGUgYHRvdGFsYCB2YXJpYWJsZSBsaWtlbHkgcGxheXMgYSByb2xlIGluIHRoZSBsb2dpYyBvZiBob3cgbWFueSBuZXh0LWhvcHMgd2UgaGF2ZSB0byB3b3JrIHdpdGguIEFkZGluZyB0aGF0IGAhdG90YWxgIGNoZWNrIHN1Z2dlc3RzIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBhIHNjZW5hcmlvIHdoZXJlIHRoZXJlIGFyZSBubyB2YWxpZCBuZXh0LWhvcHMsIGFuZCB3ZSdyZSBoYW5kbGluZyB0aGUgXCJlbXB0eVwiIG9yIFwibm8gdmFsaWQgcm91dGVzXCIgY2FzZS4gVGhpcyBjaGFuZ2UgY291bGQgYmUgaW50cm9kdWNlZCB0byBwcmV2ZW50IGEgc3BlY2lmaWMgY29uZGl0aW9uLCBsaWtlbHkgYSBkb3VibGUtZnJlZSwgYSBkaXZpZGUtYnktemVybywgb3Igc29tZSBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3IuIEl0IGNvdWxkIGFsc28gYmUgaW50ZW5kZWQgdG8gbWFrZSBzdXJlIGEgdmFsaWQgcm91dGUgZXhpc3RzLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGFyb3VuZCB0aGlzIGNoYW5nZSB0byB0cnVseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgc3BlY2lmaWMgcHJvYmxlbSB0aGlzIHBhdGNoIGlzIG1lYW50IHRvIGFkZHJlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIG1lYW5pbmcgb2YgYHRvdGFsYCBpcyBvYnZpb3VzbHkga2V5IGhlcmUsIGFsb25nIHdpdGggdGhlIGxhcmdlciBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjI2LjM1NjU2MTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjU5NDk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfcmViYWxhbmNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9NzQyPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy04NTItLyogb25seSBjYWxsZWQgd2hlbiBmaWJfbmggaXMgaW50ZWdyYXRlZCBpbnRvIGZpYl9pbmZvICovXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjg1MzpzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTg1NC17XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9ODkzPXN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MDEtXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjkwMjojZGVmaW5lIGZpYl9yZWJhbGFuY2UoZmkpIGRvIHsgfSB3aGlsZSAoMClcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtOTAzLVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTEzNzY9c3RydWN0IGZpYl9pbmZvICpmaWJfY3JlYXRlX2luZm8oc3RydWN0IGZpYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNTU0LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxNTU1OlxcdFxcdGZpYl9yZWJhbGFuY2UoZmkpO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xNTU2LVxcdH1cXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTQzPWludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwMDItXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjIwMDM6XFx0XFx0ZmliX3JlYmFsYW5jZShmaSk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTIwMDQtXFx0fVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTIwOTI9aW50IGZpYl9zeW5jX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgbmhfZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE0NC1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjE0NTpcXHRcXHRmaWJfcmViYWxhbmNlKGZpKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjE0Ni1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjI2LjQ1OTE2MTAxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NDI2ODA3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyBgZmliX3JlYmFsYW5jZWAgQ2FsbHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGhpdHMgYGZpYl9yZWJhbGFuY2VgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNldmVyYWwga2V5IHBsYWNlczogYGZpYl9jcmVhdGVfaW5mb2AsIGBmaWJfc3luY19kb3duX2RldmAsIGFuZCBgZmliX3N5bmNfdXBgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGl0LCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2Ugd2lsbCBiZSBpbiB0aG9zZSBjb250ZXh0cy4gTGV0J3MgZGl2ZSBpbnRvIHRoZSBgZmliX3JlYmFsYW5jZWAgY29kZSBpdHNlbGYgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbCBjb250ZXh0cyB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NDk6NDMuODg1OTczNDM1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0fVxcbiA4NTE6XFx0XFxuIDg1MjpcXHQvKiBvbmx5IGNhbGxlZCB3aGVuIGZpYl9uaCBpcyBpbnRlZ3JhdGVkIGludG8gZmliX2luZm8gKi9cXG4gODUzOlxcdHN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcXG4gODU0OlxcdHtcXG4gODU1OlxcdFxcdGludCB0b3RhbDtcXG4gODU2OlxcdFxcdGludCB3O1xcbiA4NTc6XFx0XFxuIDg1ODpcXHRcXHRpZiAoZmliX2luZm9fbnVtX3BhdGgoZmkpIFxcdTAwM2MgMilcXG4gODU5OlxcdFxcdFxcdHJldHVybjtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0dG90YWwgPSAwO1xcbiA4NjI6XFx0XFx0Zm9yX25leHRob3BzKGZpKSB7XFxuIDg2MzpcXHRcXHRcXHRpZiAobmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9ERUFEKVxcbiA4NjQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdFxcdGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmgtXFx1MDAzZWZpYl9uaF9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuIDg2NzpcXHRcXHRcXHQgICAgbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9MSU5LRE9XTilcXG4gODY4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHRcXHR0b3RhbCArPSBuaC1cXHUwMDNlZmliX25oX3dlaWdodDtcXG4gODcxOlxcdFxcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0dyA9IDA7XFxuIDg3NDpcXHRcXHRjaGFuZ2VfbmV4dGhvcHMoZmkpIHtcXG4gODc1OlxcdFxcdFxcdGludCB1cHBlcl9ib3VuZDtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0XFx0aWYgKCF0b3RhbCB8fCBuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBSVE5IX0ZfREVBRCkge1xcbiA4Nzg6XFx0XFx0XFx0XFx0dXBwZXJfYm91bmQgPSAtMTtcXG4gODc5OlxcdFxcdFxcdH0gZWxzZSBpZiAoaXBfaWdub3JlX2xpbmtkb3duKG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuIDg4MDpcXHRcXHRcXHRcXHQgICBuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBSVE5IX0ZfTElOS0RPV04pIHtcXG4gODgxOlxcdFxcdFxcdFxcdHVwcGVyX2JvdW5kID0gLTE7XFxuIDg4MjpcXHRcXHRcXHR9IGVsc2Uge1xcbiA4ODM6XFx0XFx0XFx0XFx0dyArPSBuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfd2VpZ2h0O1xcbiA4ODQ6XFx0XFx0XFx0XFx0dXBwZXJfYm91bmQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCl3IFxcdTAwM2NcXHUwMDNjIDMxLFxcbiA4ODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHRvdGFsKSAtIDE7XFxuIDg4NjpcXHRcXHRcXHR9XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNm5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF91cHBlcl9ib3VuZCwgdXBwZXJfYm91bmQpO1xcbiA4ODk6XFx0XFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xcbiA4OTA6XFx0fVxcbiA4OTE6XFx0I2Vsc2UgLyogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCAqL1xcbiA4OTI6XFx0XFxuIDg5MzpcXHRzdGF0aWMgaW50IGZpYl9nZXRfbmhzKHN0cnVjdCBmaWJfaW5mbyAqZmksIHN0cnVjdCBydG5leHRob3AgKnJ0bmgsXFxuIDg5NDpcXHRcXHRcXHQgICAgICAgaW50IHJlbWFpbmluZywgc3RydWN0IGZpYl9jb25maWcgKmNmZyxcXG4gODk1OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDg5NjpcXHR7XFxuIDg5NzpcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJNdWx0aXBhdGggc3VwcG9ydCBub3QgZW5hYmxlZCBpbiBrZXJuZWxcXFwiKTtcXG4gODk4OlxcdFxcbiA4OTk6XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjQ5OjQzLjg4NjEyODM0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNDg0NjI1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTXVsdGktUGF0aCBSb3V0aW5nIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcm91dGluZyBpc3N1ZSwgYW5kIHRoZSBjb2RlIHBvaW50cyBtZSB0byBgZmliX3JlYmFsYW5jZWAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBtdWx0aS1wYXRoIHJvdXRpbmcsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ20gaW50aW1hdGVseSBmYW1pbGlhciB3aXRoIGluIHRoaXMgY29udGV4dC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBjb3JyZWN0LCBjb25zaWRlcmluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEFoLCBoZXJlIHdlIGdvLCBpdCdzIG5lc3RsZWQgdW5kZXIgYCNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgc2VjdGlvbiBpcyBhY3RpdmUuIEkgc2VlIHRoZSBgI2Vsc2VgIGJsb2NrIGF0IGxpbmUgODkxLiBUaGF0IG1lYW5zIGBmaWJfcmViYWxhbmNlYCAqaXMqIGRlZmluZWQgd2hlbiBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgaXMgZW5hYmxlZCwgYXMgSSBzdXNwZWN0ZWQuIE5vdyBJIHdhbnQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBuZXQvaXB2NGAgdG8gY29uZmlybSBleGFjdGx5IGhvdyB0aGF0IGZlYXR1cmUgaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUwOjA0LjM3MDc1NTMzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA1Njc5OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1JPVVRFX01VTFRJUEFUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NjM9Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy03OS1cXG5uZXQvaXB2NC9LY29uZmlnOjgwOmNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcXG5uZXQvaXB2NC9LY29uZmlnLTgxLVxcdGJvb2wgXFxcIklQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTA6MDQuOTgxMzQxOTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQwMzAxMTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNdWx0aXBhdGggUm91dGluZyBCdWdmaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYElQX1JPVVRFX01VTFRJUEFUSGAuIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBpc3N1ZSwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYHRvdGFsYCBpcyB6ZXJvLiBUaGlzIGhhcHBlbnMgd2hlbiBhbGwgdGhlIG5leHQgaG9wcyBpbiBhIG11bHRpcGF0aCByb3V0ZSBhcmUgZWl0aGVyIGRlYWQgb3IgaGF2ZSBhIGxpbmsgZG93biBzdGF0dXMuIEluIHRoYXQgc2NlbmFyaW8sIHRoZSBjYWxjdWxhdGlvbiBgdXBwZXJfYm91bmQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCl3IFx1MDAzY1x1MDAzYyAzMSwgdG90YWwpIC0gMTtgIHdpbGwgaW5ldml0YWJseSByZXN1bHQgaW4gYSBkaXZpc2lvbiBieSB6ZXJvIGVycm9yLlxuXG5UaGUgZml4IGlzIHNpbXBsZTogYWRkIGEgYCF0b3RhbCB8fGAgY29uZGl0aW9uIHRvIHByZXZlbnQgdGhlIHByb2JsZW1hdGljIGNhbGN1bGF0aW9uIHdoZW4gYHRvdGFsYCBpcyB6ZXJvLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBidWdmaXgsIGFuZCBub3RoaW5nIHRvIGNvbXBsaWNhdGUgdGhlIGNvZGUuIERlZmluaXRlbHkgd29ydGggYSB0aG9yb3VnaCBmdXp6aW5nIHJ1bi5cblxuTm93LCBsZXQncyBsb29rIGF0IHdoZXJlIHRoZSBwcm9ibGVtIGNhbiBvY2N1ci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHRoZSBhdHRhY2sgc3VyZmFjZS4gYGZpYl9yZWJhbGFuY2VgIGlzIHN0YXRpYzsgb2theS4gSXQncyBjYWxsZWQgZnJvbSBgZmliX2NyZWF0ZV9pbmZvYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aG9zZSBhcmUgc3RhdGljLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTYsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTA6MjEuMzg0MzU2MDA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQyMTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfY3JlYXRlX2luZm98ZmliX3N5bmNfZG93bl9kZXZ8ZmliX3N5bmNfdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc1LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNzctXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTI0PXZvaWQgZmliX3N5bmNfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBvcmlnX210dSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQyLSAqL1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxOTQzOmludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQ0LXtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMDEwPXN0YXRpYyB2b2lkIGZpYl9zZWxlY3RfZGVmYXVsdChjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbHAsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5MS0gKi9cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjA5MjppbnQgZmliX3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncylcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUwOjIxLjQ2NDc4NTA0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTEzNjQ5NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBDYW5kaWRhdGVzIGZvciBFeGFtaW5hdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIGNvbmNlcHQgSSdtIHdvcmtpbmcgd2l0aCBpcyBjbGVhcmx5ICpkeW5hbWljKi4gVGhpbmdzIGFyZW4ndCBmaXhlZDsgdGhleSdyZSBpbiBmbHV4LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvd2FyZHMgYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zIGFzIHByaW1lIGFyZWFzIG9mIGludGVyZXN0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBgZmliX2NyZWF0ZV9pbmZvYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAuIFRoZXNlIHNlZW0gbGlrZSBsaWtlbHkgc3BvdHMgdG8gZmluZCB0aGUga2luZCBvZiBkeW5hbWlzbSBJJ20gbG9va2luZyBmb3IuXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IGludGVybmFsIHRvIGEgbW9kdWxlLCBvciBhcmUgdGhleSBleHBvcnRlZCBhbmQgcG90ZW50aWFsbHkgdXNlZCBleHRlcm5hbGx5PyBUaGF0IHdpbGwgZGlyZWN0bHkgaW1wYWN0IGhvdyBJIGFwcHJvYWNoIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgbGlua2FnZXMgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGludGVyYWN0aW9ucyBmcm9tIG91dHNpZGUuIEnigJlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhleSdyZSBiZWluZyAqdXNlZCouIExldCdzIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM2MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUwOjI1Ljk3ODQzNzczOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MjY2NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX2NyZWF0ZV9pbmZvfGZpYl9zeW5jX2Rvd25fZGV2fGZpYl9zeW5jX3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNDY1PXN0YXRpYyB2b2lkIGZpYl9kaXNhYmxlX2lwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDY3LXtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNDY4OlxcdGlmIChmaWJfc3luY19kb3duX2RldihkZXYsIGV2ZW50LCBmb3JjZSkpXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ2OS1cXHRcXHRmaWJfZmx1c2goZGV2X25ldChkZXYpKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE0NzU9c3RhdGljIGludCBmaWJfaW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDg0LSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTQ4NTpcXHRcXHRmaWJfc3luY191cChkZXYsIFJUTkhfRl9ERUFEKTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNDg2LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTMxLSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTUzMjpcXHRcXHRmaWJfc3luY191cChkZXYsIFJUTkhfRl9ERUFEKTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTMzLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTU0Mi1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoSUZGX1JVTk5JTkcgfCBJRkZfTE9XRVJfVVApKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NDM6XFx0XFx0XFx0ZmliX3N5bmNfdXAoZGV2LCBSVE5IX0ZfTElOS0RPV04pO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDQtXFx0XFx0ZWxzZVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NDU6XFx0XFx0XFx0ZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZmFsc2UpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDYtXFx0XFx0cnRfY2FjaGVfZmx1c2gobmV0KTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaD0zOD12b2lkIGZpYl9yZWxlYXNlX2luZm8oc3RydWN0IGZpYl9pbmZvICopO1xcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaDozOTpzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbm5ldC9pcHY0L2ZpYl9sb29rdXAuaC00MC1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xMzUyPXN0YXRpYyBib29sIGZpYl92YWxpZF9wcmVmc3JjKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIF9fYmUzMiBmaWJfcHJlZnNyYylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xMzc1LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxMzc2OnN0cnVjdCBmaWJfaW5mbyAqZmliX2NyZWF0ZV9pbmZvKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTEzNzctXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTI0PXZvaWQgZmliX3N5bmNfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBvcmlnX210dSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQyLSAqL1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxOTQzOmludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQ0LXtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0yMDEwPXN0YXRpYyB2b2lkIGZpYl9zZWxlY3RfZGVmYXVsdChjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbHAsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5MS0gKi9cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjA5MjppbnQgZmliX3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncylcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjA5My17XFxuLS1cXG5uZXQvaXB2NC9maWJfdHJpZS5jPTExOTQ9aW50IGZpYl90YWJsZV9pbnNlcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3RhYmxlICp0YixcXG4tLVxcbm5ldC9pcHY0L2ZpYl90cmllLmMtMTIxMS1cXG5uZXQvaXB2NC9maWJfdHJpZS5jOjEyMTI6XFx0ZmkgPSBmaWJfY3JlYXRlX2luZm8oY2ZnLCBleHRhY2spO1xcbm5ldC9pcHY0L2ZpYl90cmllLmMtMTIxMy1cXHRpZiAoSVNfRVJSKGZpKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MDoyNi4wNTMyNjg4NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMzYyNTI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZJQiBJbnNlcnRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgZm9yIGhvdyBGSUIgZW50cmllcyBnZXQgY3JlYXRlZCBhbmQgc3luY2hyb25pemVkLiBJdCBsb29rcyBsaWtlIGBmaWJfY3JlYXRlX2luZm9gIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGBmaWJfdGFibGVfaW5zZXJ0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBhcmUgdHJpZ2dlcmVkIGJ5IG5ldGRldiBldmVudCBoYW5kbGVycy4gR2l2ZW4gdGhhdCBgZmliX3RhYmxlX2luc2VydGAgc2VlbXMgdG8gYmUgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFuIGVudHJ5LCBJIHRoaW5rIGl0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiBMZXQgbWUgZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciBgZmliX3RhYmxlX2luc2VydGAgYW5kIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW5pdGlhbCBpbnNlcnRpb24gbG9naWMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZXNlIG90aGVyIGtleSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MDoyOS43NjY4OTY0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5NTAzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3RhYmxlX2luc2VydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9NjQ2PWludCBpcF9ydF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBydGVudHJ5ICpydClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTY3MS1cXHRcXHRcXHRcXHRpZiAodGIpXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6NjcyOlxcdFxcdFxcdFxcdFxcdGVyciA9IGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YixcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy02NzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjZmcsIE5VTEwpO1xcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9OTMwPXN0YXRpYyBpbnQgaW5ldF9ydG1fbmV3cm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05NDktXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6OTUwOlxcdGVyciA9IGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YiwgXFx1MDAyNmNmZywgZXh0YWNrKTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05NTEtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgY2ZnLmZjX3R5cGUgPT0gUlROX0xPQ0FMKVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTExMj1zdGF0aWMgdm9pZCBmaWJfbWFnaWMoaW50IGNtZCwgaW50IHR5cGUsIF9fYmUzMiBkc3QsIGludCBkc3RfbGVuLFxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTE0Ni1cXHRpZiAoY21kID09IFJUTV9ORVdST1VURSlcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxMTQ3OlxcdFxcdGZpYl90YWJsZV9pbnNlcnQobmV0LCB0YiwgXFx1MDAyNmNmZywgTlVMTCk7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTE0OC1cXHRlbHNlXFxuLS1cXG5uZXQvaXB2NC9maWJfdHJpZS5jPTExOTA9c3RhdGljIHZvaWQgZmliX3JlbW92ZV9hbGlhcyhzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IGtleV92ZWN0b3IgKnRwLFxcbi0tXFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMTkzLS8qIENhbGxlciBtdXN0IGhvbGQgUlROTC4gKi9cXG5uZXQvaXB2NC9maWJfdHJpZS5jOjExOTQ6aW50IGZpYl90YWJsZV9pbnNlcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliX3RhYmxlICp0YixcXG5uZXQvaXB2NC9maWJfdHJpZS5jLTExOTUtXFx0XFx0ICAgICBzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUwOjI5Ljg1Mzg1MDQ0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzczNDkwMDU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NCBSb3V0aW5nIFRhYmxlIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBJUHY0IHJvdXRpbmcgdGFibGUgc3R1ZmYsIGFuZCBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIGNsZWFybHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMgZm9yIGhhbmRsaW5nIGBSVE1fTkVXUk9VVEVgIG5ldGxpbmsgbWVzc2FnZXMuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LCBhIGRlZmluaXRlIGZvY3VzIHN5bWJvbC4gSSBhbHNvIHNlZSB0aGF0IGBmaWJfc3luY19kb3duX2RldmAgYW5kIGBmaWJfc3luY191cGAgc2VlbSByZWxldmFudCwgYnV0IGxldCdzIHNlZSBob3cgdGhleSBmaXQgaW4uIEFoLCB5ZXMsIGBmaWJfc3luY19kb3duX2RldmAgZ2V0cyBjYWxsZWQgZnJvbSBgZmliX2Rpc2FibGVfaXBgIGFuZCBgZmliX25ldGRldl9ldmVudGAsIGFuZCBgZmliX3N5bmNfdXBgIGlzIGludm9rZWQgYnkgYGZpYl9pbmV0YWRkcl9ldmVudGAgYXMgd2VsbC4gU28sIGBmaWJfbmV0ZGV2X2V2ZW50YCwgYGZpYl9pbmV0YWRkcl9ldmVudGAsIGFuZCB0aGF0IGBpbmV0X3J0bV9uZXdyb3V0ZWAg4oCTIHRob3NlIGxvb2sgbGlrZSBwcm9taXNpbmcgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyByb3V0ZSBjaGFuZ2VzIGFyZSBoYW5kbGVkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIG11bHRpcGF0aCByb3V0aW5nIGlzIGVuYWJsZWQsIHNvLCBsZXQncyBsb29rIGF0IGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYC4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGltcGFjdCB0aGlzIGJlaGF2aW9yPyBUaGUgY29yZSBsb2dpYywgSSdtIGFzc3VtaW5nLCBpcyBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYC4gSSdsbCBoYXZlIHRvIGNoZWNrIGBuZXQvaXB2NC9LY29uZmlnYCB0byBzZWUgdGhlIGRldGFpbHMgYXJvdW5kIHRoYXQgYElQX1JPVVRFX01VTFRJUEFUSGAgY29uZmlnIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MTowMy41ODg3NTM3MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0XFx0ICBSb3V0aW5nIGFuZCBUcmFmZmljIENvbnRyb2wgZG9jdW1lbnRhdGlvbiBhdFxcbiAgNzY6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9sYXJ0Yy5vcmcvaG93dG8vbGFydGMucnBkYi5odG1sXFx1MDAzZVxcbiAgNzc6XFx0XFxuICA3ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA3OTpcXHRcXG4gIDgwOlxcdGNvbmZpZyBJUF9ST1VURV9NVUxUSVBBVEhcXG4gIDgxOlxcdFxcdGJvb2wgXFxcIklQOiBlcXVhbCBjb3N0IG11bHRpcGF0aFxcXCJcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSXFxuICA4MzpcXHRcXHRoZWxwXFxuICA4NDpcXHRcXHQgIE5vcm1hbGx5LCB0aGUgcm91dGluZyB0YWJsZXMgc3BlY2lmeSBhIHNpbmdsZSBhY3Rpb24gdG8gYmUgdGFrZW4gaW5cXG4gIDg1OlxcdFxcdCAgYSBkZXRlcm1pbmlzdGljIG1hbm5lciBmb3IgYSBnaXZlbiBwYWNrZXQuIElmIHlvdSBzYXkgWSBoZXJlXFxuICA4NjpcXHRcXHQgIGhvd2V2ZXIsIGl0IGJlY29tZXMgcG9zc2libGUgdG8gYXR0YWNoIHNldmVyYWwgYWN0aW9ucyB0byBhIHBhY2tldFxcbiAgODc6XFx0XFx0ICBwYXR0ZXJuLCBpbiBlZmZlY3Qgc3BlY2lmeWluZyBzZXZlcmFsIGFsdGVybmF0aXZlIHBhdGhzIHRvIHRyYXZlbFxcbiAgODg6XFx0XFx0ICBmb3IgdGhvc2UgcGFja2V0cy4gVGhlIHJvdXRlciBjb25zaWRlcnMgYWxsIHRoZXNlIHBhdGhzIHRvIGJlIG9mXFxuICA4OTpcXHRcXHQgIGVxdWFsIFxcXCJjb3N0XFxcIiBhbmQgY2hvb3NlcyBvbmUgb2YgdGhlbSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIGZhc2hpb25cXG4gIDkwOlxcdFxcdCAgaWYgYSBtYXRjaGluZyBwYWNrZXQgYXJyaXZlcy5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIElQX1JPVVRFX1ZFUkJPU0VcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIklQOiB2ZXJib3NlIHJvdXRlIG1vbml0b3JpbmdcXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MTowMy41ODg5MDAwNjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzQ5OTIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgUm91dGluZyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCdzIHJvdXRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSd2ZSBoaXQgYSBkZXBlbmRlbmN5LiBJIHNlZSB0aGF0IGBJUF9ST1VURV9NVUxUSVBBVEhgIHJlbGllcyBvbiBgSVBfQURWQU5DRURfUk9VVEVSYC4gVGhhdCdzIG5vdCBlbnRpcmVseSBzdXJwcmlzaW5nLCBnaXZlbiB0aGUgbmF0dXJlIG9mIG11bHRpcGF0aCByb3V0aW5nLiBJZiBJIHdhbnQgdG8gZW5hYmxlIHRoYXQgZnVuY3Rpb25hbGl0eSwgSSBmaXJzdCBuZWVkIHRvIGVuc3VyZSB0aGUgYWR2YW5jZWQgcm91dGluZyBmZWF0dXJlcyBhcmUgYnVpbHQtaW4gb3IgYXZhaWxhYmxlIGFzIGEgbW9kdWxlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgSVBfQURWQU5DRURfUk9VVEVSYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIHNlZSBpZiBpdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBzZXQgYXMgYSBtb2R1bGUuIERlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzZXR0aW5nLCBJIG1pZ2h0IG5lZWQgdG8gbWFrZSBzb21lIGFkanVzdG1lbnRzLiBJZiBpdCdzIGRpc2FibGVkLCBJJ2xsIGhhdmUgdG8gd2VpZ2ggdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBpdC4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGRlcGVuZGVuY2llcyBhbmQsIG9mIGNvdXJzZSwgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgcm91dGluZyBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29uZmlnIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjA3LjIzMjQwMzM4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0NjI5ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTU9Y29uZmlnIElQX01VTFRJQ0FTVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNC1cXG5uZXQvaXB2NC9LY29uZmlnOjE1OmNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcXG5uZXQvaXB2NC9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIklQOiBhZHZhbmNlZCByb3V0ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjA3Ljg0NzAzNzgyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE5NjAzODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlcGVuZGVuY3kgQ2hlY2s6IGBJUF9BRFZBTkNFRF9ST1VURVJgKipcblxuT2theSwgdGltZSB0byBkaXZlIGluIGFuZCBtYWtlIHN1cmUgd2UncmUgc3F1YXJlZCBhd2F5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcnVuIGEgZGVwZW5kZW5jeSBhbmFseXNpcyBvbiBgSVBfQURWQU5DRURfUk9VVEVSYC4gV2UgYWxsIGtub3cgdGhlc2UgdGhpbmdzIGNhbiBnZXQgY29tcGxleCBxdWlja2x5LCBlc3BlY2lhbGx5IHdpdGggYWR2YW5jZWQgcm91dGluZyBwcm90b2NvbHMgYW5kIHBvdGVudGlhbGx5IGN1c3RvbSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBsaWJyYXJpZXMsIG90aGVyIHJvdXRpbmcgZGFlbW9ucywgY29uZmlndXJhdGlvbiBmaWxlcywgYW5kIGV2ZW4ga2VybmVsIG1vZHVsZXMgYXJlIHByZXNlbnQsIGNvbXBhdGlibGUsIGFuZCB3b3JraW5nIGFzIGV4cGVjdGVkLiBUaGlzIGlzbid0IGp1c3QgYSBiYXNpYyBwYWNrYWdlIGNoZWNrOyBpdOKAmXMgYSBkZWVwIGRpdmUuIEknbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggYW55IG90aGVyIG5ldHdvcmsgc2VydmljZXMgcnVubmluZywgdmVyc2lvbiBpbmNvbXBhdGliaWxpdGllcyB3aXRoIHRoZSB1bmRlcmx5aW5nIE9TLCBhbmQgb2YgY291cnNlLCBhbnkga25vd24sIG9yIHBvdGVudGlhbCwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBzdGFydCBieSBtYXBwaW5nIHRob3NlIHJlbGF0aW9uc2hpcHM7IG5vIHBvaW50IGJ1aWxkaW5nIGEgaG91c2Ugb2YgY2FyZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MToxMS44NjY2NDQ4NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMDpcXHRcXHQgIGludGVuZCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3BcXG4gIDExOlxcdFxcdCAgb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXMgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIE1vcmVcXG4gIDEyOlxcdFxcdCAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1CT05FIGlzIG9uIHRoZSBXV1cgYXRcXG4gIDEzOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnNhdmV0ei5jb20vbWJvbmUvXFx1MDAzZS4gRm9yIG1vc3QgcGVvcGxlLCBpdCdzIHNhZmUgdG8gc2F5IE4uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIklQOiBhZHZhbmNlZCByb3V0ZXJcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIElmIHlvdSBpbnRlbmQgdG8gcnVuIHlvdXIgTGludXggYm94IG1vc3RseSBhcyBhIHJvdXRlciwgaS5lLiBhcyBhXFxuICAxOTpcXHRcXHQgIGNvbXB1dGVyIHRoYXQgZm9yd2FyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgbmV0d29yayBwYWNrZXRzLCBzYXkgWTsgeW91XFxuICAyMDpcXHRcXHQgIHdpbGwgdGhlbiBiZSBwcmVzZW50ZWQgd2l0aCBzZXZlcmFsIG9wdGlvbnMgdGhhdCBhbGxvdyBtb3JlIHByZWNpc2VcXG4gIDIxOlxcdFxcdCAgY29udHJvbCBhYm91dCB0aGUgcm91dGluZyBwcm9jZXNzLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIFRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiB3b24ndCBkaXJlY3RseSBhZmZlY3QgdGhlIGtlcm5lbDpcXG4gIDI0OlxcdFxcdCAgYW5zd2VyaW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAyNTpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCBhZHZhbmNlZCByb3V0aW5nLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIE5vdGUgdGhhdCB5b3VyIGJveCBjYW4gb25seSBhY3QgYXMgYSByb3V0ZXIgaWYgeW91IGVuYWJsZSBJUFxcbiAgMjg6XFx0XFx0ICBmb3J3YXJkaW5nIGluIHlvdXIga2VybmVsOyB5b3UgY2FuIGRvIHRoYXQgYnkgc2F5aW5nIFkgdG8gXFxcIi9wcm9jXFxuICAyOTpcXHRcXHQgIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGFuZCBcXFwiU3lzY3RsIHN1cHBvcnRcXFwiIGJlbG93IGFuZCBleGVjdXRpbmcgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjExLjg2NjcxODkyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQzOTY5NDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFJvdXRlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYElQX0FEVkFOQ0VEX1JPVVRFUmAgYXBwZWFycyB0byBiZSBhIHN0YW5kYWxvbmUgZmVhdHVyZSwgYXMgaXQgaGFzIG5vIGRlY2xhcmVkIGRlcGVuZGVuY2llcy4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXRzZWxmLCBhbmQgYWxzbyBgSVBfUk9VVEVfTVVMVElQQVRIYCwganVzdCB0byBiZSBjZXJ0YWluLlxuXG5Ob3csIEknbGwgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIHNwYWNlIHRvIHNlZSBpZiBJJ20gbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbC4gVGhlIHJlbGV2YW50IGNvZGUgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSByb3V0aW5nIHNlbWFudGljcyBhcmUgZGVmaW5lZCwgc28gaXQncyBhIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zLlxuXG5BIHF1aWNrIHRob3VnaHQsIGRvIEkgbmVlZCB0byBjb25jZXJuIG15c2VsZiB3aXRoIHdoZXRoZXIgYGZpYl9zZW1hbnRpY3MuY2AgaXMgYWx3YXlzIGNvbXBpbGVkIG9yIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3M/IElmIGl0IGlzbid0IGFsd2F5cyBwcmVzZW50LCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciBhIHBvdGVudGlhbCBjb21waWxlLXRpbWUgZGVwZW5kZW5jeSwgYW5kIHRyYWNrIGRvd24gd2hhdGV2ZXIgY29uZmlnIGlzIHJlc3BvbnNpYmxlIGZvciBpdHMgYXZhaWxhYmlsaXR5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGNvbnNpZGVyYXRpb24gaW4gbWluZCwgYXMgSSBsb29rIHRocm91Z2ggdGhlIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjIzLjMwNjQxNTYyOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA2NDY3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmliX3NlbWFudGljcy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTE0LVxcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE1OlxcdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE2LVxcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MToyMy4zNzcwNjc0NTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NDA0OTg2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBJUHY0IFJvdXRpbmcgU2VtYW50aWNzKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGBmaWJfc2VtYW50aWNzLm9gLCBhbmQgYXMgZXhwZWN0ZWQsIGl0J3MgSVB2NCBvbmx5LiBUaGF0IG5hcnJvd3MgdGhlIGZpZWxkIGRvd24gY29uc2lkZXJhYmx5LiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlIGFyZSBgSVBfQURWQU5DRURfUk9VVEVSYCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAsIHdoaWNoIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzLCBhbmQgYmFzZWQgb24gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwsIEknbSBpbml0aWFsbHkgdGhpbmtpbmcgYWJvdXQgYGluZXRfcnRtX25ld3JvdXRlYCwgYGZpYl9uZXRkZXZfZXZlbnRgLCBhbmQgYGZpYl9pbmV0YWRkcl9ldmVudGAuXG5cbkhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBgZmliX25ldGRldl9ldmVudGAgYW5kIGBmaWJfaW5ldGFkZHJfZXZlbnRgIGFyZSBub3RpZmllciBjYWxsYmFja3MuIFRoYXQgbWVhbnMgdGhleSBhcmUgbGlrZWx5IHRyaWdnZXJlZCBieSBzcGVjaWZpYyBldmVudHMuIExldCBtZSBzZWUgaWYgSSBjYW4gZmlndXJlIG91dCAqd2hlcmUqIHRob3NlIGV2ZW50cyBvcmlnaW5hdGUuIEFoLCByaWdodCwgYGZpYl9uZXRkZXZfZXZlbnRgIGlzIHRpZWQgdG8gbmV0ZGV2IGV2ZW50cyBsaWtlIGBORVRERVZfVVBgIGFuZCBgTkVUREVWX0RPV05gLiBTaW1pbGFybHksIGBmaWJfaW5ldGFkZHJfZXZlbnRgIGhvb2tzIGludG8gaW5ldGFkZHIgZXZlbnRzLCBhbHNvIGxpa2UgYE5FVERFVl9VUGAgYW5kIGBORVRERVZfRE9XTmAuXG5cbkZ1enppbmcgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBhIGNsZWFyIHdpbjsgaXQgZGlyZWN0bHkgbWFuaXB1bGF0ZXMgdGhlIHJvdXRpbmcgdGFibGUgYnkgYWRkaW5nIHJvdXRlcy4gVGhhdCdzIGEgZGVmaW5pdGUgdGFyZ2V0LiBOb3csIEkgZGlkIHNlZSBgZmliX3N5bmNfZG93bl9kZXZgIGFuZCBgZmliX3N5bmNfdXBgIGV4cG9ydGVkLCBidXQgdGhvc2Ugc2VlbSB0byBiZSBjYWxsZWQgKmJ5KiB0aGUgbm90aWZpZXIgY2FsbGJhY2tzLiBOb3QgaWRlYWwgZm9yIGEgZGlyZWN0IGZ1enppbmcgdGFyZ2V0LlxuXG5TbywgdGhlIGNvcmUgc2V0IGZvciBmdXp6aW5nIHdpbGwgYmUgYGluZXRfcnRtX25ld3JvdXRlYCwgYGZpYl9uZXRkZXZfZXZlbnRgLCBhbmQgYGZpYl9pbmV0YWRkcl9ldmVudGAuIEJ1dCB3YWl0Li4uIGNoZWNraW5nIGBmaWJfbmV0ZGV2X2V2ZW50YC4uLiBpdCdzICpzdGF0aWMqLiBPa2F5LCBsZXQgbWUgY29uZmlybSBpdCdzIHJlYWxseSBzdGF0aWMsIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIHNvbWV0aGluZy4gVGhhdCBjaGFuZ2VzIG15IHN0cmF0ZWd5IHNvbWV3aGF0OyBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gdGhhdCB0cmlnZ2VycyBgZmliX25ldGRldl9ldmVudGAgaWYgaXQgaXMgaW5kZWVkIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MTozNS4wMTc1NjkxNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Mjc4NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9uZXRkZXZfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE0NzU9c3RhdGljIGludCBmaWJfaW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTA1LVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MDY6c3RhdGljIGludCBmaWJfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MDcte1xcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTU2OT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZpYl9uZXRkZXZfbm90aWZpZXIgPSB7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTU3MDpcXHQubm90aWZpZXJfY2FsbCA9IGZpYl9uZXRkZXZfZXZlbnQsXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTU3MS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MTozNS4xMDI4NTMxODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMDE2MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgSW1wbGljYXRpb25zIG9mIFN0YXRpYyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiByZWxpZXMgb24gc3RhdGljIGZ1bmN0aW9ucy4gVGhlIGluc3RydWN0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGFyZ3VtZW50IGlzIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIHdoaWNoIGNhbiBjYXVzZSBwcm9ibGVtcy4gQnV0LCB3YWl0LCBgZmliX25ldGRldl9ldmVudGAgaXMgYSAqbm90aWZpZXIgY2FsbGJhY2sqLCBtZWFuaW5nIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaGVyZWZvcmUsIGl0ICpjYW4ndCogYmUgaW5saW5lZC4gU28sIHRoZSBvcmlnaW5hbCBjb25jZXJuIGlzIG1vb3QsIGhlcmUuXG5cbkhtbW0sIGJ1dCB3aGF0IGFib3V0IGFsdGVybmF0aXZlIEFQSSBjYWxscz8gQ291bGQgYGZpYl9zeW5jX2Rvd25fZGV2YCBvciBgZmliX3N5bmNfdXBgIHdvcms/IFRoZXkgYXJlIG5vbi1zdGF0aWMsIHNvIHRoZXkgKmNvdWxkKiBiZSBleHBvcnRlZC4gVGhhdCB3b3VsZCBiZSBpZGVhbC4gSSBzaG91bGQgY2hlY2sgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSwgaW4gZmFjdCwgZXhwb3J0ZWQuIFRoYXQncyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUxOjQwLjIxMzAxODY4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMzg5MTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmZpYl9zeW5jX2Rvd25fZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTE6NDAuMjczMTY1NjgyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjA0NTg2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLUV4cG9ydGVkLCBOb24tU3RhdGljIFN5bWJvbHMgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIHNvIHRoZXNlIHN5bWJvbHMgYXJlbid0IGV4cG9zZWQgdmlhIGBFWFBPUlRfU1lNQk9MYCwgd2hpY2ggbWVhbnMgdGhleSdyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGlzIG1vZHVsZSBvciB0aGUga2VybmVsIGl0c2VsZi4gQnV0IHRoZXkncmUgKmFsc28qIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgdW51c3VhbC4gVHlwaWNhbGx5LCBpbnRlcm5hbCBzeW1ib2xzIGFyZSBzdGF0aWMgdG8gcHJldmVudCBhY2NpZGVudGFsIGV4dGVybmFsIGxpbmthZ2UuIFRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkncmUgbm9uLXN0YXRpYyB3aXRob3V0IGJlaW5nIGV4cG9ydGVkLiBUaGUgY29tcGlsZXIgc2hvdWxkIHdhcm4gaWYgeW91IGNyZWF0ZSBhIG5vbi1zdGF0aWMgc3ltYm9sIHRoYXQgaXMgbm90IGV4cG9ydGVkLlxuXG5MZXQgbWUgZXhhbWluZSBgZmliX3N5bmNfZG93bl9kZXZgIGFuZCBgZmliX3N5bmNfdXBgIHNwZWNpZmljYWxseS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBzZWUgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQgYW5kIHdoZXJlIHRoZXkgYXJlIGNhbGxlZC4gTXkgbmV4dCB0aG91Z2h0IGlzIGhvdyB0aGV5IGFyZSBiZWluZyB1c2VkLiBBcmUgdGhleSB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQsIG9yIGFyZSB0aGV5IHBvdGVudGlhbGx5IGJlaW5nIGFjY2Vzc2VkIGZyb20gYW5vdGhlciBwYXJ0IG9mIHRoZSBrZXJuZWwgaW4gYSByb3VuZGFib3V0IHdheSDigJMgcGVyaGFwcyB2aWEgYSBmdW5jdGlvbiBwb2ludGVyIG9yIGluZGlyZWN0IGxpbmthZ2UgSSdtIG5vdCBpbW1lZGlhdGVseSBzZWVpbmc/IFRoZXJlIGNvdWxkIGJlIGEgY2xldmVyIGRlc2lnbiBwYXR0ZXJuIGluIHBsYXksIG9yLCBwb3RlbnRpYWxseSwgYSBzdWJ0bGUgYnVnIHdhaXRpbmcgdG8gYmUgdW5jb3ZlcmVkLiBMZXQncyBkZWx2ZSBpbiBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTc5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTE6NDQuMzkzNjI3NDQ5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI0MzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfc3luY19kb3duX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTQ2NT1zdGF0aWMgdm9pZCBmaWJfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTQ2Ny17XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTQ2ODpcXHRpZiAoZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZm9yY2UpKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE0NjktXFx0XFx0ZmliX2ZsdXNoKGRldl9uZXQoZGV2KSk7XFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNTA2PXN0YXRpYyBpbnQgZmliX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDQtXFx0XFx0ZWxzZVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1NDU6XFx0XFx0XFx0ZmliX3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCwgZmFsc2UpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1NDYtXFx0XFx0cnRfY2FjaGVfZmx1c2gobmV0KTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz0xOTI0PXZvaWQgZmliX3N5bmNfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBvcmlnX210dSlcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQyLSAqL1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoxOTQzOmludCBmaWJfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCBib29sIGZvcmNlKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0xOTQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTE6NDQuNDYyODc0ODM0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2Mzk2MDYwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUm91dGUgU3luY2hyb25pemF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyByb3V0ZSBzeW5jaHJvbml6YXRpb24gbG9naWMsIGFuZCBpdCdzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgYXQgYGluZXRfcnRtX25ld3JvdXRlYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAgYXMgdGhlIGtleSBmdW5jdGlvbnMuIEJ1dCBoYW5nIG9uLCBgZmliX3N5bmNfZG93bl9kZXZgIGFuZCBgZmliX3N5bmNfdXBgIGFyZSB0cmlnZ2VyZWQgYnkgYGZpYl9uZXRkZXZfZXZlbnRgIGFuZCBgZmliX2luZXRhZGRyX2V2ZW50YC4gTm93LCBhcmUgdGhvc2UgdGhlICpvbmx5KiBjYWxsZXJzIG9mIHRob3NlIHR3byBmdW5jdGlvbnM/IExldCBtZSBzZWUuLi4gQWhhISBgZmliX2Rpc2FibGVfaXBgIGFsc28gY2FsbHMgYGZpYl9zeW5jX2Rvd25fZGV2YC4gQW5kIGd1ZXNzIHdoYXQ/IGBmaWJfZGlzYWJsZV9pcGAgaXRzZWxmIGlzIGNhbGxlZCBieSB0aG9zZSBzYW1lIGBmaWJfaW5ldGFkZHJfZXZlbnRgIGFuZCBgZmliX25ldGRldl9ldmVudGAgZnVuY3Rpb25zLiBBbHJpZ2h0LCBzbyB0aGUgcmVhbCBlbnRyeSBwb2ludHMsIHRoZSBvbmVzIHRvIGZvY3VzIG9uIGZvciB0aGlzIHByb2Nlc3MsIGFyZSByZWFsbHkgYGluZXRfcnRtX25ld3JvdXRlYCwgYGZpYl9zeW5jX2Rvd25fZGV2YCwgYW5kIGBmaWJfc3luY191cGAuIEhvbGQgb24sIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoYXQgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBub3Qgc3RhdGljLCB0aGF0IHdvdWxkIGJlIHZlcnkgdXNlZnVsLCBsZXQgbWUgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUyOjAwLjg1ODkzODE5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDA2OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfcnRtX25ld3JvdXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9maWJfZnJvbnRlbmQuYz04OTY9c3RhdGljIGludCBpbmV0X3J0bV9kZWxyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTkyOS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzo5MzA6c3RhdGljIGludCBpbmV0X3J0bV9uZXdyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy05MzEtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNzExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBmaWJfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNzEyLVxcdHsucHJvdG9jb2wgPSBQRl9JTkVULCAubXNndHlwZSA9IFJUTV9ORVdST1VURSxcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNzEzOlxcdCAuZG9pdCA9IGluZXRfcnRtX25ld3JvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE3MTQtXFx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX0RFTFJPVVRFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjowMC45NjA5NDk1MDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1NTE5MjM0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBoYW5kbGUgdGhlc2UgZnVuY3Rpb24gY2FsbHMgZm9yIG91ciBwdXJwb3Nlcy4gSXQgbG9va3MgbGlrZSBgaW5ldF9ydG1fbmV3cm91dGVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbml0aWFsbHkgbWFrZXMgbWUgdGhpbmsgaXQncyBpbmxpbmVkLiBIb3dldmVyLCBJIHNlZSBpdHMgYWRkcmVzcyBpcyBhY3R1YWxseSB1c2VkIGluIGBmaWJfcnRubF9tc2dfaGFuZGxlcnNgLiBUaGlzIG1lYW5zIGl0ICppc24ndCogYmVpbmcgaW5saW5lZCwgZXZlbiB0aG91Z2ggaXQncyB0ZWNobmljYWxseSBhIHN0YXRpYyBmdW5jdGlvbi5cblxuVGhlIGluc3RydWN0aW9ucyBJJ20gd29ya2luZyBmcm9tIHNheSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgYGluZXRfcnRtX25ld3JvdXRlYCBpcyBoYW5kbGluZyBuZXRsaW5rLCBpdCdzIGRlZmluaXRlbHkgbm90IGlubGluZWQgYW5kIGZpdHMgdGhlIGJpbGwuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFuZCBtYWludGFpbiBjb25zaXN0ZW5jeSB3aXRoIHRoZSBndWlkZWxpbmVzLCBJIHRoaW5rIGl0J3MgYWxzbyB3b3J0aCBpbmNsdWRpbmcgYGZpYl90YWJsZV9pbnNlcnRgIGluIHRoZSBzb2x1dGlvbiwgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGlzIGFsc28gbm9uLXN0YXRpYywgcHJvdmlkaW5nIGFuIGV4dHJhIGxheWVyIG9mIGNsYXJpdHkuIE5vdyBJJ2xsIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZmliX3RhYmxlX2luc2VydGAgdG8gYmUgY29tcGxldGVseSBjb25maWRlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjY1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUyOjEyLjUxMjg3NjU2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzNTUxNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl90YWJsZV9pbnNlcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTY0Nj1pbnQgaXBfcnRfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgcnRlbnRyeSAqcnQpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy02NzEtXFx0XFx0XFx0XFx0aWYgKHRiKVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjY3MjpcXHRcXHRcXHRcXHRcXHRlcnIgPSBmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtNjczLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y2ZnLCBOVUxMKTtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTkzMD1zdGF0aWMgaW50IGluZXRfcnRtX25ld3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtOTQ5LVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjk1MDpcXHRlcnIgPSBmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsIFxcdTAwMjZjZmcsIGV4dGFjayk7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtOTUxLVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGNmZy5mY190eXBlID09IFJUTl9MT0NBTClcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTExMTI9c3RhdGljIHZvaWQgZmliX21hZ2ljKGludCBjbWQsIGludCB0eXBlLCBfX2JlMzIgZHN0LCBpbnQgZHN0X2xlbixcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTExNDYtXFx0aWYgKGNtZCA9PSBSVE1fTkVXUk9VVEUpXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTE0NzpcXHRcXHRmaWJfdGFibGVfaW5zZXJ0KG5ldCwgdGIsIFxcdTAwMjZjZmcsIE5VTEwpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTExNDgtXFx0ZWxzZVxcbi0tXFxubmV0L2lwdjQvZmliX3RyaWUuYz0xMTkwPXN0YXRpYyB2b2lkIGZpYl9yZW1vdmVfYWxpYXMoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCBrZXlfdmVjdG9yICp0cCxcXG4tLVxcbm5ldC9pcHY0L2ZpYl90cmllLmMtMTE5My0vKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwuICovXFxubmV0L2lwdjQvZmliX3RyaWUuYzoxMTk0OmludCBmaWJfdGFibGVfaW5zZXJ0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYl90YWJsZSAqdGIsXFxubmV0L2lwdjQvZmliX3RyaWUuYy0xMTk1LVxcdFxcdCAgICAgc3RydWN0IGZpYl9jb25maWcgKmNmZywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjoxMi45NzY0MzM4NDdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MzgwNzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBLZXkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSXQgc2VlbXMgbGlrZSBgZmliX3RhYmxlX2luc2VydGAgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBpdCBhIGdvb2Qgc3ltYm9sIHRvIHN0YXJ0IHdpdGguIEFuZCBzaW5jZSBpdCdzIG5vbi1zdGF0aWMsIHRoYXQgbGlrZWx5IG1lYW5zIGl0IGlzIHVzZWQgZXh0ZXJuYWxseS4gVGhhdCBtYWtlcyBpdCBtb3JlIGludGVyZXN0aW5nIGZvciB3aGF0IEkgd2FudCB0byBhY2NvbXBsaXNoLiBUaGVuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGZpYl9zeW5jX2Rvd25fZGV2YCBhbmQgYGZpYl9zeW5jX3VwYCBpbiB0aGUgYW5hbHlzaXMsIHNpbmNlIHRoZXkncmUgcHJvYmFibHkgdGllZCBpbiBzb21laG93LlxuXG5XYWl0IGEgbWludXRlLCB3aGF0IGFib3V0IGBmaWJfY3JlYXRlX2luZm9gPyBUaGF0J3MgYWxzbyBub24tc3RhdGljLCBhbmQgaXQgYWN0dWFsbHkgY2FsbHMgYGZpYl9yZWJhbGFuY2VgLiBPa2F5LCB0aGF0J3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gaW5jbHVkZSBgZmliX2NyZWF0ZV9pbmZvYCBpbiB0aGUgY29yZSBzZXQgb2YgZnVuY3Rpb25zIHRvIGFuYWx5emUgYXMgd2VsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC5cblxuTm93LCBiZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgYElQX1JPVVRFX01VTFRJUEFUSGAgYW5kIGBJUF9BRFZBTkNFRF9ST1VURVJgIGNvbWluZyBpbnRvIHBsYXkgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGF0IHBsYXksIG9yIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSB0aGF0IGlzIGFmZmVjdGVkIGJ5IHRoZXNlIGNvbmZpZ3MuIEp1c3QgdG8gbWFrZSBzdXJlLCBJIHNob3VsZCBjaGVjayBgSVBfQURWQU5DRURfUk9VVEVSYCBhZ2FpbiB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1OTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6MjEuMzIwMjQ1MDQxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI4MTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz01PWNvbmZpZyBJUF9NVUxUSUNBU1RcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTQtXFxubmV0L2lwdjQvS2NvbmZpZzoxNTpjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXFxubmV0L2lwdjQvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJJUDogYWR2YW5jZWQgcm91dGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjoyMS4zNzM1MzcyNjdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNDcxNzk3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgSVBfQURWQU5DRURfUk9VVEVSYCBpdHNlbGYgZG9lc24ndCBoYXZlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGFjY291bnRlZCBmb3IgKmV2ZXJ5dGhpbmcqIHRoYXQgbWlnaHQgYmUgaW5kaXJlY3RseSByZXF1aXJlZC4gVGhlIGtleSBpcyB0byBleGFtaW5lIHRoZSBpbXBhY3Qgb2YgcmVsYXRlZCBjb25maWd1cmF0aW9ucy5cblxuUmlnaHQsIGBmaWJfcmViYWxhbmNlYC4uLiB0aGF0J3MgdGhlIG9uZS4gSSByZW1lbWJlciBpdCdzIG9ubHkgZGVmaW5lZCB3aGVuIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIGBJUF9ST1VURV9NVUxUSVBBVEhgIHRoZSBjcnVjaWFsIGZhY3RvciBoZXJlLiBBbmQsIGFzIGEgbWF0dGVyIG9mIGZhY3QsIGBJUF9BRFZBTkNFRF9ST1VURVJgIGlzIHRoZSAqcGFyZW50KiBjb25maWcgdGhhdCBhY3R1YWxseSBtYWtlcyBgSVBfUk9VVEVfTVVMVElQQVRIYCBhdmFpbGFibGUgdG8gYmVnaW4gd2l0aC5cblxuVGhlcmVmb3JlLCB0aGUgRW5hYmxlQ29uZmlncyBsaXN0IHdpbGwgbmVlZCBib3RoIG9mIHRoZXNlLiBTbywgdGhlIGNvcnJlY3Qgd2F5IHRvIHNwZWNpZnkgdGhlIGRlcGVuZGVuY2llcyBpczogYEVuYWJsZUNvbmZpZ3M6IFtcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLCBcIklQX1JPVVRFX01VTFRJUEFUSFwiXWAuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhYm91dCBgZmliX3JlYmFsYW5jZWAgb25lIG1vcmUgdGltZS4gTm8gaGFybSBpbiBiZWluZyB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6MzEuNDIwNzE5ODQ2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdH1cXG4gODUxOlxcdFxcbiA4NTI6XFx0Lyogb25seSBjYWxsZWQgd2hlbiBmaWJfbmggaXMgaW50ZWdyYXRlZCBpbnRvIGZpYl9pbmZvICovXFxuIDg1MzpcXHRzdGF0aWMgdm9pZCBmaWJfcmViYWxhbmNlKHN0cnVjdCBmaWJfaW5mbyAqZmkpXFxuIDg1NDpcXHR7XFxuIDg1NTpcXHRcXHRpbnQgdG90YWw7XFxuIDg1NjpcXHRcXHRpbnQgdztcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0aWYgKGZpYl9pbmZvX251bV9wYXRoKGZpKSBcXHUwMDNjIDIpXFxuIDg1OTpcXHRcXHRcXHRyZXR1cm47XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdHRvdGFsID0gMDtcXG4gODYyOlxcdFxcdGZvcl9uZXh0aG9wcyhmaSkge1xcbiA4NjM6XFx0XFx0XFx0aWYgKG5oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBSVE5IX0ZfREVBRClcXG4gODY0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4NjU6XFx0XFxuIDg2NjpcXHRcXHRcXHRpZiAoaXBfaWdub3JlX2xpbmtkb3duKG5oLVxcdTAwM2VmaWJfbmhfZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiA4Njc6XFx0XFx0XFx0ICAgIG5oLVxcdTAwM2VmaWJfbmhfZmxhZ3MgXFx1MDAyNiBSVE5IX0ZfTElOS0RPV04pXFxuIDg2ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODY5OlxcdFxcbiA4NzA6XFx0XFx0XFx0dG90YWwgKz0gbmgtXFx1MDAzZWZpYl9uaF93ZWlnaHQ7XFxuIDg3MTpcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XFxuIDg3MjpcXHRcXG4gODczOlxcdFxcdHcgPSAwO1xcbiA4NzQ6XFx0XFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XFxuIDg3NTpcXHRcXHRcXHRpbnQgdXBwZXJfYm91bmQ7XFxuIDg3NjpcXHRcXG4gODc3OlxcdFxcdFxcdGlmICghdG90YWwgfHwgbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0RFQUQpIHtcXG4gODc4OlxcdFxcdFxcdFxcdHVwcGVyX2JvdW5kID0gLTE7XFxuIDg3OTpcXHRcXHRcXHR9IGVsc2UgaWYgKGlwX2lnbm9yZV9saW5rZG93bihuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfZGV2KSBcXHUwMDI2XFx1MDAyNlxcbiA4ODA6XFx0XFx0XFx0XFx0ICAgbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0xJTktET1dOKSB7XFxuIDg4MTpcXHRcXHRcXHRcXHR1cHBlcl9ib3VuZCA9IC0xO1xcbiA4ODI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gODgzOlxcdFxcdFxcdFxcdHcgKz0gbmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX3dlaWdodDtcXG4gODg0OlxcdFxcdFxcdFxcdHVwcGVyX2JvdW5kID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKCh1NjQpdyBcXHUwMDNjXFx1MDAzYyAzMSxcXG4gODg1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB0b3RhbCkgLSAxO1xcbiA4ODY6XFx0XFx0XFx0fVxcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZuZXh0aG9wX25oLVxcdTAwM2VmaWJfbmhfdXBwZXJfYm91bmQsIHVwcGVyX2JvdW5kKTtcXG4gODg5OlxcdFxcdH0gZW5kZm9yX25leHRob3BzKGZpKTtcXG4gODkwOlxcdH1cXG4gODkxOlxcdCNlbHNlIC8qIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggKi9cXG4gODkyOlxcdFxcbiA4OTM6XFx0c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxcbiA4OTQ6XFx0XFx0XFx0ICAgICAgIGludCByZW1haW5pbmcsIHN0cnVjdCBmaWJfY29uZmlnICpjZmcsXFxuIDg5NTpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA4OTY6XFx0e1xcbiA4OTc6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTXVsdGlwYXRoIHN1cHBvcnQgbm90IGVuYWJsZWQgaW4ga2VybmVsXFxcIik7XFxuIDg5ODpcXHRcXG4gODk5OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjozMS40MjA4ODMxNTZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0OTYxMzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIFJvdXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBuYXN0eSBkaXZpZGUtYnktemVybyB2dWxuZXJhYmlsaXR5LiBTcGVjaWZpY2FsbHksIGl0J3MgaW4gYGZpYl9yZWJhbGFuY2VgLCBhbmQgaXQncyB0cmlnZ2VyZWQgd2hlbiBhIG11bHRpcGF0aCByb3V0ZSBoYXMgKmFsbCogaXRzIG5leHRob3BzIGluIGEgZGVhZCBvciBsaW5rZG93biBzdGF0ZS4gVGhhdCB3b3VsZCBsZWFkIHRvIGEgYHRvdGFsYCB3ZWlnaHQgb2YgemVybywgYW5kIHRoZW4gd2UncmUgZGl2aWRpbmcgYnkgemVybyDigJMgY2xhc3NpYyBidWcgbWF0ZXJpYWwuIFRoZSBmaXggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogY2hlY2sgYCF0b3RhbGAgYW5kIHNldCBgdXBwZXJfYm91bmQgPSAtMWAgYWNjb3JkaW5nbHkuIFNpbXBsZSwgYnV0IGNyaXRpY2FsIGZvciBzdGFiaWxpdHkuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNsZWFyIGJ1ZyBmaXggaW4gdGhlIElQdjQgcm91dGluZyBjb3JlLCBub3RoaW5nIGVsc2UuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcG9pbnRzIG9mIGVudHJ5LCBhbmQgSSBzZWUgdGhleSBhcmUgYWxsIG92ZXIgdGhlIHBsYWNlLiBJIGNhbiBzZWUgdGhlIHJlYWNoYWJsZSBwYXRocyB0aHJvdWdoIGBmaWJfY3JlYXRlX2luZm9gLCBgZmliX3N5bmNfZG93bl9kZXZgLCBhbmQgYGZpYl9zeW5jX3VwYCBhbmQgYGZpYl90YWJsZV9pbnNlcnRgLiBUaGVzZSBhcmUgYWxsIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBhZGRpbmcgcm91dGVzIHRocm91Z2ggbmV0bGluayBvciBoYW5kbGluZyBuZXR3b3JrIGRldmljZSAobmV0ZGV2KSBldmVudHMuIFRoYXQgbmV0bGluayBwYXRoIGlzIGEgY2xlYXIgYXR0YWNrIHZlY3RvciBoZXJlLlxuXG5CYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4sIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIGlzIHJ1bm5pbmcgd2l0aCBgSVBfQURWQU5DRURfUk9VVEVSYCBhbmQgYElQX1JPVVRFX01VTFRJUEFUSGAgZW5hYmxlZCwgc2luY2UgaXQncyByZXF1aXJlZCBmb3IgdGhpcyBtdWx0aXBhdGggcm91dGluZyB0byBldmVuIGJlIHBvc3NpYmxlLiBUaGlzIHBhdGNoIHNlZW1zIGxvdyBoYW5naW5nIGZydWl0IGZvciBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMSwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjozOS43NzA0OTk5NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDAyODAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gICAgXCJJUF9ST1VURV9NVUxUSVBBVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaWJfY3JlYXRlX2luZm9cIixcbiAgICBcImZpYl90YWJsZV9pbnNlcnRcIixcbiAgICBcImZpYl9zeW5jX2Rvd25fZGV2XCIsXG4gICAgXCJmaWJfc3luY191cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGl2aWRlLWJ5LXplcm8gYnVnIGluIGBmaWJfcmViYWxhbmNlYCB3aGVuIGFsbCBuZXh0aG9wcyBpbiBhIG11bHRpcGF0aCByb3V0ZSBhcmUgZWl0aGVyIGRlYWQgb3IgbGlua2Rvd24sIHJlc3VsdGluZyBpbiBhIHRvdGFsIHdlaWdodCBvZiB6ZXJvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjQgcm91dGluZyBjb3JlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgcm91dGUgYWRkaXRpb25zIChgZmliX3RhYmxlX2luc2VydGAsIGBmaWJfY3JlYXRlX2luZm9gKSBhbmQgbmV0ZGV2IHN0YXRlIGNoYW5nZXMgKGBmaWJfc3luY19kb3duX2RldmAsIGBmaWJfc3luY191cGApLiBJdCByZXF1aXJlcyBgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSGAgdG8gYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQX1JPVVRFX01VTFRJUEFUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpYl9jcmVhdGVfaW5mb1wiLFxuICAgIFwiZmliX3RhYmxlX2luc2VydFwiLFxuICAgIFwiZmliX3N5bmNfZG93bl9kZXZcIixcbiAgICBcImZpYl9zeW5jX3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gYWxsIG5leHRob3BzIGluIGEgbXVsdGlwYXRoIHJvdXRlIGFyZSBlaXRoZXIgZGVhZCBvciBsaW5rZG93biwgcmVzdWx0aW5nIGluIGEgdG90YWwgd2VpZ2h0IG9mIHplcm8uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NCByb3V0aW5nIGNvcmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayByb3V0ZSBhZGRpdGlvbnMgKGBmaWJfdGFibGVfaW5zZXJ0YCwgYGZpYl9jcmVhdGVfaW5mb2ApIGFuZCBuZXRkZXYgc3RhdGUgY2hhbmdlcyAoYGZpYl9zeW5jX2Rvd25fZGV2YCwgYGZpYl9zeW5jX3VwYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjozOS45MTA1MzczNVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MzE4OTg1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxODo1MjozOS45MTMzNTg3MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNTcyOTA3MzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkaXZpZGUtYnktemVybyBidWcgaW4gYGZpYl9yZWJhbGFuY2VgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGB1cHBlcl9ib3VuZGAgZm9yIG11bHRpcGF0aCByb3V0ZXMuIElmIHRoZSBgdG90YWxgIHdlaWdodCBvZiBhbGwgdmFsaWQgbmV4dGhvcHMgaXMgMCwgdGhlIHByZXZpb3VzIGNvZGUgd291bGQgYXR0ZW1wdCB0byBkaXZpZGUgYnkgYHRvdGFsYCwgY2F1c2luZyBhIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbi4gVGhlIHBhdGNoIHByZXZlbnRzIHRoaXMgYnkgZXhwbGljaXRseSBjaGVja2luZyBpZiBgdG90YWxgIGlzIDAgYW5kIHNldHRpbmcgYHVwcGVyX2JvdW5kID0gLTFgIGluIHRoYXQgY2FzZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGFyaXRobWV0aWMgYnVnIChkaXZpZGUtYnktemVybykgdGhhdCBjYW4gYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIGZ1enppbmcgKG9yIFVCU0FOKS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mby1sZWFrcywgb3IgYW55IGlzc3VlcyB0aGF0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzc1NmEwNDFlNzY3ZTkyYTA1ZTgwOWVlNzExZjRmYjc1MmM3ODI1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDE4OjQ5OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG5pbmRleCAwNDgzNTE5YjdmYjBkLi43YTM2MmYyZTJjMmJkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jXG4rKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmNcbkBAIC04NzQsNyArODc0LDcgQEAgc3RhdGljIHZvaWQgZmliX3JlYmFsYW5jZShzdHJ1Y3QgZmliX2luZm8gKmZpKVxuIFx0Y2hhbmdlX25leHRob3BzKGZpKSB7XG4gXHRcdGludCB1cHBlcl9ib3VuZDtcbiBcbi1cdFx0aWYgKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfREVBRCkge1xuK1x0XHRpZiAoIXRvdGFsIHx8IG5leHRob3BfbmgtXHUwMDNlZmliX25oX2ZsYWdzIFx1MDAyNiBSVE5IX0ZfREVBRCkge1xuIFx0XHRcdHVwcGVyX2JvdW5kID0gLTE7XG4gXHRcdH0gZWxzZSBpZiAoaXBfaWdub3JlX2xpbmtkb3duKG5leHRob3BfbmgtXHUwMDNlZmliX25oX2RldikgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgbmV4dGhvcF9uaC1cdTAwM2VmaWJfbmhfZmxhZ3MgXHUwMDI2IFJUTkhfRl9MSU5LRE9XTikge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6MzkuOTEzMzYwMTk5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MzkxMTkwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBSb3V0aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGZpYl9yZWJhbGFuY2VgIGluIGBuZXQvaXB2NC9maWJfc2VtYW50aWNzLmNgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0J3MgbW9kaWZ5aW5nIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjaGVjayBmb3IgYCF0b3RhbGAgYmVmb3JlIGV4YW1pbmluZyB0aGUgYFJUTkhfRl9ERUFEYCBmbGFnIG9uIHRoZSBuZXh0IGhvcC4gTXkgZ3V0IHNheXMgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBvciwgcG9zc2libHksIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIHNjZW5hcmlvIHdoZXJlIGB0b3RhbGAgaXMgemVyby4gQSB6ZXJvIHZhbHVlIGluIGB0b3RhbGAsIGRlcGVuZGluZyBvbiB3aGVyZSBpdCdzIHVzZWQsIGNvdWxkIGxlYWQgdG8gc29tZSBuYXN0eSBwcm9ibGVtcy5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmaWJfcmViYWxhbmNlYCB0byBjb25maXJtIHRoaXMgaHVuY2ggYW5kIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQuIEkgbmVlZCB0byBzZWUgd2hhdCBgdG90YWxgIHJlcHJlc2VudHMsIGhvdyBpdCdzIGNhbGN1bGF0ZWQsIGFuZCBob3cgaXQncyB1c2VkIHdpdGggYG5leHRob3BfbmhgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgZml4LiBLbm93aW5nIHRoZSBvcmlnaW5hbCBsb2dpYyBmbG93IG9mIGBmaWJfcmViYWxhbmNlYCBpcyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgY2FsY3VsYXRpb25zIG9yIGFycmF5IGFjY2Vzc2VzIHRoYXQgdXNlIGB0b3RhbGAgYXMgYSBkaXZpc29yIG9yIGluZGV4LiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gZGVjaWRlIGlmIHRoZSBmaXggaXMgY29ycmVjdCwgYW5kIGlmIGFueSBvdGhlciBjb25zaWRlcmF0aW9ucyBhcmUgbmVlZGVkIHRvIG1ha2UgdGhlIGNoYW5nZSBtb3JlIHJvYnVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUyOjQ3Ljc1MjQ4MjQ2MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzYzNzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpYl9yZWJhbGFuY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz03NDI9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTg1Mi0vKiBvbmx5IGNhbGxlZCB3aGVuIGZpYl9uaCBpcyBpbnRlZ3JhdGVkIGludG8gZmliX2luZm8gKi9cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6ODUzOnN0YXRpYyB2b2lkIGZpYl9yZWJhbGFuY2Uoc3RydWN0IGZpYl9pbmZvICpmaSlcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtODU0LXtcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYz04OTM9c3RhdGljIGludCBmaWJfZ2V0X25ocyhzdHJ1Y3QgZmliX2luZm8gKmZpLCBzdHJ1Y3QgcnRuZXh0aG9wICpydG5oLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTkwMS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6OTAyOiNkZWZpbmUgZmliX3JlYmFsYW5jZShmaSkgZG8geyB9IHdoaWxlICgwKVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy05MDMtXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MTM3Nj1zdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE1NTQtXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jOjE1NTU6XFx0XFx0ZmliX3JlYmFsYW5jZShmaSk7XFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTE1NTYtXFx0fVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jPTE5NDM9aW50IGZpYl9zeW5jX2Rvd25fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIGJvb2wgZm9yY2UpXFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjAwMi1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6MjAwMzpcXHRcXHRmaWJfcmViYWxhbmNlKGZpKTtcXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtMjAwNC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM9MjA5Mj1pbnQgZmliX3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncylcXG4tLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTQ0LVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzoyMTQ1OlxcdFxcdGZpYl9yZWJhbGFuY2UoZmkpO1xcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy0yMTQ2LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6NDcuODYxMjUwOTIzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTA0Mjk0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBmaWJfcmViYWxhbmNlYCBpbiBgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmaWJfcmViYWxhbmNlYCB3aXRoaW4gYG5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuY2AuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIEZJQiAoRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlKSwgZW5zdXJpbmcgdGhhdCByb3V0aW5nIHRhYmxlcyBhcmUgYmFsYW5jZWQgYW5kIGVmZmljaWVudC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2Ygd2h5IGFuZCB3aGVuIHRoaXMgaXMgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYGZpYl90YWJsZWAsIGBmaWJfaW5mb2AsIGFuZCB0aGUgb3ZlcmFsbCByb3V0ZSBsb29rdXAgcHJvY2Vzcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgZW1wbG95ZWQuIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgdG9wb2xvZ3ksIGhvdyBpdCByZWFjdHMgdG8gcm91dGUgYWRkaXRpb25zLCBkZWxldGlvbnMsIGFuZCBtb2RpZmljYXRpb25zLCBhbmQgaG93IGl0IGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZXNlIG9wZXJhdGlvbnMuIEFyZSB0aGV5IHVzaW5nIFJDVSBoZXJlLCBvciBzb21lIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2w/IEkgd2FudCB0byBzZWUgaWYgdGhleSdyZSByZWx5aW5nIG9uIHBlci1DUFUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGdsb2JhbCBsb2NrcywgYW5kIHdoYXQgdHJhZGUtb2ZmcyB0aGV5J3ZlIG1hZGUgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIHNjYWxhYmlsaXR5LiBJJ2xsIGFsc28gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggZnJhZ21lbnRhdGlvbiBhbmQgcGF0aCBNVFUgZGlzY292ZXJ5IGlmIGFwcGxpY2FibGUuIEluIGdlbmVyYWwsIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGtleSBwbGF5ZXIgaW4gdGhlIHJlbGlhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBJUHY0IHJvdXRpbmcgaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGltcGxlbWVudGVkIHRoZSByZWJhbGFuY2luZyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE4OjUyOjUzLjkxMTY4NDA0N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvZmliX3NlbWFudGljcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHR9XFxuIDg1MTpcXHRcXG4gODUyOlxcdC8qIG9ubHkgY2FsbGVkIHdoZW4gZmliX25oIGlzIGludGVncmF0ZWQgaW50byBmaWJfaW5mbyAqL1xcbiA4NTM6XFx0c3RhdGljIHZvaWQgZmliX3JlYmFsYW5jZShzdHJ1Y3QgZmliX2luZm8gKmZpKVxcbiA4NTQ6XFx0e1xcbiA4NTU6XFx0XFx0aW50IHRvdGFsO1xcbiA4NTY6XFx0XFx0aW50IHc7XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdGlmIChmaWJfaW5mb19udW1fcGF0aChmaSkgXFx1MDAzYyAyKVxcbiA4NTk6XFx0XFx0XFx0cmV0dXJuO1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRcXHR0b3RhbCA9IDA7XFxuIDg2MjpcXHRcXHRmb3JfbmV4dGhvcHMoZmkpIHtcXG4gODYzOlxcdFxcdFxcdGlmIChuaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0RFQUQpXFxuIDg2NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0XFx0aWYgKGlwX2lnbm9yZV9saW5rZG93bihuaC1cXHUwMDNlZmliX25oX2RldikgXFx1MDAyNlxcdTAwMjZcXG4gODY3OlxcdFxcdFxcdCAgICBuaC1cXHUwMDNlZmliX25oX2ZsYWdzIFxcdTAwMjYgUlROSF9GX0xJTktET1dOKVxcbiA4Njg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdFxcdHRvdGFsICs9IG5oLVxcdTAwM2VmaWJfbmhfd2VpZ2h0O1xcbiA4NzE6XFx0XFx0fSBlbmRmb3JfbmV4dGhvcHMoZmkpO1xcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHR3ID0gMDtcXG4gODc0OlxcdFxcdGNoYW5nZV9uZXh0aG9wcyhmaSkge1xcbiA4NzU6XFx0XFx0XFx0aW50IHVwcGVyX2JvdW5kO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRcXHRpZiAoIXRvdGFsIHx8IG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9ERUFEKSB7XFxuIDg3ODpcXHRcXHRcXHRcXHR1cHBlcl9ib3VuZCA9IC0xO1xcbiA4Nzk6XFx0XFx0XFx0fSBlbHNlIGlmIChpcF9pZ25vcmVfbGlua2Rvd24obmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX2RldikgXFx1MDAyNlxcdTAwMjZcXG4gODgwOlxcdFxcdFxcdFxcdCAgIG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF9mbGFncyBcXHUwMDI2IFJUTkhfRl9MSU5LRE9XTikge1xcbiA4ODE6XFx0XFx0XFx0XFx0dXBwZXJfYm91bmQgPSAtMTtcXG4gODgyOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg4MzpcXHRcXHRcXHRcXHR3ICs9IG5leHRob3BfbmgtXFx1MDAzZWZpYl9uaF93ZWlnaHQ7XFxuIDg4NDpcXHRcXHRcXHRcXHR1cHBlcl9ib3VuZCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KXcgXFx1MDAzY1xcdTAwM2MgMzEsXFxuIDg4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgdG90YWwpIC0gMTtcXG4gODg2OlxcdFxcdFxcdH1cXG4gODg3OlxcdFxcbiA4ODg6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2bmV4dGhvcF9uaC1cXHUwMDNlZmliX25oX3VwcGVyX2JvdW5kLCB1cHBlcl9ib3VuZCk7XFxuIDg4OTpcXHRcXHR9IGVuZGZvcl9uZXh0aG9wcyhmaSk7XFxuIDg5MDpcXHR9XFxuIDg5MTpcXHQjZWxzZSAvKiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIICovXFxuIDg5MjpcXHRcXG4gODkzOlxcdHN0YXRpYyBpbnQgZmliX2dldF9uaHMoc3RydWN0IGZpYl9pbmZvICpmaSwgc3RydWN0IHJ0bmV4dGhvcCAqcnRuaCxcXG4gODk0OlxcdFxcdFxcdCAgICAgICBpbnQgcmVtYWluaW5nLCBzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnLFxcbiA4OTU6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gODk2OlxcdHtcXG4gODk3OlxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk11bHRpcGF0aCBzdXBwb3J0IG5vdCBlbmFibGVkIGluIGtlcm5lbFxcXCIpO1xcbiA4OTg6XFx0XFxuIDg5OTpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTI6NTMuOTExOTMyNDQ3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzMwNDc4OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgZGl2aWRlLWJ5LXplcm8gdnVsbmVyYWJpbGl0eS4gVGhlIGNvcmUgaXNzdWUgaXMgd2l0aGluIHRoZSBgZmliX3JlYmFsYW5jZWAgZnVuY3Rpb24gd2hlcmUgYHVwcGVyX2JvdW5kYCBpcyBiZWluZyBjYWxjdWxhdGVkLiBQcmV2aW91c2x5LCBpZiB0aGUgdG90YWwgd2VpZ2h0IChgdG90YWxgKSBvZiB2YWxpZCBuZXh0IGhvcHMgd2FzIHplcm8sIHRoZSBjb2RlIHdvdWxkIGF0dGVtcHQgYSBkaXZpc2lvbiBieSB6ZXJvIGluIHRoZSBgRElWX1JPVU5EX0NMT1NFU1RfVUxMYCBtYWNyby4gT2J2aW91c2x5LCB0aGF0IGNhdXNlcyBhIGNyYXNoLiBUaGUgZml4IGlzIGVsZWdhbnQ6IGl0IHNpbXBseSBhZGRzIGEgY2hlY2sgZm9yIGAhdG90YWxgIGJlZm9yZSB0aGUgZGl2aXNpb24uIElmIGB0b3RhbGAgaXMgemVybywgd2Ugc2tpcCB0aGUgZGl2aXNpb24gYW5kIHNldCBgdXBwZXJfYm91bmRgIHRvIC0xLiBUaGF0IGF2b2lkcyB0aGUgY3Jhc2guXG5cblRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyLiBUaGUgdnVsbmVyYWJpbGl0eSBpcyBhIHN0YW5kYXJkIGFyaXRobWV0aWMgZXJyb3IuIEl0J3Mgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIHdoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoLiBUaGlzIGlzIGEgY2xhc3NpYyBjYXNlIHdoZXJlIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLCBmdXp6aW5nLCBVQlNBTiwgb3IgS0FTQU4gd291bGQgZWFzaWx5IGlkZW50aWZ5IHRoZSBwcm9ibGVtLiBLTVNBTiBpc24ndCByZWxldmFudCBoZXJlOyBpdCdzIG92ZXJraWxsLiBJdCdzIGEgY2xlYW4sIGVmZmljaWVudCBmaXggdG8gYSBwcmV2ZW50YWJsZSBjcmFzaC4gV2UncmUgbG9va2luZyBhdCBhIHN0YW5kYXJkLCBydW4tb2YtdGhlLW1pbGwgYXJpdGhtZXRpYyBidWcuIE5vIG5lZWQgZm9yIHRoZSBoZWF2eSBhcnRpbGxlcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTcsIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTg6NTM6MDUuNjQyNDE0MTg2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBjYWxjdWxhdGluZyB0aGUgYHVwcGVyX2JvdW5kYCBmb3IgbXVsdGlwYXRoIHJvdXRlcy4gSWYgdGhlIGB0b3RhbGAgd2VpZ2h0IG9mIGFsbCB2YWxpZCBuZXh0aG9wcyBpcyAwLCB0aGUgcHJldmlvdXMgY29kZSB3b3VsZCBhdHRlbXB0IHRvIGRpdmlkZSBieSBgdG90YWxgLCBjYXVzaW5nIGEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGB0b3RhbGAgaXMgMCBhbmQgc2V0dGluZyBgdXBwZXJfYm91bmQgPSAtMWAgaW4gdGhhdCBjYXNlLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXJpdGhtZXRpYyBidWcgKGRpdmlkZS1ieS16ZXJvKSB0aGF0IGNhbiBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgb3IgZnV6emluZyAob3IgVUJTQU4pLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBhbnkgaXNzdWVzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRpdmlkZS1ieS16ZXJvIGJ1ZyBpbiBgZmliX3JlYmFsYW5jZWAgd2hlbiBjYWxjdWxhdGluZyB0aGUgYHVwcGVyX2JvdW5kYCBmb3IgbXVsdGlwYXRoIHJvdXRlcy4gSWYgdGhlIGB0b3RhbGAgd2VpZ2h0IG9mIGFsbCB2YWxpZCBuZXh0aG9wcyBpcyAwLCB0aGUgcHJldmlvdXMgY29kZSB3b3VsZCBhdHRlbXB0IHRvIGRpdmlkZSBieSBgdG90YWxgLCBjYXVzaW5nIGEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nIGlmIGB0b3RhbGAgaXMgMCBhbmQgc2V0dGluZyBgdXBwZXJfYm91bmQgPSAtMWAgaW4gdGhhdCBjYXNlLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXJpdGhtZXRpYyBidWcgKGRpdmlkZS1ieS16ZXJvKSB0aGF0IGNhbiBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgb3IgZnV6emluZyAob3IgVUJTQU4pLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBpbmZvLWxlYWtzLCBvciBhbnkgaXNzdWVzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpslcb[1] Phase: Succeeded StartedAt: 2026-08-27 18:53:18 +0000 UTC FinishedAt: 2026-08-27 18:53:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 18:53:18 +0000 UTC FinishedAt: 2026-08-27 18:53:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2] Phase: Succeeded StartedAt: 2026-08-27 18:53:18 +0000 UTC FinishedAt: 2026-08-27 22:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 18:53:18 +0000 UTC FinishedAt: 2026-08-27 22:35:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 18:53:18 +0000 UTC FinishedAt: 2026-08-27 18:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 18:53:18 +0000 UTC FinishedAt: 2026-08-27 18:53:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowpslcb/series-workflowpslcb-convert-artifact-2225596795/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 18:53:28 +0000 UTC FinishedAt: 2026-08-27 19:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 18:53:28 +0000 UTC FinishedAt: 2026-08-27 19:11:33 +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:*ee44b37c-9418-421d-b82e-e26e26055adb,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-workflowpslcb/series-workflowpslcb-convert-artifact-2225596795/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": "8288fdf5-64e1-436b-abed-b8c294b2727c", "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-workflowpslcb/series-workflowpslcb-build-action-2561317049/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 18:53:28 +0000 UTC FinishedAt: 2026-08-27 19:11:23 +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:*ee44b37c-9418-421d-b82e-e26e26055adb,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-workflowpslcb/series-workflowpslcb-convert-artifact-2225596795/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": "8288fdf5-64e1-436b-abed-b8c294b2727c", "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-workflowpslcb/series-workflowpslcb-build-action-2561317049/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 19:11:33 +0000 UTC FinishedAt: 2026-08-27 19:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 19:11:33 +0000 UTC FinishedAt: 2026-08-27 19:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 19:11:33 +0000 UTC FinishedAt: 2026-08-27 19:11:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 19:11:33 +0000 UTC FinishedAt: 2026-08-27 19:11:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowpslcb/series-workflowpslcb-convert-artifact-1410534098/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 19:11:44 +0000 UTC FinishedAt: 2026-08-27 19:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 19:11:44 +0000 UTC FinishedAt: 2026-08-27 19:13:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8288fdf5-64e1-436b-abed-b8c294b2727c,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-workflowpslcb/series-workflowpslcb-build-action-2561317049/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-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 19:13:47 +0000 UTC FinishedAt: 2026-08-27 19:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 19:13:47 +0000 UTC FinishedAt: 2026-08-27 19:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 19:13:47 +0000 UTC FinishedAt: 2026-08-27 19:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 19:13:47 +0000 UTC FinishedAt: 2026-08-27 19:30:02 +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:*ee44b37c-9418-421d-b82e-e26e26055adb,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-workflowpslcb/series-workflowpslcb-convert-artifact-1410534098/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": "c9e14d40-7f4a-4993-868e-505c7bdfde2c", "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-workflowpslcb/series-workflowpslcb-build-action-2557577574/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 19:13:47 +0000 UTC FinishedAt: 2026-08-27 19:29:52 +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:*ee44b37c-9418-421d-b82e-e26e26055adb,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-workflowpslcb/series-workflowpslcb-convert-artifact-1410534098/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": "c9e14d40-7f4a-4993-868e-505c7bdfde2c", "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-workflowpslcb/series-workflowpslcb-build-action-2557577574/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 19:30:02 +0000 UTC FinishedAt: 2026-08-27 19:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 19:30:02 +0000 UTC FinishedAt: 2026-08-27 19:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 19:30:02 +0000 UTC FinishedAt: 2026-08-27 19:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 19:30:02 +0000 UTC FinishedAt: 2026-08-27 19:31:59 +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:*c9e14d40-7f4a-4993-868e-505c7bdfde2c,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-workflowpslcb/series-workflowpslcb-build-action-2557577574/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-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 19:32:09 +0000 UTC FinishedAt: 2026-08-27 22:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 19:32:09 +0000 UTC FinishedAt: 2026-08-27 22:35:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"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:*8288fdf5-64e1-436b-abed-b8c294b2727c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c9e14d40-7f4a-4993-868e-505c7bdfde2c,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-workflowpslcb/series-workflowpslcb-build-action-2561317049/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-workflowpslcb/series-workflowpslcb-build-action-2557577574/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 19:32:09 +0000 UTC FinishedAt: 2026-08-27 19:32:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 19:32:09 +0000 UTC FinishedAt: 2026-08-27 19:32:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"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-workflowpslcb/series-workflowpslcb-convert-artifact-2404794919/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 19:32:09 +0000 UTC FinishedAt: 2026-08-27 19:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 19:32:09 +0000 UTC FinishedAt: 2026-08-27 19:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 19:32:09 +0000 UTC FinishedAt: 2026-08-27 19:32:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 19:32:19 +0000 UTC FinishedAt: 2026-08-27 22:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpslcb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["fib_create_info","fib_table_insert","fib_sync_down_dev","fib_sync_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"81eb1867e059bf1dbbfbba536385a5cb26f700cd","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_ADVANCED_ROUTER","IP_ROUTE_MULTIPATH"],"series_id":"486f7e96-1932-4073-a200-cc7cc3c3dfc2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 19:32:19 +0000 UTC FinishedAt: 2026-08-27 22:35:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8288fdf5-64e1-436b-abed-b8c294b2727c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c9e14d40-7f4a-4993-868e-505c7bdfde2c,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-workflowpslcb/series-workflowpslcb-build-action-2561317049/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-workflowpslcb/series-workflowpslcb-build-action-2557577574/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-workflowpslcb/series-workflowpslcb-convert-artifact-2404794919/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,}