Name: series-workflowm4lt7 Phase: Succeeded StartedAt: 2026-06-23 08:11:29 +0000 UTC FinishedAt: 2026-06-23 10:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[0] Phase: Succeeded StartedAt: 2026-06-23 08:11:29 +0000 UTC FinishedAt: 2026-06-23 08:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 08:11:29 +0000 UTC FinishedAt: 2026-06-23 08:23:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TXGBE", "SFP", "MDIO_I2C", "I2C_DESIGNWARE_PLATFORM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TXGBE", "SFP", "MDIO_I2C", "I2C_DESIGNWARE_PLATFORM" ], "series_id": "d23915fc-295b-4f1e-8913-e0aa5ef677d7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mdio_i2c_probe_rollball", "i2c_mii_init_rollball", "sfp_sm_probe_for_phy", "sfp_i2c_mdiobus_destroy", "sfp_sm_add_mdio_bus" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RYR0JFJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtNRElPX0kyQyYjMzQ7LAogICAgJiMzNDtJMkNfREVTSUdOV0FSRV9QTEFURk9STSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21kaW9faTJjX3Byb2JlX3JvbGxiYWxsJiMzNDssCiAgICAmIzM0O2kyY19taWlfaW5pdF9yb2xsYmFsbCYjMzQ7LAogICAgJiMzNDtzZnBfc21fcHJvYmVfZm9yX3BoeSYjMzQ7LAogICAgJiMzNDtzZnBfaTJjX21kaW9idXNfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtzZnBfc21fYWRkX21kaW9fYnVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBzZXF1ZW5jZSBmb3IgUm9sbEJhbGwgU0ZQIG1vZHVsZXMgb3ZlciBNRElPIEkyQy4gSXQgZGVmZXJzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSYjMzk7cyBQSFkgcHJvYmluZyBwaGFzZSwgYWxsb3dpbmcgZ2VudWluZSBSb2xsQmFsbCBicmlkZ2VzIHRpbWUgdG8gc3RhcnQgdXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgYW5kIE1ESU8gSTJDIHByb3RvY29sIGxvZ2ljLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRoYXQgaW5zdGFudGlhdGVzIGFuIFNGUCBjYWdlIChlLmcuLCB0aGUgV2FuZ3h1biBUWEdCRSBkcml2ZXIpIGFuZCBmdXp6aW5nIHRoZSByZXN1bHRpbmcgSTJDL0dQSU8gTU1JTyBhY2Nlc3NlcyB0byB0cmlnZ2VyIHRoZSBTRlAgc3RhdGUgbWFjaGluZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVhMWM4ZjY5MzMyYzQ5OWM3YjBiNmRlM2Y0Mzk0ZDVlYWRmNDM2YTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwODoxODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNcbmluZGV4IGI4OGY2MzIzNGI0ZTZhLi4yYTNhNDE4YzEzNjk4OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG5AQCAtNDE5LDcgJiM0Mzs0MTksNyBAQCBzdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbiYjNDM7aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIHtcbiBcdHU4IGRhdGFfYnVmW10gPSB7IFJPTExCQUxMX0RBVEFfQUREUiwgMHgwMSwgMHgwMCwgMHgwMCB9O1xuIFx0dTggY21kX2J1ZltdICA9IHsgUk9MTEJBTExfQ01EX0FERFIsIFJPTExCQUxMX0NNRF9SRUFEIH07XG5AQCAtNDYyLDkgJiM0Mzs0NjIsMTMgQEAgc3RhdGljIGludCBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIFxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19wcm9iZV9yb2xsYmFsbCk7XG4gXG4gc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4ge1xuJiM0MztcdC8qIFNlbmQgdGhlIFJvbGxCYWxsIHVubG9jayBwYXNzd29yZDsgYnJpZGdlIHByZXNlbmNlIGlzIHZlcmlmaWVkXG4mIzQzO1x0ICogbGF0ZXIsIGluIHNmcF9zbV9wcm9iZV9mb3JfcGh5KCksIGFmdGVyIG1vZHVsZSBpbml0aWFsaXphdGlvbi5cbiYjNDM7XHQgKi9cbiBcdHN0cnVjdCBpMmNfbXNnIG1zZztcbiBcdHU4IHB3WzVdO1xuIFx0aW50IHJldDtcbkBAIC00ODYsNyAmIzQzOzQ5MCw3IEBAIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIFx0aWYgKHJldCAhPSAxKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbi1cdHJldHVybiBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKGkyYyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5AQCAtNTMxLDEwICYjNDM7NTM1LDkgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuIFx0XHRyZXQgPSBpMmNfbWlpX2luaXRfcm9sbGJhbGwoaTJjKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGlmIChyZXQgIT0gLUVOT0RFVilcbi1cdFx0XHRcdGRldl9lcnIocGFyZW50LFxuLVx0XHRcdFx0XHRcJiMzNDtDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcXG5cJiMzNDssXG4tXHRcdFx0XHRcdHJldCk7XG4mIzQzO1x0XHRcdGRldl9lcnIocGFyZW50LFxuJiM0MztcdFx0XHRcdFwmIzM0O0Nhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZXQpO1xuIFx0XHRcdG1kaW9idXNfZnJlZShtaWkpO1xuIFx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDAzYmZkODY0MGRiOTYzLi5iYmZhYTA0NTA3OThkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5AQCAtOTYzLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc3RydWN0IHNmcCAqc2ZwKVxuIHN0YXRpYyB2b2lkIHNmcF9pMmNfbWRpb2J1c19kZXN0cm95KHN0cnVjdCBzZnAgKnNmcClcbiB7XG4gXHRtZGlvYnVzX3VucmVnaXN0ZXIoc2ZwLVx1MDAzZWkyY19taWkpO1xuJiM0MztcdG1kaW9idXNfZnJlZShzZnAtXHUwMDNlaTJjX21paSk7XG4gXHRzZnAtXHUwMDNlaTJjX21paSA9IE5VTEw7XG4gfVxuIFxuQEAgLTIxNzMsMTcgJiM0MzsyMTc0LDEwIEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9mYXVsdChzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBuZXh0X3N0YXRlLCBib29sIHdhcm4pXG4gXG4gc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcbiB7XG4tXHRpbnQgcmV0O1xuLVxuIFx0aWYgKHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sID09IE1ESU9fSTJDX05PTkUpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0ID0gc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApO1xuLVx0aWYgKHJldCA9PSAtRU5PREVWKSB7XG4tXHRcdHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sID0gTURJT19JMkNfTk9ORTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XG4gfVxuIFxuIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZXG5AQCAtMjIxNCw3ICYjNDM7MjIwOCwxOCBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcClcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuLVx0XHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSX1JPTExCQUxMLCB0cnVlKTtcbiYjNDM7XHRcdC8qIFByb2JlIGhlcmUsIGFmdGVyIG1vZHVsZSBpbml0aWFsaXphdGlvbiBkZWxheXMsIHNvIHRoYXRcbiYjNDM7XHRcdCAqIGdlbnVpbmUgUm9sbEJhbGwgYnJpZGdlcyBoYXZlIGhhZCB0aW1lIHRvIHN0YXJ0IHVwLlxuJiM0MztcdFx0ICogTW9kdWxlcyB3aXRob3V0IGEgYnJpZGdlIChlLmcuIFJUTDgyNjFCRSkgcmV0dXJuIC1FTk9ERVYuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGVyciA9IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHNmcC1cdTAwM2VpMmMpO1xuJiM0MztcdFx0aWYgKGVyciA9PSAtRU5PREVWKSB7XG4mIzQzO1x0XHRcdHNmcF9pMmNfbWRpb2J1c19kZXN0cm95KHNmcCk7XG4mIzQzO1x0XHRcdHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sID0gTURJT19JMkNfTk9ORTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0ZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmhcbmluZGV4IDY1YjU1MGE2ZmMzMjk4Li41Y2YxNGY0NWM5NGI2YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaFxuQEAgLTIwLDUgJiM0MzsyMCw2IEBAIGVudW0gbWRpb19pMmNfcHJvdG8ge1xuIFxuIHN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuIFx0XHRcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcbiYjNDM7aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTtcbiBcbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUWEdCRSYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7TURJT19JMkMmIzM0OywKICAgICYjMzQ7STJDX0RFU0lHTldBUkVfUExBVEZPUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZGlvX2kyY19wcm9iZV9yb2xsYmFsbCYjMzQ7LAogICAgJiMzNDtpMmNfbWlpX2luaXRfcm9sbGJhbGwmIzM0OywKICAgICYjMzQ7c2ZwX3NtX3Byb2JlX2Zvcl9waHkmIzM0OywKICAgICYjMzQ7c2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7c2ZwX3NtX2FkZF9tZGlvX2J1cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHByb2Jpbmcgc2VxdWVuY2UgZm9yIFJvbGxCYWxsIFNGUCBtb2R1bGVzIG92ZXIgTURJTyBJMkMuIEl0IGRlZmVycyB0aGUgcHJvYmUgZnJvbSBtb2R1bGUgYWxsb2NhdGlvbiB0byB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUmIzM5O3MgUEhZIHByb2JpbmcgcGhhc2UsIGFsbG93aW5nIGdlbnVpbmUgUm9sbEJhbGwgYnJpZGdlcyB0aW1lIHRvIHN0YXJ0IHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBNRElPIEkyQyBwcm90b2NvbCBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB0aGF0IGluc3RhbnRpYXRlcyBhbiBTRlAgY2FnZSAoZS5nLiwgdGhlIFdhbmd4dW4gVFhHQkUgZHJpdmVyKSBhbmQgZnV6emluZyB0aGUgcmVzdWx0aW5nIEkyQy9HUElPIE1NSU8gYWNjZXNzZXMgdG8gdHJpZ2dlciB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVhMWM4ZjY5MzMyYzQ5OWM3YjBiNmRlM2Y0Mzk0ZDVlYWRmNDM2YTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAwODoxODo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYwppbmRleCBiODhmNjMyMzRiNGU2YS4uMmEzYTQxOGMxMzY5ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMKQEAgLTQxOSw3ICYjNDM7NDE5LDcgQEAgc3RhdGljIGludCBpMmNfbWlpX3dyaXRlX3JvbGxiYWxsKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBkZXZhZCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQomIzQzO2ludCBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAl1OCBkYXRhX2J1ZltdID0geyBST0xMQkFMTF9EQVRBX0FERFIsIDB4MDEsIDB4MDAsIDB4MDAgfTsKIAl1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTsKQEAgLTQ2Miw5ICYjNDM7NDYyLDEzIEBAIHN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIAogCXJldHVybiAtRU5PREVWOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKTsKIAogc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiYjNDM7CS8qIFNlbmQgdGhlIFJvbGxCYWxsIHVubG9jayBwYXNzd29yZDsgYnJpZGdlIHByZXNlbmNlIGlzIHZlcmlmaWVkCiYjNDM7CSAqIGxhdGVyLCBpbiBzZnBfc21fcHJvYmVfZm9yX3BoeSgpLCBhZnRlciBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCiYjNDM7CSAqLwogCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAl1OCBwd1s1XTsKIAlpbnQgcmV0OwpAQCAtNDg2LDcgJiM0Mzs0OTAsNyBAQCBzdGF0aWMgaW50IGkyY19taWlfaW5pdF9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIAlpZiAocmV0ICE9IDEpCiAJCXJldHVybiAtRUlPOwogCi0JcmV0dXJuIGkyY19taWlfcHJvYmVfcm9sbGJhbGwoaTJjKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsCkBAIC01MzEsMTAgJiM0Mzs1MzUsOSBAQCBzdHJ1Y3QgbWlpX2J1cyAqbWRpb19pMmNfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKIAljYXNlIE1ESU9fSTJDX1JPTExCQUxMOgogCQlyZXQgPSBpMmNfbWlpX2luaXRfcm9sbGJhbGwoaTJjKTsKIAkJaWYgKHJldCAmbHQ7IDApIHsKLQkJCWlmIChyZXQgIT0gLUVOT0RFVikKLQkJCQlkZXZfZXJyKHBhcmVudCwKLQkJCQkJJiMzNDtDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcbiYjMzQ7LAotCQkJCQlyZXQpOwomIzQzOwkJCWRldl9lcnIocGFyZW50LAomIzQzOwkJCQkmIzM0O0Nhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxuJiMzNDssCiYjNDM7CQkJCXJldCk7CiAJCQltZGlvYnVzX2ZyZWUobWlpKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwppbmRleCAwM2JmZDg2NDBkYjk2My4uYmJmYWEwNDUwNzk4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKQEAgLTk2Myw2ICYjNDM7OTYzLDcgQEAgc3RhdGljIGludCBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBzZnAgKnNmcCkKIHN0YXRpYyB2b2lkIHNmcF9pMmNfbWRpb2J1c19kZXN0cm95KHN0cnVjdCBzZnAgKnNmcCkKIHsKIAltZGlvYnVzX3VucmVnaXN0ZXIoc2ZwLSZndDtpMmNfbWlpKTsKJiM0MzsJbWRpb2J1c19mcmVlKHNmcC0mZ3Q7aTJjX21paSk7CiAJc2ZwLSZndDtpMmNfbWlpID0gTlVMTDsKIH0KIApAQCAtMjE3MywxNyAmIzQzOzIxNzQsMTAgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybikKIAogc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcCkKIHsKLQlpbnQgcmV0OwotCiAJaWYgKHNmcC0mZ3Q7bWRpb19wcm90b2NvbCA9PSBNRElPX0kyQ19OT05FKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc2ZwKTsKLQlpZiAocmV0ID09IC1FTk9ERVYpIHsKLQkJc2ZwLSZndDttZGlvX3Byb3RvY29sID0gTURJT19JMkNfTk9ORTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7CiB9CiAKIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZCkBAIC0yMjE0LDcgJiM0MzsyMjA4LDE4IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc3RydWN0IHNmcCAqc2ZwKQogCQlicmVhazsKIAogCWNhc2UgTURJT19JMkNfUk9MTEJBTEw6Ci0JCWVyciA9IHNmcF9zbV9wcm9iZV9waHkoc2ZwLCBTRlBfUEhZX0FERFJfUk9MTEJBTEwsIHRydWUpOwomIzQzOwkJLyogUHJvYmUgaGVyZSwgYWZ0ZXIgbW9kdWxlIGluaXRpYWxpemF0aW9uIGRlbGF5cywgc28gdGhhdAomIzQzOwkJICogZ2VudWluZSBSb2xsQmFsbCBicmlkZ2VzIGhhdmUgaGFkIHRpbWUgdG8gc3RhcnQgdXAuCiYjNDM7CQkgKiBNb2R1bGVzIHdpdGhvdXQgYSBicmlkZ2UgKGUuZy4gUlRMODI2MUJFKSByZXR1cm4gLUVOT0RFVi4KJiM0MzsJCSAqLwomIzQzOwkJZXJyID0gbWRpb19pMmNfcHJvYmVfcm9sbGJhbGwoc2ZwLSZndDtpMmMpOwomIzQzOwkJaWYgKGVyciA9PSAtRU5PREVWKSB7CiYjNDM7CQkJc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3koc2ZwKTsKJiM0MzsJCQlzZnAtJmd0O21kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmggYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaAppbmRleCA2NWI1NTBhNmZjMzI5OC4uNWNmMTRmNDVjOTRiNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oCkBAIC0yMCw1ICYjNDM7MjAsNiBAQCBlbnVtIG1kaW9faTJjX3Byb3RvIHsKIAogc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCiAJCQkgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbCk7CiYjNDM7aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKIAogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IFNGUCBhbmQgTURJTyBJMkMgRHJpdmVyIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGBkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCDigJMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVmYWN0b3Jpbmcgc29tZSBvZiB0aGUgTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgYW5kIFNGUCAoU21hbGwgRm9ybS1mYWN0b3IgUGx1Z2dhYmxlKSBkcml2ZXIgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgSTJDIGNvbW11bmljYXRpb24uIFRoZSByZW5hbWluZyBvZiBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGAgdG8gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCBhbmQgZXhwb3J0aW5nIGl0IGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gVGhlbiB0aGUgY2hhbmdlIHRvIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgIG5vdCBjYWxsaW5nIHRoZSBwcm9iZSBmdW5jdGlvbiBkaXJlY3RseSBpcyBhIGJpdCBtb3JlIGludm9sdmVkLiBJdCBhcHBlYXJzIHRoZXJlIGlzIHNvbWUgcmVmYWN0b3JpbmcgYW5kIHNwbGl0dGluZyBvZiByZXNwb25zaWJpbGl0aWVzLCBhbmQgaXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIFRoZSBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIGZ1bmN0aW9uIG5vdyBjYWxsaW5nIHRoZSBuZXcsIGV4cG9ydGVkIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBkcml2ZXIgaW50ZXJhY3Rpb24gaXMgY2hhbmdpbmcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIEkgZXZlbiAqdGVzdCogdGhpcyBlZmZlY3RpdmVseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBTRlBzIGFyZSB1c3VhbGx5IHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgd2hpbGUgSSBjYW4gdXN1YWxseSBzaW11bGF0ZSBJMkMgZGV2aWNlcyB3aXRoIHRoaW5ncyBsaWtlIGkyYy1zdHViIG9yIHNpbWlsYXIsIEkmIzM5O20gbm90IHN1cmUgaWYgdGhlcmUmIzM5O3MgYSBnb29kIHdheSB0byBmdWxseSBlbXVsYXRlIG9yIGZ1enogYW4gU0ZQIG1vZHVsZSBpdHNlbGYuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIHNvbWUgd2F5IHRvIHZhbGlkYXRlIHRoaXMgcGF0Y2guCgpJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYE1ESU9fSTJDYCBhbmQgYFNGUGAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyZWQuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIGlmIHRoZXJlIGFyZSBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0ZXN0aW5nLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBhbHNvIGluZm9ybSB3aGljaCBidWlsZCBjb25maWd1cmF0aW9ucyBJIGNhbiBhbmQgc2hvdWxkIHRlc3Qgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTURJT19JMkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OTk9Y29uZmlnIE1ESU9fSElTSV9GRU1BQ1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMDUtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTA2OmNvbmZpZyBNRElPX0kyQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIE1ESU9fSTJDIFNlbGVjdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6ICp3aGF0IHNwZWNpZmljYWxseSBpcyB0cmlnZ2VyaW5nIHRoZSB1c2Ugb2YgYE1ESU9fSTJDYD8qIE15IGltbWVkaWF0ZSBtZW50YWwgcHJvY2VzcyBoZXJlIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb2RlIHBhdGhzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbGVhZCB0byB0aGlzIHNlbGVjdGlvbi4gSSYjMzk7bSBub3QgbG9va2luZyBmb3IgYSBnZW5lcmFsIG92ZXJ2aWV3OyBJIG5lZWQgdG8gZHJpbGwgZG93biB0byB0aGUgc3BlY2lmaWMgZHJpdmVycywgYm9hcmQgZmlsZXMsIG9yIGRldmljZSB0cmVlIGVudHJpZXMgdGhhdCBhcmUgcmVzcG9uc2libGUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCByZWdpc3RlciBzZXR0aW5ncywgdGhlIHBvd2VyIG1hbmFnZW1lbnQgc2VxdWVuY2UsIG9yIHBlcmhhcHMgZXZlbiBhIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgcGFydGljdWxhciBjaG9pY2UsIG5vdCBqdXN0ICp0aGF0KiBpdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciB1bmRlcnN0YW5kIGV4aXN0aW5nIGJlaGF2aW9yIG9yIHBvc3NpYmx5IGRlYnVnIGEgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTURJT19JMkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NzM9Y29uZmlnIFNGUFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTc2LVx0ZGVwZW5kcyBvbiBIV01PTiB8fCBIV01PTj1uXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3NzpcdHNlbGVjdCBNRElPX0kyQ1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYENPTkZJR19TRlBgIGRlZmluZSwgYW5kIGl0JiMzOTtzIHBvaW50aW5nIG1lIHRvd2FyZCBgTURJT19JMkNgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBndXQgdGVsbHMgbWUgdGhhdCBgQ09ORklHX1NGUGAgaXMgbGlrZWx5IGEgZ2F0aW5nIG1lY2hhbmlzbSBvciBzZWxlY3Rpb24gZm9yIHRoZSBJMkMtYmFzZWQgTURJTyBkcml2ZXIsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgU0ZQIHRyYW5zY2VpdmVycywgZXNwZWNpYWxseSBpZiB0aGUgaGFyZHdhcmUgdXNlcyBJMkMgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gb24gdGhhdCBgQ09ORklHX1NGUGAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kLCBjcml0aWNhbGx5LCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCB0aGUgcHJpbWFyeSBkcml2ZXIgc2VsZWN0aW9uIG9yIHBlcmhhcHMgYSBmbGFnIHRvIHN1cHBvcnQgYSBzcGVjaWZpYyBTRlAgbW9kdWxlIHZhcmlhbnQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzb3VyY2UgY29kZSB3aGVyZSBgQ09ORklHX1NGUGAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igb3RoZXIgYXNzb2NpYXRlZCBkZWZpbmVzIGFuZCBhbnkgY29uZGl0aW9uYWxzIHRoYXQgaW1wYWN0IHdoaWNoIGRyaXZlciBvciBzdWJzeXN0ZW0gaXMgdWx0aW1hdGVseSBlbmFibGVkLiBJIHN1c3BlY3QgaXQmIzM5O3MgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZyBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBTRlAvTURJTyBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0ZQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzkzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBrbm93bGVkZ2VhYmxlIGluIHRoZSBmaWVsZDoKCioqRnV6emluZyB0aGUgU0ZQIE1vZHVsZTogSW5pdGlhbCBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSBlZmZlY3RpdmVseSBmdXp6IGFuIFNGUCBtb2R1bGU/IEl0JiMzOTtzIGEgdmFsaWQgdGFyZ2V0LiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0LCB5ZXMsIGl0IHNob3VsZCBiZSBhIHdvcnRod2hpbGUgZW5kZWF2b3IsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGF0dGFjayBzdXJmYWNlIGl0IHByZXNlbnRzLiBHaXZlbiB0aGF0IG15IGZpZWxkIGlzIHNlY3VyaXR5LCB0aGlzIGlzIHNvbWV0aGluZyBJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZC4KClRoaW5raW5nIGFib3V0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgU0ZQIG1vZHVsZXMgdXNlIEkyQyBhbmQgR1BJT3MgZm9yIGNvbW11bmljYXRpb24uIFRoZSBJMkMgaW50ZXJmYWNlIGlzIGEgc3RhbmRhcmQgdHdvLXdpcmUgc2VyaWFsIHByb3RvY29sIGNvbW1vbmx5IHVzZWQgZm9yIGFjY2Vzc2luZyBkZXZpY2UgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYW5kIG90aGVyIGNvbnRyb2wgZnVuY3Rpb25zLiBHUElPcywgb24gdGhlIG90aGVyIGhhbmQsIGFsbG93IGZvciBnZW5lcmFsLXB1cnBvc2UgZGlnaXRhbCBpbnB1dC9vdXRwdXQgb3BlcmF0aW9ucy4gVGhlcmVmb3JlIHRoZXNlIGludGVyZmFjZXMgb2ZmZXIgYSB3YXkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlIGFuZCBhcmUgdGhlcmVmb3JlIG9mIGludGVyZXN0IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4KClNvLCB3aGVyZSBkbyB3ZSBzdGFydD8gSSYjMzk7ZCBpbW1lZGlhdGVseSBqdW1wIGludG8gdGhlIHJlbGV2YW50IGRyaXZlciBjb2RlIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7ZCB3YW50IHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgU0ZQIG1vZHVsZSBhdCBhIGxvdyBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGUgSTJDIGFuZCBHUElPIGludGVyYWN0aW9ucywgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsbHkgdW5leHBlY3RlZCBkYXRhIG9yIHNlcXVlbmNlcywgaXMgY3J1Y2lhbCBmb3IgZGV2aXNpbmcgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zZnAuYz0zMjU3PXN0YXRpYyBpbnQgc2ZwX2kyY19nZXQoc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjgyLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjMyODM6c3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjg0LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzQ2NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjM0NjY6XHQucHJvYmUgPSBzZnBfcHJvYmUsXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ2Ny1cdC5yZW1vdmUgPSBzZnBfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzM5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGxhdGZvcm0gRHJpdmVyIGFuZCBTeXprYWxsZXImIzM5O3MgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBhIHBsYXRmb3JtIGRyaXZlci4gRmlyc3QgdGhvdWdodDogQ2FuIHRoaXMgYmUgaW5zdGFudGlhdGVkIHZpYSB0aGUgZGV2aWNlIHRyZWUsIG9yIGlzIGl0IGdvaW5nIHRvIHJlbHkgb24gc3lzZnM/IFBsYXRmb3JtIGRyaXZlcnMgKnVzdWFsbHkqIGhhdmUgYSBkZXZpY2UgdHJlZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLCBvciwgaWYgaXQgd2FzIGFuIEkyQyBkZXZpY2UsIHlvdSBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBvbmUgdmlhIHN5c2ZzLCBidXQgdGhpcyBpcyBhICpwbGF0Zm9ybSogZGV2aWNlLgoKSGFuZyBvbi4uLiBkb2VzIHN5emthbGxlciBoYXZlIGFueSBzcGVjaWZpYyBtZWNoYW5pc21zIHRvIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzIGRpcmVjdGx5PyBJIGtub3cgaXQgZG9lcyB0aGluZ3Mgd2l0aCBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgbmV0bGluayBmb3IgY2VydGFpbiBpbnRlcmFjdGlvbnMsIGFuZCBzeXNmcyBmb3Igc29tZSBidXNlcywgYnV0IEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHJlY2FsbCBhIGRlZGljYXRlZCBwbGF0Zm9ybSBpbmplY3Rpb24gbWV0aG9kLiBEb2VzIHN5emthbGxlciBvZmZlciBzb21ldGhpbmcgbGlrZSBgc3l6X2Rldl9wbGF0Zm9ybV9hZGRgPyBObywgdGhhdCBkb2VzbiYjMzk7dCBzb3VuZCByaWdodC4KCkFoLCB3YWl0LiBJdCAqY2FuKiBmdXp6IEkyQyB2aWEgYC9kZXYvaTJjLSpgIGlmIGVpdGhlciBgaTJjLXN0dWJgIG9yIGBpMmMtZGV2YCBhcmUgcHJlc2VudCwgYnV0IHRoZSBjYXRjaCBpcyB0aGF0IHRoaXMgcGxhdGZvcm0gZGV2aWNlLCB0aGUgYHNmcGAsIHV0aWxpemVzIEkyQy4KClNvLCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGhhcyBleGlzdGluZyBkZXNjcmlwdGlvbnMgb3Iga25vd2xlZGdlIG9mIHRoZSBTRlAgZGV2aWNlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhpc3RpbmcgZGVzY3JpcHRpb25zIGZvciBTRlAgd2l0aGluIHN5emthbGxlciYjMzk7cyBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2VlcHJvbS5jLTMtI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG5uZXQvZXRodG9vbC9lZXByb20uYzo0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NmcC5oXHUwMDNlXG5uZXQvZXRodG9vbC9lZXByb20uYy01LVxuLS1cbm5ldC9ldGh0b29sL2VlcHJvbS5jPTkyPXN0YXRpYyBpbnQgZ2V0X21vZHVsZV9lZXByb21fYnlfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL2VlcHJvbS5jLTEwMy1cbm5ldC9ldGh0b29sL2VlcHJvbS5jOjEwNDpcdGlmIChkZXYtXHUwMDNlc2ZwX2J1cylcbm5ldC9ldGh0b29sL2VlcHJvbS5jOjEwNTpcdFx0cmV0dXJuIHNmcF9nZXRfbW9kdWxlX2VlcHJvbV9ieV9wYWdlKGRldi1cdTAwM2VzZnBfYnVzLCBwYWdlX2RhdGEsIGV4dGFjayk7XG5uZXQvZXRodG9vbC9lZXByb20uYy0xMDYtXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2Vcbm5ldC9ldGh0b29sL2lvY3RsLmM6MjM6I2luY2x1ZGUgXHUwMDNjbGludXgvc2ZwLmhcdTAwM2Vcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0yODY0PWludCBldGh0b29sX2dldF9tb2R1bGVfaW5mb19jYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0yODcyLVxubmV0L2V0aHRvb2wvaW9jdGwuYzoyODczOlx0aWYgKGRldi1cdTAwM2VzZnBfYnVzKVxubmV0L2V0aHRvb2wvaW9jdGwuYzoyODc0Olx0XHRyZXR1cm4gc2ZwX2dldF9tb2R1bGVfaW5mbyhkZXYtXHUwMDNlc2ZwX2J1cywgbW9kaW5mbyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NzUtXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0yOTA0PWludCBldGh0b29sX2dldF9tb2R1bGVfZWVwcm9tX2NhbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI5MTItXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI5MTM6XHRpZiAoZGV2LVx1MDAzZXNmcF9idXMpXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI5MTQ6XHRcdHJldHVybiBzZnBfZ2V0X21vZHVsZV9lZXByb20oZGV2LVx1MDAzZXNmcF9idXMsIGVlLCBkYXRhKTtcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjkxNS1cbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYy00LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2Vcbm5ldC9ldGh0b29sL21vZHVsZS5jOjU6I2luY2x1ZGUgXHUwMDNjbGludXgvc2ZwLmhcdTAwM2Vcbm5ldC9ldGh0b29sL21vZHVsZS5jLTYtI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxubmV0L2V0aHRvb2wvcGh5LmM6ODojaW5jbHVkZSBcdTAwM2NsaW51eC9zZnAuaFx1MDAzZVxubmV0L2V0aHRvb2wvcGh5LmMtOS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuLS1cbm5ldC9ldGh0b29sL3BoeS5jPTE4PXN0cnVjdCBwaHlfcmVwbHlfZGF0YSB7XG4tLVxubmV0L2V0aHRvb2wvcGh5LmMtMjMtXHR1bnNpZ25lZCBpbnQgdXBzdHJlYW1fdHlwZTtcbm5ldC9ldGh0b29sL3BoeS5jOjI0Olx0Y2hhciAqdXBzdHJlYW1fc2ZwX25hbWU7XG5uZXQvZXRodG9vbC9waHkuYy0yNS1cdHVuc2lnbmVkIGludCB1cHN0cmVhbV9pbmRleDtcbm5ldC9ldGh0b29sL3BoeS5jOjI2Olx0Y2hhciAqZG93bnN0cmVhbV9zZnBfbmFtZTtcbm5ldC9ldGh0b29sL3BoeS5jLTI3LX07XG4tLVxubmV0L2V0aHRvb2wvcGh5LmM9MzY9c3RhdGljIGludCBwaHlfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTU1LVx0LyogRVRIVE9PTF9BX1BIWV9VUFNUUkVBTV9TRlBfTkFNRSAqL1xubmV0L2V0aHRvb2wvcGh5LmM6NTY6XHRpZiAocmVwX2RhdGEtXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUpXG5uZXQvZXRodG9vbC9waHkuYzo1NzpcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc3RybGVuKHJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKSAmIzQzOyAxKTtcbm5ldC9ldGh0b29sL3BoeS5jLTU4LVxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTYzLVx0LyogRVRIVE9PTF9BX1BIWV9ET1dOU1RSRUFNX1NGUF9OQU1FICovXG5uZXQvZXRodG9vbC9waHkuYzo2NDpcdGlmIChyZXBfZGF0YS1cdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKVxubmV0L2V0aHRvb2wvcGh5LmM6NjU6XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHN0cmxlbihyZXBfZGF0YS1cdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSAmIzQzOyAxKTtcbm5ldC9ldGh0b29sL3BoeS5jLTY2LVxuLS1cbm5ldC9ldGh0b29sL3BoeS5jPTcwPXN0YXRpYyBpbnQgcGh5X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTExMC1cbm5ldC9ldGh0b29sL3BoeS5jOjExMTpcdGlmIChwZG4tXHUwMDNlcGFyZW50X3NmcF9idXMpIHtcbm5ldC9ldGh0b29sL3BoeS5jOjExMjpcdFx0cmVwX2RhdGEtXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUgPSBrc3RyZHVwKHNmcF9nZXRfbmFtZShwZG4tXHUwMDNlcGFyZW50X3NmcF9idXMpLFxubmV0L2V0aHRvb2wvcGh5LmMtMTEzLVx0XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvcGh5LmM6MTE0Olx0XHRpZiAoIXJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKSB7XG5uZXQvZXRodG9vbC9waHkuYy0xMTUtXHRcdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5uZXQvZXRodG9vbC9waHkuYy0xMTktXG5uZXQvZXRodG9vbC9waHkuYzoxMjA6XHRpZiAocGh5ZGV2LVx1MDAzZXNmcF9idXMpIHtcbm5ldC9ldGh0b29sL3BoeS5jOjEyMTpcdFx0cmVwX2RhdGEtXHUwMDNlZG93bnN0cmVhbV9zZnBfbmFtZSA9IGtzdHJkdXAoc2ZwX2dldF9uYW1lKHBoeWRldi1cdTAwM2VzZnBfYnVzKSxcbm5ldC9ldGh0b29sL3BoeS5jLTEyMi1cdFx0XHRcdFx0XHRcdEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvcGh5LmM6MTIzOlx0XHRpZiAoIXJlcF9kYXRhLVx1MDAzZWRvd25zdHJlYW1fc2ZwX25hbWUpIHtcbm5ldC9ldGh0b29sL3BoeS5jLTEyNC1cdFx0XHRyZXQgPSAtRU5PTUVNO1xubmV0L2V0aHRvb2wvcGh5LmM6MTI1Olx0XHRcdGdvdG8gZXJyX2ZyZWVfdXBzdHJlYW1fc2ZwO1xubmV0L2V0aHRvb2wvcGh5LmMtMTI2LVx0XHR9XG4tLVxubmV0L2V0aHRvb2wvcGh5LmMtMTMwLVxubmV0L2V0aHRvb2wvcGh5LmM6MTMxOmVycl9mcmVlX3Vwc3RyZWFtX3NmcDpcbm5ldC9ldGh0b29sL3BoeS5jOjEzMjpcdGtmcmVlKHJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKTtcbm5ldC9ldGh0b29sL3BoeS5jLTEzMy1lcnJfZnJlZV9kcnZuYW1lOlxuLS1cbm5ldC9ldGh0b29sL3BoeS5jPTE0MD1zdGF0aWMgaW50IHBoeV9maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2V0aHRvb2wvcGh5LmMtMTU5LVxubmV0L2V0aHRvb2wvcGh5LmM6MTYwOlx0aWYgKHJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lIFx1MDAyNlx1MDAyNlxubmV0L2V0aHRvb2wvcGh5LmMtMTYxLVx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX1BIWV9VUFNUUkVBTV9TRlBfTkFNRSxcbm5ldC9ldGh0b29sL3BoeS5jOjE2MjpcdFx0XHQgICByZXBfZGF0YS1cdTAwM2V1cHN0cmVhbV9zZnBfbmFtZSkpXG5uZXQvZXRodG9vbC9waHkuYy0xNjMtXHRcdHJldHVybiAtRU1TR1NJWkU7XG5uZXQvZXRodG9vbC9waHkuYy0xNjQtXG5uZXQvZXRodG9vbC9waHkuYzoxNjU6XHRpZiAocmVwX2RhdGEtXHUwMDNlZG93bnN0cmVhbV9zZnBfbmFtZSBcdTAwMjZcdTAwMjZcbm5ldC9ldGh0b29sL3BoeS5jLTE2Ni1cdCAgICBubGFfcHV0X3N0cmluZyhza2IsIEVUSFRPT0xfQV9QSFlfRE9XTlNUUkVBTV9TRlBfTkFNRSxcbm5ldC9ldGh0b29sL3BoeS5jOjE2NzpcdFx0XHQgICByZXBfZGF0YS1cdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSlcbm5ldC9ldGh0b29sL3BoeS5jLTE2OC1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbi0tXG5uZXQvZXRodG9vbC9waHkuYz0xNzM9c3RhdGljIHZvaWQgcGh5X2NsZWFudXBfZGF0YShzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcbi0tXG5uZXQvZXRodG9vbC9waHkuYy0xNzgtXHRrZnJlZShyZXBfZGF0YS1cdTAwM2VuYW1lKTtcbm5ldC9ldGh0b29sL3BoeS5jOjE3OTpcdGtmcmVlKHJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKTtcbm5ldC9ldGh0b29sL3BoeS5jOjE4MDpcdGtmcmVlKHJlcF9kYXRhLVx1MDAzZWRvd25zdHJlYW1fc2ZwX25hbWUpO1xubmV0L2V0aHRvb2wvcGh5LmMtMTgxLX1cbi0tXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM9MTg9c3RhdGljIGludFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjE5Omhzcl9ub2RlX3RhYmxlX3Nob3coc3RydWN0IHNlcV9maWxlICpzZnAsIHZvaWQgKmRhdGEpXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjAte1xubmV0L2hzci9oc3JfZGVidWdmcy5jOjIxOlx0c3RydWN0IGhzcl9wcml2ICpwcml2ID0gKHN0cnVjdCBoc3JfcHJpdiAqKXNmcC1cdTAwM2Vwcml2YXRlO1xubmV0L2hzci9oc3JfZGVidWdmcy5jLTIyLVx0c3RydWN0IGhzcl9ub2RlICpub2RlO1xubmV0L2hzci9oc3JfZGVidWdmcy5jLTIzLVxubmV0L2hzci9oc3JfZGVidWdmcy5jOjI0Olx0c2VxX3ByaW50ZihzZnAsIFwmIzM0O05vZGUgVGFibGUgZW50cmllcyBmb3IgKCVzKSBkZXZpY2VcXG5cJiMzNDssXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjUtXHRcdCAgIChwcml2LVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgPyBcJiMzNDtQUlBcJiMzNDsgOiBcJiMzNDtIU1JcJiMzNDspKTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoyNjpcdHNlcV9wdXRzKHNmcCwgXCYjMzQ7TUFDLUFkZHJlc3MtQSwgICAgTUFDLUFkZHJlc3MtQiwgICAgdGltZV9pbltBXSwgXCYjMzQ7KTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoyNzpcdHNlcV9wdXRzKHNmcCwgXCYjMzQ7dGltZV9pbltCXSwgQWRkcmVzcy1CIHBvcnQsIFwmIzM0Oyk7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjgtXHRpZiAocHJpdi1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxubmV0L2hzci9oc3JfZGVidWdmcy5jOjI5Olx0XHRzZXFfcHV0cyhzZnAsIFwmIzM0O1NBTi1BLCBTQU4tQiwgREFOLVBcXG5cJiMzNDspO1xubmV0L2hzci9oc3JfZGVidWdmcy5jLTMwLVx0ZWxzZVxubmV0L2hzci9oc3JfZGVidWdmcy5jOjMxOlx0XHRzZXFfcHV0cyhzZnAsIFwmIzM0O0RBTi1IXFxuXCYjMzQ7KTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy0zMi1cbi0tXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMzctXHRcdFx0Y29udGludWU7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6Mzg6XHRcdHNlcV9wcmludGYoc2ZwLCBcJiMzNDslcE0gXCYjMzQ7LCBcdTAwMjZub2RlLVx1MDAzZW1hY2FkZHJlc3NfQVswXSk7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6Mzk6XHRcdHNlcV9wcmludGYoc2ZwLCBcJiMzNDslcE0gXCYjMzQ7LCBcdTAwMjZub2RlLVx1MDAzZW1hY2FkZHJlc3NfQlswXSk7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6NDA6XHRcdHNlcV9wcmludGYoc2ZwLCBcJiMzNDslMTBseCwgXCYjMzQ7LCBub2RlLVx1MDAzZXRpbWVfaW5bSFNSX1BUX1NMQVZFX0FdKTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzo0MTpcdFx0c2VxX3ByaW50ZihzZnAsIFwmIzM0OyUxMGx4LCBcJiMzNDssIG5vZGUtXHUwMDNldGltZV9pbltIU1JfUFRfU0xBVkVfQl0pO1xubmV0L2hzci9oc3JfZGVidWdmcy5jOjQyOlx0XHRzZXFfcHJpbnRmKHNmcCwgXCYjMzQ7JTE0eCwgXCYjMzQ7LCBub2RlLVx1MDAzZWFkZHJfQl9wb3J0KTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy00My1cbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy00NC1cdFx0aWYgKHByaXYtXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSlcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzo0NTpcdFx0XHRzZXFfcHJpbnRmKHNmcCwgXCYjMzQ7JTV4LCAlNXgsICU1eFxcblwmIzM0Oyxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy00Ni1cdFx0XHRcdCAgIG5vZGUtXHUwMDNlc2FuX2EsIG5vZGUtXHUwMDNlc2FuX2IsXG4tLVxubmV0L2hzci9oc3JfZGVidWdmcy5jLTQ4LVx0XHRlbHNlXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6NDk6XHRcdFx0c2VxX3ByaW50ZihzZnAsIFwmIzM0OyU1eFxcblwmIzM0OywgMSk7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtNTAtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBmdW5jdGlvbi4gUmlnaHQsIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBpcyBwcm9iaW5nIGZvciBhIFBIWS4gVGhhdCBtYWtlcyBpdCBhIHBoeXNpY2FsIG1vZHVsZSwgYSBoYXJkd2FyZSBpbnRlcmZhY2UuIENhbiBJIHJlYWNoIHRoaXMgdGhpbmcgdGhyb3VnaCBzeXprYWxsZXI/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4KClN5emthbGxlciBjYW4gc2ltdWxhdGUgSTJDIGRldmljZXMgd2l0aCBgaTJjLXN0dWJgLCBidXQgU0ZQIGlzIGEgcGxhdGZvcm0gZGV2aWNlLiBDYW4gSSBzb21laG93IGNyZWF0ZSBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHVzaW5nIFN5emthbGxlciBkaXJlY3RseT8gSSYjMzk7bGwgbmVlZCBhIHdheSB0byBpbnN0YW50aWF0ZSB0aGF0IGBzZnBgIGRyaXZlci4KCkxldCBtZSBzZWXigKYgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AsIHRoZXJlJiMzOTtzIGBzZnBfcHJvYmVgLCBhbmQgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGBwbGF0Zm9ybV9kcml2ZXIgc2ZwX2RyaXZlcmAuIFNvLCBwbGF0Zm9ybSBkZXZpY2VzIGNhbiBiZSBjcmVhdGVkIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cywgb3IgbWF5YmUgYW5vdGhlciBkcml2ZXIgZHluYW1pY2FsbHkgY3JlYXRlcyB0aGVtIGF0IHJ1bnRpbWUuCgpXYWl0IGEgbWludXRlLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGp1c3QgKmNyZWF0ZSogcGxhdGZvcm0gZGV2aWNlcywgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgc3l6Ym90IHBzZXVkby1kZXZpY2UgZGVmaW5lZCBmb3IgaXQsIG9yIG1heWJlIGl0JiMzOTtzIGV4cG9zZWQgdGhyb3VnaCBzb21lIG5ldGxpbmsgb3Igc3lzZnMgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4KCkhtbSwgd2hhdCBhYm91dCBzb21ldGhpbmcgbGlrZSBgbWFjc2VjYCBvciBgdmV0aGA/IENvdWxkIHRoZXkgYmUgcmVzcG9uc2libGUgZm9yIGluc3RhbnRpYXRpbmcgdGhlIFNGUCBtb2R1bGUgaW4gc29tZSB3YXk/IE5vLCBTRlAgaXMgYSAqcGh5c2ljYWwqIGNhZ2UsIHNvIHRoYXQmIzM5O3Mgbm90IGxpa2VseS4KCk9rYXksIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgc2l0dWF0aW9uLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gSSYjMzk7bGwgY2hlY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpjYWxsZXJzKiBvZiBgc2ZwX3Byb2JlYCwgb3IgaWYgaXQmIzM5O3Mgb25seSBldmVyIGluc3RhbnRpYXRlZCB2aWEgdGhlIERldmljZSBUcmVlIG9yIEFDUEkuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBpZGVhIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIGJlIGJyb3VnaHQgaW50byBleGlzdGVuY2UsIGFuZCB0aGF0IHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hldGhlciBJIGNhbiBleHBsb2l0IGEgbWV0aG9kIGZvciBpbnN0YW50aWF0aW5nIG9uZSB0aHJvdWdoIFN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTIxNjA9aW50IGl4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTY4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjE2OTogKiBpeGdiZV9pc19zZnBfcHJvYmUgLSBSZXR1cm5zIHRydWUgaWYgU0ZQIGlzIGJlaW5nIGRldGVjdGVkXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTcwLSAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTczLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjE3NDpzdGF0aWMgYm9vbCBpeGdiZV9pc19zZnBfcHJvYmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggb2Zmc2V0LCB1OCBhZGRyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE5ND1zdGF0aWMgaW50IGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpY19pbnQoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjIwNC1cdFx0bWF4X3JldHJ5ID0gMztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIyMDU6XHRpZiAoaXhnYmVfaXNfc2ZwX3Byb2JlKGh3LCBieXRlX29mZnNldCwgZGV2X2FkZHIpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjIwNi1cdFx0bWF4X3JldHJ5ID0gSVhHQkVfU0ZQX0RFVEVDVF9SRVRSSUVTO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwMy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzUwOD1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUyMi1cdGlmICghcGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4pIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUyMzpcdFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTI0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0zMjU3PXN0YXRpYyBpbnQgc2ZwX2kyY19nZXQoc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjgyLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjMyODM6c3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjg0LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzQ2NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjM0NjY6XHQucHJvYmUgPSBzZnBfcHJvYmUsXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ2Ny1cdC5yZW1vdmUgPSBzZnBfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYz0zOT1zdGF0aWMgc3RydWN0IG52bWVtX2NvbmZpZyBsYXllcnNjYXBlX3NmcF9udm1lbV9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jLTQ1LVxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jOjQ2OnN0YXRpYyBpbnQgbGF5ZXJzY2FwZV9zZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYy00Ny17XG4tLVxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jPTk4PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxheWVyc2NhcGVfc2ZwX2RyaXZlciA9IHtcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYzo5OTpcdC5wcm9iZVx0PSBsYXllcnNjYXBlX3NmcF9wcm9iZSxcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYy0xMDAtXHQuZHJpdmVyID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBQSFkgRGV2aWNlIFByb2JpbmcgZm9yIFNGUHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgcGh5X3NmcF9wcm9iZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgd2UmIzM5O3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFuIFNGUCBjYWdlIGhhbmdpbmcgb2ZmIG9mIGEgUEhZIGRldmljZS4gU28sIHRoZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCB3aGF0IGRvZXMgdGhlIHByb2JlIHJvdXRpbmUgYWN0dWFsbHkgZG8sIGFuZCB3aGF0IGFyZSB0aGUgdHJpZ2dlcnMgdGhhdCBjYXVzZSB0aGlzIHByb2JlPyBMZXQmIzM5O3MgcGVlbCBiYWNrIHRoZSBsYXllcnMgYW5kIGFuYWx5emUgdGhpcyBtb3JlIGNsb3NlbHkuIEkgZXhwZWN0IGl0JiMzOTtsbCBpbnZvbHZlIGNoZWNraW5nIHNvbWUgcmVnaXN0ZXJzIGFuZCB1c2luZyBzb21lIHZlbmRvci1zcGVjaWZpYyBpZGVudGlmaWNhdGlvbiBsb2dpYy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZCBpbiB0aGUgc291cmNlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9zZnBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwMy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzUwOD1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUyMi1cdGlmICghcGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4pIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUyMzpcdFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTI0LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipBbmFseXppbmcgYHBoeV9zZnBfcHJvYmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0IHRoaXMgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uIGlzIGFsbCBhYm91dC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBTRlAvUEhZIGluaXRpYWxpemF0aW9uIGFuZCBkaXNjb3ZlcnkgcHJvY2Vzcy4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiBwcm9iaW5nIG9yIGRldGVjdGluZyB0aGUgcHJlc2VuY2UgYW5kIHBlcmhhcHMgdGhlIGNhcGFiaWxpdGllcyBvZiBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGRldmljZSB0aGF0JiMzOTtzIGFzc29jaWF0ZWQgd2l0aCBhbiBTRlAgKFNtYWxsIEZvcm0tZmFjdG9yIFBsdWdnYWJsZSkgbW9kdWxlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFyZHdhcmUgZGV0ZWN0aW9uLCBwb3RlbnRpYWxseSB1c2luZyBzcGVjaWZpYyBTRlAgbW9kdWxlIGluZm9ybWF0aW9uIG9yIHNwZWNpZmljIHJlZ2lzdGVyIHJlYWRvdXRzLCB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIFBIWSBpcyBjb25uZWN0ZWQgYW5kIGhvdyBpdCBzaG91bGQgYmUgY29uZmlndXJlZC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBhc3BlY3RzIGxpa2UgdGhlIFNGUCYjMzk7cyBwcmVzZW5jZSBkZXRlY3Rpb24sIHBvd2VyIHNlcXVlbmNpbmcsIGFuZCwgcG90ZW50aWFsbHksIHRoZSByZWFkaW5nIG9mIFNGUCYjMzk7cyBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByZWdpc3RlcnMgaXQmIzM5O3MgYWNjZXNzaW5nLCB3aGF0IEkyQyBvciBvdGhlciBwcm90b2NvbHMgaXQgbWF5IGJlIHVzaW5nLCBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIGludGVycHJldGluZyB0byBkZXRlcm1pbmUgdGhlIFBIWSYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MuIEFsc28sIHdoYXQgdHlwZXMgb2YgUEhZcyBkb2VzIGl0IGhhbmRsZT8gQW55IHNwZWNpZmljIHZlbmRvciBjb25zaWRlcmF0aW9ucz8gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZSBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MDc6XHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjE3MDg6XHR7XG4xNzA5Olx0XHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xuMTcxMDpcdFx0aW50IHJldCA9IDA7XG4xNzExOlx0XG4xNzEyOlx0XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSkge1xuMTcxMzpcdFx0XHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpO1xuMTcxNDpcdFx0XHRpZiAoSVNfRVJSKGJ1cykpXG4xNzE1Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcbjE3MTY6XHRcbjE3MTc6XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG4xNzE4Olx0XG4xNzE5Olx0XHRcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4xNzIwOlx0XHRcdHNmcF9idXNfcHV0KGJ1cyk7XG4xNzIxOlx0XG4xNzIyOlx0XHRcdGlmIChyZXQpXG4xNzIzOlx0XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuMTcyNDpcdFx0fVxuMTcyNTpcdFxuMTcyNjpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuMTcyNzpcdFx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbjE3Mjg6XHRcbjE3Mjk6XHRcdHJldHVybiByZXQ7XG4xNzMwOlx0fVxuMTczMTpcdFxuMTczMjpcdHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4xNzMzOlx0e1xuMTczNDpcdFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4xNzM1Olx0fVxuMTczNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFNGUCBEZXZpY2UgSW5zdGFudGlhdGlvbiBmb3IgVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgYW4gU0ZQIGJ1cywgc3BlY2lmaWNhbGx5IHRoZSBgc2ZwX2J1c2AsIGdldHMgY3JlYXRlZC4gVGhlIHRleHQgaW5kaWNhdGVzIGl0JiMzOTtzIHR5cGljYWxseSBkb25lIHRocm91Z2ggdGhlIGBmd25vZGVgIChkZXZpY2UgdHJlZSBvciBBQ1BJKSBtZWNoYW5pc20sIGFuZCB0aGUgYHNmcGAgcGxhdGZvcm0gZHJpdmVyIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGluc3RhbnRpYXRpbmcgdGhlIGBzZnBfYnVzYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB3aGV0aGVyIHRoZXJlJiMzOTtzIGEgcmVsaWFibGUgd2F5IHRvIGdldCBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHVwIGFuZCBydW5uaW5nIGluIGEgdGVzdCBlbnZpcm9ubWVudCwgcGFydGljdWxhcmx5IHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHVwLCB3aXRob3V0IHJlc29ydGluZyB0byBjdXN0b20gZGV2aWNlIHRyZWUgb3ZlcmxheXMuCgpUaGUgcXVlc3Rpb24gb2Ygd2hldGhlciBJIGNhbiBpbml0aWF0ZSB0aGlzIGZyb20gdXNlcnNwYWNlLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgcHJvZ3JhbW1hdGljIHdheSB0byBkbyBpdC4KCkdpdmVuIHN5emthbGxlciYjMzk7cyByb2xlIGluIHRoaXMsIGFuZCB0aGF0IGl0IGRvZXNuJiMzOTt0IGdlbmVyYWxseSBsZXZlcmFnZSBkZXZpY2UgdHJlZSBvdmVybGF5cywgbXkgdGhvdWdodHMgcXVpY2tseSB0dXJuZWQgdG8gd2hldGhlciBJIGNvdWxkIGxldmVyYWdlIGFueSBleGlzdGluZyBzeXprYWxsZXIgZmVhdHVyZXMgbGlrZSB0aGUgYHN5c2ZzYCBvciBgY29uZmlnZnNgIGludGVyZmFjZXMgZm9yIHRoaXMgcHVycG9zZS4gQnV0IHRoZW4gSSByZWNhbGxlZCB0aGF0IGl0IGRvZXNuJiMzOTt0IHByb3ZpZGUgZ2VuZXJpYyBzdXBwb3J0IGZvciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcywgdW5sZXNzIHRoZXJlJiMzOTtzIGEgZHJpdmVyIGFscmVhZHkgaW4gcGxhY2UgdGhhdCBleHBvc2VzIHNvbWV0aGluZy4gVGhhdCB3b24mIzM5O3QgZG8gaGVyZS4KClRoZW4sIGEgZmxpY2tlciBvZiBhbiBpZGVhOiB3aGF0IGFib3V0IHRoZSBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGAgZnVuY3Rpb24/IFRoYXQgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIE1heWJlIHRoaXMgaXMgYSByZWxldmFudCBwYXRod2F5LiBJcyBgc2ZwLmNgIGFjdHVhbGx5IHJlYWNoYWJsZT8gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGZvciBhbnkgb3RoZXIgY2FsbGVycyBvZiBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIGluIHRoZSBjb2RlYmFzZS4gVGhhdCBtaWdodCBnaXZlIG1lIGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGlzIHByb2JlIGZ1bmN0aW9uIGdldHMgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciB0cmlnZ2VyaW5nIHRoZSBTRlAgZGV2aWNlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvX2kyY19wcm9iZV9yb2xsYmFsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM9MzkzPXN0YXRpYyBpbnQgaTJjX21paV93cml0ZV9yb2xsYmFsbChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgZGV2YWQsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQyMS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo0MjI6aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQyMy17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQ2NC19XG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM6NDY1OkVYUE9SVF9TWU1CT0xfR1BMKG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy00NjYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxOTQ9c3RhdGljIGludCBzZnBfc21fcHJvYmVfZm9yX3BoeShzdHJ1Y3Qgc2ZwICpzZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMTQtXHRcdCAqL1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIyMTU6XHRcdGVyciA9IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHNmcC1cdTAwM2VpMmMpO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMTYtXHRcdGlmIChlcnIgPT0gLUVOT0RFVikge1xuLS1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oPTIxPXN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMjItXHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpO1xuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg6MjM6aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTtcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFNGUCBEZXZpY2UgSW50ZXJhY3Rpb24gd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBJIGNhbiBnZXQgU3l6a2FsbGVyIHRvIGludGVyYWN0IHdpdGggYW4gU0ZQIGNhZ2UuIFRoZSBvbmx5IGZ1bmN0aW9uIEkgc2VlIGNhbGxpbmcgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBpcyBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCB3aGljaCBpcyBhIHByb21pc2luZyBsZWFkLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgdGhpcyBzdGF0ZSBtYWNoaW5lIHdpdGggU3l6a2FsbGVyPwoKVGhlIHN0YXRlIG1hY2hpbmUgbmVlZHMgYW4gU0ZQIHBsYXRmb3JtIGRldmljZSB0byBleGlzdC4gQ2FuIFN5emthbGxlciBjcmVhdGUgb25lIG9mIHRob3NlPyBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHVzaW5nIGAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzX3Byb2JlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYnV0IHRoYXQgd29uJiMzOTt0IHdvcmsg4oCTIGl0IG5lZWRzIGFuIGV4aXN0aW5nIGRldmljZS4gSSBjaGVja2VkIGlmIGBzeXpfZGV2X3BsYXRmb3JtX2FkZGAgd2FzIGF2YWlsYWJsZSDigJMgbm8gbHVjay4gSG1tLCBTeXprYWxsZXIgZG9lcyBoYXZlIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBkZXZpY2VzIHZpYSBgbmV0bGlua2AgZm9yIHZpcnR1YWwgaW50ZXJmYWNlcyBsaWtlIGB2ZXRoYCwgYG1hY3ZsYW5gLCBgZHVtbXlgLCBhbmQgYHZ4bGFuYC4gQnV0LCBub25lIG9mIHRob3NlLCBmcm9tIHdoYXQgSSBrbm93LCBoYXZlIGFuIFNGUCBjYWdlIHRvIHNpbXVsYXRlIG9yIGludGVyYWN0IHdpdGguIFRoYXQmIzM5O3MgYSBkZWFkIGVuZC4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suLi4gd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gRG9lcyBgbmV0ZGV2c2ltYCBoYXZlIGFuIFNGUCBjYWdlPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJZiBpdCAqZG9lcyosIHRoZW4gSSBtaWdodCBiZSBhYmxlIHRvIGNyYWZ0IGEgU3l6a2FsbGVyIHRlc3QgY2FzZSB0byBwcm9iZSB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgdGhyb3VnaCBgbmV0ZGV2c2ltYCwgYW5kIHRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgU3l6a2FsbGVyIHRyaWdnZXJzIHRoZXNlIGV2ZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIGFuZCBTRlAgQ2FnZSBDb21wYXRpYmlsaXR5KioKClJpZ2h0LCBzbyBJJiMzOTttIGhpdHRpbmcgYSByb2FkYmxvY2suIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBvZiB1c2luZyBgbWFjODAyMTFfaHdzaW1gIGZvciB0aGlzIHNldHVwIGp1c3Qgd29uJiMzOTt0IGN1dCBpdC4gSXQmIzM5O3Mgbm90IHRoZSByaWdodCBmaXQgZm9yIHRoZSBsZXZlbCBvZiBmbGV4aWJpbGl0eSBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gSSYjMzk7bSBsb29raW5nIGZvci4gTGV0JiMzOTtzIG1vdmUgb24uCgpOb3csIHRoZSBuZXh0IHRyYWluIG9mIHRob3VnaHQgaXMgdG8gY2hlY2sgYHZoY2lgIGZvciBhIHNvbHV0aW9uLiBXaXRoIGB2aGNpYCBJIGNvdWxkIHRoZW9yZXRpY2FsbHkgc2ltdWxhdGUgYSBVU0IgZGV2aWNlIHdoaWNoLCBpbiB0dXJuLCB3b3VsZCBjcmVhdGUgdGhlIG5ldHdvcmtpbmcgY29ubmVjdGl2aXR5IHJlcXVpcmVkLiBJJiMzOTttIHRyeWluZyB0byBkZXRlcm1pbmUgd2hldGhlciBhbnkgc3VpdGFibGUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgZXhpc3QgdGhhdCBhbHNvIGZlYXR1cmUgYW4gU0ZQIGNhZ2UuIEkmIzM5O20gbm90IGZhbWlsaWFyIHdpdGggYW55LCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIHRoYXQgb3IgbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRGV2aWNlIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIFRoZSBpbml0aWFsIGFuc3dlciBpcyAmIzM0O05vLCYjMzQ7IGJ1dCB3YWl0IGEgbWludXRlLi4uIHdoYXQgYWJvdXQgUGVyaXBoZXJhbCBDb21wb25lbnQgSW50ZXJjb25uZWN0IChQQ0kpIGRldmljZXM/IFN5emthbGxlciwgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiwgY2FuIGFic29sdXRlbHkgZnV6eiB0aGVzZSB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAuIFdlIGtub3cgdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG9mIHNldHVwcyB1c2luZyB2aXJ0dWFsIGZ1bmN0aW9uIEkvTyAoYHZmaW9gKSBvciB0aGUgUENJIHBzZXVkby1kZXZpY2UuCgpTbywgdGhlIGtleSBxdWVzdGlvbiBiZWNvbWVzOiBhcmUgdGhlcmUgYW55IFBDSSBuZXR3b3JrIGRyaXZlcnMgdGhhdCBoYW5kbGUgU21hbGwgRm9ybS1mYWN0b3IgUGx1Z2dhYmxlIChTRlApIHRyYW5zY2VpdmVycyBhbmQsIGNyaXRpY2FsbHksIGluc3RhbnRpYXRlIHRoZW0gKndpdGhvdXQqIHJlbHlpbmcgb24gdGhlIGRldmljZSB0cmVlPyBUaGF0JiMzOTtzIHRoZSBhbmdsZSBoZXJlLCByaWdodD8KCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGFueSBvZiB0aGVzZSBQQ0kgZHJpdmVycywgc3BlY2lmaWNhbGx5LCBhY3R1YWxseSBjYWxsIGBzZnBfcHJvYmVgIG9yIGRpcmVjdGx5IGNyZWF0ZSBhbiBTRlAgaW5zdGFuY2UuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCB0byBmaWd1cmUgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0yMTYwPWludCBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE2OC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNjk6ICogaXhnYmVfaXNfc2ZwX3Byb2JlIC0gUmV0dXJucyB0cnVlIGlmIFNGUCBpcyBiZWluZyBkZXRlY3RlZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3MC0gKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3My0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNzQ6c3RhdGljIGJvb2wgaXhnYmVfaXNfc2ZwX3Byb2JlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IG9mZnNldCwgdTggYWRkcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTIxOTQ9c3RhdGljIGludCBpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWNfaW50KHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDQtXHRcdG1heF9yZXRyeSA9IDM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMjA1Olx0aWYgKGl4Z2JlX2lzX3NmcF9wcm9iZShodywgYnl0ZV9vZmZzZXQsIGRldl9hZGRyKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDYtXHRcdG1heF9yZXRyeSA9IElYR0JFX1NGUF9ERVRFQ1RfUkVUUklFUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NDIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipTRlAgQ29uZnVzaW9uIGluIGl4Z2JlIGFuZCBCZXlvbmQqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGBpeGdiZWAgZHJpdmVyIGFnYWluLCBhbmQgc29tZXRoaW5nJiMzOTtzIGp1c3Qgbm90IHF1aXRlIGNsaWNraW5nLiBJIHNlZSBgaXhnYmVgIGhhcyB0aGlzIGBpeGdiZV9pc19zZnBfcHJvYmVgIGZ1bmN0aW9uIOKAkyBjbGVhcmx5IGRlYWxpbmcgd2l0aCBTRlAgbW9kdWxlcywgcmlnaHQ/IEJ1dCB0aGVuIEkgcmVtZW1iZXIsIGl0IGRvZXNuJiMzOTt0IGFjdHVhbGx5ICp1c2UqIHRoZSBnZW5lcmljIGBzZnBgIHBsYXRmb3JtIGRyaXZlci4gSXQmIzM5O3MgZ290IGl0cyBvd24sIGJlc3Bva2UgU0ZQIGxvZ2ljIGltcGxlbWVudGVkIHJpZ2h0IHdpdGhpbiB0aGUgYGl4Z2JlYCBjb2RlLiBUaGF0JiMzOTtzIGEgbGl0dGxl4oCmIHVudXN1YWwsIGZyYW5rbHkuCgpXaGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXI6IHdhaXQgYSBtaW51dGUsIGRvZXMgKmFueSogZHJpdmVyIGFjdHVhbGx5IGJvdGhlciB0byBpbnN0YW50aWF0ZSB0aGUgYHNmcGAgcGxhdGZvcm0gZGV2aWNlPyBJcyB0aGVyZSBhIHZhbGlkIHVzZSBjYXNlPyBJdCBzZWVtcyBsaWtlIGV2ZXJ5IGRyaXZlciB0aGF0IHdhbnRzIHRvIGRlYWwgd2l0aCBTRlBzIGlzIGp1c3Qgcm9sbGluZyBpdHMgb3duIHNvbHV0aW9uLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBpbnRvIHRoaXMgZnVydGhlciwgcGVyaGFwcyBnbyBzcGVsdW5raW5nIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGNvbmZpcm0gdGhpcy4gU29tZXRoaW5nIHNlZW1zIGFtaXNzIHdpdGggdGhlIFNGUCBpbmZyYXN0cnVjdHVyZSwgb3IgcGVyaGFwcyBJJiMzOTttIG1pc3NpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGVcXChcJiMzNDtzZnBcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBhdWRpZW5jZSBpcyBhbm90aGVyIGV4cGVydDoKCioqQ29uc2lkZXJpbmcgRGV2aWNlIFJlZ2lzdHJhdGlvbiBmb3IgJiMzNDtzZnAmIzM0OyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBoYW5kbGUgdGhpcyAmIzM0O3NmcCYjMzQ7IHNpdHVhdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBpcyBnb2luZyB0byBiZSBkZXZpY2UgcmVnaXN0cmF0aW9uLCBtYWtpbmcgc3VyZSB0aGUgc3lzdGVtIHByb3Blcmx5IHJlY29nbml6ZXMgYW5kIG1hbmFnZXMgaXQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgb3IgYHBsYXRmb3JtX2RldmljZV9hbGxvY2AuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXZpY2U/IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHF1ZXN0aW9uLiBJZiBzbywgdGhvc2UgcGxhdGZvcm0gQVBJcyB3b3VsZCBiZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gYHBsYXRmb3JtX2RldmljZV9hbGxvY2Agd291bGQgZ2l2ZSBtZSB0aGUgZmxleGliaWxpdHkgdG8gY29uc3RydWN0IHRoZSBkZXZpY2Ugc3RydWN0dXJlIGV4YWN0bHkgYXMgbmVlZGVkLCB3aGlsZSBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYCBzdHJlYW1saW5lcyB0aGUgcHJvY2VzcyBpZiB0aGUgY29yZSBkZXRhaWxzIGFyZSBhbHJlYWR5IGF2YWlsYWJsZS4gVGhlIGNob2ljZSBoaW5nZXMgb24gdGhlIHNwZWNpZmljcywgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGhhcmR3YXJlIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBzdGFuZGFyZCBwbGF0Zm9ybSBkZXZpY2Ugb3Igc29tZXRoaW5nIG1vcmUgY3VzdG9tLiBUaGlzIHdpbGwgZ3VpZGUgd2hldGhlciBJIG5lZWQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3IgYSBzaW1wbGVyIHJlZ2lzdHJhdGlvbiBtZXRob2QuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgd2lyZWQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1wmIzM0O3NmcFwmIzM0OyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmM9MTY2Nj1zdGF0aWMgdm9pZCB4Z2VuZV9lbmV0X2dwaW9kX2dldChzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jLTE2NzgtXHRpZiAoSVNfRVJSKHBkYXRhLVx1MDAzZXNmcF9yZHkpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jOjE2Nzk6XHRcdHBkYXRhLVx1MDAzZXNmcF9yZHkgPSBncGlvZF9nZXQoZGV2LCBcJiMzNDtzZnBcJiMzNDssIEdQSU9EX0lOKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0xNjgwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jPTQ2Nj1zdGF0aWMgaW50IHhnZW5lX2VuZXRfZ3Bpb19sb29rdXAoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmMtNDcxLVx0aWYgKElTX0VSUihwZGF0YS1cdTAwM2VzZnBfcmR5KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmM6NDcyOlx0XHRwZGF0YS1cdTAwM2VzZnBfcmR5ID0gZ3Bpb2RfZ2V0KGRldiwgXCYjMzQ7c2ZwXCYjMzQ7LCBHUElPRF9JTik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jLTQ3My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTI3PXN0YXRpYyBpbnQgdHhnYmVfc3dub2Rlc19yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXHRub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzWzBdID0gUFJPUEVSVFlfRU5UUllfU1RSSU5HKFwmIzM0O21hbmFnZWRcJiMzNDssIFwmIzM0O2luLWJhbmQtc3RhdHVzXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Nzc6XHRub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O3NmcFwmIzM0Oywgbm9kZXMtXHUwMDNlc2ZwX3JlZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTc4LVx0c3dub2Rlc1tTV05PREVfUEhZTElOS10gPSBOT0RFX1BST1Aobm9kZXMtXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTEyLVx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cdTAwM2Vub2Rlcy5ncm91cFtTV05PREVfU0ZQXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUxMzpcdGluZm8ubmFtZSA9IFwmIzM0O3NmcFwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVx0aW5mby5pZCA9IHBjaV9kZXZfaWQocGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjM5CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSB0eGdiZSBQSFkgRHJpdmVyKioKCkFscmlnaHQsIG15IGludGVybmFsIHJhZGFyIGp1c3QgcGluZ2VkIOKAkyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmNgIGZpbGUuLi4gYWhhISBJdCYjMzk7cyByZWdpc3RlcmluZyBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlLCBhIGtleSBwYXJ0IG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSBzZXR1cC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHpvb20gaW4gb24gYHR4Z2JlX3NmcF9yZWdpc3RlcmAuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIFNGUCBtb2R1bGUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBpbml0aWFsIHByb2JpbmcsIGRldGVjdGlvbiwgYW5kIHBvc3NpYmx5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0ZQLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0IGRldGVybWluZXMgdGhlIFNGUCYjMzk7cyB0eXBlLCB3aGF0IGtpbmQgb2YgSTJDIGJ1cyBjb25maWd1cmF0aW9uIGl0IHNldHMgdXAsIGFuZCBhbnkgcG93ZXIgbWFuYWdlbWVudCBwcm9jZWR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCB0byBhIHN0YWJsZSBhbmQgY29ycmVjdCBsaW5rLiBJJiMzOTtsbCBiZSBkcmlsbGluZyBkb3duIHRvIGV4YW1pbmUgdGhlIHJlZ2lzdGVyIGludGVyYWN0aW9uIHdpdGggdGhlIFBIWSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwNTpcdHN0YXRpYyBpbnQgdHhnYmVfc2ZwX3JlZ2lzdGVyKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4gNTA2Olx0e1xuIDUwNzpcdFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0eGdiZS1cdTAwM2V3eC1cdTAwM2VwZGV2O1xuIDUwODpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGluZm8gPSB7fTtcbiA1MDk6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNmcF9kZXY7XG4gNTEwOlx0XG4gNTExOlx0XHRpbmZvLnBhcmVudCA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIDUxMjpcdFx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cdTAwM2Vub2Rlcy5ncm91cFtTV05PREVfU0ZQXSk7XG4gNTEzOlx0XHRpbmZvLm5hbWUgPSBcJiMzNDtzZnBcJiMzNDs7XG4gNTE0Olx0XHRpbmZvLmlkID0gcGNpX2Rldl9pZChwZGV2KTtcbiA1MTU6XHRcdHNmcF9kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChcdTAwMjZpbmZvKTtcbiA1MTY6XHRcdGlmIChJU19FUlIoc2ZwX2RldikpXG4gNTE3Olx0XHRcdHJldHVybiBQVFJfRVJSKHNmcF9kZXYpO1xuIDUxODpcdFxuIDUxOTpcdFx0dHhnYmUtXHUwMDNlc2ZwX2RldiA9IHNmcF9kZXY7XG4gNTIwOlx0XG4gNTIxOlx0XHRyZXR1cm4gMDtcbiA1MjI6XHR9XG4gNTIzOlx0XG4gNTI0Olx0c3RhdGljIGludCB0eGdiZV9leHRfcGh5X2luaXQoc3RydWN0IHR4Z2JlICp0eGdiZSlcbiA1MjU6XHR7XG4gNTI2Olx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuIDUyNzpcdFx0c3RydWN0IG1paV9idXMgKm1paV9idXM7XG4gNTI4Olx0XHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbiA1Mjk6XHRcdHN0cnVjdCB3eCAqd3g7XG4gNTMwOlx0XHRpbnQgcmV0ID0gMDtcbiA1MzE6XHRcbiA1MzI6XHRcdHd4ID0gdHhnYmUtXHUwMDNld3g7XG4gNTMzOlx0XHRwZGV2ID0gd3gtXHUwMDNlcGRldjtcbiA1MzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgV2FuZ3h1biAxMEdiRSBOSUMgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHR4Z2JlYCBkcml2ZXIg4oCTIHRoYXQmIzM5O3MgdGhlIFdhbmd4dW4gMTBHYkUgUENJIEV4cHJlc3MgTklDLCByaWdodD8gSSYjMzk7bSB3b25kZXJpbmcgaWYgd2UgY2FuIGFjdHVhbGx5IGdldCBTeXprYWxsZXIgdG8gZnV6eiBpdC4gVGhlIG9idmlvdXMgcm91dGUgaXMgdGhyb3VnaCBQQ0kgZnV6emluZywgd2hpY2ggaXMgZW5hYmxlZC4gQnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25uZWN0aW9uIHBvaW50cy4KClRoZSBrZXkgc2VlbXMgdG8gYmUgdGhhdCBgdHhnYmVgIHJlZ2lzdGVycyBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlLiBJbnRlcmVzdGluZy4gRG9lcyBpdCAqdXNlKiBTRlA/IFllcywgaXQgZG9lcywgaXQmIzM5O3MgY2FsbGVkICYjMzQ7c2ZwJiMzNDsuCgpBaCwgcmlnaHQsIHRoZSBgc2ZwYCBkcml2ZXIgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGdvaW5nIHRvIHByb2JlIGZvciBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggdGhhdCBuYW1lLiBTbywgaWYgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBhIHZpcnR1YWwgUENJIGRldmljZSB0aGF0IG1hdGNoZXMgYHR4Z2JlYCwgdGhlIGB0eGdiZWAgZHJpdmVyIHdpbGwgcHJvYmUgYXMgaXQgc2hvdWxkLiBUaGVuLCBiZWNhdXNlIG9mIGhvdyB0aGlzIGRyaXZlciBpcyBzdHJ1Y3R1cmVkLCBpdCB3aWxsIGNhbGwgYHR4Z2JlX3NmcF9yZWdpc3RlcmAsIHdoaWNoIGNyZWF0ZXMgdGhpcyAmIzM0O3NmcCYjMzQ7IHBsYXRmb3JtIGRldmljZS4gQXQgdGhpcyBwb2ludCwgdGhlIGBzZnBgIGRyaXZlciBzaG91bGQgcHJvYmUhCgpPa2F5LCB0aGF0JiMzOTtzIGEgcHJvbWlzaW5nIHBhdGguIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIHRoZSBgc2ZwYCBkcml2ZXIgZGVwZW5kIG9uIGFueSBzcGVjaWZpYyBHUElPcyBvciBJMkMgYnVzZXMgYmVpbmcgcHJlc2VudD8gSWYgaXQgZG9lcywgdGhlbiBTeXprYWxsZXIgd291bGQgbmVlZCB0byBiZSBjb25maWd1cmVkIHRvIGVtdWxhdGUgdGhvc2UgYXMgd2VsbCB0byBoYXZlIGFueSBzdWNjZXNzLiBMZXQgbWUgZ28gY2hlY2sgdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zZnAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyODMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI4MzpcdHN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4zMjg0Olx0e1xuMzI4NTpcdFx0Y29uc3Qgc3RydWN0IHNmZl9kYXRhICpzZmY7XG4zMjg2Olx0XHRjaGFyICpzZnBfaXJxX25hbWU7XG4zMjg3Olx0XHRzdHJ1Y3Qgc2ZwICpzZnA7XG4zMjg4Olx0XHRpbnQgZXJyLCBpO1xuMzI4OTpcdFxuMzI5MDpcdFx0c2ZwID0gc2ZwX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjMyOTE6XHRcdGlmIChJU19FUlIoc2ZwKSlcbjMyOTI6XHRcdFx0cmV0dXJuIFBUUl9FUlIoc2ZwKTtcbjMyOTM6XHRcbjMyOTQ6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNmcCk7XG4zMjk1Olx0XG4zMjk2Olx0XHRlcnIgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoc2ZwLVx1MDAzZWRldiwgc2ZwX2NsZWFudXAsIHNmcCk7XG4zMjk3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzI5ODpcdFx0XHRyZXR1cm4gZXJyO1xuMzI5OTpcdFxuMzMwMDpcdFx0c2ZmID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHNmcC1cdTAwM2VkZXYpO1xuMzMwMTpcdFx0aWYgKCFzZmYpXG4zMzAyOlx0XHRcdHNmZiA9IFx1MDAyNnNmcF9kYXRhO1xuMzMwMzpcdFxuMzMwNDpcdFx0c2ZwLVx1MDAzZXR5cGUgPSBzZmY7XG4zMzA1Olx0XG4zMzA2Olx0XHRlcnIgPSBzZnBfaTJjX2dldChzZnApO1xuMzMwNzpcdFx0aWYgKGVycilcbjMzMDg6XHRcdFx0cmV0dXJuIGVycjtcbjMzMDk6XHRcbjMzMTA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEdQSU9fTUFYOyBpJiM0MzsmIzQzOylcbjMzMTE6XHRcdFx0aWYgKHNmZi1cdTAwM2VncGlvcyBcdTAwMjYgQklUKGkpKSB7XG4zMzEyOlx0XHRcdFx0c2ZwLVx1MDAzZWdwaW9baV0gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChzZnAtXHUwMDNlZGV2LFxuMzMxMzpcdFx0XHRcdFx0XHQgICBncGlvX25hbWVzW2ldLCBncGlvX2ZsYWdzW2ldKTtcbjMzMTQ6XHRcdFx0XHRpZiAoSVNfRVJSKHNmcC1cdTAwM2VncGlvW2ldKSlcbjMzMTU6XHRcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNmcC1cdTAwM2VncGlvW2ldKTtcbjMzMTY6XHRcdFx0fVxuMzMxNzpcdFxuMzMxODpcdFx0c2ZwLVx1MDAzZXN0YXRlX2h3X21hc2sgPSBTRlBfRl9QUkVTRU5UO1xuMzMxOTpcdFx0c2ZwLVx1MDAzZXN0YXRlX2h3X2RyaXZlID0gU0ZQX0ZfVFhfRElTQUJMRTtcbjMzMjA6XHRcbjMzMjE6XHRcdHNmcC1cdTAwM2VnZXRfc3RhdGUgPSBzZnBfZ3Bpb19nZXRfc3RhdGU7XG4zMzIyOlx0XHRzZnAtXHUwMDNlc2V0X3N0YXRlID0gc2ZwX2dwaW9fc2V0X3N0YXRlO1xuMzMyMzpcdFxuMzMyNDpcdFx0LyogQW4gU0ZQIGNhZ2Ugd2l0aCBubyBNT0RfREVGMCBHUElPIGhhcyBubyBoYXJkd2FyZSBwcmVzZW5jZSBzaWduYWwuXG4zMzI1Olx0XHQgKiBBc3N1bWluZyB0aGUgbW9kdWxlIGlzIGFsd2F5cyBwcmVzZW50IHRyYXBzIGFuIGVtcHR5IGNhZ2UgaW5cbjMzMjY6XHRcdCAqIE1PRF9FUlJPUiBhbmQgbmV2ZXIgZGV0ZWN0cyBob3QtaW5zZXJ0aW9uLCBzbyBkZXJpdmUgcHJlc2VuY2UgZnJvbSBhXG4zMzI3Olx0XHQgKiB0aHJvdHRsZWQgSTJDIHByb2JlIGFuZCBwb2xsIGZvciBjaGFuZ2VzIGluc3RlYWQuIHNmcF9pMmNfY29uZmlndXJlKClcbjMzMjg6XHRcdCAqIGhhcyBhbHJlYWR5IHNldCBpMmNfbWF4X2Jsb2NrX3NpemU7IHNlZWQgaTJjX2Jsb2NrX3NpemUgc28gdGhlXG4zMzI5Olx0XHQgKiBwcmVzZW5jZSByZWFkIGRvZXMgbm90IGlzc3VlIGEgemVyby1sZW5ndGggdHJhbnNmZXIgYmVmb3JlIHRoZSBmaXJzdFxuMzMzMDpcdFx0ICogRUVQUk9NIHJlYWQuIFNlZWQgaTJjX3ByZXNlbnRfbmV4dCB0byBqaWZmaWVzIHNvIHRoZSBmaXJzdCBwcm9iZVxuMzMzMTpcdFx0ICogaGFwcGVucyBpbW1lZGlhdGVseSAoYSB6ZXJvIHZhbHVlIHdvdWxkIGJlIGluIHRoZSBwYXN0IHJlbGF0aXZlIHRvXG4zMzMyOlx0XHQgKiB0aGUgbmVnYXRpdmUgSU5JVElBTF9KSUZGSUVTIGF0IGJvb3QgYW5kIGRlbGF5IGRldGVjdGlvbikuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDU4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJMkMgQWRhcHRlciBSZXRyaWV2YWwqKgoKT2theSwgc28gYHNmcF9pMmNfZ2V0YCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGdldHRpbmcgdGhlIEkyQyBhZGFwdGVyLiBUaGUgY29yZSBvZiBhbnkgZHJpdmVyIGludGVyYWN0aW9uIHdpdGggSTJDIGhpbmdlcyBvbiB0aGlzLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgc2ZwX2kyY19nZXRgIGFjdHVhbGx5IGFjY29tcGxpc2hlcyB0aGlzLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBsb29rdXAgYmFzZWQgb24gYSBwcmVkZWZpbmVkIGFkZHJlc3MsIG9yIGlzIHRoZXJlIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGRpc2NvdmVyeSBtZWNoYW5pc20gYXQgcGxheT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBleHBsaWNpdGx5IGhhbmRsZWQsIGFuZCBpZiBzbywgaG93PyBXaGF0IGFyZSB0aGUgdW5kZXJseWluZyBhc3N1bXB0aW9ucyB0aGlzIGZ1bmN0aW9uIG1ha2VzIGFib3V0IHRoZSBoYXJkd2FyZSBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZT8gSSB3YW50IHRvIGtub3cgaWYgaXQmIzM5O3MgdGhyZWFkLXNhZmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBVbHRpbWF0ZWx5LCBteSBhbmFseXNpcyB3aWxsIGZvY3VzIG9uIGFuc3dlcmluZyBob3cgdGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHRvIHJldHJpZXZlIHRoZSBJMkMgYWRhcHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyNTc6XHRzdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcbjMyNTg6XHR7XG4zMjU5Olx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqaDtcbjMyNjA6XHRcdHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjO1xuMzI2MTpcdFx0aW50IGVycjtcbjMyNjI6XHRcbjMyNjM6XHRcdGggPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2X2Z3bm9kZShzZnAtXHUwMDNlZGV2KSwgXCYjMzQ7aTJjLWJ1c1wmIzM0OywgMCk7XG4zMjY0Olx0XHRpZiAoSVNfRVJSKGgpKSB7XG4zMjY1Olx0XHRcdGRldl9lcnIoc2ZwLVx1MDAzZWRldiwgXCYjMzQ7bWlzc2luZyAmIzM5O2kyYy1idXMmIzM5OyBwcm9wZXJ0eVxcblwmIzM0Oyk7XG4zMjY2Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMzI2NzpcdFx0fVxuMzI2ODpcdFxuMzI2OTpcdFx0aTJjID0gaTJjX2dldF9hZGFwdGVyX2J5X2Z3bm9kZShoKTtcbjMyNzA6XHRcdGlmICghaTJjKSB7XG4zMjcxOlx0XHRcdGVyciA9IC1FUFJPQkVfREVGRVI7XG4zMjcyOlx0XHRcdGdvdG8gcHV0O1xuMzI3MzpcdFx0fVxuMzI3NDpcdFxuMzI3NTpcdFx0ZXJyID0gc2ZwX2kyY19jb25maWd1cmUoc2ZwLCBpMmMpO1xuMzI3NjpcdFx0aWYgKGVycilcbjMyNzc6XHRcdFx0aTJjX3B1dF9hZGFwdGVyKGkyYyk7XG4zMjc4Olx0cHV0OlxuMzI3OTpcdFx0Zndub2RlX2hhbmRsZV9wdXQoaCk7XG4zMjgwOlx0XHRyZXR1cm4gZXJyO1xuMzI4MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMTIKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYW50aWNpcGF0aW5nIHdoYXQgYSBrbm93bGVkZ2VhYmxlIHVzZXIgd291bGQgYmUgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBJMkMgQnVzIFJlcXVpcmVtZW50cyBmb3IgVGhpcyBEZXZpY2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlIGFuZCB0aGUgZndub2RlIHN0cnVjdHVyZS4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCByZXF1aXJlcyBhbiBgaTJjLWJ1c2AgcHJvcGVydHkuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXMgd2hldGhlciB0aGUgYHR4Z2JlYCBkcml2ZXIgYWN0dWFsbHkgcHJvdmlkZXMgdGhpcyBwcm9wZXJ0eSBpbiBpdHMgZndub2RlIGRlZmluaXRpb24uIEkgbmVlZCB0byBnbyBhbmQgY2hlY2sgdGhlIGRyaXZlciBzb3VyY2UgY29kZSBhbmQgdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHR4Z2JlYCBpcyBjb3JyZWN0bHkgcG9wdWxhdGluZyB0aGF0IGBpMmMtYnVzYCBwcm9wZXJ0eSwgYW5kIGlmIG5vdCwgd2h5LiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgdGhhdCBhcmVuJiMzOTt0IGJlaW5nIGV4cGxpY2l0bHkgc3RhdGVkPyBBcmUgdGhlcmUgYW55IGRvd25zdHJlYW0gZGVwZW5kZW5jaWVzIHJlbHlpbmcgb24gdGhpcz8gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGhhcmR3YXJlIGlzIGJlaW5nIGNvbmZpZ3VyZWQgcHJvcGVybHkuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgY29ycmVjdCBjb21tdW5pY2F0aW9uIHdpdGggYW55IEkyQy1jb25uZWN0ZWQgcGVyaXBoZXJhbHMgb24gdGhpcyBib2FyZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBnb2luZyB0byBjYXVzZSBhbnkgc2lsZW50IGVycm9ycyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI3Olx0c3RhdGljIGludCB0eGdiZV9zd25vZGVzX3JlZ2lzdGVyKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4gIDI4Olx0e1xuICAyOTpcdFx0c3RydWN0IHR4Z2JlX25vZGVzICpub2RlcyA9IFx1MDAyNnR4Z2JlLVx1MDAzZW5vZGVzO1xuICAzMDpcdFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0eGdiZS1cdTAwM2V3eC1cdTAwM2VwZGV2O1xuICAzMTpcdFx0c3RydWN0IHNvZnR3YXJlX25vZGUgKnN3bm9kZXM7XG4gIDMyOlx0XHR1MzIgaWQ7XG4gIDMzOlx0XG4gIDM0Olx0XHRpZCA9IHBjaV9kZXZfaWQocGRldik7XG4gIDM1Olx0XG4gIDM2Olx0XHRzbnByaW50Zihub2Rlcy1cdTAwM2VncGlvX25hbWUsIHNpemVvZihub2Rlcy1cdTAwM2VncGlvX25hbWUpLCBcJiMzNDt0eGdiZV9ncGlvLSV4XCYjMzQ7LCBpZCk7XG4gIDM3Olx0XHRzbnByaW50Zihub2Rlcy1cdTAwM2VpMmNfbmFtZSwgc2l6ZW9mKG5vZGVzLVx1MDAzZWkyY19uYW1lKSwgXCYjMzQ7dHhnYmVfaTJjLSV4XCYjMzQ7LCBpZCk7XG4gIDM4Olx0XHRzbnByaW50Zihub2Rlcy1cdTAwM2VzZnBfbmFtZSwgc2l6ZW9mKG5vZGVzLVx1MDAzZXNmcF9uYW1lKSwgXCYjMzQ7dHhnYmVfc2ZwLSV4XCYjMzQ7LCBpZCk7XG4gIDM5Olx0XHRzbnByaW50Zihub2Rlcy1cdTAwM2VwaHlsaW5rX25hbWUsIHNpemVvZihub2Rlcy1cdTAwM2VwaHlsaW5rX25hbWUpLCBcJiMzNDt0eGdiZV9waHlsaW5rLSV4XCYjMzQ7LCBpZCk7XG4gIDQwOlx0XG4gIDQxOlx0XHRzd25vZGVzID0gbm9kZXMtXHUwMDNlc3dub2RlcztcbiAgNDI6XHRcbiAgNDM6XHRcdC8qIEdQSU8gMDogdHggZmF1bHRcbiAgNDQ6XHRcdCAqIEdQSU8gMTogdHggZGlzYWJsZVxuICA0NTpcdFx0ICogR1BJTyAyOiBzZnAgbW9kdWxlIGFic2VudFxuICA0NjpcdFx0ICogR1BJTyAzOiByeCBzaWduYWwgbG9zdFxuICA0NzpcdFx0ICogR1BJTyA0OiByYXRlIHNlbGVjdCwgMUcoMCkgMTBHKDEpXG4gIDQ4Olx0XHQgKiBHUElPIDU6IHJhdGUgc2VsZWN0LCAxRygwKSAxMEcoMSlcbiAgNDk6XHRcdCAqL1xuICA1MDpcdFx0bm9kZXMtXHUwMDNlZ3Bpb19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcJiMzNDtwaW5jdHJsLW5hbWVzXCYjMzQ7LCBcJiMzNDtkZWZhdWx0XCYjMzQ7KTtcbiAgNTE6XHRcdHN3bm9kZXNbU1dOT0RFX0dQSU9dID0gTk9ERV9QUk9QKG5vZGVzLVx1MDAzZWdwaW9fbmFtZSwgbm9kZXMtXHUwMDNlZ3Bpb19wcm9wcyk7XG4gIDUyOlx0XHRub2Rlcy1cdTAwM2VncGlvMF9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMCwgR1BJT19BQ1RJVkVfSElHSCk7XG4gIDUzOlx0XHRub2Rlcy1cdTAwM2VncGlvMV9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMSwgR1BJT19BQ1RJVkVfSElHSCk7XG4gIDU0Olx0XHRub2Rlcy1cdTAwM2VncGlvMl9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMiwgR1BJT19BQ1RJVkVfTE9XKTtcbiAgNTU6XHRcdG5vZGVzLVx1MDAzZWdwaW8zX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAzLCBHUElPX0FDVElWRV9ISUdIKTtcbiAgNTY6XHRcdG5vZGVzLVx1MDAzZWdwaW80X3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCA0LCBHUElPX0FDVElWRV9ISUdIKTtcbiAgNTc6XHRcdG5vZGVzLVx1MDAzZWdwaW81X3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCA1LCBHUElPX0FDVElWRV9ISUdIKTtcbiAgNTg6XHRcbiAgNTk6XHRcdG5vZGVzLVx1MDAzZWkyY19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcJiMzNDtjb21wYXRpYmxlXCYjMzQ7LCBcJiMzNDtzbnBzLGRlc2lnbndhcmUtaTJjXCYjMzQ7KTtcbiAgNjA6XHRcdG5vZGVzLVx1MDAzZWkyY19wcm9wc1sxXSA9IFBST1BFUlRZX0VOVFJZX0JPT0woXCYjMzQ7d3gsaTJjLXNucHMtbW9kZWxcJiMzNDspO1xuICA2MTpcdFx0bm9kZXMtXHUwMDNlaTJjX3Byb3BzWzJdID0gUFJPUEVSVFlfRU5UUllfVTMyKFwmIzM0O2Nsb2NrLWZyZXF1ZW5jeVwmIzM0OywgSTJDX01BWF9TVEFOREFSRF9NT0RFX0ZSRVEpO1xuICA2MjpcdFx0c3dub2Rlc1tTV05PREVfSTJDXSA9IE5PREVfUFJPUChub2Rlcy1cdTAwM2VpMmNfbmFtZSwgbm9kZXMtXHUwMDNlaTJjX3Byb3BzKTtcbiAgNjM6XHRcdG5vZGVzLVx1MDAzZWkyY19yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9JMkNdKTtcbiAgNjQ6XHRcbiAgNjU6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcJiMzNDtjb21wYXRpYmxlXCYjMzQ7LCBcJiMzNDtzZmYsc2ZwXCYjMzQ7KTtcbiAgNjY6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1sxXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDtpMmMtYnVzXCYjMzQ7LCBub2Rlcy1cdTAwM2VpMmNfcmVmKTtcbiAgNjc6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1syXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDt0eC1mYXVsdC1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzBfcmVmKTtcbiAgNjg6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1szXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDt0eC1kaXNhYmxlLWdwaW9zXCYjMzQ7LCBub2Rlcy1cdTAwM2VncGlvMV9yZWYpO1xuICA2OTpcdFx0bm9kZXMtXHUwMDNlc2ZwX3Byb3BzWzRdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O21vZC1kZWYwLWdwaW9zXCYjMzQ7LCBub2Rlcy1cdTAwM2VncGlvMl9yZWYpO1xuICA3MDpcdFx0bm9kZXMtXHUwMDNlc2ZwX3Byb3BzWzVdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O2xvcy1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzNfcmVmKTtcbiAgNzE6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1s2XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDtyYXRlLXNlbGVjdDEtZ3Bpb3NcJiMzNDssIG5vZGVzLVx1MDAzZWdwaW80X3JlZik7XG4gIDcyOlx0XHRub2Rlcy1cdTAwM2VzZnBfcHJvcHNbN10gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7cmF0ZS1zZWxlY3QwLWdwaW9zXCYjMzQ7LCBub2Rlcy1cdTAwM2VncGlvNV9yZWYpO1xuICA3MzpcdFx0c3dub2Rlc1tTV05PREVfU0ZQXSA9IE5PREVfUFJPUChub2Rlcy1cdTAwM2VzZnBfbmFtZSwgbm9kZXMtXHUwMDNlc2ZwX3Byb3BzKTtcbiAgNzQ6XHRcdG5vZGVzLVx1MDAzZXNmcF9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9TRlBdKTtcbiAgNzU6XHRcbiAgNzY6XHRcdG5vZGVzLVx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXCYjMzQ7bWFuYWdlZFwmIzM0OywgXCYjMzQ7aW4tYmFuZC1zdGF0dXNcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc1MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBTRlAgU3RhdGUgTWFjaGluZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBTRlAgc3RhdGUgbWFjaGluZSwgYW5kIHRoZSBwYXRoIHNlZW1zIHRvIGdvIHRocm91Z2ggdGhlIGB0eGdiZWAgZHJpdmVyLiBJIGtub3cgdGhhdCBgdHhnYmVgIHByb3ZpZGVzIHRoZSBgaTJjLWJ1c2AgcHJvcGVydHksIHdoaWNoIGlzIGtleS4gVGhlIGlkZWEgaXMgdGhpczogaWYgc3l6a2FsbGVyIGNhbiBjcmVhdGUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdGhhdCBsb29rcyBsaWtlIGEgYHR4Z2JlYCBkZXZpY2UsIHRoZSBgdHhnYmVgIGRyaXZlciBzaG91bGQgcHJvYmUsIGFuZCBpbiB0dXJuLCByZWdpc3RlciB0aGUgYHNmcGAgcGxhdGZvcm0gZGV2aWNlLiBUaGVuLCB0aGUgYHNmcGAgZHJpdmVyIHdpbGwgcHJvYmUsIGFuZCBib29tLCB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUga2lja3Mgb2ZmLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGB0eGdiZWAgaXMgZXZlbiByZWFjaGFibGUgaW4gdGhlIHN5emthbGxlciBlbnZpcm9ubWVudC4gVGhhbmtmdWxseSwgYHN5el9wY2lfZGV2aWNlX2FkZGAgbG9va3MgbGlrZSBpdCBjYW4gY3JlYXRlIGEgdmlydHVhbCBQQ0kgZGV2aWNlLiBOb3cgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgYHR4Z2JlYCBldmVuICpzdXBwb3J0KiB2aXJ0dWFsIFBDSSBkZXZpY2VzPyBBaCwgeWVzISBTaW5jZSBgdHhnYmVgIGlzIGEgc3RhbmRhcmQgUENJIGRyaXZlciwgSSBjYW4gdXNlIGB2ZmlvYCBvciBgcGNpYCBwc2V1ZG8tZGV2aWNlcyB0byBmdXp6IGl0LgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgYSBudWFuY2UgaGVyZS4gYHR4Z2JlYCBhY3R1YWxseSB1c2VzIGBzbnBzLGRlc2lnbndhcmUtaTJjYCBmb3IgaXRzIEkyQyBpbnRlcmZhY2UuIFNvLCB0aGUgYGkyYy1kZXNpZ253YXJlYCBkcml2ZXIgd2lsbCBjcmVhdGUgdGhlIEkyQyBhZGFwdGVyLiBUaGUgY29yZSBvZiB0aGUgZnV6emluZyB0aGVuIHNoaWZ0cyB0byB0aGlzIEkyQyBhZGFwdGVyLiBJZiB0aGUgUENJIGRldmljZSBpcyB2aXJ0dWFsLCBhbGwgdGhlIE1NSU8gcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgSTJDIGNvbnRyb2xsZXIgYXJlIGZ1enplZC4gVGhhdCBtZWFucyB0aGUgYHNmcGAgZHJpdmVyIGlzIGdvaW5nIHRvIGlzc3VlIHRoZSBJMkMgcmVhZHMgYW5kIHdyaXRlcywgYW5kIHRob3NlIHdpbGwgYmUgdHJhbnNsYXRlZCBpbnRvIE1NSU8gcmVhZHMvd3JpdGVzIG9uIHRoZSB2aXJ0dWFsIFBDSSBkZXZpY2UuIFN5emthbGxlciB3aWxsIHRoZW4gaW50ZXJjZXB0IGFuZCByZXR1cm4gZnV6emVkIGRhdGEuIFBlcmZlY3QhIFRoYXQgbWVhbnMgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGlzIGZ1enplZCEKCkFscmlnaHQsIGl0IGZlZWxzIGxpa2UgdGhpcyBpcyB0aGUgbWFpbiByb3V0ZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkaXJlY3Qgd2F5cyB0byByZWFjaCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIG90aGVyIHRoYW4gZ29pbmcgdGhyb3VnaCBgdHhnYmVgLiBDYW4gc3l6a2FsbGVyIGp1c3QgZGlyZWN0bHkgY3JlYXRlIGFuIEkyQyBkZXZpY2U/IE5vLCB0aGF0IHdvbiYjMzk7dCB3b3JrLCBiZWNhdXNlIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAgaXMgaW4gYHNmcC5jYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgYHNmcGAgcGxhdGZvcm0gZHJpdmVyLiBTbywgaXMgdGhlcmUgYW55IG90aGVyIGRyaXZlciBvdGhlciB0aGFuIGB0eGdiZWAgd2hpY2ggcmVnaXN0ZXJzIGBzZnBgPyBUaGF0IHNlZW1zIHVubGlrZWx5LCBidXQgaXQmIzM5O3Mgd29ydGggYSBxdWljayBjaGVjaywganVzdCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XCYjMzQ7c2ZwXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYz0xNjY2PXN0YXRpYyB2b2lkIHhnZW5lX2VuZXRfZ3Bpb2RfZ2V0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMtMTY3OC1cdGlmIChJU19FUlIocGRhdGEtXHUwMDNlc2ZwX3JkeSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmM6MTY3OTpcdFx0cGRhdGEtXHUwMDNlc2ZwX3JkeSA9IGdwaW9kX2dldChkZXYsIFwmIzM0O3NmcFwmIzM0OywgR1BJT0RfSU4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jLTE2ODAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmM9NDY2PXN0YXRpYyBpbnQgeGdlbmVfZW5ldF9ncGlvX2xvb2t1cChzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYy00NzEtXHRpZiAoSVNfRVJSKHBkYXRhLVx1MDAzZXNmcF9yZHkpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYzo0NzI6XHRcdHBkYXRhLVx1MDAzZXNmcF9yZHkgPSBncGlvZF9nZXQoZGV2LCBcJiMzNDtzZnBcJiMzNDssIEdQSU9EX0lOKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmMtNDczLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM9Mjc9c3RhdGljIGludCB0eGdiZV9zd25vZGVzX3JlZ2lzdGVyKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03Ni1cdG5vZGVzLVx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXCYjMzQ7bWFuYWdlZFwmIzM0OywgXCYjMzQ7aW4tYmFuZC1zdGF0dXNcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo3NzpcdG5vZGVzLVx1MDAzZXBoeWxpbmtfcHJvcHNbMV0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7c2ZwXCYjMzQ7LCBub2Rlcy1cdTAwM2VzZnBfcmVmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzgtXHRzd25vZGVzW1NXTk9ERV9QSFlMSU5LXSA9IE5PREVfUFJPUChub2Rlcy1cdTAwM2VwaHlsaW5rX25hbWUsIG5vZGVzLVx1MDAzZXBoeWxpbmtfcHJvcHMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM9NTA1PXN0YXRpYyBpbnQgdHhnYmVfc2ZwX3JlZ2lzdGVyKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTItXHRpbmZvLmZ3bm9kZSA9IHNvZnR3YXJlX25vZGVfZndub2RlKHR4Z2JlLVx1MDAzZW5vZGVzLmdyb3VwW1NXTk9ERV9TRlBdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTEzOlx0aW5mby5uYW1lID0gXCYjMzQ7c2ZwXCYjMzQ7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTQtXHRpbmZvLmlkID0gcGNpX2Rldl9pZChwZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodHMgYXMgdGhlICYjMzQ7SSYjMzQ7IG9mIGFuIGV4cGVydCwgc3RhcnRpbmcgd2l0aCB0aGUgcHJvbXB0OgoKKipDb25zaWRlcmluZyBgbmdiZWAqKgoKSG1tLCBgbmdiZWAuLi4gdGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBvbmUuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSnVzdCB0aGUgcmF3IHRlcm0sIGBuZ2JlYCwgaXMgcHJldHR5IGFic3RyYWN0LCBzbyBJIGltbWVkaWF0ZWx5IG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBwbGFjZSB0aGlzLiBJcyB0aGlzIGEgbmV3IG1ldGhvZCBJJiMzOTttIHVuZmFtaWxpYXIgd2l0aCwgb3IgYSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBwaWVjZSBvZiBjb2RlPyBJcyB0aGlzIHJlbGF0ZWQgdG8gbXkgY3VycmVudCBwcm9qZWN0LCBvciBzb21ldGhpbmcgY29tcGxldGVseSBvcnRob2dvbmFsPyBHaXZlbiB0aGF0IGl0IGNvdWxkIG1lYW4gYW55dGhpbmcsIG15IGZpcnN0IHRob3VnaHQgcHJvY2VzcyBpcyB0byBjb25zaWRlciBhIHBvc3NpYmxlIG9yaWdpbiwgYSBwb3RlbnRpYWwgdXNlIGNhc2UsIGFuZCBhIHNlcmllcyBvZiBxdWVzdGlvbnMuIElzIGl0IHJlbGF0ZWQgdG8gYmlvaW5mb3JtYXRpY3MsIGNvbnRyb2wgc3lzdGVtcywgc2lnbmFsIHByb2Nlc3NpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGZpZWxkIGRvZXMgdGhpcyBmaXQgaW4/IEZyb20gdGhlIG5hbWUgYWxvbmUsIGNhbiBJIG1ha2UgYW55IGluZm9ybWVkIGd1ZXNzZXM/IExldCBtZSBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8ga25vdyBtb3JlIGJlZm9yZSBJIGNhbiBnaXZlIGl0IGEgZmFpciBhc3Nlc3NtZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHF1ZXN0aW9uIHRoaXMgd2lsbCBzb2x2ZS4gV2hhdCBhcmUgdGhlIGN1cnJlbnQgc3RhdGUtb2YtdGhlLWFydCBtZXRob2RzIGJlaW5nIHVzZWQ/IElmIHRoaXMgaXMgYSBuZXcgbWV0aG9kLCBob3cgZG9lcyBpdCBjb21wYXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcJiMzNDtzZnBcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTI3PXN0YXRpYyBpbnQgdHhnYmVfc3dub2Rlc19yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXHRub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzWzBdID0gUFJPUEVSVFlfRU5UUllfU1RSSU5HKFwmIzM0O21hbmFnZWRcJiMzNDssIFwmIzM0O2luLWJhbmQtc3RhdHVzXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Nzc6XHRub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O3NmcFwmIzM0Oywgbm9kZXMtXHUwMDNlc2ZwX3JlZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTc4LVx0c3dub2Rlc1tTV05PREVfUEhZTElOS10gPSBOT0RFX1BST1Aobm9kZXMtXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTEyLVx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cdTAwM2Vub2Rlcy5ncm91cFtTV05PREVfU0ZQXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUxMzpcdGluZm8ubmFtZSA9IFwmIzM0O3NmcFwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVx0aW5mby5pZCA9IHBjaV9kZXZfaWQocGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgSW52ZXN0aWdhdGlvbiBpbnRvIFNGUCBNb2R1bGUgSW5zdGFudGlhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByaW1hcmlseSBmb2N1c2VkIG9uIGB0eGdiZWAgaGVyZS4gQnV0IHdhaXQsIEkgbmVlZCB0byB6b29tIG91dC4gV2hhdCBhYm91dCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCBpdHNlbGY/IFJpZ2h0LCBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlci4gVGhlIG5leHQgcXVlc3Rpb24gaXM6IENhbiBzeXprYWxsZXIgc29tZWhvdyBnZXQgdGhpcyBnb2luZyB0aHJvdWdoIHN5c2ZzPwoKSG1tLCBpZiBgQ09ORklHX1NGUGAgaXMgZW5hYmxlZCwgdGhlIG1vZHVsZSBsb2FkcywgdGhhdOKAmXMgdXNlZnVsLiBJIGNhbiAqa2luZGEqIHNlZSB3aGVyZSBJIGFtIGdvaW5nLiBDYW4gSSBjb25qdXJlIHVwIGEgcGxhdGZvcm0gZGV2aWNlIHRocm91Z2ggYC9zeXMvYnVzL3BsYXRmb3JtL2RldmljZXNgPyBObywgdGhhdCYjMzk7cyBub3QgaG93IHRoYXQgd29ya3MuIEkgY2FuIG9ubHkgYmluZCBvciB1bmJpbmQgZXhpc3RpbmcgZGV2aWNlcy4gRGFtbiwgdGhvdWdodCB0aGF0IG1pZ2h0IGJlIHRvbyBlYXN5LgoKV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgY2xldmVyIHVwIGl0cyBzbGVldmUsIGxpa2UgYSBgc3l6X2Rldl9wbGF0Zm9ybV9hZGRgIGZ1bmN0aW9uPyBObywgbm8gc3VjaCBsdWNrLiBPa2F5LCByZWdyb3VwLiBJIGtub3cgc3l6a2FsbGVyICpjYW4qIGZ1enogSTJDIGRldmljZXMgdmlhIGAvZGV2L2kyYy1YYC4KCk5vdyBsZXTigJlzIHRoaW5rLiBJZiBJIGNyZWF0ZSBhbiBJMkMgZGV2aWNlLCBpdOKAmXMgZ29pbmcgdG8gYmUgYW4gSTJDIGNsaWVudCwgbm90IGFuIEkyQyBhZGFwdGVyLiBPa2F5LCB0aGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uLiBOb3csIHdoZXJlIGRvZXMgdGhpcyBnZXQgbWU/IEFoLCBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIC0gdGhhdCBmdW5jdGlvbiB0YWtlcyBhbiBgaTJjX2FkYXB0ZXJgLiBPa2F5LCB0aGF0JiMzOTtzIGhlbHBmdWwgaW5mb3JtYXRpb24uCgpXYWl0IGEgc2Vjb25k4oCmIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgaXMgY2FsbGVkIGZyb20gYHNmcF9zbV9wcm9iZV9mb3JfcGh5YC4gVGhpcyBtaWdodCBiZSBhIGJyZWFrLiBNeSBmb2N1cyBpcyBzdGlsbCBzZnAsIHRob3VnaC4gSXMgdGhlcmUgYW55IG90aGVyIHBhdGggdG8gcmVhY2ggYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYD8gSSBoYXZlIHRvIGxvb2sgbW9yZSBjbG9zZWx5Li4uIExldCYjMzk7cyBjaGVjayBgbWRpb19pMmNfYWxsb2NgLiBJIHNob3VsZCBjaGVjayBhbGwgcGF0aHMgZm9yIGBtZGlvX2kyY19hbGxvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9faTJjX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYz00OTY9c3RhdGljIGJvb2wgbWRpb19pMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA4LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUwOTpzdHJ1Y3QgbWlpX2J1cyAqbWRpb19pMmNfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01MTAtXHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTU1Ny19XG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM6NTU4OkVYUE9SVF9TWU1CT0xfR1BMKG1kaW9faTJjX2FsbG9jKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTktXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTk0MD1zdGF0aWMgaW50IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy05NDQtXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6OTQ1Olx0aTJjX21paSA9IG1kaW9faTJjX2FsbG9jKHNmcC1cdTAwM2VkZXYsIHNmcC1cdTAwM2VpMmMsIHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sKTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy05NDYtXHRpZiAoSVNfRVJSKGkyY19taWkpKVxuLS1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oPTE0PWVudW0gbWRpb19pMmNfcHJvdG8ge1xuLS1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg6MjE6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0yMi1cdFx0XHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDAxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbWRpby1pMmMuY2AgRGVwZW5kZW5jeSoqCgpPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYG1kaW9faTJjX2FsbG9jYCBpcyBjYWxsZWQgZXhjbHVzaXZlbHkgYnkgYHNmcC5jYC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNr4oCmIE5vcGUsIG5vIG90aGVyIGNhbGxzLiBTbywgdGhlIGVudGlyZSBgbWRpby1pMmMuY2AgZmlsZSBpcyBlc3NlbnRpYWxseSBvbmx5IHVzZWQgYnkgYHNmcC5jYC4gQWxyaWdodCwgc28gYHNmcC5jYCBpdHNlbGYgaXMgb25seSB1c2VkIGlmIGFuIFNGUCBwbGF0Zm9ybSBkZXZpY2UgaXMgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBOb3csIGNhbiBzeXprYWxsZXIgYmUgbGV2ZXJhZ2VkIHRvIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIGFuIFNGUCBwbGF0Zm9ybSBkZXZpY2U/IEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHRoYXTigKYgQWgsIHllcyEgVGhlIGB0eGdiZWAgUENJIGRyaXZlci4gSWYgc3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBhIHZpcnR1YWwgUENJIGRldmljZSB3aXRoIHRoZSByaWdodCB2ZW5kb3IvZGV2aWNlIElEcyB0byBtYXRjaCB0aGUgYHR4Z2JlYCBkcml2ZXIsIHRoYXQgd291bGQgdHJpZ2dlciBpdHMgcHJvYmUuIEl0IHdvdWxkIGJlIGEgdXNlZnVsIHRoaW5nIHRvIGNoZWNrIHRoZSBgdHhnYmVgIFBDSSBJRCYjMzk7cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHhnYmVfcGNpX3RibCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTI5PWNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXSA9IFwmIzM0O3R4Z2JlXCYjMzQ7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzozMTovKiB0eGdiZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMzItICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0zOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjM5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0eGdiZV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy00MC1cdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgVFhHQkVfREVWX0lEX1NQMTAwMCkgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYz02NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTY3Mi0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjY3MzogKiBAZW50OiBlbnRyeSBpbiB0eGdiZV9wY2lfdGJsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy02NzQtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYz05NjY9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk2Ny1cdC5uYW1lICAgICA9IHR4Z2JlX2RyaXZlcl9uYW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6OTY4Olx0LmlkX3RhYmxlID0gdHhnYmVfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk2OS1cdC5wcm9iZSAgICA9IHR4Z2JlX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTk3NT1tb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtOTc2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6OTc3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0eGdiZV9wY2lfdGJsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk3OC1NT0RVTEVfQVVUSE9SKFwmIzM0O0JlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLCBcdTAwM2Nzb2Z0d2FyZUB0cnVzdG5ldGljLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTc2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgU3l6a2FsbGVyJiMzOTtzIFRYR0JFIENvdmVyYWdlKioKCk9rYXksIHNvIFN5emthbGxlciBoYXMgdGhlc2UgZGVzY3JpcHRpb25zIGZvciBQQ0kgZGV2aWNlcywgYW5kIGlmIHRoZSBgdHhnYmVgIGRyaXZlciBpcyBlbmFibGVkLCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBmdXp6IGl0LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBUaGUgcXVlc3Rpb24gaXMsIGlzIGB0eGdiZWAgYWN0dWFsbHkgKmVuYWJsZWQqIGluIHRoZSBkZWZhdWx0IFN5emthbGxlciBjb25maWd1cmF0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50LiBGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IGEgbG90IG9mIFBDSSBuZXR3b3JrIGRyaXZlcnMgYXJlIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQuIFN0aWxsLCBhc3N1bXB0aW9ucyBhcmUgZGFuZ2Vyb3VzLiBJIG5lZWQgdG8gYmUgc3VyZS4gU28sIGxldCYjMzk7cyBqdXN0IGdvIGFoZWFkIGFuZCBjb25maXJtIHdoZXRoZXIgdGhlIGBDT05GSUdfVFhHQkVgIG9wdGlvbiBpcyBldmVuIGRlZmluZWQuIFRoYXQmIzM5O2xsIHRlbGwgdXMgcmlnaHQgYXdheSBpZiB3ZSBoYXZlIGEgZnV6emluZyB0YXJnZXQgb3IgaWYgd2UgbmVlZCB0byBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBxdWljayB3aW4gb3IgYSBtaW5vciBzZXRiYWNrLCBidXQgYmVzdCB0byBrbm93IGZvciBzdXJlIGJlZm9yZSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRYR0JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg3OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIENoZWNrIGluIHdhbmd4dW4qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYHdhbmd4dW5gIGRpcmVjdG9yeS4gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIEtjb25maWcgZmlsZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBiZWdpbiB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIGEgbmV3IGJ1aWxkIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgZXZlcnl0aGluZyBpcyBhcyBJIHdvdWxkIGV4cGVjdCwgbm8gc3VycHJpc2VzIGluIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3IgZGVwZW5kZW5jaWVzLiBUaGlzIGFsbG93cyBtZSB0byBpbW1lZGlhdGVseSBzcG90IGFueSBkZXZpYXRpb25zIGZyb20gbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBzeXN0ZW0mIzM5O3MgaW50ZW5kZWQgYmVoYXZpb3IuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGV2ZXJ5dGhpbmcgaXMgaW4gYWxpZ25tZW50ISBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB1bnVzdWFsIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzLiBJIGFsc28gZXhwZWN0IHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIGhvdyB0aG9zZSBhcmUgc2V0LiBHb3R0YSBrbm93IGhvdyBpdCBpcyBzdXBwb3NlZCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFhHQkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDM6Y29uZmlnIFRYR0JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njc6Y29uZmlnIFRYR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMxMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFNGUDogQSBQb3RlbnRpYWwgUGF0aCoqCgpPa2F5LCBzbyBgQ09ORklHX1RYR0JFYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXJlIGFueSBvdGhlciB3YXlzIHRvIHBvdGVudGlhbGx5IGZ1enogdGhlIFNGUD8gSSBuZWVkIHRvIHRoaW5rIG91dHNpZGUgdGhlIGJveCBhIGJpdC4gV2hhdCBhYm91dCBEZXZpY2UgVHJlZT8gSG1tLCB0aGF0JiMzOTtzIGEgZGVhZCBlbmQsIFN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgZGVhbCB3aXRoIG92ZXJsYXlzLgoKQWxyaWdodCwgd2hhdCBhYm91dCB0aGF0IGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYCBmdW5jdGlvbj8gVGhlIHBhdGNoIGlzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdGhlcmUsIHJlbmFtaW5nIGl0IHRvIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgYW5kIGV4cG9ydGluZyBpdC4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAgc28gdGhhdCBpdCBubyBsb25nZXIgZGlyZWN0bHkgY2FsbHMgdGhhdCBwcm9iZSBmdW5jdGlvbiwgYnV0IG5vdyBzaW1wbHkgcmV0dXJucyAwLiBNb3N0IG5vdGFibHksIHRoZSBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIGZ1bmN0aW9uIGlzICpub3cqIGNhbGxpbmcgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYC4KClRoZSBiaWcgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGlzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aD8gQ2FuIHdlIHRyaWdnZXIgdGhpcyBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIGZ1bmN0aW9uPyBJZiBgc2ZwYCBpcyBpbnN0YW50aWF0ZWQsIHRoZW4geWVzLiBXZSBoYXZlIHRvIGluc3RhbnRpYXRlIGBzZnBgIHNvbWVob3csIGJ1dCBjYW4gd2UgZG8gdGhhdCB0aHJvdWdoIGB0eGdiZWA/IFllcyB3ZSBjYW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgYXJlIHRoZXJlIGFueSBvdGhlciBkcml2ZXJzIGluc3RhbnRpYXRpbmcgYHNmcGA/IExldCYjMzk7cyBxdWlja2x5IHNlYXJjaCBmb3IgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgd2l0aCAmIzM0O3NmcCYjMzQ7IGFzIHRoZSBhcmd1bWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIuKlwmIzM0O3NmcFwmIzM0OyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHJlbWVtYmVyIEkgYWxyZWFkeSB1c2VkIGBncmVwYCB0byBzZWFyY2ggZm9yICYjMzQ7c2ZwJiMzNDsgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYCBkaXJlY3RvcnksIGFuZCB0aGUgcmVzdWx0cyBwb2ludGVkIG1lIHRvd2FyZHMgYHR4Z2JlYC4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcuCgpNeSBnb2FsIGhlcmUgaXMgdG8gZmluZCBhbGwgdGhlIHdheXMgdGhhdCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIGlzIGluaXRpYXRlZC4gSSBrbm93IGl0JiMzOTtzIHRpZWQgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhhdCBzdGF0ZSBtYWNoaW5lIGtpY2tzIG9mZiB3aGVuIGFuIFNGUCBtb2R1bGUgaXMgcGh5c2ljYWxseSBwbHVnZ2VkIGluLiBJZiBzeXprYWxsZXIgaGFzIHNvbWUgY29udHJvbCBvdmVyIEdQSU9z4oCUbGlrZSB1c2luZyBgbW9kLWRlZjBgIG9yIHNvbWV0aGluZyBzaW1pbGFy4oCUY291bGRuJiMzOTt0IHdlIHBvdGVudGlhbGx5IHNpbXVsYXRlIHRoZSBpbnNlcnRpb24gZXZlbnQ/CgpCdXQgd2FpdOKApiBkaWRuJiMzOTt0IHRoZSBgdHhnYmVgIGRyaXZlciAqYWxzbyogbWVudGlvbiBzb21ldGhpbmcgYWJvdXQgc29mdHdhcmUgbm9kZXMgZm9yIHRob3NlIHZlcnkgc2FtZSBHUElPcz8gSWYgc28sIGRvZXMgYHR4Z2JlYCBhY3R1YWxseSBmdW5jdGlvbiBhcyBhIEdQSU8gY29udHJvbGxlciBpdHNlbGY/IEkgdGhpbmsgdGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBwb3NzaWJpbGl0eSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtncGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTg6dm9pZCB0eGdiZV9ncGlvX2luaXRfYW1sKHN0cnVjdCB3eCAqd3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTE5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzozNzppcnFyZXR1cm5fdCB0eGdiZV9ncGlvX2lycV9oYW5kbGVyX2FtbChpbnQgaXJxLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYz0zMzI9aW50IHR4Z2JlX2lkZW50aWZ5X21vZHVsZShzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMzM3LVx0dTMyIG1vZF9hYnM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjMzODpcdHUzMiBncGlvO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjM0NTpcdGdwaW8gPSByZDMyKHd4LCBXWF9HUElPX0VYVCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjM0NjpcdGlmIChncGlvIFx1MDAyNiBtb2RfYWJzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zNDctXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmg6Nzp2b2lkIHR4Z2JlX2dwaW9faW5pdF9hbWwoc3RydWN0IHd4ICp3eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5oOjg6aXJxcmV0dXJuX3QgdHhnYmVfZ3Bpb19pcnFfaGFuZGxlcl9hbWwoaW50IGlycSwgdm9pZCAqZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5oLTktaW50IHR4Z2JlX3Rlc3RfaG9zdGlmKHN0cnVjdCB3eCAqd3gpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM9MjI9dm9pZCB0eGdiZV9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gsIGJvb2wgcXVldWVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtMjctXHRcdG1pc2NfaWVuIHw9IFRYR0JFX1BYX01JU0NfR1BJTztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6Mjg6XHRcdHR4Z2JlX2dwaW9faW5pdF9hbWwod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTg0PXN0YXRpYyBpbnQgdHhnYmVfcmVxdWVzdF9saW5rX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtOTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjkyOnN0YXRpYyBpbnQgdHhnYmVfcmVxdWVzdF9ncGlvX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy05My17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk0Olx0dHhnYmUtXHUwMDNlZ3Bpb19pcnEgPSBpcnFfZmluZF9tYXBwaW5nKHR4Z2JlLVx1MDAzZW1pc2MuZG9tYWluLCBUWEdCRV9JUlFfR1BJTyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk1Olx0cmV0dXJuIHJlcXVlc3RfdGhyZWFkZWRfaXJxKHR4Z2JlLVx1MDAzZWdwaW9faXJxLCBOVUxMLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5NjpcdFx0XHRcdCAgICB0eGdiZV9ncGlvX2lycV9oYW5kbGVyX2FtbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6OTc6XHRcdFx0XHQgICAgSVJRRl9PTkVTSE9ULCBcJiMzNDt0eGdiZS1ncGlvLWlycVwmIzM0OywgdHhnYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy05OC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYz0yMDI9dm9pZCB0eGdiZV9mcmVlX21pc2NfaXJxKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yMDQtXHRpZiAodHhnYmUtXHUwMDNld3gtXHUwMDNlbWFjLnR5cGUgIT0gd3hfbWFjX3NwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzoyMDU6XHRcdGZyZWVfaXJxKHR4Z2JlLVx1MDAzZWdwaW9faXJxLCB0eGdiZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTIwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTIxMz1pbnQgdHhnYmVfc2V0dXBfbWlzY19pcnEoc3RydWN0IHR4Z2JlICp0eGdiZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MjUxOlx0ZXJyID0gdHhnYmVfcmVxdWVzdF9ncGlvX2lycSh0eGdiZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTI1Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vbWFjaGluZS5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjU6I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9kcml2ZXIuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vcHJvcGVydHkuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNjpcdHNucHJpbnRmKG5vZGVzLVx1MDAzZWdwaW9fbmFtZSwgc2l6ZW9mKG5vZGVzLVx1MDAzZWdwaW9fbmFtZSksIFwmIzM0O3R4Z2JlX2dwaW8tJXhcJiMzNDssIGlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzctXHRzbnByaW50Zihub2Rlcy1cdTAwM2VpMmNfbmFtZSwgc2l6ZW9mKG5vZGVzLVx1MDAzZWkyY19uYW1lKSwgXCYjMzQ7dHhnYmVfaTJjLSV4XCYjMzQ7LCBpZCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00OS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1MDpcdG5vZGVzLVx1MDAzZWdwaW9fcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXCYjMzQ7cGluY3RybC1uYW1lc1wmIzM0OywgXCYjMzQ7ZGVmYXVsdFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUxOlx0c3dub2Rlc1tTV05PREVfR1BJT10gPSBOT0RFX1BST1Aobm9kZXMtXHUwMDNlZ3Bpb19uYW1lLCBub2Rlcy1cdTAwM2VncGlvX3Byb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTI6XHRub2Rlcy1cdTAwM2VncGlvMF9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMCwgR1BJT19BQ1RJVkVfSElHSCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUzOlx0bm9kZXMtXHUwMDNlZ3BpbzFfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDEsIEdQSU9fQUNUSVZFX0hJR0gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NDpcdG5vZGVzLVx1MDAzZWdwaW8yX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAyLCBHUElPX0FDVElWRV9MT1cpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NTpcdG5vZGVzLVx1MDAzZWdwaW8zX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAzLCBHUElPX0FDVElWRV9ISUdIKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTY6XHRub2Rlcy1cdTAwM2VncGlvNF9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgNCwgR1BJT19BQ1RJVkVfSElHSCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjU3Olx0bm9kZXMtXHUwMDNlZ3BpbzVfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDUsIEdQSU9fQUNUSVZFX0hJR0gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01OC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTY2LVx0bm9kZXMtXHUwMDNlc2ZwX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O2kyYy1idXNcJiMzNDssIG5vZGVzLVx1MDAzZWkyY19yZWYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2NzpcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1syXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDt0eC1mYXVsdC1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzBfcmVmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Njg6XHRub2Rlcy1cdTAwM2VzZnBfcHJvcHNbM10gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7dHgtZGlzYWJsZS1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzFfcmVmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Njk6XHRub2Rlcy1cdTAwM2VzZnBfcHJvcHNbNF0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7bW9kLWRlZjAtZ3Bpb3NcJiMzNDssIG5vZGVzLVx1MDAzZWdwaW8yX3JlZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjcwOlx0bm9kZXMtXHUwMDNlc2ZwX3Byb3BzWzVdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O2xvcy1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzNfcmVmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NzE6XHRub2Rlcy1cdTAwM2VzZnBfcHJvcHNbNl0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7cmF0ZS1zZWxlY3QxLWdwaW9zXCYjMzQ7LCBub2Rlcy1cdTAwM2VncGlvNF9yZWYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo3MjpcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1s3XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDtyYXRlLXNlbGVjdDAtZ3Bpb3NcJiMzNDssIG5vZGVzLVx1MDAzZWdwaW81X3JlZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTczLVx0c3dub2Rlc1tTV05PREVfU0ZQXSA9IE5PREVfUFJPUChub2Rlcy1cdTAwM2VzZnBfbmFtZSwgbm9kZXMtXHUwMDNlc2ZwX3Byb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTMxMj1pcnFyZXR1cm5fdCB0eGdiZV9saW5rX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjMzMDpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTMzMS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjMzMjpcdHN0cnVjdCB3eCAqd3ggPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzMzLVx0aW50IHZhbDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTMzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzQwOnN0YXRpYyBpbnQgdHhnYmVfZ3Bpb19nZXRfZGlyZWN0aW9uKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM0MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM0MjpcdHN0cnVjdCB3eCAqd3ggPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzQzLVx0dTMyIHZhbDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM1MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzUyOnN0YXRpYyBpbnQgdHhnYmVfZ3Bpb19kaXJlY3Rpb25faW4oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzUzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzU0Olx0c3RydWN0IHd4ICp3eCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNTUtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM1NzpcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ3eC1cdTAwM2VncGlvX2xvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzU4LVx0d3IzMm0od3gsIFdYX0dQSU9fRERSLCBCSVQob2Zmc2V0KSwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM1OTpcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnd4LVx1MDAzZWdwaW9fbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM2NDpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjUtXHRcdFx0XHQgICAgaW50IHZhbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzY2LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzY3Olx0c3RydWN0IHd4ICp3eCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjgtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNzM6XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2d3gtXHUwMDNlZ3Bpb19sb2NrLCBmbGFncyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM3NC1cdHdyMzJtKHd4LCBXWF9HUElPX0RSLCBCSVQob2Zmc2V0KSwgc2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzc1LVx0d3IzMm0od3gsIFdYX0dQSU9fRERSLCBCSVQob2Zmc2V0KSwgQklUKG9mZnNldCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNzY6XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ3eC1cdTAwM2VncGlvX2xvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzc3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozODE6c3RhdGljIGludCB0eGdiZV9ncGlvX2luaXQoc3RydWN0IHR4Z2JlICp0eGdiZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzgyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzgzOlx0c3RydWN0IGdwaW9fY2hpcCAqZ2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM4NC1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzkxOlx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnd4LVx1MDAzZWdwaW9fbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Mzk3Olx0Z2MtXHUwMDNlbGFiZWwgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFwmIzM0O3R4Z2JlX2dwaW8tJXhcJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5OC1cdFx0XHRcdCAgIHBjaV9kZXZfaWQod3gtXHUwMDNlcGRldikpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNDAyLVx0Z2MtXHUwMDNlYmFzZSA9IC0xO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0MDM6XHRnYy1cdTAwM2VuZ3BpbyA9IDY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQwNC1cdGdjLVx1MDAzZW93bmVyID0gVEhJU19NT0RVTEU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00MDYtXHRnYy1cdTAwM2Vmd25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cdTAwM2Vub2Rlcy5ncm91cFtTV05PREVfR1BJT10pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0MDc6XHRnYy1cdTAwM2VnZXQgPSB0eGdiZV9ncGlvX2dldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDA4Olx0Z2MtXHUwMDNlZ2V0X2RpcmVjdGlvbiA9IHR4Z2JlX2dwaW9fZ2V0X2RpcmVjdGlvbjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDA5Olx0Z2MtXHUwMDNlZGlyZWN0aW9uX2lucHV0ID0gdHhnYmVfZ3Bpb19kaXJlY3Rpb25faW47XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQxMDpcdGdjLVx1MDAzZWRpcmVjdGlvbl9vdXRwdXQgPSB0eGdiZV9ncGlvX2RpcmVjdGlvbl9vdXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDEyOlx0cmV0ID0gZGV2bV9ncGlvY2hpcF9hZGRfZGF0YShkZXYsIGdjLCB3eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00MTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQxNjpcdHR4Z2JlLVx1MDAzZWdwaW8gPSBnYztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNDE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM9NTc1PWludCB0eGdiZV9pbml0X3BoeShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNjA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2MTA6XHRyZXQgPSB0eGdiZV9ncGlvX2luaXQodHhnYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy02MTEtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjYxMjpcdFx0d3hfZXJyKHd4LCBcJiMzNDtmYWlsZWQgdG8gaW5pdCBncGlvXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNjEzLVx0XHRnb3RvIGVycl9kZXN0cm95X3BoeWxpbms7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg9NDI1PXN0cnVjdCB0eGdiZV9ub2RlcyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDo0MjY6XHRjaGFyIGdwaW9fbmFtZVszMl07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MjctXHRjaGFyIGkyY19uYW1lWzMyXTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MjktXHRjaGFyIHBoeWxpbmtfbmFtZVszMl07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDo0MzA6XHRzdHJ1Y3QgcHJvcGVydHlfZW50cnkgZ3Bpb19wcm9wc1syXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQzMS1cdHN0cnVjdCBwcm9wZXJ0eV9lbnRyeSBpMmNfcHJvcHNbNF07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgtNDM0LVx0c3RydWN0IHNvZnR3YXJlX25vZGVfcmVmX2FyZ3MgaTJjX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzNTpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8wX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzNjpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8xX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzNzpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8yX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzODpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8zX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzOTpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW80X3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQ0MDpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW81X3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ0MS1cdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIHNmcF9yZWZbMV07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg9NDU5PXN0cnVjdCB0eGdiZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgtNDY3LVx0c3RydWN0IGNsayAqY2xrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDY4Olx0c3RydWN0IGdwaW9fY2hpcCAqZ3BpbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ2OS1cdHVuc2lnbmVkIGludCBsaW5rX2lycTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQ3MDpcdHVuc2lnbmVkIGludCBncGlvX2lycTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ3MS1cdHUzMiBlaWNyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzU0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgUm9sbEJhbGwgU0ZQIFByb2JlIFRocm91Z2ggRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBtYXBwZWQgb3V0IGEgcG90ZW50aWFsIGZ1enppbmcgcGF0aC4gVGhlIGB0eGdiZWAgZHJpdmVyIHJlZ2lzdGVycyBhIGBncGlvX2NoaXBgLCB3aGljaCB0aGUgU0ZQIGRyaXZlciB0aGVuIGxldmVyYWdlcy4gVGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCB3aGV0aGVyIGl0JiMzOTtzIHBvbGxpbmcgb3IgaW50ZXJydXB0LWRyaXZlbiwgaXMga2V5IGhlcmUuIElmIHN5emthbGxlciBjYW4gc29tZWhvdyB0cmlnZ2VyIE1NSU8gcmVhZHMgb2YgYFdYX0dQSU9fRVhUYCBpbiBhIHdheSB0aGF0IGZvb2xzIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBpbnRvIHRoaW5raW5nIGEgbW9kdWxlIGlzIHByZXNlbnQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4KClRoYXQgZmFicmljYXRlZCAmIzM0O21vZHVsZSBpbnNlcnRpb24mIzM0OyB0aGVuIGxlYWRzIHRvIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYC4gQmluZ28sIG5vdyB3ZSYjMzk7cmUgZG9pbmcgYW4gSTJDIHRyYW5zZmVyLCBhbmQgdGhhdCYjMzk7cyB0aGUgdnVsbmVyYWJpbGl0eSB0YXJnZXQuCgpUaGlzIEkyQyB0cmFuc2ZlciB0aGVuIGdvZXMgdGhyb3VnaCB0aGUgYHNucHMsZGVzaWdud2FyZS1pMmNgIGRyaXZlciwgd2hpY2ggaGFuZGxlcyB0aGUgTU1JTyByZWFkcy93cml0ZXMgdG8gdGhlIGB0eGdiZWAgUENJIGRldmljZS4gQW5kLCBpbXBvcnRhbnRseSwgKnRoYXQmIzM5O3MqIHdoYXQgc3l6a2FsbGVyIGNhbiBmdXp6LiBTbywgdGhlIGVudGlyZSBhdHRhY2sgc3VyZmFjZSBpczogYHN5emthbGxlcmAgLSZndDsgYE1NSU9gIC0mZ3Q7IGBTRlBgIC0mZ3Q7IGBSb2xsQmFsbCBJMkNgIC0mZ3Q7IGBzbnBzLGRlc2lnbndhcmUtaTJjYCAtJmd0OyBgdHhnYmVgIGBNTUlPYC4gVGhpcyBtYWtlcyB0aGUgd2hvbGUgcGF0aCBmdXp6YWJsZS4KCkJhc2ljYWxseSwgdGhlIHBhdGNoIHNoaWZ0cyB0aGUgUm9sbEJhbGwgU0ZQIG1vZHVsZSBwcm9iaW5nIGZyb20gYG1kaW9faTJjX2FsbG9jYCB0byBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGxhdGVyIHByb2JlLCB0byB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgYW5kIFJvbGxCYWxsIE1ESU8gSTJDIGluaXRpYWxpemF0aW9uLiAgQW5kIHdoYXQmIzM5O3MgaW1wb3J0YW50IGlzIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6ZWQgaGFyZHdhcmUsIGxpa2UgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYHR4Z2JlYC4KCk5vdywgdGhlIG5lY2Vzc2FyeSBjb25maWdzLi4uIExldCYjMzk7cyBzZWUuLi4gIGBDT05GSUdfU0ZQYCBpcyBhIGdpdmVuLCBgQ09ORklHX01ESU9fSTJDYCBpcyBuZWVkZWQgdG9vLCBvZiBjb3Vyc2UuIGBDT05GSUdfVFhHQkVgIHRvIGluc3RhbnRpYXRlIHRoZSBTRlAgcGxhdGZvcm0gZGV2aWNlLCBhbmQgYENPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STWAsIHVzZWQgYnkgYHR4Z2JlYCBmb3IgSTJDLiBCdXQgd2FpdC4uLiBpcyBpdCBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIG9yIHNvbWUgb3RoZXIgZGVzaWdud2FyZSB2YXJpYW50PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgdHhnYmVgIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRYR0JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjQzOmNvbmZpZyBUWEdCRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjY3OmNvbmZpZyBUWEdCRVZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjgtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwRyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3NTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFRYR0JFIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBgVFhHQkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIEV0aGVybmV0IGRyaXZlciBhcmUgc3RydWN0dXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaGVscCB0ZXh0cywgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIGJlaGluZCBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJcyBpdCBtb2R1bGFyLCBidWlsdC1pbiwgb3Igc29tZSBvdGhlciBidWlsZCB0eXBlPyBXaGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdGhhdCB0cmlnZ2VyIGl0cyBpbmNsdXNpb24/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5bnRheCBoZXJlIOKAkyBgY29uZmlnYCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBgZGVwZW5kcyBvbmAsIGBkZWZhdWx0YCwgYGhlbHBgIGFuZCBzbyBvbiDigJMgYnV0IEkmIzM5O20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbnVhbmNlcyBzcGVjaWZpYyB0byB0aGlzIGRyaXZlciBhbmQgdGhpcyB2ZW5kb3IuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55dGhpbmcgdW51c3VhbCwgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMsIGFuZCBlbnN1cmUgdGhpcyBjb25maWd1cmF0aW9uIGlzIGluIGxpbmUgd2l0aCBiZXN0IHByYWN0aWNlcy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYSB1c2VyIHdvdWxkIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgcGFydGljdWxhciBuZXR3b3JraW5nIGZlYXR1cmUsIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQzOlx0Y29uZmlnIFRYR0JFXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQ2Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAgNDc6XHRcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbiAgNDg6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNDk6XHRcdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcbiAgNTA6XHRcdHNlbGVjdCBSRUdNQVBcbiAgNTE6XHRcdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XG4gIDUyOlx0XHRzZWxlY3QgU0ZQXG4gIDUzOlx0XHRzZWxlY3QgR1BJT0xJQlxuICA1NDpcdFx0c2VsZWN0IEdQSU9MSUJfSVJRQ0hJUFxuICA1NTpcdFx0c2VsZWN0IFBDU19YUENTXG4gIDU2Olx0XHRzZWxlY3QgTElCV1hcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgNTk6XHRcdCAgYWRhcHRlcnMuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA2MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzNzgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gYFRYR0JFYCBwdWxscyBpbiBgU0ZQYCwgYW5kIGBTRlBgIGluIHR1cm4gZGVwZW5kcyBvbiB0aGUgYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYCBkcml2ZXIuIEFscmlnaHQsIHNvIGlmIEkgZW5hYmxlIGBUWEdCRWAsIHRoYXQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZ2l2ZSBtZSBib3RoIGBTRlBgICphbmQqIGBNRElPX0kyQ2AsIGdpdmVuIHRoYXQgYFNGUGAgZGVwZW5kcyBvbiBgTURJT19JMkNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIHJpZ2h0PyBIb2xkIG9uIGEgc2Vjb25kLi4uIGp1c3QgbWFraW5nIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgc3RyYWlnaHQuIFllcywgYFNGUGAgKmRvZXMqIHNlbGVjdCBgTURJT19JMkNgLiBHcmVhdC4gVGhlbiwgYWxsIEkgc2hvdWxkIG5lZWQgdG8gZG8gaXMgZW5hYmxlIGBUWEdCRWAuIEJ1dC4uLiBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSDigJMgaXMgdGhlcmUgc29tZSBvdGhlciBkcml2ZXIsIHNvbWUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhhdCBhbHNvIGJyaW5ncyBpbiBgU0ZQYD8gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFNGUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTUxLVx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo1MjpcdHNlbGVjdCBTRlBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01My1cdHNlbGVjdCBHUElPTElCXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzU0PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzc5Ny1cdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKSB7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM3OTg6XHRcdHBoeWxpbmtfZXJyKHBsLCBcJiMzNDtmYWlsZWQgdG8gc2VsZWN0IFNGUCBpbnRlcmZhY2VcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzk5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgU0ZQIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGZ1enogdGhpcyBgU0ZQYCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBvbmx5IGBUWEdCRWAgc2VsZWN0cyBgU0ZQYCwgYnV0IEkga25vdyBgU0ZQYCBjYW4gYmUgZW5hYmxlZCBkaXJlY3RseS4gSG93ZXZlciwgdG8gYWN0dWFsbHkgaW5zdGFudGlhdGUgaXQsIHdlIG5lZWQgYFRYR0JFYCAob3IgdGhlIGRldmljZSB0cmVlLCB3aGljaCBTeXprYWxsZXIgZG9lc24mIzM5O3QgdXRpbGl6ZSwgc28gbm8gZ28pLiBUaHVzLCBgVFhHQkVgIHNlZW1zIGxpa2UgdGhlIG1vc3QgcHJhY3RpY2FsIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nIHRoaXMgbW9kdWxlLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGRlcGVuZGVuY3kgb2YgYFRYR0JFYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBwcmVzZW50IGZvciBgVFhHQkVgIHRvIGFjdHVhbGx5IHdvcmsuIFRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IG5lZWRzIHRvIGluY2x1ZGUgYFRYR0JFYCwgYFNGUGAsIGFuZCBgTURJT19JMkNgLgoKTm93LCBvbnRvIGBGb2N1c1N5bWJvbHNgLiBUaGUgcGF0Y2ggc2VlbXMgdG8gbW9kaWZ5IGEgZmV3IGtleSBmdW5jdGlvbnM6IGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgKHJlbmFtZWQgZnJvbSBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGApLCBgaTJjX21paV9pbml0X3JvbGxiYWxsYCwgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCwgYHNmcF9pMmNfbWRpb2J1c19kZXN0cm95YCwgYW5kIGBzZnBfc21fYWRkX21kaW9fYnVzYC4gQWZ0ZXIgbG9va2luZyBhdCB0aGVzZSwgSSB3YW50IHRvIHplcm8gaW4gb24gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCwgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAsIGFuZCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLgoKSSBzaG91bGQgdmVyaWZ5IHRoZSBuYW1lcyBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIHBhdGNoLCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIHRoZSBuYW1lcyBhcmUgY29ycmVjdC4gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCwgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAsIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAsIGBzZnBfaTJjX21kaW9idXNfZGVzdHJveWAsIGFuZCBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AsIGFsbCBzZWVtIHRvIGJlIHByZXNlbnQuCgpMZXQmIzM5O3MgcXVpY2tseSBhbmFseXplIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuIEl0JiMzOTtzIHBhcnQgb2YgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBjYWxsZWQgZHVyaW5nIFBIWSBwcm9iaW5nLiBXaGlsZSBjcml0aWNhbCBmb3IgaW5pdGlhbGl6YXRpb24sIGl0JiMzOTtzIG5vdCBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgaXMgY2FsbGVkIG9uIHByb2JlLCBhbmQgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAgaXMgY2FsbGVkIG9uIGluaXQuCgpTbywgZm9yIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTtsbCBzdGljayB3aXRoIHRoZXNlOiBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgLCBgaTJjX21paV9pbml0X3JvbGxiYWxsYCwgYW5kIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBtYWtlIHN1cmUgYFRYR0JFYCBpcyB0aGUgKm9ubHkqIHdheSB0byByZWFjaCBgU0ZQYC4gV2hhdCBhYm91dCBgTkdCRWA/IEkmIzM5O2xsIG5lZWQgdG8gcmVzZWFyY2ggdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgU0ZQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01MS1cdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTI6XHRzZWxlY3QgU0ZQXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNTMtXHRzZWxlY3QgR1BJT0xJQlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzI2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIExvZ2ljKioKCk9rYXksIHNvIHRoZSBlc3NlbnRpYWwgZWxlbWVudCBoZXJlIGlzIGBUWEdCRWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUuIEJ1dCBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IHN1cHBvcnRzIGl0IGlzIGluY2x1ZGVkLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IGlmIGBNRElPX0kyQ2AgaXMgdHJpc3RhdGUuIFJpZ2h0LCBpdCBpcy4gU28gdGhhdCBtZWFucyBpdCBjYW4gYmUgc2VsZWN0aXZlbHkgZW5hYmxlZC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGN1cnJlbnRseSBsb29rIGxpa2UgdGhpczogYFNGUGAsIGBNRElPX0kyQ2AsIGFuZCBgVFhHQkVgLgoKSG9sZCBvbiBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIGBUWEdCRWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gLiBKdXN0IHRvIGJlIHNhZmUgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQsIEkmIzM5O2xsIGFkZCBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIHRvIHRoZSBsaXN0LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCBpdCB0byBtYWtlIHN1cmUgbm90aGluZyBzdXJwcmlzaW5nIGNvbWVzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSTJDX0RFU0lHTldBUkVfUExBVEZPUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2kyYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWc9NTc4PWlmIEkyQ19ERVNJR05XQVJFX0NPUkVcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTU3OS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnOjU4MDpjb25maWcgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTU4MS1cdHRyaXN0YXRlIFwmIzM0O1N5bm9wc3lzIERlc2lnbldhcmUgUGxhdGZvcm0gZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzA2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIFN5emthbGxlciBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzeXprYWxsZXIgY29uZmlnIGFuZCBJIHNlZSBpdCYjMzk7cyBnb3QgYSBsb3Qgb2YgSTJDIGRyaXZlcnMgZW5hYmxlZC4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgd2Ugc2hvdWxkIGV4cGFuZCB0aGlzLCBzcGVjaWZpY2FsbHkgaW5jbHVkaW5nIGBUWEdCRWAsIGBTRlBgLCBhbmQgYE1ESU9fSTJDYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFkZGl0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4KCkxldCBtZSBicmVhayBkb3duIHRoZSByZWFzb25pbmcgZm9yIHRoaXMuIFRoZSBwYXRjaCB3ZSYjMzk7cmUgY29uc2lkZXJpbmcgdHdlYWtzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBvZiBSb2xsQmFsbCBTRlAgbW9kdWxlcyB1c2luZyBNRElPIEkyQy4gQ3JpdGljYWxseSwgaXQgZGVsYXlzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSYjMzk7cyBQSFkgcHJvYmluZyBwaGFzZS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBnaXZlcyBhY3R1YWwgUm9sbEJhbGwgYnJpZGdlcyB0aW1lIHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlbXNlbHZlcyBiZWZvcmUgdGhlIHByb2JlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgdG91Y2hlcyBib3RoIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgTURJTyBJMkMgcHJvdG9jb2wgbG9naWMuCgpUaGUgZ3JlYXQgdGhpbmcgaXMsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXZSBjYW4gZW11bGF0ZSBhIFBDSSBkZXZpY2UgdGhhdCBicmluZ3MgdXAgYW4gU0ZQIGNhZ2UgKGxpa2UgdGhlIFdhbmd4dW4gVFhHQkUgZHJpdmVyLCBmb3IgZXhhbXBsZSkuIFRoZW4sIGZ1enppbmcgdGhvc2UgSTJDIGFuZCBHUElPIG1lbW9yeS1tYXBwZWQgSS9PIGFjY2Vzc2VzIHNob3VsZCBiZSBlbm91Z2ggdG8gdHJpZ2dlciB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUsIHB1dHRpbmcgdGhpcyBuZXcgY29kZSBwYXRoIGluIHBsYXkuCgpOb3csIGEgY3J1Y2lhbCBwb2ludDogaXMgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBhY3R1YWxseSByZWFjaGFibGU/IExldCYjMzk7cyBjb25maXJtIHRoYXQuIFllcywgaXQgbG9va3MgbGlrZSBgc2ZwX3NtX2V2ZW50YCBjYWxscyBpdCB3aGVuIHRoZSBzdGF0ZSBtYWNoaW5lIGhpdHMgYFNGUF9TX0lOSVRgIG9yIGEgc2ltaWxhciBzdGF0ZS4gSeKAmWxsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgYHNmcF9zbV9ldmVudGDigJlzIGJlaGF2aW9yIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX3NtX3Byb2JlX2Zvcl9waHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxNzU9c3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjE5My0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMTk0OnN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc3RydWN0IHNmcCAqc2ZwKVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIxOTUte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yODMxPXN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IGV2ZW50KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yOTMzLVx0XHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyOTM0Olx0XHRyZXQgPSBzZnBfc21fcHJvYmVfZm9yX3BoeShzZnApO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI5MzUtXHRcdGlmIChyZXQgPT0gLUVOT0RFVikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODYwOQoJCQkJCQkJb3V0cHV0OiAyNTgKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWwgQ2hlY2tzIGFuZCBDb25zb2xpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBzZnBfc21fbWFpbmAgZG9lcyBpbmRlZWQgY2FsbCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgbGluZSBvZiByZWFzb25pbmcuIGBzZnBfc21fbWFpbmAgaXMsIG9mIGNvdXJzZSwgdGhlIHByaW1hcnkgc3RhdGUgbWFjaGluZSBmdW5jdGlvbiwgc28gdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHJ1biB0aHJvdWdoIGEgZmluYWwgY2hlY2sgb24gdGhlIGBFbmFibGVDb25maWdzYC4gSSBoYXZlIGBUWEdCRWAsIGBTRlBgLCBhbmQgYE1ESU9fSTJDYCBsaXN0ZWQuIEhtbSwgbGV0JiMzOTtzIHNlZS4uLiBzaW5jZSBgVFhHQkVgIGRlcGVuZHMgb24gYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYCwgSSYjMzk7bGwgYWRkIHRoYXQgdG8gdGhlIGxpc3QganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEJldHRlciBzYWZlIHRoYW4gc29ycnksIGFzIHRoZXkgc2F5LgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IEkgaGF2ZSBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB1bmRlciBgRm9jdXNTeW1ib2xzYC4gTGV0IG1lIGNoZWNrLi4uIEkgaGF2ZSBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgLCBgaTJjX21paV9pbml0X3JvbGxiYWxsYCwgYW5kIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuIEFyZSB0aGVyZSBhbnkgb3RoZXJzIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ/IExldCYjMzk7cyBjaGVjay4uLiBBaCwgeWVzLCB0aGVyZSBhcmUgdHdvIHNtYWxsZXIgZnVuY3Rpb25zOiBgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3lgIGFuZCBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AuIFRoZXNlIGFyZSBiYXNpY2FsbHkgd3JhcHBlcnMsIGJ1dCB0aGV5ICpoYXZlKiBiZWVuIG1vZGlmaWVkLiBXYWl0Li4uIGxvb2tzIGxpa2UgYHNmcF9zbV9hZGRfbWRpb19idXNgIGlzIG5vdyBqdXN0IGEgc2luZ2xlIGxpbmUgdGhhdCBjYWxscyBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApYC4gQW5kIGBzZnBfaTJjX21kaW9idXNfZGVzdHJveWAgbm93IGNhbGxzIGBtZGlvYnVzX2ZyZWUoc2ZwLSZndDtpMmNfbWlpKWAuIFNpbmNlIHRoZXkgYXJlIGp1c3Qgd3JhcHBlcnMsIEkmIzM5O2xsIGluY2x1ZGUgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBhbmQgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCBhcyB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKQWxyaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RYR0JFJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtNRElPX0kyQyYjMzQ7LAogICAgJiMzNDtJMkNfREVTSUdOV0FSRV9QTEFURk9STSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21kaW9faTJjX3Byb2JlX3JvbGxiYWxsJiMzNDssCiAgICAmIzM0O2kyY19taWlfaW5pdF9yb2xsYmFsbCYjMzQ7LAogICAgJiMzNDtzZnBfc21fcHJvYmVfZm9yX3BoeSYjMzQ7LAogICAgJiMzNDtzZnBfaTJjX21kaW9idXNfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtzZnBfc21fYWRkX21kaW9fYnVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBzZXF1ZW5jZSBmb3IgUm9sbEJhbGwgU0ZQIG1vZHVsZXMgb3ZlciBNRElPIEkyQy4gSXQgZGVmZXJzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSYjMzk7cyBQSFkgcHJvYmluZyBwaGFzZSwgYWxsb3dpbmcgZ2VudWluZSBSb2xsQmFsbCBicmlkZ2VzIHRpbWUgdG8gc3RhcnQgdXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgYW5kIE1ESU8gSTJDIHByb3RvY29sIGxvZ2ljLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRoYXQgaW5zdGFudGlhdGVzIGFuIFNGUCBjYWdlIChlLmcuLCB0aGUgV2FuZ3h1biBUWEdCRSBkcml2ZXIpIGFuZCBmdXp6aW5nIHRoZSByZXN1bHRpbmcgSTJDL0dQSU8gTU1JTyBhY2Nlc3NlcyB0byB0cmlnZ2VyIHRoZSBTRlAgc3RhdGUgbWFjaGluZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFhHQkUmIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O01ESU9fSTJDJiMzNDssCiAgICAmIzM0O0kyQ19ERVNJR05XQVJFX1BMQVRGT1JNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRpb19pMmNfcHJvYmVfcm9sbGJhbGwmIzM0OywKICAgICYjMzQ7aTJjX21paV9pbml0X3JvbGxiYWxsJiMzNDssCiAgICAmIzM0O3NmcF9zbV9wcm9iZV9mb3JfcGh5JiMzNDssCiAgICAmIzM0O3NmcF9pMmNfbWRpb2J1c19kZXN0cm95JiMzNDssCiAgICAmIzM0O3NmcF9zbV9hZGRfbWRpb19idXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nIHNlcXVlbmNlIGZvciBSb2xsQmFsbCBTRlAgbW9kdWxlcyBvdmVyIE1ESU8gSTJDLiBJdCBkZWZlcnMgdGhlIHByb2JlIGZyb20gbW9kdWxlIGFsbG9jYXRpb24gdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lJiMzOTtzIFBIWSBwcm9iaW5nIHBoYXNlLCBhbGxvd2luZyBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgdGltZSB0byBzdGFydCB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgTURJTyBJMkMgcHJvdG9jb2wgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdGhhdCBpbnN0YW50aWF0ZXMgYW4gU0ZQIGNhZ2UgKGUuZy4sIHRoZSBXYW5neHVuIFRYR0JFIGRyaXZlcikgYW5kIGZ1enppbmcgdGhlIHJlc3VsdGluZyBJMkMvR1BJTyBNTUlPIGFjY2Vzc2VzIHRvIHRyaWdnZXIgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTg6NTcuNzk4ODk2NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM3NTg1NTExNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFhHQkVcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiTURJT19JMkNcIixcbiAgICBcIkkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRpb19pMmNfcHJvYmVfcm9sbGJhbGxcIixcbiAgICBcImkyY19taWlfaW5pdF9yb2xsYmFsbFwiLFxuICAgIFwic2ZwX3NtX3Byb2JlX2Zvcl9waHlcIixcbiAgICBcInNmcF9pMmNfbWRpb2J1c19kZXN0cm95XCIsXG4gICAgXCJzZnBfc21fYWRkX21kaW9fYnVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nIHNlcXVlbmNlIGZvciBSb2xsQmFsbCBTRlAgbW9kdWxlcyBvdmVyIE1ESU8gSTJDLiBJdCBkZWZlcnMgdGhlIHByb2JlIGZyb20gbW9kdWxlIGFsbG9jYXRpb24gdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lJ3MgUEhZIHByb2JpbmcgcGhhc2UsIGFsbG93aW5nIGdlbnVpbmUgUm9sbEJhbGwgYnJpZGdlcyB0aW1lIHRvIHN0YXJ0IHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBNRElPIEkyQyBwcm90b2NvbCBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB0aGF0IGluc3RhbnRpYXRlcyBhbiBTRlAgY2FnZSAoZS5nLiwgdGhlIFdhbmd4dW4gVFhHQkUgZHJpdmVyKSBhbmQgZnV6emluZyB0aGUgcmVzdWx0aW5nIEkyQy9HUElPIE1NSU8gYWNjZXNzZXMgdG8gdHJpZ2dlciB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE4OjU3Ljc5ODkwNTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjU4NzQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVhMWM4ZjY5MzMyYzQ5OWM3YjBiNmRlM2Y0Mzk0ZDVlYWRmNDM2YTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDg6MTg6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXFxuaW5kZXggYjg4ZjYzMjM0YjRlNmEuLjJhM2E0MThjMTM2OTg5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xcbkBAIC00MTksNyArNDE5LDcgQEAgc3RhdGljIGludCBpMmNfbWlpX3dyaXRlX3JvbGxiYWxsKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBkZXZhZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcXG4raW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxcbiB7XFxuIFxcdHU4IGRhdGFfYnVmW10gPSB7IFJPTExCQUxMX0RBVEFfQUREUiwgMHgwMSwgMHgwMCwgMHgwMCB9O1xcbiBcXHR1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTtcXG5AQCAtNDYyLDkgKzQ2MiwxMyBAQCBzdGF0aWMgaW50IGkyY19taWlfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXFxuIFxcbiBcXHRyZXR1cm4gLUVOT0RFVjtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19wcm9iZV9yb2xsYmFsbCk7XFxuIFxcbiBzdGF0aWMgaW50IGkyY19taWlfaW5pdF9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcXG4ge1xcbitcXHQvKiBTZW5kIHRoZSBSb2xsQmFsbCB1bmxvY2sgcGFzc3dvcmQ7IGJyaWRnZSBwcmVzZW5jZSBpcyB2ZXJpZmllZFxcbitcXHQgKiBsYXRlciwgaW4gc2ZwX3NtX3Byb2JlX2Zvcl9waHkoKSwgYWZ0ZXIgbW9kdWxlIGluaXRpYWxpemF0aW9uLlxcbitcXHQgKi9cXG4gXFx0c3RydWN0IGkyY19tc2cgbXNnO1xcbiBcXHR1OCBwd1s1XTtcXG4gXFx0aW50IHJldDtcXG5AQCAtNDg2LDcgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxcbiBcXHRpZiAocmV0ICE9IDEpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4tXFx0cmV0dXJuIGkyY19taWlfcHJvYmVfcm9sbGJhbGwoaTJjKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuQEAgLTUzMSwxMCArNTM1LDkgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuIFxcdGNhc2UgTURJT19JMkNfUk9MTEJBTEw6XFxuIFxcdFxcdHJldCA9IGkyY19taWlfaW5pdF9yb2xsYmFsbChpMmMpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuLVxcdFxcdFxcdFxcdGRldl9lcnIocGFyZW50LFxcbi1cXHRcXHRcXHRcXHRcXHRcXFwiQ2Fubm90IGluaXRpYWxpemUgUm9sbEJhbGwgTURJTyBJMkMgcHJvdG9jb2w6ICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRyZXQpO1xcbitcXHRcXHRcXHRkZXZfZXJyKHBhcmVudCxcXG4rXFx0XFx0XFx0XFx0XFxcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4gXFx0XFx0XFx0bWRpb2J1c19mcmVlKG1paSk7XFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuaW5kZXggMDNiZmQ4NjQwZGI5NjMuLmJiZmFhMDQ1MDc5OGRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbkBAIC05NjMsNiArOTYzLDcgQEAgc3RhdGljIGludCBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBzZnAgKnNmcClcXG4gc3RhdGljIHZvaWQgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3koc3RydWN0IHNmcCAqc2ZwKVxcbiB7XFxuIFxcdG1kaW9idXNfdW5yZWdpc3RlcihzZnAtXFx1MDAzZWkyY19taWkpO1xcbitcXHRtZGlvYnVzX2ZyZWUoc2ZwLVxcdTAwM2VpMmNfbWlpKTtcXG4gXFx0c2ZwLVxcdTAwM2VpMmNfbWlpID0gTlVMTDtcXG4gfVxcbiBcXG5AQCAtMjE3MywxNyArMjE3NCwxMCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZmF1bHQoc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgbmV4dF9zdGF0ZSwgYm9vbCB3YXJuKVxcbiBcXG4gc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4gXFx0aWYgKHNmcC1cXHUwMDNlbWRpb19wcm90b2NvbCA9PSBNRElPX0kyQ19OT05FKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc2ZwKTtcXG4tXFx0aWYgKHJldCA9PSAtRU5PREVWKSB7XFxuLVxcdFxcdHNmcC1cXHUwMDNlbWRpb19wcm90b2NvbCA9IE1ESU9fSTJDX05PTkU7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XFxuIH1cXG4gXFxuIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZXFxuQEAgLTIyMTQsNyArMjIwOCwxOCBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcClcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxcbi1cXHRcXHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSX1JPTExCQUxMLCB0cnVlKTtcXG4rXFx0XFx0LyogUHJvYmUgaGVyZSwgYWZ0ZXIgbW9kdWxlIGluaXRpYWxpemF0aW9uIGRlbGF5cywgc28gdGhhdFxcbitcXHRcXHQgKiBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgaGF2ZSBoYWQgdGltZSB0byBzdGFydCB1cC5cXG4rXFx0XFx0ICogTW9kdWxlcyB3aXRob3V0IGEgYnJpZGdlIChlLmcuIFJUTDgyNjFCRSkgcmV0dXJuIC1FTk9ERVYuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRlcnIgPSBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzZnAtXFx1MDAzZWkyYyk7XFxuK1xcdFxcdGlmIChlcnIgPT0gLUVOT0RFVikge1xcbitcXHRcXHRcXHRzZnBfaTJjX21kaW9idXNfZGVzdHJveShzZnApO1xcbitcXHRcXHRcXHRzZnAtXFx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0ZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaCBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oXFxuaW5kZXggNjViNTUwYTZmYzMyOTguLjVjZjE0ZjQ1Yzk0YjZhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmhcXG5AQCAtMjAsNSArMjAsNiBAQCBlbnVtIG1kaW9faTJjX3Byb3RvIHtcXG4gXFxuIHN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbiBcXHRcXHRcXHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbCk7XFxuK2ludCBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7XFxuIFxcbiAjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTg6NTguNDE2MjU2MDg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTMxNDExODEwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFhHQkVcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiTURJT19JMkNcIixcbiAgICBcIkkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRpb19pMmNfcHJvYmVfcm9sbGJhbGxcIixcbiAgICBcImkyY19taWlfaW5pdF9yb2xsYmFsbFwiLFxuICAgIFwic2ZwX3NtX3Byb2JlX2Zvcl9waHlcIixcbiAgICBcInNmcF9pMmNfbWRpb2J1c19kZXN0cm95XCIsXG4gICAgXCJzZnBfc21fYWRkX21kaW9fYnVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nIHNlcXVlbmNlIGZvciBSb2xsQmFsbCBTRlAgbW9kdWxlcyBvdmVyIE1ESU8gSTJDLiBJdCBkZWZlcnMgdGhlIHByb2JlIGZyb20gbW9kdWxlIGFsbG9jYXRpb24gdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lJ3MgUEhZIHByb2JpbmcgcGhhc2UsIGFsbG93aW5nIGdlbnVpbmUgUm9sbEJhbGwgYnJpZGdlcyB0aW1lIHRvIHN0YXJ0IHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBNRElPIEkyQyBwcm90b2NvbCBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB0aGF0IGluc3RhbnRpYXRlcyBhbiBTRlAgY2FnZSAoZS5nLiwgdGhlIFdhbmd4dW4gVFhHQkUgZHJpdmVyKSBhbmQgZnV6emluZyB0aGUgcmVzdWx0aW5nIEkyQy9HUElPIE1NSU8gYWNjZXNzZXMgdG8gdHJpZ2dlciB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWExYzhmNjkzMzJjNDk5YzdiMGI2ZGUzZjQzOTRkNWVhZGY0MzZhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA4OjE4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG5pbmRleCBiODhmNjMyMzRiNGU2YS4uMmEzYTQxOGMxMzY5ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xuQEAgLTQxOSw3ICs0MTksNyBAQCBzdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbitpbnQgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4ge1xuIFx0dTggZGF0YV9idWZbXSA9IHsgUk9MTEJBTExfREFUQV9BRERSLCAweDAxLCAweDAwLCAweDAwIH07XG4gXHR1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTtcbkBAIC00NjIsOSArNDYyLDEzIEBAIHN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbiBcbiBcdHJldHVybiAtRU5PREVWO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19wcm9iZV9yb2xsYmFsbCk7XG4gXG4gc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4ge1xuK1x0LyogU2VuZCB0aGUgUm9sbEJhbGwgdW5sb2NrIHBhc3N3b3JkOyBicmlkZ2UgcHJlc2VuY2UgaXMgdmVyaWZpZWRcbitcdCAqIGxhdGVyLCBpbiBzZnBfc21fcHJvYmVfZm9yX3BoeSgpLCBhZnRlciBtb2R1bGUgaW5pdGlhbGl6YXRpb24uXG4rXHQgKi9cbiBcdHN0cnVjdCBpMmNfbXNnIG1zZztcbiBcdHU4IHB3WzVdO1xuIFx0aW50IHJldDtcbkBAIC00ODYsNyArNDkwLDcgQEAgc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4gXHRpZiAocmV0ICE9IDEpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuLVx0cmV0dXJuIGkyY19taWlfcHJvYmVfcm9sbGJhbGwoaTJjKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBtZGlvX2kyY19jaGVja19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuQEAgLTUzMSwxMCArNTM1LDkgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuIFx0XHRyZXQgPSBpMmNfbWlpX2luaXRfcm9sbGJhbGwoaTJjKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGlmIChyZXQgIT0gLUVOT0RFVilcbi1cdFx0XHRcdGRldl9lcnIocGFyZW50LFxuLVx0XHRcdFx0XHRcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcblwiLFxuLVx0XHRcdFx0XHRyZXQpO1xuK1x0XHRcdGRldl9lcnIocGFyZW50LFxuK1x0XHRcdFx0XCJDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcXG5cIixcbitcdFx0XHRcdHJldCk7XG4gXHRcdFx0bWRpb2J1c19mcmVlKG1paSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuaW5kZXggMDNiZmQ4NjQwZGI5NjMuLmJiZmFhMDQ1MDc5OGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbkBAIC05NjMsNiArOTYzLDcgQEAgc3RhdGljIGludCBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBzZnAgKnNmcClcbiBzdGF0aWMgdm9pZCBzZnBfaTJjX21kaW9idXNfZGVzdHJveShzdHJ1Y3Qgc2ZwICpzZnApXG4ge1xuIFx0bWRpb2J1c191bnJlZ2lzdGVyKHNmcC1cdTAwM2VpMmNfbWlpKTtcbitcdG1kaW9idXNfZnJlZShzZnAtXHUwMDNlaTJjX21paSk7XG4gXHRzZnAtXHUwMDNlaTJjX21paSA9IE5VTEw7XG4gfVxuIFxuQEAgLTIxNzMsMTcgKzIxNzQsMTAgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybilcbiBcbiBzdGF0aWMgaW50IHNmcF9zbV9hZGRfbWRpb19idXMoc3RydWN0IHNmcCAqc2ZwKVxuIHtcbi1cdGludCByZXQ7XG4tXG4gXHRpZiAoc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPT0gTURJT19JMkNfTk9ORSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XG4tXHRpZiAocmV0ID09IC1FTk9ERVYpIHtcbi1cdFx0c2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApO1xuIH1cbiBcbiAvKiBQcm9iZSBhIFNGUCBmb3IgYSBQSFkgZGV2aWNlIGlmIHRoZSBtb2R1bGUgc3VwcG9ydHMgY29wcGVyIC0gdGhlIFBIWVxuQEAgLTIyMTQsNyArMjIwOCwxOCBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcClcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuLVx0XHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSX1JPTExCQUxMLCB0cnVlKTtcbitcdFx0LyogUHJvYmUgaGVyZSwgYWZ0ZXIgbW9kdWxlIGluaXRpYWxpemF0aW9uIGRlbGF5cywgc28gdGhhdFxuK1x0XHQgKiBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgaGF2ZSBoYWQgdGltZSB0byBzdGFydCB1cC5cbitcdFx0ICogTW9kdWxlcyB3aXRob3V0IGEgYnJpZGdlIChlLmcuIFJUTDgyNjFCRSkgcmV0dXJuIC1FTk9ERVYuXG4rXHRcdCAqL1xuK1x0XHRlcnIgPSBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzZnAtXHUwMDNlaTJjKTtcbitcdFx0aWYgKGVyciA9PSAtRU5PREVWKSB7XG4rXHRcdFx0c2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3koc2ZwKTtcbitcdFx0XHRzZnAtXHUwMDNlbWRpb19wcm90b2NvbCA9IE1ESU9fSTJDX05PTkU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0ZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmhcbmluZGV4IDY1YjU1MGE2ZmMzMjk4Li41Y2YxNGY0NWM5NGI2YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaFxuQEAgLTIwLDUgKzIwLDYgQEAgZW51bSBtZGlvX2kyY19wcm90byB7XG4gXG4gc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4gXHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpO1xuK2ludCBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7XG4gXG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxODo1OC40MTYyNTc4NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzg2MTExMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBTRlAgYW5kIE1ESU8gSTJDIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hlZCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2Ag4oCTIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVmYWN0b3Jpbmcgc29tZSBvZiB0aGUgTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgYW5kIFNGUCAoU21hbGwgRm9ybS1mYWN0b3IgUGx1Z2dhYmxlKSBkcml2ZXIgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgSTJDIGNvbW11bmljYXRpb24uIFRoZSByZW5hbWluZyBvZiBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGAgdG8gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCBhbmQgZXhwb3J0aW5nIGl0IGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gVGhlbiB0aGUgY2hhbmdlIHRvIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgIG5vdCBjYWxsaW5nIHRoZSBwcm9iZSBmdW5jdGlvbiBkaXJlY3RseSBpcyBhIGJpdCBtb3JlIGludm9sdmVkLiBJdCBhcHBlYXJzIHRoZXJlIGlzIHNvbWUgcmVmYWN0b3JpbmcgYW5kIHNwbGl0dGluZyBvZiByZXNwb25zaWJpbGl0aWVzLCBhbmQgaXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIFRoZSBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIGZ1bmN0aW9uIG5vdyBjYWxsaW5nIHRoZSBuZXcsIGV4cG9ydGVkIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBkcml2ZXIgaW50ZXJhY3Rpb24gaXMgY2hhbmdpbmcuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSBldmVuICp0ZXN0KiB0aGlzIGVmZmVjdGl2ZWx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFNGUHMgYXJlIHVzdWFsbHkgcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB3aGlsZSBJIGNhbiB1c3VhbGx5IHNpbXVsYXRlIEkyQyBkZXZpY2VzIHdpdGggdGhpbmdzIGxpa2UgaTJjLXN0dWIgb3Igc2ltaWxhciwgSSdtIG5vdCBzdXJlIGlmIHRoZXJlJ3MgYSBnb29kIHdheSB0byBmdWxseSBlbXVsYXRlIG9yIGZ1enogYW4gU0ZQIG1vZHVsZSBpdHNlbGYuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIHNvbWUgd2F5IHRvIHZhbGlkYXRlIHRoaXMgcGF0Y2guXG5cbkknbGwgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBNRElPX0kyQ2AgYW5kIGBTRlBgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGVyZSBhcmUgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGVzdGluZy4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYWxzbyBpbmZvcm0gd2hpY2ggYnVpbGQgY29uZmlndXJhdGlvbnMgSSBjYW4gYW5kIHNob3VsZCB0ZXN0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTowNC4yMDIzNzI1NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NTEyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1ESU9fSTJDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05OT1jb25maWcgTURJT19ISVNJX0ZFTUFDXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA1LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDY6Y29uZmlnIE1ESU9fSTJDXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTowNC4yNjMyMjk5ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ3ODc1MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBNRElPX0kyQyBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6ICp3aGF0IHNwZWNpZmljYWxseSBpcyB0cmlnZ2VyaW5nIHRoZSB1c2Ugb2YgYE1ESU9fSTJDYD8qIE15IGltbWVkaWF0ZSBtZW50YWwgcHJvY2VzcyBoZXJlIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb2RlIHBhdGhzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbGVhZCB0byB0aGlzIHNlbGVjdGlvbi4gSSdtIG5vdCBsb29raW5nIGZvciBhIGdlbmVyYWwgb3ZlcnZpZXc7IEkgbmVlZCB0byBkcmlsbCBkb3duIHRvIHRoZSBzcGVjaWZpYyBkcml2ZXJzLCBib2FyZCBmaWxlcywgb3IgZGV2aWNlIHRyZWUgZW50cmllcyB0aGF0IGFyZSByZXNwb25zaWJsZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgcmVnaXN0ZXIgc2V0dGluZ3MsIHRoZSBwb3dlciBtYW5hZ2VtZW50IHNlcXVlbmNlLCBvciBwZXJoYXBzIGV2ZW4gYSBzb2Z0d2FyZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIHBhcnRpY3VsYXIgY2hvaWNlLCBub3QganVzdCAqdGhhdCogaXQncyBoYXBwZW5pbmcuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciB1bmRlcnN0YW5kIGV4aXN0aW5nIGJlaGF2aW9yIG9yIHBvc3NpYmx5IGRlYnVnIGEgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjA3LjYxMTEwNzM3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg3OTMzNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNRElPX0kyQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NzM9Y29uZmlnIFNGUFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzYtXFx0ZGVwZW5kcyBvbiBIV01PTiB8fCBIV01PTj1uXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Nzc6XFx0c2VsZWN0IE1ESU9fSTJDXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjA5Ljc5OTA0ODM3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTc0MDM2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGlzIGBDT05GSUdfU0ZQYCBkZWZpbmUsIGFuZCBpdCdzIHBvaW50aW5nIG1lIHRvd2FyZCBgTURJT19JMkNgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBndXQgdGVsbHMgbWUgdGhhdCBgQ09ORklHX1NGUGAgaXMgbGlrZWx5IGEgZ2F0aW5nIG1lY2hhbmlzbSBvciBzZWxlY3Rpb24gZm9yIHRoZSBJMkMtYmFzZWQgTURJTyBkcml2ZXIsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgU0ZQIHRyYW5zY2VpdmVycywgZXNwZWNpYWxseSBpZiB0aGUgaGFyZHdhcmUgdXNlcyBJMkMgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBvbiB0aGF0IGBDT05GSUdfU0ZQYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQsIGNyaXRpY2FsbHksIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgdGhlIHByaW1hcnkgZHJpdmVyIHNlbGVjdGlvbiBvciBwZXJoYXBzIGEgZmxhZyB0byBzdXBwb3J0IGEgc3BlY2lmaWMgU0ZQIG1vZHVsZSB2YXJpYW50PyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc291cmNlIGNvZGUgd2hlcmUgYENPTkZJR19TRlBgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgYmUgbG9va2luZyBmb3Igb3RoZXIgYXNzb2NpYXRlZCBkZWZpbmVzIGFuZCBhbnkgY29uZGl0aW9uYWxzIHRoYXQgaW1wYWN0IHdoaWNoIGRyaXZlciBvciBzdWJzeXN0ZW0gaXMgdWx0aW1hdGVseSBlbmFibGVkLiBJIHN1c3BlY3QgaXQncyB0aGUgdGlwIG9mIHRoZSBpY2ViZXJnIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdGhlIHJlc3Qgb2YgdGhlIFNGUC9NRElPIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzkxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTk6MTMuODE2NDU0MzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTM4MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRlBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03Mi1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIlNGUCBjYWdlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjEzLjg4NjU5ODM0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDA0MjMzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhlIGZpZWxkOlxuXG4qKkZ1enppbmcgdGhlIFNGUCBNb2R1bGU6IEluaXRpYWwgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSBlZmZlY3RpdmVseSBmdXp6IGFuIFNGUCBtb2R1bGU/IEl0J3MgYSB2YWxpZCB0YXJnZXQuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQsIHllcywgaXQgc2hvdWxkIGJlIGEgd29ydGh3aGlsZSBlbmRlYXZvciwgZXNwZWNpYWxseSBnaXZlbiB0aGUgYXR0YWNrIHN1cmZhY2UgaXQgcHJlc2VudHMuIEdpdmVuIHRoYXQgbXkgZmllbGQgaXMgc2VjdXJpdHksIHRoaXMgaXMgc29tZXRoaW5nIEknZCB3YW50IHRvIHVuZGVyc3RhbmQuXG5cblRoaW5raW5nIGFib3V0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgU0ZQIG1vZHVsZXMgdXNlIEkyQyBhbmQgR1BJT3MgZm9yIGNvbW11bmljYXRpb24uIFRoZSBJMkMgaW50ZXJmYWNlIGlzIGEgc3RhbmRhcmQgdHdvLXdpcmUgc2VyaWFsIHByb3RvY29sIGNvbW1vbmx5IHVzZWQgZm9yIGFjY2Vzc2luZyBkZXZpY2UgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYW5kIG90aGVyIGNvbnRyb2wgZnVuY3Rpb25zLiBHUElPcywgb24gdGhlIG90aGVyIGhhbmQsIGFsbG93IGZvciBnZW5lcmFsLXB1cnBvc2UgZGlnaXRhbCBpbnB1dC9vdXRwdXQgb3BlcmF0aW9ucy4gVGhlcmVmb3JlIHRoZXNlIGludGVyZmFjZXMgb2ZmZXIgYSB3YXkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlIGFuZCBhcmUgdGhlcmVmb3JlIG9mIGludGVyZXN0IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuU28sIHdoZXJlIGRvIHdlIHN0YXJ0PyBJJ2QgaW1tZWRpYXRlbHkganVtcCBpbnRvIHRoZSByZWxldmFudCBkcml2ZXIgY29kZSBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEknZCB3YW50IHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgU0ZQIG1vZHVsZSBhdCBhIGxvdyBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGUgSTJDIGFuZCBHUElPIGludGVyYWN0aW9ucywgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsbHkgdW5leHBlY3RlZCBkYXRhIG9yIHNlcXVlbmNlcywgaXMgY3J1Y2lhbCBmb3IgZGV2aXNpbmcgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjIwLjk4NzAyNDU2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMDM5NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jPTMyNTc9c3RhdGljIGludCBzZnBfaTJjX2dldChzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzI4Mi1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MzI4MzpzdGF0aWMgaW50IHNmcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjg0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0zNDY1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNmcF9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjM0NjY6XFx0LnByb2JlID0gc2ZwX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zNDY3LVxcdC5yZW1vdmUgPSBzZnBfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOToyMS4yNDcwNzEwOTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczNTczODEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBsYXRmb3JtIERyaXZlciBhbmQgU3l6a2FsbGVyJ3MgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgYW5kIGl0J3MgZmxhZ2dlZCBhcyBhIHBsYXRmb3JtIGRyaXZlci4gRmlyc3QgdGhvdWdodDogQ2FuIHRoaXMgYmUgaW5zdGFudGlhdGVkIHZpYSB0aGUgZGV2aWNlIHRyZWUsIG9yIGlzIGl0IGdvaW5nIHRvIHJlbHkgb24gc3lzZnM/IFBsYXRmb3JtIGRyaXZlcnMgKnVzdWFsbHkqIGhhdmUgYSBkZXZpY2UgdHJlZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLCBvciwgaWYgaXQgd2FzIGFuIEkyQyBkZXZpY2UsIHlvdSBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBvbmUgdmlhIHN5c2ZzLCBidXQgdGhpcyBpcyBhICpwbGF0Zm9ybSogZGV2aWNlLlxuXG5IYW5nIG9uLi4uIGRvZXMgc3l6a2FsbGVyIGhhdmUgYW55IHNwZWNpZmljIG1lY2hhbmlzbXMgdG8gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgZGlyZWN0bHk/IEkga25vdyBpdCBkb2VzIHRoaW5ncyB3aXRoIGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBuZXRsaW5rIGZvciBjZXJ0YWluIGludGVyYWN0aW9ucywgYW5kIHN5c2ZzIGZvciBzb21lIGJ1c2VzLCBidXQgSSBjYW4ndCBpbW1lZGlhdGVseSByZWNhbGwgYSBkZWRpY2F0ZWQgcGxhdGZvcm0gaW5qZWN0aW9uIG1ldGhvZC4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgc29tZXRoaW5nIGxpa2UgYHN5el9kZXZfcGxhdGZvcm1fYWRkYD8gTm8sIHRoYXQgZG9lc24ndCBzb3VuZCByaWdodC5cblxuQWgsIHdhaXQuIEl0ICpjYW4qIGZ1enogSTJDIHZpYSBgL2Rldi9pMmMtKmAgaWYgZWl0aGVyIGBpMmMtc3R1YmAgb3IgYGkyYy1kZXZgIGFyZSBwcmVzZW50LCBidXQgdGhlIGNhdGNoIGlzIHRoYXQgdGhpcyBwbGF0Zm9ybSBkZXZpY2UsIHRoZSBgc2ZwYCwgdXRpbGl6ZXMgSTJDLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBoYXMgZXhpc3RpbmcgZGVzY3JpcHRpb25zIG9yIGtub3dsZWRnZSBvZiB0aGUgU0ZQIGRldmljZS4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhpc3RpbmcgZGVzY3JpcHRpb25zIGZvciBTRlAgd2l0aGluIHN5emthbGxlcidzIGZyYW1ld29yay4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOToyNi45ODI4MTE3NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDQ1OTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9lZXByb20uYy0zLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxubmV0L2V0aHRvb2wvZWVwcm9tLmM6NDojaW5jbHVkZSBcXHUwMDNjbGludXgvc2ZwLmhcXHUwMDNlXFxubmV0L2V0aHRvb2wvZWVwcm9tLmMtNS1cXG4tLVxcbm5ldC9ldGh0b29sL2VlcHJvbS5jPTkyPXN0YXRpYyBpbnQgZ2V0X21vZHVsZV9lZXByb21fYnlfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvZWVwcm9tLmMtMTAzLVxcbm5ldC9ldGh0b29sL2VlcHJvbS5jOjEwNDpcXHRpZiAoZGV2LVxcdTAwM2VzZnBfYnVzKVxcbm5ldC9ldGh0b29sL2VlcHJvbS5jOjEwNTpcXHRcXHRyZXR1cm4gc2ZwX2dldF9tb2R1bGVfZWVwcm9tX2J5X3BhZ2UoZGV2LVxcdTAwM2VzZnBfYnVzLCBwYWdlX2RhdGEsIGV4dGFjayk7XFxubmV0L2V0aHRvb2wvZWVwcm9tLmMtMTA2LVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6MjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NmcC5oXFx1MDAzZVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9Mjg2ND1pbnQgZXRodG9vbF9nZXRfbW9kdWxlX2luZm9fY2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yODcyLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6Mjg3MzpcXHRpZiAoZGV2LVxcdTAwM2VzZnBfYnVzKVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6Mjg3NDpcXHRcXHRyZXR1cm4gc2ZwX2dldF9tb2R1bGVfaW5mbyhkZXYtXFx1MDAzZXNmcF9idXMsIG1vZGluZm8pO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjg3NS1cXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MjkwND1pbnQgZXRodG9vbF9nZXRfbW9kdWxlX2VlcHJvbV9jYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI5MTItXFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyOTEzOlxcdGlmIChkZXYtXFx1MDAzZXNmcF9idXMpXFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyOTE0OlxcdFxcdHJldHVybiBzZnBfZ2V0X21vZHVsZV9lZXByb20oZGV2LVxcdTAwM2VzZnBfYnVzLCBlZSwgZGF0YSk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yOTE1LVxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9tb2R1bGUuYzo1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZnAuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9tb2R1bGUuYy02LSNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9waHkuYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZnAuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9waHkuYy05LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jPTE4PXN0cnVjdCBwaHlfcmVwbHlfZGF0YSB7XFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYy0yMy1cXHR1bnNpZ25lZCBpbnQgdXBzdHJlYW1fdHlwZTtcXG5uZXQvZXRodG9vbC9waHkuYzoyNDpcXHRjaGFyICp1cHN0cmVhbV9zZnBfbmFtZTtcXG5uZXQvZXRodG9vbC9waHkuYy0yNS1cXHR1bnNpZ25lZCBpbnQgdXBzdHJlYW1faW5kZXg7XFxubmV0L2V0aHRvb2wvcGh5LmM6MjY6XFx0Y2hhciAqZG93bnN0cmVhbV9zZnBfbmFtZTtcXG5uZXQvZXRodG9vbC9waHkuYy0yNy19O1xcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmM9MzY9c3RhdGljIGludCBwaHlfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtNTUtXFx0LyogRVRIVE9PTF9BX1BIWV9VUFNUUkVBTV9TRlBfTkFNRSAqL1xcbm5ldC9ldGh0b29sL3BoeS5jOjU2OlxcdGlmIChyZXBfZGF0YS1cXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUpXFxubmV0L2V0aHRvb2wvcGh5LmM6NTc6XFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzdHJsZW4ocmVwX2RhdGEtXFx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKSArIDEpO1xcbm5ldC9ldGh0b29sL3BoeS5jLTU4LVxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtNjMtXFx0LyogRVRIVE9PTF9BX1BIWV9ET1dOU1RSRUFNX1NGUF9OQU1FICovXFxubmV0L2V0aHRvb2wvcGh5LmM6NjQ6XFx0aWYgKHJlcF9kYXRhLVxcdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKVxcbm5ldC9ldGh0b29sL3BoeS5jOjY1OlxcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc3RybGVuKHJlcF9kYXRhLVxcdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSArIDEpO1xcbm5ldC9ldGh0b29sL3BoeS5jLTY2LVxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmM9NzA9c3RhdGljIGludCBwaHlfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYy0xMTAtXFxubmV0L2V0aHRvb2wvcGh5LmM6MTExOlxcdGlmIChwZG4tXFx1MDAzZXBhcmVudF9zZnBfYnVzKSB7XFxubmV0L2V0aHRvb2wvcGh5LmM6MTEyOlxcdFxcdHJlcF9kYXRhLVxcdTAwM2V1cHN0cmVhbV9zZnBfbmFtZSA9IGtzdHJkdXAoc2ZwX2dldF9uYW1lKHBkbi1cXHUwMDNlcGFyZW50X3NmcF9idXMpLFxcbm5ldC9ldGh0b29sL3BoeS5jLTExMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG5uZXQvZXRodG9vbC9waHkuYzoxMTQ6XFx0XFx0aWYgKCFyZXBfZGF0YS1cXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUpIHtcXG5uZXQvZXRodG9vbC9waHkuYy0xMTUtXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jLTExOS1cXG5uZXQvZXRodG9vbC9waHkuYzoxMjA6XFx0aWYgKHBoeWRldi1cXHUwMDNlc2ZwX2J1cykge1xcbm5ldC9ldGh0b29sL3BoeS5jOjEyMTpcXHRcXHRyZXBfZGF0YS1cXHUwMDNlZG93bnN0cmVhbV9zZnBfbmFtZSA9IGtzdHJkdXAoc2ZwX2dldF9uYW1lKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyksXFxubmV0L2V0aHRvb2wvcGh5LmMtMTIyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL3BoeS5jOjEyMzpcXHRcXHRpZiAoIXJlcF9kYXRhLVxcdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSB7XFxubmV0L2V0aHRvb2wvcGh5LmMtMTI0LVxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxubmV0L2V0aHRvb2wvcGh5LmM6MTI1OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdXBzdHJlYW1fc2ZwO1xcbm5ldC9ldGh0b29sL3BoeS5jLTEyNi1cXHRcXHR9XFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYy0xMzAtXFxubmV0L2V0aHRvb2wvcGh5LmM6MTMxOmVycl9mcmVlX3Vwc3RyZWFtX3NmcDpcXG5uZXQvZXRodG9vbC9waHkuYzoxMzI6XFx0a2ZyZWUocmVwX2RhdGEtXFx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKTtcXG5uZXQvZXRodG9vbC9waHkuYy0xMzMtZXJyX2ZyZWVfZHJ2bmFtZTpcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jPTE0MD1zdGF0aWMgaW50IHBoeV9maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYy0xNTktXFxubmV0L2V0aHRvb2wvcGh5LmM6MTYwOlxcdGlmIChyZXBfZGF0YS1cXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvZXRodG9vbC9waHkuYy0xNjEtXFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX1BIWV9VUFNUUkVBTV9TRlBfTkFNRSxcXG5uZXQvZXRodG9vbC9waHkuYzoxNjI6XFx0XFx0XFx0ICAgcmVwX2RhdGEtXFx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKSlcXG5uZXQvZXRodG9vbC9waHkuYy0xNjMtXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG5uZXQvZXRodG9vbC9waHkuYy0xNjQtXFxubmV0L2V0aHRvb2wvcGh5LmM6MTY1OlxcdGlmIChyZXBfZGF0YS1cXHUwMDNlZG93bnN0cmVhbV9zZnBfbmFtZSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9ldGh0b29sL3BoeS5jLTE2Ni1cXHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBFVEhUT09MX0FfUEhZX0RPV05TVFJFQU1fU0ZQX05BTUUsXFxubmV0L2V0aHRvb2wvcGh5LmM6MTY3OlxcdFxcdFxcdCAgIHJlcF9kYXRhLVxcdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSlcXG5uZXQvZXRodG9vbC9waHkuYy0xNjgtXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jPTE3Mz1zdGF0aWMgdm9pZCBwaHlfY2xlYW51cF9kYXRhKHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKVxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtMTc4LVxcdGtmcmVlKHJlcF9kYXRhLVxcdTAwM2VuYW1lKTtcXG5uZXQvZXRodG9vbC9waHkuYzoxNzk6XFx0a2ZyZWUocmVwX2RhdGEtXFx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKTtcXG5uZXQvZXRodG9vbC9waHkuYzoxODA6XFx0a2ZyZWUocmVwX2RhdGEtXFx1MDAzZWRvd25zdHJlYW1fc2ZwX25hbWUpO1xcbm5ldC9ldGh0b29sL3BoeS5jLTE4MS19XFxuLS1cXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM9MTg9c3RhdGljIGludFxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoxOTpoc3Jfbm9kZV90YWJsZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2ZwLCB2b2lkICpkYXRhKVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy0yMC17XFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjIxOlxcdHN0cnVjdCBoc3JfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaHNyX3ByaXYgKilzZnAtXFx1MDAzZXByaXZhdGU7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTIyLVxcdHN0cnVjdCBoc3Jfbm9kZSAqbm9kZTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjMtXFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjI0OlxcdHNlcV9wcmludGYoc2ZwLCBcXFwiTm9kZSBUYWJsZSBlbnRyaWVzIGZvciAoJXMpIGRldmljZVxcXFxuXFxcIixcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjUtXFx0XFx0ICAgKHByaXYtXFx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgPyBcXFwiUFJQXFxcIiA6IFxcXCJIU1JcXFwiKSk7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjI2OlxcdHNlcV9wdXRzKHNmcCwgXFxcIk1BQy1BZGRyZXNzLUEsICAgIE1BQy1BZGRyZXNzLUIsICAgIHRpbWVfaW5bQV0sIFxcXCIpO1xcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoyNzpcXHRzZXFfcHV0cyhzZnAsIFxcXCJ0aW1lX2luW0JdLCBBZGRyZXNzLUIgcG9ydCwgXFxcIik7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTI4LVxcdGlmIChwcml2LVxcdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoyOTpcXHRcXHRzZXFfcHV0cyhzZnAsIFxcXCJTQU4tQSwgU0FOLUIsIERBTi1QXFxcXG5cXFwiKTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMzAtXFx0ZWxzZVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzozMTpcXHRcXHRzZXFfcHV0cyhzZnAsIFxcXCJEQU4tSFxcXFxuXFxcIik7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTMyLVxcbi0tXFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTM3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzozODpcXHRcXHRzZXFfcHJpbnRmKHNmcCwgXFxcIiVwTSBcXFwiLCBcXHUwMDI2bm9kZS1cXHUwMDNlbWFjYWRkcmVzc19BWzBdKTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6Mzk6XFx0XFx0c2VxX3ByaW50ZihzZnAsIFxcXCIlcE0gXFxcIiwgXFx1MDAyNm5vZGUtXFx1MDAzZW1hY2FkZHJlc3NfQlswXSk7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjQwOlxcdFxcdHNlcV9wcmludGYoc2ZwLCBcXFwiJTEwbHgsIFxcXCIsIG5vZGUtXFx1MDAzZXRpbWVfaW5bSFNSX1BUX1NMQVZFX0FdKTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6NDE6XFx0XFx0c2VxX3ByaW50ZihzZnAsIFxcXCIlMTBseCwgXFxcIiwgbm9kZS1cXHUwMDNldGltZV9pbltIU1JfUFRfU0xBVkVfQl0pO1xcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzo0MjpcXHRcXHRzZXFfcHJpbnRmKHNmcCwgXFxcIiUxNHgsIFxcXCIsIG5vZGUtXFx1MDAzZWFkZHJfQl9wb3J0KTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtNDMtXFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTQ0LVxcdFxcdGlmIChwcml2LVxcdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzo0NTpcXHRcXHRcXHRzZXFfcHJpbnRmKHNmcCwgXFxcIiU1eCwgJTV4LCAlNXhcXFxcblxcXCIsXFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTQ2LVxcdFxcdFxcdFxcdCAgIG5vZGUtXFx1MDAzZXNhbl9hLCBub2RlLVxcdTAwM2VzYW5fYixcXG4tLVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy00OC1cXHRcXHRlbHNlXFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjQ5OlxcdFxcdFxcdHNlcV9wcmludGYoc2ZwLCBcXFwiJTV4XFxcXG5cXFwiLCAxKTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtNTAtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOToyNy4wODMyNzY4OTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5MzIzNTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBmdW5jdGlvbi4gUmlnaHQsIGl0J3MgdHJpZ2dlcmVkIHdoZW4gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGlzIHByb2JpbmcgZm9yIGEgUEhZLiBUaGF0IG1ha2VzIGl0IGEgcGh5c2ljYWwgbW9kdWxlLCBhIGhhcmR3YXJlIGludGVyZmFjZS4gQ2FuIEkgcmVhY2ggdGhpcyB0aGluZyB0aHJvdWdoIHN5emthbGxlcj8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uXG5cblN5emthbGxlciBjYW4gc2ltdWxhdGUgSTJDIGRldmljZXMgd2l0aCBgaTJjLXN0dWJgLCBidXQgU0ZQIGlzIGEgcGxhdGZvcm0gZGV2aWNlLiBDYW4gSSBzb21laG93IGNyZWF0ZSBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHVzaW5nIFN5emthbGxlciBkaXJlY3RseT8gSSdsbCBuZWVkIGEgd2F5IHRvIGluc3RhbnRpYXRlIHRoYXQgYHNmcGAgZHJpdmVyLlxuXG5MZXQgbWUgc2Vl4oCmIGluIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLCB0aGVyZSdzIGBzZnBfcHJvYmVgLCBhbmQgaXQncyBhc3NvY2lhdGVkIHdpdGggYHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyYC4gU28sIHBsYXRmb3JtIGRldmljZXMgY2FuIGJlIGNyZWF0ZWQgdmlhIGRldmljZSB0cmVlIG92ZXJsYXlzLCBvciBtYXliZSBhbm90aGVyIGRyaXZlciBkeW5hbWljYWxseSBjcmVhdGVzIHRoZW0gYXQgcnVudGltZS5cblxuV2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIGRvZXNuJ3QgdHlwaWNhbGx5IGp1c3QgKmNyZWF0ZSogcGxhdGZvcm0gZGV2aWNlcywgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBzeXpib3QgcHNldWRvLWRldmljZSBkZWZpbmVkIGZvciBpdCwgb3IgbWF5YmUgaXQncyBleHBvc2VkIHRocm91Z2ggc29tZSBuZXRsaW5rIG9yIHN5c2ZzIGludGVyZmFjZS4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludC5cblxuSG1tLCB3aGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBtYWNzZWNgIG9yIGB2ZXRoYD8gQ291bGQgdGhleSBiZSByZXNwb25zaWJsZSBmb3IgaW5zdGFudGlhdGluZyB0aGUgU0ZQIG1vZHVsZSBpbiBzb21lIHdheT8gTm8sIFNGUCBpcyBhICpwaHlzaWNhbCogY2FnZSwgc28gdGhhdCdzIG5vdCBsaWtlbHkuXG5cbk9rYXksIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgc2l0dWF0aW9uLiBMZXQncyBkaWcgZGVlcGVyLiBJJ2xsIGNoZWNrIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSAqY2FsbGVycyogb2YgYHNmcF9wcm9iZWAsIG9yIGlmIGl0J3Mgb25seSBldmVyIGluc3RhbnRpYXRlZCB2aWEgdGhlIERldmljZSBUcmVlIG9yIEFDUEkuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBpZGVhIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIGJlIGJyb3VnaHQgaW50byBleGlzdGVuY2UsIGFuZCB0aGF0IHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hldGhlciBJIGNhbiBleHBsb2l0IGEgbWV0aG9kIGZvciBpbnN0YW50aWF0aW5nIG9uZSB0aHJvdWdoIFN5emthbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxNiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTozMy4xNzY1MTU2MzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTAyMjA4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0yMTYwPWludCBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTY4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNjk6ICogaXhnYmVfaXNfc2ZwX3Byb2JlIC0gUmV0dXJucyB0cnVlIGlmIFNGUCBpcyBiZWluZyBkZXRlY3RlZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzAtICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3My0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMTc0OnN0YXRpYyBib29sIGl4Z2JlX2lzX3NmcF9wcm9iZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBvZmZzZXQsIHU4IGFkZHIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0yMTk0PXN0YXRpYyBpbnQgaXhnYmVfcmVhZF9pMmNfYnl0ZV9nZW5lcmljX2ludChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDQtXFx0XFx0bWF4X3JldHJ5ID0gMztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMjA1OlxcdGlmIChpeGdiZV9pc19zZnBfcHJvYmUoaHcsIGJ5dGVfb2Zmc2V0LCBkZXZfYWRkcikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjIwNi1cXHRcXHRtYXhfcmV0cnkgPSBJWEdCRV9TRlBfREVURUNUX1JFVFJJRVM7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE2NzY9c3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwMy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDQ6ICogcGh5X3NmcF9wcm9iZSAtIHByb2JlIGZvciBhIFNGUCBjYWdlIGF0dGFjaGVkIHRvIHRoaXMgUEhZIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNS0gKiBAcGh5ZGV2OiBQb2ludGVyIHRvIHBoeV9kZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA3OnN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1MDg9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUyMi1cXHRpZiAoIXBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUyMzpcXHRcXHRyZXQgPSBwaHlfc2ZwX3Byb2JlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTI0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzI1Nz1zdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjgyLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozMjgzOnN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTMyODQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTM0NjU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ZwX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MzQ2NjpcXHQucHJvYmUgPSBzZnBfcHJvYmUsXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTM0NjctXFx0LnJlbW92ZSA9IHNmcF9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmM9Mzk9c3RhdGljIHN0cnVjdCBudm1lbV9jb25maWcgbGF5ZXJzY2FwZV9zZnBfbnZtZW1fY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jLTQ1LVxcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYzo0NjpzdGF0aWMgaW50IGxheWVyc2NhcGVfc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jLTQ3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYz05OD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsYXllcnNjYXBlX3NmcF9kcml2ZXIgPSB7XFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jOjk5OlxcdC5wcm9iZVxcdD0gbGF5ZXJzY2FwZV9zZnBfcHJvYmUsXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jLTEwMC1cXHQuZHJpdmVyID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTozNS4yNjY3NDI4NDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NjczMDY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUEhZIERldmljZSBQcm9iaW5nIGZvciBTRlBzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgdGhlIHBvaW50IHdoZXJlIHdlJ3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW4gU0ZQIGNhZ2UgaGFuZ2luZyBvZmYgb2YgYSBQSFkgZGV2aWNlLiBTbywgdGhlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIHdoYXQgZG9lcyB0aGUgcHJvYmUgcm91dGluZSBhY3R1YWxseSBkbywgYW5kIHdoYXQgYXJlIHRoZSB0cmlnZ2VycyB0aGF0IGNhdXNlIHRoaXMgcHJvYmU/IExldCdzIHBlZWwgYmFjayB0aGUgbGF5ZXJzIGFuZCBhbmFseXplIHRoaXMgbW9yZSBjbG9zZWx5LiBJIGV4cGVjdCBpdCdsbCBpbnZvbHZlIGNoZWNraW5nIHNvbWUgcmVnaXN0ZXJzIGFuZCB1c2luZyBzb21lIHZlbmRvci1zcGVjaWZpYyBpZGVudGlmaWNhdGlvbiBsb2dpYy4gTGV0J3Mgc2VlIGhvdyBpdCdzIGhhbmRsZWQgaW4gdGhlIHNvdXJjZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjM5LjE0MzQ3NjM1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4MTUzMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3NmcF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzAzLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA1LSAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzUwOD1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTIyLVxcdGlmICghcGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTIzOlxcdFxcdHJldCA9IHBoeV9zZnBfcHJvYmUocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1MjQtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTk6MzkuMjI0Mjk3ODg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDgxNzAyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5emluZyBgcGh5X3NmcF9wcm9iZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB3aGF0IHRoaXMgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uIGlzIGFsbCBhYm91dC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBTRlAvUEhZIGluaXRpYWxpemF0aW9uIGFuZCBkaXNjb3ZlcnkgcHJvY2Vzcy4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIHByb2Jpbmcgb3IgZGV0ZWN0aW5nIHRoZSBwcmVzZW5jZSBhbmQgcGVyaGFwcyB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgcGh5c2ljYWwgbGF5ZXIgKFBIWSkgZGV2aWNlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggYW4gU0ZQIChTbWFsbCBGb3JtLWZhY3RvciBQbHVnZ2FibGUpIG1vZHVsZS4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFyZHdhcmUgZGV0ZWN0aW9uLCBwb3RlbnRpYWxseSB1c2luZyBzcGVjaWZpYyBTRlAgbW9kdWxlIGluZm9ybWF0aW9uIG9yIHNwZWNpZmljIHJlZ2lzdGVyIHJlYWRvdXRzLCB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIFBIWSBpcyBjb25uZWN0ZWQgYW5kIGhvdyBpdCBzaG91bGQgYmUgY29uZmlndXJlZC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGFzcGVjdHMgbGlrZSB0aGUgU0ZQJ3MgcHJlc2VuY2UgZGV0ZWN0aW9uLCBwb3dlciBzZXF1ZW5jaW5nLCBhbmQsIHBvdGVudGlhbGx5LCB0aGUgcmVhZGluZyBvZiBTRlAncyBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlZ2lzdGVycyBpdCdzIGFjY2Vzc2luZywgd2hhdCBJMkMgb3Igb3RoZXIgcHJvdG9jb2xzIGl0IG1heSBiZSB1c2luZywgYW5kIHdoYXQgZGF0YSBpdCdzIGludGVycHJldGluZyB0byBkZXRlcm1pbmUgdGhlIFBIWSdzIGNoYXJhY3RlcmlzdGljcy4gQWxzbywgd2hhdCB0eXBlcyBvZiBQSFlzIGRvZXMgaXQgaGFuZGxlPyBBbnkgc3BlY2lmaWMgdmVuZG9yIGNvbnNpZGVyYXRpb25zPyBMZXQncyBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTo0Ny40MzI0NzA0NzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwNyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNzpcXHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNzA4OlxcdHtcXG4xNzA5OlxcdFxcdHN0cnVjdCBzZnBfYnVzICpidXM7XFxuMTcxMDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XFxuMTcxMzpcXHRcXHRcXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKTtcXG4xNzE0OlxcdFxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4xNzE1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuMTcxNjpcXHRcXG4xNzE3OlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4xNzE4OlxcdFxcbjE3MTk6XFx0XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuMTcyMDpcXHRcXHRcXHRzZnBfYnVzX3B1dChidXMpO1xcbjE3MjE6XFx0XFxuMTcyMjpcXHRcXHRcXHRpZiAocmV0KVxcbjE3MjM6XFx0XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gTlVMTDtcXG4xNzI0OlxcdFxcdH1cXG4xNzI1OlxcdFxcbjE3MjY6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VzZnBfYnVzKVxcbjE3Mjc6XFx0XFx0XFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XFxuMTcyODpcXHRcXG4xNzI5OlxcdFxcdHJldHVybiByZXQ7XFxuMTczMDpcXHR9XFxuMTczMTpcXHRcXG4xNzMyOlxcdHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuMTczMzpcXHR7XFxuMTczNDpcXHRcXHRyZXR1cm4gcGh5ZHJ2LVxcdTAwM2Vjb25maWdfaW50ciBcXHUwMDI2XFx1MDAyNiBwaHlkcnYtXFx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XFxuMTczNTpcXHR9XFxuMTczNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTk6NDcuNDMyNjg2MTA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTcyMjM4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBTRlAgRGV2aWNlIEluc3RhbnRpYXRpb24gZm9yIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBhbiBTRlAgYnVzLCBzcGVjaWZpY2FsbHkgdGhlIGBzZnBfYnVzYCwgZ2V0cyBjcmVhdGVkLiBUaGUgdGV4dCBpbmRpY2F0ZXMgaXQncyB0eXBpY2FsbHkgZG9uZSB0aHJvdWdoIHRoZSBgZndub2RlYCAoZGV2aWNlIHRyZWUgb3IgQUNQSSkgbWVjaGFuaXNtLCBhbmQgdGhlIGBzZnBgIHBsYXRmb3JtIGRyaXZlciBpcyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIHRoZSBgc2ZwX2J1c2AuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgd2hldGhlciB0aGVyZSdzIGEgcmVsaWFibGUgd2F5IHRvIGdldCBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHVwIGFuZCBydW5uaW5nIGluIGEgdGVzdCBlbnZpcm9ubWVudCwgcGFydGljdWxhcmx5IHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHVwLCB3aXRob3V0IHJlc29ydGluZyB0byBjdXN0b20gZGV2aWNlIHRyZWUgb3ZlcmxheXMuXG5cblRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIEkgY2FuIGluaXRpYXRlIHRoaXMgZnJvbSB1c2Vyc3BhY2UsIG9yIGlmIHRoZXJlJ3Mgc29tZSBraW5kIG9mIHByb2dyYW1tYXRpYyB3YXkgdG8gZG8gaXQuXG5cbkdpdmVuIHN5emthbGxlcidzIHJvbGUgaW4gdGhpcywgYW5kIHRoYXQgaXQgZG9lc24ndCBnZW5lcmFsbHkgbGV2ZXJhZ2UgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG15IHRob3VnaHRzIHF1aWNrbHkgdHVybmVkIHRvIHdoZXRoZXIgSSBjb3VsZCBsZXZlcmFnZSBhbnkgZXhpc3Rpbmcgc3l6a2FsbGVyIGZlYXR1cmVzIGxpa2UgdGhlIGBzeXNmc2Agb3IgYGNvbmZpZ2ZzYCBpbnRlcmZhY2VzIGZvciB0aGlzIHB1cnBvc2UuIEJ1dCB0aGVuIEkgcmVjYWxsZWQgdGhhdCBpdCBkb2Vzbid0IHByb3ZpZGUgZ2VuZXJpYyBzdXBwb3J0IGZvciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcywgdW5sZXNzIHRoZXJlJ3MgYSBkcml2ZXIgYWxyZWFkeSBpbiBwbGFjZSB0aGF0IGV4cG9zZXMgc29tZXRoaW5nLiBUaGF0IHdvbid0IGRvIGhlcmUuXG5cblRoZW4sIGEgZmxpY2tlciBvZiBhbiBpZGVhOiB3aGF0IGFib3V0IHRoZSBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGAgZnVuY3Rpb24/IFRoYXQgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIE1heWJlIHRoaXMgaXMgYSByZWxldmFudCBwYXRod2F5LiBJcyBgc2ZwLmNgIGFjdHVhbGx5IHJlYWNoYWJsZT8gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGZvciBhbnkgb3RoZXIgY2FsbGVycyBvZiBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIGluIHRoZSBjb2RlYmFzZS4gVGhhdCBtaWdodCBnaXZlIG1lIGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGlzIHByb2JlIGZ1bmN0aW9uIGdldHMgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciB0cmlnZ2VyaW5nIHRoZSBTRlAgZGV2aWNlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjU0LjE4OTkxMjYxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NjY0NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2kyY19wcm9iZV9yb2xsYmFsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jPTM5Mz1zdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQyMS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM6NDIyOmludCBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNDIzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy00NjQtfVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo0NjU6RVhQT1JUX1NZTUJPTF9HUEwobWRpb19pMmNfcHJvYmVfcm9sbGJhbGwpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy00NjYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MjE5ND1zdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjE0LVxcdFxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjE1OlxcdFxcdGVyciA9IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHNmcC1cXHUwMDNlaTJjKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxNi1cXHRcXHRpZiAoZXJyID09IC1FTk9ERVYpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oPTIxPXN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIyLVxcdFxcdFxcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaDoyMzppbnQgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpO1xcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTo1NS45NzY1NjI1MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxNjAzODA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFNGUCBEZXZpY2UgSW50ZXJhY3Rpb24gd2l0aCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gZ2V0IFN5emthbGxlciB0byBpbnRlcmFjdCB3aXRoIGFuIFNGUCBjYWdlLiBUaGUgb25seSBmdW5jdGlvbiBJIHNlZSBjYWxsaW5nIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAgaXMgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIEl0J3MgY2FsbGVkIGZyb20gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCB3aGljaCBpcyBhIHByb21pc2luZyBsZWFkLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgdGhpcyBzdGF0ZSBtYWNoaW5lIHdpdGggU3l6a2FsbGVyP1xuXG5UaGUgc3RhdGUgbWFjaGluZSBuZWVkcyBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHRvIGV4aXN0LiBDYW4gU3l6a2FsbGVyIGNyZWF0ZSBvbmUgb2YgdGhvc2U/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgdXNpbmcgYC9zeXMvYnVzL3BsYXRmb3JtL2RyaXZlcnNfcHJvYmVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgdGhhdCB3b24ndCB3b3JrIOKAkyBpdCBuZWVkcyBhbiBleGlzdGluZyBkZXZpY2UuIEkgY2hlY2tlZCBpZiBgc3l6X2Rldl9wbGF0Zm9ybV9hZGRgIHdhcyBhdmFpbGFibGUg4oCTIG5vIGx1Y2suIEhtbSwgU3l6a2FsbGVyIGRvZXMgaGF2ZSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgZGV2aWNlcyB2aWEgYG5ldGxpbmtgIGZvciB2aXJ0dWFsIGludGVyZmFjZXMgbGlrZSBgdmV0aGAsIGBtYWN2bGFuYCwgYGR1bW15YCwgYW5kIGB2eGxhbmAuIEJ1dCwgbm9uZSBvZiB0aG9zZSwgZnJvbSB3aGF0IEkga25vdywgaGF2ZSBhbiBTRlAgY2FnZSB0byBzaW11bGF0ZSBvciBpbnRlcmFjdCB3aXRoLiBUaGF0J3MgYSBkZWFkIGVuZC5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLi4uIHdoYXQgYWJvdXQgYG5ldGRldnNpbWA/IERvZXMgYG5ldGRldnNpbWAgaGF2ZSBhbiBTRlAgY2FnZT8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJZiBpdCAqZG9lcyosIHRoZW4gSSBtaWdodCBiZSBhYmxlIHRvIGNyYWZ0IGEgU3l6a2FsbGVyIHRlc3QgY2FzZSB0byBwcm9iZSB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgdGhyb3VnaCBgbmV0ZGV2c2ltYCwgYW5kIHRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgU3l6a2FsbGVyIHRyaWdnZXJzIHRoZXNlIGV2ZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjA6MDEuNjkyNjAzNDk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTY2NjE1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjAxLjc1ODI4MTg2NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk0ODEyMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIGFuZCBTRlAgQ2FnZSBDb21wYXRpYmlsaXR5KipcblxuUmlnaHQsIHNvIEknbSBoaXR0aW5nIGEgcm9hZGJsb2NrLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgb2YgdXNpbmcgYG1hYzgwMjExX2h3c2ltYCBmb3IgdGhpcyBzZXR1cCBqdXN0IHdvbid0IGN1dCBpdC4gSXQncyBub3QgdGhlIHJpZ2h0IGZpdCBmb3IgdGhlIGxldmVsIG9mIGZsZXhpYmlsaXR5IGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBJJ20gbG9va2luZyBmb3IuIExldCdzIG1vdmUgb24uXG5cbk5vdywgdGhlIG5leHQgdHJhaW4gb2YgdGhvdWdodCBpcyB0byBjaGVjayBgdmhjaWAgZm9yIGEgc29sdXRpb24uIFdpdGggYHZoY2lgIEkgY291bGQgdGhlb3JldGljYWxseSBzaW11bGF0ZSBhIFVTQiBkZXZpY2Ugd2hpY2gsIGluIHR1cm4sIHdvdWxkIGNyZWF0ZSB0aGUgbmV0d29ya2luZyBjb25uZWN0aXZpdHkgcmVxdWlyZWQuIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW55IHN1aXRhYmxlIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIGV4aXN0IHRoYXQgYWxzbyBmZWF0dXJlIGFuIFNGUCBjYWdlLiBJJ20gbm90IGZhbWlsaWFyIHdpdGggYW55LCBzbyBJJ2xsIG5lZWQgdG8gcmVzZWFyY2ggdGhhdCBvciBsb29rIGZvciBhbHRlcm5hdGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjA6MDYuMTUzMDk4ODkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTgzMjE2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjA2LjIyMjkzOTA5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzM2Mjk4MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBEZXZpY2UgRnV6emluZyBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuIFRoZSBpbml0aWFsIGFuc3dlciBpcyBcIk5vLFwiIGJ1dCB3YWl0IGEgbWludXRlLi4uIHdoYXQgYWJvdXQgUGVyaXBoZXJhbCBDb21wb25lbnQgSW50ZXJjb25uZWN0IChQQ0kpIGRldmljZXM/IFN5emthbGxlciwgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiwgY2FuIGFic29sdXRlbHkgZnV6eiB0aGVzZSB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAuIFdlIGtub3cgdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG9mIHNldHVwcyB1c2luZyB2aXJ0dWFsIGZ1bmN0aW9uIEkvTyAoYHZmaW9gKSBvciB0aGUgUENJIHBzZXVkby1kZXZpY2UuXG5cblNvLCB0aGUga2V5IHF1ZXN0aW9uIGJlY29tZXM6IGFyZSB0aGVyZSBhbnkgUENJIG5ldHdvcmsgZHJpdmVycyB0aGF0IGhhbmRsZSBTbWFsbCBGb3JtLWZhY3RvciBQbHVnZ2FibGUgKFNGUCkgdHJhbnNjZWl2ZXJzIGFuZCwgY3JpdGljYWxseSwgaW5zdGFudGlhdGUgdGhlbSAqd2l0aG91dCogcmVseWluZyBvbiB0aGUgZGV2aWNlIHRyZWU/IFRoYXQncyB0aGUgYW5nbGUgaGVyZSwgcmlnaHQ/XG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBhbnkgb2YgdGhlc2UgUENJIGRyaXZlcnMsIHNwZWNpZmljYWxseSwgYWN0dWFsbHkgY2FsbCBgc2ZwX3Byb2JlYCBvciBkaXJlY3RseSBjcmVhdGUgYW4gU0ZQIGluc3RhbmNlLiBUaGF0J3MgdGhlIG5leHQgc3RlcCB0byBmaWd1cmUgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDE3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjE1LjU1OTI0MjI4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0OTczNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE2MD1pbnQgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE2OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMTY5OiAqIGl4Z2JlX2lzX3NmcF9wcm9iZSAtIFJldHVybnMgdHJ1ZSBpZiBTRlAgaXMgYmVpbmcgZGV0ZWN0ZWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTcwLSAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzMtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjE3NDpzdGF0aWMgYm9vbCBpeGdiZV9pc19zZnBfcHJvYmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggb2Zmc2V0LCB1OCBhZGRyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE5ND1zdGF0aWMgaW50IGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpY19pbnQoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMjA0LVxcdFxcdG1heF9yZXRyeSA9IDM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjIwNTpcXHRpZiAoaXhnYmVfaXNfc2ZwX3Byb2JlKGh3LCBieXRlX29mZnNldCwgZGV2X2FkZHIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDYtXFx0XFx0bWF4X3JldHJ5ID0gSVhHQkVfU0ZQX0RFVEVDVF9SRVRSSUVTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMDoxNS43MzQyMjI2NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM4NzU1OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipTRlAgQ29uZnVzaW9uIGluIGl4Z2JlIGFuZCBCZXlvbmQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBgaXhnYmVgIGRyaXZlciBhZ2FpbiwgYW5kIHNvbWV0aGluZydzIGp1c3Qgbm90IHF1aXRlIGNsaWNraW5nLiBJIHNlZSBgaXhnYmVgIGhhcyB0aGlzIGBpeGdiZV9pc19zZnBfcHJvYmVgIGZ1bmN0aW9uIOKAkyBjbGVhcmx5IGRlYWxpbmcgd2l0aCBTRlAgbW9kdWxlcywgcmlnaHQ/IEJ1dCB0aGVuIEkgcmVtZW1iZXIsIGl0IGRvZXNuJ3QgYWN0dWFsbHkgKnVzZSogdGhlIGdlbmVyaWMgYHNmcGAgcGxhdGZvcm0gZHJpdmVyLiBJdCdzIGdvdCBpdHMgb3duLCBiZXNwb2tlIFNGUCBsb2dpYyBpbXBsZW1lbnRlZCByaWdodCB3aXRoaW4gdGhlIGBpeGdiZWAgY29kZS4gVGhhdCdzIGEgbGl0dGxl4oCmIHVudXN1YWwsIGZyYW5rbHkuXG5cbldoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdvbmRlcjogd2FpdCBhIG1pbnV0ZSwgZG9lcyAqYW55KiBkcml2ZXIgYWN0dWFsbHkgYm90aGVyIHRvIGluc3RhbnRpYXRlIHRoZSBgc2ZwYCBwbGF0Zm9ybSBkZXZpY2U/IElzIHRoZXJlIGEgdmFsaWQgdXNlIGNhc2U/IEl0IHNlZW1zIGxpa2UgZXZlcnkgZHJpdmVyIHRoYXQgd2FudHMgdG8gZGVhbCB3aXRoIFNGUHMgaXMganVzdCByb2xsaW5nIGl0cyBvd24gc29sdXRpb24uIEknbSBnb2luZyB0byBuZWVkIHRvIGxvb2sgaW50byB0aGlzIGZ1cnRoZXIsIHBlcmhhcHMgZ28gc3BlbHVua2luZyBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBjb25maXJtIHRoaXMuIFNvbWV0aGluZyBzZWVtcyBhbWlzcyB3aXRoIHRoZSBTRlAgaW5mcmFzdHJ1Y3R1cmUsIG9yIHBlcmhhcHMgSSdtIG1pc3NpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg0MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjIwLjI3Mjk4MjgwNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzEzMzAzMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZVxcXFwoXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMDoyMi42MDAxMjM0MzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczODUzOTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBhdWRpZW5jZSBpcyBhbm90aGVyIGV4cGVydDpcblxuKipDb25zaWRlcmluZyBEZXZpY2UgUmVnaXN0cmF0aW9uIGZvciBcInNmcFwiKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBoYW5kbGUgdGhpcyBcInNmcFwiIHNpdHVhdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBpcyBnb2luZyB0byBiZSBkZXZpY2UgcmVnaXN0cmF0aW9uLCBtYWtpbmcgc3VyZSB0aGUgc3lzdGVtIHByb3Blcmx5IHJlY29nbml6ZXMgYW5kIG1hbmFnZXMgaXQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgb3IgYHBsYXRmb3JtX2RldmljZV9hbGxvY2AuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXZpY2U/IFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24uIElmIHNvLCB0aG9zZSBwbGF0Zm9ybSBBUElzIHdvdWxkIGJlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBgcGxhdGZvcm1fZGV2aWNlX2FsbG9jYCB3b3VsZCBnaXZlIG1lIHRoZSBmbGV4aWJpbGl0eSB0byBjb25zdHJ1Y3QgdGhlIGRldmljZSBzdHJ1Y3R1cmUgZXhhY3RseSBhcyBuZWVkZWQsIHdoaWxlIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgIHN0cmVhbWxpbmVzIHRoZSBwcm9jZXNzIGlmIHRoZSBjb3JlIGRldGFpbHMgYXJlIGFscmVhZHkgYXZhaWxhYmxlLiBUaGUgY2hvaWNlIGhpbmdlcyBvbiB0aGUgc3BlY2lmaWNzLCBidXQgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBoYXJkd2FyZSBkb2N1bWVudGF0aW9uIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgc3RhbmRhcmQgcGxhdGZvcm0gZGV2aWNlIG9yIHNvbWV0aGluZyBtb3JlIGN1c3RvbS4gVGhpcyB3aWxsIGd1aWRlIHdoZXRoZXIgSSBuZWVkIGZpbmUtZ3JhaW5lZCBjb250cm9sIG9yIGEgc2ltcGxlciByZWdpc3RyYXRpb24gbWV0aG9kLiBMZXQncyBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgd2lyZWQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjA6MjkuMzM4NjY1OTc0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NjM2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYz0xNjY2PXN0YXRpYyB2b2lkIHhnZW5lX2VuZXRfZ3Bpb2RfZ2V0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0xNjc4LVxcdGlmIChJU19FUlIocGRhdGEtXFx1MDAzZXNmcF9yZHkpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYzoxNjc5OlxcdFxcdHBkYXRhLVxcdTAwM2VzZnBfcmR5ID0gZ3Bpb2RfZ2V0KGRldiwgXFxcInNmcFxcXCIsIEdQSU9EX0lOKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMtMTY4MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jPTQ2Nj1zdGF0aWMgaW50IHhnZW5lX2VuZXRfZ3Bpb19sb29rdXAoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYy00NzEtXFx0aWYgKElTX0VSUihwZGF0YS1cXHUwMDNlc2ZwX3JkeSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYzo0NzI6XFx0XFx0cGRhdGEtXFx1MDAzZXNmcF9yZHkgPSBncGlvZF9nZXQoZGV2LCBcXFwic2ZwXFxcIiwgR1BJT0RfSU4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmMtNDczLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXFx0bm9kZXMtXFx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXFxcIm1hbmFnZWRcXFwiLCBcXFwiaW4tYmFuZC1zdGF0dXNcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjc3OlxcdG5vZGVzLVxcdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJzZnBcXFwiLCBub2Rlcy1cXHUwMDNlc2ZwX3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03OC1cXHRzd25vZGVzW1NXTk9ERV9QSFlMSU5LXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cXHUwMDNlcGh5bGlua19wcm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTItXFx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cXHUwMDNlbm9kZXMuZ3JvdXBbU1dOT0RFX1NGUF0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTEzOlxcdGluZm8ubmFtZSA9IFxcXCJzZnBcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVxcdGluZm8uaWQgPSBwY2lfZGV2X2lkKHBkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMDoyOS40NTk2MzU2MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwMDI2Njc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB0eGdiZSBQSFkgRHJpdmVyKipcblxuQWxyaWdodCwgbXkgaW50ZXJuYWwgcmFkYXIganVzdCBwaW5nZWQg4oCTIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuY2AgZmlsZS4uLiBhaGEhIEl0J3MgcmVnaXN0ZXJpbmcgYW4gU0ZQIHBsYXRmb3JtIGRldmljZSwgYSBrZXkgcGFydCBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2Ugc2V0dXAuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHpvb20gaW4gb24gYHR4Z2JlX3NmcF9yZWdpc3RlcmAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgU0ZQIG1vZHVsZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgaW5pdGlhbCBwcm9iaW5nLCBkZXRlY3Rpb24sIGFuZCBwb3NzaWJseSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFNGUC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0IGRldGVybWluZXMgdGhlIFNGUCdzIHR5cGUsIHdoYXQga2luZCBvZiBJMkMgYnVzIGNvbmZpZ3VyYXRpb24gaXQgc2V0cyB1cCwgYW5kIGFueSBwb3dlciBtYW5hZ2VtZW50IHByb2NlZHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIHRvIGEgc3RhYmxlIGFuZCBjb3JyZWN0IGxpbmsuIEknbGwgYmUgZHJpbGxpbmcgZG93biB0byBleGFtaW5lIHRoZSByZWdpc3RlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQSFkgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMzksIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMDozOC4zNTk5MDUxODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDU6XFx0c3RhdGljIGludCB0eGdiZV9zZnBfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4gNTA2OlxcdHtcXG4gNTA3OlxcdFxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHhnYmUtXFx1MDAzZXd4LVxcdTAwM2VwZGV2O1xcbiA1MDg6XFx0XFx0c3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGluZm8gPSB7fTtcXG4gNTA5OlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNmcF9kZXY7XFxuIDUxMDpcXHRcXG4gNTExOlxcdFxcdGluZm8ucGFyZW50ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNTEyOlxcdFxcdGluZm8uZndub2RlID0gc29mdHdhcmVfbm9kZV9md25vZGUodHhnYmUtXFx1MDAzZW5vZGVzLmdyb3VwW1NXTk9ERV9TRlBdKTtcXG4gNTEzOlxcdFxcdGluZm8ubmFtZSA9IFxcXCJzZnBcXFwiO1xcbiA1MTQ6XFx0XFx0aW5mby5pZCA9IHBjaV9kZXZfaWQocGRldik7XFxuIDUxNTpcXHRcXHRzZnBfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoXFx1MDAyNmluZm8pO1xcbiA1MTY6XFx0XFx0aWYgKElTX0VSUihzZnBfZGV2KSlcXG4gNTE3OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNmcF9kZXYpO1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHR0eGdiZS1cXHUwMDNlc2ZwX2RldiA9IHNmcF9kZXY7XFxuIDUyMDpcXHRcXG4gNTIxOlxcdFxcdHJldHVybiAwO1xcbiA1MjI6XFx0fVxcbiA1MjM6XFx0XFxuIDUyNDpcXHRzdGF0aWMgaW50IHR4Z2JlX2V4dF9waHlfaW5pdChzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbiA1MjU6XFx0e1xcbiA1MjY6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4gNTI3OlxcdFxcdHN0cnVjdCBtaWlfYnVzICptaWlfYnVzO1xcbiA1Mjg6XFx0XFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XFxuIDUyOTpcXHRcXHRzdHJ1Y3Qgd3ggKnd4O1xcbiA1MzA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDUzMTpcXHRcXG4gNTMyOlxcdFxcdHd4ID0gdHhnYmUtXFx1MDAzZXd4O1xcbiA1MzM6XFx0XFx0cGRldiA9IHd4LVxcdTAwM2VwZGV2O1xcbiA1MzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjM4LjM1OTk5MTQ3NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ3OTkxODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFdhbmd4dW4gMTBHYkUgTklDIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdHhnYmVgIGRyaXZlciDigJMgdGhhdCdzIHRoZSBXYW5neHVuIDEwR2JFIFBDSSBFeHByZXNzIE5JQywgcmlnaHQ/IEknbSB3b25kZXJpbmcgaWYgd2UgY2FuIGFjdHVhbGx5IGdldCBTeXprYWxsZXIgdG8gZnV6eiBpdC4gVGhlIG9idmlvdXMgcm91dGUgaXMgdGhyb3VnaCBQQ0kgZnV6emluZywgd2hpY2ggaXMgZW5hYmxlZC4gQnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25uZWN0aW9uIHBvaW50cy5cblxuVGhlIGtleSBzZWVtcyB0byBiZSB0aGF0IGB0eGdiZWAgcmVnaXN0ZXJzIGFuIFNGUCBwbGF0Zm9ybSBkZXZpY2UuIEludGVyZXN0aW5nLiBEb2VzIGl0ICp1c2UqIFNGUD8gWWVzLCBpdCBkb2VzLCBpdCdzIGNhbGxlZCBcInNmcFwiLlxuXG5BaCwgcmlnaHQsIHRoZSBgc2ZwYCBkcml2ZXIgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgaXMgdGhlIG9uZSB0aGF0J3MgZ29pbmcgdG8gcHJvYmUgZm9yIHBsYXRmb3JtIGRldmljZXMgd2l0aCB0aGF0IG5hbWUuIFNvLCBpZiBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHRoYXQgbWF0Y2hlcyBgdHhnYmVgLCB0aGUgYHR4Z2JlYCBkcml2ZXIgd2lsbCBwcm9iZSBhcyBpdCBzaG91bGQuIFRoZW4sIGJlY2F1c2Ugb2YgaG93IHRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyZWQsIGl0IHdpbGwgY2FsbCBgdHhnYmVfc2ZwX3JlZ2lzdGVyYCwgd2hpY2ggY3JlYXRlcyB0aGlzIFwic2ZwXCIgcGxhdGZvcm0gZGV2aWNlLiBBdCB0aGlzIHBvaW50LCB0aGUgYHNmcGAgZHJpdmVyIHNob3VsZCBwcm9iZSFcblxuT2theSwgdGhhdCdzIGEgcHJvbWlzaW5nIHBhdGguIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIHRoZSBgc2ZwYCBkcml2ZXIgZGVwZW5kIG9uIGFueSBzcGVjaWZpYyBHUElPcyBvciBJMkMgYnVzZXMgYmVpbmcgcHJlc2VudD8gSWYgaXQgZG9lcywgdGhlbiBTeXprYWxsZXIgd291bGQgbmVlZCB0byBiZSBjb25maWd1cmVkIHRvIGVtdWxhdGUgdGhvc2UgYXMgd2VsbCB0byBoYXZlIGFueSBzdWNjZXNzLiBMZXQgbWUgZ28gY2hlY2sgdGhhdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjQ0LjYwNzk4NjE5NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyODMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyODM6XFx0c3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4zMjg0OlxcdHtcXG4zMjg1OlxcdFxcdGNvbnN0IHN0cnVjdCBzZmZfZGF0YSAqc2ZmO1xcbjMyODY6XFx0XFx0Y2hhciAqc2ZwX2lycV9uYW1lO1xcbjMyODc6XFx0XFx0c3RydWN0IHNmcCAqc2ZwO1xcbjMyODg6XFx0XFx0aW50IGVyciwgaTtcXG4zMjg5OlxcdFxcbjMyOTA6XFx0XFx0c2ZwID0gc2ZwX2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbjMyOTE6XFx0XFx0aWYgKElTX0VSUihzZnApKVxcbjMyOTI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc2ZwKTtcXG4zMjkzOlxcdFxcbjMyOTQ6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2ZwKTtcXG4zMjk1OlxcdFxcbjMyOTY6XFx0XFx0ZXJyID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHNmcC1cXHUwMDNlZGV2LCBzZnBfY2xlYW51cCwgc2ZwKTtcXG4zMjk3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjMyOTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMjk5OlxcdFxcbjMzMDA6XFx0XFx0c2ZmID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHNmcC1cXHUwMDNlZGV2KTtcXG4zMzAxOlxcdFxcdGlmICghc2ZmKVxcbjMzMDI6XFx0XFx0XFx0c2ZmID0gXFx1MDAyNnNmcF9kYXRhO1xcbjMzMDM6XFx0XFxuMzMwNDpcXHRcXHRzZnAtXFx1MDAzZXR5cGUgPSBzZmY7XFxuMzMwNTpcXHRcXG4zMzA2OlxcdFxcdGVyciA9IHNmcF9pMmNfZ2V0KHNmcCk7XFxuMzMwNzpcXHRcXHRpZiAoZXJyKVxcbjMzMDg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMzA5OlxcdFxcbjMzMTA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEdQSU9fTUFYOyBpKyspXFxuMzMxMTpcXHRcXHRcXHRpZiAoc2ZmLVxcdTAwM2VncGlvcyBcXHUwMDI2IEJJVChpKSkge1xcbjMzMTI6XFx0XFx0XFx0XFx0c2ZwLVxcdTAwM2VncGlvW2ldID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoc2ZwLVxcdTAwM2VkZXYsXFxuMzMxMzpcXHRcXHRcXHRcXHRcXHRcXHQgICBncGlvX25hbWVzW2ldLCBncGlvX2ZsYWdzW2ldKTtcXG4zMzE0OlxcdFxcdFxcdFxcdGlmIChJU19FUlIoc2ZwLVxcdTAwM2VncGlvW2ldKSlcXG4zMzE1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNmcC1cXHUwMDNlZ3Bpb1tpXSk7XFxuMzMxNjpcXHRcXHRcXHR9XFxuMzMxNzpcXHRcXG4zMzE4OlxcdFxcdHNmcC1cXHUwMDNlc3RhdGVfaHdfbWFzayA9IFNGUF9GX1BSRVNFTlQ7XFxuMzMxOTpcXHRcXHRzZnAtXFx1MDAzZXN0YXRlX2h3X2RyaXZlID0gU0ZQX0ZfVFhfRElTQUJMRTtcXG4zMzIwOlxcdFxcbjMzMjE6XFx0XFx0c2ZwLVxcdTAwM2VnZXRfc3RhdGUgPSBzZnBfZ3Bpb19nZXRfc3RhdGU7XFxuMzMyMjpcXHRcXHRzZnAtXFx1MDAzZXNldF9zdGF0ZSA9IHNmcF9ncGlvX3NldF9zdGF0ZTtcXG4zMzIzOlxcdFxcbjMzMjQ6XFx0XFx0LyogQW4gU0ZQIGNhZ2Ugd2l0aCBubyBNT0RfREVGMCBHUElPIGhhcyBubyBoYXJkd2FyZSBwcmVzZW5jZSBzaWduYWwuXFxuMzMyNTpcXHRcXHQgKiBBc3N1bWluZyB0aGUgbW9kdWxlIGlzIGFsd2F5cyBwcmVzZW50IHRyYXBzIGFuIGVtcHR5IGNhZ2UgaW5cXG4zMzI2OlxcdFxcdCAqIE1PRF9FUlJPUiBhbmQgbmV2ZXIgZGV0ZWN0cyBob3QtaW5zZXJ0aW9uLCBzbyBkZXJpdmUgcHJlc2VuY2UgZnJvbSBhXFxuMzMyNzpcXHRcXHQgKiB0aHJvdHRsZWQgSTJDIHByb2JlIGFuZCBwb2xsIGZvciBjaGFuZ2VzIGluc3RlYWQuIHNmcF9pMmNfY29uZmlndXJlKClcXG4zMzI4OlxcdFxcdCAqIGhhcyBhbHJlYWR5IHNldCBpMmNfbWF4X2Jsb2NrX3NpemU7IHNlZWQgaTJjX2Jsb2NrX3NpemUgc28gdGhlXFxuMzMyOTpcXHRcXHQgKiBwcmVzZW5jZSByZWFkIGRvZXMgbm90IGlzc3VlIGEgemVyby1sZW5ndGggdHJhbnNmZXIgYmVmb3JlIHRoZSBmaXJzdFxcbjMzMzA6XFx0XFx0ICogRUVQUk9NIHJlYWQuIFNlZWQgaTJjX3ByZXNlbnRfbmV4dCB0byBqaWZmaWVzIHNvIHRoZSBmaXJzdCBwcm9iZVxcbjMzMzE6XFx0XFx0ICogaGFwcGVucyBpbW1lZGlhdGVseSAoYSB6ZXJvIHZhbHVlIHdvdWxkIGJlIGluIHRoZSBwYXN0IHJlbGF0aXZlIHRvXFxuMzMzMjpcXHRcXHQgKiB0aGUgbmVnYXRpdmUgSU5JVElBTF9KSUZGSUVTIGF0IGJvb3QgYW5kIGRlbGF5IGRldGVjdGlvbikuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjQ0LjYwODE1NDczNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDg4MzM5OTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBJMkMgQWRhcHRlciBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBgc2ZwX2kyY19nZXRgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZ2V0dGluZyB0aGUgSTJDIGFkYXB0ZXIuIFRoZSBjb3JlIG9mIGFueSBkcml2ZXIgaW50ZXJhY3Rpb24gd2l0aCBJMkMgaGluZ2VzIG9uIHRoaXMsIHNvIGl0J3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBkaWcgaW50byBob3cgYHNmcF9pMmNfZ2V0YCBhY3R1YWxseSBhY2NvbXBsaXNoZXMgdGhpcy4gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgbG9va3VwIGJhc2VkIG9uIGEgcHJlZGVmaW5lZCBhZGRyZXNzLCBvciBpcyB0aGVyZSBhIG1vcmUgc29waGlzdGljYXRlZCBkaXNjb3ZlcnkgbWVjaGFuaXNtIGF0IHBsYXk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBhcmUgZXhwbGljaXRseSBoYW5kbGVkLCBhbmQgaWYgc28sIGhvdz8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnMgdGhpcyBmdW5jdGlvbiBtYWtlcyBhYm91dCB0aGUgaGFyZHdhcmUgYW5kIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmU/IEkgd2FudCB0byBrbm93IGlmIGl0J3MgdGhyZWFkLXNhZmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBVbHRpbWF0ZWx5LCBteSBhbmFseXNpcyB3aWxsIGZvY3VzIG9uIGFuc3dlcmluZyBob3cgdGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHRvIHJldHJpZXZlIHRoZSBJMkMgYWRhcHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjU5LjQ5MTU1NzA4OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNTcsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNTc6XFx0c3RhdGljIGludCBzZnBfaTJjX2dldChzdHJ1Y3Qgc2ZwICpzZnApXFxuMzI1ODpcXHR7XFxuMzI1OTpcXHRcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqaDtcXG4zMjYwOlxcdFxcdHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjO1xcbjMyNjE6XFx0XFx0aW50IGVycjtcXG4zMjYyOlxcdFxcbjMyNjM6XFx0XFx0aCA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZfZndub2RlKHNmcC1cXHUwMDNlZGV2KSwgXFxcImkyYy1idXNcXFwiLCAwKTtcXG4zMjY0OlxcdFxcdGlmIChJU19FUlIoaCkpIHtcXG4zMjY1OlxcdFxcdFxcdGRldl9lcnIoc2ZwLVxcdTAwM2VkZXYsIFxcXCJtaXNzaW5nICdpMmMtYnVzJyBwcm9wZXJ0eVxcXFxuXFxcIik7XFxuMzI2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4zMjY3OlxcdFxcdH1cXG4zMjY4OlxcdFxcbjMyNjk6XFx0XFx0aTJjID0gaTJjX2dldF9hZGFwdGVyX2J5X2Z3bm9kZShoKTtcXG4zMjcwOlxcdFxcdGlmICghaTJjKSB7XFxuMzI3MTpcXHRcXHRcXHRlcnIgPSAtRVBST0JFX0RFRkVSO1xcbjMyNzI6XFx0XFx0XFx0Z290byBwdXQ7XFxuMzI3MzpcXHRcXHR9XFxuMzI3NDpcXHRcXG4zMjc1OlxcdFxcdGVyciA9IHNmcF9pMmNfY29uZmlndXJlKHNmcCwgaTJjKTtcXG4zMjc2OlxcdFxcdGlmIChlcnIpXFxuMzI3NzpcXHRcXHRcXHRpMmNfcHV0X2FkYXB0ZXIoaTJjKTtcXG4zMjc4OlxcdHB1dDpcXG4zMjc5OlxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KGgpO1xcbjMyODA6XFx0XFx0cmV0dXJuIGVycjtcXG4zMjgxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjA6NTkuNDkxNzY3MjU4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NjA5MDk2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYW50aWNpcGF0aW5nIHdoYXQgYSBrbm93bGVkZ2VhYmxlIHVzZXIgd291bGQgYmUgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIEkyQyBCdXMgUmVxdWlyZW1lbnRzIGZvciBUaGlzIERldmljZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlIGFuZCB0aGUgZndub2RlIHN0cnVjdHVyZS4gSXQncyBjbGVhciB0aGF0IGl0IHJlcXVpcmVzIGFuIGBpMmMtYnVzYCBwcm9wZXJ0eS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgb2YgY291cnNlLCBpcyB3aGV0aGVyIHRoZSBgdHhnYmVgIGRyaXZlciBhY3R1YWxseSBwcm92aWRlcyB0aGlzIHByb3BlcnR5IGluIGl0cyBmd25vZGUgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGdvIGFuZCBjaGVjayB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlIGFuZCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgdHhnYmVgIGlzIGNvcnJlY3RseSBwb3B1bGF0aW5nIHRoYXQgYGkyYy1idXNgIHByb3BlcnR5LCBhbmQgaWYgbm90LCB3aHkuIEFyZSB0aGVyZSBhbnkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSB0aGF0IGFyZW4ndCBiZWluZyBleHBsaWNpdGx5IHN0YXRlZD8gQXJlIHRoZXJlIGFueSBkb3duc3RyZWFtIGRlcGVuZGVuY2llcyByZWx5aW5nIG9uIHRoaXM/IEkgbmVlZCB0byBiZSBzdXJlIHRoZSBoYXJkd2FyZSBpcyBiZWluZyBjb25maWd1cmVkIHByb3Blcmx5LiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvcnJlY3QgY29tbXVuaWNhdGlvbiB3aXRoIGFueSBJMkMtY29ubmVjdGVkIHBlcmlwaGVyYWxzIG9uIHRoaXMgYm9hcmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBnb2luZyB0byBjYXVzZSBhbnkgc2lsZW50IGVycm9ycyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTExMiwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MDkuMDUyNjgwMTg1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI3OlxcdHN0YXRpYyBpbnQgdHhnYmVfc3dub2Rlc19yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0c3RydWN0IHR4Z2JlX25vZGVzICpub2RlcyA9IFxcdTAwMjZ0eGdiZS1cXHUwMDNlbm9kZXM7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHR4Z2JlLVxcdTAwM2V3eC1cXHUwMDNlcGRldjtcXG4gIDMxOlxcdFxcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlICpzd25vZGVzO1xcbiAgMzI6XFx0XFx0dTMyIGlkO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRpZCA9IHBjaV9kZXZfaWQocGRldik7XFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdHNucHJpbnRmKG5vZGVzLVxcdTAwM2VncGlvX25hbWUsIHNpemVvZihub2Rlcy1cXHUwMDNlZ3Bpb19uYW1lKSwgXFxcInR4Z2JlX2dwaW8tJXhcXFwiLCBpZCk7XFxuICAzNzpcXHRcXHRzbnByaW50Zihub2Rlcy1cXHUwMDNlaTJjX25hbWUsIHNpemVvZihub2Rlcy1cXHUwMDNlaTJjX25hbWUpLCBcXFwidHhnYmVfaTJjLSV4XFxcIiwgaWQpO1xcbiAgMzg6XFx0XFx0c25wcmludGYobm9kZXMtXFx1MDAzZXNmcF9uYW1lLCBzaXplb2Yobm9kZXMtXFx1MDAzZXNmcF9uYW1lKSwgXFxcInR4Z2JlX3NmcC0leFxcXCIsIGlkKTtcXG4gIDM5OlxcdFxcdHNucHJpbnRmKG5vZGVzLVxcdTAwM2VwaHlsaW5rX25hbWUsIHNpemVvZihub2Rlcy1cXHUwMDNlcGh5bGlua19uYW1lKSwgXFxcInR4Z2JlX3BoeWxpbmstJXhcXFwiLCBpZCk7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdHN3bm9kZXMgPSBub2Rlcy1cXHUwMDNlc3dub2RlcztcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0LyogR1BJTyAwOiB0eCBmYXVsdFxcbiAgNDQ6XFx0XFx0ICogR1BJTyAxOiB0eCBkaXNhYmxlXFxuICA0NTpcXHRcXHQgKiBHUElPIDI6IHNmcCBtb2R1bGUgYWJzZW50XFxuICA0NjpcXHRcXHQgKiBHUElPIDM6IHJ4IHNpZ25hbCBsb3N0XFxuICA0NzpcXHRcXHQgKiBHUElPIDQ6IHJhdGUgc2VsZWN0LCAxRygwKSAxMEcoMSlcXG4gIDQ4OlxcdFxcdCAqIEdQSU8gNTogcmF0ZSBzZWxlY3QsIDFHKDApIDEwRygxKVxcbiAgNDk6XFx0XFx0ICovXFxuICA1MDpcXHRcXHRub2Rlcy1cXHUwMDNlZ3Bpb19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcXFwicGluY3RybC1uYW1lc1xcXCIsIFxcXCJkZWZhdWx0XFxcIik7XFxuICA1MTpcXHRcXHRzd25vZGVzW1NXTk9ERV9HUElPXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlZ3Bpb19uYW1lLCBub2Rlcy1cXHUwMDNlZ3Bpb19wcm9wcyk7XFxuICA1MjpcXHRcXHRub2Rlcy1cXHUwMDNlZ3BpbzBfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAwLCBHUElPX0FDVElWRV9ISUdIKTtcXG4gIDUzOlxcdFxcdG5vZGVzLVxcdTAwM2VncGlvMV9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDEsIEdQSU9fQUNUSVZFX0hJR0gpO1xcbiAgNTQ6XFx0XFx0bm9kZXMtXFx1MDAzZWdwaW8yX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFxcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMiwgR1BJT19BQ1RJVkVfTE9XKTtcXG4gIDU1OlxcdFxcdG5vZGVzLVxcdTAwM2VncGlvM19yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDMsIEdQSU9fQUNUSVZFX0hJR0gpO1xcbiAgNTY6XFx0XFx0bm9kZXMtXFx1MDAzZWdwaW80X3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFxcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgNCwgR1BJT19BQ1RJVkVfSElHSCk7XFxuICA1NzpcXHRcXHRub2Rlcy1cXHUwMDNlZ3BpbzVfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCA1LCBHUElPX0FDVElWRV9ISUdIKTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0bm9kZXMtXFx1MDAzZWkyY19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcXFwiY29tcGF0aWJsZVxcXCIsIFxcXCJzbnBzLGRlc2lnbndhcmUtaTJjXFxcIik7XFxuICA2MDpcXHRcXHRub2Rlcy1cXHUwMDNlaTJjX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfQk9PTChcXFwid3gsaTJjLXNucHMtbW9kZWxcXFwiKTtcXG4gIDYxOlxcdFxcdG5vZGVzLVxcdTAwM2VpMmNfcHJvcHNbMl0gPSBQUk9QRVJUWV9FTlRSWV9VMzIoXFxcImNsb2NrLWZyZXF1ZW5jeVxcXCIsIEkyQ19NQVhfU1RBTkRBUkRfTU9ERV9GUkVRKTtcXG4gIDYyOlxcdFxcdHN3bm9kZXNbU1dOT0RFX0kyQ10gPSBOT0RFX1BST1Aobm9kZXMtXFx1MDAzZWkyY19uYW1lLCBub2Rlcy1cXHUwMDNlaTJjX3Byb3BzKTtcXG4gIDYzOlxcdFxcdG5vZGVzLVxcdTAwM2VpMmNfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0kyQ10pO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzBdID0gUFJPUEVSVFlfRU5UUllfU1RSSU5HKFxcXCJjb21wYXRpYmxlXFxcIiwgXFxcInNmZixzZnBcXFwiKTtcXG4gIDY2OlxcdFxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbMV0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcImkyYy1idXNcXFwiLCBub2Rlcy1cXHUwMDNlaTJjX3JlZik7XFxuICA2NzpcXHRcXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzJdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJ0eC1mYXVsdC1ncGlvc1xcXCIsIG5vZGVzLVxcdTAwM2VncGlvMF9yZWYpO1xcbiAgNjg6XFx0XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1szXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwidHgtZGlzYWJsZS1ncGlvc1xcXCIsIG5vZGVzLVxcdTAwM2VncGlvMV9yZWYpO1xcbiAgNjk6XFx0XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1s0XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwibW9kLWRlZjAtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzJfcmVmKTtcXG4gIDcwOlxcdFxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbNV0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcImxvcy1ncGlvc1xcXCIsIG5vZGVzLVxcdTAwM2VncGlvM19yZWYpO1xcbiAgNzE6XFx0XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1s2XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwicmF0ZS1zZWxlY3QxLWdwaW9zXFxcIiwgbm9kZXMtXFx1MDAzZWdwaW80X3JlZik7XFxuICA3MjpcXHRcXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzddID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJyYXRlLXNlbGVjdDAtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzVfcmVmKTtcXG4gIDczOlxcdFxcdHN3bm9kZXNbU1dOT0RFX1NGUF0gPSBOT0RFX1BST1Aobm9kZXMtXFx1MDAzZXNmcF9uYW1lLCBub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzKTtcXG4gIDc0OlxcdFxcdG5vZGVzLVxcdTAwM2VzZnBfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX1NGUF0pO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRub2Rlcy1cXHUwMDNlcGh5bGlua19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcXFwibWFuYWdlZFxcXCIsIFxcXCJpbi1iYW5kLXN0YXR1c1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMTowOS4wNTI3ODcyNDVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYwNDIzMDU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBTRlAgU3RhdGUgTWFjaGluZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUsIGFuZCB0aGUgcGF0aCBzZWVtcyB0byBnbyB0aHJvdWdoIHRoZSBgdHhnYmVgIGRyaXZlci4gSSBrbm93IHRoYXQgYHR4Z2JlYCBwcm92aWRlcyB0aGUgYGkyYy1idXNgIHByb3BlcnR5LCB3aGljaCBpcyBrZXkuIFRoZSBpZGVhIGlzIHRoaXM6IGlmIHN5emthbGxlciBjYW4gY3JlYXRlIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHRoYXQgbG9va3MgbGlrZSBhIGB0eGdiZWAgZGV2aWNlLCB0aGUgYHR4Z2JlYCBkcml2ZXIgc2hvdWxkIHByb2JlLCBhbmQgaW4gdHVybiwgcmVnaXN0ZXIgdGhlIGBzZnBgIHBsYXRmb3JtIGRldmljZS4gVGhlbiwgdGhlIGBzZnBgIGRyaXZlciB3aWxsIHByb2JlLCBhbmQgYm9vbSwgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGtpY2tzIG9mZi5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGB0eGdiZWAgaXMgZXZlbiByZWFjaGFibGUgaW4gdGhlIHN5emthbGxlciBlbnZpcm9ubWVudC4gVGhhbmtmdWxseSwgYHN5el9wY2lfZGV2aWNlX2FkZGAgbG9va3MgbGlrZSBpdCBjYW4gY3JlYXRlIGEgdmlydHVhbCBQQ0kgZGV2aWNlLiBOb3cgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgYHR4Z2JlYCBldmVuICpzdXBwb3J0KiB2aXJ0dWFsIFBDSSBkZXZpY2VzPyBBaCwgeWVzISBTaW5jZSBgdHhnYmVgIGlzIGEgc3RhbmRhcmQgUENJIGRyaXZlciwgSSBjYW4gdXNlIGB2ZmlvYCBvciBgcGNpYCBwc2V1ZG8tZGV2aWNlcyB0byBmdXp6IGl0LlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGEgbnVhbmNlIGhlcmUuIGB0eGdiZWAgYWN0dWFsbHkgdXNlcyBgc25wcyxkZXNpZ253YXJlLWkyY2AgZm9yIGl0cyBJMkMgaW50ZXJmYWNlLiBTbywgdGhlIGBpMmMtZGVzaWdud2FyZWAgZHJpdmVyIHdpbGwgY3JlYXRlIHRoZSBJMkMgYWRhcHRlci4gVGhlIGNvcmUgb2YgdGhlIGZ1enppbmcgdGhlbiBzaGlmdHMgdG8gdGhpcyBJMkMgYWRhcHRlci4gSWYgdGhlIFBDSSBkZXZpY2UgaXMgdmlydHVhbCwgYWxsIHRoZSBNTUlPIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIEkyQyBjb250cm9sbGVyIGFyZSBmdXp6ZWQuIFRoYXQgbWVhbnMgdGhlIGBzZnBgIGRyaXZlciBpcyBnb2luZyB0byBpc3N1ZSB0aGUgSTJDIHJlYWRzIGFuZCB3cml0ZXMsIGFuZCB0aG9zZSB3aWxsIGJlIHRyYW5zbGF0ZWQgaW50byBNTUlPIHJlYWRzL3dyaXRlcyBvbiB0aGUgdmlydHVhbCBQQ0kgZGV2aWNlLiBTeXprYWxsZXIgd2lsbCB0aGVuIGludGVyY2VwdCBhbmQgcmV0dXJuIGZ1enplZCBkYXRhLiBQZXJmZWN0ISBUaGF0IG1lYW5zIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBpcyBmdXp6ZWQhXG5cbkFscmlnaHQsIGl0IGZlZWxzIGxpa2UgdGhpcyBpcyB0aGUgbWFpbiByb3V0ZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkaXJlY3Qgd2F5cyB0byByZWFjaCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIG90aGVyIHRoYW4gZ29pbmcgdGhyb3VnaCBgdHhnYmVgLiBDYW4gc3l6a2FsbGVyIGp1c3QgZGlyZWN0bHkgY3JlYXRlIGFuIEkyQyBkZXZpY2U/IE5vLCB0aGF0IHdvbid0IHdvcmssIGJlY2F1c2UgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBpcyBpbiBgc2ZwLmNgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBgc2ZwYCBwbGF0Zm9ybSBkcml2ZXIuIFNvLCBpcyB0aGVyZSBhbnkgb3RoZXIgZHJpdmVyIG90aGVyIHRoYW4gYHR4Z2JlYCB3aGljaCByZWdpc3RlcnMgYHNmcGA/IFRoYXQgc2VlbXMgdW5saWtlbHksIGJ1dCBpdCdzIHdvcnRoIGEgcXVpY2sgY2hlY2ssIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MTYuNjU3MDIwNzkyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk5NzAwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYz0xNjY2PXN0YXRpYyB2b2lkIHhnZW5lX2VuZXRfZ3Bpb2RfZ2V0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0xNjc4LVxcdGlmIChJU19FUlIocGRhdGEtXFx1MDAzZXNmcF9yZHkpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYzoxNjc5OlxcdFxcdHBkYXRhLVxcdTAwM2VzZnBfcmR5ID0gZ3Bpb2RfZ2V0KGRldiwgXFxcInNmcFxcXCIsIEdQSU9EX0lOKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMtMTY4MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jPTQ2Nj1zdGF0aWMgaW50IHhnZW5lX2VuZXRfZ3Bpb19sb29rdXAoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYy00NzEtXFx0aWYgKElTX0VSUihwZGF0YS1cXHUwMDNlc2ZwX3JkeSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYzo0NzI6XFx0XFx0cGRhdGEtXFx1MDAzZXNmcF9yZHkgPSBncGlvZF9nZXQoZGV2LCBcXFwic2ZwXFxcIiwgR1BJT0RfSU4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmMtNDczLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXFx0bm9kZXMtXFx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXFxcIm1hbmFnZWRcXFwiLCBcXFwiaW4tYmFuZC1zdGF0dXNcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjc3OlxcdG5vZGVzLVxcdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJzZnBcXFwiLCBub2Rlcy1cXHUwMDNlc2ZwX3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03OC1cXHRzd25vZGVzW1NXTk9ERV9QSFlMSU5LXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cXHUwMDNlcGh5bGlua19wcm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTItXFx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cXHUwMDNlbm9kZXMuZ3JvdXBbU1dOT0RFX1NGUF0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTEzOlxcdGluZm8ubmFtZSA9IFxcXCJzZnBcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVxcdGluZm8uaWQgPSBwY2lfZGV2X2lkKHBkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMToxNi44NzcwMDIyMTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMDMyOTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodHMgYXMgdGhlIFwiSVwiIG9mIGFuIGV4cGVydCwgc3RhcnRpbmcgd2l0aCB0aGUgcHJvbXB0OlxuXG4qKkNvbnNpZGVyaW5nIGBuZ2JlYCoqXG5cbkhtbSwgYG5nYmVgLi4uIHRoYXQncyBhbiBpbnRlcmVzdGluZyBvbmUuIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBKdXN0IHRoZSByYXcgdGVybSwgYG5nYmVgLCBpcyBwcmV0dHkgYWJzdHJhY3QsIHNvIEkgaW1tZWRpYXRlbHkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHBsYWNlIHRoaXMuIElzIHRoaXMgYSBuZXcgbWV0aG9kIEknbSB1bmZhbWlsaWFyIHdpdGgsIG9yIGEgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgcGllY2Ugb2YgY29kZT8gSXMgdGhpcyByZWxhdGVkIHRvIG15IGN1cnJlbnQgcHJvamVjdCwgb3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgb3J0aG9nb25hbD8gR2l2ZW4gdGhhdCBpdCBjb3VsZCBtZWFuIGFueXRoaW5nLCBteSBmaXJzdCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gY29uc2lkZXIgYSBwb3NzaWJsZSBvcmlnaW4sIGEgcG90ZW50aWFsIHVzZSBjYXNlLCBhbmQgYSBzZXJpZXMgb2YgcXVlc3Rpb25zLiBJcyBpdCByZWxhdGVkIHRvIGJpb2luZm9ybWF0aWNzLCBjb250cm9sIHN5c3RlbXMsIHNpZ25hbCBwcm9jZXNzaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBmaWVsZCBkb2VzIHRoaXMgZml0IGluPyBGcm9tIHRoZSBuYW1lIGFsb25lLCBjYW4gSSBtYWtlIGFueSBpbmZvcm1lZCBndWVzc2VzPyBMZXQgbWUgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSdtIGdvaW5nIHRvIGhhdmUgdG8ga25vdyBtb3JlIGJlZm9yZSBJIGNhbiBnaXZlIGl0IGEgZmFpciBhc3Nlc3NtZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHF1ZXN0aW9uIHRoaXMgd2lsbCBzb2x2ZS4gV2hhdCBhcmUgdGhlIGN1cnJlbnQgc3RhdGUtb2YtdGhlLWFydCBtZXRob2RzIGJlaW5nIHVzZWQ/IElmIHRoaXMgaXMgYSBuZXcgbWV0aG9kLCBob3cgZG9lcyBpdCBjb21wYXJlP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MjAuNTc3MzM0MjQyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3MjQzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXFx0bm9kZXMtXFx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXFxcIm1hbmFnZWRcXFwiLCBcXFwiaW4tYmFuZC1zdGF0dXNcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjc3OlxcdG5vZGVzLVxcdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJzZnBcXFwiLCBub2Rlcy1cXHUwMDNlc2ZwX3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03OC1cXHRzd25vZGVzW1NXTk9ERV9QSFlMSU5LXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cXHUwMDNlcGh5bGlua19wcm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTItXFx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cXHUwMDNlbm9kZXMuZ3JvdXBbU1dOT0RFX1NGUF0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTEzOlxcdGluZm8ubmFtZSA9IFxcXCJzZnBcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVxcdGluZm8uaWQgPSBwY2lfZGV2X2lkKHBkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMToyMC42ODEwNjUwMTlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1NTM5ODcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEludmVzdGlnYXRpb24gaW50byBTRlAgTW9kdWxlIEluc3RhbnRpYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcHJpbWFyaWx5IGZvY3VzZWQgb24gYHR4Z2JlYCBoZXJlLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHpvb20gb3V0LiBXaGF0IGFib3V0IGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGl0c2VsZj8gUmlnaHQsIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzOiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgZ2V0IHRoaXMgZ29pbmcgdGhyb3VnaCBzeXNmcz9cblxuSG1tLCBpZiBgQ09ORklHX1NGUGAgaXMgZW5hYmxlZCwgdGhlIG1vZHVsZSBsb2FkcywgdGhhdOKAmXMgdXNlZnVsLiBJIGNhbiAqa2luZGEqIHNlZSB3aGVyZSBJIGFtIGdvaW5nLiBDYW4gSSBjb25qdXJlIHVwIGEgcGxhdGZvcm0gZGV2aWNlIHRocm91Z2ggYC9zeXMvYnVzL3BsYXRmb3JtL2RldmljZXNgPyBObywgdGhhdCdzIG5vdCBob3cgdGhhdCB3b3Jrcy4gSSBjYW4gb25seSBiaW5kIG9yIHVuYmluZCBleGlzdGluZyBkZXZpY2VzLiBEYW1uLCB0aG91Z2h0IHRoYXQgbWlnaHQgYmUgdG9vIGVhc3kuXG5cbldhaXQsIGRvZXMgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGNsZXZlciB1cCBpdHMgc2xlZXZlLCBsaWtlIGEgYHN5el9kZXZfcGxhdGZvcm1fYWRkYCBmdW5jdGlvbj8gTm8sIG5vIHN1Y2ggbHVjay4gT2theSwgcmVncm91cC4gSSBrbm93IHN5emthbGxlciAqY2FuKiBmdXp6IEkyQyBkZXZpY2VzIHZpYSBgL2Rldi9pMmMtWGAuXG5cbk5vdyBsZXTigJlzIHRoaW5rLiBJZiBJIGNyZWF0ZSBhbiBJMkMgZGV2aWNlLCBpdOKAmXMgZ29pbmcgdG8gYmUgYW4gSTJDIGNsaWVudCwgbm90IGFuIEkyQyBhZGFwdGVyLiBPa2F5LCB0aGF0J3MgYSBrZXkgZGlzdGluY3Rpb24uIE5vdywgd2hlcmUgZG9lcyB0aGlzIGdldCBtZT8gQWgsIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgLSB0aGF0IGZ1bmN0aW9uIHRha2VzIGFuIGBpMmNfYWRhcHRlcmAuIE9rYXksIHRoYXQncyBoZWxwZnVsIGluZm9ybWF0aW9uLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgaXMgY2FsbGVkIGZyb20gYHNmcF9zbV9wcm9iZV9mb3JfcGh5YC4gVGhpcyBtaWdodCBiZSBhIGJyZWFrLiBNeSBmb2N1cyBpcyBzdGlsbCBzZnAsIHRob3VnaC4gSXMgdGhlcmUgYW55IG90aGVyIHBhdGggdG8gcmVhY2ggYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYD8gSSBoYXZlIHRvIGxvb2sgbW9yZSBjbG9zZWx5Li4uIExldCdzIGNoZWNrIGBtZGlvX2kyY19hbGxvY2AuIEkgc2hvdWxkIGNoZWNrIGFsbCBwYXRocyBmb3IgYG1kaW9faTJjX2FsbG9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MzAuMzM2NDY2MjI0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcwOTA5NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9faTJjX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM9NDk2PXN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA4LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDk6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTUxMC1cXHRcXHRcXHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTctfVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1NTg6RVhQT1JUX1NZTUJPTF9HUEwobWRpb19pMmNfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTktXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9OTQwPXN0YXRpYyBpbnQgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTQ0LVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo5NDU6XFx0aTJjX21paSA9IG1kaW9faTJjX2FsbG9jKHNmcC1cXHUwMDNlZGV2LCBzZnAtXFx1MDAzZWkyYywgc2ZwLVxcdTAwM2VtZGlvX3Byb3RvY29sKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTQ2LVxcdGlmIChJU19FUlIoaTJjX21paSkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaD0xND1lbnVtIG1kaW9faTJjX3Byb3RvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIxOnN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIyLVxcdFxcdFxcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MzIuMTA3MzgyMDA5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDc2OTM3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBtZGlvLWkyYy5jYCBEZXBlbmRlbmN5KipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBtZGlvX2kyY19hbGxvY2AgaXMgY2FsbGVkIGV4Y2x1c2l2ZWx5IGJ5IGBzZnAuY2AuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVja+KApiBOb3BlLCBubyBvdGhlciBjYWxscy4gU28sIHRoZSBlbnRpcmUgYG1kaW8taTJjLmNgIGZpbGUgaXMgZXNzZW50aWFsbHkgb25seSB1c2VkIGJ5IGBzZnAuY2AuIEFscmlnaHQsIHNvIGBzZnAuY2AgaXRzZWxmIGlzIG9ubHkgdXNlZCBpZiBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIGlzIGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gTm93LCBjYW4gc3l6a2FsbGVyIGJlIGxldmVyYWdlZCB0byB0cmlnZ2VyIHRoZSBjcmVhdGlvbiBvZiBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlPyBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGF04oCmIEFoLCB5ZXMhIFRoZSBgdHhnYmVgIFBDSSBkcml2ZXIuIElmIHN5emthbGxlciBjYW4gZ2VuZXJhdGUgYSB2aXJ0dWFsIFBDSSBkZXZpY2Ugd2l0aCB0aGUgcmlnaHQgdmVuZG9yL2RldmljZSBJRHMgdG8gbWF0Y2ggdGhlIGB0eGdiZWAgZHJpdmVyLCB0aGF0IHdvdWxkIHRyaWdnZXIgaXRzIHByb2JlLiBJdCB3b3VsZCBiZSBhIHVzZWZ1bCB0aGluZyB0byBjaGVjayB0aGUgYHR4Z2JlYCBQQ0kgSUQncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MDEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6NDEuOTE1MDc4ODVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTA4MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR4Z2JlX3BjaV90YmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM9Mjk9Y2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdID0gXFxcInR4Z2JlXFxcIjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzozMTovKiB0eGdiZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTMyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0zOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzozOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHhnYmVfcGNpX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTQwLVxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgVFhHQkVfREVWX0lEX1NQMTAwMCkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTY1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy02NzItICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6NjczOiAqIEBlbnQ6IGVudHJ5IGluIHR4Z2JlX3BjaV90YmxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy02NzQtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTk2Nj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk2Ny1cXHQubmFtZSAgICAgPSB0eGdiZV9kcml2ZXJfbmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzo5Njg6XFx0LmlkX3RhYmxlID0gdHhnYmVfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NjktXFx0LnByb2JlICAgID0gdHhnYmVfcHJvYmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYz05NzU9bW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6OTc3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0eGdiZV9wY2lfdGJsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NzgtTU9EVUxFX0FVVEhPUihcXFwiQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQsIFxcdTAwM2Nzb2Z0d2FyZUB0cnVzdG5ldGljLmNvbVxcdTAwM2VcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6NDEuOTk4MTkzMjI4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwOTI1Nzg3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgU3l6a2FsbGVyJ3MgVFhHQkUgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBTeXprYWxsZXIgaGFzIHRoZXNlIGRlc2NyaXB0aW9ucyBmb3IgUENJIGRldmljZXMsIGFuZCBpZiB0aGUgYHR4Z2JlYCBkcml2ZXIgaXMgZW5hYmxlZCwgd2UgY291bGQgcG90ZW50aWFsbHkgZnV6eiBpdC4gVGhhdCdzIGludGVyZXN0aW5nLiBUaGUgcXVlc3Rpb24gaXMsIGlzIGB0eGdiZWAgYWN0dWFsbHkgKmVuYWJsZWQqIGluIHRoZSBkZWZhdWx0IFN5emthbGxlciBjb25maWd1cmF0aW9uPyBUaGF0J3MgdGhlIGNydWNpYWwgcG9pbnQuIEZyb20gZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgYSBsb3Qgb2YgUENJIG5ldHdvcmsgZHJpdmVycyBhcmUgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gU3RpbGwsIGFzc3VtcHRpb25zIGFyZSBkYW5nZXJvdXMuIEkgbmVlZCB0byBiZSBzdXJlLiBTbywgbGV0J3MganVzdCBnbyBhaGVhZCBhbmQgY29uZmlybSB3aGV0aGVyIHRoZSBgQ09ORklHX1RYR0JFYCBvcHRpb24gaXMgZXZlbiBkZWZpbmVkLiBUaGF0J2xsIHRlbGwgdXMgcmlnaHQgYXdheSBpZiB3ZSBoYXZlIGEgZnV6emluZyB0YXJnZXQgb3IgaWYgd2UgbmVlZCB0byBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBxdWljayB3aW4gb3IgYSBtaW5vciBzZXRiYWNrLCBidXQgYmVzdCB0byBrbm93IGZvciBzdXJlIGJlZm9yZSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6NTAuMDkwNzc1MzEyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ2MzI5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRYR0JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMTo1MC4xNjQyNDc1OFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjcxMzQxMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBDaGVjayBpbiB3YW5neHVuKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYHdhbmd4dW5gIGRpcmVjdG9yeS4gSSdtIHRoaW5raW5nLCBsZXQncyBzdGFydCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBiZWdpbiB3aGVuIEknbSBhc3Nlc3NpbmcgYSBuZXcgYnVpbGQgb3IgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGV2ZXJ5dGhpbmcgaXMgYXMgSSB3b3VsZCBleHBlY3QsIG5vIHN1cnByaXNlcyBpbiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIG9yIGRlcGVuZGVuY2llcy4gVGhpcyBhbGxvd3MgbWUgdG8gaW1tZWRpYXRlbHkgc3BvdCBhbnkgZGV2aWF0aW9ucyBmcm9tIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtJ3MgaW50ZW5kZWQgYmVoYXZpb3IuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGV2ZXJ5dGhpbmcgaXMgaW4gYWxpZ25tZW50ISBJJ2xsIGJlIGxvb2tpbmcgZm9yIHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMuIEkgYWxzbyBleHBlY3QgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgaG93IHRob3NlIGFyZSBzZXQuIEdvdHRhIGtub3cgaG93IGl0IGlzIHN1cHBvc2VkIHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6NTYuODM1NTkyNTcxWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzA5NDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFhHQkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjQzOmNvbmZpZyBUWEdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2Nzpjb25maWcgVFhHQkVWRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02OC1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMTo1Ni45Mjg2OTM4ODlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2ODYzNDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFNGUDogQSBQb3RlbnRpYWwgUGF0aCoqXG5cbk9rYXksIHNvIGBDT05GSUdfVFhHQkVgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLiBUaGUgcXVlc3Rpb24gbm93IGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHdheXMgdG8gcG90ZW50aWFsbHkgZnV6eiB0aGUgU0ZQPyBJIG5lZWQgdG8gdGhpbmsgb3V0c2lkZSB0aGUgYm94IGEgYml0LiBXaGF0IGFib3V0IERldmljZSBUcmVlPyBIbW0sIHRoYXQncyBhIGRlYWQgZW5kLCBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZGVhbCB3aXRoIG92ZXJsYXlzLlxuXG5BbHJpZ2h0LCB3aGF0IGFib3V0IHRoYXQgYGkyY19taWlfcHJvYmVfcm9sbGJhbGxgIGZ1bmN0aW9uPyBUaGUgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyB0aGVyZSwgcmVuYW1pbmcgaXQgdG8gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCBhbmQgZXhwb3J0aW5nIGl0LiBJdCdzIGFsc28gbW9kaWZ5aW5nIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgIHNvIHRoYXQgaXQgbm8gbG9uZ2VyIGRpcmVjdGx5IGNhbGxzIHRoYXQgcHJvYmUgZnVuY3Rpb24sIGJ1dCBub3cgc2ltcGx5IHJldHVybnMgMC4gTW9zdCBub3RhYmx5LCB0aGUgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBmdW5jdGlvbiBpcyAqbm93KiBjYWxsaW5nIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAuXG5cblRoZSBiaWcgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGlzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aD8gQ2FuIHdlIHRyaWdnZXIgdGhpcyBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIGZ1bmN0aW9uPyBJZiBgc2ZwYCBpcyBpbnN0YW50aWF0ZWQsIHRoZW4geWVzLiBXZSBoYXZlIHRvIGluc3RhbnRpYXRlIGBzZnBgIHNvbWVob3csIGJ1dCBjYW4gd2UgZG8gdGhhdCB0aHJvdWdoIGB0eGdiZWA/IFllcyB3ZSBjYW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgYXJlIHRoZXJlIGFueSBvdGhlciBkcml2ZXJzIGluc3RhbnRpYXRpbmcgYHNmcGA/IExldCdzIHF1aWNrbHkgc2VhcmNoIGZvciBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYCB3aXRoIFwic2ZwXCIgYXMgdGhlIGFyZ3VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMxMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMjowMi41OTczMzE1NzRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzMwNjE0NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBsYXRmb3JtX2RldmljZV9yZWdpc3Rlci4qXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMjowNC45NzA0MDA3MTRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY1ODk4NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnkqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHJlbWVtYmVyIEkgYWxyZWFkeSB1c2VkIGBncmVwYCB0byBzZWFyY2ggZm9yIFwic2ZwXCIgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYCBkaXJlY3RvcnksIGFuZCB0aGUgcmVzdWx0cyBwb2ludGVkIG1lIHRvd2FyZHMgYHR4Z2JlYC4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZy5cblxuTXkgZ29hbCBoZXJlIGlzIHRvIGZpbmQgYWxsIHRoZSB3YXlzIHRoYXQgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBpcyBpbml0aWF0ZWQuIEkga25vdyBpdCdzIHRpZWQgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhhdCBzdGF0ZSBtYWNoaW5lIGtpY2tzIG9mZiB3aGVuIGFuIFNGUCBtb2R1bGUgaXMgcGh5c2ljYWxseSBwbHVnZ2VkIGluLiBJZiBzeXprYWxsZXIgaGFzIHNvbWUgY29udHJvbCBvdmVyIEdQSU9z4oCUbGlrZSB1c2luZyBgbW9kLWRlZjBgIG9yIHNvbWV0aGluZyBzaW1pbGFy4oCUY291bGRuJ3Qgd2UgcG90ZW50aWFsbHkgc2ltdWxhdGUgdGhlIGluc2VydGlvbiBldmVudD9cblxuQnV0IHdhaXTigKYgZGlkbid0IHRoZSBgdHhnYmVgIGRyaXZlciAqYWxzbyogbWVudGlvbiBzb21ldGhpbmcgYWJvdXQgc29mdHdhcmUgbm9kZXMgZm9yIHRob3NlIHZlcnkgc2FtZSBHUElPcz8gSWYgc28sIGRvZXMgYHR4Z2JlYCBhY3R1YWxseSBmdW5jdGlvbiBhcyBhIEdQSU8gY29udHJvbGxlciBpdHNlbGY/IEkgdGhpbmsgdGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBwb3NzaWJpbGl0eSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMjoxMy42MjkzODkxNDRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjc1Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdwaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjE4OnZvaWQgdHhnYmVfZ3Bpb19pbml0X2FtbChzdHJ1Y3Qgd3ggKnd4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjM3OmlycXJldHVybl90IHR4Z2JlX2dwaW9faXJxX2hhbmRsZXJfYW1sKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jPTMzMj1pbnQgdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTMzNy1cXHR1MzIgbW9kX2FicztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjMzODpcXHR1MzIgZ3BpbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTMzOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMzQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MzQ1OlxcdGdwaW8gPSByZDMyKHd4LCBXWF9HUElPX0VYVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzozNDY6XFx0aWYgKGdwaW8gXFx1MDAyNiBtb2RfYWJzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMzQ3LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuaC02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmg6Nzp2b2lkIHR4Z2JlX2dwaW9faW5pdF9hbWwoc3RydWN0IHd4ICp3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuaDo4OmlycXJldHVybl90IHR4Z2JlX2dwaW9faXJxX2hhbmRsZXJfYW1sKGludCBpcnEsIHZvaWQgKmRhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmgtOS1pbnQgdHhnYmVfdGVzdF9ob3N0aWYoc3RydWN0IHd4ICp3eCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTIyPXZvaWQgdHhnYmVfaXJxX2VuYWJsZShzdHJ1Y3Qgd3ggKnd4LCBib29sIHF1ZXVlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtMjctXFx0XFx0bWlzY19pZW4gfD0gVFhHQkVfUFhfTUlTQ19HUElPO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6Mjg6XFx0XFx0dHhnYmVfZ3Bpb19pbml0X2FtbCh3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTg0PXN0YXRpYyBpbnQgdHhnYmVfcmVxdWVzdF9saW5rX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy05MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjkyOnN0YXRpYyBpbnQgdHhnYmVfcmVxdWVzdF9ncGlvX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtOTMte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6OTQ6XFx0dHhnYmUtXFx1MDAzZWdwaW9faXJxID0gaXJxX2ZpbmRfbWFwcGluZyh0eGdiZS1cXHUwMDNlbWlzYy5kb21haW4sIFRYR0JFX0lSUV9HUElPKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk1OlxcdHJldHVybiByZXF1ZXN0X3RocmVhZGVkX2lycSh0eGdiZS1cXHUwMDNlZ3Bpb19pcnEsIE5VTEwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5NjpcXHRcXHRcXHRcXHQgICAgdHhnYmVfZ3Bpb19pcnFfaGFuZGxlcl9hbWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5NzpcXHRcXHRcXHRcXHQgICAgSVJRRl9PTkVTSE9ULCBcXFwidHhnYmUtZ3Bpby1pcnFcXFwiLCB0eGdiZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy05OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTIwMj12b2lkIHR4Z2JlX2ZyZWVfbWlzY19pcnEoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtMjA0LVxcdGlmICh0eGdiZS1cXHUwMDNld3gtXFx1MDAzZW1hYy50eXBlICE9IHd4X21hY19zcClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjIwNTpcXHRcXHRmcmVlX2lycSh0eGdiZS1cXHUwMDNlZ3Bpb19pcnEsIHR4Z2JlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTIwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM9MjEzPWludCB0eGdiZV9zZXR1cF9taXNjX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzoyNTE6XFx0ZXJyID0gdHhnYmVfcmVxdWVzdF9ncGlvX2lycSh0eGdiZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yNTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vbWFjaGluZS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTojaW5jbHVkZSBcXHUwMDNjbGludXgvZ3Bpby9kcml2ZXIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vcHJvcGVydHkuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNjpcXHRzbnByaW50Zihub2Rlcy1cXHUwMDNlZ3Bpb19uYW1lLCBzaXplb2Yobm9kZXMtXFx1MDAzZWdwaW9fbmFtZSksIFxcXCJ0eGdiZV9ncGlvLSV4XFxcIiwgaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzctXFx0c25wcmludGYobm9kZXMtXFx1MDAzZWkyY19uYW1lLCBzaXplb2Yobm9kZXMtXFx1MDAzZWkyY19uYW1lKSwgXFxcInR4Z2JlX2kyYy0leFxcXCIsIGlkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNDktXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1MDpcXHRub2Rlcy1cXHUwMDNlZ3Bpb19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcXFwicGluY3RybC1uYW1lc1xcXCIsIFxcXCJkZWZhdWx0XFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1MTpcXHRzd25vZGVzW1NXTk9ERV9HUElPXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlZ3Bpb19uYW1lLCBub2Rlcy1cXHUwMDNlZ3Bpb19wcm9wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1MjpcXHRub2Rlcy1cXHUwMDNlZ3BpbzBfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAwLCBHUElPX0FDVElWRV9ISUdIKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUzOlxcdG5vZGVzLVxcdTAwM2VncGlvMV9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDEsIEdQSU9fQUNUSVZFX0hJR0gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTQ6XFx0bm9kZXMtXFx1MDAzZWdwaW8yX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFxcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMiwgR1BJT19BQ1RJVkVfTE9XKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjU1OlxcdG5vZGVzLVxcdTAwM2VncGlvM19yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDMsIEdQSU9fQUNUSVZFX0hJR0gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTY6XFx0bm9kZXMtXFx1MDAzZWdwaW80X3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFxcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgNCwgR1BJT19BQ1RJVkVfSElHSCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NzpcXHRub2Rlcy1cXHUwMDNlZ3BpbzVfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCA1LCBHUElPX0FDVElWRV9ISUdIKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTU4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy02Ni1cXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJpMmMtYnVzXFxcIiwgbm9kZXMtXFx1MDAzZWkyY19yZWYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Njc6XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1syXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwidHgtZmF1bHQtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzBfcmVmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjY4OlxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbM10gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcInR4LWRpc2FibGUtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzFfcmVmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjY5OlxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbNF0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcIm1vZC1kZWYwLWdwaW9zXFxcIiwgbm9kZXMtXFx1MDAzZWdwaW8yX3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo3MDpcXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzVdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJsb3MtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzNfcmVmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjcxOlxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbNl0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcInJhdGUtc2VsZWN0MS1ncGlvc1xcXCIsIG5vZGVzLVxcdTAwM2VncGlvNF9yZWYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NzI6XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1s3XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwicmF0ZS1zZWxlY3QwLWdwaW9zXFxcIiwgbm9kZXMtXFx1MDAzZWdwaW81X3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03My1cXHRzd25vZGVzW1NXTk9ERV9TRlBdID0gTk9ERV9QUk9QKG5vZGVzLVxcdTAwM2VzZnBfbmFtZSwgbm9kZXMtXFx1MDAzZXNmcF9wcm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTMxMj1pcnFyZXR1cm5fdCB0eGdiZV9saW5rX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTMyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjMzMDpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zMzEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzMyOlxcdHN0cnVjdCB3eCAqd3ggPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTMzMy1cXHRpbnQgdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNDA6c3RhdGljIGludCB0eGdiZV9ncGlvX2dldF9kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM0MS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNDI6XFx0c3RydWN0IHd4ICp3eCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzQzLVxcdHUzMiB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM1MjpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZGlyZWN0aW9uX2luKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNTMte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzU0OlxcdHN0cnVjdCB3eCAqd3ggPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM1NS1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzU3OlxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2d3gtXFx1MDAzZWdwaW9fbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzU4LVxcdHdyMzJtKHd4LCBXWF9HUElPX0REUiwgQklUKG9mZnNldCksIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzU5OlxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ3eC1cXHUwMDNlZ3Bpb19sb2NrLCBmbGFncyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM2My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM2NDpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzY1LVxcdFxcdFxcdFxcdCAgICBpbnQgdmFsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzY2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM2NzpcXHRzdHJ1Y3Qgd3ggKnd4ID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoY2hpcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjgtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzczOlxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2d3gtXFx1MDAzZWdwaW9fbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzc0LVxcdHdyMzJtKHd4LCBXWF9HUElPX0RSLCBCSVQob2Zmc2V0KSwgc2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM3NS1cXHR3cjMybSh3eCwgV1hfR1BJT19ERFIsIEJJVChvZmZzZXQpLCBCSVQob2Zmc2V0KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNzY6XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnd4LVxcdTAwM2VncGlvX2xvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM3Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzgxOnN0YXRpYyBpbnQgdHhnYmVfZ3Bpb19pbml0KHN0cnVjdCB0eGdiZSAqdHhnYmUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zODIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzgzOlxcdHN0cnVjdCBncGlvX2NoaXAgKmdjO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzg0LVxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzkxOlxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2d3gtXFx1MDAzZWdwaW9fbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zOTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM5NzpcXHRnYy1cXHUwMDNlbGFiZWwgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFxcXCJ0eGdiZV9ncGlvLSV4XFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5OC1cXHRcXHRcXHRcXHQgICBwY2lfZGV2X2lkKHd4LVxcdTAwM2VwZGV2KSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQwMi1cXHRnYy1cXHUwMDNlYmFzZSA9IC0xO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDAzOlxcdGdjLVxcdTAwM2VuZ3BpbyA9IDY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00MDQtXFx0Z2MtXFx1MDAzZW93bmVyID0gVEhJU19NT0RVTEU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQwNi1cXHRnYy1cXHUwMDNlZndub2RlID0gc29mdHdhcmVfbm9kZV9md25vZGUodHhnYmUtXFx1MDAzZW5vZGVzLmdyb3VwW1NXTk9ERV9HUElPXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0MDc6XFx0Z2MtXFx1MDAzZWdldCA9IHR4Z2JlX2dwaW9fZ2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDA4OlxcdGdjLVxcdTAwM2VnZXRfZGlyZWN0aW9uID0gdHhnYmVfZ3Bpb19nZXRfZGlyZWN0aW9uO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDA5OlxcdGdjLVxcdTAwM2VkaXJlY3Rpb25faW5wdXQgPSB0eGdiZV9ncGlvX2RpcmVjdGlvbl9pbjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQxMDpcXHRnYy1cXHUwMDNlZGlyZWN0aW9uX291dHB1dCA9IHR4Z2JlX2dwaW9fZGlyZWN0aW9uX291dDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQxMjpcXHRyZXQgPSBkZXZtX2dwaW9jaGlwX2FkZF9kYXRhKGRldiwgZ2MsIHd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00MTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0MTY6XFx0dHhnYmUtXFx1MDAzZWdwaW8gPSBnYztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM9NTc1PWludCB0eGdiZV9pbml0X3BoeShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy02MDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2MTA6XFx0cmV0ID0gdHhnYmVfZ3Bpb19pbml0KHR4Z2JlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTYxMS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2MTI6XFx0XFx0d3hfZXJyKHd4LCBcXFwiZmFpbGVkIHRvIGluaXQgZ3Bpb1xcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy02MTMtXFx0XFx0Z290byBlcnJfZGVzdHJveV9waHlsaW5rO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg9NDI1PXN0cnVjdCB0eGdiZV9ub2RlcyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDI2OlxcdGNoYXIgZ3Bpb19uYW1lWzMyXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MjctXFx0Y2hhciBpMmNfbmFtZVszMl07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MjktXFx0Y2hhciBwaHlsaW5rX25hbWVbMzJdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzMDpcXHRzdHJ1Y3QgcHJvcGVydHlfZW50cnkgZ3Bpb19wcm9wc1syXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MzEtXFx0c3RydWN0IHByb3BlcnR5X2VudHJ5IGkyY19wcm9wc1s0XTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQzNC1cXHRzdHJ1Y3Qgc29mdHdhcmVfbm9kZV9yZWZfYXJncyBpMmNfcmVmWzFdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzNTpcXHRzdHJ1Y3Qgc29mdHdhcmVfbm9kZV9yZWZfYXJncyBncGlvMF9yZWZbMV07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDM2OlxcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8xX3JlZlsxXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDo0Mzc6XFx0c3RydWN0IHNvZnR3YXJlX25vZGVfcmVmX2FyZ3MgZ3BpbzJfcmVmWzFdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzODpcXHRzdHJ1Y3Qgc29mdHdhcmVfbm9kZV9yZWZfYXJncyBncGlvM19yZWZbMV07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDM5OlxcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW80X3JlZlsxXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDo0NDA6XFx0c3RydWN0IHNvZnR3YXJlX25vZGVfcmVmX2FyZ3MgZ3BpbzVfcmVmWzFdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ0MS1cXHRzdHJ1Y3Qgc29mdHdhcmVfbm9kZV9yZWZfYXJncyBzZnBfcmVmWzFdO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg9NDU5PXN0cnVjdCB0eGdiZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00NjctXFx0c3RydWN0IGNsayAqY2xrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQ2ODpcXHRzdHJ1Y3QgZ3Bpb19jaGlwICpncGlvO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ2OS1cXHR1bnNpZ25lZCBpbnQgbGlua19pcnE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDcwOlxcdHVuc2lnbmVkIGludCBncGlvX2lycTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00NzEtXFx0dTMyIGVpY3I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjEzLjcwMTA3MjQxMloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODA4NDIxODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBSb2xsQmFsbCBTRlAgUHJvYmUgVGhyb3VnaCBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBtYXBwZWQgb3V0IGEgcG90ZW50aWFsIGZ1enppbmcgcGF0aC4gVGhlIGB0eGdiZWAgZHJpdmVyIHJlZ2lzdGVycyBhIGBncGlvX2NoaXBgLCB3aGljaCB0aGUgU0ZQIGRyaXZlciB0aGVuIGxldmVyYWdlcy4gVGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCB3aGV0aGVyIGl0J3MgcG9sbGluZyBvciBpbnRlcnJ1cHQtZHJpdmVuLCBpcyBrZXkgaGVyZS4gSWYgc3l6a2FsbGVyIGNhbiBzb21laG93IHRyaWdnZXIgTU1JTyByZWFkcyBvZiBgV1hfR1BJT19FWFRgIGluIGEgd2F5IHRoYXQgZm9vbHMgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGludG8gdGhpbmtpbmcgYSBtb2R1bGUgaXMgcHJlc2VudCwgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuXG5cblRoYXQgZmFicmljYXRlZCBcIm1vZHVsZSBpbnNlcnRpb25cIiB0aGVuIGxlYWRzIHRvIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYC4gQmluZ28sIG5vdyB3ZSdyZSBkb2luZyBhbiBJMkMgdHJhbnNmZXIsIGFuZCB0aGF0J3MgdGhlIHZ1bG5lcmFiaWxpdHkgdGFyZ2V0LlxuXG5UaGlzIEkyQyB0cmFuc2ZlciB0aGVuIGdvZXMgdGhyb3VnaCB0aGUgYHNucHMsZGVzaWdud2FyZS1pMmNgIGRyaXZlciwgd2hpY2ggaGFuZGxlcyB0aGUgTU1JTyByZWFkcy93cml0ZXMgdG8gdGhlIGB0eGdiZWAgUENJIGRldmljZS4gQW5kLCBpbXBvcnRhbnRseSwgKnRoYXQncyogd2hhdCBzeXprYWxsZXIgY2FuIGZ1enouIFNvLCB0aGUgZW50aXJlIGF0dGFjayBzdXJmYWNlIGlzOiBgc3l6a2FsbGVyYCAtXHUwMDNlIGBNTUlPYCAtXHUwMDNlIGBTRlBgIC1cdTAwM2UgYFJvbGxCYWxsIEkyQ2AgLVx1MDAzZSBgc25wcyxkZXNpZ253YXJlLWkyY2AgLVx1MDAzZSBgdHhnYmVgIGBNTUlPYC4gVGhpcyBtYWtlcyB0aGUgd2hvbGUgcGF0aCBmdXp6YWJsZS5cblxuQmFzaWNhbGx5LCB0aGUgcGF0Y2ggc2hpZnRzIHRoZSBSb2xsQmFsbCBTRlAgbW9kdWxlIHByb2JpbmcgZnJvbSBgbWRpb19pMmNfYWxsb2NgIHRvIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBsYXRlciBwcm9iZSwgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBSb2xsQmFsbCBNRElPIEkyQyBpbml0aWFsaXphdGlvbi4gIEFuZCB3aGF0J3MgaW1wb3J0YW50IGlzIGl0J3MgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsaXplZCBoYXJkd2FyZSwgbGlrZSBhIHZpcnR1YWwgUENJIGRldmljZSBtYXRjaGluZyBgdHhnYmVgLlxuXG5Ob3csIHRoZSBuZWNlc3NhcnkgY29uZmlncy4uLiBMZXQncyBzZWUuLi4gIGBDT05GSUdfU0ZQYCBpcyBhIGdpdmVuLCBgQ09ORklHX01ESU9fSTJDYCBpcyBuZWVkZWQgdG9vLCBvZiBjb3Vyc2UuIGBDT05GSUdfVFhHQkVgIHRvIGluc3RhbnRpYXRlIHRoZSBTRlAgcGxhdGZvcm0gZGV2aWNlLCBhbmQgYENPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STWAsIHVzZWQgYnkgYHR4Z2JlYCBmb3IgSTJDLiBCdXQgd2FpdC4uLiBpcyBpdCBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIG9yIHNvbWUgb3RoZXIgZGVzaWdud2FyZSB2YXJpYW50PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgdHhnYmVgIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6MjIuNTA5NDk3MzY4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMwOTg5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRYR0JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo0Mzpjb25maWcgVFhHQkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njc6Y29uZmlnIFRYR0JFVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjgtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6MjIuNzMyNjA3MDAzWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDIzMzEwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgVFhHQkUgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBgVFhHQkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIEV0aGVybmV0IGRyaXZlciBhcmUgc3RydWN0dXJlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHRzLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgYmVoaW5kIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIElzIGl0IG1vZHVsYXIsIGJ1aWx0LWluLCBvciBzb21lIG90aGVyIGJ1aWxkIHR5cGU/IFdoYXQgb3RoZXIgb3B0aW9ucyBkb2VzIGl0IGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyB0aGF0IHRyaWdnZXIgaXRzIGluY2x1c2lvbj8gSSdtIGFudGljaXBhdGluZyBmaW5kaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbiBzeW50YXggaGVyZSDigJMgYGNvbmZpZ2AsIGBib29sYCwgYHRyaXN0YXRlYCwgYGRlcGVuZHMgb25gLCBgZGVmYXVsdGAsIGBoZWxwYCBhbmQgc28gb24g4oCTIGJ1dCBJJ20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbnVhbmNlcyBzcGVjaWZpYyB0byB0aGlzIGRyaXZlciBhbmQgdGhpcyB2ZW5kb3IuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnl0aGluZyB1bnVzdWFsLCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcywgYW5kIGVuc3VyZSB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgaW4gbGluZSB3aXRoIGJlc3QgcHJhY3RpY2VzLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGEgdXNlciB3b3VsZCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIHBhcnRpY3VsYXIgbmV0d29ya2luZyBmZWF0dXJlLCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYmUgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NzUwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6MjYuOTc0OTQzNjM1WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDM6XFx0Y29uZmlnIFRYR0JFXFxuICA0NDpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBJMkNfREVTSUdOV0FSRV9QTEFURk9STVxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNDk6XFx0XFx0c2VsZWN0IE1BUlZFTExfMTBHX1BIWVxcbiAgNTA6XFx0XFx0c2VsZWN0IFJFR01BUFxcbiAgNTE6XFx0XFx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcXG4gIDUyOlxcdFxcdHNlbGVjdCBTRlBcXG4gIDUzOlxcdFxcdHNlbGVjdCBHUElPTElCXFxuICA1NDpcXHRcXHRzZWxlY3QgR1BJT0xJQl9JUlFDSElQXFxuICA1NTpcXHRcXHRzZWxlY3QgUENTX1hQQ1NcXG4gIDU2OlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZlxcbiAgNTk6XFx0XFx0ICBhZGFwdGVycy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDYyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6MjYuOTc1MDQ4NTQ1WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjIxOTMyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBgVFhHQkVgIHB1bGxzIGluIGBTRlBgLCBhbmQgYFNGUGAgaW4gdHVybiBkZXBlbmRzIG9uIHRoZSBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIGRyaXZlci4gQWxyaWdodCwgc28gaWYgSSBlbmFibGUgYFRYR0JFYCwgdGhhdCBzaG91bGQgYXV0b21hdGljYWxseSBnaXZlIG1lIGJvdGggYFNGUGAgKmFuZCogYE1ESU9fSTJDYCwgZ2l2ZW4gdGhhdCBgU0ZQYCBkZXBlbmRzIG9uIGBNRElPX0kyQ2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgcmlnaHQ/IEhvbGQgb24gYSBzZWNvbmQuLi4ganVzdCBtYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGlzIHN0cmFpZ2h0LiBZZXMsIGBTRlBgICpkb2VzKiBzZWxlY3QgYE1ESU9fSTJDYC4gR3JlYXQuIFRoZW4sIGFsbCBJIHNob3VsZCBuZWVkIHRvIGRvIGlzIGVuYWJsZSBgVFhHQkVgLiBCdXQuLi4gbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIOKAkyBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUg4oCTIGlzIHRoZXJlIHNvbWUgb3RoZXIgZHJpdmVyLCBzb21lICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQgYWxzbyBicmluZ3MgaW4gYFNGUGA/IEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCdzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM3OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjMxLjczNzI0NDUyNFoiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDI3MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgU0ZQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNTEtXFx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTI6XFx0c2VsZWN0IFNGUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01My1cXHRzZWxlY3QgR1BJT0xJQlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzU0PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzk3LVxcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNzk4OlxcdFxcdHBoeWxpbmtfZXJyKHBsLCBcXFwiZmFpbGVkIHRvIHNlbGVjdCBTRlAgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM3OTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjMzLjcxMTUyNDc3NFoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQxOTE0MjU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTRlAgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGZ1enogdGhpcyBgU0ZQYCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBvbmx5IGBUWEdCRWAgc2VsZWN0cyBgU0ZQYCwgYnV0IEkga25vdyBgU0ZQYCBjYW4gYmUgZW5hYmxlZCBkaXJlY3RseS4gSG93ZXZlciwgdG8gYWN0dWFsbHkgaW5zdGFudGlhdGUgaXQsIHdlIG5lZWQgYFRYR0JFYCAob3IgdGhlIGRldmljZSB0cmVlLCB3aGljaCBTeXprYWxsZXIgZG9lc24ndCB1dGlsaXplLCBzbyBubyBnbykuIFRodXMsIGBUWEdCRWAgc2VlbXMgbGlrZSB0aGUgbW9zdCBwcmFjdGljYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcgdGhpcyBtb2R1bGUuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGlmIGBJMkNfREVTSUdOV0FSRV9QTEFURk9STWAgaXMgZW5hYmxlZC4gSXQncyBhIGRlcGVuZGVuY3kgb2YgYFRYR0JFYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBwcmVzZW50IGZvciBgVFhHQkVgIHRvIGFjdHVhbGx5IHdvcmsuIFRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IG5lZWRzIHRvIGluY2x1ZGUgYFRYR0JFYCwgYFNGUGAsIGFuZCBgTURJT19JMkNgLlxuXG5Ob3csIG9udG8gYEZvY3VzU3ltYm9sc2AuIFRoZSBwYXRjaCBzZWVtcyB0byBtb2RpZnkgYSBmZXcga2V5IGZ1bmN0aW9uczogYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCAocmVuYW1lZCBmcm9tIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYCksIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgLCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLCBgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3lgLCBhbmQgYHNmcF9zbV9hZGRfbWRpb19idXNgLiBBZnRlciBsb29raW5nIGF0IHRoZXNlLCBJIHdhbnQgdG8gemVybyBpbiBvbiBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgLCBgaTJjX21paV9pbml0X3JvbGxiYWxsYCwgYW5kIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGUgbmFtZXMgb2YgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBwYXRjaCwganVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCB0aGUgbmFtZXMgYXJlIGNvcnJlY3QuIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAsIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgLCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLCBgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3lgLCBhbmQgYHNmcF9zbV9hZGRfbWRpb19idXNgLCBhbGwgc2VlbSB0byBiZSBwcmVzZW50LlxuXG5MZXQncyBxdWlja2x5IGFuYWx5emUgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YC4gSXQncyBwYXJ0IG9mIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgY2FsbGVkIGR1cmluZyBQSFkgcHJvYmluZy4gV2hpbGUgY3JpdGljYWwgZm9yIGluaXRpYWxpemF0aW9uLCBpdCdzIG5vdCBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgaXMgY2FsbGVkIG9uIHByb2JlLCBhbmQgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAgaXMgY2FsbGVkIG9uIGluaXQuXG5cblNvLCBmb3IgYEZvY3VzU3ltYm9sc2AsIEknbGwgc3RpY2sgd2l0aCB0aGVzZTogYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCwgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAsIGFuZCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBtYWtlIHN1cmUgYFRYR0JFYCBpcyB0aGUgKm9ubHkqIHdheSB0byByZWFjaCBgU0ZQYC4gV2hhdCBhYm91dCBgTkdCRWA/IEknbGwgbmVlZCB0byByZXNlYXJjaCB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjQ0LjEzMDY3MDgyOVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY1MTIxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFNGUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNTEtXFx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTI6XFx0c2VsZWN0IFNGUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01My1cXHRzZWxlY3QgR1BJT0xJQlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMjo0NC4yMjcxODk0NDdaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkzODE3MjAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIExvZ2ljKipcblxuT2theSwgc28gdGhlIGVzc2VudGlhbCBlbGVtZW50IGhlcmUgaXMgYFRYR0JFYC4gVGhhdCdzIHRoZSBjb3JlLiBCdXQgSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGVsc2UgdGhhdCBzdXBwb3J0cyBpdCBpcyBpbmNsdWRlZC5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgaWYgYE1ESU9fSTJDYCBpcyB0cmlzdGF0ZS4gUmlnaHQsIGl0IGlzLiBTbyB0aGF0IG1lYW5zIGl0IGNhbiBiZSBzZWxlY3RpdmVseSBlbmFibGVkLiBNeSBgRW5hYmxlQ29uZmlnc2AgY3VycmVudGx5IGxvb2sgbGlrZSB0aGlzOiBgU0ZQYCwgYE1ESU9fSTJDYCwgYW5kIGBUWEdCRWAuXG5cbkhvbGQgb24gYSBtaW51dGUuLi4gSSByZW1lbWJlciBgVFhHQkVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYC4gSnVzdCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBjb25maWd1cmVkLCBJJ2xsIGFkZCBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIHRvIHRoZSBsaXN0LiBJJ2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGl0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIHN1cnByaXNpbmcgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MjYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjU0LjE2NTM2NzAzNFoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAyMDQwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaTJjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZz01Nzg9aWYgSTJDX0RFU0lHTldBUkVfQ09SRVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTU3OS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZzo1ODA6Y29uZmlnIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXFxuZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWctNTgxLVxcdHRyaXN0YXRlIFxcXCJTeW5vcHN5cyBEZXNpZ25XYXJlIFBsYXRmb3JtIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6NTQuMjU1NTgxODgyWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMTA3MDkzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIENvbmZpZ3VyYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzeXprYWxsZXIgY29uZmlnIGFuZCBJIHNlZSBpdCdzIGdvdCBhIGxvdCBvZiBJMkMgZHJpdmVycyBlbmFibGVkLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB3ZSBzaG91bGQgZXhwYW5kIHRoaXMsIHNwZWNpZmljYWxseSBpbmNsdWRpbmcgYFRYR0JFYCwgYFNGUGAsIGFuZCBgTURJT19JMkNgIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYWRkaXRpb24sIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nIGZvciB0aGlzLiBUaGUgcGF0Y2ggd2UncmUgY29uc2lkZXJpbmcgdHdlYWtzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBvZiBSb2xsQmFsbCBTRlAgbW9kdWxlcyB1c2luZyBNRElPIEkyQy4gQ3JpdGljYWxseSwgaXQgZGVsYXlzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSdzIFBIWSBwcm9iaW5nIHBoYXNlLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGdpdmVzIGFjdHVhbCBSb2xsQmFsbCBicmlkZ2VzIHRpbWUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGVtc2VsdmVzIGJlZm9yZSB0aGUgcHJvYmUsIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCB0b3VjaGVzIGJvdGggdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBNRElPIEkyQyBwcm90b2NvbCBsb2dpYy5cblxuVGhlIGdyZWF0IHRoaW5nIGlzLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2UgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHRoYXQgYnJpbmdzIHVwIGFuIFNGUCBjYWdlIChsaWtlIHRoZSBXYW5neHVuIFRYR0JFIGRyaXZlciwgZm9yIGV4YW1wbGUpLiBUaGVuLCBmdXp6aW5nIHRob3NlIEkyQyBhbmQgR1BJTyBtZW1vcnktbWFwcGVkIEkvTyBhY2Nlc3NlcyBzaG91bGQgYmUgZW5vdWdoIHRvIHRyaWdnZXIgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCBwdXR0aW5nIHRoaXMgbmV3IGNvZGUgcGF0aCBpbiBwbGF5LlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogaXMgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBhY3R1YWxseSByZWFjaGFibGU/IExldCdzIGNvbmZpcm0gdGhhdC4gWWVzLCBpdCBsb29rcyBsaWtlIGBzZnBfc21fZXZlbnRgIGNhbGxzIGl0IHdoZW4gdGhlIHN0YXRlIG1hY2hpbmUgaGl0cyBgU0ZQX1NfSU5JVGAgb3IgYSBzaW1pbGFyIHN0YXRlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIHZlcmlmeSBgc2ZwX3NtX2V2ZW50YOKAmXMgYmVoYXZpb3IgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzcwNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMzowMS41NjYyOTQzNDZaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDEyMjY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZnBfc21fcHJvYmVfZm9yX3BoeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxNzU9c3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTkzLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMTk0OnN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc3RydWN0IHNmcCAqc2ZwKVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yODMxPXN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IGV2ZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI5MzMtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjI5MzQ6XFx0XFx0cmV0ID0gc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjkzNS1cXHRcXHRpZiAocmV0ID09IC1FTk9ERVYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjM6MDEuNjc2NDM0MjkzWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3OTIxOTEyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmluYWwgQ2hlY2tzIGFuZCBDb25zb2xpZGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgc2ZwX3NtX21haW5gIGRvZXMgaW5kZWVkIGNhbGwgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGxpbmUgb2YgcmVhc29uaW5nLiBgc2ZwX3NtX21haW5gIGlzLCBvZiBjb3Vyc2UsIHRoZSBwcmltYXJ5IHN0YXRlIG1hY2hpbmUgZnVuY3Rpb24sIHNvIHRoYXQncyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLlxuXG5Ob3csIEknbSBnb2luZyB0byBydW4gdGhyb3VnaCBhIGZpbmFsIGNoZWNrIG9uIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkgaGF2ZSBgVFhHQkVgLCBgU0ZQYCwgYW5kIGBNRElPX0kyQ2AgbGlzdGVkLiBIbW0sIGxldCdzIHNlZS4uLiBzaW5jZSBgVFhHQkVgIGRlcGVuZHMgb24gYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYCwgSSdsbCBhZGQgdGhhdCB0byB0aGUgbGlzdCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgYXMgdGhleSBzYXkuXG5cbk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBJIGhhdmUgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgdW5kZXIgYEZvY3VzU3ltYm9sc2AuIExldCBtZSBjaGVjay4uLiBJIGhhdmUgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCwgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAsIGFuZCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLiBBcmUgdGhlcmUgYW55IG90aGVycyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkPyBMZXQncyBjaGVjay4uLiBBaCwgeWVzLCB0aGVyZSBhcmUgdHdvIHNtYWxsZXIgZnVuY3Rpb25zOiBgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3lgIGFuZCBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AuIFRoZXNlIGFyZSBiYXNpY2FsbHkgd3JhcHBlcnMsIGJ1dCB0aGV5ICpoYXZlKiBiZWVuIG1vZGlmaWVkLiBXYWl0Li4uIGxvb2tzIGxpa2UgYHNmcF9zbV9hZGRfbWRpb19idXNgIGlzIG5vdyBqdXN0IGEgc2luZ2xlIGxpbmUgdGhhdCBjYWxscyBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApYC4gQW5kIGBzZnBfaTJjX21kaW9idXNfZGVzdHJveWAgbm93IGNhbGxzIGBtZGlvYnVzX2ZyZWUoc2ZwLVx1MDAzZWkyY19taWkpYC4gU2luY2UgdGhleSBhcmUganVzdCB3cmFwcGVycywgSSdsbCBpbmNsdWRlIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAgYW5kIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgYXMgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi5cblxuQWxyaWdodCwgSSdtIHNhdGlzZmllZC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODYwOSwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjM6MTEuNDY4NjI5MDc1WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3OTgwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRYR0JFXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIk1ESU9fSTJDXCIsXG4gICAgXCJJMkNfREVTSUdOV0FSRV9QTEFURk9STVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kaW9faTJjX3Byb2JlX3JvbGxiYWxsXCIsXG4gICAgXCJpMmNfbWlpX2luaXRfcm9sbGJhbGxcIixcbiAgICBcInNmcF9zbV9wcm9iZV9mb3JfcGh5XCIsXG4gICAgXCJzZnBfaTJjX21kaW9idXNfZGVzdHJveVwiLFxuICAgIFwic2ZwX3NtX2FkZF9tZGlvX2J1c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBzZXF1ZW5jZSBmb3IgUm9sbEJhbGwgU0ZQIG1vZHVsZXMgb3ZlciBNRElPIEkyQy4gSXQgZGVmZXJzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSdzIFBIWSBwcm9iaW5nIHBoYXNlLCBhbGxvd2luZyBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgdGltZSB0byBzdGFydCB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgTURJTyBJMkMgcHJvdG9jb2wgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdGhhdCBpbnN0YW50aWF0ZXMgYW4gU0ZQIGNhZ2UgKGUuZy4sIHRoZSBXYW5neHVuIFRYR0JFIGRyaXZlcikgYW5kIGZ1enppbmcgdGhlIHJlc3VsdGluZyBJMkMvR1BJTyBNTUlPIGFjY2Vzc2VzIHRvIHRyaWdnZXIgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRYR0JFXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIk1ESU9fSTJDXCIsXG4gICAgXCJJMkNfREVTSUdOV0FSRV9QTEFURk9STVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kaW9faTJjX3Byb2JlX3JvbGxiYWxsXCIsXG4gICAgXCJpMmNfbWlpX2luaXRfcm9sbGJhbGxcIixcbiAgICBcInNmcF9zbV9wcm9iZV9mb3JfcGh5XCIsXG4gICAgXCJzZnBfaTJjX21kaW9idXNfZGVzdHJveVwiLFxuICAgIFwic2ZwX3NtX2FkZF9tZGlvX2J1c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBzZXF1ZW5jZSBmb3IgUm9sbEJhbGwgU0ZQIG1vZHVsZXMgb3ZlciBNRElPIEkyQy4gSXQgZGVmZXJzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSdzIFBIWSBwcm9iaW5nIHBoYXNlLCBhbGxvd2luZyBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgdGltZSB0byBzdGFydCB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgTURJTyBJMkMgcHJvdG9jb2wgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdGhhdCBpbnN0YW50aWF0ZXMgYW4gU0ZQIGNhZ2UgKGUuZy4sIHRoZSBXYW5neHVuIFRYR0JFIGRyaXZlcikgYW5kIGZ1enppbmcgdGhlIHJlc3VsdGluZyBJMkMvR1BJTyBNTUlPIGFjY2Vzc2VzIHRvIHRyaWdnZXIgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowm4lt7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 08:11:29 +0000 UTC FinishedAt: 2026-06-23 08:23:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TXGBE", "SFP", "MDIO_I2C", "I2C_DESIGNWARE_PLATFORM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TXGBE", "SFP", "MDIO_I2C", "I2C_DESIGNWARE_PLATFORM" ], "series_id": "d23915fc-295b-4f1e-8913-e0aa5ef677d7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mdio_i2c_probe_rollball", "i2c_mii_init_rollball", "sfp_sm_probe_for_phy", "sfp_i2c_mdiobus_destroy", "sfp_sm_add_mdio_bus" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RYR0JFJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtNRElPX0kyQyYjMzQ7LAogICAgJiMzNDtJMkNfREVTSUdOV0FSRV9QTEFURk9STSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21kaW9faTJjX3Byb2JlX3JvbGxiYWxsJiMzNDssCiAgICAmIzM0O2kyY19taWlfaW5pdF9yb2xsYmFsbCYjMzQ7LAogICAgJiMzNDtzZnBfc21fcHJvYmVfZm9yX3BoeSYjMzQ7LAogICAgJiMzNDtzZnBfaTJjX21kaW9idXNfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtzZnBfc21fYWRkX21kaW9fYnVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBzZXF1ZW5jZSBmb3IgUm9sbEJhbGwgU0ZQIG1vZHVsZXMgb3ZlciBNRElPIEkyQy4gSXQgZGVmZXJzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSYjMzk7cyBQSFkgcHJvYmluZyBwaGFzZSwgYWxsb3dpbmcgZ2VudWluZSBSb2xsQmFsbCBicmlkZ2VzIHRpbWUgdG8gc3RhcnQgdXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgYW5kIE1ESU8gSTJDIHByb3RvY29sIGxvZ2ljLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRoYXQgaW5zdGFudGlhdGVzIGFuIFNGUCBjYWdlIChlLmcuLCB0aGUgV2FuZ3h1biBUWEdCRSBkcml2ZXIpIGFuZCBmdXp6aW5nIHRoZSByZXN1bHRpbmcgSTJDL0dQSU8gTU1JTyBhY2Nlc3NlcyB0byB0cmlnZ2VyIHRoZSBTRlAgc3RhdGUgbWFjaGluZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVhMWM4ZjY5MzMyYzQ5OWM3YjBiNmRlM2Y0Mzk0ZDVlYWRmNDM2YTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAwODoxODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNcbmluZGV4IGI4OGY2MzIzNGI0ZTZhLi4yYTNhNDE4YzEzNjk4OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG5AQCAtNDE5LDcgJiM0Mzs0MTksNyBAQCBzdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbiYjNDM7aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIHtcbiBcdHU4IGRhdGFfYnVmW10gPSB7IFJPTExCQUxMX0RBVEFfQUREUiwgMHgwMSwgMHgwMCwgMHgwMCB9O1xuIFx0dTggY21kX2J1ZltdICA9IHsgUk9MTEJBTExfQ01EX0FERFIsIFJPTExCQUxMX0NNRF9SRUFEIH07XG5AQCAtNDYyLDkgJiM0Mzs0NjIsMTMgQEAgc3RhdGljIGludCBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIFxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19wcm9iZV9yb2xsYmFsbCk7XG4gXG4gc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4ge1xuJiM0MztcdC8qIFNlbmQgdGhlIFJvbGxCYWxsIHVubG9jayBwYXNzd29yZDsgYnJpZGdlIHByZXNlbmNlIGlzIHZlcmlmaWVkXG4mIzQzO1x0ICogbGF0ZXIsIGluIHNmcF9zbV9wcm9iZV9mb3JfcGh5KCksIGFmdGVyIG1vZHVsZSBpbml0aWFsaXphdGlvbi5cbiYjNDM7XHQgKi9cbiBcdHN0cnVjdCBpMmNfbXNnIG1zZztcbiBcdHU4IHB3WzVdO1xuIFx0aW50IHJldDtcbkBAIC00ODYsNyAmIzQzOzQ5MCw3IEBAIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuIFx0aWYgKHJldCAhPSAxKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbi1cdHJldHVybiBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKGkyYyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5AQCAtNTMxLDEwICYjNDM7NTM1LDkgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuIFx0XHRyZXQgPSBpMmNfbWlpX2luaXRfcm9sbGJhbGwoaTJjKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGlmIChyZXQgIT0gLUVOT0RFVilcbi1cdFx0XHRcdGRldl9lcnIocGFyZW50LFxuLVx0XHRcdFx0XHRcJiMzNDtDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcXG5cJiMzNDssXG4tXHRcdFx0XHRcdHJldCk7XG4mIzQzO1x0XHRcdGRldl9lcnIocGFyZW50LFxuJiM0MztcdFx0XHRcdFwmIzM0O0Nhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRyZXQpO1xuIFx0XHRcdG1kaW9idXNfZnJlZShtaWkpO1xuIFx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDAzYmZkODY0MGRiOTYzLi5iYmZhYTA0NTA3OThkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5AQCAtOTYzLDYgJiM0Mzs5NjMsNyBAQCBzdGF0aWMgaW50IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc3RydWN0IHNmcCAqc2ZwKVxuIHN0YXRpYyB2b2lkIHNmcF9pMmNfbWRpb2J1c19kZXN0cm95KHN0cnVjdCBzZnAgKnNmcClcbiB7XG4gXHRtZGlvYnVzX3VucmVnaXN0ZXIoc2ZwLVx1MDAzZWkyY19taWkpO1xuJiM0MztcdG1kaW9idXNfZnJlZShzZnAtXHUwMDNlaTJjX21paSk7XG4gXHRzZnAtXHUwMDNlaTJjX21paSA9IE5VTEw7XG4gfVxuIFxuQEAgLTIxNzMsMTcgJiM0MzsyMTc0LDEwIEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9mYXVsdChzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBuZXh0X3N0YXRlLCBib29sIHdhcm4pXG4gXG4gc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcbiB7XG4tXHRpbnQgcmV0O1xuLVxuIFx0aWYgKHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sID09IE1ESU9fSTJDX05PTkUpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0ID0gc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApO1xuLVx0aWYgKHJldCA9PSAtRU5PREVWKSB7XG4tXHRcdHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sID0gTURJT19JMkNfTk9ORTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XG4gfVxuIFxuIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZXG5AQCAtMjIxNCw3ICYjNDM7MjIwOCwxOCBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcClcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuLVx0XHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSX1JPTExCQUxMLCB0cnVlKTtcbiYjNDM7XHRcdC8qIFByb2JlIGhlcmUsIGFmdGVyIG1vZHVsZSBpbml0aWFsaXphdGlvbiBkZWxheXMsIHNvIHRoYXRcbiYjNDM7XHRcdCAqIGdlbnVpbmUgUm9sbEJhbGwgYnJpZGdlcyBoYXZlIGhhZCB0aW1lIHRvIHN0YXJ0IHVwLlxuJiM0MztcdFx0ICogTW9kdWxlcyB3aXRob3V0IGEgYnJpZGdlIChlLmcuIFJUTDgyNjFCRSkgcmV0dXJuIC1FTk9ERVYuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGVyciA9IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHNmcC1cdTAwM2VpMmMpO1xuJiM0MztcdFx0aWYgKGVyciA9PSAtRU5PREVWKSB7XG4mIzQzO1x0XHRcdHNmcF9pMmNfbWRpb2J1c19kZXN0cm95KHNmcCk7XG4mIzQzO1x0XHRcdHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sID0gTURJT19JMkNfTk9ORTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0ZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmhcbmluZGV4IDY1YjU1MGE2ZmMzMjk4Li41Y2YxNGY0NWM5NGI2YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaFxuQEAgLTIwLDUgJiM0MzsyMCw2IEBAIGVudW0gbWRpb19pMmNfcHJvdG8ge1xuIFxuIHN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuIFx0XHRcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcbiYjNDM7aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTtcbiBcbiAjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUWEdCRSYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7TURJT19JMkMmIzM0OywKICAgICYjMzQ7STJDX0RFU0lHTldBUkVfUExBVEZPUk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZGlvX2kyY19wcm9iZV9yb2xsYmFsbCYjMzQ7LAogICAgJiMzNDtpMmNfbWlpX2luaXRfcm9sbGJhbGwmIzM0OywKICAgICYjMzQ7c2ZwX3NtX3Byb2JlX2Zvcl9waHkmIzM0OywKICAgICYjMzQ7c2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7c2ZwX3NtX2FkZF9tZGlvX2J1cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHByb2Jpbmcgc2VxdWVuY2UgZm9yIFJvbGxCYWxsIFNGUCBtb2R1bGVzIG92ZXIgTURJTyBJMkMuIEl0IGRlZmVycyB0aGUgcHJvYmUgZnJvbSBtb2R1bGUgYWxsb2NhdGlvbiB0byB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUmIzM5O3MgUEhZIHByb2JpbmcgcGhhc2UsIGFsbG93aW5nIGdlbnVpbmUgUm9sbEJhbGwgYnJpZGdlcyB0aW1lIHRvIHN0YXJ0IHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBNRElPIEkyQyBwcm90b2NvbCBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB0aGF0IGluc3RhbnRpYXRlcyBhbiBTRlAgY2FnZSAoZS5nLiwgdGhlIFdhbmd4dW4gVFhHQkUgZHJpdmVyKSBhbmQgZnV6emluZyB0aGUgcmVzdWx0aW5nIEkyQy9HUElPIE1NSU8gYWNjZXNzZXMgdG8gdHJpZ2dlciB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVhMWM4ZjY5MzMyYzQ5OWM3YjBiNmRlM2Y0Mzk0ZDVlYWRmNDM2YTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAwODoxODo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYwppbmRleCBiODhmNjMyMzRiNGU2YS4uMmEzYTQxOGMxMzY5ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMKQEAgLTQxOSw3ICYjNDM7NDE5LDcgQEAgc3RhdGljIGludCBpMmNfbWlpX3dyaXRlX3JvbGxiYWxsKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBkZXZhZCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQomIzQzO2ludCBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAl1OCBkYXRhX2J1ZltdID0geyBST0xMQkFMTF9EQVRBX0FERFIsIDB4MDEsIDB4MDAsIDB4MDAgfTsKIAl1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTsKQEAgLTQ2Miw5ICYjNDM7NDYyLDEzIEBAIHN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIAogCXJldHVybiAtRU5PREVWOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKTsKIAogc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiYjNDM7CS8qIFNlbmQgdGhlIFJvbGxCYWxsIHVubG9jayBwYXNzd29yZDsgYnJpZGdlIHByZXNlbmNlIGlzIHZlcmlmaWVkCiYjNDM7CSAqIGxhdGVyLCBpbiBzZnBfc21fcHJvYmVfZm9yX3BoeSgpLCBhZnRlciBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCiYjNDM7CSAqLwogCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAl1OCBwd1s1XTsKIAlpbnQgcmV0OwpAQCAtNDg2LDcgJiM0Mzs0OTAsNyBAQCBzdGF0aWMgaW50IGkyY19taWlfaW5pdF9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIAlpZiAocmV0ICE9IDEpCiAJCXJldHVybiAtRUlPOwogCi0JcmV0dXJuIGkyY19taWlfcHJvYmVfcm9sbGJhbGwoaTJjKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsCkBAIC01MzEsMTAgJiM0Mzs1MzUsOSBAQCBzdHJ1Y3QgbWlpX2J1cyAqbWRpb19pMmNfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKIAljYXNlIE1ESU9fSTJDX1JPTExCQUxMOgogCQlyZXQgPSBpMmNfbWlpX2luaXRfcm9sbGJhbGwoaTJjKTsKIAkJaWYgKHJldCAmbHQ7IDApIHsKLQkJCWlmIChyZXQgIT0gLUVOT0RFVikKLQkJCQlkZXZfZXJyKHBhcmVudCwKLQkJCQkJJiMzNDtDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcbiYjMzQ7LAotCQkJCQlyZXQpOwomIzQzOwkJCWRldl9lcnIocGFyZW50LAomIzQzOwkJCQkmIzM0O0Nhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxuJiMzNDssCiYjNDM7CQkJCXJldCk7CiAJCQltZGlvYnVzX2ZyZWUobWlpKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwppbmRleCAwM2JmZDg2NDBkYjk2My4uYmJmYWEwNDUwNzk4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKQEAgLTk2Myw2ICYjNDM7OTYzLDcgQEAgc3RhdGljIGludCBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBzZnAgKnNmcCkKIHN0YXRpYyB2b2lkIHNmcF9pMmNfbWRpb2J1c19kZXN0cm95KHN0cnVjdCBzZnAgKnNmcCkKIHsKIAltZGlvYnVzX3VucmVnaXN0ZXIoc2ZwLSZndDtpMmNfbWlpKTsKJiM0MzsJbWRpb2J1c19mcmVlKHNmcC0mZ3Q7aTJjX21paSk7CiAJc2ZwLSZndDtpMmNfbWlpID0gTlVMTDsKIH0KIApAQCAtMjE3MywxNyAmIzQzOzIxNzQsMTAgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybikKIAogc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcCkKIHsKLQlpbnQgcmV0OwotCiAJaWYgKHNmcC0mZ3Q7bWRpb19wcm90b2NvbCA9PSBNRElPX0kyQ19OT05FKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc2ZwKTsKLQlpZiAocmV0ID09IC1FTk9ERVYpIHsKLQkJc2ZwLSZndDttZGlvX3Byb3RvY29sID0gTURJT19JMkNfTk9ORTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7CiB9CiAKIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZCkBAIC0yMjE0LDcgJiM0MzsyMjA4LDE4IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc3RydWN0IHNmcCAqc2ZwKQogCQlicmVhazsKIAogCWNhc2UgTURJT19JMkNfUk9MTEJBTEw6Ci0JCWVyciA9IHNmcF9zbV9wcm9iZV9waHkoc2ZwLCBTRlBfUEhZX0FERFJfUk9MTEJBTEwsIHRydWUpOwomIzQzOwkJLyogUHJvYmUgaGVyZSwgYWZ0ZXIgbW9kdWxlIGluaXRpYWxpemF0aW9uIGRlbGF5cywgc28gdGhhdAomIzQzOwkJICogZ2VudWluZSBSb2xsQmFsbCBicmlkZ2VzIGhhdmUgaGFkIHRpbWUgdG8gc3RhcnQgdXAuCiYjNDM7CQkgKiBNb2R1bGVzIHdpdGhvdXQgYSBicmlkZ2UgKGUuZy4gUlRMODI2MUJFKSByZXR1cm4gLUVOT0RFVi4KJiM0MzsJCSAqLwomIzQzOwkJZXJyID0gbWRpb19pMmNfcHJvYmVfcm9sbGJhbGwoc2ZwLSZndDtpMmMpOwomIzQzOwkJaWYgKGVyciA9PSAtRU5PREVWKSB7CiYjNDM7CQkJc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3koc2ZwKTsKJiM0MzsJCQlzZnAtJmd0O21kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmggYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaAppbmRleCA2NWI1NTBhNmZjMzI5OC4uNWNmMTRmNDVjOTRiNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oCkBAIC0yMCw1ICYjNDM7MjAsNiBAQCBlbnVtIG1kaW9faTJjX3Byb3RvIHsKIAogc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCiAJCQkgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbCk7CiYjNDM7aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKIAogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IFNGUCBhbmQgTURJTyBJMkMgRHJpdmVyIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGBkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCDigJMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVmYWN0b3Jpbmcgc29tZSBvZiB0aGUgTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgYW5kIFNGUCAoU21hbGwgRm9ybS1mYWN0b3IgUGx1Z2dhYmxlKSBkcml2ZXIgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgSTJDIGNvbW11bmljYXRpb24uIFRoZSByZW5hbWluZyBvZiBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGAgdG8gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCBhbmQgZXhwb3J0aW5nIGl0IGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gVGhlbiB0aGUgY2hhbmdlIHRvIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgIG5vdCBjYWxsaW5nIHRoZSBwcm9iZSBmdW5jdGlvbiBkaXJlY3RseSBpcyBhIGJpdCBtb3JlIGludm9sdmVkLiBJdCBhcHBlYXJzIHRoZXJlIGlzIHNvbWUgcmVmYWN0b3JpbmcgYW5kIHNwbGl0dGluZyBvZiByZXNwb25zaWJpbGl0aWVzLCBhbmQgaXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIFRoZSBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIGZ1bmN0aW9uIG5vdyBjYWxsaW5nIHRoZSBuZXcsIGV4cG9ydGVkIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBkcml2ZXIgaW50ZXJhY3Rpb24gaXMgY2hhbmdpbmcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIEkgZXZlbiAqdGVzdCogdGhpcyBlZmZlY3RpdmVseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBTRlBzIGFyZSB1c3VhbGx5IHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgd2hpbGUgSSBjYW4gdXN1YWxseSBzaW11bGF0ZSBJMkMgZGV2aWNlcyB3aXRoIHRoaW5ncyBsaWtlIGkyYy1zdHViIG9yIHNpbWlsYXIsIEkmIzM5O20gbm90IHN1cmUgaWYgdGhlcmUmIzM5O3MgYSBnb29kIHdheSB0byBmdWxseSBlbXVsYXRlIG9yIGZ1enogYW4gU0ZQIG1vZHVsZSBpdHNlbGYuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIHNvbWUgd2F5IHRvIHZhbGlkYXRlIHRoaXMgcGF0Y2guCgpJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYE1ESU9fSTJDYCBhbmQgYFNGUGAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbmZpZ3VyZWQuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIGlmIHRoZXJlIGFyZSBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0ZXN0aW5nLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBhbHNvIGluZm9ybSB3aGljaCBidWlsZCBjb25maWd1cmF0aW9ucyBJIGNhbiBhbmQgc2hvdWxkIHRlc3Qgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTURJT19JMkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OTk9Y29uZmlnIE1ESU9fSElTSV9GRU1BQ1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMDUtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTA2OmNvbmZpZyBNRElPX0kyQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIE1ESU9fSTJDIFNlbGVjdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6ICp3aGF0IHNwZWNpZmljYWxseSBpcyB0cmlnZ2VyaW5nIHRoZSB1c2Ugb2YgYE1ESU9fSTJDYD8qIE15IGltbWVkaWF0ZSBtZW50YWwgcHJvY2VzcyBoZXJlIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb2RlIHBhdGhzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbGVhZCB0byB0aGlzIHNlbGVjdGlvbi4gSSYjMzk7bSBub3QgbG9va2luZyBmb3IgYSBnZW5lcmFsIG92ZXJ2aWV3OyBJIG5lZWQgdG8gZHJpbGwgZG93biB0byB0aGUgc3BlY2lmaWMgZHJpdmVycywgYm9hcmQgZmlsZXMsIG9yIGRldmljZSB0cmVlIGVudHJpZXMgdGhhdCBhcmUgcmVzcG9uc2libGUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCByZWdpc3RlciBzZXR0aW5ncywgdGhlIHBvd2VyIG1hbmFnZW1lbnQgc2VxdWVuY2UsIG9yIHBlcmhhcHMgZXZlbiBhIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgcGFydGljdWxhciBjaG9pY2UsIG5vdCBqdXN0ICp0aGF0KiBpdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciB1bmRlcnN0YW5kIGV4aXN0aW5nIGJlaGF2aW9yIG9yIHBvc3NpYmx5IGRlYnVnIGEgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTURJT19JMkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NzM9Y29uZmlnIFNGUFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTc2LVx0ZGVwZW5kcyBvbiBIV01PTiB8fCBIV01PTj1uXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3NzpcdHNlbGVjdCBNRElPX0kyQ1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYENPTkZJR19TRlBgIGRlZmluZSwgYW5kIGl0JiMzOTtzIHBvaW50aW5nIG1lIHRvd2FyZCBgTURJT19JMkNgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBndXQgdGVsbHMgbWUgdGhhdCBgQ09ORklHX1NGUGAgaXMgbGlrZWx5IGEgZ2F0aW5nIG1lY2hhbmlzbSBvciBzZWxlY3Rpb24gZm9yIHRoZSBJMkMtYmFzZWQgTURJTyBkcml2ZXIsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgU0ZQIHRyYW5zY2VpdmVycywgZXNwZWNpYWxseSBpZiB0aGUgaGFyZHdhcmUgdXNlcyBJMkMgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gb24gdGhhdCBgQ09ORklHX1NGUGAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kLCBjcml0aWNhbGx5LCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBJcyBpdCB0aGUgcHJpbWFyeSBkcml2ZXIgc2VsZWN0aW9uIG9yIHBlcmhhcHMgYSBmbGFnIHRvIHN1cHBvcnQgYSBzcGVjaWZpYyBTRlAgbW9kdWxlIHZhcmlhbnQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzb3VyY2UgY29kZSB3aGVyZSBgQ09ORklHX1NGUGAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igb3RoZXIgYXNzb2NpYXRlZCBkZWZpbmVzIGFuZCBhbnkgY29uZGl0aW9uYWxzIHRoYXQgaW1wYWN0IHdoaWNoIGRyaXZlciBvciBzdWJzeXN0ZW0gaXMgdWx0aW1hdGVseSBlbmFibGVkLiBJIHN1c3BlY3QgaXQmIzM5O3MgdGhlIHRpcCBvZiB0aGUgaWNlYmVyZyBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBTRlAvTURJTyBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0ZQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzkzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBrbm93bGVkZ2VhYmxlIGluIHRoZSBmaWVsZDoKCioqRnV6emluZyB0aGUgU0ZQIE1vZHVsZTogSW5pdGlhbCBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSBlZmZlY3RpdmVseSBmdXp6IGFuIFNGUCBtb2R1bGU/IEl0JiMzOTtzIGEgdmFsaWQgdGFyZ2V0LiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0LCB5ZXMsIGl0IHNob3VsZCBiZSBhIHdvcnRod2hpbGUgZW5kZWF2b3IsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGF0dGFjayBzdXJmYWNlIGl0IHByZXNlbnRzLiBHaXZlbiB0aGF0IG15IGZpZWxkIGlzIHNlY3VyaXR5LCB0aGlzIGlzIHNvbWV0aGluZyBJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZC4KClRoaW5raW5nIGFib3V0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgU0ZQIG1vZHVsZXMgdXNlIEkyQyBhbmQgR1BJT3MgZm9yIGNvbW11bmljYXRpb24uIFRoZSBJMkMgaW50ZXJmYWNlIGlzIGEgc3RhbmRhcmQgdHdvLXdpcmUgc2VyaWFsIHByb3RvY29sIGNvbW1vbmx5IHVzZWQgZm9yIGFjY2Vzc2luZyBkZXZpY2UgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYW5kIG90aGVyIGNvbnRyb2wgZnVuY3Rpb25zLiBHUElPcywgb24gdGhlIG90aGVyIGhhbmQsIGFsbG93IGZvciBnZW5lcmFsLXB1cnBvc2UgZGlnaXRhbCBpbnB1dC9vdXRwdXQgb3BlcmF0aW9ucy4gVGhlcmVmb3JlIHRoZXNlIGludGVyZmFjZXMgb2ZmZXIgYSB3YXkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlIGFuZCBhcmUgdGhlcmVmb3JlIG9mIGludGVyZXN0IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4KClNvLCB3aGVyZSBkbyB3ZSBzdGFydD8gSSYjMzk7ZCBpbW1lZGlhdGVseSBqdW1wIGludG8gdGhlIHJlbGV2YW50IGRyaXZlciBjb2RlIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7ZCB3YW50IHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgU0ZQIG1vZHVsZSBhdCBhIGxvdyBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGUgSTJDIGFuZCBHUElPIGludGVyYWN0aW9ucywgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsbHkgdW5leHBlY3RlZCBkYXRhIG9yIHNlcXVlbmNlcywgaXMgY3J1Y2lhbCBmb3IgZGV2aXNpbmcgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zZnAuYz0zMjU3PXN0YXRpYyBpbnQgc2ZwX2kyY19nZXQoc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjgyLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjMyODM6c3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjg0LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzQ2NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjM0NjY6XHQucHJvYmUgPSBzZnBfcHJvYmUsXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ2Ny1cdC5yZW1vdmUgPSBzZnBfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzM5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGxhdGZvcm0gRHJpdmVyIGFuZCBTeXprYWxsZXImIzM5O3MgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBhIHBsYXRmb3JtIGRyaXZlci4gRmlyc3QgdGhvdWdodDogQ2FuIHRoaXMgYmUgaW5zdGFudGlhdGVkIHZpYSB0aGUgZGV2aWNlIHRyZWUsIG9yIGlzIGl0IGdvaW5nIHRvIHJlbHkgb24gc3lzZnM/IFBsYXRmb3JtIGRyaXZlcnMgKnVzdWFsbHkqIGhhdmUgYSBkZXZpY2UgdHJlZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLCBvciwgaWYgaXQgd2FzIGFuIEkyQyBkZXZpY2UsIHlvdSBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBvbmUgdmlhIHN5c2ZzLCBidXQgdGhpcyBpcyBhICpwbGF0Zm9ybSogZGV2aWNlLgoKSGFuZyBvbi4uLiBkb2VzIHN5emthbGxlciBoYXZlIGFueSBzcGVjaWZpYyBtZWNoYW5pc21zIHRvIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzIGRpcmVjdGx5PyBJIGtub3cgaXQgZG9lcyB0aGluZ3Mgd2l0aCBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgbmV0bGluayBmb3IgY2VydGFpbiBpbnRlcmFjdGlvbnMsIGFuZCBzeXNmcyBmb3Igc29tZSBidXNlcywgYnV0IEkgY2FuJiMzOTt0IGltbWVkaWF0ZWx5IHJlY2FsbCBhIGRlZGljYXRlZCBwbGF0Zm9ybSBpbmplY3Rpb24gbWV0aG9kLiBEb2VzIHN5emthbGxlciBvZmZlciBzb21ldGhpbmcgbGlrZSBgc3l6X2Rldl9wbGF0Zm9ybV9hZGRgPyBObywgdGhhdCBkb2VzbiYjMzk7dCBzb3VuZCByaWdodC4KCkFoLCB3YWl0LiBJdCAqY2FuKiBmdXp6IEkyQyB2aWEgYC9kZXYvaTJjLSpgIGlmIGVpdGhlciBgaTJjLXN0dWJgIG9yIGBpMmMtZGV2YCBhcmUgcHJlc2VudCwgYnV0IHRoZSBjYXRjaCBpcyB0aGF0IHRoaXMgcGxhdGZvcm0gZGV2aWNlLCB0aGUgYHNmcGAsIHV0aWxpemVzIEkyQy4KClNvLCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGhhcyBleGlzdGluZyBkZXNjcmlwdGlvbnMgb3Iga25vd2xlZGdlIG9mIHRoZSBTRlAgZGV2aWNlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhpc3RpbmcgZGVzY3JpcHRpb25zIGZvciBTRlAgd2l0aGluIHN5emthbGxlciYjMzk7cyBmcmFtZXdvcmsuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL2VlcHJvbS5jLTMtI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG5uZXQvZXRodG9vbC9lZXByb20uYzo0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NmcC5oXHUwMDNlXG5uZXQvZXRodG9vbC9lZXByb20uYy01LVxuLS1cbm5ldC9ldGh0b29sL2VlcHJvbS5jPTkyPXN0YXRpYyBpbnQgZ2V0X21vZHVsZV9lZXByb21fYnlfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9ldGh0b29sL2VlcHJvbS5jLTEwMy1cbm5ldC9ldGh0b29sL2VlcHJvbS5jOjEwNDpcdGlmIChkZXYtXHUwMDNlc2ZwX2J1cylcbm5ldC9ldGh0b29sL2VlcHJvbS5jOjEwNTpcdFx0cmV0dXJuIHNmcF9nZXRfbW9kdWxlX2VlcHJvbV9ieV9wYWdlKGRldi1cdTAwM2VzZnBfYnVzLCBwYWdlX2RhdGEsIGV4dGFjayk7XG5uZXQvZXRodG9vbC9lZXByb20uYy0xMDYtXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2Vcbm5ldC9ldGh0b29sL2lvY3RsLmM6MjM6I2luY2x1ZGUgXHUwMDNjbGludXgvc2ZwLmhcdTAwM2Vcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0yODY0PWludCBldGh0b29sX2dldF9tb2R1bGVfaW5mb19jYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0yODcyLVxubmV0L2V0aHRvb2wvaW9jdGwuYzoyODczOlx0aWYgKGRldi1cdTAwM2VzZnBfYnVzKVxubmV0L2V0aHRvb2wvaW9jdGwuYzoyODc0Olx0XHRyZXR1cm4gc2ZwX2dldF9tb2R1bGVfaW5mbyhkZXYtXHUwMDNlc2ZwX2J1cywgbW9kaW5mbyk7XG5uZXQvZXRodG9vbC9pb2N0bC5jLTI4NzUtXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYz0yOTA0PWludCBldGh0b29sX2dldF9tb2R1bGVfZWVwcm9tX2NhbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI5MTItXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI5MTM6XHRpZiAoZGV2LVx1MDAzZXNmcF9idXMpXG5uZXQvZXRodG9vbC9pb2N0bC5jOjI5MTQ6XHRcdHJldHVybiBzZnBfZ2V0X21vZHVsZV9lZXByb20oZGV2LVx1MDAzZXNmcF9idXMsIGVlLCBkYXRhKTtcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjkxNS1cbi0tXG5uZXQvZXRodG9vbC9tb2R1bGUuYy00LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2Vcbm5ldC9ldGh0b29sL21vZHVsZS5jOjU6I2luY2x1ZGUgXHUwMDNjbGludXgvc2ZwLmhcdTAwM2Vcbm5ldC9ldGh0b29sL21vZHVsZS5jLTYtI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxubmV0L2V0aHRvb2wvcGh5LmM6ODojaW5jbHVkZSBcdTAwM2NsaW51eC9zZnAuaFx1MDAzZVxubmV0L2V0aHRvb2wvcGh5LmMtOS0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuLS1cbm5ldC9ldGh0b29sL3BoeS5jPTE4PXN0cnVjdCBwaHlfcmVwbHlfZGF0YSB7XG4tLVxubmV0L2V0aHRvb2wvcGh5LmMtMjMtXHR1bnNpZ25lZCBpbnQgdXBzdHJlYW1fdHlwZTtcbm5ldC9ldGh0b29sL3BoeS5jOjI0Olx0Y2hhciAqdXBzdHJlYW1fc2ZwX25hbWU7XG5uZXQvZXRodG9vbC9waHkuYy0yNS1cdHVuc2lnbmVkIGludCB1cHN0cmVhbV9pbmRleDtcbm5ldC9ldGh0b29sL3BoeS5jOjI2Olx0Y2hhciAqZG93bnN0cmVhbV9zZnBfbmFtZTtcbm5ldC9ldGh0b29sL3BoeS5jLTI3LX07XG4tLVxubmV0L2V0aHRvb2wvcGh5LmM9MzY9c3RhdGljIGludCBwaHlfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTU1LVx0LyogRVRIVE9PTF9BX1BIWV9VUFNUUkVBTV9TRlBfTkFNRSAqL1xubmV0L2V0aHRvb2wvcGh5LmM6NTY6XHRpZiAocmVwX2RhdGEtXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUpXG5uZXQvZXRodG9vbC9waHkuYzo1NzpcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc3RybGVuKHJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKSAmIzQzOyAxKTtcbm5ldC9ldGh0b29sL3BoeS5jLTU4LVxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTYzLVx0LyogRVRIVE9PTF9BX1BIWV9ET1dOU1RSRUFNX1NGUF9OQU1FICovXG5uZXQvZXRodG9vbC9waHkuYzo2NDpcdGlmIChyZXBfZGF0YS1cdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKVxubmV0L2V0aHRvb2wvcGh5LmM6NjU6XHRcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHN0cmxlbihyZXBfZGF0YS1cdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSAmIzQzOyAxKTtcbm5ldC9ldGh0b29sL3BoeS5jLTY2LVxuLS1cbm5ldC9ldGh0b29sL3BoeS5jPTcwPXN0YXRpYyBpbnQgcGh5X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuLS1cbm5ldC9ldGh0b29sL3BoeS5jLTExMC1cbm5ldC9ldGh0b29sL3BoeS5jOjExMTpcdGlmIChwZG4tXHUwMDNlcGFyZW50X3NmcF9idXMpIHtcbm5ldC9ldGh0b29sL3BoeS5jOjExMjpcdFx0cmVwX2RhdGEtXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUgPSBrc3RyZHVwKHNmcF9nZXRfbmFtZShwZG4tXHUwMDNlcGFyZW50X3NmcF9idXMpLFxubmV0L2V0aHRvb2wvcGh5LmMtMTEzLVx0XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvcGh5LmM6MTE0Olx0XHRpZiAoIXJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKSB7XG5uZXQvZXRodG9vbC9waHkuYy0xMTUtXHRcdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5uZXQvZXRodG9vbC9waHkuYy0xMTktXG5uZXQvZXRodG9vbC9waHkuYzoxMjA6XHRpZiAocGh5ZGV2LVx1MDAzZXNmcF9idXMpIHtcbm5ldC9ldGh0b29sL3BoeS5jOjEyMTpcdFx0cmVwX2RhdGEtXHUwMDNlZG93bnN0cmVhbV9zZnBfbmFtZSA9IGtzdHJkdXAoc2ZwX2dldF9uYW1lKHBoeWRldi1cdTAwM2VzZnBfYnVzKSxcbm5ldC9ldGh0b29sL3BoeS5jLTEyMi1cdFx0XHRcdFx0XHRcdEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvcGh5LmM6MTIzOlx0XHRpZiAoIXJlcF9kYXRhLVx1MDAzZWRvd25zdHJlYW1fc2ZwX25hbWUpIHtcbm5ldC9ldGh0b29sL3BoeS5jLTEyNC1cdFx0XHRyZXQgPSAtRU5PTUVNO1xubmV0L2V0aHRvb2wvcGh5LmM6MTI1Olx0XHRcdGdvdG8gZXJyX2ZyZWVfdXBzdHJlYW1fc2ZwO1xubmV0L2V0aHRvb2wvcGh5LmMtMTI2LVx0XHR9XG4tLVxubmV0L2V0aHRvb2wvcGh5LmMtMTMwLVxubmV0L2V0aHRvb2wvcGh5LmM6MTMxOmVycl9mcmVlX3Vwc3RyZWFtX3NmcDpcbm5ldC9ldGh0b29sL3BoeS5jOjEzMjpcdGtmcmVlKHJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKTtcbm5ldC9ldGh0b29sL3BoeS5jLTEzMy1lcnJfZnJlZV9kcnZuYW1lOlxuLS1cbm5ldC9ldGh0b29sL3BoeS5jPTE0MD1zdGF0aWMgaW50IHBoeV9maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2V0aHRvb2wvcGh5LmMtMTU5LVxubmV0L2V0aHRvb2wvcGh5LmM6MTYwOlx0aWYgKHJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lIFx1MDAyNlx1MDAyNlxubmV0L2V0aHRvb2wvcGh5LmMtMTYxLVx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX1BIWV9VUFNUUkVBTV9TRlBfTkFNRSxcbm5ldC9ldGh0b29sL3BoeS5jOjE2MjpcdFx0XHQgICByZXBfZGF0YS1cdTAwM2V1cHN0cmVhbV9zZnBfbmFtZSkpXG5uZXQvZXRodG9vbC9waHkuYy0xNjMtXHRcdHJldHVybiAtRU1TR1NJWkU7XG5uZXQvZXRodG9vbC9waHkuYy0xNjQtXG5uZXQvZXRodG9vbC9waHkuYzoxNjU6XHRpZiAocmVwX2RhdGEtXHUwMDNlZG93bnN0cmVhbV9zZnBfbmFtZSBcdTAwMjZcdTAwMjZcbm5ldC9ldGh0b29sL3BoeS5jLTE2Ni1cdCAgICBubGFfcHV0X3N0cmluZyhza2IsIEVUSFRPT0xfQV9QSFlfRE9XTlNUUkVBTV9TRlBfTkFNRSxcbm5ldC9ldGh0b29sL3BoeS5jOjE2NzpcdFx0XHQgICByZXBfZGF0YS1cdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSlcbm5ldC9ldGh0b29sL3BoeS5jLTE2OC1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbi0tXG5uZXQvZXRodG9vbC9waHkuYz0xNzM9c3RhdGljIHZvaWQgcGh5X2NsZWFudXBfZGF0YShzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcbi0tXG5uZXQvZXRodG9vbC9waHkuYy0xNzgtXHRrZnJlZShyZXBfZGF0YS1cdTAwM2VuYW1lKTtcbm5ldC9ldGh0b29sL3BoeS5jOjE3OTpcdGtmcmVlKHJlcF9kYXRhLVx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKTtcbm5ldC9ldGh0b29sL3BoeS5jOjE4MDpcdGtmcmVlKHJlcF9kYXRhLVx1MDAzZWRvd25zdHJlYW1fc2ZwX25hbWUpO1xubmV0L2V0aHRvb2wvcGh5LmMtMTgxLX1cbi0tXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM9MTg9c3RhdGljIGludFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjE5Omhzcl9ub2RlX3RhYmxlX3Nob3coc3RydWN0IHNlcV9maWxlICpzZnAsIHZvaWQgKmRhdGEpXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjAte1xubmV0L2hzci9oc3JfZGVidWdmcy5jOjIxOlx0c3RydWN0IGhzcl9wcml2ICpwcml2ID0gKHN0cnVjdCBoc3JfcHJpdiAqKXNmcC1cdTAwM2Vwcml2YXRlO1xubmV0L2hzci9oc3JfZGVidWdmcy5jLTIyLVx0c3RydWN0IGhzcl9ub2RlICpub2RlO1xubmV0L2hzci9oc3JfZGVidWdmcy5jLTIzLVxubmV0L2hzci9oc3JfZGVidWdmcy5jOjI0Olx0c2VxX3ByaW50ZihzZnAsIFwmIzM0O05vZGUgVGFibGUgZW50cmllcyBmb3IgKCVzKSBkZXZpY2VcXG5cJiMzNDssXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjUtXHRcdCAgIChwcml2LVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgPyBcJiMzNDtQUlBcJiMzNDsgOiBcJiMzNDtIU1JcJiMzNDspKTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoyNjpcdHNlcV9wdXRzKHNmcCwgXCYjMzQ7TUFDLUFkZHJlc3MtQSwgICAgTUFDLUFkZHJlc3MtQiwgICAgdGltZV9pbltBXSwgXCYjMzQ7KTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoyNzpcdHNlcV9wdXRzKHNmcCwgXCYjMzQ7dGltZV9pbltCXSwgQWRkcmVzcy1CIHBvcnQsIFwmIzM0Oyk7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjgtXHRpZiAocHJpdi1cdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxubmV0L2hzci9oc3JfZGVidWdmcy5jOjI5Olx0XHRzZXFfcHV0cyhzZnAsIFwmIzM0O1NBTi1BLCBTQU4tQiwgREFOLVBcXG5cJiMzNDspO1xubmV0L2hzci9oc3JfZGVidWdmcy5jLTMwLVx0ZWxzZVxubmV0L2hzci9oc3JfZGVidWdmcy5jOjMxOlx0XHRzZXFfcHV0cyhzZnAsIFwmIzM0O0RBTi1IXFxuXCYjMzQ7KTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy0zMi1cbi0tXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMzctXHRcdFx0Y29udGludWU7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6Mzg6XHRcdHNlcV9wcmludGYoc2ZwLCBcJiMzNDslcE0gXCYjMzQ7LCBcdTAwMjZub2RlLVx1MDAzZW1hY2FkZHJlc3NfQVswXSk7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6Mzk6XHRcdHNlcV9wcmludGYoc2ZwLCBcJiMzNDslcE0gXCYjMzQ7LCBcdTAwMjZub2RlLVx1MDAzZW1hY2FkZHJlc3NfQlswXSk7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6NDA6XHRcdHNlcV9wcmludGYoc2ZwLCBcJiMzNDslMTBseCwgXCYjMzQ7LCBub2RlLVx1MDAzZXRpbWVfaW5bSFNSX1BUX1NMQVZFX0FdKTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzo0MTpcdFx0c2VxX3ByaW50ZihzZnAsIFwmIzM0OyUxMGx4LCBcJiMzNDssIG5vZGUtXHUwMDNldGltZV9pbltIU1JfUFRfU0xBVkVfQl0pO1xubmV0L2hzci9oc3JfZGVidWdmcy5jOjQyOlx0XHRzZXFfcHJpbnRmKHNmcCwgXCYjMzQ7JTE0eCwgXCYjMzQ7LCBub2RlLVx1MDAzZWFkZHJfQl9wb3J0KTtcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy00My1cbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy00NC1cdFx0aWYgKHByaXYtXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSlcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzo0NTpcdFx0XHRzZXFfcHJpbnRmKHNmcCwgXCYjMzQ7JTV4LCAlNXgsICU1eFxcblwmIzM0Oyxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy00Ni1cdFx0XHRcdCAgIG5vZGUtXHUwMDNlc2FuX2EsIG5vZGUtXHUwMDNlc2FuX2IsXG4tLVxubmV0L2hzci9oc3JfZGVidWdmcy5jLTQ4LVx0XHRlbHNlXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6NDk6XHRcdFx0c2VxX3ByaW50ZihzZnAsIFwmIzM0OyU1eFxcblwmIzM0OywgMSk7XG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtNTAtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBmdW5jdGlvbi4gUmlnaHQsIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBpcyBwcm9iaW5nIGZvciBhIFBIWS4gVGhhdCBtYWtlcyBpdCBhIHBoeXNpY2FsIG1vZHVsZSwgYSBoYXJkd2FyZSBpbnRlcmZhY2UuIENhbiBJIHJlYWNoIHRoaXMgdGhpbmcgdGhyb3VnaCBzeXprYWxsZXI/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4KClN5emthbGxlciBjYW4gc2ltdWxhdGUgSTJDIGRldmljZXMgd2l0aCBgaTJjLXN0dWJgLCBidXQgU0ZQIGlzIGEgcGxhdGZvcm0gZGV2aWNlLiBDYW4gSSBzb21laG93IGNyZWF0ZSBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHVzaW5nIFN5emthbGxlciBkaXJlY3RseT8gSSYjMzk7bGwgbmVlZCBhIHdheSB0byBpbnN0YW50aWF0ZSB0aGF0IGBzZnBgIGRyaXZlci4KCkxldCBtZSBzZWXigKYgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AsIHRoZXJlJiMzOTtzIGBzZnBfcHJvYmVgLCBhbmQgaXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGBwbGF0Zm9ybV9kcml2ZXIgc2ZwX2RyaXZlcmAuIFNvLCBwbGF0Zm9ybSBkZXZpY2VzIGNhbiBiZSBjcmVhdGVkIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cywgb3IgbWF5YmUgYW5vdGhlciBkcml2ZXIgZHluYW1pY2FsbHkgY3JlYXRlcyB0aGVtIGF0IHJ1bnRpbWUuCgpXYWl0IGEgbWludXRlLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGp1c3QgKmNyZWF0ZSogcGxhdGZvcm0gZGV2aWNlcywgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgc3l6Ym90IHBzZXVkby1kZXZpY2UgZGVmaW5lZCBmb3IgaXQsIG9yIG1heWJlIGl0JiMzOTtzIGV4cG9zZWQgdGhyb3VnaCBzb21lIG5ldGxpbmsgb3Igc3lzZnMgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4KCkhtbSwgd2hhdCBhYm91dCBzb21ldGhpbmcgbGlrZSBgbWFjc2VjYCBvciBgdmV0aGA/IENvdWxkIHRoZXkgYmUgcmVzcG9uc2libGUgZm9yIGluc3RhbnRpYXRpbmcgdGhlIFNGUCBtb2R1bGUgaW4gc29tZSB3YXk/IE5vLCBTRlAgaXMgYSAqcGh5c2ljYWwqIGNhZ2UsIHNvIHRoYXQmIzM5O3Mgbm90IGxpa2VseS4KCk9rYXksIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgc2l0dWF0aW9uLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gSSYjMzk7bGwgY2hlY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpjYWxsZXJzKiBvZiBgc2ZwX3Byb2JlYCwgb3IgaWYgaXQmIzM5O3Mgb25seSBldmVyIGluc3RhbnRpYXRlZCB2aWEgdGhlIERldmljZSBUcmVlIG9yIEFDUEkuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBpZGVhIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIGJlIGJyb3VnaHQgaW50byBleGlzdGVuY2UsIGFuZCB0aGF0IHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hldGhlciBJIGNhbiBleHBsb2l0IGEgbWV0aG9kIGZvciBpbnN0YW50aWF0aW5nIG9uZSB0aHJvdWdoIFN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTIxNjA9aW50IGl4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTY4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjE2OTogKiBpeGdiZV9pc19zZnBfcHJvYmUgLSBSZXR1cm5zIHRydWUgaWYgU0ZQIGlzIGJlaW5nIGRldGVjdGVkXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTcwLSAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTczLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjE3NDpzdGF0aWMgYm9vbCBpeGdiZV9pc19zZnBfcHJvYmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggb2Zmc2V0LCB1OCBhZGRyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE5ND1zdGF0aWMgaW50IGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpY19pbnQoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjIwNC1cdFx0bWF4X3JldHJ5ID0gMztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIyMDU6XHRpZiAoaXhnYmVfaXNfc2ZwX3Byb2JlKGh3LCBieXRlX29mZnNldCwgZGV2X2FkZHIpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjIwNi1cdFx0bWF4X3JldHJ5ID0gSVhHQkVfU0ZQX0RFVEVDVF9SRVRSSUVTO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwMy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzUwOD1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUyMi1cdGlmICghcGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4pIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUyMzpcdFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTI0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0zMjU3PXN0YXRpYyBpbnQgc2ZwX2kyY19nZXQoc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjgyLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjMyODM6c3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjg0LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzQ2NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjM0NjY6XHQucHJvYmUgPSBzZnBfcHJvYmUsXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ2Ny1cdC5yZW1vdmUgPSBzZnBfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYz0zOT1zdGF0aWMgc3RydWN0IG52bWVtX2NvbmZpZyBsYXllcnNjYXBlX3NmcF9udm1lbV9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jLTQ1LVxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jOjQ2OnN0YXRpYyBpbnQgbGF5ZXJzY2FwZV9zZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYy00Ny17XG4tLVxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jPTk4PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxheWVyc2NhcGVfc2ZwX2RyaXZlciA9IHtcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYzo5OTpcdC5wcm9iZVx0PSBsYXllcnNjYXBlX3NmcF9wcm9iZSxcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYy0xMDAtXHQuZHJpdmVyID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBQSFkgRGV2aWNlIFByb2JpbmcgZm9yIFNGUHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgcGh5X3NmcF9wcm9iZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgd2UmIzM5O3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFuIFNGUCBjYWdlIGhhbmdpbmcgb2ZmIG9mIGEgUEhZIGRldmljZS4gU28sIHRoZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCB3aGF0IGRvZXMgdGhlIHByb2JlIHJvdXRpbmUgYWN0dWFsbHkgZG8sIGFuZCB3aGF0IGFyZSB0aGUgdHJpZ2dlcnMgdGhhdCBjYXVzZSB0aGlzIHByb2JlPyBMZXQmIzM5O3MgcGVlbCBiYWNrIHRoZSBsYXllcnMgYW5kIGFuYWx5emUgdGhpcyBtb3JlIGNsb3NlbHkuIEkgZXhwZWN0IGl0JiMzOTtsbCBpbnZvbHZlIGNoZWNraW5nIHNvbWUgcmVnaXN0ZXJzIGFuZCB1c2luZyBzb21lIHZlbmRvci1zcGVjaWZpYyBpZGVudGlmaWNhdGlvbiBsb2dpYy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZCBpbiB0aGUgc291cmNlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9zZnBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwMy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDYtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzUwOD1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUyMi1cdGlmICghcGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4pIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUyMzpcdFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTI0LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipBbmFseXppbmcgYHBoeV9zZnBfcHJvYmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0IHRoaXMgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uIGlzIGFsbCBhYm91dC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBTRlAvUEhZIGluaXRpYWxpemF0aW9uIGFuZCBkaXNjb3ZlcnkgcHJvY2Vzcy4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZvbHZlZCBpbiBwcm9iaW5nIG9yIGRldGVjdGluZyB0aGUgcHJlc2VuY2UgYW5kIHBlcmhhcHMgdGhlIGNhcGFiaWxpdGllcyBvZiBhIHBoeXNpY2FsIGxheWVyIChQSFkpIGRldmljZSB0aGF0JiMzOTtzIGFzc29jaWF0ZWQgd2l0aCBhbiBTRlAgKFNtYWxsIEZvcm0tZmFjdG9yIFBsdWdnYWJsZSkgbW9kdWxlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFyZHdhcmUgZGV0ZWN0aW9uLCBwb3RlbnRpYWxseSB1c2luZyBzcGVjaWZpYyBTRlAgbW9kdWxlIGluZm9ybWF0aW9uIG9yIHNwZWNpZmljIHJlZ2lzdGVyIHJlYWRvdXRzLCB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIFBIWSBpcyBjb25uZWN0ZWQgYW5kIGhvdyBpdCBzaG91bGQgYmUgY29uZmlndXJlZC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBhc3BlY3RzIGxpa2UgdGhlIFNGUCYjMzk7cyBwcmVzZW5jZSBkZXRlY3Rpb24sIHBvd2VyIHNlcXVlbmNpbmcsIGFuZCwgcG90ZW50aWFsbHksIHRoZSByZWFkaW5nIG9mIFNGUCYjMzk7cyBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByZWdpc3RlcnMgaXQmIzM5O3MgYWNjZXNzaW5nLCB3aGF0IEkyQyBvciBvdGhlciBwcm90b2NvbHMgaXQgbWF5IGJlIHVzaW5nLCBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIGludGVycHJldGluZyB0byBkZXRlcm1pbmUgdGhlIFBIWSYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MuIEFsc28sIHdoYXQgdHlwZXMgb2YgUEhZcyBkb2VzIGl0IGhhbmRsZT8gQW55IHNwZWNpZmljIHZlbmRvciBjb25zaWRlcmF0aW9ucz8gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZSBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MDc6XHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjE3MDg6XHR7XG4xNzA5Olx0XHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xuMTcxMDpcdFx0aW50IHJldCA9IDA7XG4xNzExOlx0XG4xNzEyOlx0XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSkge1xuMTcxMzpcdFx0XHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpO1xuMTcxNDpcdFx0XHRpZiAoSVNfRVJSKGJ1cykpXG4xNzE1Olx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcbjE3MTY6XHRcbjE3MTc6XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG4xNzE4Olx0XG4xNzE5Olx0XHRcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4xNzIwOlx0XHRcdHNmcF9idXNfcHV0KGJ1cyk7XG4xNzIxOlx0XG4xNzIyOlx0XHRcdGlmIChyZXQpXG4xNzIzOlx0XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuMTcyNDpcdFx0fVxuMTcyNTpcdFxuMTcyNjpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuMTcyNzpcdFx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbjE3Mjg6XHRcbjE3Mjk6XHRcdHJldHVybiByZXQ7XG4xNzMwOlx0fVxuMTczMTpcdFxuMTczMjpcdHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4xNzMzOlx0e1xuMTczNDpcdFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4xNzM1Olx0fVxuMTczNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFNGUCBEZXZpY2UgSW5zdGFudGlhdGlvbiBmb3IgVGVzdGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgYW4gU0ZQIGJ1cywgc3BlY2lmaWNhbGx5IHRoZSBgc2ZwX2J1c2AsIGdldHMgY3JlYXRlZC4gVGhlIHRleHQgaW5kaWNhdGVzIGl0JiMzOTtzIHR5cGljYWxseSBkb25lIHRocm91Z2ggdGhlIGBmd25vZGVgIChkZXZpY2UgdHJlZSBvciBBQ1BJKSBtZWNoYW5pc20sIGFuZCB0aGUgYHNmcGAgcGxhdGZvcm0gZHJpdmVyIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGluc3RhbnRpYXRpbmcgdGhlIGBzZnBfYnVzYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB3aGV0aGVyIHRoZXJlJiMzOTtzIGEgcmVsaWFibGUgd2F5IHRvIGdldCBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHVwIGFuZCBydW5uaW5nIGluIGEgdGVzdCBlbnZpcm9ubWVudCwgcGFydGljdWxhcmx5IHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHVwLCB3aXRob3V0IHJlc29ydGluZyB0byBjdXN0b20gZGV2aWNlIHRyZWUgb3ZlcmxheXMuCgpUaGUgcXVlc3Rpb24gb2Ygd2hldGhlciBJIGNhbiBpbml0aWF0ZSB0aGlzIGZyb20gdXNlcnNwYWNlLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgcHJvZ3JhbW1hdGljIHdheSB0byBkbyBpdC4KCkdpdmVuIHN5emthbGxlciYjMzk7cyByb2xlIGluIHRoaXMsIGFuZCB0aGF0IGl0IGRvZXNuJiMzOTt0IGdlbmVyYWxseSBsZXZlcmFnZSBkZXZpY2UgdHJlZSBvdmVybGF5cywgbXkgdGhvdWdodHMgcXVpY2tseSB0dXJuZWQgdG8gd2hldGhlciBJIGNvdWxkIGxldmVyYWdlIGFueSBleGlzdGluZyBzeXprYWxsZXIgZmVhdHVyZXMgbGlrZSB0aGUgYHN5c2ZzYCBvciBgY29uZmlnZnNgIGludGVyZmFjZXMgZm9yIHRoaXMgcHVycG9zZS4gQnV0IHRoZW4gSSByZWNhbGxlZCB0aGF0IGl0IGRvZXNuJiMzOTt0IHByb3ZpZGUgZ2VuZXJpYyBzdXBwb3J0IGZvciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcywgdW5sZXNzIHRoZXJlJiMzOTtzIGEgZHJpdmVyIGFscmVhZHkgaW4gcGxhY2UgdGhhdCBleHBvc2VzIHNvbWV0aGluZy4gVGhhdCB3b24mIzM5O3QgZG8gaGVyZS4KClRoZW4sIGEgZmxpY2tlciBvZiBhbiBpZGVhOiB3aGF0IGFib3V0IHRoZSBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGAgZnVuY3Rpb24/IFRoYXQgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIE1heWJlIHRoaXMgaXMgYSByZWxldmFudCBwYXRod2F5LiBJcyBgc2ZwLmNgIGFjdHVhbGx5IHJlYWNoYWJsZT8gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGZvciBhbnkgb3RoZXIgY2FsbGVycyBvZiBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIGluIHRoZSBjb2RlYmFzZS4gVGhhdCBtaWdodCBnaXZlIG1lIGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGlzIHByb2JlIGZ1bmN0aW9uIGdldHMgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciB0cmlnZ2VyaW5nIHRoZSBTRlAgZGV2aWNlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvX2kyY19wcm9iZV9yb2xsYmFsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM9MzkzPXN0YXRpYyBpbnQgaTJjX21paV93cml0ZV9yb2xsYmFsbChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgZGV2YWQsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQyMS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo0MjI6aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQyMy17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQ2NC19XG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM6NDY1OkVYUE9SVF9TWU1CT0xfR1BMKG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy00NjYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxOTQ9c3RhdGljIGludCBzZnBfc21fcHJvYmVfZm9yX3BoeShzdHJ1Y3Qgc2ZwICpzZnApXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMTQtXHRcdCAqL1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIyMTU6XHRcdGVyciA9IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHNmcC1cdTAwM2VpMmMpO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMTYtXHRcdGlmIChlcnIgPT0gLUVOT0RFVikge1xuLS1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oPTIxPXN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmgtMjItXHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpO1xuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg6MjM6aW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTtcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFNGUCBEZXZpY2UgSW50ZXJhY3Rpb24gd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBJIGNhbiBnZXQgU3l6a2FsbGVyIHRvIGludGVyYWN0IHdpdGggYW4gU0ZQIGNhZ2UuIFRoZSBvbmx5IGZ1bmN0aW9uIEkgc2VlIGNhbGxpbmcgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBpcyBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCB3aGljaCBpcyBhIHByb21pc2luZyBsZWFkLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgdGhpcyBzdGF0ZSBtYWNoaW5lIHdpdGggU3l6a2FsbGVyPwoKVGhlIHN0YXRlIG1hY2hpbmUgbmVlZHMgYW4gU0ZQIHBsYXRmb3JtIGRldmljZSB0byBleGlzdC4gQ2FuIFN5emthbGxlciBjcmVhdGUgb25lIG9mIHRob3NlPyBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHVzaW5nIGAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzX3Byb2JlYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYnV0IHRoYXQgd29uJiMzOTt0IHdvcmsg4oCTIGl0IG5lZWRzIGFuIGV4aXN0aW5nIGRldmljZS4gSSBjaGVja2VkIGlmIGBzeXpfZGV2X3BsYXRmb3JtX2FkZGAgd2FzIGF2YWlsYWJsZSDigJMgbm8gbHVjay4gSG1tLCBTeXprYWxsZXIgZG9lcyBoYXZlIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBkZXZpY2VzIHZpYSBgbmV0bGlua2AgZm9yIHZpcnR1YWwgaW50ZXJmYWNlcyBsaWtlIGB2ZXRoYCwgYG1hY3ZsYW5gLCBgZHVtbXlgLCBhbmQgYHZ4bGFuYC4gQnV0LCBub25lIG9mIHRob3NlLCBmcm9tIHdoYXQgSSBrbm93LCBoYXZlIGFuIFNGUCBjYWdlIHRvIHNpbXVsYXRlIG9yIGludGVyYWN0IHdpdGguIFRoYXQmIzM5O3MgYSBkZWFkIGVuZC4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suLi4gd2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gRG9lcyBgbmV0ZGV2c2ltYCBoYXZlIGFuIFNGUCBjYWdlPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJZiBpdCAqZG9lcyosIHRoZW4gSSBtaWdodCBiZSBhYmxlIHRvIGNyYWZ0IGEgU3l6a2FsbGVyIHRlc3QgY2FzZSB0byBwcm9iZSB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgdGhyb3VnaCBgbmV0ZGV2c2ltYCwgYW5kIHRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgU3l6a2FsbGVyIHRyaWdnZXJzIHRoZXNlIGV2ZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIGFuZCBTRlAgQ2FnZSBDb21wYXRpYmlsaXR5KioKClJpZ2h0LCBzbyBJJiMzOTttIGhpdHRpbmcgYSByb2FkYmxvY2suIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBvZiB1c2luZyBgbWFjODAyMTFfaHdzaW1gIGZvciB0aGlzIHNldHVwIGp1c3Qgd29uJiMzOTt0IGN1dCBpdC4gSXQmIzM5O3Mgbm90IHRoZSByaWdodCBmaXQgZm9yIHRoZSBsZXZlbCBvZiBmbGV4aWJpbGl0eSBhbmQgaGFyZHdhcmUgaW50ZXJhY3Rpb24gSSYjMzk7bSBsb29raW5nIGZvci4gTGV0JiMzOTtzIG1vdmUgb24uCgpOb3csIHRoZSBuZXh0IHRyYWluIG9mIHRob3VnaHQgaXMgdG8gY2hlY2sgYHZoY2lgIGZvciBhIHNvbHV0aW9uLiBXaXRoIGB2aGNpYCBJIGNvdWxkIHRoZW9yZXRpY2FsbHkgc2ltdWxhdGUgYSBVU0IgZGV2aWNlIHdoaWNoLCBpbiB0dXJuLCB3b3VsZCBjcmVhdGUgdGhlIG5ldHdvcmtpbmcgY29ubmVjdGl2aXR5IHJlcXVpcmVkLiBJJiMzOTttIHRyeWluZyB0byBkZXRlcm1pbmUgd2hldGhlciBhbnkgc3VpdGFibGUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgZXhpc3QgdGhhdCBhbHNvIGZlYXR1cmUgYW4gU0ZQIGNhZ2UuIEkmIzM5O20gbm90IGZhbWlsaWFyIHdpdGggYW55LCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIHRoYXQgb3IgbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRGV2aWNlIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIFRoZSBpbml0aWFsIGFuc3dlciBpcyAmIzM0O05vLCYjMzQ7IGJ1dCB3YWl0IGEgbWludXRlLi4uIHdoYXQgYWJvdXQgUGVyaXBoZXJhbCBDb21wb25lbnQgSW50ZXJjb25uZWN0IChQQ0kpIGRldmljZXM/IFN5emthbGxlciwgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiwgY2FuIGFic29sdXRlbHkgZnV6eiB0aGVzZSB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAuIFdlIGtub3cgdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG9mIHNldHVwcyB1c2luZyB2aXJ0dWFsIGZ1bmN0aW9uIEkvTyAoYHZmaW9gKSBvciB0aGUgUENJIHBzZXVkby1kZXZpY2UuCgpTbywgdGhlIGtleSBxdWVzdGlvbiBiZWNvbWVzOiBhcmUgdGhlcmUgYW55IFBDSSBuZXR3b3JrIGRyaXZlcnMgdGhhdCBoYW5kbGUgU21hbGwgRm9ybS1mYWN0b3IgUGx1Z2dhYmxlIChTRlApIHRyYW5zY2VpdmVycyBhbmQsIGNyaXRpY2FsbHksIGluc3RhbnRpYXRlIHRoZW0gKndpdGhvdXQqIHJlbHlpbmcgb24gdGhlIGRldmljZSB0cmVlPyBUaGF0JiMzOTtzIHRoZSBhbmdsZSBoZXJlLCByaWdodD8KCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGFueSBvZiB0aGVzZSBQQ0kgZHJpdmVycywgc3BlY2lmaWNhbGx5LCBhY3R1YWxseSBjYWxsIGBzZnBfcHJvYmVgIG9yIGRpcmVjdGx5IGNyZWF0ZSBhbiBTRlAgaW5zdGFuY2UuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCB0byBmaWd1cmUgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0yMTYwPWludCBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE2OC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNjk6ICogaXhnYmVfaXNfc2ZwX3Byb2JlIC0gUmV0dXJucyB0cnVlIGlmIFNGUCBpcyBiZWluZyBkZXRlY3RlZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3MC0gKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3My0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNzQ6c3RhdGljIGJvb2wgaXhnYmVfaXNfc2ZwX3Byb2JlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IG9mZnNldCwgdTggYWRkcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jPTIxOTQ9c3RhdGljIGludCBpeGdiZV9yZWFkX2kyY19ieXRlX2dlbmVyaWNfaW50KHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDQtXHRcdG1heF9yZXRyeSA9IDM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMjA1Olx0aWYgKGl4Z2JlX2lzX3NmcF9wcm9iZShodywgYnl0ZV9vZmZzZXQsIGRldl9hZGRyKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDYtXHRcdG1heF9yZXRyeSA9IElYR0JFX1NGUF9ERVRFQ1RfUkVUUklFUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NDIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipTRlAgQ29uZnVzaW9uIGluIGl4Z2JlIGFuZCBCZXlvbmQqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGBpeGdiZWAgZHJpdmVyIGFnYWluLCBhbmQgc29tZXRoaW5nJiMzOTtzIGp1c3Qgbm90IHF1aXRlIGNsaWNraW5nLiBJIHNlZSBgaXhnYmVgIGhhcyB0aGlzIGBpeGdiZV9pc19zZnBfcHJvYmVgIGZ1bmN0aW9uIOKAkyBjbGVhcmx5IGRlYWxpbmcgd2l0aCBTRlAgbW9kdWxlcywgcmlnaHQ/IEJ1dCB0aGVuIEkgcmVtZW1iZXIsIGl0IGRvZXNuJiMzOTt0IGFjdHVhbGx5ICp1c2UqIHRoZSBnZW5lcmljIGBzZnBgIHBsYXRmb3JtIGRyaXZlci4gSXQmIzM5O3MgZ290IGl0cyBvd24sIGJlc3Bva2UgU0ZQIGxvZ2ljIGltcGxlbWVudGVkIHJpZ2h0IHdpdGhpbiB0aGUgYGl4Z2JlYCBjb2RlLiBUaGF0JiMzOTtzIGEgbGl0dGxl4oCmIHVudXN1YWwsIGZyYW5rbHkuCgpXaGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXI6IHdhaXQgYSBtaW51dGUsIGRvZXMgKmFueSogZHJpdmVyIGFjdHVhbGx5IGJvdGhlciB0byBpbnN0YW50aWF0ZSB0aGUgYHNmcGAgcGxhdGZvcm0gZGV2aWNlPyBJcyB0aGVyZSBhIHZhbGlkIHVzZSBjYXNlPyBJdCBzZWVtcyBsaWtlIGV2ZXJ5IGRyaXZlciB0aGF0IHdhbnRzIHRvIGRlYWwgd2l0aCBTRlBzIGlzIGp1c3Qgcm9sbGluZyBpdHMgb3duIHNvbHV0aW9uLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBpbnRvIHRoaXMgZnVydGhlciwgcGVyaGFwcyBnbyBzcGVsdW5raW5nIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGNvbmZpcm0gdGhpcy4gU29tZXRoaW5nIHNlZW1zIGFtaXNzIHdpdGggdGhlIFNGUCBpbmZyYXN0cnVjdHVyZSwgb3IgcGVyaGFwcyBJJiMzOTttIG1pc3NpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGVcXChcJiMzNDtzZnBcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBhdWRpZW5jZSBpcyBhbm90aGVyIGV4cGVydDoKCioqQ29uc2lkZXJpbmcgRGV2aWNlIFJlZ2lzdHJhdGlvbiBmb3IgJiMzNDtzZnAmIzM0OyoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBoYW5kbGUgdGhpcyAmIzM0O3NmcCYjMzQ7IHNpdHVhdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBpcyBnb2luZyB0byBiZSBkZXZpY2UgcmVnaXN0cmF0aW9uLCBtYWtpbmcgc3VyZSB0aGUgc3lzdGVtIHByb3Blcmx5IHJlY29nbml6ZXMgYW5kIG1hbmFnZXMgaXQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgb3IgYHBsYXRmb3JtX2RldmljZV9hbGxvY2AuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXZpY2U/IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHF1ZXN0aW9uLiBJZiBzbywgdGhvc2UgcGxhdGZvcm0gQVBJcyB3b3VsZCBiZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gYHBsYXRmb3JtX2RldmljZV9hbGxvY2Agd291bGQgZ2l2ZSBtZSB0aGUgZmxleGliaWxpdHkgdG8gY29uc3RydWN0IHRoZSBkZXZpY2Ugc3RydWN0dXJlIGV4YWN0bHkgYXMgbmVlZGVkLCB3aGlsZSBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYCBzdHJlYW1saW5lcyB0aGUgcHJvY2VzcyBpZiB0aGUgY29yZSBkZXRhaWxzIGFyZSBhbHJlYWR5IGF2YWlsYWJsZS4gVGhlIGNob2ljZSBoaW5nZXMgb24gdGhlIHNwZWNpZmljcywgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGhhcmR3YXJlIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBzdGFuZGFyZCBwbGF0Zm9ybSBkZXZpY2Ugb3Igc29tZXRoaW5nIG1vcmUgY3VzdG9tLiBUaGlzIHdpbGwgZ3VpZGUgd2hldGhlciBJIG5lZWQgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3IgYSBzaW1wbGVyIHJlZ2lzdHJhdGlvbiBtZXRob2QuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgd2lyZWQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1wmIzM0O3NmcFwmIzM0OyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmM9MTY2Nj1zdGF0aWMgdm9pZCB4Z2VuZV9lbmV0X2dwaW9kX2dldChzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jLTE2NzgtXHRpZiAoSVNfRVJSKHBkYXRhLVx1MDAzZXNmcF9yZHkpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jOjE2Nzk6XHRcdHBkYXRhLVx1MDAzZXNmcF9yZHkgPSBncGlvZF9nZXQoZGV2LCBcJiMzNDtzZnBcJiMzNDssIEdQSU9EX0lOKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0xNjgwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jPTQ2Nj1zdGF0aWMgaW50IHhnZW5lX2VuZXRfZ3Bpb19sb29rdXAoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmMtNDcxLVx0aWYgKElTX0VSUihwZGF0YS1cdTAwM2VzZnBfcmR5KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmM6NDcyOlx0XHRwZGF0YS1cdTAwM2VzZnBfcmR5ID0gZ3Bpb2RfZ2V0KGRldiwgXCYjMzQ7c2ZwXCYjMzQ7LCBHUElPRF9JTik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jLTQ3My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTI3PXN0YXRpYyBpbnQgdHhnYmVfc3dub2Rlc19yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXHRub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzWzBdID0gUFJPUEVSVFlfRU5UUllfU1RSSU5HKFwmIzM0O21hbmFnZWRcJiMzNDssIFwmIzM0O2luLWJhbmQtc3RhdHVzXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Nzc6XHRub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O3NmcFwmIzM0Oywgbm9kZXMtXHUwMDNlc2ZwX3JlZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTc4LVx0c3dub2Rlc1tTV05PREVfUEhZTElOS10gPSBOT0RFX1BST1Aobm9kZXMtXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTEyLVx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cdTAwM2Vub2Rlcy5ncm91cFtTV05PREVfU0ZQXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUxMzpcdGluZm8ubmFtZSA9IFwmIzM0O3NmcFwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVx0aW5mby5pZCA9IHBjaV9kZXZfaWQocGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjM5CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSB0eGdiZSBQSFkgRHJpdmVyKioKCkFscmlnaHQsIG15IGludGVybmFsIHJhZGFyIGp1c3QgcGluZ2VkIOKAkyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmNgIGZpbGUuLi4gYWhhISBJdCYjMzk7cyByZWdpc3RlcmluZyBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlLCBhIGtleSBwYXJ0IG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSBzZXR1cC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHpvb20gaW4gb24gYHR4Z2JlX3NmcF9yZWdpc3RlcmAuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIFNGUCBtb2R1bGUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBpbml0aWFsIHByb2JpbmcsIGRldGVjdGlvbiwgYW5kIHBvc3NpYmx5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0ZQLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0IGRldGVybWluZXMgdGhlIFNGUCYjMzk7cyB0eXBlLCB3aGF0IGtpbmQgb2YgSTJDIGJ1cyBjb25maWd1cmF0aW9uIGl0IHNldHMgdXAsIGFuZCBhbnkgcG93ZXIgbWFuYWdlbWVudCBwcm9jZWR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCB0byBhIHN0YWJsZSBhbmQgY29ycmVjdCBsaW5rLiBJJiMzOTtsbCBiZSBkcmlsbGluZyBkb3duIHRvIGV4YW1pbmUgdGhlIHJlZ2lzdGVyIGludGVyYWN0aW9uIHdpdGggdGhlIFBIWSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwNTpcdHN0YXRpYyBpbnQgdHhnYmVfc2ZwX3JlZ2lzdGVyKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4gNTA2Olx0e1xuIDUwNzpcdFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0eGdiZS1cdTAwM2V3eC1cdTAwM2VwZGV2O1xuIDUwODpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGluZm8gPSB7fTtcbiA1MDk6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNmcF9kZXY7XG4gNTEwOlx0XG4gNTExOlx0XHRpbmZvLnBhcmVudCA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIDUxMjpcdFx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cdTAwM2Vub2Rlcy5ncm91cFtTV05PREVfU0ZQXSk7XG4gNTEzOlx0XHRpbmZvLm5hbWUgPSBcJiMzNDtzZnBcJiMzNDs7XG4gNTE0Olx0XHRpbmZvLmlkID0gcGNpX2Rldl9pZChwZGV2KTtcbiA1MTU6XHRcdHNmcF9kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChcdTAwMjZpbmZvKTtcbiA1MTY6XHRcdGlmIChJU19FUlIoc2ZwX2RldikpXG4gNTE3Olx0XHRcdHJldHVybiBQVFJfRVJSKHNmcF9kZXYpO1xuIDUxODpcdFxuIDUxOTpcdFx0dHhnYmUtXHUwMDNlc2ZwX2RldiA9IHNmcF9kZXY7XG4gNTIwOlx0XG4gNTIxOlx0XHRyZXR1cm4gMDtcbiA1MjI6XHR9XG4gNTIzOlx0XG4gNTI0Olx0c3RhdGljIGludCB0eGdiZV9leHRfcGh5X2luaXQoc3RydWN0IHR4Z2JlICp0eGdiZSlcbiA1MjU6XHR7XG4gNTI2Olx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuIDUyNzpcdFx0c3RydWN0IG1paV9idXMgKm1paV9idXM7XG4gNTI4Olx0XHRzdHJ1Y3QgcGNpX2RldiAqcGRldjtcbiA1Mjk6XHRcdHN0cnVjdCB3eCAqd3g7XG4gNTMwOlx0XHRpbnQgcmV0ID0gMDtcbiA1MzE6XHRcbiA1MzI6XHRcdHd4ID0gdHhnYmUtXHUwMDNld3g7XG4gNTMzOlx0XHRwZGV2ID0gd3gtXHUwMDNlcGRldjtcbiA1MzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgV2FuZ3h1biAxMEdiRSBOSUMgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHR4Z2JlYCBkcml2ZXIg4oCTIHRoYXQmIzM5O3MgdGhlIFdhbmd4dW4gMTBHYkUgUENJIEV4cHJlc3MgTklDLCByaWdodD8gSSYjMzk7bSB3b25kZXJpbmcgaWYgd2UgY2FuIGFjdHVhbGx5IGdldCBTeXprYWxsZXIgdG8gZnV6eiBpdC4gVGhlIG9idmlvdXMgcm91dGUgaXMgdGhyb3VnaCBQQ0kgZnV6emluZywgd2hpY2ggaXMgZW5hYmxlZC4gQnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25uZWN0aW9uIHBvaW50cy4KClRoZSBrZXkgc2VlbXMgdG8gYmUgdGhhdCBgdHhnYmVgIHJlZ2lzdGVycyBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlLiBJbnRlcmVzdGluZy4gRG9lcyBpdCAqdXNlKiBTRlA/IFllcywgaXQgZG9lcywgaXQmIzM5O3MgY2FsbGVkICYjMzQ7c2ZwJiMzNDsuCgpBaCwgcmlnaHQsIHRoZSBgc2ZwYCBkcml2ZXIgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGdvaW5nIHRvIHByb2JlIGZvciBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggdGhhdCBuYW1lLiBTbywgaWYgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBhIHZpcnR1YWwgUENJIGRldmljZSB0aGF0IG1hdGNoZXMgYHR4Z2JlYCwgdGhlIGB0eGdiZWAgZHJpdmVyIHdpbGwgcHJvYmUgYXMgaXQgc2hvdWxkLiBUaGVuLCBiZWNhdXNlIG9mIGhvdyB0aGlzIGRyaXZlciBpcyBzdHJ1Y3R1cmVkLCBpdCB3aWxsIGNhbGwgYHR4Z2JlX3NmcF9yZWdpc3RlcmAsIHdoaWNoIGNyZWF0ZXMgdGhpcyAmIzM0O3NmcCYjMzQ7IHBsYXRmb3JtIGRldmljZS4gQXQgdGhpcyBwb2ludCwgdGhlIGBzZnBgIGRyaXZlciBzaG91bGQgcHJvYmUhCgpPa2F5LCB0aGF0JiMzOTtzIGEgcHJvbWlzaW5nIHBhdGguIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIHRoZSBgc2ZwYCBkcml2ZXIgZGVwZW5kIG9uIGFueSBzcGVjaWZpYyBHUElPcyBvciBJMkMgYnVzZXMgYmVpbmcgcHJlc2VudD8gSWYgaXQgZG9lcywgdGhlbiBTeXprYWxsZXIgd291bGQgbmVlZCB0byBiZSBjb25maWd1cmVkIHRvIGVtdWxhdGUgdGhvc2UgYXMgd2VsbCB0byBoYXZlIGFueSBzdWNjZXNzLiBMZXQgbWUgZ28gY2hlY2sgdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zZnAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyODMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI4MzpcdHN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4zMjg0Olx0e1xuMzI4NTpcdFx0Y29uc3Qgc3RydWN0IHNmZl9kYXRhICpzZmY7XG4zMjg2Olx0XHRjaGFyICpzZnBfaXJxX25hbWU7XG4zMjg3Olx0XHRzdHJ1Y3Qgc2ZwICpzZnA7XG4zMjg4Olx0XHRpbnQgZXJyLCBpO1xuMzI4OTpcdFxuMzI5MDpcdFx0c2ZwID0gc2ZwX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjMyOTE6XHRcdGlmIChJU19FUlIoc2ZwKSlcbjMyOTI6XHRcdFx0cmV0dXJuIFBUUl9FUlIoc2ZwKTtcbjMyOTM6XHRcbjMyOTQ6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNmcCk7XG4zMjk1Olx0XG4zMjk2Olx0XHRlcnIgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoc2ZwLVx1MDAzZWRldiwgc2ZwX2NsZWFudXAsIHNmcCk7XG4zMjk3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzI5ODpcdFx0XHRyZXR1cm4gZXJyO1xuMzI5OTpcdFxuMzMwMDpcdFx0c2ZmID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHNmcC1cdTAwM2VkZXYpO1xuMzMwMTpcdFx0aWYgKCFzZmYpXG4zMzAyOlx0XHRcdHNmZiA9IFx1MDAyNnNmcF9kYXRhO1xuMzMwMzpcdFxuMzMwNDpcdFx0c2ZwLVx1MDAzZXR5cGUgPSBzZmY7XG4zMzA1Olx0XG4zMzA2Olx0XHRlcnIgPSBzZnBfaTJjX2dldChzZnApO1xuMzMwNzpcdFx0aWYgKGVycilcbjMzMDg6XHRcdFx0cmV0dXJuIGVycjtcbjMzMDk6XHRcbjMzMTA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEdQSU9fTUFYOyBpJiM0MzsmIzQzOylcbjMzMTE6XHRcdFx0aWYgKHNmZi1cdTAwM2VncGlvcyBcdTAwMjYgQklUKGkpKSB7XG4zMzEyOlx0XHRcdFx0c2ZwLVx1MDAzZWdwaW9baV0gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChzZnAtXHUwMDNlZGV2LFxuMzMxMzpcdFx0XHRcdFx0XHQgICBncGlvX25hbWVzW2ldLCBncGlvX2ZsYWdzW2ldKTtcbjMzMTQ6XHRcdFx0XHRpZiAoSVNfRVJSKHNmcC1cdTAwM2VncGlvW2ldKSlcbjMzMTU6XHRcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNmcC1cdTAwM2VncGlvW2ldKTtcbjMzMTY6XHRcdFx0fVxuMzMxNzpcdFxuMzMxODpcdFx0c2ZwLVx1MDAzZXN0YXRlX2h3X21hc2sgPSBTRlBfRl9QUkVTRU5UO1xuMzMxOTpcdFx0c2ZwLVx1MDAzZXN0YXRlX2h3X2RyaXZlID0gU0ZQX0ZfVFhfRElTQUJMRTtcbjMzMjA6XHRcbjMzMjE6XHRcdHNmcC1cdTAwM2VnZXRfc3RhdGUgPSBzZnBfZ3Bpb19nZXRfc3RhdGU7XG4zMzIyOlx0XHRzZnAtXHUwMDNlc2V0X3N0YXRlID0gc2ZwX2dwaW9fc2V0X3N0YXRlO1xuMzMyMzpcdFxuMzMyNDpcdFx0LyogQW4gU0ZQIGNhZ2Ugd2l0aCBubyBNT0RfREVGMCBHUElPIGhhcyBubyBoYXJkd2FyZSBwcmVzZW5jZSBzaWduYWwuXG4zMzI1Olx0XHQgKiBBc3N1bWluZyB0aGUgbW9kdWxlIGlzIGFsd2F5cyBwcmVzZW50IHRyYXBzIGFuIGVtcHR5IGNhZ2UgaW5cbjMzMjY6XHRcdCAqIE1PRF9FUlJPUiBhbmQgbmV2ZXIgZGV0ZWN0cyBob3QtaW5zZXJ0aW9uLCBzbyBkZXJpdmUgcHJlc2VuY2UgZnJvbSBhXG4zMzI3Olx0XHQgKiB0aHJvdHRsZWQgSTJDIHByb2JlIGFuZCBwb2xsIGZvciBjaGFuZ2VzIGluc3RlYWQuIHNmcF9pMmNfY29uZmlndXJlKClcbjMzMjg6XHRcdCAqIGhhcyBhbHJlYWR5IHNldCBpMmNfbWF4X2Jsb2NrX3NpemU7IHNlZWQgaTJjX2Jsb2NrX3NpemUgc28gdGhlXG4zMzI5Olx0XHQgKiBwcmVzZW5jZSByZWFkIGRvZXMgbm90IGlzc3VlIGEgemVyby1sZW5ndGggdHJhbnNmZXIgYmVmb3JlIHRoZSBmaXJzdFxuMzMzMDpcdFx0ICogRUVQUk9NIHJlYWQuIFNlZWQgaTJjX3ByZXNlbnRfbmV4dCB0byBqaWZmaWVzIHNvIHRoZSBmaXJzdCBwcm9iZVxuMzMzMTpcdFx0ICogaGFwcGVucyBpbW1lZGlhdGVseSAoYSB6ZXJvIHZhbHVlIHdvdWxkIGJlIGluIHRoZSBwYXN0IHJlbGF0aXZlIHRvXG4zMzMyOlx0XHQgKiB0aGUgbmVnYXRpdmUgSU5JVElBTF9KSUZGSUVTIGF0IGJvb3QgYW5kIGRlbGF5IGRldGVjdGlvbikuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDU4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJMkMgQWRhcHRlciBSZXRyaWV2YWwqKgoKT2theSwgc28gYHNmcF9pMmNfZ2V0YCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGdldHRpbmcgdGhlIEkyQyBhZGFwdGVyLiBUaGUgY29yZSBvZiBhbnkgZHJpdmVyIGludGVyYWN0aW9uIHdpdGggSTJDIGhpbmdlcyBvbiB0aGlzLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgc2ZwX2kyY19nZXRgIGFjdHVhbGx5IGFjY29tcGxpc2hlcyB0aGlzLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBsb29rdXAgYmFzZWQgb24gYSBwcmVkZWZpbmVkIGFkZHJlc3MsIG9yIGlzIHRoZXJlIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGRpc2NvdmVyeSBtZWNoYW5pc20gYXQgcGxheT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBleHBsaWNpdGx5IGhhbmRsZWQsIGFuZCBpZiBzbywgaG93PyBXaGF0IGFyZSB0aGUgdW5kZXJseWluZyBhc3N1bXB0aW9ucyB0aGlzIGZ1bmN0aW9uIG1ha2VzIGFib3V0IHRoZSBoYXJkd2FyZSBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZT8gSSB3YW50IHRvIGtub3cgaWYgaXQmIzM5O3MgdGhyZWFkLXNhZmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBVbHRpbWF0ZWx5LCBteSBhbmFseXNpcyB3aWxsIGZvY3VzIG9uIGFuc3dlcmluZyBob3cgdGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHRvIHJldHJpZXZlIHRoZSBJMkMgYWRhcHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyNTc6XHRzdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcbjMyNTg6XHR7XG4zMjU5Olx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqaDtcbjMyNjA6XHRcdHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjO1xuMzI2MTpcdFx0aW50IGVycjtcbjMyNjI6XHRcbjMyNjM6XHRcdGggPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2X2Z3bm9kZShzZnAtXHUwMDNlZGV2KSwgXCYjMzQ7aTJjLWJ1c1wmIzM0OywgMCk7XG4zMjY0Olx0XHRpZiAoSVNfRVJSKGgpKSB7XG4zMjY1Olx0XHRcdGRldl9lcnIoc2ZwLVx1MDAzZWRldiwgXCYjMzQ7bWlzc2luZyAmIzM5O2kyYy1idXMmIzM5OyBwcm9wZXJ0eVxcblwmIzM0Oyk7XG4zMjY2Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMzI2NzpcdFx0fVxuMzI2ODpcdFxuMzI2OTpcdFx0aTJjID0gaTJjX2dldF9hZGFwdGVyX2J5X2Z3bm9kZShoKTtcbjMyNzA6XHRcdGlmICghaTJjKSB7XG4zMjcxOlx0XHRcdGVyciA9IC1FUFJPQkVfREVGRVI7XG4zMjcyOlx0XHRcdGdvdG8gcHV0O1xuMzI3MzpcdFx0fVxuMzI3NDpcdFxuMzI3NTpcdFx0ZXJyID0gc2ZwX2kyY19jb25maWd1cmUoc2ZwLCBpMmMpO1xuMzI3NjpcdFx0aWYgKGVycilcbjMyNzc6XHRcdFx0aTJjX3B1dF9hZGFwdGVyKGkyYyk7XG4zMjc4Olx0cHV0OlxuMzI3OTpcdFx0Zndub2RlX2hhbmRsZV9wdXQoaCk7XG4zMjgwOlx0XHRyZXR1cm4gZXJyO1xuMzI4MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMTIKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYW50aWNpcGF0aW5nIHdoYXQgYSBrbm93bGVkZ2VhYmxlIHVzZXIgd291bGQgYmUgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBJMkMgQnVzIFJlcXVpcmVtZW50cyBmb3IgVGhpcyBEZXZpY2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlIGFuZCB0aGUgZndub2RlIHN0cnVjdHVyZS4gSXQmIzM5O3MgY2xlYXIgdGhhdCBpdCByZXF1aXJlcyBhbiBgaTJjLWJ1c2AgcHJvcGVydHkuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXMgd2hldGhlciB0aGUgYHR4Z2JlYCBkcml2ZXIgYWN0dWFsbHkgcHJvdmlkZXMgdGhpcyBwcm9wZXJ0eSBpbiBpdHMgZndub2RlIGRlZmluaXRpb24uIEkgbmVlZCB0byBnbyBhbmQgY2hlY2sgdGhlIGRyaXZlciBzb3VyY2UgY29kZSBhbmQgdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHR4Z2JlYCBpcyBjb3JyZWN0bHkgcG9wdWxhdGluZyB0aGF0IGBpMmMtYnVzYCBwcm9wZXJ0eSwgYW5kIGlmIG5vdCwgd2h5LiBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgdGhhdCBhcmVuJiMzOTt0IGJlaW5nIGV4cGxpY2l0bHkgc3RhdGVkPyBBcmUgdGhlcmUgYW55IGRvd25zdHJlYW0gZGVwZW5kZW5jaWVzIHJlbHlpbmcgb24gdGhpcz8gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGhhcmR3YXJlIGlzIGJlaW5nIGNvbmZpZ3VyZWQgcHJvcGVybHkuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgY29ycmVjdCBjb21tdW5pY2F0aW9uIHdpdGggYW55IEkyQy1jb25uZWN0ZWQgcGVyaXBoZXJhbHMgb24gdGhpcyBib2FyZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBnb2luZyB0byBjYXVzZSBhbnkgc2lsZW50IGVycm9ycyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI3Olx0c3RhdGljIGludCB0eGdiZV9zd25vZGVzX3JlZ2lzdGVyKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4gIDI4Olx0e1xuICAyOTpcdFx0c3RydWN0IHR4Z2JlX25vZGVzICpub2RlcyA9IFx1MDAyNnR4Z2JlLVx1MDAzZW5vZGVzO1xuICAzMDpcdFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0eGdiZS1cdTAwM2V3eC1cdTAwM2VwZGV2O1xuICAzMTpcdFx0c3RydWN0IHNvZnR3YXJlX25vZGUgKnN3bm9kZXM7XG4gIDMyOlx0XHR1MzIgaWQ7XG4gIDMzOlx0XG4gIDM0Olx0XHRpZCA9IHBjaV9kZXZfaWQocGRldik7XG4gIDM1Olx0XG4gIDM2Olx0XHRzbnByaW50Zihub2Rlcy1cdTAwM2VncGlvX25hbWUsIHNpemVvZihub2Rlcy1cdTAwM2VncGlvX25hbWUpLCBcJiMzNDt0eGdiZV9ncGlvLSV4XCYjMzQ7LCBpZCk7XG4gIDM3Olx0XHRzbnByaW50Zihub2Rlcy1cdTAwM2VpMmNfbmFtZSwgc2l6ZW9mKG5vZGVzLVx1MDAzZWkyY19uYW1lKSwgXCYjMzQ7dHhnYmVfaTJjLSV4XCYjMzQ7LCBpZCk7XG4gIDM4Olx0XHRzbnByaW50Zihub2Rlcy1cdTAwM2VzZnBfbmFtZSwgc2l6ZW9mKG5vZGVzLVx1MDAzZXNmcF9uYW1lKSwgXCYjMzQ7dHhnYmVfc2ZwLSV4XCYjMzQ7LCBpZCk7XG4gIDM5Olx0XHRzbnByaW50Zihub2Rlcy1cdTAwM2VwaHlsaW5rX25hbWUsIHNpemVvZihub2Rlcy1cdTAwM2VwaHlsaW5rX25hbWUpLCBcJiMzNDt0eGdiZV9waHlsaW5rLSV4XCYjMzQ7LCBpZCk7XG4gIDQwOlx0XG4gIDQxOlx0XHRzd25vZGVzID0gbm9kZXMtXHUwMDNlc3dub2RlcztcbiAgNDI6XHRcbiAgNDM6XHRcdC8qIEdQSU8gMDogdHggZmF1bHRcbiAgNDQ6XHRcdCAqIEdQSU8gMTogdHggZGlzYWJsZVxuICA0NTpcdFx0ICogR1BJTyAyOiBzZnAgbW9kdWxlIGFic2VudFxuICA0NjpcdFx0ICogR1BJTyAzOiByeCBzaWduYWwgbG9zdFxuICA0NzpcdFx0ICogR1BJTyA0OiByYXRlIHNlbGVjdCwgMUcoMCkgMTBHKDEpXG4gIDQ4Olx0XHQgKiBHUElPIDU6IHJhdGUgc2VsZWN0LCAxRygwKSAxMEcoMSlcbiAgNDk6XHRcdCAqL1xuICA1MDpcdFx0bm9kZXMtXHUwMDNlZ3Bpb19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcJiMzNDtwaW5jdHJsLW5hbWVzXCYjMzQ7LCBcJiMzNDtkZWZhdWx0XCYjMzQ7KTtcbiAgNTE6XHRcdHN3bm9kZXNbU1dOT0RFX0dQSU9dID0gTk9ERV9QUk9QKG5vZGVzLVx1MDAzZWdwaW9fbmFtZSwgbm9kZXMtXHUwMDNlZ3Bpb19wcm9wcyk7XG4gIDUyOlx0XHRub2Rlcy1cdTAwM2VncGlvMF9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMCwgR1BJT19BQ1RJVkVfSElHSCk7XG4gIDUzOlx0XHRub2Rlcy1cdTAwM2VncGlvMV9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMSwgR1BJT19BQ1RJVkVfSElHSCk7XG4gIDU0Olx0XHRub2Rlcy1cdTAwM2VncGlvMl9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMiwgR1BJT19BQ1RJVkVfTE9XKTtcbiAgNTU6XHRcdG5vZGVzLVx1MDAzZWdwaW8zX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAzLCBHUElPX0FDVElWRV9ISUdIKTtcbiAgNTY6XHRcdG5vZGVzLVx1MDAzZWdwaW80X3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCA0LCBHUElPX0FDVElWRV9ISUdIKTtcbiAgNTc6XHRcdG5vZGVzLVx1MDAzZWdwaW81X3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCA1LCBHUElPX0FDVElWRV9ISUdIKTtcbiAgNTg6XHRcbiAgNTk6XHRcdG5vZGVzLVx1MDAzZWkyY19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcJiMzNDtjb21wYXRpYmxlXCYjMzQ7LCBcJiMzNDtzbnBzLGRlc2lnbndhcmUtaTJjXCYjMzQ7KTtcbiAgNjA6XHRcdG5vZGVzLVx1MDAzZWkyY19wcm9wc1sxXSA9IFBST1BFUlRZX0VOVFJZX0JPT0woXCYjMzQ7d3gsaTJjLXNucHMtbW9kZWxcJiMzNDspO1xuICA2MTpcdFx0bm9kZXMtXHUwMDNlaTJjX3Byb3BzWzJdID0gUFJPUEVSVFlfRU5UUllfVTMyKFwmIzM0O2Nsb2NrLWZyZXF1ZW5jeVwmIzM0OywgSTJDX01BWF9TVEFOREFSRF9NT0RFX0ZSRVEpO1xuICA2MjpcdFx0c3dub2Rlc1tTV05PREVfSTJDXSA9IE5PREVfUFJPUChub2Rlcy1cdTAwM2VpMmNfbmFtZSwgbm9kZXMtXHUwMDNlaTJjX3Byb3BzKTtcbiAgNjM6XHRcdG5vZGVzLVx1MDAzZWkyY19yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9JMkNdKTtcbiAgNjQ6XHRcbiAgNjU6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcJiMzNDtjb21wYXRpYmxlXCYjMzQ7LCBcJiMzNDtzZmYsc2ZwXCYjMzQ7KTtcbiAgNjY6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1sxXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDtpMmMtYnVzXCYjMzQ7LCBub2Rlcy1cdTAwM2VpMmNfcmVmKTtcbiAgNjc6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1syXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDt0eC1mYXVsdC1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzBfcmVmKTtcbiAgNjg6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1szXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDt0eC1kaXNhYmxlLWdwaW9zXCYjMzQ7LCBub2Rlcy1cdTAwM2VncGlvMV9yZWYpO1xuICA2OTpcdFx0bm9kZXMtXHUwMDNlc2ZwX3Byb3BzWzRdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O21vZC1kZWYwLWdwaW9zXCYjMzQ7LCBub2Rlcy1cdTAwM2VncGlvMl9yZWYpO1xuICA3MDpcdFx0bm9kZXMtXHUwMDNlc2ZwX3Byb3BzWzVdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O2xvcy1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzNfcmVmKTtcbiAgNzE6XHRcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1s2XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDtyYXRlLXNlbGVjdDEtZ3Bpb3NcJiMzNDssIG5vZGVzLVx1MDAzZWdwaW80X3JlZik7XG4gIDcyOlx0XHRub2Rlcy1cdTAwM2VzZnBfcHJvcHNbN10gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7cmF0ZS1zZWxlY3QwLWdwaW9zXCYjMzQ7LCBub2Rlcy1cdTAwM2VncGlvNV9yZWYpO1xuICA3MzpcdFx0c3dub2Rlc1tTV05PREVfU0ZQXSA9IE5PREVfUFJPUChub2Rlcy1cdTAwM2VzZnBfbmFtZSwgbm9kZXMtXHUwMDNlc2ZwX3Byb3BzKTtcbiAgNzQ6XHRcdG5vZGVzLVx1MDAzZXNmcF9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9TRlBdKTtcbiAgNzU6XHRcbiAgNzY6XHRcdG5vZGVzLVx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXCYjMzQ7bWFuYWdlZFwmIzM0OywgXCYjMzQ7aW4tYmFuZC1zdGF0dXNcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc1MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBTRlAgU3RhdGUgTWFjaGluZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSBTRlAgc3RhdGUgbWFjaGluZSwgYW5kIHRoZSBwYXRoIHNlZW1zIHRvIGdvIHRocm91Z2ggdGhlIGB0eGdiZWAgZHJpdmVyLiBJIGtub3cgdGhhdCBgdHhnYmVgIHByb3ZpZGVzIHRoZSBgaTJjLWJ1c2AgcHJvcGVydHksIHdoaWNoIGlzIGtleS4gVGhlIGlkZWEgaXMgdGhpczogaWYgc3l6a2FsbGVyIGNhbiBjcmVhdGUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdGhhdCBsb29rcyBsaWtlIGEgYHR4Z2JlYCBkZXZpY2UsIHRoZSBgdHhnYmVgIGRyaXZlciBzaG91bGQgcHJvYmUsIGFuZCBpbiB0dXJuLCByZWdpc3RlciB0aGUgYHNmcGAgcGxhdGZvcm0gZGV2aWNlLiBUaGVuLCB0aGUgYHNmcGAgZHJpdmVyIHdpbGwgcHJvYmUsIGFuZCBib29tLCB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUga2lja3Mgb2ZmLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGB0eGdiZWAgaXMgZXZlbiByZWFjaGFibGUgaW4gdGhlIHN5emthbGxlciBlbnZpcm9ubWVudC4gVGhhbmtmdWxseSwgYHN5el9wY2lfZGV2aWNlX2FkZGAgbG9va3MgbGlrZSBpdCBjYW4gY3JlYXRlIGEgdmlydHVhbCBQQ0kgZGV2aWNlLiBOb3cgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgYHR4Z2JlYCBldmVuICpzdXBwb3J0KiB2aXJ0dWFsIFBDSSBkZXZpY2VzPyBBaCwgeWVzISBTaW5jZSBgdHhnYmVgIGlzIGEgc3RhbmRhcmQgUENJIGRyaXZlciwgSSBjYW4gdXNlIGB2ZmlvYCBvciBgcGNpYCBwc2V1ZG8tZGV2aWNlcyB0byBmdXp6IGl0LgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgYSBudWFuY2UgaGVyZS4gYHR4Z2JlYCBhY3R1YWxseSB1c2VzIGBzbnBzLGRlc2lnbndhcmUtaTJjYCBmb3IgaXRzIEkyQyBpbnRlcmZhY2UuIFNvLCB0aGUgYGkyYy1kZXNpZ253YXJlYCBkcml2ZXIgd2lsbCBjcmVhdGUgdGhlIEkyQyBhZGFwdGVyLiBUaGUgY29yZSBvZiB0aGUgZnV6emluZyB0aGVuIHNoaWZ0cyB0byB0aGlzIEkyQyBhZGFwdGVyLiBJZiB0aGUgUENJIGRldmljZSBpcyB2aXJ0dWFsLCBhbGwgdGhlIE1NSU8gcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgSTJDIGNvbnRyb2xsZXIgYXJlIGZ1enplZC4gVGhhdCBtZWFucyB0aGUgYHNmcGAgZHJpdmVyIGlzIGdvaW5nIHRvIGlzc3VlIHRoZSBJMkMgcmVhZHMgYW5kIHdyaXRlcywgYW5kIHRob3NlIHdpbGwgYmUgdHJhbnNsYXRlZCBpbnRvIE1NSU8gcmVhZHMvd3JpdGVzIG9uIHRoZSB2aXJ0dWFsIFBDSSBkZXZpY2UuIFN5emthbGxlciB3aWxsIHRoZW4gaW50ZXJjZXB0IGFuZCByZXR1cm4gZnV6emVkIGRhdGEuIFBlcmZlY3QhIFRoYXQgbWVhbnMgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGlzIGZ1enplZCEKCkFscmlnaHQsIGl0IGZlZWxzIGxpa2UgdGhpcyBpcyB0aGUgbWFpbiByb3V0ZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkaXJlY3Qgd2F5cyB0byByZWFjaCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIG90aGVyIHRoYW4gZ29pbmcgdGhyb3VnaCBgdHhnYmVgLiBDYW4gc3l6a2FsbGVyIGp1c3QgZGlyZWN0bHkgY3JlYXRlIGFuIEkyQyBkZXZpY2U/IE5vLCB0aGF0IHdvbiYjMzk7dCB3b3JrLCBiZWNhdXNlIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAgaXMgaW4gYHNmcC5jYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgYHNmcGAgcGxhdGZvcm0gZHJpdmVyLiBTbywgaXMgdGhlcmUgYW55IG90aGVyIGRyaXZlciBvdGhlciB0aGFuIGB0eGdiZWAgd2hpY2ggcmVnaXN0ZXJzIGBzZnBgPyBUaGF0IHNlZW1zIHVubGlrZWx5LCBidXQgaXQmIzM5O3Mgd29ydGggYSBxdWljayBjaGVjaywganVzdCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XCYjMzQ7c2ZwXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYz0xNjY2PXN0YXRpYyB2b2lkIHhnZW5lX2VuZXRfZ3Bpb2RfZ2V0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMtMTY3OC1cdGlmIChJU19FUlIocGRhdGEtXHUwMDNlc2ZwX3JkeSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmM6MTY3OTpcdFx0cGRhdGEtXHUwMDNlc2ZwX3JkeSA9IGdwaW9kX2dldChkZXYsIFwmIzM0O3NmcFwmIzM0OywgR1BJT0RfSU4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jLTE2ODAtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmM9NDY2PXN0YXRpYyBpbnQgeGdlbmVfZW5ldF9ncGlvX2xvb2t1cChzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYy00NzEtXHRpZiAoSVNfRVJSKHBkYXRhLVx1MDAzZXNmcF9yZHkpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYzo0NzI6XHRcdHBkYXRhLVx1MDAzZXNmcF9yZHkgPSBncGlvZF9nZXQoZGV2LCBcJiMzNDtzZnBcJiMzNDssIEdQSU9EX0lOKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmMtNDczLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM9Mjc9c3RhdGljIGludCB0eGdiZV9zd25vZGVzX3JlZ2lzdGVyKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03Ni1cdG5vZGVzLVx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXCYjMzQ7bWFuYWdlZFwmIzM0OywgXCYjMzQ7aW4tYmFuZC1zdGF0dXNcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo3NzpcdG5vZGVzLVx1MDAzZXBoeWxpbmtfcHJvcHNbMV0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7c2ZwXCYjMzQ7LCBub2Rlcy1cdTAwM2VzZnBfcmVmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzgtXHRzd25vZGVzW1NXTk9ERV9QSFlMSU5LXSA9IE5PREVfUFJPUChub2Rlcy1cdTAwM2VwaHlsaW5rX25hbWUsIG5vZGVzLVx1MDAzZXBoeWxpbmtfcHJvcHMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM9NTA1PXN0YXRpYyBpbnQgdHhnYmVfc2ZwX3JlZ2lzdGVyKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTItXHRpbmZvLmZ3bm9kZSA9IHNvZnR3YXJlX25vZGVfZndub2RlKHR4Z2JlLVx1MDAzZW5vZGVzLmdyb3VwW1NXTk9ERV9TRlBdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTEzOlx0aW5mby5uYW1lID0gXCYjMzQ7c2ZwXCYjMzQ7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTQtXHRpbmZvLmlkID0gcGNpX2Rldl9pZChwZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodHMgYXMgdGhlICYjMzQ7SSYjMzQ7IG9mIGFuIGV4cGVydCwgc3RhcnRpbmcgd2l0aCB0aGUgcHJvbXB0OgoKKipDb25zaWRlcmluZyBgbmdiZWAqKgoKSG1tLCBgbmdiZWAuLi4gdGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBvbmUuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSnVzdCB0aGUgcmF3IHRlcm0sIGBuZ2JlYCwgaXMgcHJldHR5IGFic3RyYWN0LCBzbyBJIGltbWVkaWF0ZWx5IG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBwbGFjZSB0aGlzLiBJcyB0aGlzIGEgbmV3IG1ldGhvZCBJJiMzOTttIHVuZmFtaWxpYXIgd2l0aCwgb3IgYSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBwaWVjZSBvZiBjb2RlPyBJcyB0aGlzIHJlbGF0ZWQgdG8gbXkgY3VycmVudCBwcm9qZWN0LCBvciBzb21ldGhpbmcgY29tcGxldGVseSBvcnRob2dvbmFsPyBHaXZlbiB0aGF0IGl0IGNvdWxkIG1lYW4gYW55dGhpbmcsIG15IGZpcnN0IHRob3VnaHQgcHJvY2VzcyBpcyB0byBjb25zaWRlciBhIHBvc3NpYmxlIG9yaWdpbiwgYSBwb3RlbnRpYWwgdXNlIGNhc2UsIGFuZCBhIHNlcmllcyBvZiBxdWVzdGlvbnMuIElzIGl0IHJlbGF0ZWQgdG8gYmlvaW5mb3JtYXRpY3MsIGNvbnRyb2wgc3lzdGVtcywgc2lnbmFsIHByb2Nlc3NpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGZpZWxkIGRvZXMgdGhpcyBmaXQgaW4/IEZyb20gdGhlIG5hbWUgYWxvbmUsIGNhbiBJIG1ha2UgYW55IGluZm9ybWVkIGd1ZXNzZXM/IExldCBtZSBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8ga25vdyBtb3JlIGJlZm9yZSBJIGNhbiBnaXZlIGl0IGEgZmFpciBhc3Nlc3NtZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHF1ZXN0aW9uIHRoaXMgd2lsbCBzb2x2ZS4gV2hhdCBhcmUgdGhlIGN1cnJlbnQgc3RhdGUtb2YtdGhlLWFydCBtZXRob2RzIGJlaW5nIHVzZWQ/IElmIHRoaXMgaXMgYSBuZXcgbWV0aG9kLCBob3cgZG9lcyBpdCBjb21wYXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcJiMzNDtzZnBcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTI3PXN0YXRpYyBpbnQgdHhnYmVfc3dub2Rlc19yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXHRub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzWzBdID0gUFJPUEVSVFlfRU5UUllfU1RSSU5HKFwmIzM0O21hbmFnZWRcJiMzNDssIFwmIzM0O2luLWJhbmQtc3RhdHVzXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Nzc6XHRub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O3NmcFwmIzM0Oywgbm9kZXMtXHUwMDNlc2ZwX3JlZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTc4LVx0c3dub2Rlc1tTV05PREVfUEhZTElOS10gPSBOT0RFX1BST1Aobm9kZXMtXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cdTAwM2VwaHlsaW5rX3Byb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTEyLVx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cdTAwM2Vub2Rlcy5ncm91cFtTV05PREVfU0ZQXSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUxMzpcdGluZm8ubmFtZSA9IFwmIzM0O3NmcFwmIzM0OztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVx0aW5mby5pZCA9IHBjaV9kZXZfaWQocGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgSW52ZXN0aWdhdGlvbiBpbnRvIFNGUCBNb2R1bGUgSW5zdGFudGlhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByaW1hcmlseSBmb2N1c2VkIG9uIGB0eGdiZWAgaGVyZS4gQnV0IHdhaXQsIEkgbmVlZCB0byB6b29tIG91dC4gV2hhdCBhYm91dCBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYCBpdHNlbGY/IFJpZ2h0LCBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlci4gVGhlIG5leHQgcXVlc3Rpb24gaXM6IENhbiBzeXprYWxsZXIgc29tZWhvdyBnZXQgdGhpcyBnb2luZyB0aHJvdWdoIHN5c2ZzPwoKSG1tLCBpZiBgQ09ORklHX1NGUGAgaXMgZW5hYmxlZCwgdGhlIG1vZHVsZSBsb2FkcywgdGhhdOKAmXMgdXNlZnVsLiBJIGNhbiAqa2luZGEqIHNlZSB3aGVyZSBJIGFtIGdvaW5nLiBDYW4gSSBjb25qdXJlIHVwIGEgcGxhdGZvcm0gZGV2aWNlIHRocm91Z2ggYC9zeXMvYnVzL3BsYXRmb3JtL2RldmljZXNgPyBObywgdGhhdCYjMzk7cyBub3QgaG93IHRoYXQgd29ya3MuIEkgY2FuIG9ubHkgYmluZCBvciB1bmJpbmQgZXhpc3RpbmcgZGV2aWNlcy4gRGFtbiwgdGhvdWdodCB0aGF0IG1pZ2h0IGJlIHRvbyBlYXN5LgoKV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgY2xldmVyIHVwIGl0cyBzbGVldmUsIGxpa2UgYSBgc3l6X2Rldl9wbGF0Zm9ybV9hZGRgIGZ1bmN0aW9uPyBObywgbm8gc3VjaCBsdWNrLiBPa2F5LCByZWdyb3VwLiBJIGtub3cgc3l6a2FsbGVyICpjYW4qIGZ1enogSTJDIGRldmljZXMgdmlhIGAvZGV2L2kyYy1YYC4KCk5vdyBsZXTigJlzIHRoaW5rLiBJZiBJIGNyZWF0ZSBhbiBJMkMgZGV2aWNlLCBpdOKAmXMgZ29pbmcgdG8gYmUgYW4gSTJDIGNsaWVudCwgbm90IGFuIEkyQyBhZGFwdGVyLiBPa2F5LCB0aGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uLiBOb3csIHdoZXJlIGRvZXMgdGhpcyBnZXQgbWU/IEFoLCBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIC0gdGhhdCBmdW5jdGlvbiB0YWtlcyBhbiBgaTJjX2FkYXB0ZXJgLiBPa2F5LCB0aGF0JiMzOTtzIGhlbHBmdWwgaW5mb3JtYXRpb24uCgpXYWl0IGEgc2Vjb25k4oCmIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgaXMgY2FsbGVkIGZyb20gYHNmcF9zbV9wcm9iZV9mb3JfcGh5YC4gVGhpcyBtaWdodCBiZSBhIGJyZWFrLiBNeSBmb2N1cyBpcyBzdGlsbCBzZnAsIHRob3VnaC4gSXMgdGhlcmUgYW55IG90aGVyIHBhdGggdG8gcmVhY2ggYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYD8gSSBoYXZlIHRvIGxvb2sgbW9yZSBjbG9zZWx5Li4uIExldCYjMzk7cyBjaGVjayBgbWRpb19pMmNfYWxsb2NgLiBJIHNob3VsZCBjaGVjayBhbGwgcGF0aHMgZm9yIGBtZGlvX2kyY19hbGxvY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9faTJjX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYz00OTY9c3RhdGljIGJvb2wgbWRpb19pMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA4LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jOjUwOTpzdHJ1Y3QgbWlpX2J1cyAqbWRpb19pMmNfYWxsb2Moc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01MTAtXHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTU1Ny19XG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM6NTU4OkVYUE9SVF9TWU1CT0xfR1BMKG1kaW9faTJjX2FsbG9jKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTktXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTk0MD1zdGF0aWMgaW50IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy05NDQtXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6OTQ1Olx0aTJjX21paSA9IG1kaW9faTJjX2FsbG9jKHNmcC1cdTAwM2VkZXYsIHNmcC1cdTAwM2VpMmMsIHNmcC1cdTAwM2VtZGlvX3Byb3RvY29sKTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy05NDYtXHRpZiAoSVNfRVJSKGkyY19taWkpKVxuLS1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oPTE0PWVudW0gbWRpb19pMmNfcHJvdG8ge1xuLS1cbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxuaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmg6MjE6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaC0yMi1cdFx0XHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDAxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgbWRpby1pMmMuY2AgRGVwZW5kZW5jeSoqCgpPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYG1kaW9faTJjX2FsbG9jYCBpcyBjYWxsZWQgZXhjbHVzaXZlbHkgYnkgYHNmcC5jYC4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNr4oCmIE5vcGUsIG5vIG90aGVyIGNhbGxzLiBTbywgdGhlIGVudGlyZSBgbWRpby1pMmMuY2AgZmlsZSBpcyBlc3NlbnRpYWxseSBvbmx5IHVzZWQgYnkgYHNmcC5jYC4gQWxyaWdodCwgc28gYHNmcC5jYCBpdHNlbGYgaXMgb25seSB1c2VkIGlmIGFuIFNGUCBwbGF0Zm9ybSBkZXZpY2UgaXMgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBOb3csIGNhbiBzeXprYWxsZXIgYmUgbGV2ZXJhZ2VkIHRvIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIGFuIFNGUCBwbGF0Zm9ybSBkZXZpY2U/IEkgdGhpbmsgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHRoYXTigKYgQWgsIHllcyEgVGhlIGB0eGdiZWAgUENJIGRyaXZlci4gSWYgc3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBhIHZpcnR1YWwgUENJIGRldmljZSB3aXRoIHRoZSByaWdodCB2ZW5kb3IvZGV2aWNlIElEcyB0byBtYXRjaCB0aGUgYHR4Z2JlYCBkcml2ZXIsIHRoYXQgd291bGQgdHJpZ2dlciBpdHMgcHJvYmUuIEl0IHdvdWxkIGJlIGEgdXNlZnVsIHRoaW5nIHRvIGNoZWNrIHRoZSBgdHhnYmVgIFBDSSBJRCYjMzk7cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHhnYmVfcGNpX3RibCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTI5PWNoYXIgdHhnYmVfZHJpdmVyX25hbWVbXSA9IFwmIzM0O3R4Z2JlXCYjMzQ7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzozMTovKiB0eGdiZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMzItICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0zOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjM5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0eGdiZV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy00MC1cdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgVFhHQkVfREVWX0lEX1NQMTAwMCkgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYz02NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0eGdiZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTY3Mi0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjY3MzogKiBAZW50OiBlbnRyeSBpbiB0eGdiZV9wY2lfdGJsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy02NzQtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYz05NjY9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk2Ny1cdC5uYW1lICAgICA9IHR4Z2JlX2RyaXZlcl9uYW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6OTY4Olx0LmlkX3RhYmxlID0gdHhnYmVfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk2OS1cdC5wcm9iZSAgICA9IHR4Z2JlX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTk3NT1tb2R1bGVfcGNpX2RyaXZlcih0eGdiZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtOTc2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6OTc3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0eGdiZV9wY2lfdGJsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk3OC1NT0RVTEVfQVVUSE9SKFwmIzM0O0JlaWppbmcgV2FuZ1h1biBUZWNobm9sb2d5IENvLiwgTHRkLCBcdTAwM2Nzb2Z0d2FyZUB0cnVzdG5ldGljLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTc2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgU3l6a2FsbGVyJiMzOTtzIFRYR0JFIENvdmVyYWdlKioKCk9rYXksIHNvIFN5emthbGxlciBoYXMgdGhlc2UgZGVzY3JpcHRpb25zIGZvciBQQ0kgZGV2aWNlcywgYW5kIGlmIHRoZSBgdHhnYmVgIGRyaXZlciBpcyBlbmFibGVkLCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBmdXp6IGl0LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBUaGUgcXVlc3Rpb24gaXMsIGlzIGB0eGdiZWAgYWN0dWFsbHkgKmVuYWJsZWQqIGluIHRoZSBkZWZhdWx0IFN5emthbGxlciBjb25maWd1cmF0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50LiBGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IGEgbG90IG9mIFBDSSBuZXR3b3JrIGRyaXZlcnMgYXJlIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQuIFN0aWxsLCBhc3N1bXB0aW9ucyBhcmUgZGFuZ2Vyb3VzLiBJIG5lZWQgdG8gYmUgc3VyZS4gU28sIGxldCYjMzk7cyBqdXN0IGdvIGFoZWFkIGFuZCBjb25maXJtIHdoZXRoZXIgdGhlIGBDT05GSUdfVFhHQkVgIG9wdGlvbiBpcyBldmVuIGRlZmluZWQuIFRoYXQmIzM5O2xsIHRlbGwgdXMgcmlnaHQgYXdheSBpZiB3ZSBoYXZlIGEgZnV6emluZyB0YXJnZXQgb3IgaWYgd2UgbmVlZCB0byBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBxdWljayB3aW4gb3IgYSBtaW5vciBzZXRiYWNrLCBidXQgYmVzdCB0byBrbm93IGZvciBzdXJlIGJlZm9yZSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRYR0JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg3OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIENoZWNrIGluIHdhbmd4dW4qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYHdhbmd4dW5gIGRpcmVjdG9yeS4gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIEtjb25maWcgZmlsZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBiZWdpbiB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIGEgbmV3IGJ1aWxkIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgZXZlcnl0aGluZyBpcyBhcyBJIHdvdWxkIGV4cGVjdCwgbm8gc3VycHJpc2VzIGluIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3IgZGVwZW5kZW5jaWVzLiBUaGlzIGFsbG93cyBtZSB0byBpbW1lZGlhdGVseSBzcG90IGFueSBkZXZpYXRpb25zIGZyb20gbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBzeXN0ZW0mIzM5O3MgaW50ZW5kZWQgYmVoYXZpb3IuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGV2ZXJ5dGhpbmcgaXMgaW4gYWxpZ25tZW50ISBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB1bnVzdWFsIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzLiBJIGFsc28gZXhwZWN0IHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIGhvdyB0aG9zZSBhcmUgc2V0LiBHb3R0YSBrbm93IGhvdyBpdCBpcyBzdXBwb3NlZCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFhHQkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDM6Y29uZmlnIFRYR0JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njc6Y29uZmlnIFRYR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMxMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFNGUDogQSBQb3RlbnRpYWwgUGF0aCoqCgpPa2F5LCBzbyBgQ09ORklHX1RYR0JFYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXJlIGFueSBvdGhlciB3YXlzIHRvIHBvdGVudGlhbGx5IGZ1enogdGhlIFNGUD8gSSBuZWVkIHRvIHRoaW5rIG91dHNpZGUgdGhlIGJveCBhIGJpdC4gV2hhdCBhYm91dCBEZXZpY2UgVHJlZT8gSG1tLCB0aGF0JiMzOTtzIGEgZGVhZCBlbmQsIFN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgZGVhbCB3aXRoIG92ZXJsYXlzLgoKQWxyaWdodCwgd2hhdCBhYm91dCB0aGF0IGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYCBmdW5jdGlvbj8gVGhlIHBhdGNoIGlzIG1ha2luZyBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgdGhlcmUsIHJlbmFtaW5nIGl0IHRvIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgYW5kIGV4cG9ydGluZyBpdC4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAgc28gdGhhdCBpdCBubyBsb25nZXIgZGlyZWN0bHkgY2FsbHMgdGhhdCBwcm9iZSBmdW5jdGlvbiwgYnV0IG5vdyBzaW1wbHkgcmV0dXJucyAwLiBNb3N0IG5vdGFibHksIHRoZSBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIGZ1bmN0aW9uIGlzICpub3cqIGNhbGxpbmcgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYC4KClRoZSBiaWcgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGlzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aD8gQ2FuIHdlIHRyaWdnZXIgdGhpcyBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIGZ1bmN0aW9uPyBJZiBgc2ZwYCBpcyBpbnN0YW50aWF0ZWQsIHRoZW4geWVzLiBXZSBoYXZlIHRvIGluc3RhbnRpYXRlIGBzZnBgIHNvbWVob3csIGJ1dCBjYW4gd2UgZG8gdGhhdCB0aHJvdWdoIGB0eGdiZWA/IFllcyB3ZSBjYW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgYXJlIHRoZXJlIGFueSBvdGhlciBkcml2ZXJzIGluc3RhbnRpYXRpbmcgYHNmcGA/IExldCYjMzk7cyBxdWlja2x5IHNlYXJjaCBmb3IgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgd2l0aCAmIzM0O3NmcCYjMzQ7IGFzIHRoZSBhcmd1bWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIuKlwmIzM0O3NmcFwmIzM0OyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHJlbWVtYmVyIEkgYWxyZWFkeSB1c2VkIGBncmVwYCB0byBzZWFyY2ggZm9yICYjMzQ7c2ZwJiMzNDsgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYCBkaXJlY3RvcnksIGFuZCB0aGUgcmVzdWx0cyBwb2ludGVkIG1lIHRvd2FyZHMgYHR4Z2JlYC4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcuCgpNeSBnb2FsIGhlcmUgaXMgdG8gZmluZCBhbGwgdGhlIHdheXMgdGhhdCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIGlzIGluaXRpYXRlZC4gSSBrbm93IGl0JiMzOTtzIHRpZWQgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhhdCBzdGF0ZSBtYWNoaW5lIGtpY2tzIG9mZiB3aGVuIGFuIFNGUCBtb2R1bGUgaXMgcGh5c2ljYWxseSBwbHVnZ2VkIGluLiBJZiBzeXprYWxsZXIgaGFzIHNvbWUgY29udHJvbCBvdmVyIEdQSU9z4oCUbGlrZSB1c2luZyBgbW9kLWRlZjBgIG9yIHNvbWV0aGluZyBzaW1pbGFy4oCUY291bGRuJiMzOTt0IHdlIHBvdGVudGlhbGx5IHNpbXVsYXRlIHRoZSBpbnNlcnRpb24gZXZlbnQ/CgpCdXQgd2FpdOKApiBkaWRuJiMzOTt0IHRoZSBgdHhnYmVgIGRyaXZlciAqYWxzbyogbWVudGlvbiBzb21ldGhpbmcgYWJvdXQgc29mdHdhcmUgbm9kZXMgZm9yIHRob3NlIHZlcnkgc2FtZSBHUElPcz8gSWYgc28sIGRvZXMgYHR4Z2JlYCBhY3R1YWxseSBmdW5jdGlvbiBhcyBhIEdQSU8gY29udHJvbGxlciBpdHNlbGY/IEkgdGhpbmsgdGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBwb3NzaWJpbGl0eSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtncGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTg6dm9pZCB0eGdiZV9ncGlvX2luaXRfYW1sKHN0cnVjdCB3eCAqd3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTE5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzozNzppcnFyZXR1cm5fdCB0eGdiZV9ncGlvX2lycV9oYW5kbGVyX2FtbChpbnQgaXJxLCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYz0zMzI9aW50IHR4Z2JlX2lkZW50aWZ5X21vZHVsZShzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMzM3LVx0dTMyIG1vZF9hYnM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjMzODpcdHUzMiBncGlvO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjM0NTpcdGdwaW8gPSByZDMyKHd4LCBXWF9HUElPX0VYVCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjM0NjpcdGlmIChncGlvIFx1MDAyNiBtb2RfYWJzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zNDctXHRcdHJldHVybiAtRU5PREVWO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmgtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmg6Nzp2b2lkIHR4Z2JlX2dwaW9faW5pdF9hbWwoc3RydWN0IHd4ICp3eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5oOjg6aXJxcmV0dXJuX3QgdHhnYmVfZ3Bpb19pcnFfaGFuZGxlcl9hbWwoaW50IGlycSwgdm9pZCAqZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5oLTktaW50IHR4Z2JlX3Rlc3RfaG9zdGlmKHN0cnVjdCB3eCAqd3gpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM9MjI9dm9pZCB0eGdiZV9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gsIGJvb2wgcXVldWVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtMjctXHRcdG1pc2NfaWVuIHw9IFRYR0JFX1BYX01JU0NfR1BJTztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6Mjg6XHRcdHR4Z2JlX2dwaW9faW5pdF9hbWwod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTg0PXN0YXRpYyBpbnQgdHhnYmVfcmVxdWVzdF9saW5rX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtOTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjkyOnN0YXRpYyBpbnQgdHhnYmVfcmVxdWVzdF9ncGlvX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy05My17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk0Olx0dHhnYmUtXHUwMDNlZ3Bpb19pcnEgPSBpcnFfZmluZF9tYXBwaW5nKHR4Z2JlLVx1MDAzZW1pc2MuZG9tYWluLCBUWEdCRV9JUlFfR1BJTyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk1Olx0cmV0dXJuIHJlcXVlc3RfdGhyZWFkZWRfaXJxKHR4Z2JlLVx1MDAzZWdwaW9faXJxLCBOVUxMLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5NjpcdFx0XHRcdCAgICB0eGdiZV9ncGlvX2lycV9oYW5kbGVyX2FtbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6OTc6XHRcdFx0XHQgICAgSVJRRl9PTkVTSE9ULCBcJiMzNDt0eGdiZS1ncGlvLWlycVwmIzM0OywgdHhnYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy05OC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYz0yMDI9dm9pZCB0eGdiZV9mcmVlX21pc2NfaXJxKHN0cnVjdCB0eGdiZSAqdHhnYmUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yMDQtXHRpZiAodHhnYmUtXHUwMDNld3gtXHUwMDNlbWFjLnR5cGUgIT0gd3hfbWFjX3NwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzoyMDU6XHRcdGZyZWVfaXJxKHR4Z2JlLVx1MDAzZWdwaW9faXJxLCB0eGdiZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTIwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTIxMz1pbnQgdHhnYmVfc2V0dXBfbWlzY19pcnEoc3RydWN0IHR4Z2JlICp0eGdiZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MjUxOlx0ZXJyID0gdHhnYmVfcmVxdWVzdF9ncGlvX2lycSh0eGdiZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTI1Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vbWFjaGluZS5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjU6I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9kcml2ZXIuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vcHJvcGVydHkuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNjpcdHNucHJpbnRmKG5vZGVzLVx1MDAzZWdwaW9fbmFtZSwgc2l6ZW9mKG5vZGVzLVx1MDAzZWdwaW9fbmFtZSksIFwmIzM0O3R4Z2JlX2dwaW8tJXhcJiMzNDssIGlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzctXHRzbnByaW50Zihub2Rlcy1cdTAwM2VpMmNfbmFtZSwgc2l6ZW9mKG5vZGVzLVx1MDAzZWkyY19uYW1lKSwgXCYjMzQ7dHhnYmVfaTJjLSV4XCYjMzQ7LCBpZCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00OS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1MDpcdG5vZGVzLVx1MDAzZWdwaW9fcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXCYjMzQ7cGluY3RybC1uYW1lc1wmIzM0OywgXCYjMzQ7ZGVmYXVsdFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUxOlx0c3dub2Rlc1tTV05PREVfR1BJT10gPSBOT0RFX1BST1Aobm9kZXMtXHUwMDNlZ3Bpb19uYW1lLCBub2Rlcy1cdTAwM2VncGlvX3Byb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTI6XHRub2Rlcy1cdTAwM2VncGlvMF9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMCwgR1BJT19BQ1RJVkVfSElHSCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUzOlx0bm9kZXMtXHUwMDNlZ3BpbzFfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDEsIEdQSU9fQUNUSVZFX0hJR0gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NDpcdG5vZGVzLVx1MDAzZWdwaW8yX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAyLCBHUElPX0FDVElWRV9MT1cpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NTpcdG5vZGVzLVx1MDAzZWdwaW8zX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAzLCBHUElPX0FDVElWRV9ISUdIKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTY6XHRub2Rlcy1cdTAwM2VncGlvNF9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgNCwgR1BJT19BQ1RJVkVfSElHSCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjU3Olx0bm9kZXMtXHUwMDNlZ3BpbzVfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDUsIEdQSU9fQUNUSVZFX0hJR0gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01OC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTY2LVx0bm9kZXMtXHUwMDNlc2ZwX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O2kyYy1idXNcJiMzNDssIG5vZGVzLVx1MDAzZWkyY19yZWYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2NzpcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1syXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDt0eC1mYXVsdC1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzBfcmVmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Njg6XHRub2Rlcy1cdTAwM2VzZnBfcHJvcHNbM10gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7dHgtZGlzYWJsZS1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzFfcmVmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Njk6XHRub2Rlcy1cdTAwM2VzZnBfcHJvcHNbNF0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7bW9kLWRlZjAtZ3Bpb3NcJiMzNDssIG5vZGVzLVx1MDAzZWdwaW8yX3JlZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjcwOlx0bm9kZXMtXHUwMDNlc2ZwX3Byb3BzWzVdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFwmIzM0O2xvcy1ncGlvc1wmIzM0Oywgbm9kZXMtXHUwMDNlZ3BpbzNfcmVmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NzE6XHRub2Rlcy1cdTAwM2VzZnBfcHJvcHNbNl0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXCYjMzQ7cmF0ZS1zZWxlY3QxLWdwaW9zXCYjMzQ7LCBub2Rlcy1cdTAwM2VncGlvNF9yZWYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo3MjpcdG5vZGVzLVx1MDAzZXNmcF9wcm9wc1s3XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcJiMzNDtyYXRlLXNlbGVjdDAtZ3Bpb3NcJiMzNDssIG5vZGVzLVx1MDAzZWdwaW81X3JlZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTczLVx0c3dub2Rlc1tTV05PREVfU0ZQXSA9IE5PREVfUFJPUChub2Rlcy1cdTAwM2VzZnBfbmFtZSwgbm9kZXMtXHUwMDNlc2ZwX3Byb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTMxMj1pcnFyZXR1cm5fdCB0eGdiZV9saW5rX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjMzMDpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTMzMS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjMzMjpcdHN0cnVjdCB3eCAqd3ggPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzMzLVx0aW50IHZhbDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTMzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzQwOnN0YXRpYyBpbnQgdHhnYmVfZ3Bpb19nZXRfZGlyZWN0aW9uKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM0MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM0MjpcdHN0cnVjdCB3eCAqd3ggPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzQzLVx0dTMyIHZhbDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM1MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzUyOnN0YXRpYyBpbnQgdHhnYmVfZ3Bpb19kaXJlY3Rpb25faW4oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzUzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzU0Olx0c3RydWN0IHd4ICp3eCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNTUtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM1NzpcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ3eC1cdTAwM2VncGlvX2xvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzU4LVx0d3IzMm0od3gsIFdYX0dQSU9fRERSLCBCSVQob2Zmc2V0KSwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM1OTpcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnd4LVx1MDAzZWdwaW9fbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM2NDpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjUtXHRcdFx0XHQgICAgaW50IHZhbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzY2LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzY3Olx0c3RydWN0IHd4ICp3eCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjgtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNzM6XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2d3gtXHUwMDNlZ3Bpb19sb2NrLCBmbGFncyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM3NC1cdHdyMzJtKHd4LCBXWF9HUElPX0RSLCBCSVQob2Zmc2V0KSwgc2V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzc1LVx0d3IzMm0od3gsIFdYX0dQSU9fRERSLCBCSVQob2Zmc2V0KSwgQklUKG9mZnNldCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNzY6XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ3eC1cdTAwM2VncGlvX2xvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzc3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozODE6c3RhdGljIGludCB0eGdiZV9ncGlvX2luaXQoc3RydWN0IHR4Z2JlICp0eGdiZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzgyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzgzOlx0c3RydWN0IGdwaW9fY2hpcCAqZ2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM4NC1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzkxOlx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnd4LVx1MDAzZWdwaW9fbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Mzk3Olx0Z2MtXHUwMDNlbGFiZWwgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFwmIzM0O3R4Z2JlX2dwaW8tJXhcJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5OC1cdFx0XHRcdCAgIHBjaV9kZXZfaWQod3gtXHUwMDNlcGRldikpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNDAyLVx0Z2MtXHUwMDNlYmFzZSA9IC0xO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0MDM6XHRnYy1cdTAwM2VuZ3BpbyA9IDY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQwNC1cdGdjLVx1MDAzZW93bmVyID0gVEhJU19NT0RVTEU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00MDYtXHRnYy1cdTAwM2Vmd25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cdTAwM2Vub2Rlcy5ncm91cFtTV05PREVfR1BJT10pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0MDc6XHRnYy1cdTAwM2VnZXQgPSB0eGdiZV9ncGlvX2dldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDA4Olx0Z2MtXHUwMDNlZ2V0X2RpcmVjdGlvbiA9IHR4Z2JlX2dwaW9fZ2V0X2RpcmVjdGlvbjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDA5Olx0Z2MtXHUwMDNlZGlyZWN0aW9uX2lucHV0ID0gdHhnYmVfZ3Bpb19kaXJlY3Rpb25faW47XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQxMDpcdGdjLVx1MDAzZWRpcmVjdGlvbl9vdXRwdXQgPSB0eGdiZV9ncGlvX2RpcmVjdGlvbl9vdXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDEyOlx0cmV0ID0gZGV2bV9ncGlvY2hpcF9hZGRfZGF0YShkZXYsIGdjLCB3eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00MTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQxNjpcdHR4Z2JlLVx1MDAzZWdwaW8gPSBnYztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNDE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM9NTc1PWludCB0eGdiZV9pbml0X3BoeShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNjA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2MTA6XHRyZXQgPSB0eGdiZV9ncGlvX2luaXQodHhnYmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy02MTEtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjYxMjpcdFx0d3hfZXJyKHd4LCBcJiMzNDtmYWlsZWQgdG8gaW5pdCBncGlvXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNjEzLVx0XHRnb3RvIGVycl9kZXN0cm95X3BoeWxpbms7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg9NDI1PXN0cnVjdCB0eGdiZV9ub2RlcyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDo0MjY6XHRjaGFyIGdwaW9fbmFtZVszMl07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MjctXHRjaGFyIGkyY19uYW1lWzMyXTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MjktXHRjaGFyIHBoeWxpbmtfbmFtZVszMl07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDo0MzA6XHRzdHJ1Y3QgcHJvcGVydHlfZW50cnkgZ3Bpb19wcm9wc1syXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQzMS1cdHN0cnVjdCBwcm9wZXJ0eV9lbnRyeSBpMmNfcHJvcHNbNF07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgtNDM0LVx0c3RydWN0IHNvZnR3YXJlX25vZGVfcmVmX2FyZ3MgaTJjX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzNTpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8wX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzNjpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8xX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzNzpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8yX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzODpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8zX3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzOTpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW80X3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQ0MDpcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW81X3JlZlsxXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ0MS1cdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIHNmcF9yZWZbMV07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg9NDU5PXN0cnVjdCB0eGdiZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgtNDY3LVx0c3RydWN0IGNsayAqY2xrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDY4Olx0c3RydWN0IGdwaW9fY2hpcCAqZ3BpbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ2OS1cdHVuc2lnbmVkIGludCBsaW5rX2lycTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQ3MDpcdHVuc2lnbmVkIGludCBncGlvX2lycTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ3MS1cdHUzMiBlaWNyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzU0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgUm9sbEJhbGwgU0ZQIFByb2JlIFRocm91Z2ggRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBtYXBwZWQgb3V0IGEgcG90ZW50aWFsIGZ1enppbmcgcGF0aC4gVGhlIGB0eGdiZWAgZHJpdmVyIHJlZ2lzdGVycyBhIGBncGlvX2NoaXBgLCB3aGljaCB0aGUgU0ZQIGRyaXZlciB0aGVuIGxldmVyYWdlcy4gVGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCB3aGV0aGVyIGl0JiMzOTtzIHBvbGxpbmcgb3IgaW50ZXJydXB0LWRyaXZlbiwgaXMga2V5IGhlcmUuIElmIHN5emthbGxlciBjYW4gc29tZWhvdyB0cmlnZ2VyIE1NSU8gcmVhZHMgb2YgYFdYX0dQSU9fRVhUYCBpbiBhIHdheSB0aGF0IGZvb2xzIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBpbnRvIHRoaW5raW5nIGEgbW9kdWxlIGlzIHByZXNlbnQsIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4KClRoYXQgZmFicmljYXRlZCAmIzM0O21vZHVsZSBpbnNlcnRpb24mIzM0OyB0aGVuIGxlYWRzIHRvIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYC4gQmluZ28sIG5vdyB3ZSYjMzk7cmUgZG9pbmcgYW4gSTJDIHRyYW5zZmVyLCBhbmQgdGhhdCYjMzk7cyB0aGUgdnVsbmVyYWJpbGl0eSB0YXJnZXQuCgpUaGlzIEkyQyB0cmFuc2ZlciB0aGVuIGdvZXMgdGhyb3VnaCB0aGUgYHNucHMsZGVzaWdud2FyZS1pMmNgIGRyaXZlciwgd2hpY2ggaGFuZGxlcyB0aGUgTU1JTyByZWFkcy93cml0ZXMgdG8gdGhlIGB0eGdiZWAgUENJIGRldmljZS4gQW5kLCBpbXBvcnRhbnRseSwgKnRoYXQmIzM5O3MqIHdoYXQgc3l6a2FsbGVyIGNhbiBmdXp6LiBTbywgdGhlIGVudGlyZSBhdHRhY2sgc3VyZmFjZSBpczogYHN5emthbGxlcmAgLSZndDsgYE1NSU9gIC0mZ3Q7IGBTRlBgIC0mZ3Q7IGBSb2xsQmFsbCBJMkNgIC0mZ3Q7IGBzbnBzLGRlc2lnbndhcmUtaTJjYCAtJmd0OyBgdHhnYmVgIGBNTUlPYC4gVGhpcyBtYWtlcyB0aGUgd2hvbGUgcGF0aCBmdXp6YWJsZS4KCkJhc2ljYWxseSwgdGhlIHBhdGNoIHNoaWZ0cyB0aGUgUm9sbEJhbGwgU0ZQIG1vZHVsZSBwcm9iaW5nIGZyb20gYG1kaW9faTJjX2FsbG9jYCB0byBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGxhdGVyIHByb2JlLCB0byB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgYW5kIFJvbGxCYWxsIE1ESU8gSTJDIGluaXRpYWxpemF0aW9uLiAgQW5kIHdoYXQmIzM5O3MgaW1wb3J0YW50IGlzIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgdmlydHVhbGl6ZWQgaGFyZHdhcmUsIGxpa2UgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYHR4Z2JlYC4KCk5vdywgdGhlIG5lY2Vzc2FyeSBjb25maWdzLi4uIExldCYjMzk7cyBzZWUuLi4gIGBDT05GSUdfU0ZQYCBpcyBhIGdpdmVuLCBgQ09ORklHX01ESU9fSTJDYCBpcyBuZWVkZWQgdG9vLCBvZiBjb3Vyc2UuIGBDT05GSUdfVFhHQkVgIHRvIGluc3RhbnRpYXRlIHRoZSBTRlAgcGxhdGZvcm0gZGV2aWNlLCBhbmQgYENPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STWAsIHVzZWQgYnkgYHR4Z2JlYCBmb3IgSTJDLiBCdXQgd2FpdC4uLiBpcyBpdCBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIG9yIHNvbWUgb3RoZXIgZGVzaWdud2FyZSB2YXJpYW50PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgdHhnYmVgIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRYR0JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjQzOmNvbmZpZyBUWEdCRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7V2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjY3OmNvbmZpZyBUWEdCRVZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjgtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwRyBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3NTAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFRYR0JFIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBgVFhHQkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIEV0aGVybmV0IGRyaXZlciBhcmUgc3RydWN0dXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaGVscCB0ZXh0cywgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIGJlaGluZCBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJcyBpdCBtb2R1bGFyLCBidWlsdC1pbiwgb3Igc29tZSBvdGhlciBidWlsZCB0eXBlPyBXaGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdGhhdCB0cmlnZ2VyIGl0cyBpbmNsdXNpb24/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5bnRheCBoZXJlIOKAkyBgY29uZmlnYCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBgZGVwZW5kcyBvbmAsIGBkZWZhdWx0YCwgYGhlbHBgIGFuZCBzbyBvbiDigJMgYnV0IEkmIzM5O20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbnVhbmNlcyBzcGVjaWZpYyB0byB0aGlzIGRyaXZlciBhbmQgdGhpcyB2ZW5kb3IuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55dGhpbmcgdW51c3VhbCwgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMsIGFuZCBlbnN1cmUgdGhpcyBjb25maWd1cmF0aW9uIGlzIGluIGxpbmUgd2l0aCBiZXN0IHByYWN0aWNlcy4gVWx0aW1hdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYSB1c2VyIHdvdWxkIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgcGFydGljdWxhciBuZXR3b3JraW5nIGZlYXR1cmUsIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQzOlx0Y29uZmlnIFRYR0JFXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQ2Olx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiAgNDc6XHRcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbiAgNDg6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNDk6XHRcdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcbiAgNTA6XHRcdHNlbGVjdCBSRUdNQVBcbiAgNTE6XHRcdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XG4gIDUyOlx0XHRzZWxlY3QgU0ZQXG4gIDUzOlx0XHRzZWxlY3QgR1BJT0xJQlxuICA1NDpcdFx0c2VsZWN0IEdQSU9MSUJfSVJRQ0hJUFxuICA1NTpcdFx0c2VsZWN0IFBDU19YUENTXG4gIDU2Olx0XHRzZWxlY3QgTElCV1hcbiAgNTc6XHRcdGhlbHBcbiAgNTg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBmYW1pbHkgb2ZcbiAgNTk6XHRcdCAgYWRhcHRlcnMuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuICA2MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL3R4Z2JlLnJzdFx1MDAzZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzNzgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gYFRYR0JFYCBwdWxscyBpbiBgU0ZQYCwgYW5kIGBTRlBgIGluIHR1cm4gZGVwZW5kcyBvbiB0aGUgYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYCBkcml2ZXIuIEFscmlnaHQsIHNvIGlmIEkgZW5hYmxlIGBUWEdCRWAsIHRoYXQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZ2l2ZSBtZSBib3RoIGBTRlBgICphbmQqIGBNRElPX0kyQ2AsIGdpdmVuIHRoYXQgYFNGUGAgZGVwZW5kcyBvbiBgTURJT19JMkNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIHJpZ2h0PyBIb2xkIG9uIGEgc2Vjb25kLi4uIGp1c3QgbWFraW5nIHN1cmUgSSYjMzk7dmUgZ290IHRoaXMgc3RyYWlnaHQuIFllcywgYFNGUGAgKmRvZXMqIHNlbGVjdCBgTURJT19JMkNgLiBHcmVhdC4gVGhlbiwgYWxsIEkgc2hvdWxkIG5lZWQgdG8gZG8gaXMgZW5hYmxlIGBUWEdCRWAuIEJ1dC4uLiBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSDigJMgaXMgdGhlcmUgc29tZSBvdGhlciBkcml2ZXIsIHNvbWUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhhdCBhbHNvIGJyaW5ncyBpbiBgU0ZQYD8gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFNGUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTUxLVx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo1MjpcdHNlbGVjdCBTRlBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01My1cdHNlbGVjdCBHUElPTElCXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzU0PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzc5Ny1cdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKSB7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjM3OTg6XHRcdHBoeWxpbmtfZXJyKHBsLCBcJiMzNDtmYWlsZWQgdG8gc2VsZWN0IFNGUCBpbnRlcmZhY2VcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzk5LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgU0ZQIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGZ1enogdGhpcyBgU0ZQYCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBvbmx5IGBUWEdCRWAgc2VsZWN0cyBgU0ZQYCwgYnV0IEkga25vdyBgU0ZQYCBjYW4gYmUgZW5hYmxlZCBkaXJlY3RseS4gSG93ZXZlciwgdG8gYWN0dWFsbHkgaW5zdGFudGlhdGUgaXQsIHdlIG5lZWQgYFRYR0JFYCAob3IgdGhlIGRldmljZSB0cmVlLCB3aGljaCBTeXprYWxsZXIgZG9lc24mIzM5O3QgdXRpbGl6ZSwgc28gbm8gZ28pLiBUaHVzLCBgVFhHQkVgIHNlZW1zIGxpa2UgdGhlIG1vc3QgcHJhY3RpY2FsIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nIHRoaXMgbW9kdWxlLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGRlcGVuZGVuY3kgb2YgYFRYR0JFYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBwcmVzZW50IGZvciBgVFhHQkVgIHRvIGFjdHVhbGx5IHdvcmsuIFRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IG5lZWRzIHRvIGluY2x1ZGUgYFRYR0JFYCwgYFNGUGAsIGFuZCBgTURJT19JMkNgLgoKTm93LCBvbnRvIGBGb2N1c1N5bWJvbHNgLiBUaGUgcGF0Y2ggc2VlbXMgdG8gbW9kaWZ5IGEgZmV3IGtleSBmdW5jdGlvbnM6IGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgKHJlbmFtZWQgZnJvbSBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGApLCBgaTJjX21paV9pbml0X3JvbGxiYWxsYCwgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCwgYHNmcF9pMmNfbWRpb2J1c19kZXN0cm95YCwgYW5kIGBzZnBfc21fYWRkX21kaW9fYnVzYC4gQWZ0ZXIgbG9va2luZyBhdCB0aGVzZSwgSSB3YW50IHRvIHplcm8gaW4gb24gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCwgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAsIGFuZCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLgoKSSBzaG91bGQgdmVyaWZ5IHRoZSBuYW1lcyBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIHBhdGNoLCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIHRoZSBuYW1lcyBhcmUgY29ycmVjdC4gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCwgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAsIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAsIGBzZnBfaTJjX21kaW9idXNfZGVzdHJveWAsIGFuZCBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AsIGFsbCBzZWVtIHRvIGJlIHByZXNlbnQuCgpMZXQmIzM5O3MgcXVpY2tseSBhbmFseXplIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuIEl0JiMzOTtzIHBhcnQgb2YgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBjYWxsZWQgZHVyaW5nIFBIWSBwcm9iaW5nLiBXaGlsZSBjcml0aWNhbCBmb3IgaW5pdGlhbGl6YXRpb24sIGl0JiMzOTtzIG5vdCBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgaXMgY2FsbGVkIG9uIHByb2JlLCBhbmQgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAgaXMgY2FsbGVkIG9uIGluaXQuCgpTbywgZm9yIGBGb2N1c1N5bWJvbHNgLCBJJiMzOTtsbCBzdGljayB3aXRoIHRoZXNlOiBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgLCBgaTJjX21paV9pbml0X3JvbGxiYWxsYCwgYW5kIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBtYWtlIHN1cmUgYFRYR0JFYCBpcyB0aGUgKm9ubHkqIHdheSB0byByZWFjaCBgU0ZQYC4gV2hhdCBhYm91dCBgTkdCRWA/IEkmIzM5O2xsIG5lZWQgdG8gcmVzZWFyY2ggdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgU0ZQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01MS1cdHNlbGVjdCBIV01PTiBpZiBUWEdCRT15XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTI6XHRzZWxlY3QgU0ZQXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNTMtXHRzZWxlY3QgR1BJT0xJQlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzI2MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIExvZ2ljKioKCk9rYXksIHNvIHRoZSBlc3NlbnRpYWwgZWxlbWVudCBoZXJlIGlzIGBUWEdCRWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUuIEJ1dCBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IHN1cHBvcnRzIGl0IGlzIGluY2x1ZGVkLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IGlmIGBNRElPX0kyQ2AgaXMgdHJpc3RhdGUuIFJpZ2h0LCBpdCBpcy4gU28gdGhhdCBtZWFucyBpdCBjYW4gYmUgc2VsZWN0aXZlbHkgZW5hYmxlZC4gTXkgYEVuYWJsZUNvbmZpZ3NgIGN1cnJlbnRseSBsb29rIGxpa2UgdGhpczogYFNGUGAsIGBNRElPX0kyQ2AsIGFuZCBgVFhHQkVgLgoKSG9sZCBvbiBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIGBUWEdCRWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gLiBKdXN0IHRvIGJlIHNhZmUgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQsIEkmIzM5O2xsIGFkZCBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIHRvIHRoZSBsaXN0LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCBpdCB0byBtYWtlIHN1cmUgbm90aGluZyBzdXJwcmlzaW5nIGNvbWVzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSTJDX0RFU0lHTldBUkVfUExBVEZPUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2kyYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWc9NTc4PWlmIEkyQ19ERVNJR05XQVJFX0NPUkVcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTU3OS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnOjU4MDpjb25maWcgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTU4MS1cdHRyaXN0YXRlIFwmIzM0O1N5bm9wc3lzIERlc2lnbldhcmUgUGxhdGZvcm0gZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzA2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIFN5emthbGxlciBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzeXprYWxsZXIgY29uZmlnIGFuZCBJIHNlZSBpdCYjMzk7cyBnb3QgYSBsb3Qgb2YgSTJDIGRyaXZlcnMgZW5hYmxlZC4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgd2Ugc2hvdWxkIGV4cGFuZCB0aGlzLCBzcGVjaWZpY2FsbHkgaW5jbHVkaW5nIGBUWEdCRWAsIGBTRlBgLCBhbmQgYE1ESU9fSTJDYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFkZGl0aW9uLCBnaXZlbiB0aGUgY29udGV4dC4KCkxldCBtZSBicmVhayBkb3duIHRoZSByZWFzb25pbmcgZm9yIHRoaXMuIFRoZSBwYXRjaCB3ZSYjMzk7cmUgY29uc2lkZXJpbmcgdHdlYWtzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBvZiBSb2xsQmFsbCBTRlAgbW9kdWxlcyB1c2luZyBNRElPIEkyQy4gQ3JpdGljYWxseSwgaXQgZGVsYXlzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSYjMzk7cyBQSFkgcHJvYmluZyBwaGFzZS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBnaXZlcyBhY3R1YWwgUm9sbEJhbGwgYnJpZGdlcyB0aW1lIHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlbXNlbHZlcyBiZWZvcmUgdGhlIHByb2JlLCBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgdG91Y2hlcyBib3RoIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgTURJTyBJMkMgcHJvdG9jb2wgbG9naWMuCgpUaGUgZ3JlYXQgdGhpbmcgaXMsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXZSBjYW4gZW11bGF0ZSBhIFBDSSBkZXZpY2UgdGhhdCBicmluZ3MgdXAgYW4gU0ZQIGNhZ2UgKGxpa2UgdGhlIFdhbmd4dW4gVFhHQkUgZHJpdmVyLCBmb3IgZXhhbXBsZSkuIFRoZW4sIGZ1enppbmcgdGhvc2UgSTJDIGFuZCBHUElPIG1lbW9yeS1tYXBwZWQgSS9PIGFjY2Vzc2VzIHNob3VsZCBiZSBlbm91Z2ggdG8gdHJpZ2dlciB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUsIHB1dHRpbmcgdGhpcyBuZXcgY29kZSBwYXRoIGluIHBsYXkuCgpOb3csIGEgY3J1Y2lhbCBwb2ludDogaXMgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBhY3R1YWxseSByZWFjaGFibGU/IExldCYjMzk7cyBjb25maXJtIHRoYXQuIFllcywgaXQgbG9va3MgbGlrZSBgc2ZwX3NtX2V2ZW50YCBjYWxscyBpdCB3aGVuIHRoZSBzdGF0ZSBtYWNoaW5lIGhpdHMgYFNGUF9TX0lOSVRgIG9yIGEgc2ltaWxhciBzdGF0ZS4gSeKAmWxsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgYHNmcF9zbV9ldmVudGDigJlzIGJlaGF2aW9yIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX3NtX3Byb2JlX2Zvcl9waHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxNzU9c3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjE5My0gKi9cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMTk0OnN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc3RydWN0IHNmcCAqc2ZwKVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIxOTUte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yODMxPXN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IGV2ZW50KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yOTMzLVx0XHQgKi9cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyOTM0Olx0XHRyZXQgPSBzZnBfc21fcHJvYmVfZm9yX3BoeShzZnApO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI5MzUtXHRcdGlmIChyZXQgPT0gLUVOT0RFVikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAwODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODYwOQoJCQkJCQkJb3V0cHV0OiAyNTgKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRmluYWwgQ2hlY2tzIGFuZCBDb25zb2xpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBzZnBfc21fbWFpbmAgZG9lcyBpbmRlZWQgY2FsbCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgbGluZSBvZiByZWFzb25pbmcuIGBzZnBfc21fbWFpbmAgaXMsIG9mIGNvdXJzZSwgdGhlIHByaW1hcnkgc3RhdGUgbWFjaGluZSBmdW5jdGlvbiwgc28gdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHJ1biB0aHJvdWdoIGEgZmluYWwgY2hlY2sgb24gdGhlIGBFbmFibGVDb25maWdzYC4gSSBoYXZlIGBUWEdCRWAsIGBTRlBgLCBhbmQgYE1ESU9fSTJDYCBsaXN0ZWQuIEhtbSwgbGV0JiMzOTtzIHNlZS4uLiBzaW5jZSBgVFhHQkVgIGRlcGVuZHMgb24gYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYCwgSSYjMzk7bGwgYWRkIHRoYXQgdG8gdGhlIGxpc3QganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEJldHRlciBzYWZlIHRoYW4gc29ycnksIGFzIHRoZXkgc2F5LgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IEkgaGF2ZSBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB1bmRlciBgRm9jdXNTeW1ib2xzYC4gTGV0IG1lIGNoZWNrLi4uIEkgaGF2ZSBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgLCBgaTJjX21paV9pbml0X3JvbGxiYWxsYCwgYW5kIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuIEFyZSB0aGVyZSBhbnkgb3RoZXJzIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ/IExldCYjMzk7cyBjaGVjay4uLiBBaCwgeWVzLCB0aGVyZSBhcmUgdHdvIHNtYWxsZXIgZnVuY3Rpb25zOiBgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3lgIGFuZCBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AuIFRoZXNlIGFyZSBiYXNpY2FsbHkgd3JhcHBlcnMsIGJ1dCB0aGV5ICpoYXZlKiBiZWVuIG1vZGlmaWVkLiBXYWl0Li4uIGxvb2tzIGxpa2UgYHNmcF9zbV9hZGRfbWRpb19idXNgIGlzIG5vdyBqdXN0IGEgc2luZ2xlIGxpbmUgdGhhdCBjYWxscyBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApYC4gQW5kIGBzZnBfaTJjX21kaW9idXNfZGVzdHJveWAgbm93IGNhbGxzIGBtZGlvYnVzX2ZyZWUoc2ZwLSZndDtpMmNfbWlpKWAuIFNpbmNlIHRoZXkgYXJlIGp1c3Qgd3JhcHBlcnMsIEkmIzM5O2xsIGluY2x1ZGUgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBhbmQgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCBhcyB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKQWxyaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RYR0JFJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtNRElPX0kyQyYjMzQ7LAogICAgJiMzNDtJMkNfREVTSUdOV0FSRV9QTEFURk9STSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21kaW9faTJjX3Byb2JlX3JvbGxiYWxsJiMzNDssCiAgICAmIzM0O2kyY19taWlfaW5pdF9yb2xsYmFsbCYjMzQ7LAogICAgJiMzNDtzZnBfc21fcHJvYmVfZm9yX3BoeSYjMzQ7LAogICAgJiMzNDtzZnBfaTJjX21kaW9idXNfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtzZnBfc21fYWRkX21kaW9fYnVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBzZXF1ZW5jZSBmb3IgUm9sbEJhbGwgU0ZQIG1vZHVsZXMgb3ZlciBNRElPIEkyQy4gSXQgZGVmZXJzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSYjMzk7cyBQSFkgcHJvYmluZyBwaGFzZSwgYWxsb3dpbmcgZ2VudWluZSBSb2xsQmFsbCBicmlkZ2VzIHRpbWUgdG8gc3RhcnQgdXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgYW5kIE1ESU8gSTJDIHByb3RvY29sIGxvZ2ljLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRoYXQgaW5zdGFudGlhdGVzIGFuIFNGUCBjYWdlIChlLmcuLCB0aGUgV2FuZ3h1biBUWEdCRSBkcml2ZXIpIGFuZCBmdXp6aW5nIHRoZSByZXN1bHRpbmcgSTJDL0dQSU8gTU1JTyBhY2Nlc3NlcyB0byB0cmlnZ2VyIHRoZSBTRlAgc3RhdGUgbWFjaGluZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFhHQkUmIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O01ESU9fSTJDJiMzNDssCiAgICAmIzM0O0kyQ19ERVNJR05XQVJFX1BMQVRGT1JNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRpb19pMmNfcHJvYmVfcm9sbGJhbGwmIzM0OywKICAgICYjMzQ7aTJjX21paV9pbml0X3JvbGxiYWxsJiMzNDssCiAgICAmIzM0O3NmcF9zbV9wcm9iZV9mb3JfcGh5JiMzNDssCiAgICAmIzM0O3NmcF9pMmNfbWRpb2J1c19kZXN0cm95JiMzNDssCiAgICAmIzM0O3NmcF9zbV9hZGRfbWRpb19idXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nIHNlcXVlbmNlIGZvciBSb2xsQmFsbCBTRlAgbW9kdWxlcyBvdmVyIE1ESU8gSTJDLiBJdCBkZWZlcnMgdGhlIHByb2JlIGZyb20gbW9kdWxlIGFsbG9jYXRpb24gdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lJiMzOTtzIFBIWSBwcm9iaW5nIHBoYXNlLCBhbGxvd2luZyBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgdGltZSB0byBzdGFydCB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgTURJTyBJMkMgcHJvdG9jb2wgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdGhhdCBpbnN0YW50aWF0ZXMgYW4gU0ZQIGNhZ2UgKGUuZy4sIHRoZSBXYW5neHVuIFRYR0JFIGRyaXZlcikgYW5kIGZ1enppbmcgdGhlIHJlc3VsdGluZyBJMkMvR1BJTyBNTUlPIGFjY2Vzc2VzIHRvIHRyaWdnZXIgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTg6NTcuNzk4ODk2NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM3NTg1NTExNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFhHQkVcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiTURJT19JMkNcIixcbiAgICBcIkkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRpb19pMmNfcHJvYmVfcm9sbGJhbGxcIixcbiAgICBcImkyY19taWlfaW5pdF9yb2xsYmFsbFwiLFxuICAgIFwic2ZwX3NtX3Byb2JlX2Zvcl9waHlcIixcbiAgICBcInNmcF9pMmNfbWRpb2J1c19kZXN0cm95XCIsXG4gICAgXCJzZnBfc21fYWRkX21kaW9fYnVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nIHNlcXVlbmNlIGZvciBSb2xsQmFsbCBTRlAgbW9kdWxlcyBvdmVyIE1ESU8gSTJDLiBJdCBkZWZlcnMgdGhlIHByb2JlIGZyb20gbW9kdWxlIGFsbG9jYXRpb24gdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lJ3MgUEhZIHByb2JpbmcgcGhhc2UsIGFsbG93aW5nIGdlbnVpbmUgUm9sbEJhbGwgYnJpZGdlcyB0aW1lIHRvIHN0YXJ0IHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBNRElPIEkyQyBwcm90b2NvbCBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB0aGF0IGluc3RhbnRpYXRlcyBhbiBTRlAgY2FnZSAoZS5nLiwgdGhlIFdhbmd4dW4gVFhHQkUgZHJpdmVyKSBhbmQgZnV6emluZyB0aGUgcmVzdWx0aW5nIEkyQy9HUElPIE1NSU8gYWNjZXNzZXMgdG8gdHJpZ2dlciB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE4OjU3Ljc5ODkwNTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjU4NzQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVhMWM4ZjY5MzMyYzQ5OWM3YjBiNmRlM2Y0Mzk0ZDVlYWRmNDM2YTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMDg6MTg6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXFxuaW5kZXggYjg4ZjYzMjM0YjRlNmEuLjJhM2E0MThjMTM2OTg5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xcbkBAIC00MTksNyArNDE5LDcgQEAgc3RhdGljIGludCBpMmNfbWlpX3dyaXRlX3JvbGxiYWxsKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBkZXZhZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcXG4raW50IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxcbiB7XFxuIFxcdHU4IGRhdGFfYnVmW10gPSB7IFJPTExCQUxMX0RBVEFfQUREUiwgMHgwMSwgMHgwMCwgMHgwMCB9O1xcbiBcXHR1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTtcXG5AQCAtNDYyLDkgKzQ2MiwxMyBAQCBzdGF0aWMgaW50IGkyY19taWlfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXFxuIFxcbiBcXHRyZXR1cm4gLUVOT0RFVjtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19wcm9iZV9yb2xsYmFsbCk7XFxuIFxcbiBzdGF0aWMgaW50IGkyY19taWlfaW5pdF9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcXG4ge1xcbitcXHQvKiBTZW5kIHRoZSBSb2xsQmFsbCB1bmxvY2sgcGFzc3dvcmQ7IGJyaWRnZSBwcmVzZW5jZSBpcyB2ZXJpZmllZFxcbitcXHQgKiBsYXRlciwgaW4gc2ZwX3NtX3Byb2JlX2Zvcl9waHkoKSwgYWZ0ZXIgbW9kdWxlIGluaXRpYWxpemF0aW9uLlxcbitcXHQgKi9cXG4gXFx0c3RydWN0IGkyY19tc2cgbXNnO1xcbiBcXHR1OCBwd1s1XTtcXG4gXFx0aW50IHJldDtcXG5AQCAtNDg2LDcgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgaTJjX21paV9pbml0X3JvbGxiYWxsKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKVxcbiBcXHRpZiAocmV0ICE9IDEpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4tXFx0cmV0dXJuIGkyY19taWlfcHJvYmVfcm9sbGJhbGwoaTJjKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuQEAgLTUzMSwxMCArNTM1LDkgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuIFxcdGNhc2UgTURJT19JMkNfUk9MTEJBTEw6XFxuIFxcdFxcdHJldCA9IGkyY19taWlfaW5pdF9yb2xsYmFsbChpMmMpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9ERVYpXFxuLVxcdFxcdFxcdFxcdGRldl9lcnIocGFyZW50LFxcbi1cXHRcXHRcXHRcXHRcXHRcXFwiQ2Fubm90IGluaXRpYWxpemUgUm9sbEJhbGwgTURJTyBJMkMgcHJvdG9jb2w6ICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRyZXQpO1xcbitcXHRcXHRcXHRkZXZfZXJyKHBhcmVudCxcXG4rXFx0XFx0XFx0XFx0XFxcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0cmV0KTtcXG4gXFx0XFx0XFx0bWRpb2J1c19mcmVlKG1paSk7XFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuaW5kZXggMDNiZmQ4NjQwZGI5NjMuLmJiZmFhMDQ1MDc5OGRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbkBAIC05NjMsNiArOTYzLDcgQEAgc3RhdGljIGludCBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBzZnAgKnNmcClcXG4gc3RhdGljIHZvaWQgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3koc3RydWN0IHNmcCAqc2ZwKVxcbiB7XFxuIFxcdG1kaW9idXNfdW5yZWdpc3RlcihzZnAtXFx1MDAzZWkyY19taWkpO1xcbitcXHRtZGlvYnVzX2ZyZWUoc2ZwLVxcdTAwM2VpMmNfbWlpKTtcXG4gXFx0c2ZwLVxcdTAwM2VpMmNfbWlpID0gTlVMTDtcXG4gfVxcbiBcXG5AQCAtMjE3MywxNyArMjE3NCwxMCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZmF1bHQoc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgbmV4dF9zdGF0ZSwgYm9vbCB3YXJuKVxcbiBcXG4gc3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4gXFx0aWYgKHNmcC1cXHUwMDNlbWRpb19wcm90b2NvbCA9PSBNRElPX0kyQ19OT05FKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IHNmcF9pMmNfbWRpb2J1c19jcmVhdGUoc2ZwKTtcXG4tXFx0aWYgKHJldCA9PSAtRU5PREVWKSB7XFxuLVxcdFxcdHNmcC1cXHUwMDNlbWRpb19wcm90b2NvbCA9IE1ESU9fSTJDX05PTkU7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XFxuIH1cXG4gXFxuIC8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZXFxuQEAgLTIyMTQsNyArMjIwOCwxOCBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcClcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxcbi1cXHRcXHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSX1JPTExCQUxMLCB0cnVlKTtcXG4rXFx0XFx0LyogUHJvYmUgaGVyZSwgYWZ0ZXIgbW9kdWxlIGluaXRpYWxpemF0aW9uIGRlbGF5cywgc28gdGhhdFxcbitcXHRcXHQgKiBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgaGF2ZSBoYWQgdGltZSB0byBzdGFydCB1cC5cXG4rXFx0XFx0ICogTW9kdWxlcyB3aXRob3V0IGEgYnJpZGdlIChlLmcuIFJUTDgyNjFCRSkgcmV0dXJuIC1FTk9ERVYuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRlcnIgPSBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzZnAtXFx1MDAzZWkyYyk7XFxuK1xcdFxcdGlmIChlcnIgPT0gLUVOT0RFVikge1xcbitcXHRcXHRcXHRzZnBfaTJjX21kaW9idXNfZGVzdHJveShzZnApO1xcbitcXHRcXHRcXHRzZnAtXFx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0ZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaCBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oXFxuaW5kZXggNjViNTUwYTZmYzMyOTguLjVjZjE0ZjQ1Yzk0YjZhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmhcXG5AQCAtMjAsNSArMjAsNiBAQCBlbnVtIG1kaW9faTJjX3Byb3RvIHtcXG4gXFxuIHN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbiBcXHRcXHRcXHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbCk7XFxuK2ludCBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7XFxuIFxcbiAjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTg6NTguNDE2MjU2MDg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTMxNDExODEwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFhHQkVcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiTURJT19JMkNcIixcbiAgICBcIkkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRpb19pMmNfcHJvYmVfcm9sbGJhbGxcIixcbiAgICBcImkyY19taWlfaW5pdF9yb2xsYmFsbFwiLFxuICAgIFwic2ZwX3NtX3Byb2JlX2Zvcl9waHlcIixcbiAgICBcInNmcF9pMmNfbWRpb2J1c19kZXN0cm95XCIsXG4gICAgXCJzZnBfc21fYWRkX21kaW9fYnVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBwcm9iaW5nIHNlcXVlbmNlIGZvciBSb2xsQmFsbCBTRlAgbW9kdWxlcyBvdmVyIE1ESU8gSTJDLiBJdCBkZWZlcnMgdGhlIHByb2JlIGZyb20gbW9kdWxlIGFsbG9jYXRpb24gdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lJ3MgUEhZIHByb2JpbmcgcGhhc2UsIGFsbG93aW5nIGdlbnVpbmUgUm9sbEJhbGwgYnJpZGdlcyB0aW1lIHRvIHN0YXJ0IHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBNRElPIEkyQyBwcm90b2NvbCBsb2dpYy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB0aGF0IGluc3RhbnRpYXRlcyBhbiBTRlAgY2FnZSAoZS5nLiwgdGhlIFdhbmd4dW4gVFhHQkUgZHJpdmVyKSBhbmQgZnV6emluZyB0aGUgcmVzdWx0aW5nIEkyQy9HUElPIE1NSU8gYWNjZXNzZXMgdG8gdHJpZ2dlciB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWExYzhmNjkzMzJjNDk5YzdiMGI2ZGUzZjQzOTRkNWVhZGY0MzZhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDA4OjE4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jXG5pbmRleCBiODhmNjMyMzRiNGU2YS4uMmEzYTQxOGMxMzY5ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuY1xuQEAgLTQxOSw3ICs0MTksNyBAQCBzdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbitpbnQgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4ge1xuIFx0dTggZGF0YV9idWZbXSA9IHsgUk9MTEJBTExfREFUQV9BRERSLCAweDAxLCAweDAwLCAweDAwIH07XG4gXHR1OCBjbWRfYnVmW10gID0geyBST0xMQkFMTF9DTURfQUREUiwgUk9MTEJBTExfQ01EX1JFQUQgfTtcbkBAIC00NjIsOSArNDYyLDEzIEBAIHN0YXRpYyBpbnQgaTJjX21paV9wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcbiBcbiBcdHJldHVybiAtRU5PREVWO1xuIH1cbitFWFBPUlRfU1lNQk9MX0dQTChtZGlvX2kyY19wcm9iZV9yb2xsYmFsbCk7XG4gXG4gc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4ge1xuK1x0LyogU2VuZCB0aGUgUm9sbEJhbGwgdW5sb2NrIHBhc3N3b3JkOyBicmlkZ2UgcHJlc2VuY2UgaXMgdmVyaWZpZWRcbitcdCAqIGxhdGVyLCBpbiBzZnBfc21fcHJvYmVfZm9yX3BoeSgpLCBhZnRlciBtb2R1bGUgaW5pdGlhbGl6YXRpb24uXG4rXHQgKi9cbiBcdHN0cnVjdCBpMmNfbXNnIG1zZztcbiBcdHU4IHB3WzVdO1xuIFx0aW50IHJldDtcbkBAIC00ODYsNyArNDkwLDcgQEAgc3RhdGljIGludCBpMmNfbWlpX2luaXRfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpXG4gXHRpZiAocmV0ICE9IDEpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuLVx0cmV0dXJuIGkyY19taWlfcHJvYmVfcm9sbGJhbGwoaTJjKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBtZGlvX2kyY19jaGVja19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxuQEAgLTUzMSwxMCArNTM1LDkgQEAgc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuIFx0XHRyZXQgPSBpMmNfbWlpX2luaXRfcm9sbGJhbGwoaTJjKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGlmIChyZXQgIT0gLUVOT0RFVilcbi1cdFx0XHRcdGRldl9lcnIocGFyZW50LFxuLVx0XHRcdFx0XHRcIkNhbm5vdCBpbml0aWFsaXplIFJvbGxCYWxsIE1ESU8gSTJDIHByb3RvY29sOiAlZFxcblwiLFxuLVx0XHRcdFx0XHRyZXQpO1xuK1x0XHRcdGRldl9lcnIocGFyZW50LFxuK1x0XHRcdFx0XCJDYW5ub3QgaW5pdGlhbGl6ZSBSb2xsQmFsbCBNRElPIEkyQyBwcm90b2NvbDogJWRcXG5cIixcbitcdFx0XHRcdHJldCk7XG4gXHRcdFx0bWRpb2J1c19mcmVlKG1paSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuaW5kZXggMDNiZmQ4NjQwZGI5NjMuLmJiZmFhMDQ1MDc5OGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbkBAIC05NjMsNiArOTYzLDcgQEAgc3RhdGljIGludCBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBzZnAgKnNmcClcbiBzdGF0aWMgdm9pZCBzZnBfaTJjX21kaW9idXNfZGVzdHJveShzdHJ1Y3Qgc2ZwICpzZnApXG4ge1xuIFx0bWRpb2J1c191bnJlZ2lzdGVyKHNmcC1cdTAwM2VpMmNfbWlpKTtcbitcdG1kaW9idXNfZnJlZShzZnAtXHUwMDNlaTJjX21paSk7XG4gXHRzZnAtXHUwMDNlaTJjX21paSA9IE5VTEw7XG4gfVxuIFxuQEAgLTIxNzMsMTcgKzIxNzQsMTAgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybilcbiBcbiBzdGF0aWMgaW50IHNmcF9zbV9hZGRfbWRpb19idXMoc3RydWN0IHNmcCAqc2ZwKVxuIHtcbi1cdGludCByZXQ7XG4tXG4gXHRpZiAoc2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPT0gTURJT19JMkNfTk9ORSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBzZnBfaTJjX21kaW9idXNfY3JlYXRlKHNmcCk7XG4tXHRpZiAocmV0ID09IC1FTk9ERVYpIHtcbi1cdFx0c2ZwLVx1MDAzZW1kaW9fcHJvdG9jb2wgPSBNRElPX0kyQ19OT05FO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApO1xuIH1cbiBcbiAvKiBQcm9iZSBhIFNGUCBmb3IgYSBQSFkgZGV2aWNlIGlmIHRoZSBtb2R1bGUgc3VwcG9ydHMgY29wcGVyIC0gdGhlIFBIWVxuQEAgLTIyMTQsNyArMjIwOCwxOCBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcClcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE1ESU9fSTJDX1JPTExCQUxMOlxuLVx0XHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSX1JPTExCQUxMLCB0cnVlKTtcbitcdFx0LyogUHJvYmUgaGVyZSwgYWZ0ZXIgbW9kdWxlIGluaXRpYWxpemF0aW9uIGRlbGF5cywgc28gdGhhdFxuK1x0XHQgKiBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgaGF2ZSBoYWQgdGltZSB0byBzdGFydCB1cC5cbitcdFx0ICogTW9kdWxlcyB3aXRob3V0IGEgYnJpZGdlIChlLmcuIFJUTDgyNjFCRSkgcmV0dXJuIC1FTk9ERVYuXG4rXHRcdCAqL1xuK1x0XHRlcnIgPSBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzZnAtXHUwMDNlaTJjKTtcbitcdFx0aWYgKGVyciA9PSAtRU5PREVWKSB7XG4rXHRcdFx0c2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3koc2ZwKTtcbitcdFx0XHRzZnAtXHUwMDNlbWRpb19wcm90b2NvbCA9IE1ESU9fSTJDX05PTkU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0ZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8taTJjLmhcbmluZGV4IDY1YjU1MGE2ZmMzMjk4Li41Y2YxNGY0NWM5NGI2YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaFxuQEAgLTIwLDUgKzIwLDYgQEAgZW51bSBtZGlvX2kyY19wcm90byB7XG4gXG4gc3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXG4gXHRcdFx0ICAgICAgIGVudW0gbWRpb19pMmNfcHJvdG8gcHJvdG9jb2wpO1xuK2ludCBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7XG4gXG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxODo1OC40MTYyNTc4NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzg2MTExMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBTRlAgYW5kIE1ESU8gSTJDIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdG91Y2hlZCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2Ag4oCTIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgcmVmYWN0b3Jpbmcgc29tZSBvZiB0aGUgTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgYW5kIFNGUCAoU21hbGwgRm9ybS1mYWN0b3IgUGx1Z2dhYmxlKSBkcml2ZXIgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgSTJDIGNvbW11bmljYXRpb24uIFRoZSByZW5hbWluZyBvZiBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGAgdG8gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCBhbmQgZXhwb3J0aW5nIGl0IGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gVGhlbiB0aGUgY2hhbmdlIHRvIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgIG5vdCBjYWxsaW5nIHRoZSBwcm9iZSBmdW5jdGlvbiBkaXJlY3RseSBpcyBhIGJpdCBtb3JlIGludm9sdmVkLiBJdCBhcHBlYXJzIHRoZXJlIGlzIHNvbWUgcmVmYWN0b3JpbmcgYW5kIHNwbGl0dGluZyBvZiByZXNwb25zaWJpbGl0aWVzLCBhbmQgaXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24uIFRoZSBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIGZ1bmN0aW9uIG5vdyBjYWxsaW5nIHRoZSBuZXcsIGV4cG9ydGVkIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBkcml2ZXIgaW50ZXJhY3Rpb24gaXMgY2hhbmdpbmcuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSBldmVuICp0ZXN0KiB0aGlzIGVmZmVjdGl2ZWx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFNGUHMgYXJlIHVzdWFsbHkgcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB3aGlsZSBJIGNhbiB1c3VhbGx5IHNpbXVsYXRlIEkyQyBkZXZpY2VzIHdpdGggdGhpbmdzIGxpa2UgaTJjLXN0dWIgb3Igc2ltaWxhciwgSSdtIG5vdCBzdXJlIGlmIHRoZXJlJ3MgYSBnb29kIHdheSB0byBmdWxseSBlbXVsYXRlIG9yIGZ1enogYW4gU0ZQIG1vZHVsZSBpdHNlbGYuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIHNvbWUgd2F5IHRvIHZhbGlkYXRlIHRoaXMgcGF0Y2guXG5cbkknbGwgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBNRElPX0kyQ2AgYW5kIGBTRlBgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGVyZSBhcmUgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGVzdGluZy4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYWxzbyBpbmZvcm0gd2hpY2ggYnVpbGQgY29uZmlndXJhdGlvbnMgSSBjYW4gYW5kIHNob3VsZCB0ZXN0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTowNC4yMDIzNzI1NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NTEyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1ESU9fSTJDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05OT1jb25maWcgTURJT19ISVNJX0ZFTUFDXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA1LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDY6Y29uZmlnIE1ESU9fSTJDXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTowNC4yNjMyMjk5ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ3ODc1MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBNRElPX0kyQyBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6ICp3aGF0IHNwZWNpZmljYWxseSBpcyB0cmlnZ2VyaW5nIHRoZSB1c2Ugb2YgYE1ESU9fSTJDYD8qIE15IGltbWVkaWF0ZSBtZW50YWwgcHJvY2VzcyBoZXJlIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb2RlIHBhdGhzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbGVhZCB0byB0aGlzIHNlbGVjdGlvbi4gSSdtIG5vdCBsb29raW5nIGZvciBhIGdlbmVyYWwgb3ZlcnZpZXc7IEkgbmVlZCB0byBkcmlsbCBkb3duIHRvIHRoZSBzcGVjaWZpYyBkcml2ZXJzLCBib2FyZCBmaWxlcywgb3IgZGV2aWNlIHRyZWUgZW50cmllcyB0aGF0IGFyZSByZXNwb25zaWJsZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgcmVnaXN0ZXIgc2V0dGluZ3MsIHRoZSBwb3dlciBtYW5hZ2VtZW50IHNlcXVlbmNlLCBvciBwZXJoYXBzIGV2ZW4gYSBzb2Z0d2FyZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIHBhcnRpY3VsYXIgY2hvaWNlLCBub3QganVzdCAqdGhhdCogaXQncyBoYXBwZW5pbmcuIFRoZSBnb2FsIGlzIHRvIGVpdGhlciB1bmRlcnN0YW5kIGV4aXN0aW5nIGJlaGF2aW9yIG9yIHBvc3NpYmx5IGRlYnVnIGEgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA4MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjA3LjYxMTEwNzM3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg3OTMzNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNRElPX0kyQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NzM9Y29uZmlnIFNGUFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzYtXFx0ZGVwZW5kcyBvbiBIV01PTiB8fCBIV01PTj1uXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Nzc6XFx0c2VsZWN0IE1ESU9fSTJDXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjA5Ljc5OTA0ODM3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTc0MDM2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGlzIGBDT05GSUdfU0ZQYCBkZWZpbmUsIGFuZCBpdCdzIHBvaW50aW5nIG1lIHRvd2FyZCBgTURJT19JMkNgLiBJbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBndXQgdGVsbHMgbWUgdGhhdCBgQ09ORklHX1NGUGAgaXMgbGlrZWx5IGEgZ2F0aW5nIG1lY2hhbmlzbSBvciBzZWxlY3Rpb24gZm9yIHRoZSBJMkMtYmFzZWQgTURJTyBkcml2ZXIsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgU0ZQIHRyYW5zY2VpdmVycywgZXNwZWNpYWxseSBpZiB0aGUgaGFyZHdhcmUgdXNlcyBJMkMgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBvbiB0aGF0IGBDT05GSUdfU0ZQYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQsIGNyaXRpY2FsbHksIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgdGhlIHByaW1hcnkgZHJpdmVyIHNlbGVjdGlvbiBvciBwZXJoYXBzIGEgZmxhZyB0byBzdXBwb3J0IGEgc3BlY2lmaWMgU0ZQIG1vZHVsZSB2YXJpYW50PyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc291cmNlIGNvZGUgd2hlcmUgYENPTkZJR19TRlBgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgYmUgbG9va2luZyBmb3Igb3RoZXIgYXNzb2NpYXRlZCBkZWZpbmVzIGFuZCBhbnkgY29uZGl0aW9uYWxzIHRoYXQgaW1wYWN0IHdoaWNoIGRyaXZlciBvciBzdWJzeXN0ZW0gaXMgdWx0aW1hdGVseSBlbmFibGVkLiBJIHN1c3BlY3QgaXQncyB0aGUgdGlwIG9mIHRoZSBpY2ViZXJnIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdGhlIHJlc3Qgb2YgdGhlIFNGUC9NRElPIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzkxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTk6MTMuODE2NDU0MzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTM4MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRlBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03Mi1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIlNGUCBjYWdlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjEzLjg4NjU5ODM0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDA0MjMzNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhlIGZpZWxkOlxuXG4qKkZ1enppbmcgdGhlIFNGUCBNb2R1bGU6IEluaXRpYWwgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSBlZmZlY3RpdmVseSBmdXp6IGFuIFNGUCBtb2R1bGU/IEl0J3MgYSB2YWxpZCB0YXJnZXQuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQsIHllcywgaXQgc2hvdWxkIGJlIGEgd29ydGh3aGlsZSBlbmRlYXZvciwgZXNwZWNpYWxseSBnaXZlbiB0aGUgYXR0YWNrIHN1cmZhY2UgaXQgcHJlc2VudHMuIEdpdmVuIHRoYXQgbXkgZmllbGQgaXMgc2VjdXJpdHksIHRoaXMgaXMgc29tZXRoaW5nIEknZCB3YW50IHRvIHVuZGVyc3RhbmQuXG5cblRoaW5raW5nIGFib3V0IHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgU0ZQIG1vZHVsZXMgdXNlIEkyQyBhbmQgR1BJT3MgZm9yIGNvbW11bmljYXRpb24uIFRoZSBJMkMgaW50ZXJmYWNlIGlzIGEgc3RhbmRhcmQgdHdvLXdpcmUgc2VyaWFsIHByb3RvY29sIGNvbW1vbmx5IHVzZWQgZm9yIGFjY2Vzc2luZyBkZXZpY2UgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYW5kIG90aGVyIGNvbnRyb2wgZnVuY3Rpb25zLiBHUElPcywgb24gdGhlIG90aGVyIGhhbmQsIGFsbG93IGZvciBnZW5lcmFsLXB1cnBvc2UgZGlnaXRhbCBpbnB1dC9vdXRwdXQgb3BlcmF0aW9ucy4gVGhlcmVmb3JlIHRoZXNlIGludGVyZmFjZXMgb2ZmZXIgYSB3YXkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlIGFuZCBhcmUgdGhlcmVmb3JlIG9mIGludGVyZXN0IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuU28sIHdoZXJlIGRvIHdlIHN0YXJ0PyBJJ2QgaW1tZWRpYXRlbHkganVtcCBpbnRvIHRoZSByZWxldmFudCBkcml2ZXIgY29kZSBpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIEknZCB3YW50IHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgU0ZQIG1vZHVsZSBhdCBhIGxvdyBsZXZlbC4gVW5kZXJzdGFuZGluZyB0aGUgSTJDIGFuZCBHUElPIGludGVyYWN0aW9ucywgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsbHkgdW5leHBlY3RlZCBkYXRhIG9yIHNlcXVlbmNlcywgaXMgY3J1Y2lhbCBmb3IgZGV2aXNpbmcgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjIwLjk4NzAyNDU2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMDM5NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jPTMyNTc9c3RhdGljIGludCBzZnBfaTJjX2dldChzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzI4Mi1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MzI4MzpzdGF0aWMgaW50IHNmcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjg0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0zNDY1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNmcF9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjM0NjY6XFx0LnByb2JlID0gc2ZwX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zNDY3LVxcdC5yZW1vdmUgPSBzZnBfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOToyMS4yNDcwNzEwOTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczNTczODEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBsYXRmb3JtIERyaXZlciBhbmQgU3l6a2FsbGVyJ3MgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgYW5kIGl0J3MgZmxhZ2dlZCBhcyBhIHBsYXRmb3JtIGRyaXZlci4gRmlyc3QgdGhvdWdodDogQ2FuIHRoaXMgYmUgaW5zdGFudGlhdGVkIHZpYSB0aGUgZGV2aWNlIHRyZWUsIG9yIGlzIGl0IGdvaW5nIHRvIHJlbHkgb24gc3lzZnM/IFBsYXRmb3JtIGRyaXZlcnMgKnVzdWFsbHkqIGhhdmUgYSBkZXZpY2UgdHJlZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLCBvciwgaWYgaXQgd2FzIGFuIEkyQyBkZXZpY2UsIHlvdSBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBvbmUgdmlhIHN5c2ZzLCBidXQgdGhpcyBpcyBhICpwbGF0Zm9ybSogZGV2aWNlLlxuXG5IYW5nIG9uLi4uIGRvZXMgc3l6a2FsbGVyIGhhdmUgYW55IHNwZWNpZmljIG1lY2hhbmlzbXMgdG8gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgZGlyZWN0bHk/IEkga25vdyBpdCBkb2VzIHRoaW5ncyB3aXRoIGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBuZXRsaW5rIGZvciBjZXJ0YWluIGludGVyYWN0aW9ucywgYW5kIHN5c2ZzIGZvciBzb21lIGJ1c2VzLCBidXQgSSBjYW4ndCBpbW1lZGlhdGVseSByZWNhbGwgYSBkZWRpY2F0ZWQgcGxhdGZvcm0gaW5qZWN0aW9uIG1ldGhvZC4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgc29tZXRoaW5nIGxpa2UgYHN5el9kZXZfcGxhdGZvcm1fYWRkYD8gTm8sIHRoYXQgZG9lc24ndCBzb3VuZCByaWdodC5cblxuQWgsIHdhaXQuIEl0ICpjYW4qIGZ1enogSTJDIHZpYSBgL2Rldi9pMmMtKmAgaWYgZWl0aGVyIGBpMmMtc3R1YmAgb3IgYGkyYy1kZXZgIGFyZSBwcmVzZW50LCBidXQgdGhlIGNhdGNoIGlzIHRoYXQgdGhpcyBwbGF0Zm9ybSBkZXZpY2UsIHRoZSBgc2ZwYCwgdXRpbGl6ZXMgSTJDLlxuXG5TbywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBoYXMgZXhpc3RpbmcgZGVzY3JpcHRpb25zIG9yIGtub3dsZWRnZSBvZiB0aGUgU0ZQIGRldmljZS4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhpc3RpbmcgZGVzY3JpcHRpb25zIGZvciBTRlAgd2l0aGluIHN5emthbGxlcidzIGZyYW1ld29yay4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOToyNi45ODI4MTE3NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDQ1OTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9lZXByb20uYy0zLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxubmV0L2V0aHRvb2wvZWVwcm9tLmM6NDojaW5jbHVkZSBcXHUwMDNjbGludXgvc2ZwLmhcXHUwMDNlXFxubmV0L2V0aHRvb2wvZWVwcm9tLmMtNS1cXG4tLVxcbm5ldC9ldGh0b29sL2VlcHJvbS5jPTkyPXN0YXRpYyBpbnQgZ2V0X21vZHVsZV9lZXByb21fYnlfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvZWVwcm9tLmMtMTAzLVxcbm5ldC9ldGh0b29sL2VlcHJvbS5jOjEwNDpcXHRpZiAoZGV2LVxcdTAwM2VzZnBfYnVzKVxcbm5ldC9ldGh0b29sL2VlcHJvbS5jOjEwNTpcXHRcXHRyZXR1cm4gc2ZwX2dldF9tb2R1bGVfZWVwcm9tX2J5X3BhZ2UoZGV2LVxcdTAwM2VzZnBfYnVzLCBwYWdlX2RhdGEsIGV4dGFjayk7XFxubmV0L2V0aHRvb2wvZWVwcm9tLmMtMTA2LVxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6MjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NmcC5oXFx1MDAzZVxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9Mjg2ND1pbnQgZXRodG9vbF9nZXRfbW9kdWxlX2luZm9fY2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yODcyLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6Mjg3MzpcXHRpZiAoZGV2LVxcdTAwM2VzZnBfYnVzKVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6Mjg3NDpcXHRcXHRyZXR1cm4gc2ZwX2dldF9tb2R1bGVfaW5mbyhkZXYtXFx1MDAzZXNmcF9idXMsIG1vZGluZm8pO1xcbm5ldC9ldGh0b29sL2lvY3RsLmMtMjg3NS1cXG4tLVxcbm5ldC9ldGh0b29sL2lvY3RsLmM9MjkwND1pbnQgZXRodG9vbF9nZXRfbW9kdWxlX2VlcHJvbV9jYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTI5MTItXFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyOTEzOlxcdGlmIChkZXYtXFx1MDAzZXNmcF9idXMpXFxubmV0L2V0aHRvb2wvaW9jdGwuYzoyOTE0OlxcdFxcdHJldHVybiBzZnBfZ2V0X21vZHVsZV9lZXByb20oZGV2LVxcdTAwM2VzZnBfYnVzLCBlZSwgZGF0YSk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0yOTE1LVxcbi0tXFxubmV0L2V0aHRvb2wvbW9kdWxlLmMtNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9tb2R1bGUuYzo1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZnAuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9tb2R1bGUuYy02LSNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9waHkuYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZnAuaFxcdTAwM2VcXG5uZXQvZXRodG9vbC9waHkuYy05LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jPTE4PXN0cnVjdCBwaHlfcmVwbHlfZGF0YSB7XFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYy0yMy1cXHR1bnNpZ25lZCBpbnQgdXBzdHJlYW1fdHlwZTtcXG5uZXQvZXRodG9vbC9waHkuYzoyNDpcXHRjaGFyICp1cHN0cmVhbV9zZnBfbmFtZTtcXG5uZXQvZXRodG9vbC9waHkuYy0yNS1cXHR1bnNpZ25lZCBpbnQgdXBzdHJlYW1faW5kZXg7XFxubmV0L2V0aHRvb2wvcGh5LmM6MjY6XFx0Y2hhciAqZG93bnN0cmVhbV9zZnBfbmFtZTtcXG5uZXQvZXRodG9vbC9waHkuYy0yNy19O1xcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmM9MzY9c3RhdGljIGludCBwaHlfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtNTUtXFx0LyogRVRIVE9PTF9BX1BIWV9VUFNUUkVBTV9TRlBfTkFNRSAqL1xcbm5ldC9ldGh0b29sL3BoeS5jOjU2OlxcdGlmIChyZXBfZGF0YS1cXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUpXFxubmV0L2V0aHRvb2wvcGh5LmM6NTc6XFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzdHJsZW4ocmVwX2RhdGEtXFx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKSArIDEpO1xcbm5ldC9ldGh0b29sL3BoeS5jLTU4LVxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtNjMtXFx0LyogRVRIVE9PTF9BX1BIWV9ET1dOU1RSRUFNX1NGUF9OQU1FICovXFxubmV0L2V0aHRvb2wvcGh5LmM6NjQ6XFx0aWYgKHJlcF9kYXRhLVxcdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKVxcbm5ldC9ldGh0b29sL3BoeS5jOjY1OlxcdFxcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc3RybGVuKHJlcF9kYXRhLVxcdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSArIDEpO1xcbm5ldC9ldGh0b29sL3BoeS5jLTY2LVxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmM9NzA9c3RhdGljIGludCBwaHlfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYy0xMTAtXFxubmV0L2V0aHRvb2wvcGh5LmM6MTExOlxcdGlmIChwZG4tXFx1MDAzZXBhcmVudF9zZnBfYnVzKSB7XFxubmV0L2V0aHRvb2wvcGh5LmM6MTEyOlxcdFxcdHJlcF9kYXRhLVxcdTAwM2V1cHN0cmVhbV9zZnBfbmFtZSA9IGtzdHJkdXAoc2ZwX2dldF9uYW1lKHBkbi1cXHUwMDNlcGFyZW50X3NmcF9idXMpLFxcbm5ldC9ldGh0b29sL3BoeS5jLTExMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG5uZXQvZXRodG9vbC9waHkuYzoxMTQ6XFx0XFx0aWYgKCFyZXBfZGF0YS1cXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUpIHtcXG5uZXQvZXRodG9vbC9waHkuYy0xMTUtXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jLTExOS1cXG5uZXQvZXRodG9vbC9waHkuYzoxMjA6XFx0aWYgKHBoeWRldi1cXHUwMDNlc2ZwX2J1cykge1xcbm5ldC9ldGh0b29sL3BoeS5jOjEyMTpcXHRcXHRyZXBfZGF0YS1cXHUwMDNlZG93bnN0cmVhbV9zZnBfbmFtZSA9IGtzdHJkdXAoc2ZwX2dldF9uYW1lKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyksXFxubmV0L2V0aHRvb2wvcGh5LmMtMTIyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL3BoeS5jOjEyMzpcXHRcXHRpZiAoIXJlcF9kYXRhLVxcdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSB7XFxubmV0L2V0aHRvb2wvcGh5LmMtMTI0LVxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxubmV0L2V0aHRvb2wvcGh5LmM6MTI1OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdXBzdHJlYW1fc2ZwO1xcbm5ldC9ldGh0b29sL3BoeS5jLTEyNi1cXHRcXHR9XFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYy0xMzAtXFxubmV0L2V0aHRvb2wvcGh5LmM6MTMxOmVycl9mcmVlX3Vwc3RyZWFtX3NmcDpcXG5uZXQvZXRodG9vbC9waHkuYzoxMzI6XFx0a2ZyZWUocmVwX2RhdGEtXFx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKTtcXG5uZXQvZXRodG9vbC9waHkuYy0xMzMtZXJyX2ZyZWVfZHJ2bmFtZTpcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jPTE0MD1zdGF0aWMgaW50IHBoeV9maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvZXRodG9vbC9waHkuYy0xNTktXFxubmV0L2V0aHRvb2wvcGh5LmM6MTYwOlxcdGlmIChyZXBfZGF0YS1cXHUwMDNldXBzdHJlYW1fc2ZwX25hbWUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvZXRodG9vbC9waHkuYy0xNjEtXFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX1BIWV9VUFNUUkVBTV9TRlBfTkFNRSxcXG5uZXQvZXRodG9vbC9waHkuYzoxNjI6XFx0XFx0XFx0ICAgcmVwX2RhdGEtXFx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKSlcXG5uZXQvZXRodG9vbC9waHkuYy0xNjMtXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG5uZXQvZXRodG9vbC9waHkuYy0xNjQtXFxubmV0L2V0aHRvb2wvcGh5LmM6MTY1OlxcdGlmIChyZXBfZGF0YS1cXHUwMDNlZG93bnN0cmVhbV9zZnBfbmFtZSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9ldGh0b29sL3BoeS5jLTE2Ni1cXHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBFVEhUT09MX0FfUEhZX0RPV05TVFJFQU1fU0ZQX05BTUUsXFxubmV0L2V0aHRvb2wvcGh5LmM6MTY3OlxcdFxcdFxcdCAgIHJlcF9kYXRhLVxcdTAwM2Vkb3duc3RyZWFtX3NmcF9uYW1lKSlcXG5uZXQvZXRodG9vbC9waHkuYy0xNjgtXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4tLVxcbm5ldC9ldGh0b29sL3BoeS5jPTE3Mz1zdGF0aWMgdm9pZCBwaHlfY2xlYW51cF9kYXRhKHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKVxcbi0tXFxubmV0L2V0aHRvb2wvcGh5LmMtMTc4LVxcdGtmcmVlKHJlcF9kYXRhLVxcdTAwM2VuYW1lKTtcXG5uZXQvZXRodG9vbC9waHkuYzoxNzk6XFx0a2ZyZWUocmVwX2RhdGEtXFx1MDAzZXVwc3RyZWFtX3NmcF9uYW1lKTtcXG5uZXQvZXRodG9vbC9waHkuYzoxODA6XFx0a2ZyZWUocmVwX2RhdGEtXFx1MDAzZWRvd25zdHJlYW1fc2ZwX25hbWUpO1xcbm5ldC9ldGh0b29sL3BoeS5jLTE4MS19XFxuLS1cXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM9MTg9c3RhdGljIGludFxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoxOTpoc3Jfbm9kZV90YWJsZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2ZwLCB2b2lkICpkYXRhKVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy0yMC17XFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjIxOlxcdHN0cnVjdCBoc3JfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaHNyX3ByaXYgKilzZnAtXFx1MDAzZXByaXZhdGU7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTIyLVxcdHN0cnVjdCBoc3Jfbm9kZSAqbm9kZTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjMtXFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjI0OlxcdHNlcV9wcmludGYoc2ZwLCBcXFwiTm9kZSBUYWJsZSBlbnRyaWVzIGZvciAoJXMpIGRldmljZVxcXFxuXFxcIixcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMjUtXFx0XFx0ICAgKHByaXYtXFx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgPyBcXFwiUFJQXFxcIiA6IFxcXCJIU1JcXFwiKSk7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjI2OlxcdHNlcV9wdXRzKHNmcCwgXFxcIk1BQy1BZGRyZXNzLUEsICAgIE1BQy1BZGRyZXNzLUIsICAgIHRpbWVfaW5bQV0sIFxcXCIpO1xcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoyNzpcXHRzZXFfcHV0cyhzZnAsIFxcXCJ0aW1lX2luW0JdLCBBZGRyZXNzLUIgcG9ydCwgXFxcIik7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTI4LVxcdGlmIChwcml2LVxcdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzoyOTpcXHRcXHRzZXFfcHV0cyhzZnAsIFxcXCJTQU4tQSwgU0FOLUIsIERBTi1QXFxcXG5cXFwiKTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtMzAtXFx0ZWxzZVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzozMTpcXHRcXHRzZXFfcHV0cyhzZnAsIFxcXCJEQU4tSFxcXFxuXFxcIik7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTMyLVxcbi0tXFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTM3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzozODpcXHRcXHRzZXFfcHJpbnRmKHNmcCwgXFxcIiVwTSBcXFwiLCBcXHUwMDI2bm9kZS1cXHUwMDNlbWFjYWRkcmVzc19BWzBdKTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6Mzk6XFx0XFx0c2VxX3ByaW50ZihzZnAsIFxcXCIlcE0gXFxcIiwgXFx1MDAyNm5vZGUtXFx1MDAzZW1hY2FkZHJlc3NfQlswXSk7XFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjQwOlxcdFxcdHNlcV9wcmludGYoc2ZwLCBcXFwiJTEwbHgsIFxcXCIsIG5vZGUtXFx1MDAzZXRpbWVfaW5bSFNSX1BUX1NMQVZFX0FdKTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmM6NDE6XFx0XFx0c2VxX3ByaW50ZihzZnAsIFxcXCIlMTBseCwgXFxcIiwgbm9kZS1cXHUwMDNldGltZV9pbltIU1JfUFRfU0xBVkVfQl0pO1xcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzo0MjpcXHRcXHRzZXFfcHJpbnRmKHNmcCwgXFxcIiUxNHgsIFxcXCIsIG5vZGUtXFx1MDAzZWFkZHJfQl9wb3J0KTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtNDMtXFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTQ0LVxcdFxcdGlmIChwcml2LVxcdTAwM2Vwcm90X3ZlcnNpb24gPT0gUFJQX1YxKVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYzo0NTpcXHRcXHRcXHRzZXFfcHJpbnRmKHNmcCwgXFxcIiU1eCwgJTV4LCAlNXhcXFxcblxcXCIsXFxubmV0L2hzci9oc3JfZGVidWdmcy5jLTQ2LVxcdFxcdFxcdFxcdCAgIG5vZGUtXFx1MDAzZXNhbl9hLCBub2RlLVxcdTAwM2VzYW5fYixcXG4tLVxcbm5ldC9oc3IvaHNyX2RlYnVnZnMuYy00OC1cXHRcXHRlbHNlXFxubmV0L2hzci9oc3JfZGVidWdmcy5jOjQ5OlxcdFxcdFxcdHNlcV9wcmludGYoc2ZwLCBcXFwiJTV4XFxcXG5cXFwiLCAxKTtcXG5uZXQvaHNyL2hzcl9kZWJ1Z2ZzLmMtNTAtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOToyNy4wODMyNzY4OTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA5MzIzNTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBmdW5jdGlvbi4gUmlnaHQsIGl0J3MgdHJpZ2dlcmVkIHdoZW4gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGlzIHByb2JpbmcgZm9yIGEgUEhZLiBUaGF0IG1ha2VzIGl0IGEgcGh5c2ljYWwgbW9kdWxlLCBhIGhhcmR3YXJlIGludGVyZmFjZS4gQ2FuIEkgcmVhY2ggdGhpcyB0aGluZyB0aHJvdWdoIHN5emthbGxlcj8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uXG5cblN5emthbGxlciBjYW4gc2ltdWxhdGUgSTJDIGRldmljZXMgd2l0aCBgaTJjLXN0dWJgLCBidXQgU0ZQIGlzIGEgcGxhdGZvcm0gZGV2aWNlLiBDYW4gSSBzb21laG93IGNyZWF0ZSBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHVzaW5nIFN5emthbGxlciBkaXJlY3RseT8gSSdsbCBuZWVkIGEgd2F5IHRvIGluc3RhbnRpYXRlIHRoYXQgYHNmcGAgZHJpdmVyLlxuXG5MZXQgbWUgc2Vl4oCmIGluIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgLCB0aGVyZSdzIGBzZnBfcHJvYmVgLCBhbmQgaXQncyBhc3NvY2lhdGVkIHdpdGggYHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyYC4gU28sIHBsYXRmb3JtIGRldmljZXMgY2FuIGJlIGNyZWF0ZWQgdmlhIGRldmljZSB0cmVlIG92ZXJsYXlzLCBvciBtYXliZSBhbm90aGVyIGRyaXZlciBkeW5hbWljYWxseSBjcmVhdGVzIHRoZW0gYXQgcnVudGltZS5cblxuV2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIGRvZXNuJ3QgdHlwaWNhbGx5IGp1c3QgKmNyZWF0ZSogcGxhdGZvcm0gZGV2aWNlcywgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBzeXpib3QgcHNldWRvLWRldmljZSBkZWZpbmVkIGZvciBpdCwgb3IgbWF5YmUgaXQncyBleHBvc2VkIHRocm91Z2ggc29tZSBuZXRsaW5rIG9yIHN5c2ZzIGludGVyZmFjZS4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludC5cblxuSG1tLCB3aGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBtYWNzZWNgIG9yIGB2ZXRoYD8gQ291bGQgdGhleSBiZSByZXNwb25zaWJsZSBmb3IgaW5zdGFudGlhdGluZyB0aGUgU0ZQIG1vZHVsZSBpbiBzb21lIHdheT8gTm8sIFNGUCBpcyBhICpwaHlzaWNhbCogY2FnZSwgc28gdGhhdCdzIG5vdCBsaWtlbHkuXG5cbk9rYXksIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgc2l0dWF0aW9uLiBMZXQncyBkaWcgZGVlcGVyLiBJJ2xsIGNoZWNrIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSAqY2FsbGVycyogb2YgYHNmcF9wcm9iZWAsIG9yIGlmIGl0J3Mgb25seSBldmVyIGluc3RhbnRpYXRlZCB2aWEgdGhlIERldmljZSBUcmVlIG9yIEFDUEkuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBpZGVhIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIGJlIGJyb3VnaHQgaW50byBleGlzdGVuY2UsIGFuZCB0aGF0IHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgd2hldGhlciBJIGNhbiBleHBsb2l0IGEgbWV0aG9kIGZvciBpbnN0YW50aWF0aW5nIG9uZSB0aHJvdWdoIFN5emthbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxNiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTozMy4xNzY1MTU2MzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTAyMjA4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0yMTYwPWludCBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTY4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jOjIxNjk6ICogaXhnYmVfaXNfc2ZwX3Byb2JlIC0gUmV0dXJucyB0cnVlIGlmIFNGUCBpcyBiZWluZyBkZXRlY3RlZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzAtICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3My0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMTc0OnN0YXRpYyBib29sIGl4Z2JlX2lzX3NmcF9wcm9iZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBvZmZzZXQsIHU4IGFkZHIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE3NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYz0yMTk0PXN0YXRpYyBpbnQgaXhnYmVfcmVhZF9pMmNfYnl0ZV9nZW5lcmljX2ludChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDQtXFx0XFx0bWF4X3JldHJ5ID0gMztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMjA1OlxcdGlmIChpeGdiZV9pc19zZnBfcHJvYmUoaHcsIGJ5dGVfb2Zmc2V0LCBkZXZfYWRkcikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjIwNi1cXHRcXHRtYXhfcmV0cnkgPSBJWEdCRV9TRlBfREVURUNUX1JFVFJJRVM7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE2NzY9c3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwMy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDQ6ICogcGh5X3NmcF9wcm9iZSAtIHByb2JlIGZvciBhIFNGUCBjYWdlIGF0dGFjaGVkIHRvIHRoaXMgUEhZIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNS0gKiBAcGh5ZGV2OiBQb2ludGVyIHRvIHBoeV9kZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDYtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA3OnN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1MDg9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUyMi1cXHRpZiAoIXBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUyMzpcXHRcXHRyZXQgPSBwaHlfc2ZwX3Byb2JlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTI0LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MzI1Nz1zdGF0aWMgaW50IHNmcF9pMmNfZ2V0KHN0cnVjdCBzZnAgKnNmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0zMjgyLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozMjgzOnN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTMyODQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTM0NjU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ZwX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MzQ2NjpcXHQucHJvYmUgPSBzZnBfcHJvYmUsXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTM0NjctXFx0LnJlbW92ZSA9IHNmcF9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL252bWVtL2xheWVyc2NhcGUtc2ZwLmM9Mzk9c3RhdGljIHN0cnVjdCBudm1lbV9jb25maWcgbGF5ZXJzY2FwZV9zZnBfbnZtZW1fY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jLTQ1LVxcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYzo0NjpzdGF0aWMgaW50IGxheWVyc2NhcGVfc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jLTQ3LXtcXG4tLVxcbmRyaXZlcnMvbnZtZW0vbGF5ZXJzY2FwZS1zZnAuYz05OD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsYXllcnNjYXBlX3NmcF9kcml2ZXIgPSB7XFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jOjk5OlxcdC5wcm9iZVxcdD0gbGF5ZXJzY2FwZV9zZnBfcHJvYmUsXFxuZHJpdmVycy9udm1lbS9sYXllcnNjYXBlLXNmcC5jLTEwMC1cXHQuZHJpdmVyID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTozNS4yNjY3NDI4NDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NjczMDY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUEhZIERldmljZSBQcm9iaW5nIGZvciBTRlBzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgdGhlIHBvaW50IHdoZXJlIHdlJ3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW4gU0ZQIGNhZ2UgaGFuZ2luZyBvZmYgb2YgYSBQSFkgZGV2aWNlLiBTbywgdGhlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsIHdoYXQgZG9lcyB0aGUgcHJvYmUgcm91dGluZSBhY3R1YWxseSBkbywgYW5kIHdoYXQgYXJlIHRoZSB0cmlnZ2VycyB0aGF0IGNhdXNlIHRoaXMgcHJvYmU/IExldCdzIHBlZWwgYmFjayB0aGUgbGF5ZXJzIGFuZCBhbmFseXplIHRoaXMgbW9yZSBjbG9zZWx5LiBJIGV4cGVjdCBpdCdsbCBpbnZvbHZlIGNoZWNraW5nIHNvbWUgcmVnaXN0ZXJzIGFuZCB1c2luZyBzb21lIHZlbmRvci1zcGVjaWZpYyBpZGVudGlmaWNhdGlvbiBsb2dpYy4gTGV0J3Mgc2VlIGhvdyBpdCdzIGhhbmRsZWQgaW4gdGhlIHNvdXJjZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjM5LjE0MzQ3NjM1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4MTUzMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3NmcF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzAzLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA1LSAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzUwOD1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTIyLVxcdGlmICghcGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTIzOlxcdFxcdHJldCA9IHBoeV9zZnBfcHJvYmUocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1MjQtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTk6MzkuMjI0Mjk3ODg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDgxNzAyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5emluZyBgcGh5X3NmcF9wcm9iZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB3aGF0IHRoaXMgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uIGlzIGFsbCBhYm91dC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBTRlAvUEhZIGluaXRpYWxpemF0aW9uIGFuZCBkaXNjb3ZlcnkgcHJvY2Vzcy4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9sdmVkIGluIHByb2Jpbmcgb3IgZGV0ZWN0aW5nIHRoZSBwcmVzZW5jZSBhbmQgcGVyaGFwcyB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgcGh5c2ljYWwgbGF5ZXIgKFBIWSkgZGV2aWNlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggYW4gU0ZQIChTbWFsbCBGb3JtLWZhY3RvciBQbHVnZ2FibGUpIG1vZHVsZS4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gaGFyZHdhcmUgZGV0ZWN0aW9uLCBwb3RlbnRpYWxseSB1c2luZyBzcGVjaWZpYyBTRlAgbW9kdWxlIGluZm9ybWF0aW9uIG9yIHNwZWNpZmljIHJlZ2lzdGVyIHJlYWRvdXRzLCB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIFBIWSBpcyBjb25uZWN0ZWQgYW5kIGhvdyBpdCBzaG91bGQgYmUgY29uZmlndXJlZC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGFzcGVjdHMgbGlrZSB0aGUgU0ZQJ3MgcHJlc2VuY2UgZGV0ZWN0aW9uLCBwb3dlciBzZXF1ZW5jaW5nLCBhbmQsIHBvdGVudGlhbGx5LCB0aGUgcmVhZGluZyBvZiBTRlAncyBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlZ2lzdGVycyBpdCdzIGFjY2Vzc2luZywgd2hhdCBJMkMgb3Igb3RoZXIgcHJvdG9jb2xzIGl0IG1heSBiZSB1c2luZywgYW5kIHdoYXQgZGF0YSBpdCdzIGludGVycHJldGluZyB0byBkZXRlcm1pbmUgdGhlIFBIWSdzIGNoYXJhY3RlcmlzdGljcy4gQWxzbywgd2hhdCB0eXBlcyBvZiBQSFlzIGRvZXMgaXQgaGFuZGxlPyBBbnkgc3BlY2lmaWMgdmVuZG9yIGNvbnNpZGVyYXRpb25zPyBMZXQncyBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTo0Ny40MzI0NzA0NzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwNyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNzpcXHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNzA4OlxcdHtcXG4xNzA5OlxcdFxcdHN0cnVjdCBzZnBfYnVzICpidXM7XFxuMTcxMDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XFxuMTcxMzpcXHRcXHRcXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKTtcXG4xNzE0OlxcdFxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4xNzE1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuMTcxNjpcXHRcXG4xNzE3OlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4xNzE4OlxcdFxcbjE3MTk6XFx0XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuMTcyMDpcXHRcXHRcXHRzZnBfYnVzX3B1dChidXMpO1xcbjE3MjE6XFx0XFxuMTcyMjpcXHRcXHRcXHRpZiAocmV0KVxcbjE3MjM6XFx0XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gTlVMTDtcXG4xNzI0OlxcdFxcdH1cXG4xNzI1OlxcdFxcbjE3MjY6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcGh5ZGV2LVxcdTAwM2VzZnBfYnVzKVxcbjE3Mjc6XFx0XFx0XFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XFxuMTcyODpcXHRcXG4xNzI5OlxcdFxcdHJldHVybiByZXQ7XFxuMTczMDpcXHR9XFxuMTczMTpcXHRcXG4xNzMyOlxcdHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuMTczMzpcXHR7XFxuMTczNDpcXHRcXHRyZXR1cm4gcGh5ZHJ2LVxcdTAwM2Vjb25maWdfaW50ciBcXHUwMDI2XFx1MDAyNiBwaHlkcnYtXFx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XFxuMTczNTpcXHR9XFxuMTczNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MTk6NDcuNDMyNjg2MTA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NTcyMjM4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBTRlAgRGV2aWNlIEluc3RhbnRpYXRpb24gZm9yIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBhbiBTRlAgYnVzLCBzcGVjaWZpY2FsbHkgdGhlIGBzZnBfYnVzYCwgZ2V0cyBjcmVhdGVkLiBUaGUgdGV4dCBpbmRpY2F0ZXMgaXQncyB0eXBpY2FsbHkgZG9uZSB0aHJvdWdoIHRoZSBgZndub2RlYCAoZGV2aWNlIHRyZWUgb3IgQUNQSSkgbWVjaGFuaXNtLCBhbmQgdGhlIGBzZnBgIHBsYXRmb3JtIGRyaXZlciBpcyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIHRoZSBgc2ZwX2J1c2AuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgd2hldGhlciB0aGVyZSdzIGEgcmVsaWFibGUgd2F5IHRvIGdldCBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHVwIGFuZCBydW5uaW5nIGluIGEgdGVzdCBlbnZpcm9ubWVudCwgcGFydGljdWxhcmx5IHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHVwLCB3aXRob3V0IHJlc29ydGluZyB0byBjdXN0b20gZGV2aWNlIHRyZWUgb3ZlcmxheXMuXG5cblRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIEkgY2FuIGluaXRpYXRlIHRoaXMgZnJvbSB1c2Vyc3BhY2UsIG9yIGlmIHRoZXJlJ3Mgc29tZSBraW5kIG9mIHByb2dyYW1tYXRpYyB3YXkgdG8gZG8gaXQuXG5cbkdpdmVuIHN5emthbGxlcidzIHJvbGUgaW4gdGhpcywgYW5kIHRoYXQgaXQgZG9lc24ndCBnZW5lcmFsbHkgbGV2ZXJhZ2UgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIG15IHRob3VnaHRzIHF1aWNrbHkgdHVybmVkIHRvIHdoZXRoZXIgSSBjb3VsZCBsZXZlcmFnZSBhbnkgZXhpc3Rpbmcgc3l6a2FsbGVyIGZlYXR1cmVzIGxpa2UgdGhlIGBzeXNmc2Agb3IgYGNvbmZpZ2ZzYCBpbnRlcmZhY2VzIGZvciB0aGlzIHB1cnBvc2UuIEJ1dCB0aGVuIEkgcmVjYWxsZWQgdGhhdCBpdCBkb2Vzbid0IHByb3ZpZGUgZ2VuZXJpYyBzdXBwb3J0IGZvciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcywgdW5sZXNzIHRoZXJlJ3MgYSBkcml2ZXIgYWxyZWFkeSBpbiBwbGFjZSB0aGF0IGV4cG9zZXMgc29tZXRoaW5nLiBUaGF0IHdvbid0IGRvIGhlcmUuXG5cblRoZW4sIGEgZmxpY2tlciBvZiBhbiBpZGVhOiB3aGF0IGFib3V0IHRoZSBgaTJjX21paV9wcm9iZV9yb2xsYmFsbGAgZnVuY3Rpb24/IFRoYXQgc2VlbXMgdG8gYmUgY2FsbGVkIGZyb20gYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIE1heWJlIHRoaXMgaXMgYSByZWxldmFudCBwYXRod2F5LiBJcyBgc2ZwLmNgIGFjdHVhbGx5IHJlYWNoYWJsZT8gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGZvciBhbnkgb3RoZXIgY2FsbGVycyBvZiBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIGluIHRoZSBjb2RlYmFzZS4gVGhhdCBtaWdodCBnaXZlIG1lIGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGlzIHByb2JlIGZ1bmN0aW9uIGdldHMgdXNlZCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIGZvciB0cmlnZ2VyaW5nIHRoZSBTRlAgZGV2aWNlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjE5OjU0LjE4OTkxMjYxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4NjY0NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2kyY19wcm9iZV9yb2xsYmFsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jPTM5Mz1zdGF0aWMgaW50IGkyY19taWlfd3JpdGVfcm9sbGJhbGwoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldmFkLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTQyMS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM6NDIyOmludCBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYylcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNDIzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy00NjQtfVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo0NjU6RVhQT1JUX1NZTUJPTF9HUEwobWRpb19pMmNfcHJvYmVfcm9sbGJhbGwpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy00NjYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9MjE5ND1zdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjE0LVxcdFxcdCAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjE1OlxcdFxcdGVyciA9IG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsKHNmcC1cXHUwMDNlaTJjKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxNi1cXHRcXHRpZiAoZXJyID09IC1FTk9ERVYpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oPTIxPXN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIyLVxcdFxcdFxcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaDoyMzppbnQgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGwoc3RydWN0IGkyY19hZGFwdGVyICppMmMpO1xcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoxOTo1NS45NzY1NjI1MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxNjAzODA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFNGUCBEZXZpY2UgSW50ZXJhY3Rpb24gd2l0aCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gZ2V0IFN5emthbGxlciB0byBpbnRlcmFjdCB3aXRoIGFuIFNGUCBjYWdlLiBUaGUgb25seSBmdW5jdGlvbiBJIHNlZSBjYWxsaW5nIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAgaXMgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AuIEl0J3MgY2FsbGVkIGZyb20gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCB3aGljaCBpcyBhIHByb21pc2luZyBsZWFkLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgdGhpcyBzdGF0ZSBtYWNoaW5lIHdpdGggU3l6a2FsbGVyP1xuXG5UaGUgc3RhdGUgbWFjaGluZSBuZWVkcyBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIHRvIGV4aXN0LiBDYW4gU3l6a2FsbGVyIGNyZWF0ZSBvbmUgb2YgdGhvc2U/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgdXNpbmcgYC9zeXMvYnVzL3BsYXRmb3JtL2RyaXZlcnNfcHJvYmVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgdGhhdCB3b24ndCB3b3JrIOKAkyBpdCBuZWVkcyBhbiBleGlzdGluZyBkZXZpY2UuIEkgY2hlY2tlZCBpZiBgc3l6X2Rldl9wbGF0Zm9ybV9hZGRgIHdhcyBhdmFpbGFibGUg4oCTIG5vIGx1Y2suIEhtbSwgU3l6a2FsbGVyIGRvZXMgaGF2ZSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgZGV2aWNlcyB2aWEgYG5ldGxpbmtgIGZvciB2aXJ0dWFsIGludGVyZmFjZXMgbGlrZSBgdmV0aGAsIGBtYWN2bGFuYCwgYGR1bW15YCwgYW5kIGB2eGxhbmAuIEJ1dCwgbm9uZSBvZiB0aG9zZSwgZnJvbSB3aGF0IEkga25vdywgaGF2ZSBhbiBTRlAgY2FnZSB0byBzaW11bGF0ZSBvciBpbnRlcmFjdCB3aXRoLiBUaGF0J3MgYSBkZWFkIGVuZC5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLi4uIHdoYXQgYWJvdXQgYG5ldGRldnNpbWA/IERvZXMgYG5ldGRldnNpbWAgaGF2ZSBhbiBTRlAgY2FnZT8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJZiBpdCAqZG9lcyosIHRoZW4gSSBtaWdodCBiZSBhYmxlIHRvIGNyYWZ0IGEgU3l6a2FsbGVyIHRlc3QgY2FzZSB0byBwcm9iZSB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUgdGhyb3VnaCBgbmV0ZGV2c2ltYCwgYW5kIHRoZW4gSSBjYW4gZGlnIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgU3l6a2FsbGVyIHRyaWdnZXJzIHRoZXNlIGV2ZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjA6MDEuNjkyNjAzNDk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTY2NjE1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjAxLjc1ODI4MTg2NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk0ODEyMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIGFuZCBTRlAgQ2FnZSBDb21wYXRpYmlsaXR5KipcblxuUmlnaHQsIHNvIEknbSBoaXR0aW5nIGEgcm9hZGJsb2NrLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgb2YgdXNpbmcgYG1hYzgwMjExX2h3c2ltYCBmb3IgdGhpcyBzZXR1cCBqdXN0IHdvbid0IGN1dCBpdC4gSXQncyBub3QgdGhlIHJpZ2h0IGZpdCBmb3IgdGhlIGxldmVsIG9mIGZsZXhpYmlsaXR5IGFuZCBoYXJkd2FyZSBpbnRlcmFjdGlvbiBJJ20gbG9va2luZyBmb3IuIExldCdzIG1vdmUgb24uXG5cbk5vdywgdGhlIG5leHQgdHJhaW4gb2YgdGhvdWdodCBpcyB0byBjaGVjayBgdmhjaWAgZm9yIGEgc29sdXRpb24uIFdpdGggYHZoY2lgIEkgY291bGQgdGhlb3JldGljYWxseSBzaW11bGF0ZSBhIFVTQiBkZXZpY2Ugd2hpY2gsIGluIHR1cm4sIHdvdWxkIGNyZWF0ZSB0aGUgbmV0d29ya2luZyBjb25uZWN0aXZpdHkgcmVxdWlyZWQuIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW55IHN1aXRhYmxlIFVTQiBuZXR3b3JrIGFkYXB0ZXJzIGV4aXN0IHRoYXQgYWxzbyBmZWF0dXJlIGFuIFNGUCBjYWdlLiBJJ20gbm90IGZhbWlsaWFyIHdpdGggYW55LCBzbyBJJ2xsIG5lZWQgdG8gcmVzZWFyY2ggdGhhdCBvciBsb29rIGZvciBhbHRlcm5hdGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjA6MDYuMTUzMDk4ODkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTgzMjE2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjA2LjIyMjkzOTA5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzM2Mjk4MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBEZXZpY2UgRnV6emluZyBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuIFRoZSBpbml0aWFsIGFuc3dlciBpcyBcIk5vLFwiIGJ1dCB3YWl0IGEgbWludXRlLi4uIHdoYXQgYWJvdXQgUGVyaXBoZXJhbCBDb21wb25lbnQgSW50ZXJjb25uZWN0IChQQ0kpIGRldmljZXM/IFN5emthbGxlciwgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiwgY2FuIGFic29sdXRlbHkgZnV6eiB0aGVzZSB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAuIFdlIGtub3cgdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG9mIHNldHVwcyB1c2luZyB2aXJ0dWFsIGZ1bmN0aW9uIEkvTyAoYHZmaW9gKSBvciB0aGUgUENJIHBzZXVkby1kZXZpY2UuXG5cblNvLCB0aGUga2V5IHF1ZXN0aW9uIGJlY29tZXM6IGFyZSB0aGVyZSBhbnkgUENJIG5ldHdvcmsgZHJpdmVycyB0aGF0IGhhbmRsZSBTbWFsbCBGb3JtLWZhY3RvciBQbHVnZ2FibGUgKFNGUCkgdHJhbnNjZWl2ZXJzIGFuZCwgY3JpdGljYWxseSwgaW5zdGFudGlhdGUgdGhlbSAqd2l0aG91dCogcmVseWluZyBvbiB0aGUgZGV2aWNlIHRyZWU/IFRoYXQncyB0aGUgYW5nbGUgaGVyZSwgcmlnaHQ/XG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBhbnkgb2YgdGhlc2UgUENJIGRyaXZlcnMsIHNwZWNpZmljYWxseSwgYWN0dWFsbHkgY2FsbCBgc2ZwX3Byb2JlYCBvciBkaXJlY3RseSBjcmVhdGUgYW4gU0ZQIGluc3RhbmNlLiBUaGF0J3MgdGhlIG5leHQgc3RlcCB0byBmaWd1cmUgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDE3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjE1LjU1OTI0MjI4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0OTczNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE2MD1pbnQgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmMtMjE2OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYzoyMTY5OiAqIGl4Z2JlX2lzX3NmcF9wcm9iZSAtIFJldHVybnMgdHJ1ZSBpZiBTRlAgaXMgYmVpbmcgZGV0ZWN0ZWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMTcwLSAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzMtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjE3NDpzdGF0aWMgYm9vbCBpeGdiZV9pc19zZnBfcHJvYmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggb2Zmc2V0LCB1OCBhZGRyKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIxNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM9MjE5ND1zdGF0aWMgaW50IGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpY19pbnQoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9waHkuYy0yMjA0LVxcdFxcdG1heF9yZXRyeSA9IDM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfcGh5LmM6MjIwNTpcXHRpZiAoaXhnYmVfaXNfc2ZwX3Byb2JlKGh3LCBieXRlX29mZnNldCwgZGV2X2FkZHIpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3BoeS5jLTIyMDYtXFx0XFx0bWF4X3JldHJ5ID0gSVhHQkVfU0ZQX0RFVEVDVF9SRVRSSUVTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMDoxNS43MzQyMjI2NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM4NzU1OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipTRlAgQ29uZnVzaW9uIGluIGl4Z2JlIGFuZCBCZXlvbmQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBgaXhnYmVgIGRyaXZlciBhZ2FpbiwgYW5kIHNvbWV0aGluZydzIGp1c3Qgbm90IHF1aXRlIGNsaWNraW5nLiBJIHNlZSBgaXhnYmVgIGhhcyB0aGlzIGBpeGdiZV9pc19zZnBfcHJvYmVgIGZ1bmN0aW9uIOKAkyBjbGVhcmx5IGRlYWxpbmcgd2l0aCBTRlAgbW9kdWxlcywgcmlnaHQ/IEJ1dCB0aGVuIEkgcmVtZW1iZXIsIGl0IGRvZXNuJ3QgYWN0dWFsbHkgKnVzZSogdGhlIGdlbmVyaWMgYHNmcGAgcGxhdGZvcm0gZHJpdmVyLiBJdCdzIGdvdCBpdHMgb3duLCBiZXNwb2tlIFNGUCBsb2dpYyBpbXBsZW1lbnRlZCByaWdodCB3aXRoaW4gdGhlIGBpeGdiZWAgY29kZS4gVGhhdCdzIGEgbGl0dGxl4oCmIHVudXN1YWwsIGZyYW5rbHkuXG5cbldoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdvbmRlcjogd2FpdCBhIG1pbnV0ZSwgZG9lcyAqYW55KiBkcml2ZXIgYWN0dWFsbHkgYm90aGVyIHRvIGluc3RhbnRpYXRlIHRoZSBgc2ZwYCBwbGF0Zm9ybSBkZXZpY2U/IElzIHRoZXJlIGEgdmFsaWQgdXNlIGNhc2U/IEl0IHNlZW1zIGxpa2UgZXZlcnkgZHJpdmVyIHRoYXQgd2FudHMgdG8gZGVhbCB3aXRoIFNGUHMgaXMganVzdCByb2xsaW5nIGl0cyBvd24gc29sdXRpb24uIEknbSBnb2luZyB0byBuZWVkIHRvIGxvb2sgaW50byB0aGlzIGZ1cnRoZXIsIHBlcmhhcHMgZ28gc3BlbHVua2luZyBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBjb25maXJtIHRoaXMuIFNvbWV0aGluZyBzZWVtcyBhbWlzcyB3aXRoIHRoZSBTRlAgaW5mcmFzdHJ1Y3R1cmUsIG9yIHBlcmhhcHMgSSdtIG1pc3NpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg0MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjIwLjI3Mjk4MjgwNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNzEzMzAzMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZVxcXFwoXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMDoyMi42MDAxMjM0MzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczODUzOTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBhdWRpZW5jZSBpcyBhbm90aGVyIGV4cGVydDpcblxuKipDb25zaWRlcmluZyBEZXZpY2UgUmVnaXN0cmF0aW9uIGZvciBcInNmcFwiKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBoYW5kbGUgdGhpcyBcInNmcFwiIHNpdHVhdGlvbi4gVGhlIGNvcmUgb2YgdGhpcyBpcyBnb2luZyB0byBiZSBkZXZpY2UgcmVnaXN0cmF0aW9uLCBtYWtpbmcgc3VyZSB0aGUgc3lzdGVtIHByb3Blcmx5IHJlY29nbml6ZXMgYW5kIG1hbmFnZXMgaXQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgb3IgYHBsYXRmb3JtX2RldmljZV9hbGxvY2AuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXZpY2U/IFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24uIElmIHNvLCB0aG9zZSBwbGF0Zm9ybSBBUElzIHdvdWxkIGJlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBgcGxhdGZvcm1fZGV2aWNlX2FsbG9jYCB3b3VsZCBnaXZlIG1lIHRoZSBmbGV4aWJpbGl0eSB0byBjb25zdHJ1Y3QgdGhlIGRldmljZSBzdHJ1Y3R1cmUgZXhhY3RseSBhcyBuZWVkZWQsIHdoaWxlIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgIHN0cmVhbWxpbmVzIHRoZSBwcm9jZXNzIGlmIHRoZSBjb3JlIGRldGFpbHMgYXJlIGFscmVhZHkgYXZhaWxhYmxlLiBUaGUgY2hvaWNlIGhpbmdlcyBvbiB0aGUgc3BlY2lmaWNzLCBidXQgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBoYXJkd2FyZSBkb2N1bWVudGF0aW9uIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgc3RhbmRhcmQgcGxhdGZvcm0gZGV2aWNlIG9yIHNvbWV0aGluZyBtb3JlIGN1c3RvbS4gVGhpcyB3aWxsIGd1aWRlIHdoZXRoZXIgSSBuZWVkIGZpbmUtZ3JhaW5lZCBjb250cm9sIG9yIGEgc2ltcGxlciByZWdpc3RyYXRpb24gbWV0aG9kLiBMZXQncyBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgd2lyZWQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjA6MjkuMzM4NjY1OTc0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NjM2NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYz0xNjY2PXN0YXRpYyB2b2lkIHhnZW5lX2VuZXRfZ3Bpb2RfZ2V0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0xNjc4LVxcdGlmIChJU19FUlIocGRhdGEtXFx1MDAzZXNmcF9yZHkpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYzoxNjc5OlxcdFxcdHBkYXRhLVxcdTAwM2VzZnBfcmR5ID0gZ3Bpb2RfZ2V0KGRldiwgXFxcInNmcFxcXCIsIEdQSU9EX0lOKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMtMTY4MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jPTQ2Nj1zdGF0aWMgaW50IHhnZW5lX2VuZXRfZ3Bpb19sb29rdXAoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYy00NzEtXFx0aWYgKElTX0VSUihwZGF0YS1cXHUwMDNlc2ZwX3JkeSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYzo0NzI6XFx0XFx0cGRhdGEtXFx1MDAzZXNmcF9yZHkgPSBncGlvZF9nZXQoZGV2LCBcXFwic2ZwXFxcIiwgR1BJT0RfSU4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmMtNDczLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXFx0bm9kZXMtXFx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXFxcIm1hbmFnZWRcXFwiLCBcXFwiaW4tYmFuZC1zdGF0dXNcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjc3OlxcdG5vZGVzLVxcdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJzZnBcXFwiLCBub2Rlcy1cXHUwMDNlc2ZwX3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03OC1cXHRzd25vZGVzW1NXTk9ERV9QSFlMSU5LXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cXHUwMDNlcGh5bGlua19wcm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTItXFx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cXHUwMDNlbm9kZXMuZ3JvdXBbU1dOT0RFX1NGUF0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTEzOlxcdGluZm8ubmFtZSA9IFxcXCJzZnBcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVxcdGluZm8uaWQgPSBwY2lfZGV2X2lkKHBkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMDoyOS40NTk2MzU2MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwMDI2Njc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB0eGdiZSBQSFkgRHJpdmVyKipcblxuQWxyaWdodCwgbXkgaW50ZXJuYWwgcmFkYXIganVzdCBwaW5nZWQg4oCTIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuY2AgZmlsZS4uLiBhaGEhIEl0J3MgcmVnaXN0ZXJpbmcgYW4gU0ZQIHBsYXRmb3JtIGRldmljZSwgYSBrZXkgcGFydCBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2Ugc2V0dXAuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHpvb20gaW4gb24gYHR4Z2JlX3NmcF9yZWdpc3RlcmAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgU0ZQIG1vZHVsZS4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgaW5pdGlhbCBwcm9iaW5nLCBkZXRlY3Rpb24sIGFuZCBwb3NzaWJseSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFNGUC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IGl0IGRldGVybWluZXMgdGhlIFNGUCdzIHR5cGUsIHdoYXQga2luZCBvZiBJMkMgYnVzIGNvbmZpZ3VyYXRpb24gaXQgc2V0cyB1cCwgYW5kIGFueSBwb3dlciBtYW5hZ2VtZW50IHByb2NlZHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIHRvIGEgc3RhYmxlIGFuZCBjb3JyZWN0IGxpbmsuIEknbGwgYmUgZHJpbGxpbmcgZG93biB0byBleGFtaW5lIHRoZSByZWdpc3RlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQSFkgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMzksIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMDozOC4zNTk5MDUxODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDU6XFx0c3RhdGljIGludCB0eGdiZV9zZnBfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4gNTA2OlxcdHtcXG4gNTA3OlxcdFxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHhnYmUtXFx1MDAzZXd4LVxcdTAwM2VwZGV2O1xcbiA1MDg6XFx0XFx0c3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIGluZm8gPSB7fTtcXG4gNTA5OlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNmcF9kZXY7XFxuIDUxMDpcXHRcXG4gNTExOlxcdFxcdGluZm8ucGFyZW50ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNTEyOlxcdFxcdGluZm8uZndub2RlID0gc29mdHdhcmVfbm9kZV9md25vZGUodHhnYmUtXFx1MDAzZW5vZGVzLmdyb3VwW1NXTk9ERV9TRlBdKTtcXG4gNTEzOlxcdFxcdGluZm8ubmFtZSA9IFxcXCJzZnBcXFwiO1xcbiA1MTQ6XFx0XFx0aW5mby5pZCA9IHBjaV9kZXZfaWQocGRldik7XFxuIDUxNTpcXHRcXHRzZnBfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoXFx1MDAyNmluZm8pO1xcbiA1MTY6XFx0XFx0aWYgKElTX0VSUihzZnBfZGV2KSlcXG4gNTE3OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNmcF9kZXYpO1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHR0eGdiZS1cXHUwMDNlc2ZwX2RldiA9IHNmcF9kZXY7XFxuIDUyMDpcXHRcXG4gNTIxOlxcdFxcdHJldHVybiAwO1xcbiA1MjI6XFx0fVxcbiA1MjM6XFx0XFxuIDUyNDpcXHRzdGF0aWMgaW50IHR4Z2JlX2V4dF9waHlfaW5pdChzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbiA1MjU6XFx0e1xcbiA1MjY6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4gNTI3OlxcdFxcdHN0cnVjdCBtaWlfYnVzICptaWlfYnVzO1xcbiA1Mjg6XFx0XFx0c3RydWN0IHBjaV9kZXYgKnBkZXY7XFxuIDUyOTpcXHRcXHRzdHJ1Y3Qgd3ggKnd4O1xcbiA1MzA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDUzMTpcXHRcXG4gNTMyOlxcdFxcdHd4ID0gdHhnYmUtXFx1MDAzZXd4O1xcbiA1MzM6XFx0XFx0cGRldiA9IHd4LVxcdTAwM2VwZGV2O1xcbiA1MzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjM4LjM1OTk5MTQ3NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ3OTkxODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFdhbmd4dW4gMTBHYkUgTklDIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdHhnYmVgIGRyaXZlciDigJMgdGhhdCdzIHRoZSBXYW5neHVuIDEwR2JFIFBDSSBFeHByZXNzIE5JQywgcmlnaHQ/IEknbSB3b25kZXJpbmcgaWYgd2UgY2FuIGFjdHVhbGx5IGdldCBTeXprYWxsZXIgdG8gZnV6eiBpdC4gVGhlIG9idmlvdXMgcm91dGUgaXMgdGhyb3VnaCBQQ0kgZnV6emluZywgd2hpY2ggaXMgZW5hYmxlZC4gQnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25uZWN0aW9uIHBvaW50cy5cblxuVGhlIGtleSBzZWVtcyB0byBiZSB0aGF0IGB0eGdiZWAgcmVnaXN0ZXJzIGFuIFNGUCBwbGF0Zm9ybSBkZXZpY2UuIEludGVyZXN0aW5nLiBEb2VzIGl0ICp1c2UqIFNGUD8gWWVzLCBpdCBkb2VzLCBpdCdzIGNhbGxlZCBcInNmcFwiLlxuXG5BaCwgcmlnaHQsIHRoZSBgc2ZwYCBkcml2ZXIgaW4gYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgaXMgdGhlIG9uZSB0aGF0J3MgZ29pbmcgdG8gcHJvYmUgZm9yIHBsYXRmb3JtIGRldmljZXMgd2l0aCB0aGF0IG5hbWUuIFNvLCBpZiBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHRoYXQgbWF0Y2hlcyBgdHhnYmVgLCB0aGUgYHR4Z2JlYCBkcml2ZXIgd2lsbCBwcm9iZSBhcyBpdCBzaG91bGQuIFRoZW4sIGJlY2F1c2Ugb2YgaG93IHRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyZWQsIGl0IHdpbGwgY2FsbCBgdHhnYmVfc2ZwX3JlZ2lzdGVyYCwgd2hpY2ggY3JlYXRlcyB0aGlzIFwic2ZwXCIgcGxhdGZvcm0gZGV2aWNlLiBBdCB0aGlzIHBvaW50LCB0aGUgYHNmcGAgZHJpdmVyIHNob3VsZCBwcm9iZSFcblxuT2theSwgdGhhdCdzIGEgcHJvbWlzaW5nIHBhdGguIE5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIHRoZSBgc2ZwYCBkcml2ZXIgZGVwZW5kIG9uIGFueSBzcGVjaWZpYyBHUElPcyBvciBJMkMgYnVzZXMgYmVpbmcgcHJlc2VudD8gSWYgaXQgZG9lcywgdGhlbiBTeXprYWxsZXIgd291bGQgbmVlZCB0byBiZSBjb25maWd1cmVkIHRvIGVtdWxhdGUgdGhvc2UgYXMgd2VsbCB0byBoYXZlIGFueSBzdWNjZXNzLiBMZXQgbWUgZ28gY2hlY2sgdGhhdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjQ0LjYwNzk4NjE5NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyODMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyODM6XFx0c3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4zMjg0OlxcdHtcXG4zMjg1OlxcdFxcdGNvbnN0IHN0cnVjdCBzZmZfZGF0YSAqc2ZmO1xcbjMyODY6XFx0XFx0Y2hhciAqc2ZwX2lycV9uYW1lO1xcbjMyODc6XFx0XFx0c3RydWN0IHNmcCAqc2ZwO1xcbjMyODg6XFx0XFx0aW50IGVyciwgaTtcXG4zMjg5OlxcdFxcbjMyOTA6XFx0XFx0c2ZwID0gc2ZwX2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbjMyOTE6XFx0XFx0aWYgKElTX0VSUihzZnApKVxcbjMyOTI6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc2ZwKTtcXG4zMjkzOlxcdFxcbjMyOTQ6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2ZwKTtcXG4zMjk1OlxcdFxcbjMyOTY6XFx0XFx0ZXJyID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KHNmcC1cXHUwMDNlZGV2LCBzZnBfY2xlYW51cCwgc2ZwKTtcXG4zMjk3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjMyOTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMjk5OlxcdFxcbjMzMDA6XFx0XFx0c2ZmID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKHNmcC1cXHUwMDNlZGV2KTtcXG4zMzAxOlxcdFxcdGlmICghc2ZmKVxcbjMzMDI6XFx0XFx0XFx0c2ZmID0gXFx1MDAyNnNmcF9kYXRhO1xcbjMzMDM6XFx0XFxuMzMwNDpcXHRcXHRzZnAtXFx1MDAzZXR5cGUgPSBzZmY7XFxuMzMwNTpcXHRcXG4zMzA2OlxcdFxcdGVyciA9IHNmcF9pMmNfZ2V0KHNmcCk7XFxuMzMwNzpcXHRcXHRpZiAoZXJyKVxcbjMzMDg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMzA5OlxcdFxcbjMzMTA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEdQSU9fTUFYOyBpKyspXFxuMzMxMTpcXHRcXHRcXHRpZiAoc2ZmLVxcdTAwM2VncGlvcyBcXHUwMDI2IEJJVChpKSkge1xcbjMzMTI6XFx0XFx0XFx0XFx0c2ZwLVxcdTAwM2VncGlvW2ldID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoc2ZwLVxcdTAwM2VkZXYsXFxuMzMxMzpcXHRcXHRcXHRcXHRcXHRcXHQgICBncGlvX25hbWVzW2ldLCBncGlvX2ZsYWdzW2ldKTtcXG4zMzE0OlxcdFxcdFxcdFxcdGlmIChJU19FUlIoc2ZwLVxcdTAwM2VncGlvW2ldKSlcXG4zMzE1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHNmcC1cXHUwMDNlZ3Bpb1tpXSk7XFxuMzMxNjpcXHRcXHRcXHR9XFxuMzMxNzpcXHRcXG4zMzE4OlxcdFxcdHNmcC1cXHUwMDNlc3RhdGVfaHdfbWFzayA9IFNGUF9GX1BSRVNFTlQ7XFxuMzMxOTpcXHRcXHRzZnAtXFx1MDAzZXN0YXRlX2h3X2RyaXZlID0gU0ZQX0ZfVFhfRElTQUJMRTtcXG4zMzIwOlxcdFxcbjMzMjE6XFx0XFx0c2ZwLVxcdTAwM2VnZXRfc3RhdGUgPSBzZnBfZ3Bpb19nZXRfc3RhdGU7XFxuMzMyMjpcXHRcXHRzZnAtXFx1MDAzZXNldF9zdGF0ZSA9IHNmcF9ncGlvX3NldF9zdGF0ZTtcXG4zMzIzOlxcdFxcbjMzMjQ6XFx0XFx0LyogQW4gU0ZQIGNhZ2Ugd2l0aCBubyBNT0RfREVGMCBHUElPIGhhcyBubyBoYXJkd2FyZSBwcmVzZW5jZSBzaWduYWwuXFxuMzMyNTpcXHRcXHQgKiBBc3N1bWluZyB0aGUgbW9kdWxlIGlzIGFsd2F5cyBwcmVzZW50IHRyYXBzIGFuIGVtcHR5IGNhZ2UgaW5cXG4zMzI2OlxcdFxcdCAqIE1PRF9FUlJPUiBhbmQgbmV2ZXIgZGV0ZWN0cyBob3QtaW5zZXJ0aW9uLCBzbyBkZXJpdmUgcHJlc2VuY2UgZnJvbSBhXFxuMzMyNzpcXHRcXHQgKiB0aHJvdHRsZWQgSTJDIHByb2JlIGFuZCBwb2xsIGZvciBjaGFuZ2VzIGluc3RlYWQuIHNmcF9pMmNfY29uZmlndXJlKClcXG4zMzI4OlxcdFxcdCAqIGhhcyBhbHJlYWR5IHNldCBpMmNfbWF4X2Jsb2NrX3NpemU7IHNlZWQgaTJjX2Jsb2NrX3NpemUgc28gdGhlXFxuMzMyOTpcXHRcXHQgKiBwcmVzZW5jZSByZWFkIGRvZXMgbm90IGlzc3VlIGEgemVyby1sZW5ndGggdHJhbnNmZXIgYmVmb3JlIHRoZSBmaXJzdFxcbjMzMzA6XFx0XFx0ICogRUVQUk9NIHJlYWQuIFNlZWQgaTJjX3ByZXNlbnRfbmV4dCB0byBqaWZmaWVzIHNvIHRoZSBmaXJzdCBwcm9iZVxcbjMzMzE6XFx0XFx0ICogaGFwcGVucyBpbW1lZGlhdGVseSAoYSB6ZXJvIHZhbHVlIHdvdWxkIGJlIGluIHRoZSBwYXN0IHJlbGF0aXZlIHRvXFxuMzMzMjpcXHRcXHQgKiB0aGUgbmVnYXRpdmUgSU5JVElBTF9KSUZGSUVTIGF0IGJvb3QgYW5kIGRlbGF5IGRldGVjdGlvbikuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjQ0LjYwODE1NDczNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDg4MzM5OTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBJMkMgQWRhcHRlciBSZXRyaWV2YWwqKlxuXG5Pa2F5LCBzbyBgc2ZwX2kyY19nZXRgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZ2V0dGluZyB0aGUgSTJDIGFkYXB0ZXIuIFRoZSBjb3JlIG9mIGFueSBkcml2ZXIgaW50ZXJhY3Rpb24gd2l0aCBJMkMgaGluZ2VzIG9uIHRoaXMsIHNvIGl0J3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBkaWcgaW50byBob3cgYHNmcF9pMmNfZ2V0YCBhY3R1YWxseSBhY2NvbXBsaXNoZXMgdGhpcy4gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgbG9va3VwIGJhc2VkIG9uIGEgcHJlZGVmaW5lZCBhZGRyZXNzLCBvciBpcyB0aGVyZSBhIG1vcmUgc29waGlzdGljYXRlZCBkaXNjb3ZlcnkgbWVjaGFuaXNtIGF0IHBsYXk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBhcmUgZXhwbGljaXRseSBoYW5kbGVkLCBhbmQgaWYgc28sIGhvdz8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnMgdGhpcyBmdW5jdGlvbiBtYWtlcyBhYm91dCB0aGUgaGFyZHdhcmUgYW5kIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmU/IEkgd2FudCB0byBrbm93IGlmIGl0J3MgdGhyZWFkLXNhZmUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBVbHRpbWF0ZWx5LCBteSBhbmFseXNpcyB3aWxsIGZvY3VzIG9uIGFuc3dlcmluZyBob3cgdGhlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHRvIHJldHJpZXZlIHRoZSBJMkMgYWRhcHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIwOjU5LjQ5MTU1NzA4OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNTcsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNTc6XFx0c3RhdGljIGludCBzZnBfaTJjX2dldChzdHJ1Y3Qgc2ZwICpzZnApXFxuMzI1ODpcXHR7XFxuMzI1OTpcXHRcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqaDtcXG4zMjYwOlxcdFxcdHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjO1xcbjMyNjE6XFx0XFx0aW50IGVycjtcXG4zMjYyOlxcdFxcbjMyNjM6XFx0XFx0aCA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZfZndub2RlKHNmcC1cXHUwMDNlZGV2KSwgXFxcImkyYy1idXNcXFwiLCAwKTtcXG4zMjY0OlxcdFxcdGlmIChJU19FUlIoaCkpIHtcXG4zMjY1OlxcdFxcdFxcdGRldl9lcnIoc2ZwLVxcdTAwM2VkZXYsIFxcXCJtaXNzaW5nICdpMmMtYnVzJyBwcm9wZXJ0eVxcXFxuXFxcIik7XFxuMzI2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4zMjY3OlxcdFxcdH1cXG4zMjY4OlxcdFxcbjMyNjk6XFx0XFx0aTJjID0gaTJjX2dldF9hZGFwdGVyX2J5X2Z3bm9kZShoKTtcXG4zMjcwOlxcdFxcdGlmICghaTJjKSB7XFxuMzI3MTpcXHRcXHRcXHRlcnIgPSAtRVBST0JFX0RFRkVSO1xcbjMyNzI6XFx0XFx0XFx0Z290byBwdXQ7XFxuMzI3MzpcXHRcXHR9XFxuMzI3NDpcXHRcXG4zMjc1OlxcdFxcdGVyciA9IHNmcF9pMmNfY29uZmlndXJlKHNmcCwgaTJjKTtcXG4zMjc2OlxcdFxcdGlmIChlcnIpXFxuMzI3NzpcXHRcXHRcXHRpMmNfcHV0X2FkYXB0ZXIoaTJjKTtcXG4zMjc4OlxcdHB1dDpcXG4zMjc5OlxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KGgpO1xcbjMyODA6XFx0XFx0cmV0dXJuIGVycjtcXG4zMjgxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjA6NTkuNDkxNzY3MjU4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NjA5MDk2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYW50aWNpcGF0aW5nIHdoYXQgYSBrbm93bGVkZ2VhYmxlIHVzZXIgd291bGQgYmUgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIEkyQyBCdXMgUmVxdWlyZW1lbnRzIGZvciBUaGlzIERldmljZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlIGFuZCB0aGUgZndub2RlIHN0cnVjdHVyZS4gSXQncyBjbGVhciB0aGF0IGl0IHJlcXVpcmVzIGFuIGBpMmMtYnVzYCBwcm9wZXJ0eS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiwgb2YgY291cnNlLCBpcyB3aGV0aGVyIHRoZSBgdHhnYmVgIGRyaXZlciBhY3R1YWxseSBwcm92aWRlcyB0aGlzIHByb3BlcnR5IGluIGl0cyBmd25vZGUgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGdvIGFuZCBjaGVjayB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlIGFuZCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgdHhnYmVgIGlzIGNvcnJlY3RseSBwb3B1bGF0aW5nIHRoYXQgYGkyYy1idXNgIHByb3BlcnR5LCBhbmQgaWYgbm90LCB3aHkuIEFyZSB0aGVyZSBhbnkgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSB0aGF0IGFyZW4ndCBiZWluZyBleHBsaWNpdGx5IHN0YXRlZD8gQXJlIHRoZXJlIGFueSBkb3duc3RyZWFtIGRlcGVuZGVuY2llcyByZWx5aW5nIG9uIHRoaXM/IEkgbmVlZCB0byBiZSBzdXJlIHRoZSBoYXJkd2FyZSBpcyBiZWluZyBjb25maWd1cmVkIHByb3Blcmx5LiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvcnJlY3QgY29tbXVuaWNhdGlvbiB3aXRoIGFueSBJMkMtY29ubmVjdGVkIHBlcmlwaGVyYWxzIG9uIHRoaXMgYm9hcmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBnb2luZyB0byBjYXVzZSBhbnkgc2lsZW50IGVycm9ycyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTExMiwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MDkuMDUyNjgwMTg1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI3OlxcdHN0YXRpYyBpbnQgdHhnYmVfc3dub2Rlc19yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0c3RydWN0IHR4Z2JlX25vZGVzICpub2RlcyA9IFxcdTAwMjZ0eGdiZS1cXHUwMDNlbm9kZXM7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHR4Z2JlLVxcdTAwM2V3eC1cXHUwMDNlcGRldjtcXG4gIDMxOlxcdFxcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlICpzd25vZGVzO1xcbiAgMzI6XFx0XFx0dTMyIGlkO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRpZCA9IHBjaV9kZXZfaWQocGRldik7XFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdHNucHJpbnRmKG5vZGVzLVxcdTAwM2VncGlvX25hbWUsIHNpemVvZihub2Rlcy1cXHUwMDNlZ3Bpb19uYW1lKSwgXFxcInR4Z2JlX2dwaW8tJXhcXFwiLCBpZCk7XFxuICAzNzpcXHRcXHRzbnByaW50Zihub2Rlcy1cXHUwMDNlaTJjX25hbWUsIHNpemVvZihub2Rlcy1cXHUwMDNlaTJjX25hbWUpLCBcXFwidHhnYmVfaTJjLSV4XFxcIiwgaWQpO1xcbiAgMzg6XFx0XFx0c25wcmludGYobm9kZXMtXFx1MDAzZXNmcF9uYW1lLCBzaXplb2Yobm9kZXMtXFx1MDAzZXNmcF9uYW1lKSwgXFxcInR4Z2JlX3NmcC0leFxcXCIsIGlkKTtcXG4gIDM5OlxcdFxcdHNucHJpbnRmKG5vZGVzLVxcdTAwM2VwaHlsaW5rX25hbWUsIHNpemVvZihub2Rlcy1cXHUwMDNlcGh5bGlua19uYW1lKSwgXFxcInR4Z2JlX3BoeWxpbmstJXhcXFwiLCBpZCk7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdHN3bm9kZXMgPSBub2Rlcy1cXHUwMDNlc3dub2RlcztcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0LyogR1BJTyAwOiB0eCBmYXVsdFxcbiAgNDQ6XFx0XFx0ICogR1BJTyAxOiB0eCBkaXNhYmxlXFxuICA0NTpcXHRcXHQgKiBHUElPIDI6IHNmcCBtb2R1bGUgYWJzZW50XFxuICA0NjpcXHRcXHQgKiBHUElPIDM6IHJ4IHNpZ25hbCBsb3N0XFxuICA0NzpcXHRcXHQgKiBHUElPIDQ6IHJhdGUgc2VsZWN0LCAxRygwKSAxMEcoMSlcXG4gIDQ4OlxcdFxcdCAqIEdQSU8gNTogcmF0ZSBzZWxlY3QsIDFHKDApIDEwRygxKVxcbiAgNDk6XFx0XFx0ICovXFxuICA1MDpcXHRcXHRub2Rlcy1cXHUwMDNlZ3Bpb19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcXFwicGluY3RybC1uYW1lc1xcXCIsIFxcXCJkZWZhdWx0XFxcIik7XFxuICA1MTpcXHRcXHRzd25vZGVzW1NXTk9ERV9HUElPXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlZ3Bpb19uYW1lLCBub2Rlcy1cXHUwMDNlZ3Bpb19wcm9wcyk7XFxuICA1MjpcXHRcXHRub2Rlcy1cXHUwMDNlZ3BpbzBfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAwLCBHUElPX0FDVElWRV9ISUdIKTtcXG4gIDUzOlxcdFxcdG5vZGVzLVxcdTAwM2VncGlvMV9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDEsIEdQSU9fQUNUSVZFX0hJR0gpO1xcbiAgNTQ6XFx0XFx0bm9kZXMtXFx1MDAzZWdwaW8yX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFxcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMiwgR1BJT19BQ1RJVkVfTE9XKTtcXG4gIDU1OlxcdFxcdG5vZGVzLVxcdTAwM2VncGlvM19yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDMsIEdQSU9fQUNUSVZFX0hJR0gpO1xcbiAgNTY6XFx0XFx0bm9kZXMtXFx1MDAzZWdwaW80X3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFxcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgNCwgR1BJT19BQ1RJVkVfSElHSCk7XFxuICA1NzpcXHRcXHRub2Rlcy1cXHUwMDNlZ3BpbzVfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCA1LCBHUElPX0FDVElWRV9ISUdIKTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0bm9kZXMtXFx1MDAzZWkyY19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcXFwiY29tcGF0aWJsZVxcXCIsIFxcXCJzbnBzLGRlc2lnbndhcmUtaTJjXFxcIik7XFxuICA2MDpcXHRcXHRub2Rlcy1cXHUwMDNlaTJjX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfQk9PTChcXFwid3gsaTJjLXNucHMtbW9kZWxcXFwiKTtcXG4gIDYxOlxcdFxcdG5vZGVzLVxcdTAwM2VpMmNfcHJvcHNbMl0gPSBQUk9QRVJUWV9FTlRSWV9VMzIoXFxcImNsb2NrLWZyZXF1ZW5jeVxcXCIsIEkyQ19NQVhfU1RBTkRBUkRfTU9ERV9GUkVRKTtcXG4gIDYyOlxcdFxcdHN3bm9kZXNbU1dOT0RFX0kyQ10gPSBOT0RFX1BST1Aobm9kZXMtXFx1MDAzZWkyY19uYW1lLCBub2Rlcy1cXHUwMDNlaTJjX3Byb3BzKTtcXG4gIDYzOlxcdFxcdG5vZGVzLVxcdTAwM2VpMmNfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0kyQ10pO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzBdID0gUFJPUEVSVFlfRU5UUllfU1RSSU5HKFxcXCJjb21wYXRpYmxlXFxcIiwgXFxcInNmZixzZnBcXFwiKTtcXG4gIDY2OlxcdFxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbMV0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcImkyYy1idXNcXFwiLCBub2Rlcy1cXHUwMDNlaTJjX3JlZik7XFxuICA2NzpcXHRcXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzJdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJ0eC1mYXVsdC1ncGlvc1xcXCIsIG5vZGVzLVxcdTAwM2VncGlvMF9yZWYpO1xcbiAgNjg6XFx0XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1szXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwidHgtZGlzYWJsZS1ncGlvc1xcXCIsIG5vZGVzLVxcdTAwM2VncGlvMV9yZWYpO1xcbiAgNjk6XFx0XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1s0XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwibW9kLWRlZjAtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzJfcmVmKTtcXG4gIDcwOlxcdFxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbNV0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcImxvcy1ncGlvc1xcXCIsIG5vZGVzLVxcdTAwM2VncGlvM19yZWYpO1xcbiAgNzE6XFx0XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1s2XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwicmF0ZS1zZWxlY3QxLWdwaW9zXFxcIiwgbm9kZXMtXFx1MDAzZWdwaW80X3JlZik7XFxuICA3MjpcXHRcXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzddID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJyYXRlLXNlbGVjdDAtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzVfcmVmKTtcXG4gIDczOlxcdFxcdHN3bm9kZXNbU1dOT0RFX1NGUF0gPSBOT0RFX1BST1Aobm9kZXMtXFx1MDAzZXNmcF9uYW1lLCBub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzKTtcXG4gIDc0OlxcdFxcdG5vZGVzLVxcdTAwM2VzZnBfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX1NGUF0pO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRub2Rlcy1cXHUwMDNlcGh5bGlua19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcXFwibWFuYWdlZFxcXCIsIFxcXCJpbi1iYW5kLXN0YXR1c1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMTowOS4wNTI3ODcyNDVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYwNDIzMDU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBTRlAgU3RhdGUgTWFjaGluZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgU0ZQIHN0YXRlIG1hY2hpbmUsIGFuZCB0aGUgcGF0aCBzZWVtcyB0byBnbyB0aHJvdWdoIHRoZSBgdHhnYmVgIGRyaXZlci4gSSBrbm93IHRoYXQgYHR4Z2JlYCBwcm92aWRlcyB0aGUgYGkyYy1idXNgIHByb3BlcnR5LCB3aGljaCBpcyBrZXkuIFRoZSBpZGVhIGlzIHRoaXM6IGlmIHN5emthbGxlciBjYW4gY3JlYXRlIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHRoYXQgbG9va3MgbGlrZSBhIGB0eGdiZWAgZGV2aWNlLCB0aGUgYHR4Z2JlYCBkcml2ZXIgc2hvdWxkIHByb2JlLCBhbmQgaW4gdHVybiwgcmVnaXN0ZXIgdGhlIGBzZnBgIHBsYXRmb3JtIGRldmljZS4gVGhlbiwgdGhlIGBzZnBgIGRyaXZlciB3aWxsIHByb2JlLCBhbmQgYm9vbSwgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGtpY2tzIG9mZi5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGB0eGdiZWAgaXMgZXZlbiByZWFjaGFibGUgaW4gdGhlIHN5emthbGxlciBlbnZpcm9ubWVudC4gVGhhbmtmdWxseSwgYHN5el9wY2lfZGV2aWNlX2FkZGAgbG9va3MgbGlrZSBpdCBjYW4gY3JlYXRlIGEgdmlydHVhbCBQQ0kgZGV2aWNlLiBOb3cgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgYHR4Z2JlYCBldmVuICpzdXBwb3J0KiB2aXJ0dWFsIFBDSSBkZXZpY2VzPyBBaCwgeWVzISBTaW5jZSBgdHhnYmVgIGlzIGEgc3RhbmRhcmQgUENJIGRyaXZlciwgSSBjYW4gdXNlIGB2ZmlvYCBvciBgcGNpYCBwc2V1ZG8tZGV2aWNlcyB0byBmdXp6IGl0LlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGEgbnVhbmNlIGhlcmUuIGB0eGdiZWAgYWN0dWFsbHkgdXNlcyBgc25wcyxkZXNpZ253YXJlLWkyY2AgZm9yIGl0cyBJMkMgaW50ZXJmYWNlLiBTbywgdGhlIGBpMmMtZGVzaWdud2FyZWAgZHJpdmVyIHdpbGwgY3JlYXRlIHRoZSBJMkMgYWRhcHRlci4gVGhlIGNvcmUgb2YgdGhlIGZ1enppbmcgdGhlbiBzaGlmdHMgdG8gdGhpcyBJMkMgYWRhcHRlci4gSWYgdGhlIFBDSSBkZXZpY2UgaXMgdmlydHVhbCwgYWxsIHRoZSBNTUlPIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIEkyQyBjb250cm9sbGVyIGFyZSBmdXp6ZWQuIFRoYXQgbWVhbnMgdGhlIGBzZnBgIGRyaXZlciBpcyBnb2luZyB0byBpc3N1ZSB0aGUgSTJDIHJlYWRzIGFuZCB3cml0ZXMsIGFuZCB0aG9zZSB3aWxsIGJlIHRyYW5zbGF0ZWQgaW50byBNTUlPIHJlYWRzL3dyaXRlcyBvbiB0aGUgdmlydHVhbCBQQ0kgZGV2aWNlLiBTeXprYWxsZXIgd2lsbCB0aGVuIGludGVyY2VwdCBhbmQgcmV0dXJuIGZ1enplZCBkYXRhLiBQZXJmZWN0ISBUaGF0IG1lYW5zIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBpcyBmdXp6ZWQhXG5cbkFscmlnaHQsIGl0IGZlZWxzIGxpa2UgdGhpcyBpcyB0aGUgbWFpbiByb3V0ZS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkaXJlY3Qgd2F5cyB0byByZWFjaCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgIG90aGVyIHRoYW4gZ29pbmcgdGhyb3VnaCBgdHhnYmVgLiBDYW4gc3l6a2FsbGVyIGp1c3QgZGlyZWN0bHkgY3JlYXRlIGFuIEkyQyBkZXZpY2U/IE5vLCB0aGF0IHdvbid0IHdvcmssIGJlY2F1c2UgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBpcyBpbiBgc2ZwLmNgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBgc2ZwYCBwbGF0Zm9ybSBkcml2ZXIuIFNvLCBpcyB0aGVyZSBhbnkgb3RoZXIgZHJpdmVyIG90aGVyIHRoYW4gYHR4Z2JlYCB3aGljaCByZWdpc3RlcnMgYHNmcGA/IFRoYXQgc2VlbXMgdW5saWtlbHksIGJ1dCBpdCdzIHdvcnRoIGEgcXVpY2sgY2hlY2ssIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MTYuNjU3MDIwNzkyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk5NzAwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYz0xNjY2PXN0YXRpYyB2b2lkIHhnZW5lX2VuZXRfZ3Bpb2RfZ2V0KHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0xNjc4LVxcdGlmIChJU19FUlIocGRhdGEtXFx1MDAzZXNmcF9yZHkpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYzoxNjc5OlxcdFxcdHBkYXRhLVxcdTAwM2VzZnBfcmR5ID0gZ3Bpb2RfZ2V0KGRldiwgXFxcInNmcFxcXCIsIEdQSU9EX0lOKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMtMTY4MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF94Z21hYy5jPTQ2Nj1zdGF0aWMgaW50IHhnZW5lX2VuZXRfZ3Bpb19sb29rdXAoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYy00NzEtXFx0aWYgKElTX0VSUihwZGF0YS1cXHUwMDNlc2ZwX3JkeSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfeGdtYWMuYzo0NzI6XFx0XFx0cGRhdGEtXFx1MDAzZXNmcF9yZHkgPSBncGlvZF9nZXQoZGV2LCBcXFwic2ZwXFxcIiwgR1BJT0RfSU4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X3hnbWFjLmMtNDczLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXFx0bm9kZXMtXFx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXFxcIm1hbmFnZWRcXFwiLCBcXFwiaW4tYmFuZC1zdGF0dXNcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjc3OlxcdG5vZGVzLVxcdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJzZnBcXFwiLCBub2Rlcy1cXHUwMDNlc2ZwX3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03OC1cXHRzd25vZGVzW1NXTk9ERV9QSFlMSU5LXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cXHUwMDNlcGh5bGlua19wcm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTItXFx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cXHUwMDNlbm9kZXMuZ3JvdXBbU1dOT0RFX1NGUF0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTEzOlxcdGluZm8ubmFtZSA9IFxcXCJzZnBcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVxcdGluZm8uaWQgPSBwY2lfZGV2X2lkKHBkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMToxNi44NzcwMDIyMTZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwMDMyOTE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodHMgYXMgdGhlIFwiSVwiIG9mIGFuIGV4cGVydCwgc3RhcnRpbmcgd2l0aCB0aGUgcHJvbXB0OlxuXG4qKkNvbnNpZGVyaW5nIGBuZ2JlYCoqXG5cbkhtbSwgYG5nYmVgLi4uIHRoYXQncyBhbiBpbnRlcmVzdGluZyBvbmUuIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBKdXN0IHRoZSByYXcgdGVybSwgYG5nYmVgLCBpcyBwcmV0dHkgYWJzdHJhY3QsIHNvIEkgaW1tZWRpYXRlbHkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHBsYWNlIHRoaXMuIElzIHRoaXMgYSBuZXcgbWV0aG9kIEknbSB1bmZhbWlsaWFyIHdpdGgsIG9yIGEgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgcGllY2Ugb2YgY29kZT8gSXMgdGhpcyByZWxhdGVkIHRvIG15IGN1cnJlbnQgcHJvamVjdCwgb3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgb3J0aG9nb25hbD8gR2l2ZW4gdGhhdCBpdCBjb3VsZCBtZWFuIGFueXRoaW5nLCBteSBmaXJzdCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gY29uc2lkZXIgYSBwb3NzaWJsZSBvcmlnaW4sIGEgcG90ZW50aWFsIHVzZSBjYXNlLCBhbmQgYSBzZXJpZXMgb2YgcXVlc3Rpb25zLiBJcyBpdCByZWxhdGVkIHRvIGJpb2luZm9ybWF0aWNzLCBjb250cm9sIHN5c3RlbXMsIHNpZ25hbCBwcm9jZXNzaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBmaWVsZCBkb2VzIHRoaXMgZml0IGluPyBGcm9tIHRoZSBuYW1lIGFsb25lLCBjYW4gSSBtYWtlIGFueSBpbmZvcm1lZCBndWVzc2VzPyBMZXQgbWUgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSdtIGdvaW5nIHRvIGhhdmUgdG8ga25vdyBtb3JlIGJlZm9yZSBJIGNhbiBnaXZlIGl0IGEgZmFpciBhc3Nlc3NtZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHF1ZXN0aW9uIHRoaXMgd2lsbCBzb2x2ZS4gV2hhdCBhcmUgdGhlIGN1cnJlbnQgc3RhdGUtb2YtdGhlLWFydCBtZXRob2RzIGJlaW5nIHVzZWQ/IElmIHRoaXMgaXMgYSBuZXcgbWV0aG9kLCBob3cgZG9lcyBpdCBjb21wYXJlP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MjAuNTc3MzM0MjQyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3MjQzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNzYtXFx0bm9kZXMtXFx1MDAzZXBoeWxpbmtfcHJvcHNbMF0gPSBQUk9QRVJUWV9FTlRSWV9TVFJJTkcoXFxcIm1hbmFnZWRcXFwiLCBcXFwiaW4tYmFuZC1zdGF0dXNcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjc3OlxcdG5vZGVzLVxcdTAwM2VwaHlsaW5rX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJzZnBcXFwiLCBub2Rlcy1cXHUwMDNlc2ZwX3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03OC1cXHRzd25vZGVzW1NXTk9ERV9QSFlMSU5LXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlcGh5bGlua19uYW1lLCBub2Rlcy1cXHUwMDNlcGh5bGlua19wcm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUwNT1zdGF0aWMgaW50IHR4Z2JlX3NmcF9yZWdpc3RlcihzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01MTItXFx0aW5mby5md25vZGUgPSBzb2Z0d2FyZV9ub2RlX2Z3bm9kZSh0eGdiZS1cXHUwMDNlbm9kZXMuZ3JvdXBbU1dOT0RFX1NGUF0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTEzOlxcdGluZm8ubmFtZSA9IFxcXCJzZnBcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTE0LVxcdGluZm8uaWQgPSBwY2lfZGV2X2lkKHBkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMToyMC42ODEwNjUwMTlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1NTM5ODcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEludmVzdGlnYXRpb24gaW50byBTRlAgTW9kdWxlIEluc3RhbnRpYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcHJpbWFyaWx5IGZvY3VzZWQgb24gYHR4Z2JlYCBoZXJlLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHpvb20gb3V0LiBXaGF0IGFib3V0IGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGl0c2VsZj8gUmlnaHQsIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIuIFRoZSBuZXh0IHF1ZXN0aW9uIGlzOiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgZ2V0IHRoaXMgZ29pbmcgdGhyb3VnaCBzeXNmcz9cblxuSG1tLCBpZiBgQ09ORklHX1NGUGAgaXMgZW5hYmxlZCwgdGhlIG1vZHVsZSBsb2FkcywgdGhhdOKAmXMgdXNlZnVsLiBJIGNhbiAqa2luZGEqIHNlZSB3aGVyZSBJIGFtIGdvaW5nLiBDYW4gSSBjb25qdXJlIHVwIGEgcGxhdGZvcm0gZGV2aWNlIHRocm91Z2ggYC9zeXMvYnVzL3BsYXRmb3JtL2RldmljZXNgPyBObywgdGhhdCdzIG5vdCBob3cgdGhhdCB3b3Jrcy4gSSBjYW4gb25seSBiaW5kIG9yIHVuYmluZCBleGlzdGluZyBkZXZpY2VzLiBEYW1uLCB0aG91Z2h0IHRoYXQgbWlnaHQgYmUgdG9vIGVhc3kuXG5cbldhaXQsIGRvZXMgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGNsZXZlciB1cCBpdHMgc2xlZXZlLCBsaWtlIGEgYHN5el9kZXZfcGxhdGZvcm1fYWRkYCBmdW5jdGlvbj8gTm8sIG5vIHN1Y2ggbHVjay4gT2theSwgcmVncm91cC4gSSBrbm93IHN5emthbGxlciAqY2FuKiBmdXp6IEkyQyBkZXZpY2VzIHZpYSBgL2Rldi9pMmMtWGAuXG5cbk5vdyBsZXTigJlzIHRoaW5rLiBJZiBJIGNyZWF0ZSBhbiBJMkMgZGV2aWNlLCBpdOKAmXMgZ29pbmcgdG8gYmUgYW4gSTJDIGNsaWVudCwgbm90IGFuIEkyQyBhZGFwdGVyLiBPa2F5LCB0aGF0J3MgYSBrZXkgZGlzdGluY3Rpb24uIE5vdywgd2hlcmUgZG9lcyB0aGlzIGdldCBtZT8gQWgsIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgLSB0aGF0IGZ1bmN0aW9uIHRha2VzIGFuIGBpMmNfYWRhcHRlcmAuIE9rYXksIHRoYXQncyBoZWxwZnVsIGluZm9ybWF0aW9uLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgaXMgY2FsbGVkIGZyb20gYHNmcF9zbV9wcm9iZV9mb3JfcGh5YC4gVGhpcyBtaWdodCBiZSBhIGJyZWFrLiBNeSBmb2N1cyBpcyBzdGlsbCBzZnAsIHRob3VnaC4gSXMgdGhlcmUgYW55IG90aGVyIHBhdGggdG8gcmVhY2ggYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYD8gSSBoYXZlIHRvIGxvb2sgbW9yZSBjbG9zZWx5Li4uIExldCdzIGNoZWNrIGBtZGlvX2kyY19hbGxvY2AuIEkgc2hvdWxkIGNoZWNrIGFsbCBwYXRocyBmb3IgYG1kaW9faTJjX2FsbG9jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MzAuMzM2NDY2MjI0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcwOTA5NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9faTJjX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmM9NDk2PXN0YXRpYyBib29sIG1kaW9faTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8taTJjLmMtNTA4LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1MDk6c3RydWN0IG1paV9idXMgKm1kaW9faTJjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWkyYy5jLTUxMC1cXHRcXHRcXHQgICAgICAgZW51bSBtZGlvX2kyY19wcm90byBwcm90b2NvbClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTctfVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYzo1NTg6RVhQT1JUX1NZTUJPTF9HUEwobWRpb19pMmNfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1pMmMuYy01NTktXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM9OTQwPXN0YXRpYyBpbnQgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTQ0LVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo5NDU6XFx0aTJjX21paSA9IG1kaW9faTJjX2FsbG9jKHNmcC1cXHUwMDNlZGV2LCBzZnAtXFx1MDAzZWkyYywgc2ZwLVxcdTAwM2VtZGlvX3Byb3RvY29sKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtOTQ2LVxcdGlmIChJU19FUlIoaTJjX21paSkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1pMmMuaD0xND1lbnVtIG1kaW9faTJjX3Byb3RvIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIwLVxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oOjIxOnN0cnVjdCBtaWlfYnVzICptZGlvX2kyY19hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLFxcbmluY2x1ZGUvbGludXgvbWRpby9tZGlvLWkyYy5oLTIyLVxcdFxcdFxcdCAgICAgICBlbnVtIG1kaW9faTJjX3Byb3RvIHByb3RvY29sKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6MzIuMTA3MzgyMDA5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDc2OTM3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBtZGlvLWkyYy5jYCBEZXBlbmRlbmN5KipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBtZGlvX2kyY19hbGxvY2AgaXMgY2FsbGVkIGV4Y2x1c2l2ZWx5IGJ5IGBzZnAuY2AuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVja+KApiBOb3BlLCBubyBvdGhlciBjYWxscy4gU28sIHRoZSBlbnRpcmUgYG1kaW8taTJjLmNgIGZpbGUgaXMgZXNzZW50aWFsbHkgb25seSB1c2VkIGJ5IGBzZnAuY2AuIEFscmlnaHQsIHNvIGBzZnAuY2AgaXRzZWxmIGlzIG9ubHkgdXNlZCBpZiBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlIGlzIGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gTm93LCBjYW4gc3l6a2FsbGVyIGJlIGxldmVyYWdlZCB0byB0cmlnZ2VyIHRoZSBjcmVhdGlvbiBvZiBhbiBTRlAgcGxhdGZvcm0gZGV2aWNlPyBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCB0aGF04oCmIEFoLCB5ZXMhIFRoZSBgdHhnYmVgIFBDSSBkcml2ZXIuIElmIHN5emthbGxlciBjYW4gZ2VuZXJhdGUgYSB2aXJ0dWFsIFBDSSBkZXZpY2Ugd2l0aCB0aGUgcmlnaHQgdmVuZG9yL2RldmljZSBJRHMgdG8gbWF0Y2ggdGhlIGB0eGdiZWAgZHJpdmVyLCB0aGF0IHdvdWxkIHRyaWdnZXIgaXRzIHByb2JlLiBJdCB3b3VsZCBiZSBhIHVzZWZ1bCB0aGluZyB0byBjaGVjayB0aGUgYHR4Z2JlYCBQQ0kgSUQncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MDEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6NDEuOTE1MDc4ODVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTA4MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR4Z2JlX3BjaV90YmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM9Mjk9Y2hhciB0eGdiZV9kcml2ZXJfbmFtZVtdID0gXFxcInR4Z2JlXFxcIjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzozMTovKiB0eGdiZV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTMyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0zOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzozOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHhnYmVfcGNpX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTQwLVxcdHsgUENJX1ZERVZJQ0UoV0FOR1hVTiwgVFhHQkVfREVWX0lEX1NQMTAwMCkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTY1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR4Z2JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy02NzItICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6NjczOiAqIEBlbnQ6IGVudHJ5IGluIHR4Z2JlX3BjaV90YmxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy02NzQtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jPTk2Nj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmVfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk2Ny1cXHQubmFtZSAgICAgPSB0eGdiZV9kcml2ZXJfbmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzo5Njg6XFx0LmlkX3RhYmxlID0gdHhnYmVfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NjktXFx0LnByb2JlICAgID0gdHhnYmVfcHJvYmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYz05NzU9bW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6OTc3Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0eGdiZV9wY2lfdGJsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NzgtTU9EVUxFX0FVVEhPUihcXFwiQmVpamluZyBXYW5nWHVuIFRlY2hub2xvZ3kgQ28uLCBMdGQsIFxcdTAwM2Nzb2Z0d2FyZUB0cnVzdG5ldGljLmNvbVxcdTAwM2VcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6NDEuOTk4MTkzMjI4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwOTI1Nzg3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgU3l6a2FsbGVyJ3MgVFhHQkUgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBTeXprYWxsZXIgaGFzIHRoZXNlIGRlc2NyaXB0aW9ucyBmb3IgUENJIGRldmljZXMsIGFuZCBpZiB0aGUgYHR4Z2JlYCBkcml2ZXIgaXMgZW5hYmxlZCwgd2UgY291bGQgcG90ZW50aWFsbHkgZnV6eiBpdC4gVGhhdCdzIGludGVyZXN0aW5nLiBUaGUgcXVlc3Rpb24gaXMsIGlzIGB0eGdiZWAgYWN0dWFsbHkgKmVuYWJsZWQqIGluIHRoZSBkZWZhdWx0IFN5emthbGxlciBjb25maWd1cmF0aW9uPyBUaGF0J3MgdGhlIGNydWNpYWwgcG9pbnQuIEZyb20gZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgYSBsb3Qgb2YgUENJIG5ldHdvcmsgZHJpdmVycyBhcmUgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gU3RpbGwsIGFzc3VtcHRpb25zIGFyZSBkYW5nZXJvdXMuIEkgbmVlZCB0byBiZSBzdXJlLiBTbywgbGV0J3MganVzdCBnbyBhaGVhZCBhbmQgY29uZmlybSB3aGV0aGVyIHRoZSBgQ09ORklHX1RYR0JFYCBvcHRpb24gaXMgZXZlbiBkZWZpbmVkLiBUaGF0J2xsIHRlbGwgdXMgcmlnaHQgYXdheSBpZiB3ZSBoYXZlIGEgZnV6emluZyB0YXJnZXQgb3IgaWYgd2UgbmVlZCB0byBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBxdWljayB3aW4gb3IgYSBtaW5vciBzZXRiYWNrLCBidXQgYmVzdCB0byBrbm93IGZvciBzdXJlIGJlZm9yZSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTc2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6NTAuMDkwNzc1MzEyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ2MzI5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRYR0JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMTo1MC4xNjQyNDc1OFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjcxMzQxMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBDaGVjayBpbiB3YW5neHVuKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYHdhbmd4dW5gIGRpcmVjdG9yeS4gSSdtIHRoaW5raW5nLCBsZXQncyBzdGFydCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0J3MgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBiZWdpbiB3aGVuIEknbSBhc3Nlc3NpbmcgYSBuZXcgYnVpbGQgb3IgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGV2ZXJ5dGhpbmcgaXMgYXMgSSB3b3VsZCBleHBlY3QsIG5vIHN1cnByaXNlcyBpbiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIG9yIGRlcGVuZGVuY2llcy4gVGhpcyBhbGxvd3MgbWUgdG8gaW1tZWRpYXRlbHkgc3BvdCBhbnkgZGV2aWF0aW9ucyBmcm9tIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgc3lzdGVtJ3MgaW50ZW5kZWQgYmVoYXZpb3IuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGV2ZXJ5dGhpbmcgaXMgaW4gYWxpZ25tZW50ISBJJ2xsIGJlIGxvb2tpbmcgZm9yIHVudXN1YWwgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMuIEkgYWxzbyBleHBlY3QgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgaG93IHRob3NlIGFyZSBzZXQuIEdvdHRhIGtub3cgaG93IGl0IGlzIHN1cHBvc2VkIHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjE6NTYuODM1NTkyNTcxWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzA5NDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFhHQkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTI4PWNvbmZpZyBOR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjQzOmNvbmZpZyBUWEdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2Nzpjb25maWcgVFhHQkVWRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02OC1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEcgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMTo1Ni45Mjg2OTM4ODlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2ODYzNDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFNGUDogQSBQb3RlbnRpYWwgUGF0aCoqXG5cbk9rYXksIHNvIGBDT05GSUdfVFhHQkVgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLiBUaGUgcXVlc3Rpb24gbm93IGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIHdheXMgdG8gcG90ZW50aWFsbHkgZnV6eiB0aGUgU0ZQPyBJIG5lZWQgdG8gdGhpbmsgb3V0c2lkZSB0aGUgYm94IGEgYml0LiBXaGF0IGFib3V0IERldmljZSBUcmVlPyBIbW0sIHRoYXQncyBhIGRlYWQgZW5kLCBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZGVhbCB3aXRoIG92ZXJsYXlzLlxuXG5BbHJpZ2h0LCB3aGF0IGFib3V0IHRoYXQgYGkyY19taWlfcHJvYmVfcm9sbGJhbGxgIGZ1bmN0aW9uPyBUaGUgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyB0aGVyZSwgcmVuYW1pbmcgaXQgdG8gYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCBhbmQgZXhwb3J0aW5nIGl0LiBJdCdzIGFsc28gbW9kaWZ5aW5nIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgIHNvIHRoYXQgaXQgbm8gbG9uZ2VyIGRpcmVjdGx5IGNhbGxzIHRoYXQgcHJvYmUgZnVuY3Rpb24sIGJ1dCBub3cgc2ltcGx5IHJldHVybnMgMC4gTW9zdCBub3RhYmx5LCB0aGUgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBmdW5jdGlvbiBpcyAqbm93KiBjYWxsaW5nIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAuXG5cblRoZSBiaWcgcXVlc3Rpb24gbm93IGlzLCBpcyB0aGlzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aD8gQ2FuIHdlIHRyaWdnZXIgdGhpcyBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgIGZ1bmN0aW9uPyBJZiBgc2ZwYCBpcyBpbnN0YW50aWF0ZWQsIHRoZW4geWVzLiBXZSBoYXZlIHRvIGluc3RhbnRpYXRlIGBzZnBgIHNvbWVob3csIGJ1dCBjYW4gd2UgZG8gdGhhdCB0aHJvdWdoIGB0eGdiZWA/IFllcyB3ZSBjYW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZywgYXJlIHRoZXJlIGFueSBvdGhlciBkcml2ZXJzIGluc3RhbnRpYXRpbmcgYHNmcGA/IExldCdzIHF1aWNrbHkgc2VhcmNoIGZvciBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYCB3aXRoIFwic2ZwXCIgYXMgdGhlIGFyZ3VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjMxMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMjowMi41OTczMzE1NzRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzMwNjE0NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBsYXRmb3JtX2RldmljZV9yZWdpc3Rlci4qXFxcInNmcFxcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMjowNC45NzA0MDA3MTRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY1ODk4NjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnkqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHJlbWVtYmVyIEkgYWxyZWFkeSB1c2VkIGBncmVwYCB0byBzZWFyY2ggZm9yIFwic2ZwXCIgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYCBkaXJlY3RvcnksIGFuZCB0aGUgcmVzdWx0cyBwb2ludGVkIG1lIHRvd2FyZHMgYHR4Z2JlYC4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZy5cblxuTXkgZ29hbCBoZXJlIGlzIHRvIGZpbmQgYWxsIHRoZSB3YXlzIHRoYXQgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBpcyBpbml0aWF0ZWQuIEkga25vdyBpdCdzIHRpZWQgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhhdCBzdGF0ZSBtYWNoaW5lIGtpY2tzIG9mZiB3aGVuIGFuIFNGUCBtb2R1bGUgaXMgcGh5c2ljYWxseSBwbHVnZ2VkIGluLiBJZiBzeXprYWxsZXIgaGFzIHNvbWUgY29udHJvbCBvdmVyIEdQSU9z4oCUbGlrZSB1c2luZyBgbW9kLWRlZjBgIG9yIHNvbWV0aGluZyBzaW1pbGFy4oCUY291bGRuJ3Qgd2UgcG90ZW50aWFsbHkgc2ltdWxhdGUgdGhlIGluc2VydGlvbiBldmVudD9cblxuQnV0IHdhaXTigKYgZGlkbid0IHRoZSBgdHhnYmVgIGRyaXZlciAqYWxzbyogbWVudGlvbiBzb21ldGhpbmcgYWJvdXQgc29mdHdhcmUgbm9kZXMgZm9yIHRob3NlIHZlcnkgc2FtZSBHUElPcz8gSWYgc28sIGRvZXMgYHR4Z2JlYCBhY3R1YWxseSBmdW5jdGlvbiBhcyBhIEdQSU8gY29udHJvbGxlciBpdHNlbGY/IEkgdGhpbmsgdGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBwb3NzaWJpbGl0eSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMjoxMy42MjkzODkxNDRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjc1Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdwaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjE4OnZvaWQgdHhnYmVfZ3Bpb19pbml0X2FtbChzdHJ1Y3Qgd3ggKnd4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjM3OmlycXJldHVybl90IHR4Z2JlX2dwaW9faXJxX2hhbmRsZXJfYW1sKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0zOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jPTMzMj1pbnQgdHhnYmVfaWRlbnRpZnlfbW9kdWxlKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTMzNy1cXHR1MzIgbW9kX2FicztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjMzODpcXHR1MzIgZ3BpbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTMzOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMzQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MzQ1OlxcdGdwaW8gPSByZDMyKHd4LCBXWF9HUElPX0VYVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYzozNDY6XFx0aWYgKGdwaW8gXFx1MDAyNiBtb2RfYWJzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtMzQ3LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuaC02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmg6Nzp2b2lkIHR4Z2JlX2dwaW9faW5pdF9hbWwoc3RydWN0IHd4ICp3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuaDo4OmlycXJldHVybl90IHR4Z2JlX2dwaW9faXJxX2hhbmRsZXJfYW1sKGludCBpcnEsIHZvaWQgKmRhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmgtOS1pbnQgdHhnYmVfdGVzdF9ob3N0aWYoc3RydWN0IHd4ICp3eCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTIyPXZvaWQgdHhnYmVfaXJxX2VuYWJsZShzdHJ1Y3Qgd3ggKnd4LCBib29sIHF1ZXVlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtMjctXFx0XFx0bWlzY19pZW4gfD0gVFhHQkVfUFhfTUlTQ19HUElPO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6Mjg6XFx0XFx0dHhnYmVfZ3Bpb19pbml0X2FtbCh3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTg0PXN0YXRpYyBpbnQgdHhnYmVfcmVxdWVzdF9saW5rX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy05MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjkyOnN0YXRpYyBpbnQgdHhnYmVfcmVxdWVzdF9ncGlvX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtOTMte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6OTQ6XFx0dHhnYmUtXFx1MDAzZWdwaW9faXJxID0gaXJxX2ZpbmRfbWFwcGluZyh0eGdiZS1cXHUwMDNlbWlzYy5kb21haW4sIFRYR0JFX0lSUV9HUElPKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk1OlxcdHJldHVybiByZXF1ZXN0X3RocmVhZGVkX2lycSh0eGdiZS1cXHUwMDNlZ3Bpb19pcnEsIE5VTEwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5NjpcXHRcXHRcXHRcXHQgICAgdHhnYmVfZ3Bpb19pcnFfaGFuZGxlcl9hbWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5NzpcXHRcXHRcXHRcXHQgICAgSVJRRl9PTkVTSE9ULCBcXFwidHhnYmUtZ3Bpby1pcnFcXFwiLCB0eGdiZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy05OC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jPTIwMj12b2lkIHR4Z2JlX2ZyZWVfbWlzY19pcnEoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtMjA0LVxcdGlmICh0eGdiZS1cXHUwMDNld3gtXFx1MDAzZW1hYy50eXBlICE9IHd4X21hY19zcClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjIwNTpcXHRcXHRmcmVlX2lycSh0eGdiZS1cXHUwMDNlZ3Bpb19pcnEsIHR4Z2JlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTIwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM9MjEzPWludCB0eGdiZV9zZXR1cF9taXNjX2lycShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzoyNTE6XFx0ZXJyID0gdHhnYmVfcmVxdWVzdF9ncGlvX2lycSh0eGdiZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0yNTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vbWFjaGluZS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTojaW5jbHVkZSBcXHUwMDNjbGludXgvZ3Bpby9kcml2ZXIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vcHJvcGVydHkuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay1wcm92aWRlci5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0yNz1zdGF0aWMgaW50IHR4Z2JlX3N3bm9kZXNfcmVnaXN0ZXIoc3RydWN0IHR4Z2JlICp0eGdiZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNjpcXHRzbnByaW50Zihub2Rlcy1cXHUwMDNlZ3Bpb19uYW1lLCBzaXplb2Yobm9kZXMtXFx1MDAzZWdwaW9fbmFtZSksIFxcXCJ0eGdiZV9ncGlvLSV4XFxcIiwgaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzctXFx0c25wcmludGYobm9kZXMtXFx1MDAzZWkyY19uYW1lLCBzaXplb2Yobm9kZXMtXFx1MDAzZWkyY19uYW1lKSwgXFxcInR4Z2JlX2kyYy0leFxcXCIsIGlkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNDktXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1MDpcXHRub2Rlcy1cXHUwMDNlZ3Bpb19wcm9wc1swXSA9IFBST1BFUlRZX0VOVFJZX1NUUklORyhcXFwicGluY3RybC1uYW1lc1xcXCIsIFxcXCJkZWZhdWx0XFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1MTpcXHRzd25vZGVzW1NXTk9ERV9HUElPXSA9IE5PREVfUFJPUChub2Rlcy1cXHUwMDNlZ3Bpb19uYW1lLCBub2Rlcy1cXHUwMDNlZ3Bpb19wcm9wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1MjpcXHRub2Rlcy1cXHUwMDNlZ3BpbzBfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCAwLCBHUElPX0FDVElWRV9ISUdIKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjUzOlxcdG5vZGVzLVxcdTAwM2VncGlvMV9yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDEsIEdQSU9fQUNUSVZFX0hJR0gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTQ6XFx0bm9kZXMtXFx1MDAzZWdwaW8yX3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFxcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgMiwgR1BJT19BQ1RJVkVfTE9XKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjU1OlxcdG5vZGVzLVxcdTAwM2VncGlvM19yZWZbMF0gPSBTT0ZUV0FSRV9OT0RFX1JFRkVSRU5DRShcXHUwMDI2c3dub2Rlc1tTV05PREVfR1BJT10sIDMsIEdQSU9fQUNUSVZFX0hJR0gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NTY6XFx0bm9kZXMtXFx1MDAzZWdwaW80X3JlZlswXSA9IFNPRlRXQVJFX05PREVfUkVGRVJFTkNFKFxcdTAwMjZzd25vZGVzW1NXTk9ERV9HUElPXSwgNCwgR1BJT19BQ1RJVkVfSElHSCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NzpcXHRub2Rlcy1cXHUwMDNlZ3BpbzVfcmVmWzBdID0gU09GVFdBUkVfTk9ERV9SRUZFUkVOQ0UoXFx1MDAyNnN3bm9kZXNbU1dOT0RFX0dQSU9dLCA1LCBHUElPX0FDVElWRV9ISUdIKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTU4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy02Ni1cXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzFdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJpMmMtYnVzXFxcIiwgbm9kZXMtXFx1MDAzZWkyY19yZWYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6Njc6XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1syXSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwidHgtZmF1bHQtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzBfcmVmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjY4OlxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbM10gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcInR4LWRpc2FibGUtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzFfcmVmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjY5OlxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbNF0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcIm1vZC1kZWYwLWdwaW9zXFxcIiwgbm9kZXMtXFx1MDAzZWdwaW8yX3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo3MDpcXHRub2Rlcy1cXHUwMDNlc2ZwX3Byb3BzWzVdID0gUFJPUEVSVFlfRU5UUllfUkVGX0FSUkFZKFxcXCJsb3MtZ3Bpb3NcXFwiLCBub2Rlcy1cXHUwMDNlZ3BpbzNfcmVmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjcxOlxcdG5vZGVzLVxcdTAwM2VzZnBfcHJvcHNbNl0gPSBQUk9QRVJUWV9FTlRSWV9SRUZfQVJSQVkoXFxcInJhdGUtc2VsZWN0MS1ncGlvc1xcXCIsIG5vZGVzLVxcdTAwM2VncGlvNF9yZWYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NzI6XFx0bm9kZXMtXFx1MDAzZXNmcF9wcm9wc1s3XSA9IFBST1BFUlRZX0VOVFJZX1JFRl9BUlJBWShcXFwicmF0ZS1zZWxlY3QwLWdwaW9zXFxcIiwgbm9kZXMtXFx1MDAzZWdwaW81X3JlZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy03My1cXHRzd25vZGVzW1NXTk9ERV9TRlBdID0gTk9ERV9QUk9QKG5vZGVzLVxcdTAwM2VzZnBfbmFtZSwgbm9kZXMtXFx1MDAzZXNmcF9wcm9wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTMxMj1pcnFyZXR1cm5fdCB0eGdiZV9saW5rX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTMyOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjMzMDpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zMzEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzMyOlxcdHN0cnVjdCB3eCAqd3ggPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTMzMy1cXHRpbnQgdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNDA6c3RhdGljIGludCB0eGdiZV9ncGlvX2dldF9kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM0MS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNDI6XFx0c3RydWN0IHd4ICp3eCA9IGdwaW9jaGlwX2dldF9kYXRhKGNoaXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzQzLVxcdHUzMiB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM1MjpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZGlyZWN0aW9uX2luKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNTMte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzU0OlxcdHN0cnVjdCB3eCAqd3ggPSBncGlvY2hpcF9nZXRfZGF0YShjaGlwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM1NS1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzU3OlxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2d3gtXFx1MDAzZWdwaW9fbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzU4LVxcdHdyMzJtKHd4LCBXWF9HUElPX0REUiwgQklUKG9mZnNldCksIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzU5OlxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ3eC1cXHUwMDNlZ3Bpb19sb2NrLCBmbGFncyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM2My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM2NDpzdGF0aWMgaW50IHR4Z2JlX2dwaW9fZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzY1LVxcdFxcdFxcdFxcdCAgICBpbnQgdmFsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzY2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM2NzpcXHRzdHJ1Y3Qgd3ggKnd4ID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoY2hpcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zNjgtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzczOlxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2d3gtXFx1MDAzZWdwaW9fbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzc0LVxcdHdyMzJtKHd4LCBXWF9HUElPX0RSLCBCSVQob2Zmc2V0KSwgc2V0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM3NS1cXHR3cjMybSh3eCwgV1hfR1BJT19ERFIsIEJJVChvZmZzZXQpLCBCSVQob2Zmc2V0KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzozNzY6XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnd4LVxcdTAwM2VncGlvX2xvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM3Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzgxOnN0YXRpYyBpbnQgdHhnYmVfZ3Bpb19pbml0KHN0cnVjdCB0eGdiZSAqdHhnYmUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zODIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzgzOlxcdHN0cnVjdCBncGlvX2NoaXAgKmdjO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzg0LVxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtMzkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MzkxOlxcdHJhd19zcGluX2xvY2tfaW5pdChcXHUwMDI2d3gtXFx1MDAzZWdwaW9fbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0zOTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjM5NzpcXHRnYy1cXHUwMDNlbGFiZWwgPSBkZXZtX2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsIFxcXCJ0eGdiZV9ncGlvLSV4XFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTM5OC1cXHRcXHRcXHRcXHQgICBwY2lfZGV2X2lkKHd4LVxcdTAwM2VwZGV2KSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQwMi1cXHRnYy1cXHUwMDNlYmFzZSA9IC0xO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDAzOlxcdGdjLVxcdTAwM2VuZ3BpbyA9IDY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00MDQtXFx0Z2MtXFx1MDAzZW93bmVyID0gVEhJU19NT0RVTEU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQwNi1cXHRnYy1cXHUwMDNlZndub2RlID0gc29mdHdhcmVfbm9kZV9md25vZGUodHhnYmUtXFx1MDAzZW5vZGVzLmdyb3VwW1NXTk9ERV9HUElPXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0MDc6XFx0Z2MtXFx1MDAzZWdldCA9IHR4Z2JlX2dwaW9fZ2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDA4OlxcdGdjLVxcdTAwM2VnZXRfZGlyZWN0aW9uID0gdHhnYmVfZ3Bpb19nZXRfZGlyZWN0aW9uO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6NDA5OlxcdGdjLVxcdTAwM2VkaXJlY3Rpb25faW5wdXQgPSB0eGdiZV9ncGlvX2RpcmVjdGlvbl9pbjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQxMDpcXHRnYy1cXHUwMDNlZGlyZWN0aW9uX291dHB1dCA9IHR4Z2JlX2dwaW9fZGlyZWN0aW9uX291dDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjQxMjpcXHRyZXQgPSBkZXZtX2dwaW9jaGlwX2FkZF9kYXRhKGRldiwgZ2MsIHd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy00MTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo0MTY6XFx0dHhnYmUtXFx1MDAzZWdwaW8gPSBnYztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTQxNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM9NTc1PWludCB0eGdiZV9pbml0X3BoeShzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy02MDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2MTA6XFx0cmV0ID0gdHhnYmVfZ3Bpb19pbml0KHR4Z2JlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTYxMS1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo2MTI6XFx0XFx0d3hfZXJyKHd4LCBcXFwiZmFpbGVkIHRvIGluaXQgZ3Bpb1xcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy02MTMtXFx0XFx0Z290byBlcnJfZGVzdHJveV9waHlsaW5rO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg9NDI1PXN0cnVjdCB0eGdiZV9ub2RlcyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDI2OlxcdGNoYXIgZ3Bpb19uYW1lWzMyXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MjctXFx0Y2hhciBpMmNfbmFtZVszMl07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MjktXFx0Y2hhciBwaHlsaW5rX25hbWVbMzJdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzMDpcXHRzdHJ1Y3QgcHJvcGVydHlfZW50cnkgZ3Bpb19wcm9wc1syXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00MzEtXFx0c3RydWN0IHByb3BlcnR5X2VudHJ5IGkyY19wcm9wc1s0XTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQzNC1cXHRzdHJ1Y3Qgc29mdHdhcmVfbm9kZV9yZWZfYXJncyBpMmNfcmVmWzFdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzNTpcXHRzdHJ1Y3Qgc29mdHdhcmVfbm9kZV9yZWZfYXJncyBncGlvMF9yZWZbMV07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDM2OlxcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW8xX3JlZlsxXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDo0Mzc6XFx0c3RydWN0IHNvZnR3YXJlX25vZGVfcmVmX2FyZ3MgZ3BpbzJfcmVmWzFdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQzODpcXHRzdHJ1Y3Qgc29mdHdhcmVfbm9kZV9yZWZfYXJncyBncGlvM19yZWZbMV07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDM5OlxcdHN0cnVjdCBzb2Z0d2FyZV9ub2RlX3JlZl9hcmdzIGdwaW80X3JlZlsxXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDo0NDA6XFx0c3RydWN0IHNvZnR3YXJlX25vZGVfcmVmX2FyZ3MgZ3BpbzVfcmVmWzFdO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ0MS1cXHRzdHJ1Y3Qgc29mdHdhcmVfbm9kZV9yZWZfYXJncyBzZnBfcmVmWzFdO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg9NDU5PXN0cnVjdCB0eGdiZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00NjctXFx0c3RydWN0IGNsayAqY2xrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oOjQ2ODpcXHRzdHJ1Y3QgZ3Bpb19jaGlwICpncGlvO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTQ2OS1cXHR1bnNpZ25lZCBpbnQgbGlua19pcnE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6NDcwOlxcdHVuc2lnbmVkIGludCBncGlvX2lycTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC00NzEtXFx0dTMyIGVpY3I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjEzLjcwMTA3MjQxMloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODA4NDIxODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBSb2xsQmFsbCBTRlAgUHJvYmUgVGhyb3VnaCBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBtYXBwZWQgb3V0IGEgcG90ZW50aWFsIGZ1enppbmcgcGF0aC4gVGhlIGB0eGdiZWAgZHJpdmVyIHJlZ2lzdGVycyBhIGBncGlvX2NoaXBgLCB3aGljaCB0aGUgU0ZQIGRyaXZlciB0aGVuIGxldmVyYWdlcy4gVGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCB3aGV0aGVyIGl0J3MgcG9sbGluZyBvciBpbnRlcnJ1cHQtZHJpdmVuLCBpcyBrZXkgaGVyZS4gSWYgc3l6a2FsbGVyIGNhbiBzb21laG93IHRyaWdnZXIgTU1JTyByZWFkcyBvZiBgV1hfR1BJT19FWFRgIGluIGEgd2F5IHRoYXQgZm9vbHMgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGludG8gdGhpbmtpbmcgYSBtb2R1bGUgaXMgcHJlc2VudCwgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuXG5cblRoYXQgZmFicmljYXRlZCBcIm1vZHVsZSBpbnNlcnRpb25cIiB0aGVuIGxlYWRzIHRvIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYC4gQmluZ28sIG5vdyB3ZSdyZSBkb2luZyBhbiBJMkMgdHJhbnNmZXIsIGFuZCB0aGF0J3MgdGhlIHZ1bG5lcmFiaWxpdHkgdGFyZ2V0LlxuXG5UaGlzIEkyQyB0cmFuc2ZlciB0aGVuIGdvZXMgdGhyb3VnaCB0aGUgYHNucHMsZGVzaWdud2FyZS1pMmNgIGRyaXZlciwgd2hpY2ggaGFuZGxlcyB0aGUgTU1JTyByZWFkcy93cml0ZXMgdG8gdGhlIGB0eGdiZWAgUENJIGRldmljZS4gQW5kLCBpbXBvcnRhbnRseSwgKnRoYXQncyogd2hhdCBzeXprYWxsZXIgY2FuIGZ1enouIFNvLCB0aGUgZW50aXJlIGF0dGFjayBzdXJmYWNlIGlzOiBgc3l6a2FsbGVyYCAtXHUwMDNlIGBNTUlPYCAtXHUwMDNlIGBTRlBgIC1cdTAwM2UgYFJvbGxCYWxsIEkyQ2AgLVx1MDAzZSBgc25wcyxkZXNpZ253YXJlLWkyY2AgLVx1MDAzZSBgdHhnYmVgIGBNTUlPYC4gVGhpcyBtYWtlcyB0aGUgd2hvbGUgcGF0aCBmdXp6YWJsZS5cblxuQmFzaWNhbGx5LCB0aGUgcGF0Y2ggc2hpZnRzIHRoZSBSb2xsQmFsbCBTRlAgbW9kdWxlIHByb2JpbmcgZnJvbSBgbWRpb19pMmNfYWxsb2NgIHRvIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBsYXRlciBwcm9iZSwgdG8gdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBSb2xsQmFsbCBNRElPIEkyQyBpbml0aWFsaXphdGlvbi4gIEFuZCB3aGF0J3MgaW1wb3J0YW50IGlzIGl0J3MgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsaXplZCBoYXJkd2FyZSwgbGlrZSBhIHZpcnR1YWwgUENJIGRldmljZSBtYXRjaGluZyBgdHhnYmVgLlxuXG5Ob3csIHRoZSBuZWNlc3NhcnkgY29uZmlncy4uLiBMZXQncyBzZWUuLi4gIGBDT05GSUdfU0ZQYCBpcyBhIGdpdmVuLCBgQ09ORklHX01ESU9fSTJDYCBpcyBuZWVkZWQgdG9vLCBvZiBjb3Vyc2UuIGBDT05GSUdfVFhHQkVgIHRvIGluc3RhbnRpYXRlIHRoZSBTRlAgcGxhdGZvcm0gZGV2aWNlLCBhbmQgYENPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STWAsIHVzZWQgYnkgYHR4Z2JlYCBmb3IgSTJDLiBCdXQgd2FpdC4uLiBpcyBpdCBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIG9yIHNvbWUgb3RoZXIgZGVzaWdud2FyZSB2YXJpYW50PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgdHhnYmVgIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6MjIuNTA5NDk3MzY4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMwOTg5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRYR0JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTQyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo0Mzpjb25maWcgVFhHQkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njc6Y29uZmlnIFRYR0JFVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjgtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6MjIuNzMyNjA3MDAzWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDIzMzEwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgVFhHQkUgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBgVFhHQkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIEV0aGVybmV0IGRyaXZlciBhcmUgc3RydWN0dXJlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBoZWxwIHRleHRzLCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgYmVoaW5kIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIElzIGl0IG1vZHVsYXIsIGJ1aWx0LWluLCBvciBzb21lIG90aGVyIGJ1aWxkIHR5cGU/IFdoYXQgb3RoZXIgb3B0aW9ucyBkb2VzIGl0IGRlcGVuZCBvbj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyB0aGF0IHRyaWdnZXIgaXRzIGluY2x1c2lvbj8gSSdtIGFudGljaXBhdGluZyBmaW5kaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbiBzeW50YXggaGVyZSDigJMgYGNvbmZpZ2AsIGBib29sYCwgYHRyaXN0YXRlYCwgYGRlcGVuZHMgb25gLCBgZGVmYXVsdGAsIGBoZWxwYCBhbmQgc28gb24g4oCTIGJ1dCBJJ20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbnVhbmNlcyBzcGVjaWZpYyB0byB0aGlzIGRyaXZlciBhbmQgdGhpcyB2ZW5kb3IuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnl0aGluZyB1bnVzdWFsLCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcywgYW5kIGVuc3VyZSB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgaW4gbGluZSB3aXRoIGJlc3QgcHJhY3RpY2VzLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGEgdXNlciB3b3VsZCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIHBhcnRpY3VsYXIgbmV0d29ya2luZyBmZWF0dXJlLCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgYmUgYWZmZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NzUwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6MjYuOTc0OTQzNjM1WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDM6XFx0Y29uZmlnIFRYR0JFXFxuICA0NDpcXHRcXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSAxMC8yNS80MEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0XFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBJMkNfREVTSUdOV0FSRV9QTEFURk9STVxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgNDk6XFx0XFx0c2VsZWN0IE1BUlZFTExfMTBHX1BIWVxcbiAgNTA6XFx0XFx0c2VsZWN0IFJFR01BUFxcbiAgNTE6XFx0XFx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcXG4gIDUyOlxcdFxcdHNlbGVjdCBTRlBcXG4gIDUzOlxcdFxcdHNlbGVjdCBHUElPTElCXFxuICA1NDpcXHRcXHRzZWxlY3QgR1BJT0xJQl9JUlFDSElQXFxuICA1NTpcXHRcXHRzZWxlY3QgUENTX1hQQ1NcXG4gIDU2OlxcdFxcdHNlbGVjdCBMSUJXWFxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZlxcbiAgNTk6XFx0XFx0ICBhZGFwdGVycy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDYyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6MjYuOTc1MDQ4NTQ1WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NjIxOTMyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBgVFhHQkVgIHB1bGxzIGluIGBTRlBgLCBhbmQgYFNGUGAgaW4gdHVybiBkZXBlbmRzIG9uIHRoZSBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIGRyaXZlci4gQWxyaWdodCwgc28gaWYgSSBlbmFibGUgYFRYR0JFYCwgdGhhdCBzaG91bGQgYXV0b21hdGljYWxseSBnaXZlIG1lIGJvdGggYFNGUGAgKmFuZCogYE1ESU9fSTJDYCwgZ2l2ZW4gdGhhdCBgU0ZQYCBkZXBlbmRzIG9uIGBNRElPX0kyQ2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgcmlnaHQ/IEhvbGQgb24gYSBzZWNvbmQuLi4ganVzdCBtYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGlzIHN0cmFpZ2h0LiBZZXMsIGBTRlBgICpkb2VzKiBzZWxlY3QgYE1ESU9fSTJDYC4gR3JlYXQuIFRoZW4sIGFsbCBJIHNob3VsZCBuZWVkIHRvIGRvIGlzIGVuYWJsZSBgVFhHQkVgLiBCdXQuLi4gbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIOKAkyBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUg4oCTIGlzIHRoZXJlIHNvbWUgb3RoZXIgZHJpdmVyLCBzb21lICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQgYWxzbyBicmluZ3MgaW4gYFNGUGA/IEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIExldCdzIGRpZyBkZWVwZXIgYW5kIHZlcmlmeSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM3OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjMxLjczNzI0NDUyNFoiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3NDI3MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgU0ZQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNTEtXFx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTI6XFx0c2VsZWN0IFNGUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01My1cXHRzZWxlY3QgR1BJT0xJQlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zNzU0PXN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwoc3RydWN0IHBoeWxpbmsgKnBsKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zNzk3LVxcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzozNzk4OlxcdFxcdHBoeWxpbmtfZXJyKHBsLCBcXFwiZmFpbGVkIHRvIHNlbGVjdCBTRlAgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTM3OTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjMzLjcxMTUyNDc3NFoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQxOTE0MjU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTRlAgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGZ1enogdGhpcyBgU0ZQYCBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBvbmx5IGBUWEdCRWAgc2VsZWN0cyBgU0ZQYCwgYnV0IEkga25vdyBgU0ZQYCBjYW4gYmUgZW5hYmxlZCBkaXJlY3RseS4gSG93ZXZlciwgdG8gYWN0dWFsbHkgaW5zdGFudGlhdGUgaXQsIHdlIG5lZWQgYFRYR0JFYCAob3IgdGhlIGRldmljZSB0cmVlLCB3aGljaCBTeXprYWxsZXIgZG9lc24ndCB1dGlsaXplLCBzbyBubyBnbykuIFRodXMsIGBUWEdCRWAgc2VlbXMgbGlrZSB0aGUgbW9zdCBwcmFjdGljYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcgdGhpcyBtb2R1bGUuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGlmIGBJMkNfREVTSUdOV0FSRV9QTEFURk9STWAgaXMgZW5hYmxlZC4gSXQncyBhIGRlcGVuZGVuY3kgb2YgYFRYR0JFYCwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBwcmVzZW50IGZvciBgVFhHQkVgIHRvIGFjdHVhbGx5IHdvcmsuIFRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IG5lZWRzIHRvIGluY2x1ZGUgYFRYR0JFYCwgYFNGUGAsIGFuZCBgTURJT19JMkNgLlxuXG5Ob3csIG9udG8gYEZvY3VzU3ltYm9sc2AuIFRoZSBwYXRjaCBzZWVtcyB0byBtb2RpZnkgYSBmZXcga2V5IGZ1bmN0aW9uczogYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCAocmVuYW1lZCBmcm9tIGBpMmNfbWlpX3Byb2JlX3JvbGxiYWxsYCksIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgLCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLCBgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3lgLCBhbmQgYHNmcF9zbV9hZGRfbWRpb19idXNgLiBBZnRlciBsb29raW5nIGF0IHRoZXNlLCBJIHdhbnQgdG8gemVybyBpbiBvbiBgbWRpb19pMmNfcHJvYmVfcm9sbGJhbGxgLCBgaTJjX21paV9pbml0X3JvbGxiYWxsYCwgYW5kIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGUgbmFtZXMgb2YgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBwYXRjaCwganVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCB0aGUgbmFtZXMgYXJlIGNvcnJlY3QuIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAsIGBpMmNfbWlpX2luaXRfcm9sbGJhbGxgLCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLCBgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3lgLCBhbmQgYHNmcF9zbV9hZGRfbWRpb19idXNgLCBhbGwgc2VlbSB0byBiZSBwcmVzZW50LlxuXG5MZXQncyBxdWlja2x5IGFuYWx5emUgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YC4gSXQncyBwYXJ0IG9mIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgY2FsbGVkIGR1cmluZyBQSFkgcHJvYmluZy4gV2hpbGUgY3JpdGljYWwgZm9yIGluaXRpYWxpemF0aW9uLCBpdCdzIG5vdCBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgaXMgY2FsbGVkIG9uIHByb2JlLCBhbmQgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAgaXMgY2FsbGVkIG9uIGluaXQuXG5cblNvLCBmb3IgYEZvY3VzU3ltYm9sc2AsIEknbGwgc3RpY2sgd2l0aCB0aGVzZTogYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCwgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAsIGFuZCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBtYWtlIHN1cmUgYFRYR0JFYCBpcyB0aGUgKm9ubHkqIHdheSB0byByZWFjaCBgU0ZQYC4gV2hhdCBhYm91dCBgTkdCRWA/IEknbGwgbmVlZCB0byByZXNlYXJjaCB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjQ0LjEzMDY3MDgyOVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY1MTIxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFNGUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNTEtXFx0c2VsZWN0IEhXTU9OIGlmIFRYR0JFPXlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NTI6XFx0c2VsZWN0IFNGUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01My1cXHRzZWxlY3QgR1BJT0xJQlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMjo0NC4yMjcxODk0NDdaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkzODE3MjAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIExvZ2ljKipcblxuT2theSwgc28gdGhlIGVzc2VudGlhbCBlbGVtZW50IGhlcmUgaXMgYFRYR0JFYC4gVGhhdCdzIHRoZSBjb3JlLiBCdXQgSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nIGVsc2UgdGhhdCBzdXBwb3J0cyBpdCBpcyBpbmNsdWRlZC5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgaWYgYE1ESU9fSTJDYCBpcyB0cmlzdGF0ZS4gUmlnaHQsIGl0IGlzLiBTbyB0aGF0IG1lYW5zIGl0IGNhbiBiZSBzZWxlY3RpdmVseSBlbmFibGVkLiBNeSBgRW5hYmxlQ29uZmlnc2AgY3VycmVudGx5IGxvb2sgbGlrZSB0aGlzOiBgU0ZQYCwgYE1ESU9fSTJDYCwgYW5kIGBUWEdCRWAuXG5cbkhvbGQgb24gYSBtaW51dGUuLi4gSSByZW1lbWJlciBgVFhHQkVgIGhhcyBhIGRlcGVuZGVuY3kgb24gYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYC4gSnVzdCB0byBiZSBzYWZlIGFuZCBlbnN1cmUgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBjb25maWd1cmVkLCBJJ2xsIGFkZCBgSTJDX0RFU0lHTldBUkVfUExBVEZPUk1gIHRvIHRoZSBsaXN0LiBJJ2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGl0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIHN1cnByaXNpbmcgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MjYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDA4OjIyOjU0LjE2NTM2NzAzNFoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAyMDQwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaTJjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZz01Nzg9aWYgSTJDX0RFU0lHTldBUkVfQ09SRVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTU3OS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZzo1ODA6Y29uZmlnIEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNXFxuZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWctNTgxLVxcdHRyaXN0YXRlIFxcXCJTeW5vcHN5cyBEZXNpZ25XYXJlIFBsYXRmb3JtIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjI6NTQuMjU1NTgxODgyWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMTA3MDkzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIENvbmZpZ3VyYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzeXprYWxsZXIgY29uZmlnIGFuZCBJIHNlZSBpdCdzIGdvdCBhIGxvdCBvZiBJMkMgZHJpdmVycyBlbmFibGVkLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB3ZSBzaG91bGQgZXhwYW5kIHRoaXMsIHNwZWNpZmljYWxseSBpbmNsdWRpbmcgYFRYR0JFYCwgYFNGUGAsIGFuZCBgTURJT19JMkNgIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYWRkaXRpb24sIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5MZXQgbWUgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nIGZvciB0aGlzLiBUaGUgcGF0Y2ggd2UncmUgY29uc2lkZXJpbmcgdHdlYWtzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBvZiBSb2xsQmFsbCBTRlAgbW9kdWxlcyB1c2luZyBNRElPIEkyQy4gQ3JpdGljYWxseSwgaXQgZGVsYXlzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSdzIFBIWSBwcm9iaW5nIHBoYXNlLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGdpdmVzIGFjdHVhbCBSb2xsQmFsbCBicmlkZ2VzIHRpbWUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGVtc2VsdmVzIGJlZm9yZSB0aGUgcHJvYmUsIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCB0b3VjaGVzIGJvdGggdGhlIFNGUCBzdGF0ZSBtYWNoaW5lIGFuZCBNRElPIEkyQyBwcm90b2NvbCBsb2dpYy5cblxuVGhlIGdyZWF0IHRoaW5nIGlzLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2UgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHRoYXQgYnJpbmdzIHVwIGFuIFNGUCBjYWdlIChsaWtlIHRoZSBXYW5neHVuIFRYR0JFIGRyaXZlciwgZm9yIGV4YW1wbGUpLiBUaGVuLCBmdXp6aW5nIHRob3NlIEkyQyBhbmQgR1BJTyBtZW1vcnktbWFwcGVkIEkvTyBhY2Nlc3NlcyBzaG91bGQgYmUgZW5vdWdoIHRvIHRyaWdnZXIgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLCBwdXR0aW5nIHRoaXMgbmV3IGNvZGUgcGF0aCBpbiBwbGF5LlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogaXMgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YCBhY3R1YWxseSByZWFjaGFibGU/IExldCdzIGNvbmZpcm0gdGhhdC4gWWVzLCBpdCBsb29rcyBsaWtlIGBzZnBfc21fZXZlbnRgIGNhbGxzIGl0IHdoZW4gdGhlIHN0YXRlIG1hY2hpbmUgaGl0cyBgU0ZQX1NfSU5JVGAgb3IgYSBzaW1pbGFyIHN0YXRlLiBJ4oCZbGwgbWFrZSBzdXJlIHRvIHZlcmlmeSBgc2ZwX3NtX2V2ZW50YOKAmXMgYmVoYXZpb3IgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzcwNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QwODoyMzowMS41NjYyOTQzNDZaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDEyMjY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZnBfc21fcHJvYmVfZm9yX3BoeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxNzU9c3RhdGljIGludCBzZnBfc21fYWRkX21kaW9fYnVzKHN0cnVjdCBzZnAgKnNmcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTkzLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMTk0OnN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc3RydWN0IHNmcCAqc2ZwKVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yODMxPXN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IGV2ZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI5MzMtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjI5MzQ6XFx0XFx0cmV0ID0gc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc2ZwKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjkzNS1cXHRcXHRpZiAocmV0ID09IC1FTk9ERVYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjM6MDEuNjc2NDM0MjkzWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3OTIxOTEyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRmluYWwgQ2hlY2tzIGFuZCBDb25zb2xpZGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgc2ZwX3NtX21haW5gIGRvZXMgaW5kZWVkIGNhbGwgYHNmcF9zbV9wcm9iZV9mb3JfcGh5YC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGxpbmUgb2YgcmVhc29uaW5nLiBgc2ZwX3NtX21haW5gIGlzLCBvZiBjb3Vyc2UsIHRoZSBwcmltYXJ5IHN0YXRlIG1hY2hpbmUgZnVuY3Rpb24sIHNvIHRoYXQncyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLlxuXG5Ob3csIEknbSBnb2luZyB0byBydW4gdGhyb3VnaCBhIGZpbmFsIGNoZWNrIG9uIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkgaGF2ZSBgVFhHQkVgLCBgU0ZQYCwgYW5kIGBNRElPX0kyQ2AgbGlzdGVkLiBIbW0sIGxldCdzIHNlZS4uLiBzaW5jZSBgVFhHQkVgIGRlcGVuZHMgb24gYEkyQ19ERVNJR05XQVJFX1BMQVRGT1JNYCwgSSdsbCBhZGQgdGhhdCB0byB0aGUgbGlzdCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgYXMgdGhleSBzYXkuXG5cbk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBJIGhhdmUgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgdW5kZXIgYEZvY3VzU3ltYm9sc2AuIExldCBtZSBjaGVjay4uLiBJIGhhdmUgYG1kaW9faTJjX3Byb2JlX3JvbGxiYWxsYCwgYGkyY19taWlfaW5pdF9yb2xsYmFsbGAsIGFuZCBgc2ZwX3NtX3Byb2JlX2Zvcl9waHlgLiBBcmUgdGhlcmUgYW55IG90aGVycyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkPyBMZXQncyBjaGVjay4uLiBBaCwgeWVzLCB0aGVyZSBhcmUgdHdvIHNtYWxsZXIgZnVuY3Rpb25zOiBgc2ZwX2kyY19tZGlvYnVzX2Rlc3Ryb3lgIGFuZCBgc2ZwX3NtX2FkZF9tZGlvX2J1c2AuIFRoZXNlIGFyZSBiYXNpY2FsbHkgd3JhcHBlcnMsIGJ1dCB0aGV5ICpoYXZlKiBiZWVuIG1vZGlmaWVkLiBXYWl0Li4uIGxvb2tzIGxpa2UgYHNmcF9zbV9hZGRfbWRpb19idXNgIGlzIG5vdyBqdXN0IGEgc2luZ2xlIGxpbmUgdGhhdCBjYWxscyBgc2ZwX2kyY19tZGlvYnVzX2NyZWF0ZShzZnApYC4gQW5kIGBzZnBfaTJjX21kaW9idXNfZGVzdHJveWAgbm93IGNhbGxzIGBtZGlvYnVzX2ZyZWUoc2ZwLVx1MDAzZWkyY19taWkpYC4gU2luY2UgdGhleSBhcmUganVzdCB3cmFwcGVycywgSSdsbCBpbmNsdWRlIGBzZnBfc21fcHJvYmVfZm9yX3BoeWAgYW5kIGBtZGlvX2kyY19wcm9iZV9yb2xsYmFsbGAgYXMgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi5cblxuQWxyaWdodCwgSSdtIHNhdGlzZmllZC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODYwOSwiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMDg6MjM6MTEuNDY4NjI5MDc1WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg3OTgwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRYR0JFXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIk1ESU9fSTJDXCIsXG4gICAgXCJJMkNfREVTSUdOV0FSRV9QTEFURk9STVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kaW9faTJjX3Byb2JlX3JvbGxiYWxsXCIsXG4gICAgXCJpMmNfbWlpX2luaXRfcm9sbGJhbGxcIixcbiAgICBcInNmcF9zbV9wcm9iZV9mb3JfcGh5XCIsXG4gICAgXCJzZnBfaTJjX21kaW9idXNfZGVzdHJveVwiLFxuICAgIFwic2ZwX3NtX2FkZF9tZGlvX2J1c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBzZXF1ZW5jZSBmb3IgUm9sbEJhbGwgU0ZQIG1vZHVsZXMgb3ZlciBNRElPIEkyQy4gSXQgZGVmZXJzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSdzIFBIWSBwcm9iaW5nIHBoYXNlLCBhbGxvd2luZyBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgdGltZSB0byBzdGFydCB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgTURJTyBJMkMgcHJvdG9jb2wgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdGhhdCBpbnN0YW50aWF0ZXMgYW4gU0ZQIGNhZ2UgKGUuZy4sIHRoZSBXYW5neHVuIFRYR0JFIGRyaXZlcikgYW5kIGZ1enppbmcgdGhlIHJlc3VsdGluZyBJMkMvR1BJTyBNTUlPIGFjY2Vzc2VzIHRvIHRyaWdnZXIgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRYR0JFXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIk1ESU9fSTJDXCIsXG4gICAgXCJJMkNfREVTSUdOV0FSRV9QTEFURk9STVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kaW9faTJjX3Byb2JlX3JvbGxiYWxsXCIsXG4gICAgXCJpMmNfbWlpX2luaXRfcm9sbGJhbGxcIixcbiAgICBcInNmcF9zbV9wcm9iZV9mb3JfcGh5XCIsXG4gICAgXCJzZnBfaTJjX21kaW9idXNfZGVzdHJveVwiLFxuICAgIFwic2ZwX3NtX2FkZF9tZGlvX2J1c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyBzZXF1ZW5jZSBmb3IgUm9sbEJhbGwgU0ZQIG1vZHVsZXMgb3ZlciBNRElPIEkyQy4gSXQgZGVmZXJzIHRoZSBwcm9iZSBmcm9tIG1vZHVsZSBhbGxvY2F0aW9uIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSdzIFBIWSBwcm9iaW5nIHBoYXNlLCBhbGxvd2luZyBnZW51aW5lIFJvbGxCYWxsIGJyaWRnZXMgdGltZSB0byBzdGFydCB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBTRlAgc3RhdGUgbWFjaGluZSBhbmQgTURJTyBJMkMgcHJvdG9jb2wgbG9naWMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdGhhdCBpbnN0YW50aWF0ZXMgYW4gU0ZQIGNhZ2UgKGUuZy4sIHRoZSBXYW5neHVuIFRYR0JFIGRyaXZlcikgYW5kIGZ1enppbmcgdGhlIHJlc3VsdGluZyBJMkMvR1BJTyBNTUlPIGFjY2Vzc2VzIHRvIHRyaWdnZXIgdGhlIFNGUCBzdGF0ZSBtYWNoaW5lLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowm4lt7[1] Phase: Succeeded StartedAt: 2026-06-23 08:23:22 +0000 UTC FinishedAt: 2026-06-23 08:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 08:23:22 +0000 UTC FinishedAt: 2026-06-23 08:23:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2] Phase: Succeeded StartedAt: 2026-06-23 08:23:22 +0000 UTC FinishedAt: 2026-06-23 10:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-23 08:23:22 +0000 UTC FinishedAt: 2026-06-23 10:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-23 08:23:22 +0000 UTC FinishedAt: 2026-06-23 08:23:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-23 08:23:22 +0000 UTC FinishedAt: 2026-06-23 08:23:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowm4lt7/series-workflowm4lt7-convert-artifact-3231513502/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-23 08:23:32 +0000 UTC FinishedAt: 2026-06-23 08:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-23 08:23:32 +0000 UTC FinishedAt: 2026-06-23 08:51:57 +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:*c0f3619e-cf99-40e0-a8ac-86180ebb154c,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-workflowm4lt7/series-workflowm4lt7-convert-artifact-3231513502/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": "1e8dedc6-c335-41b2-ac4a-ec19a3179c0d", "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-workflowm4lt7/series-workflowm4lt7-build-action-3739926660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-23 08:23:32 +0000 UTC FinishedAt: 2026-06-23 08:51:47 +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:*c0f3619e-cf99-40e0-a8ac-86180ebb154c,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-workflowm4lt7/series-workflowm4lt7-convert-artifact-3231513502/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": "1e8dedc6-c335-41b2-ac4a-ec19a3179c0d", "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-workflowm4lt7/series-workflowm4lt7-build-action-3739926660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 08:51:57 +0000 UTC FinishedAt: 2026-06-23 08:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-23 08:51:57 +0000 UTC FinishedAt: 2026-06-23 08:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 08:51:57 +0000 UTC FinishedAt: 2026-06-23 08:52:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 08:51:57 +0000 UTC FinishedAt: 2026-06-23 08:52:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowm4lt7/series-workflowm4lt7-convert-artifact-935720273/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 08:52:32 +0000 UTC FinishedAt: 2026-06-23 08:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 08:52:32 +0000 UTC FinishedAt: 2026-06-23 08:53:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e8dedc6-c335-41b2-ac4a-ec19a3179c0d,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-workflowm4lt7/series-workflowm4lt7-build-action-3739926660/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-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 08:54:08 +0000 UTC FinishedAt: 2026-06-23 08:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 08:54:08 +0000 UTC FinishedAt: 2026-06-23 08:54:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 08:54:08 +0000 UTC FinishedAt: 2026-06-23 09:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 08:54:08 +0000 UTC FinishedAt: 2026-06-23 09:27:40 +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:*c0f3619e-cf99-40e0-a8ac-86180ebb154c,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-workflowm4lt7/series-workflowm4lt7-convert-artifact-935720273/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": "4548e57c-a23d-425e-b5ad-d17227b3a293", "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-workflowm4lt7/series-workflowm4lt7-build-action-1288690461/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 08:54:08 +0000 UTC FinishedAt: 2026-06-23 09:27:30 +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:*c0f3619e-cf99-40e0-a8ac-86180ebb154c,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-workflowm4lt7/series-workflowm4lt7-convert-artifact-935720273/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": "4548e57c-a23d-425e-b5ad-d17227b3a293", "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-workflowm4lt7/series-workflowm4lt7-build-action-1288690461/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 09:27:40 +0000 UTC FinishedAt: 2026-06-23 09:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 09:27:40 +0000 UTC FinishedAt: 2026-06-23 09:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 09:27:40 +0000 UTC FinishedAt: 2026-06-23 09:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 09:27:40 +0000 UTC FinishedAt: 2026-06-23 09:29:08 +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:*4548e57c-a23d-425e-b5ad-d17227b3a293,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-workflowm4lt7/series-workflowm4lt7-build-action-1288690461/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-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-23 09:29:18 +0000 UTC FinishedAt: 2026-06-23 10:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 09:29:18 +0000 UTC FinishedAt: 2026-06-23 10:15:44 +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":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"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:*1e8dedc6-c335-41b2-ac4a-ec19a3179c0d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4548e57c-a23d-425e-b5ad-d17227b3a293,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-workflowm4lt7/series-workflowm4lt7-build-action-3739926660/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-workflowm4lt7/series-workflowm4lt7-build-action-1288690461/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 09:29:18 +0000 UTC FinishedAt: 2026-06-23 09:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 09:29:18 +0000 UTC FinishedAt: 2026-06-23 09:29:38 +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":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"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-workflowm4lt7/series-workflowm4lt7-convert-artifact-1749788550/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-23 09:29:18 +0000 UTC FinishedAt: 2026-06-23 09:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 09:29:18 +0000 UTC FinishedAt: 2026-06-23 09:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 09:29:18 +0000 UTC FinishedAt: 2026-06-23 09:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 09:30:40 +0000 UTC FinishedAt: 2026-06-23 10:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm4lt7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mdio_i2c_probe_rollball","i2c_mii_init_rollball","sfp_sm_probe_for_phy","sfp_i2c_mdiobus_destroy","sfp_sm_add_mdio_bus"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TXGBE","SFP","MDIO_I2C","I2C_DESIGNWARE_PLATFORM"],"series_id":"d23915fc-295b-4f1e-8913-e0aa5ef677d7","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 09:30:40 +0000 UTC FinishedAt: 2026-06-23 10:15:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1e8dedc6-c335-41b2-ac4a-ec19a3179c0d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4548e57c-a23d-425e-b5ad-d17227b3a293,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-workflowm4lt7/series-workflowm4lt7-build-action-3739926660/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-workflowm4lt7/series-workflowm4lt7-build-action-1288690461/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-workflowm4lt7/series-workflowm4lt7-convert-artifact-1749788550/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,}