Name: series-workflowqqffg Phase: Succeeded StartedAt: 2026-07-25 08:41:30 +0000 UTC FinishedAt: 2026-07-25 11:05:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[0] Phase: Succeeded StartedAt: 2026-07-25 08:41:30 +0000 UTC FinishedAt: 2026-07-25 08:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 08:41:30 +0000 UTC FinishedAt: 2026-07-25 08:54:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MCTP", "MCTP_TRANSPORT_USB", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MCTP", "MCTP_TRANSPORT_USB", "USB", "NET" ], "series_id": "aec88867-161c-4e87-93ef-35544305f8dd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mctp_usblib_rx_init", "mctp_usblib_rx_fini", "mctp_usblib_rx_prepare", "mctp_usblib_rx_complete", "mctp_usblib_rx_cancel", "mctp_usblib_tx_init", "mctp_usblib_tx_fini", "mctp_usblib_tx_push", "mctp_usblib_tx_send_complete", "mctp_usblib_tx_cancel" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDA4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9pbml0JiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2ZpbmkmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jYW5jZWwmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfaW5pdCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9maW5pJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgKG1jdHAtdXNibGliKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNQ1RQIFVTQiBkcml2ZXIgdG8gdXNlIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGFuZCBoYW5kbGVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA4OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTNiOTZlYjk2NDUzYTIwNDRkZGEzNzEzZjU4YmY2YTk4ODAyOGIzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA4OjUzOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuaW5kZXggY2YzMjVhYjBiMWVmNTUuLmM0MGFjOWM2NjViNzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbkBAIC00Nyw5ICYjNDM7NDcsMjUgQEAgY29uZmlnIE1DVFBfVFJBTlNQT1JUX0kzQ1xuIFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXG4gXHQgIGhhdmluZyBhIFwmIzM0O21jdHAtY29udHJvbGxlclwmIzM0OyBkZXZpY2V0cmVlIHByb3BlcnR5LlxuIFxuJiM0Mztjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gVVNCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgQ29tbW9uIHByb3RvY29sIGhhbmRsaW5nIGZ1bmN0aW9ucyBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnRcbiYjNDM7XHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcbiYjNDM7XHQgIHRyYW5zcG9ydCBkcml2ZXJcbiYjNDM7XG4mIzQzO1x0ICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLlxuJiM0MztcbiYjNDM7Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG4mIzQzOyAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzQzOyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuJiM0MzsgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzQzO1xuIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcbiBcdHRyaXN0YXRlIFwmIzM0O01DVFAgVVNCIHRyYW5zcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBVU0JcbiYjNDM7XHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gXHRoZWxwXG4gXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxuIFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5pbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5AQCAtMiwzICYjNDM7Miw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSAmIzQzOz0gbWN0cC1pMmMub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICYjNDM7PSBtY3RwLWkzYy5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgJiM0Mzs9IG1jdHAtdXNiLm9cbiYjNDM7b2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQikgJiM0Mzs9IG1jdHAtdXNibGliLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li41NDJhNTcwYzc2Y2M5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXG5AQCAtMyw5ICYjNDM7Myw5IEBAXG4gICogbWN0cC11c2IuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGJpbmRpbmcgZHJpdmVyLlxuICAqXG4gICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6XG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXG4mIzQzOyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbkBAIC0yMiw5NSAmIzQzOzIyLDExNSBAQFxuIHN0cnVjdCBtY3RwX3VzYiB7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2O1xuIFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XG4mIzQzO1x0Ym9vbCBzcGFuO1xuIFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcbiBcdHU4IGVwX2luO1xuIFx0dTggZXBfb3V0O1xuIFxuLVx0c3RydWN0IHVyYiAqdHhfdXJiO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDtcbiBcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcbiYjNDM7XHRpbnQgaW5fZXJyX2NvdW50O1xuJiM0MztcdGludCBpbl9lcnJfb3JpZztcbiYjNDM7XHRib29sIGNsZWFyX2hhbHQ7XG4gXG4gXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xuIFx0c3BpbmxvY2tfdCByeF9sb2NrO1xuIFx0Ym9vbCByeF9zdG9wcGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggdHg7XG4mIzQzO1x0c3RydWN0IHVzYl9hbmNob3IgdHhfYW5jaG9yO1xuJiM0MztcdC8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi9cbiYjNDM7XHRzcGlubG9ja190IHR4X3FtZW1fbG9jaztcbiYjNDM7XHRpbnQgdHhfcW1lbTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLFxuJiM0MztcdE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4gPSAweDAyLFxuIH07XG4gXG4mIzQzOy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcbiYjNDM7ICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSxcbiYjNDM7ICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cbiYjNDM7ICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxuJiM0MzsgKlxuJiM0MzsgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXG4mIzQzOyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXG4mIzQzOyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYl9vdXRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIHtcbi1cdHN0cnVjdCBza19idWZmICpza2IgPSB1cmItXHUwMDNlY29udGV4dDtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItXHUwMDNlZGV2O1xuLVx0aW50IHN0YXR1cztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHggPSB1cmItXHUwMDNlY29udGV4dDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbGVuID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0c3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHR4X2N0eCwgbmV0ZGV2LCB1cmItXHUwMDNlc3RhdHVzID09IDApO1xuIFxuLVx0c3dpdGNoIChzdGF0dXMpIHtcbi1cdGNhc2UgLUVOT0VOVDpcbi1cdGNhc2UgLUVDT05OUkVTRVQ6XG4tXHRjYXNlIC1FU0hVVERPV046XG4tXHRjYXNlIC1FUFJPVE86XG4tXHRcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZXRkZXYpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgMDpcbi1cdFx0ZGV2X2RzdGF0c190eF9hZGQobmV0ZGV2LCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpO1xuLVx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRyZXR1cm47XG4tXHRkZWZhdWx0OlxuLVx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7dW5leHBlY3RlZCB0eCB1cmIgc3RhdHVzOiAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbi1cdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XG4tXHR9XG4mIzQzO1x0dXNiX2ZyZWVfdXJiKHVyYik7XG4gXG4tXHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIC09IGxlbjtcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNldHhfcW1lbSBcdTAwM2MgVFhfUU1FTV9NQVggXHUwMDI2XHUwMDI2IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4mIzQzO1x0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuLVx0dW5zaWduZWQgaW50IHBsZW47XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCB1cmIgKnVyYjtcbiBcdGludCByYztcbiBcbi1cdHBsZW4gPSBza2ItXHUwMDNlbGVuO1xuLVxuLVx0aWYgKHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAoIWhkcilcbi1cdFx0Z290byBlcnJfZHJvcDtcbi1cbi1cdGhkci1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuLVx0aGRyLVx1MDAzZXJzdmQgPSAwO1xuLVx0aGRyLVx1MDAzZWxlbiA9IHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpO1xuLVxuLVx0dXJiID0gbWN0cF91c2ItXHUwMDNldHhfdXJiO1xuJiM0MztcdHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCF1cmIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXHUwMDNldXNiZGV2LFxuIFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfb3V0KSxcbi1cdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLFxuLVx0XHRcdCAgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCBza2IpO1xuJiM0MztcdFx0XHQgIGRhdGEsIGxlbiwgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCB0eF9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNlc3BhbilcbiYjNDM7XHRcdHVyYi1cdTAwM2V0cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7XG4mIzQzO1xuJiM0MztcdHVzYl9hbmNob3JfdXJiKHVyYiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbiBcbi1cdC8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi9cbi1cdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTtcbiBcdGlmIChyYykge1xuLVx0XHRuZXRpZl93YWtlX3F1ZXVlKGRldik7XG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCYjMzQ7VFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHR1c2JfdW5hbmNob3JfdXJiKHVyYik7XG4mIzQzO1x0XHR1c2JfZnJlZV91cmIodXJiKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtICYjNDM7PSBsZW47XG4mIzQzO1x0XHRpZiAobWN0cF91c2ItXHUwMDNldHhfcW1lbSBcdTAwM2U9IFRYX1FNRU1fTUFYKVxuJiM0MztcdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKG1jdHBfdXNiLVx1MDAzZW5ldGRldik7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IG1jdHBfdXNiX3R4X3NlbmQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0Ym9vbCBtb3JlID0gbmV0ZGV2X3htaXRfbW9yZSgpO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIHNrYiwgbW9yZSk7XG4gXG4tZXJyX2Ryb3A6XG4tXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcbi1cdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG5AQCAtMTI1LDI0ICYjNDM7MTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xuIHN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dm9pZCAqYnVmO1xuIFx0aW50IHJjO1xuIFxuLVx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApO1xuLVx0aWYgKCFza2IpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgZ2ZwKTtcbiYjNDM7XHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX3JldHJ5O1xuLVx0fVxuIFxuIFx0dXNiX2ZpbGxfYnVsa191cmIobWN0cF91c2ItXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cdTAwM2V1c2JkZXYsXG4gXHRcdFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9pbiksXG4tXHRcdFx0ICBza2ItXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxuLVx0XHRcdCAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7XG4mIzQzO1x0XHRcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XG4gXG4gXHRyYyA9IHVzYl9zdWJtaXRfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYiwgZ2ZwKTtcbiBcdGlmIChyYykge1xuIFx0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCYjMzQ7cnggdXJiIHN1Ym1pdCBmYWlsdXJlOiAlZFxcblwmIzM0OywgcmMpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKVxuIFx0XHRcdGdvdG8gZXJyX3JldHJ5O1xuIFx0fVxuQEAgLTE1NywxNCAmIzQzOzE3NiwzNCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm5zIC0xIGlmIHdlIGhhdmUgaGl0IGV4Y2Vzc2l2ZSBlcnJvcnMsIHplcm8gb3RoZXJ3aXNlLiAqL1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNiX2luX3VyYl9lcnIoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgaW50IHN0YXR1cyxcbiYjNDM7XHRcdFx0ICAgICAgIGJvb2wgc3RhbGxlZClcbiYjNDM7e1xuJiM0MztcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4mIzQzO1xuJiM0MztcdGlmICghbWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50JiM0MzsmIzQzOylcbiYjNDM7XHRcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnID0gc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50IFx1MDAzZT0gcnhfZXJyX21heCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihtY3RwX3VzYi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O2V4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSVzIElOIEVQLCBmaXJzdDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHN0YWxsZWQgPyBcJiMzNDsgKHN0YWxsZWQpXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuJiM0MztcdFx0XHQgICBtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfb3JpZyk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XG4tXHR1bnNpZ25lZCBpbnQgbGVuO1xuLVx0aW50IHN0YXR1cztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGludCByYywgc3RhdHVzO1xuIFxuIFx0c3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiBcbkBAIC0xNzIsODAgJiM0MzsyMTEsNDMgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIFx0Y2FzZSAtRU5PRU5UOlxuIFx0Y2FzZSAtRUNPTk5SRVNFVDpcbiBcdGNhc2UgLUVTSFVURE9XTjpcbi1cdGNhc2UgLUVQUk9UTzpcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybjtcbi1cdGNhc2UgMDpcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHQvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbiYjMzk7dCByZXN1Ym1pdCAqL1xuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiBcdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0bGVuID0gdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGg7XG4tXHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xuLVxuLVx0d2hpbGUgKHNrYikge1xuLVx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IE5VTEw7XG4tXHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcbi1cdFx0dTggcGt0X2xlbjsgLyogbGVuZ3RoIG9mIE1DVFAgcGFja2V0LCBubyBVU0IgaGVhZGVyICovXG4tXG4tXHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRcdGhkciA9IHNrYl9wdWxsX2RhdGEoc2tiLCBzaXplb2YoKmhkcikpO1xuLVx0XHRpZiAoIWhkcilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0aWYgKGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtyeDogaW52YWxpZCBpZCAlMDR4XFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgYmUxNl90b19jcHUoaGRyLVx1MDAzZWlkKSk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKGhkci1cdTAwM2VsZW4gXHUwMDNjXG4tXHRcdCAgICBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpIHtcbi1cdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7cng6IHNob3J0IHBhY2tldCAoaGRyKSAlZFxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgIGhkci1cdTAwM2VsZW4pO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHdlIGtub3cgd2UgaGF2ZSBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikgaGVyZSAqL1xuLVx0XHRwa3RfbGVuID0gaGRyLVx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcbi1cdFx0aWYgKHBrdF9sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbi1cdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbi1cdFx0XHRcdCAgIFwmIzM0O3J4OiBzaG9ydCBwYWNrZXQgKHhmZXIpICVkLCBhY3R1YWwgJWRcXG5cJiMzNDssXG4tXHRcdFx0XHQgICBoZHItXHUwMDNlbGVuLCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRpZiAocGt0X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbikge1xuLVx0XHRcdC8qIG1vcmUgcGFja2V0cyBtYXkgZm9sbG93IC0gY2xvbmUgdG8gYSBuZXdcbi1cdFx0XHQgKiBza2IgdG8gdXNlIG9uIHRoZSBuZXh0IGl0ZXJhdGlvblxuLVx0XHRcdCAqL1xuLVx0XHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbi1cdFx0XHRpZiAoc2tiMikge1xuLVx0XHRcdFx0aWYgKCFza2JfcHVsbChza2IyLCBwa3RfbGVuKSkge1xuLVx0XHRcdFx0XHRrZnJlZV9za2Ioc2tiMik7XG4tXHRcdFx0XHRcdHNrYjIgPSBOVUxMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0XHRza2JfdHJpbShza2IsIHBrdF9sZW4pO1xuLVx0XHR9XG4gXG4tXHRcdGRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0Y2FzZSAtRVBJUEU6XG4mIzQzO1x0XHQvKiBlbmRwb2ludCBzdGFsbDogY2xlYXIgaGFsdCwgd2hpY2ggd2lsbCBjYXVzZSBhIHJlc3VibWl0ICovXG4mIzQzO1x0XHRyYyA9IG1jdHBfdXNiX2luX3VyYl9lcnIobWN0cF91c2IsIHN0YXR1cywgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0ID0gdHJ1ZTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGlmICghbWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZClcbiYjNDM7XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X3JldHJ5X3dvcmssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBSWF9SRVRSWV9ERUxBWSk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcbi1cdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XG4tXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuLVx0XHRjYiA9IF9fbWN0cF9jYihza2IpO1xuLVx0XHRjYi1cdTAwM2VoYWxlbiA9IDA7XG4tXHRcdG5ldGlmX3J4KHNrYik7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDt1bmV4cGVjdGVkIHJ4IHVyYiBzdGF0dXM6ICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSAtRVRJTUU6XG4mIzQzO1x0Y2FzZSAtRVBST1RPOlxuJiM0MztcdGNhc2UgLUVJTFNFUTpcbiYjNDM7XHRjYXNlIC1FT1ZFUkZMT1c6XG4mIzQzO1x0XHQvKiBwb3NzaWJseSB0cmFuc2llbnQ7IHJlY29yZCBmaXJzdCBmYWlsdXJlLCByZXN1Ym1pdCAqL1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0YnJlYWs7XG4gXG4tXHRcdHNrYiA9IHNrYjI7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCBcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCwgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuJiM0MztcdFx0bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKHNrYilcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7XG4gfVxuIFxuQEAgLTI1Myw2ICYjNDM7MjU1LDMwIEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1jdHBfdXNiLFxuIFx0XHRcdFx0XHRcdCByeF9yZXRyeV93b3JrLndvcmspO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHQvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovXG4mIzQzO1x0aWYgKG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQpIHtcbiYjNDM7XHRcdGludCBwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfaW4pO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gdXNiX2NsZWFyX2hhbHQobWN0cF91c2ItXHUwMDNldXNiZGV2LCBwaXBlKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG1jdHBfdXNiLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtjYW4mIzM5O3QgY2xlYXIgSU4gRVAgaGFsdDogJWRcXG5cJiMzNDssIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICgmIzQzOyYjNDM7bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50IFx1MDAzZT0gcnhfZXJyX21heClcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGlmICghbWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZClcbiYjNDM7XHRcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfcmV0cnlfd29yayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgUlhfUkVUUllfREVMQVkpO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfS0VSTkVMKTtcbiB9XG5AQCAtMjYyLDYgJiM0MzsyODgsOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuIFx0V1JJVEVfT05DRShtY3RwX3VzYi1cdTAwM2VyeF9zdG9wcGVkLCBmYWxzZSk7XG4mIzQzO1x0bWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xuJiM0MztcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCA9IDA7XG4gXG4gXHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xuIFxuQEAgLTI4NCw3ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X3JldHJ5X3dvcmspO1xuIFxuIFx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYik7XG4tXHR1c2Jfa2lsbF91cmIobWN0cF91c2ItXHUwMDNldHhfdXJiKTtcbiYjNDM7XG4mIzQzO1x0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9hbmNob3IpO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIGRldiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSk7XG4mIzQzO1x0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMDEsNyAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0ZGV2LVx1MDAzZW10dSA9IE1DVFBfVVNCX01UVV9NSU47XG4gXHRkZXYtXHUwMDNlbWluX210dSA9IE1DVFBfVVNCX01UVV9NSU47XG4tXHRkZXYtXHUwMDNlbWF4X210dSA9IE1DVFBfVVNCX01UVV9NQVg7XG4mIzQzO1x0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzBfTVRVX01BWDtcbiBcbiBcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XG4gXHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG5AQCAtMzE3LDYgJiM0MzszNDksNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgbWN0cF91c2IgKmRldjtcbiYjNDM7XHRib29sIHNwYW47XG4gXHRpbnQgcmM7XG4gXG4gXHQvKiBvbmx5IG9uZSBhbHRlcm5hdGUgKi9cbkBAIC0zMjgsNiAmIzQzOzM2MSw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbiYjNDM7XHRzcGFuID0gaWZhY2VfZGVzYy1cdTAwM2VkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOO1xuJiM0MztcbiBcdG5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFwmIzM0O21jdHB1c2IlZFwmIzM0OywgTkVUX05BTUVfRU5VTSxcbiBcdFx0XHQgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApO1xuIFx0aWYgKCFuZXRkZXYpXG5AQCAtMzM1LDMzICYjNDM7MzcwLDQ2IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXG4gXHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIFx1MDAyNmludGYtXHUwMDNlZGV2KTtcbiBcdGRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0ZGV2LVx1MDAzZXNwYW4gPSBzcGFuO1xuIFx0ZGV2LVx1MDAzZW5ldGRldiA9IG5ldGRldjtcbiBcdGRldi1cdTAwM2V1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIFx0ZGV2LVx1MDAzZWludGYgPSBpbnRmO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlc3BhbilcbiYjNDM7XHRcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfMV8xX01UVV9NQVg7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4X3FtZW1fbG9jayk7XG4gXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7XG4gXG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeCwgbGUxNl90b19jcHUoZXBfaW4tXHUwMDNld01heFBhY2tldFNpemUpLFxuJiM0MztcdFx0XHRcdCBkZXYtXHUwMDNlc3Bhbik7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9uZXRkZXY7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfaW5pdChcdTAwMjZkZXYtXHUwMDNldHgsIFx1MDAyNnR4X29wcywgZGV2LCBkZXYtXHUwMDNlc3Bhbik7XG4mIzQzO1x0aW5pdF91c2JfYW5jaG9yKFx1MDAyNmRldi1cdTAwM2V0eF9hbmNob3IpO1xuJiM0MztcbiBcdGRldi1cdTAwM2VlcF9pbiA9IGVwX2luLVx1MDAzZWJFbmRwb2ludEFkZHJlc3M7XG4gXHRkZXYtXHUwMDNlZXBfb3V0ID0gZXBfb3V0LVx1MDAzZWJFbmRwb2ludEFkZHJlc3M7XG4gXG4tXHRkZXYtXHUwMDNldHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcbiBcdGRldi1cdTAwM2VyeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFkZXYtXHUwMDNldHhfdXJiIHx8ICFkZXYtXHUwMDNlcnhfdXJiKSB7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlcnhfdXJiKSB7XG4gXHRcdHJjID0gLUVOT01FTTtcbi1cdFx0Z290byBlcnJfZnJlZV91cmJzO1xuJiM0MztcdFx0Z290byBlcnJfZmluaV9yeHR4O1xuIFx0fVxuIFxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2ZGV2LVx1MDAzZXJ4X3JldHJ5X3dvcmssIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmspO1xuIFxuIFx0cmMgPSBtY3RwX3JlZ2lzdGVyX25ldGRldihuZXRkZXYsIE5VTEwsIE1DVFBfUEhZU19CSU5ESU5HX1VTQik7XG4gXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfdXJicztcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfdXJiO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX2ZyZWVfdXJiczpcbi1cdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNldHhfdXJiKTtcbiYjNDM7ZXJyX2ZyZWVfdXJiOlxuIFx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuJiM0MztlcnJfZmluaV9yeHR4OlxuJiM0MztcdG1jdHBfdXNibGliX3R4X2ZpbmkoXHUwMDI2ZGV2LVx1MDAzZXR4KTtcbiYjNDM7XHRtY3RwX3VzYmxpYl9yeF9maW5pKFx1MDAyNmRldi1cdTAwM2VyeCk7XG4mIzQzO2Vycl9mcmVlX25ldGRldjpcbiBcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG4gXHRyZXR1cm4gcmM7XG4gfVxuQEAgLTM3MSwxMyAmIzQzOzQxOSwxNSBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0c3RydWN0IG1jdHBfdXNiICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuIFxuIFx0bWN0cF91bnJlZ2lzdGVyX25ldGRldihkZXYtXHUwMDNlbmV0ZGV2KTtcbi1cdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNldHhfdXJiKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl9yeF9maW5pKFx1MDAyNmRldi1cdTAwM2VyeCk7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfZmluaShcdTAwMjZkZXYtXHUwMDNldHgpO1xuIFx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuIFx0ZnJlZV9uZXRkZXYoZGV2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtY3RwX3VzYl9kZXZpY2VzW10gPSB7XG4tXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgMHgwLCAweDEpIH0sXG4mIzQzO1x0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UsIDB4MSkgfSxcbiYjNDM7XHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTiwgMHgxKSB9LFxuIFx0eyAwIH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlkZjQwMWE5MTRmZjUzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xuQEAgLTAsMCAmIzQzOzEsNDEyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIG1jdHAtdXNibGliLXRlc3QuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5LFxuJiM0MzsgKiB1bml0IHRlc3QgZGVmaW5pdGlvbnMuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrdW5pdC90ZXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9tY3RwLXVzYi5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcdHN0cnVjdCBtY3RwX2RldiAqbWRldjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3BrdHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHgge1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuJiM0MztcdHN0cnVjdCBtY3RwX3JvdXRlIHJ0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNibGliX2Rldl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0Lyogd2UgZG9uJiMzOTt0IHRyYWNrIGFueSBUWGVkIHBhY2tldHMgYXQgcHJlc2VudCAqL1xuJiM0MztcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdHJldHVybiBORVRERVZfVFhfT0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF90ZXN0X25ldGRldl9vcHMgPSB7XG4mIzQzO1x0Lm5kb19zdGFydF94bWl0ID0gbWN0cF91c2JsaWJfZGV2X3R4LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHUxNiBlcF9tYXhwYWNrZXQgPSA1MTI7XG4mIzQzO3N0YXRpYyBjb25zdCBtY3RwX2VpZF90IGxvY2FsX2VpZCA9IDg7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRuZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTUNUUDtcbiYjNDM7XHRuZGV2LVx1MDAzZW10dSA9IDgxOTI7XG4mIzQzO1x0bmRldi1cdTAwM2VmbGFncyA9IElGRl9OT0FSUDtcbiYjNDM7XHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZtY3RwX3Rlc3RfbmV0ZGV2X29wcztcbiYjNDM7XHRuZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiYjNDM7XHRuZGV2LVx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbih2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlbWRldilcbiYjNDM7XHRcdG1jdHBfZGV2X3B1dChkZXYtXHUwMDNlbWRldik7XG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2LVx1MDAzZW5kZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpcbiYjNDM7bWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bmRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFwmIzM0O21jdHB0ZXN0JWRcJiMzNDssIE5FVF9OQU1FX0VOVU0sXG4mIzQzO1x0XHRcdCAgICBtY3RwX3VzYmxpYl9kZXZfc2V0dXApO1xuJiM0MztcdGlmICghbmRldilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRkZXYtXHUwMDNlbmRldiA9IG5kZXY7XG4mIzQzO1x0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1xuJiM0MztcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0ZnJlZV9uZXRkZXYobmRldik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24sIGRldik7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRkZXYtXHUwMDNlbWRldiA9IF9fbWN0cF9kZXZfZ2V0KG5kZXYpO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlbWRldilcbiYjNDM7XHRcdGRldi1cdTAwM2VtZGV2LVx1MDAzZW5ldCA9IG1jdHBfZGVmYXVsdF9uZXQoZGV2X25ldChuZGV2KSk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW1kZXYpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0cmMgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dChzdHJ1Y3QgbWN0cF9kc3QgKmRzdCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYoc2tiLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzLCBza2IpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZGV2aWNlIHdpbGwgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gLVx1MDAzZXJ0IHdpbGwgYmUgdW5saW5rZWQuXG4mIzQzO1x0ICogSnVzdCBlbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgaXMgYXMgZXhwZWN0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0S1VOSVRfRVhQRUNUX1RSVUUoY3VycmVudC1cdTAwM2VrdW5pdF90ZXN0LFxuJiM0MztcdFx0XHQgIHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZjdHgtXHUwMDNlcnQucmVmcykpO1xuJiM0MztcbiYjNDM7XHRrZnJlZShjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfcm91dGUgKnJ0O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0ga3phbGxvY19vYmooKmN0eCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eCk7XG4mIzQzO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VydC5saXN0KTtcbiYjNDM7XHRydCA9IFx1MDAyNmN0eC1cdTAwM2VydDtcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2cnQtXHUwMDNlcmVmcywgMSk7XG4mIzQzO1xuJiM0MztcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VkZXYgPSBtY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYodGVzdCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eC1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRydC1cdTAwM2VtaW4gPSBsb2NhbF9laWQ7XG4mIzQzO1x0cnQtXHUwMDNlbWF4ID0gbG9jYWxfZWlkO1xuJiM0MztcdHJ0LVx1MDAzZWRzdF90eXBlID0gTUNUUF9ST1VURV9ESVJFQ1Q7XG4mIzQzO1x0cnQtXHUwMDNldHlwZSA9IFJUTl9MT0NBTDtcbiYjNDM7XHRydC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW1kZXY7XG4mIzQzO1x0cnQtXHUwMDNlb3V0cHV0ID0gbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0O1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRsaXN0X2FkZF9yY3UoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QsIFx1MDAyNmluaXRfbmV0Lm1jdHAucm91dGVzKTtcbiYjNDM7XHRyZWZjb3VudF9pbmMoXHUwMDI2cnQtXHUwMDNlcmVmcyk7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGN0eDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSW5pdCBhIE1DVFAtb3Zlci1VU0IgcGFja2V0IHdpdGhpbiBhIGJ1ZmZlci4gQGxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZVxuJiM0MzsgKiBidWZmZXIgdG8gd3JpdGUsIEBwYXlsb2FkX2xlbiBpcyB0aGUgcmVwb3J0ZWQgc2l6ZSBvZiB0aGUgTUNUUC1vdmVyLVVTQlxuJiM0MzsgKiBwYWNrZXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHZvaWQgKmRhdGEsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgc2l6ZV90IHBheWxvYWRfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgdXNiO1xuJiM0MztcdFx0c3RydWN0IG1jdHBfaGRyIG1jdHA7XG4mIzQzO1x0fSBoZHI7XG4mIzQzO1xuJiM0MztcdGhkci51c2IuaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTtcbiYjNDM7XHRoZHIudXNiLmxlbiA9IGNwdV90b19iZTE2KHBheWxvYWRfbGVuKTtcbiYjNDM7XHRoZHIubWN0cC52ZXIgPSAxO1xuJiM0MztcdGhkci5tY3RwLmRlc3QgPSBsb2NhbF9laWQ7XG4mIzQzO1x0aGRyLm1jdHAuc3JjID0gMDtcbiYjNDM7XHRoZHIubWN0cC5mbGFnc19zZXFfdGFnID0gMDtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGRhdGEsIFx1MDAyNmhkciwgbWluKGxlbiwgc2l6ZW9mKGhkcikpKTtcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBzaXplb2YoaGRyKSlcbiYjNDM7XHRcdG1lbXNldChkYXRhICYjNDM7IHNpemVvZihoZHIpLCAwLCBsZW4gLSBzaXplb2YoaGRyKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFjdGlvbl9yeF9maW5pKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4ID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfcnhfZmluaShyeCk7XG4mIzQzO1x0a2ZyZWUocngpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3J4ICpcbiYjNDM7bWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJ4ID0ga3phbGxvY19vYmooKnJ4KTtcbiYjNDM7XHRpZiAocngpIHtcbiYjNDM7XHRcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpO1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJ4KTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KHJ4LCBlcF9tYXhwYWNrZXQsIHNwYW4pO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByeDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogV3JhcHBlcnMgZm9yIHVzYmxpYiYjMzk7cyByeF9jb21wbGV0ZSBjYWxsYmFjaywgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkXG4mIzQzOyAqIGZyb20gYXRvbWljIGNvbnRleHRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4mIzQzOyAqIHRoZSB0cmFuc2ZlclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0Lyogd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgbWF4cGFja2V0IG9mIHRyYW5zZmVyIGF2YWlsYWJsZSAqL1xuJiM0MztcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QoYnVmLCA4LCA4KTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgOCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX05PVF9OVUxMKHRlc3QsIHNrYik7XG4mIzQzO1x0aWYgKHNrYilcbiYjNDM7XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCA0KTtcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4ge1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0c2l6ZV90IG5fcGt0cztcbiYjNDM7XHRzaXplX3QgcGt0c1s2XTtcbiYjNDM7XHRzaXplX3Qgbl94ZmVycztcbiYjNDM7XHRzaXplX3QgeGZlcnNbNl07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MoY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnQsXG4mIzQzO1x0XHRcdFx0ICBjaGFyICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3Ryc2NweShkZXNjLCB0LVx1MDAzZW5hbWUsIEtVTklUX1BBUkFNX0RFU0NfU0laRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUoc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpzcGFuLFxuJiM0MztcdFx0XHRcdCAgIHNpemVfdCAqbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHBrdF9sZW4gPSAwLCB4ZmVyX2xlbiA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl9wa3RzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLVx1MDAzZXBrdHNbaV0sIDgsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BrdFsldV0gbGVuIHRvbyBzbWFsbCAoJXp1KSBmb3IgJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIGksIHNwYW4tXHUwMDNlcGt0c1tpXSwgc3Bhbi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdHBrdF9sZW4gJiM0Mzs9IHNwYW4tXHUwMDNlcGt0c1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl94ZmVyczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR4ZmVyX2xlbiAmIzQzOz0gc3Bhbi1cdTAwM2V4ZmVyc1tpXTtcbiYjNDM7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCBwa3RfbGVuLCB4ZmVyX2xlbixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2ludmFsaWQgcGt0X2xlbiAoJXp1KSAhPSB4ZmVyX2xlbiAoJXp1KSBmb3IgJXNcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBwa3RfbGVuLCB4ZmVyX2xlbiwgc3Bhbi1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0KmxlbiA9IHBrdF9sZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnBrdF9zcGFuID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbiYjNDM7XHRzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdHU4ICpwa3RidWY7XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl92YWxpZGF0ZSh0ZXN0LCBwa3Rfc3BhbiwgXHUwMDI2bGVuKTtcbiYjNDM7XHRwa3RidWYgPSBrdW5pdF9rbWFsbG9jX2FycmF5KHRlc3QsIDEsIGxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHBrdGJ1Zik7XG4mIzQzO1xuJiM0MztcdC8qIGxheSBvdXQgcGFja2V0cyAqL1xuJiM0MztcdGZvciAob2ZmID0gMCwgaSA9IDA7IGkgXHUwMDNjIHBrdF9zcGFuLVx1MDAzZW5fcGt0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGxlbiA9IHBrdF9zcGFuLVx1MDAzZXBrdHNbaV07XG4mIzQzO1x0XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbiwgbGVuKTtcbiYjNDM7XHRcdG9mZiAmIzQzOz0gbGVuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcbiYjNDM7XHQvKiBmZWVkIHRyYW5zZmVycyAqL1xuJiM0MztcdGZvciAob2ZmID0gMCwgeGZlcl9vZmYgPSAwLCBpID0gMDsgaSBcdTAwM2MgcGt0X3NwYW4tXHUwMDNlbl94ZmVyczspIHtcbiYjNDM7XHRcdHhmZXJfbGVuID0gcGt0X3NwYW4tXHUwMDNleGZlcnNbaV0gLSB4ZmVyX29mZjtcbiYjNDM7XHRcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xuJiM0MztcbiYjNDM7XHRcdGxlbiA9IG1pbihsZW4sIHhmZXJfbGVuKTtcbiYjNDM7XHRcdG1lbWNweShidWYsIHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiA9PSB4ZmVyX2xlbikge1xuJiM0MztcdFx0XHQvKiB3aG9sZS9lbmQgeGZlciwgcHJvY2VlZCB0byBuZXh0ICovXG4mIzQzO1x0XHRcdHhmZXJfb2ZmID0gMDtcbiYjNDM7XHRcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBwYXJ0aWFsICovXG4mIzQzO1x0XHRcdHhmZXJfb2ZmICYjNDM7PSBsZW47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1x0XHRvZmYgJiM0Mzs9IGxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi9cbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgcGt0X3NwYW4tXHUwMDNlbl9wa3RzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpIFx1MDAzYyBwa3Rfc3Bhbi1cdTAwM2VuX3BrdHMpXG4mIzQzO1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCBwa3Rfc3Bhbi1cdTAwM2Vwa3RzW2ldIC0gNCk7XG4mIzQzO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcbiYjNDM7XHQvKiBPbmUgcGFja2V0IGNvbXBsZXRlbHkgd2l0aGluIGEgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMXgtY29tcGxldGVcJiMzNDssIDEsIHsgOCB9LCAxLCB7IDggfSB9LFxuJiM0MztcdC8qIFR3byBzbWFsbCBwYWNrZXRzIGNvbWJpbmVkIHdpdGhpbiBvbmUgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzJwMXgtY29tYmluZWRcJiMzNDssIDIsIHsgOCwgOCB9LCAxLCB7IDE2IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMngtc3BsaXQtcGF5bG9hZFwmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxuJiM0MztcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXG4mIzQzO1x0eyBcJiMzNDsxcDJ4LXNwbGl0LXVzYmhkclwmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIGhlYWRlciAqL1xuJiM0MztcdHsgXCYjMzQ7MXAyeC1zcGxpdC1tY3RwaGRyXCYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgNiwgMTAgfSB9LFxuJiM0MztcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xuJiM0MztcdHsgXCYjMzQ7MXAzeC1zcGxpdFwmIzM0OywgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxuJiM0MztcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMXgtbGFyZ2VcJiMzNDssIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxuJiM0MztcdC8qIFR3byBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbiwgd2l0aCBhXG4mIzQzO1x0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxuJiM0MztcdCAqL1xuJiM0MztcdHsgXCYjMzQ7MnAyeC1sYXJnZS1zcGxpdFwmIzM0OywgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucyxcbiYjNDM7XHRcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XG4mIzQzO1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXG4mIzQzO1x0S1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLFxuJiM0MztcdFx0XHQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3Bhbl9nZW5fcGFyYW1zKSxcbiYjNDM7XHR7fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bWN0cC11c2JsaWJcJiMzNDssXG4mIzQzO1x0LnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7a3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzE5OTdmOTg5MDI2Zjlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xuQEAgLTAsMCAmIzQzOzEsNjI1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeVxuJiM0MzsgKlxuJiM0MzsgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcbiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvY2g5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFlcF9wa3RsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVwX3BrdGxlbiBcdTAwMjYgflVTQl9FTkRQT0lOVF9NQVhQX01BU0spXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KHJ4LCAwLCBzaXplb2YoKnJ4KSk7XG4mIzQzO1x0cngtXHUwMDNlc3BhbiA9IHNwYW47XG4mIzQzO1x0cngtXHUwMDNlZXBfcGt0bGVuID0gZXBfcGt0bGVuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9pbml0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KVxuJiM0Mzt7XG4mIzQzO1x0a2ZyZWVfc2tiKHJ4LVx1MDAzZXNrYik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcbiYjNDM7ICogYmUgcG9wdWxhdGVkIG9uIHN1Y2Nlc3MuXG4mIzQzOyAqL1xuJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxuJiM0MztcdFx0XHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtXHUwMDNlc2tiO1xuJiM0MztcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlbGVuIFx1MDAzZT0gTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgpIHtcbiYjNDM7XHRcdC8qIHNvbWV0aGluZyBtdXN0IGhhdmUgZ29uZSB0ZXJyaWJseSB3cm9uZy4gY2xlYXIgYW5kIHJlc3RhcnQgKi9cbiYjNDM7XHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XG4mIzQzO1x0XHRza2IgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVuID0gcngtXHUwMDNlc3BhbiA/IHJvdW5kdXAoTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LVx1MDAzZWVwX3BrdGxlbilcbiYjNDM7XHRcdDogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFza2IpIHtcbiYjNDM7XHRcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGxlbiwgZ2ZwKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmIChza2ItXHUwMDNlY2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpIFx1MDAzYyByeC1cdTAwM2VlcF9wa3RsZW4pIHtcbiYjNDM7XHRcdC8qIFdlIGFsd2F5cyBuZWVkIHRvIHJlYWxsb2MgaWYgLVx1MDAzZWNsb25lZCwgYXMgd2UgY2Fubm90XG4mIzQzO1x0XHQgKiByZXN1Ym1pdCB0aGUgKG5vdy1zaGFyZWQpIHNrYiBidWZmZXIgZm9yIHBvc3NpYmxlIERNQS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlXG4mIzQzO1x0XHQgKiBoYXZlIHN1ZmZpY2llbnQgc3BhY2UgdG8gcHJldmVudCBiYWJibGUuIFNpbmNlIHdlIGFsbG9jYXRlZFxuJiM0MztcdFx0ICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnlcbiYjNDM7XHRcdCAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlXG4mIzQzO1x0XHQgKiBoYXZlIHN1ZmZpY2llbnQgZGF0YSB0byBmaW5pc2ggdGhlIGN1cnJlbnQgTUNUUCBwYWNrZXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuJiM0MztcbiYjNDM7XHRcdHNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBsZW4sIGdmcCk7XG4mIzQzO1x0XHRpZiAoIXNrYjIpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdHNrYiA9IHNrYjI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2Vza2IgPSBza2I7XG4mIzQzO1xuJiM0MztcdC8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbiYjMzk7dCByZXF1aXJlIGV4YWN0bHkgb25lXG4mIzQzO1x0ICogdHJhbnNmZXIgcGFja2V0LiBJZiB3ZSBoYXZlIGV4dHJhIHRhaWxyb29tLCBtYXkgYXMgd2VsbCB1c2UgaXQsXG4mIzQzO1x0ICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSBcdTAwM2U9IGVwX3BrdGxlbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocngtXHUwMDNlc3BhbilcbiYjNDM7XHRcdGxlbiA9IHJvdW5kZG93bihza2JfdGFpbHJvb20oc2tiKSwgcngtXHUwMDNlZXBfcGt0bGVuKTtcbiYjNDM7XG4mIzQzO1x0KmJ1ZnAgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XG4mIzQzO1x0KmxlbnAgPSBsZW47XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X3ByZXBhcmUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gdGhpc19jcHVfcHRyKG5ldGRldi1cdTAwM2Vkc3RhdHMpO1xuJiM0MztcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiYjNDM7XHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7XG4mIzQzO1xuJiM0MztcdC8qIHdlJiMzOTtyZSBjYWxsZWQgZnJvbSBhbiBVUkIgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2Fubm90IGFzc3VtZSBsb2NhbFxuJiM0MztcdCAqIGlycXMgYXJlIGFsd2F5cyBkaXNhYmxlZFxuJiM0MztcdCAqL1xuJiM0MztcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNlcnhfcGFja2V0cyk7XG4mIzQzO1x0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xuJiM0MztcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiM0MztcdGNiID0gX19tY3RwX2NiKHNrYik7XG4mIzQzO1x0Y2ItXHUwMDNlaGFsZW4gPSAwO1xuJiM0MztcdG5ldGlmX3J4KHNrYik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXJ4X2Ryb3BzKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWNlaXZlIGEgVVNCIGNvbXBsZXRpb24gb2YgQGxlbiBieXRlcyBvZiBpbmNvbWluZyBkYXRhLiBXZSB3aWxsIHRoZW4gc3BsaXRcbiYjNDM7ICogdGhpcyBpbnRvIHBhY2tldHMgYW5kIG5ldGlmX3J4KCkgZWFjaC4gSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGluIGF0b21pY1xuJiM0MzsgKiBjb250ZXh0cyAtIGllLiwgVVJCIGNvbXBsZXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEFzc3VtZXMgQG5ldGRldiB1c2VzIGRzdGF0cy5cbiYjNDM7ICovXG4mIzQzO2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4mIzQzO1x0aW50IHJjID0gMDtcbiYjNDM7XG4mIzQzO1x0X19za2JfcHV0KHNrYiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuJiM0MztcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XG4mIzQzO1x0XHQvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIGluY2x1ZGluZyBVU0IgaGVhZGVyICovXG4mIzQzO1x0XHR1MTYgcGt0X2xlbjtcbiYjNDM7XG4mIzQzO1x0XHQvKiBubyBoZWFkZXIgeWV0LCByZXN1Ym1pdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAqL1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqaGRyKSkge1xuJiM0MztcdFx0XHRpZiAoIXJ4LVx1MDAzZXNwYW4pIHtcbiYjNDM7XHRcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O3J4OiB0aW55IHhmZXIgKCVkKSBpbiBub24tc3BhbiBtb2RlXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRcdFx0cmMgPSAtRU5PTVNHO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGhkciA9IChzdHJ1Y3QgbWN0cF91c2JfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xuJiM0MztcdFx0XHQvKiBCeSByZXNldHRpbmcgaGVyZSwgd2lsbCBzdGFydCB0aGUgbmV4dCBJTiB0cmFuc2ZlclxuJiM0MztcdFx0XHQgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgc2tiLiBUaGlzIHdpbGwgbWVhblxuJiM0MztcdFx0XHQgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkXG4mIzQzO1x0XHRcdCAqIHdpdGggdGhlIHN0YXJ0IG9mIGEgdHJhbnNmZXIuXG4mIzQzO1x0XHRcdCAqXG4mIzQzO1x0XHRcdCAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UmIzM5O2xsIGRyb3BcbiYjNDM7XHRcdFx0ICogdGhlIGN1cnJlbnQgdHJhbnNmZXIgb25seVxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3J4OiBpbnZhbGlkIGlkICUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgYmUxNl90b19jcHUoaGRyLVx1MDAzZWlkKSk7XG4mIzQzO1x0XHRcdHJjID0gLUVQUk9UTztcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGt0X2xlbiA9IGJlMTZfdG9fY3B1KGhkci1cdTAwM2VsZW4pO1xuJiM0MztcdFx0LyogdjEuMSwgd2l0aCBzcGFuIGVuYWJsZWQsIGhhcyBhIDEzLWJpdCBsZW5ndGggKi9cbiYjNDM7XHRcdHBrdF9sZW4gXHUwMDI2PSByeC1cdTAwM2VzcGFuID9cbiYjNDM7XHRcdFx0TUNUUF9VU0JfMV8xX1BLVExFTl9NQVggOiBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWDtcbiYjNDM7XHRcdGlmIChwa3RfbGVuIFx1MDAzYyBzaXplb2YoKmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3J4OiBpbnZhbGlkIGxlbiAlZFxcblwmIzM0OywgcGt0X2xlbik7XG4mIzQzO1x0XHRcdHJjID0gLUVQUk9UTztcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Lyogc3BhbiBjb250aW51ZXMgdG8gdGhlIG5leHQgdHJhbnNmZXIsIHJlc3VibWl0ICovXG4mIzQzO1x0XHRpZiAocGt0X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuJiM0MztcdFx0XHRpZiAoIXJ4LVx1MDAzZXNwYW4pIHtcbiYjNDM7XHRcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O3J4OiBzaG9ydCB4ZmVyICglZCB2cyAlZCkgaW4gbm9uLXNwYW4gbW9kZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHBrdF9sZW4sIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRcdHJjID0gLUVQUk9UTztcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXNldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi9cbiYjNDM7XHRcdGlmIChwa3RfbGVuID09IHNrYi1cdTAwM2VsZW4pIHtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpO1xuJiM0MztcdFx0XHRyeC1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBtb3JlIHBhY2tldHMgZm9sbG93IC0gUlggYSBjbG9uZSBzbyB0aGF0IHdlIGNhbiBjb250aW51ZVxuJiM0MztcdFx0ICogcHJvY2Vzc2luZyB0aGUgY3VycmVudCBTS0IsIHdoaWNoIG1heSBiZSB0aGUgc3RhcnQgb2YgYVxuJiM0MztcdFx0ICogc3Bhbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKHNrYjIpIHtcbiYjNDM7XHRcdFx0c2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7XG4mIzQzO1x0XHRcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiMik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChuZXRkZXYpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc2V0OlxuJiM0MztcdGRldl9rZnJlZV9za2JfYW55KHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0cngtXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY29tcGxldGUpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2FuY2VsIGEgcnggY29udGV4dDsgc3Vic2VxdWVudCBwcmVwYXJlL2NvbXBsZXRlIGNhbGxzIHdpbGwgbm90IGJlIGFcbiYjNDM7ICogY29udGludWF0aW9uIG9mIGFueSBkYXRhIGFscmVhZHkgcmVjZWl2ZWQuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KVxuJiM0Mzt7XG4mIzQzO1x0ZGV2X2tmcmVlX3NrYl9hbnkocngtXHUwMDNlc2tiKTtcbiYjNDM7XHRyeC1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XG4mIzQzO1xuJiM0MzsvKiB0cmFuc21pdCBjb250ZXh0OiBlbmNhcHN1bGF0ZXMgb25lIHRyYW5zZmVyICovXG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgge1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JzO1xuJiM0MztcdHVuc2lnbmVkIGludCBidWZfbGVuLCBsZW47XG4mIzQzO1x0ZW51bSBtY3RwX3VzYmxpYl90eF9idWZfdHlwZSB7XG4mIzQzO1x0XHRUWF9TSU5HTEUsXG4mIzQzO1x0XHRUWF9GTEFULFxuJiM0MztcdH0gYnVmX3R5cGU7XG4mIzQzO1x0dTggYnVmW10gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4mIzQzO1x0XHRcdCBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsXG4mIzQzO1x0XHRcdCB2b2lkICpwcml2LCBib29sIHNwYW4pXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTtcbiYjNDM7XHR0eC1cdTAwM2VvcHMgPSAqb3BzO1xuJiM0MztcdHR4LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcdHR4LVx1MDAzZXNwYW4gPSBzcGFuO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnR4LVx1MDAzZWxvY2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hdmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSA/IDAgOiBjdHgtXHUwMDNlYnVmX2xlbiAtIGN0eC1cdTAwM2VsZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdC8qIFVzZSB0aGUgYmFzZWxpbmUgbGVuZ3RoIChpZSwgQlRVKSBhcyBhbiBhcHByb3hpbWF0ZVxuJiM0MztcdCAqIFwmIzM0O3JlYXNvbmFibHktc2l6ZWRcJiMzNDsgcGFja2V0IHdlIGNvdWxkIGV4cGVjdC4gSWYgdGhlcmUgaXNcbiYjNDM7XHQgKiBpbnN1ZmZpY2llbnQgY2FwYWNpdHkgZm9yIHRoYXQsIHRoZW4gc2VuZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb25zdCBzaXplX3QgcGt0X2xlbiA9IE1DVFBfVVNCX0JUVSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpIFx1MDAzYyBwa3RfbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZSAtIGluZGljYXRpbmcgdGhhdCB0aGUgbmV3IHNrYlxuJiM0MzsgKiBjb3VsZCBub3QgYmUgYXBwZW5kZWQuIFNvLCBlcnJvcnMgcmVwb3J0ZWQgaGVyZSB0byB0aGUgVFggcGF0aCB3aWxsIHJlc3VsdFxuJiM0MzsgKiBpbiB0aGUgVFggYmVpbmcgdHJhbnNtaXR0ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2FwcGVuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbiYjNDM7XHRcdHJldHVybiAtRU5PQlVGUztcbiYjNDM7XG4mIzQzO1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlc2ticywgc2tiKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWxlbiAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpidWY7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlIGhhdmUgYSBxbGVuIG9mIDEsIHdlIG9ubHkgZW5kZWQgdXAgcGFja2luZyBhIHNpbmdsZSBza2IsXG4mIzQzO1x0ICogZGVzcGl0ZSBhbGxvY2F0aW5nIGZvciBtdWx0aXBsZS4gU2tpcCB0aGUgY29weSBhbmQgc2VuZCBkaXJlY3RseVxuJiM0MztcdCAqIGZyb20gdGhlIHNrYiBkYXRhLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjdHgtXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFIHx8IGN0eC1cdTAwM2Vza2JzLnFsZW4gPT0gMSkge1xuJiM0MztcdFx0YnVmID0gY3R4LVx1MDAzZXNrYnMubmV4dC1cdTAwM2VkYXRhO1xuJiM0MztcbiYjNDM7XHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9GTEFUKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdFx0c2l6ZV90IHBvcyA9IDA7XG4mIzQzO1xuJiM0MztcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYikge1xuJiM0MztcdFx0XHRza2JfY29weV9iaXRzKHNrYiwgMCwgY3R4LVx1MDAzZWJ1ZiAmIzQzOyBwb3MsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRwb3MgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0YnVmID0gY3R4LVx1MDAzZWJ1ZjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY3R4LVx1MDAzZXR4LVx1MDAzZW9wcy5zZW5kKGN0eCwgYnVmLCBjdHgtXHUwMDNlbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcbiYjNDM7XHRpZiAoIWN0eClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmN0eC1cdTAwM2Vza2JzKSkgIT0gTlVMTClcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55X3JlYXNvbihza2IsIHJlYXNvbik7XG4mIzQzO1x0a2ZyZWUoY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCAqbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHR4X2N0eC1cdTAwM2V0eC1cdTAwM2Vwcml2O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2N0eF9wcml2KTtcbiYjNDM7XG4mIzQzOy8qIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgdHggXHUwMDI2IGNvbXBsZXRpb24gcGF0aCBpcyBxdWllc2NlZCAqL1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eClcbiYjNDM7e1xuJiM0MztcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LVx1MDAzZWN1cl9jdHgsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9maW5pKTtcbiYjNDM7XG4mIzQzOy8qIE1heCBzaXplIG9mIGEgc3Bhbm5lZCBUWC4gU2luY2Ugd2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBzcGFuIGJ1ZmZlciwgbGltaXRcbiYjNDM7ICogdGhlIHR4LXRpbWUgYWxsb2NhdGlvbnMgdG8gNGsuIExhcmdlciBwYWNrZXRzIHdpbGwgYmUgc2VudCBhcyBzaW5nbGVcbiYjNDM7ICogdHJhbnNmZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9TUEFOX01BWCA9IDQwOTYgLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqXG4mIzQzO21jdHBfdXNibGliX3R4X2N0eF9jcmVhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICBib29sIHNpbmdsZSlcbiYjNDM7e1xuJiM0MztcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUgdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHg7XG4mIzQzO1x0c2l6ZV90IHN6ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNpbmdsZSB8fCBza2ItXHUwMDNlbGVuIFx1MDAzZSBUWF9TUEFOX01BWCkge1xuJiM0MztcdFx0dHlwZSA9IFRYX1NJTkdMRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHlwZSA9IFRYX0ZMQVQ7XG4mIzQzO1x0XHRzeiA9IHR4LVx1MDAzZXNwYW4gPyBUWF9TUEFOX01BWCA6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjdHggPSBremFsbG9jX2ZsZXgoKmN0eCwgYnVmLCBzeiwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXR4ID0gdHg7XG4mIzQzO1x0Y3R4LVx1MDAzZWJ1Zl90eXBlID0gdHlwZTtcbiYjNDM7XHRjdHgtXHUwMDNlYnVmX2xlbiA9IHN6O1xuJiM0MztcdGN0eC1cdTAwM2VsZW4gPSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpO1xuJiM0MztcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjdHg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0Ym9vbCBvaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRpZiAob2spIHtcbiYjNDM7XHRcdC8qIE9ubHkgaW5jbHVkZSB0aGUgbmV0d29yay1sYXllciBkYXRhIGluIHR4IHN0YXRzOyB3ZSBrbm93XG4mIzQzO1x0XHQgKiB0aGF0IHRoZXJlIGlzIGEgNC1ieXRlIGhlYWRlciBwdXNoZWQgdG8gYWxsIHNrYnMgaW5cbiYjNDM7XHRcdCAqIHR4X3NrYl9wcmVwYXJlKClcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dTY0IG4gPSBjdHgtXHUwMDNlc2ticy5xbGVuO1xuJiM0MztcdFx0czY0IGxlbiA9IGN0eC1cdTAwM2VsZW4gLSAobiAqIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7XG4mIzQzO1xuJiM0MztcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfcGFja2V0cywgbik7XG4mIzQzO1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9ieXRlcywgbGVuKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfZHJvcHMsIGN0eC1cdTAwM2Vza2JzLnFsZW4pO1xuJiM0MztcdH1cbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb21wbGV0aW9uIGZvciB0aGUgLVx1MDAzZXNlbmQoKSBvcC4gVGhpcyB3aWxsIHVwZGF0ZSBuZXRkZXYgc3RhdHMgYW5kXG4mIzQzOyAqIGZyZWUgdGhlIHR4IGNvbnRleHQuXG4mIzQzOyAqXG4mIzQzOyAqIExpa2VseSBjYWxsZWQgZnJvbSAoYXRvbWljKSBVUkIgY29tcGxldGlvbiBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPVxuJiM0MztcdFx0b2sgPyBTS0JfQ09OU1VNRUQgOiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHR4X2N0eCwgZGV2LCBvayk7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUodHhfY3R4LCByZWFzb24pO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpO1xuJiM0MztcbiYjNDM7LyogUHJlcGFyZSBhIHNrYiBmb3IgcHVzaCgpXG4mIzQzOyAqXG4mIzQzOyAqIE9uIGVycm9yLCBwb3B1bGF0ZXMgQHJlYXNvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLFxuJiM0MztcdFx0XHRcdCAgICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uICpyZWFzb24pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBsZW4sIG1heF9sZW47XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xuJiM0MztcbiYjNDM7XHRwbGVuID0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRpZiAocGxlbiAmIzQzOyBzaXplb2YoKmhkcikgXHUwMDNlIG1heF9sZW4pIHtcbiYjNDM7XHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19CSUc7XG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKmhkcikpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbiYjNDM7XHRpZiAoIWhkcikge1xuJiM0MztcdFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGRyLVx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XG4mIzQzO1x0aGRyLVx1MDAzZWxlbiA9IGNwdV90b19iZTE2KHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFB1c2ggYSBuZXcgc2tiIHRvIHRoZSB0cmFuc2Zlci4gTWF5IHJlc3VsdCBpbiB6ZXJvIG9yIG1vcmUgY2FsbHMgdG9cbiYjNDM7ICogb3BzLVx1MDAzZXNlbmQoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGFrZXMgb3duZXJzaGlwIG9mIEBza2IsIGluY2x1ZGluZyBvbiBlcnJvci5cbiYjNDM7ICovXG4mIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4mIzQzO1x0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCwgKnNlbmRfY3R4ID0gTlVMTDtcbiYjNDM7XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247XG4mIzQzO1x0Y29uc3QgaW50IG1heF90cmllcyA9IDM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgdHJ5ID0gMSwgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc2tiLCB0eC1cdTAwM2VzcGFuLCBcdTAwMjZyZWFzb24pO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbiYjNDM7XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuJiM0MztcdFx0Lyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHhcbiYjNDM7XHRcdCAqIGlzIG5vdyBzZW5kYWJsZSAoaWUuOiAhbW9yZSkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNrYiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbiYjNDM7cmV0cnk6XG4mIzQzO1x0LyogVHJ5IGFuZCBxdWV1ZSB0byB0aGUgY3VycmVudCBjb250ZXh0LiBXZSBleGl0IHRoaXMgY3JpdGljYWwgc2VjdGlvblxuJiM0MztcdCAqIHdpdGggYSBmZXcgYml0cyBvZiBzdGF0ZTpcbiYjNDM7XHQgKiAgLSBzZW5kX2N0eDogaW5kaWNhdGluZyBhIHByaW9yIGNvbnRleHQgdGhhdCBuZWVkcyB0byBiZSBzZW50XG4mIzQzO1x0ICogIC0gc2tiOiBpbmRpY2F0aW5nIHRoYXQgYSBza2Igc3RpbGwgbmVlZHMgdG8gYmUgcXVldWVkL3NlbnRcbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0Y3R4ID0gdHgtXHUwMDNlY3VyX2N0eDtcbiYjNDM7XHRpZiAoY3R4KSB7XG4mIzQzO1x0XHRpZiAoc2tiKSB7XG4mIzQzO1x0XHRcdHJjID0gbWN0cF91c2JsaWJfdHhfYXBwZW5kKGN0eCwgc2tiKTtcbiYjNDM7XHRcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdFx0LyogY2FuJiMzOTt0IGFwcGVuZCB0byB0aGUgcGVuZGluZyB0eCAtIGRldGFjaCBmb3JcbiYjNDM7XHRcdFx0XHQgKiBzZW5kaW5nLCBhbmQgd2UmIzM5O2xsIGNyZWF0ZSBhIG5ldyB0eCBiZWxvdy5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHQvKiB3ZSBoYXZlIHF1ZXVlZCAqL1xuJiM0MztcdFx0XHRcdHNrYiA9IE5VTEw7XG4mIzQzO1x0XHRcdFx0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpXG4mIzQzO1x0XHRcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIGlmICghbW9yZSkge1xuJiM0MztcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmIChzZW5kX2N0eCkge1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKHNlbmRfY3R4KTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc2VuZF9jdHgsIGRldiwgZmFsc2UpO1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzZW5kX2N0eCwgcmVhc29uKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNlbmRfY3R4ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHdlIGhhdmUgZWl0aGVyIHF1ZXVlZCwgb3IgdGhlIHByZXBhcmUgZmFpbGVkOyBub3RoaW5nIG1vcmUgdG8gZG8gKi9cbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHR4LCBza2IsICFtb3JlKTtcbiYjNDM7XHRpZiAoIWN0eCkge1xuJiM0MztcdFx0bmV0ZGV2X2RiZyhkZXYsIFwmIzM0O1RYIGNvbnRleHQgY3JlYXRlIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGlmIHdlJiMzOTtyZSByZWFkeSB0byBzZW5kIG5vdywgbm8gbmVlZCB0byBlbnF1ZXVlICovXG4mIzQzO1x0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpIHtcbiYjNDM7XHRcdHJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChjdHgpO1xuJiM0MztcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpO1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoIXR4LVx1MDAzZWN1cl9jdHgpIHtcbiYjNDM7XHRcdHR4LVx1MDAzZWN1cl9jdHggPSBjdHg7XG4mIzQzO1x0XHRjdHggPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0Lyogd2UgbWF5IGhhdmUgbG9zdCB0aGUgcmFjZSB3aXRoIGEgY29uY3VycmVudCB0eDsgc2hvdWxkbiYjMzk7dCBoYXBwZW4sIGFzXG4mIzQzO1x0ICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW5cbiYjNDM7XHQgKiBmcm9tIHRoZSB0b3AsIGFzIHdlIG1heSBiZSBhYmxlIHRvIHF1ZXVlIHRoZSBza2IgdG8gdGhhdCBjb250ZXh0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjdHgpIHtcbiYjNDM7XHRcdC8qIHVubGluayB0aGUgbmV3IChzb2xlKSBza2IsIHdlIGRvbiYjMzk7dCB3YW50IGl0IGZyZWVkIHdpdGggY3R4ICovXG4mIzQzO1x0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpO1xuJiM0MztcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xuJiM0MztcdFx0aWYgKCYjNDM7JiM0Mzt0cnkgXHUwMDNlIG1heF90cmllcykge1xuJiM0MztcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTtcbiYjNDM7XG4mIzQzOy8qIENhbmNlbCBhIHR4OiBhbnkgdW4tc2VudCBjb250ZXh0IGlzIHJlbGVhc2VkLiAqL1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHggPSBOVUxMO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIGN0eCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY2FuY2VsKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SmVyZW15IEtlcnIgXHUwMDNjamtAY29kZWNvbnN0cnVjdC5jb20uYXVcdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnlcJiMzNDspO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUKVxuJiM0MzsjaW5jbHVkZSBcJiMzNDttY3RwLXVzYmxpYi10ZXN0LmNcJiMzNDtcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbmluZGV4IGEyZjZmMWUwNGVmYmQwLi40YmIwNGEzNzExMDUwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbkBAIC0yLDcgJiM0MzsyLDcgQEBcbiAvKlxuICAqIG1jdHAtdXNiLmggLSBNQ1RQIFVTQiB0cmFuc3BvcnQgYmluZGluZzogY29tbW9uIGRlZmluaXRpb25zLFxuICAqIGJhc2VkIG9uIERNVEYwMjgzIHNwZWNpZmljYXRpb246XG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXG4mIzQzOyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4gICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0XG4gICogYW5kIGdhZGdldCBkcml2ZXJzLlxuQEAgLTEzLDE4ICYjNDM7MTMsOTYgQEBcbiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcbiAjZGVmaW5lIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4mIzQzOy8qXG4mIzQzOyAqIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0IGhlYWRlci4gRFNQMDI4MyB2MS4wIGhhcyBhbiA4LWJpdCBsZW5ndGggZmllbGRcbiYjNDM7ICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnlcbiYjNDM7ICogMyByZXNlcnZlZCBiaXRzKS4gV2UgdXNlIGEgYmUxNiBmb3Igb3VyIGxlbmd0aCB0byBoYW5kbGUgdGhlIGxhcmdlciB2MS4xXG4mIzQzOyAqIHJlcHJlc2VudGF0aW9uLCBhbmQgbWFzayBhcyBhcHByb3ByaWF0ZS5cbiYjNDM7ICovXG4gc3RydWN0IG1jdHBfdXNiX2hkciB7XG4gXHRfX2JlMTZcdGlkO1xuLVx0dThcdHJzdmQ7XG4tXHR1OFx0bGVuO1xuJiM0MztcdF9fYmUxNlx0bGVuO1xuIH0gX19wYWNrZWQ7XG4gXG4tI2RlZmluZSBNQ1RQX1VTQl9YRkVSX1NJWkVcdDUxMlxuJiM0MzsvKiBtYXggdHJhbnNmZXIgc2l6ZSBmb3IgRFNQMDI4MyB2MS4wICovXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX1hGRVJfU0laRVx0NTEyXG4gI2RlZmluZSBNQ1RQX1VTQl9CVFVcdFx0NjhcbiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU5cdE1DVFBfVVNCX0JUVVxuLSNkZWZpbmUgTUNUUF9VU0JfTVRVX01BWFx0KFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcbiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWFx0VThfTUFYXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX01UVV9NQVhcdChNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcbiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWFx0R0VOTUFTSygxMiwgMClcbiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzFfTVRVX01BWFx0KE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKVxuICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRFx0MHgxYWI0XG4gXG4mIzQzOy8qIG1jdHAtdXNibGliICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSWCBoYW5kbGU6IGRyaXZlcnMgd2lsbCB0eXBpY2FsbHkgY3JlYXRlIG9uZSBvbiBpbml0LCB3aGljaCBwZXJzaXN0cyBmb3JcbiYjNDM7ICogdGhlIGxpZmUgb2YgdGhlIGRyaXZlci4gVGhlIHNhbWUgaGFuZGxlIGlzIHVzZWQgZm9yIHByb2dyZXNzaXZlXG4mIzQzOyAqIHByZXBhcmUgLVx1MDAzZSBjb21wbGV0ZSBvcGVyYXRpb25zIChmb3IgZWFjaCBpbmNvbWluZyBVU0IgdHJhbnNmZXIpLCB3aGljaFxuJiM0MzsgKiByZXN1bHQgaW4gbmV0aWZfcngoKS1pbmcgdGhlIE1DVFAgcGFja2V0cyByZWNlaXZlZFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3J4IHtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHUxNiBlcF9wa3RsZW47XG4mIzQzO1x0Ym9vbCBzcGFuO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xuJiM0MztcbiYjNDM7aW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCxcbiYjNDM7XHRcdFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKTtcbiYjNDM7XG4mIzQzO2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbik7XG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRYIGhhbmRsZTogY3JlYXRlZCBieSBtY3RwX3VzYmxpYl90eF9wdXNoKCkgZHVyaW5nIHRoZSB0eCBwYXRoLCBhbmRcbiYjNDM7ICogbWF5IHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlIHBhY2tldCB0cmFuc21pdHMuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4O1xuJiM0MztcbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XG4mIzQzO1x0LyogU3RhcnQgYSBVU0IgVFggZm9yIEBkYXRhLiBPbiByZXR1cm5pbmcgc3VjY2VzcywgdGhlIGltcGxlbWVudGF0aW9uXG4mIzQzO1x0ICogbXVzdCBhcnJhbmdlIGZvciBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKCkgdG8gYmUgY2FsbGVkIGF0IHNvbWVcbiYjNDM7XHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50ICgqc2VuZCkoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90eCB7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4mIzQzO1x0dm9pZCAqcHJpdjtcbiYjNDM7XHRib29sIHNwYW47XG4mIzQzO1x0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4mIzQzO1x0LyogY29udGV4dCB0byB3aGljaCB3ZSBhcmUgYWRkaW5nIHBhY2tldHMsIGNsZWFyZWQgb24gc2VuZCAqL1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XG4mIzQzO307XG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbiYjNDM7XHRcdFx0IGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgKm9wcywgdm9pZCAqcHJpdixcbiYjNDM7XHRcdFx0IGJvb2wgc3Bhbik7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcbiYjNDM7XG4mIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCk7XG4mIzQzO1xuJiM0MztpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuJiM0MztcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xuJiM0MztcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spO1xuJiM0MztcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbiYjNDM7XG4gI2VuZGlmIC8qICBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9pbml0JiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2ZpbmkmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jYW5jZWwmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfaW5pdCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9maW5pJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgKG1jdHAtdXNibGliKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNQ1RQIFVTQiBkcml2ZXIgdG8gdXNlIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGFuZCBoYW5kbGVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTNiOTZlYjk2NDUzYTIwNDRkZGEzNzEzZjU4YmY2YTk4ODAyOGIzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDA4OjUzOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnCmluZGV4IGNmMzI1YWIwYjFlZjU1Li5jNDBhYzljNjY1Yjc1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZwpAQCAtNDcsOSAmIzQzOzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0MKIAkgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXMKIAkgIGhhdmluZyBhICYjMzQ7bWN0cC1jb250cm9sbGVyJiMzNDsgZGV2aWNldHJlZSBwcm9wZXJ0eS4KIAomIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKJiM0MzsJdHJpc3RhdGUgJiMzNDtNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBVU0IKJiM0MzsJaGVscAomIzQzOwkgIENvbW1vbiBwcm90b2NvbCBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0CiYjNDM7CSAgaW1wbGVtZW50YXRpb25zLCBzdWl0YWJsZSBmb3IgdXNlIGluIGVpdGhlciBob3N0LSBvciBnYWRnZXQtc2lkZQomIzQzOwkgIHRyYW5zcG9ydCBkcml2ZXIKJiM0MzsKJiM0MzsJICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLgomIzQzOwomIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVAomIzQzOyAgICAgICAgYm9vbCAmIzM0O01DVFAgdXNibGliIHRlc3RzJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUUwomIzQzOyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSAmYW1wOyZhbXA7IEtVTklUPXkKJiM0MzsgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTCiYjNDM7CiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCCiAJdHJpc3RhdGUgJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnQmIzM0OwogCWRlcGVuZHMgb24gVVNCCiYjNDM7CXNlbGVjdCBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKIAloZWxwCiAJICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgVVNCIHRyYW5zcG9ydCwKIAkgIGRlZmluZWQgYnkgRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyODMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQppbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQpAQCAtMiwzICYjNDM7Miw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm8KIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JMkMpICYjNDM7PSBtY3RwLWkyYy5vCiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSAmIzQzOz0gbWN0cC1pM2Mubwogb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgJiM0Mzs9IG1jdHAtdXNiLm8KJiM0MztvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCKSAmIzQzOz0gbWN0cC11c2JsaWIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jCmluZGV4IGZhZGU2NWYyZjI2OTk1Li41NDJhNTcwYzc2Y2M5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYwpAQCAtMyw5ICYjNDM7Myw5IEBACiAgKiBtY3RwLXVzYi5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgYmluZGluZyBkcml2ZXIuCiAgKgogICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6Ci0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGYKJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGYKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBDb2RlIENvbnN0cnVjdCBQdHkgTHRkCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKQEAgLTIyLDk1ICYjNDM7MjIsMTE1IEBACiBzdHJ1Y3QgbWN0cF91c2IgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiYjNDM7CWJvb2wgc3BhbjsKIAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKIAl1OCBlcF9pbjsKIAl1OCBlcF9vdXQ7CiAKLQlzdHJ1Y3QgdXJiICp0eF91cmI7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDsKIAlzdHJ1Y3QgdXJiICpyeF91cmI7CiYjNDM7CWludCBpbl9lcnJfY291bnQ7CiYjNDM7CWludCBpbl9lcnJfb3JpZzsKJiM0MzsJYm9vbCBjbGVhcl9oYWx0OwogCiAJLyogZW5mb3JjZXMgYXRvbWljIGFjY2VzcyB0byByeF9zdG9wcGVkIGFuZCByZXF1ZXVpbmcgdGhlIHJldHJ5IHdvcmsgKi8KIAlzcGlubG9ja190IHJ4X2xvY2s7CiAJYm9vbCByeF9zdG9wcGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcnhfcmV0cnlfd29yazsKJiM0MzsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4IHR4OwomIzQzOwlzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7CiYjNDM7CS8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi8KJiM0MzsJc3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7CiYjNDM7CWludCB0eF9xbWVtOwomIzQzO307CiYjNDM7CiYjNDM7ZW51bSB7CiYjNDM7CU1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLAomIzQzOwlNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMiwKIH07CiAKJiM0MzsvKiBXZSB1c2UgYSB0b3RhbC1zaXplIGxpbWl0IGZvciBvdXRzdGFuZGluZyBVUkJzLCBhcyB0aGUgdHJhbnNmZXIgY291bnRzCiYjNDM7ICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSwKJiM0MzsgKiB0aGlzIHdpbGwgYWxsb3cgZm9yIGEgY291cGxlIG9mIG1heC1zaXplZCB0cmFuc2ZlcnMgdG8gYmUgaW4gZmxpZ2h0LiBJbgomIzQzOyAqIG5vbi1zcGFubmluZyBtb2RlLCAzMi4KJiM0MzsgKgomIzQzOyAqIFdlIHdhbnQgdG8gYXZvaWQgZGlzYWJsaW5nIHRoZSB0eCBxdWV1ZSBpZiBwb3NzaWJsZTsgZG9pbmcgc28gd2lsbCBlbmQgdXAKJiM0MzsgKiByZXF1ZXVlaW5nIHRvIGdzb19za2IsIGFuZCB3ZSBvbmx5IGRlcXVldWUgZnJvbSB0aGF0IG9uZSBza2IgYXQgYSB0aW1lLAomIzQzOyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfUU1FTV9NQVggPSAxNjM4NDsKJiM0MzsKIHN0YXRpYyB2b2lkIG1jdHBfdXNiX291dF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0mZ3Q7Y29udGV4dDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLSZndDtkZXY7Ci0JaW50IHN0YXR1czsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4ID0gdXJiLSZndDtjb250ZXh0OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTsKJiM0MzsJdW5zaWduZWQgaW50IGxlbiA9IHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLSZndDtuZXRkZXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKJiM0MzsJbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5ldGRldiwgdXJiLSZndDtzdGF0dXMgPT0gMCk7CiAKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVTSFVURE9XTjoKLQljYXNlIC1FUFJPVE86Ci0JCWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZXRkZXYpOwotCQlicmVhazsKLQljYXNlIDA6Ci0JCWRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLSZndDtsZW4pOwotCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Ci0JCWNvbnN1bWVfc2tiKHNrYik7Ci0JCXJldHVybjsKLQlkZWZhdWx0OgotCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDt1bmV4cGVjdGVkIHR4IHVyYiBzdGF0dXM6ICVkXG4mIzM0Oywgc3RhdHVzKTsKLQkJZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7Ci0JfQomIzQzOwl1c2JfZnJlZV91cmIodXJiKTsKIAotCWtmcmVlX3NrYihza2IpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWN0cF91c2ItJmd0O3R4X3FtZW0gLT0gbGVuOwomIzQzOwlpZiAobWN0cF91c2ItJmd0O3R4X3FtZW0gJmx0OyBUWF9RTUVNX01BWCAmYW1wOyZhbXA7IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LAomIzQzOwkJCSAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjsKLQl1bnNpZ25lZCBpbnQgcGxlbjsKJiM0MzsJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHVyYiAqdXJiOwogCWludCByYzsKIAotCXBsZW4gPSBza2ItJmd0O2xlbjsKLQotCWlmIChwbGVuICYjNDM7IHNpemVvZigqaGRyKSAmZ3Q7IE1DVFBfVVNCX1hGRVJfU0laRSkKLQkJZ290byBlcnJfZHJvcDsKLQotCXJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2Ryb3A7Ci0KLQloZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7Ci0JaWYgKCFoZHIpCi0JCWdvdG8gZXJyX2Ryb3A7Ci0KLQloZHItJmd0O2lkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7Ci0JaGRyLSZndDtyc3ZkID0gMDsKLQloZHItJmd0O2xlbiA9IHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpOwotCi0JdXJiID0gbWN0cF91c2ItJmd0O3R4X3VyYjsKJiM0MzsJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCF1cmIpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAogCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItJmd0O3VzYmRldiwKIAkJCSAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLSZndDt1c2JkZXYsIG1jdHBfdXNiLSZndDtlcF9vdXQpLAotCQkJICBza2ItJmd0O2RhdGEsIHNrYi0mZ3Q7bGVuLAotCQkJICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7CiYjNDM7CQkJICBkYXRhLCBsZW4sIG1jdHBfdXNiX291dF9jb21wbGV0ZSwgdHhfY3R4KTsKJiM0MzsKJiM0MzsJaWYgKG1jdHBfdXNiLSZndDtzcGFuKQomIzQzOwkJdXJiLSZndDt0cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7CiYjNDM7CiYjNDM7CXVzYl9hbmNob3JfdXJiKHVyYiwgJmFtcDttY3RwX3VzYi0mZ3Q7dHhfYW5jaG9yKTsKIAotCS8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi8KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyYykgewotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCWdvdG8gZXJyX2Ryb3A7CiYjNDM7CQluZXRkZXZfZGJnKG1jdHBfdXNiLSZndDtuZXRkZXYsICYjMzQ7VFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXG4mIzM0OywgcmMpOwomIzQzOwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwomIzQzOwkJdXNiX2ZyZWVfdXJiKHVyYik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKJiM0MzsJCW1jdHBfdXNiLSZndDt0eF9xbWVtICYjNDM7PSBsZW47CiYjNDM7CQlpZiAobWN0cF91c2ItJmd0O3R4X3FtZW0gJmd0Oz0gVFhfUU1FTV9NQVgpCiYjNDM7CQkJbmV0aWZfc3RvcF9xdWV1ZShtY3RwX3VzYi0mZ3Q7bmV0ZGV2KTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDttY3RwX3VzYi0mZ3Q7dHhfcW1lbV9sb2NrLCBmbGFncyk7CiAJfQogCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7CiYjNDM7CS5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWJvb2wgbW9yZSA9IG5ldGRldl94bWl0X21vcmUoKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfcHVzaChkZXYsICZhbXA7bWN0cF91c2ItJmd0O3R4LCBza2IsIG1vcmUpOwogCi1lcnJfZHJvcDoKLQlkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTsKLQlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0xMjUsMjQgJiM0MzsxNDUsMjMgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7CiBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CXZvaWQgKmJ1ZjsKIAlpbnQgcmM7CiAKLQlza2IgPSBfX25ldGRldl9hbGxvY19za2IobWN0cF91c2ItJmd0O25ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApOwotCWlmICghc2tiKSB7Ci0JCXJjID0gLUVOT01FTTsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLSZndDtuZXRkZXYsICZhbXA7bWN0cF91c2ItJmd0O3J4LAomIzQzOwkJCQkgICAgJmFtcDtidWYsICZhbXA7bGVuLCBnZnApOwomIzQzOwlpZiAocmMpCiAJCWdvdG8gZXJyX3JldHJ5OwotCX0KIAogCXVzYl9maWxsX2J1bGtfdXJiKG1jdHBfdXNiLSZndDtyeF91cmIsIG1jdHBfdXNiLSZndDt1c2JkZXYsCiAJCQkgIHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi0mZ3Q7dXNiZGV2LCBtY3RwX3VzYi0mZ3Q7ZXBfaW4pLAotCQkJICBza2ItJmd0O2RhdGEsIE1DVFBfVVNCX1hGRVJfU0laRSwKLQkJCSAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7CiYjNDM7CQkJICBidWYsIGxlbiwgbWN0cF91c2JfaW5fY29tcGxldGUsIG1jdHBfdXNiKTsKIAogCXJjID0gdXNiX3N1Ym1pdF91cmIobWN0cF91c2ItJmd0O3J4X3VyYiwgZ2ZwKTsKIAlpZiAocmMpIHsKIAkJbmV0ZGV2X2RiZyhtY3RwX3VzYi0mZ3Q7bmV0ZGV2LCAmIzM0O3J4IHVyYiBzdWJtaXQgZmFpbHVyZTogJWRcbiYjMzQ7LCByYyk7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKIAkJaWYgKHJjID09IC1FTk9NRU0pCiAJCQlnb3RvIGVycl9yZXRyeTsKIAl9CkBAIC0xNTcsMTQgJiM0MzsxNzYsMzQgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ4X2Vycl9tYXggPSAxMDsKJiM0MzsKJiM0MzsvKiBSZXR1cm5zIC0xIGlmIHdlIGhhdmUgaGl0IGV4Y2Vzc2l2ZSBlcnJvcnMsIHplcm8gb3RoZXJ3aXNlLiAqLwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JfaW5fdXJiX2VycihzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBpbnQgc3RhdHVzLAomIzQzOwkJCSAgICAgICBib29sIHN0YWxsZWQpCiYjNDM7ewomIzQzOwltY3RwX3VzYmxpYl9yeF9jYW5jZWwoJmFtcDttY3RwX3VzYi0mZ3Q7cngpOwomIzQzOwomIzQzOwlpZiAoIW1jdHBfdXNiLSZndDtpbl9lcnJfY291bnQmIzQzOyYjNDM7KQomIzQzOwkJbWN0cF91c2ItJmd0O2luX2Vycl9vcmlnID0gc3RhdHVzOwomIzQzOwomIzQzOwlpZiAobWN0cF91c2ItJmd0O2luX2Vycl9jb3VudCAmZ3Q7PSByeF9lcnJfbWF4KSB7CiYjNDM7CQluZXRkZXZfZXJyKG1jdHBfdXNiLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtleGNlc3NpdmUgZXJyb3JzIGZyb20lcyBJTiBFUCwgZmlyc3Q6ICVkXG4mIzM0OywKJiM0MzsJCQkgICBzdGFsbGVkID8gJiMzNDsgKHN0YWxsZWQpJiMzNDsgOiAmIzM0OyYjMzQ7LAomIzQzOwkJCSAgIG1jdHBfdXNiLSZndDtpbl9lcnJfb3JpZyk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCBza19idWZmICpza2IgPSB1cmItJmd0O2NvbnRleHQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi0mZ3Q7ZGV2OwotCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQlpbnQgc3RhdHVzOwomIzQzOwlzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gdXJiLSZndDtjb250ZXh0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbWN0cF91c2ItJmd0O25ldGRldjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJaW50IHJjLCBzdGF0dXM7CiAKIAlzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKIApAQCAtMTcyLDgwICYjNDM7MjExLDQzIEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRUNPTk5SRVNFVDoKIAljYXNlIC1FU0hVVERPV046Ci0JY2FzZSAtRVBST1RPOgotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOwotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxuJiMzNDssIHN0YXR1cyk7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJLyogZGV2aWNlIHNodXRkb3duLCBkb24mIzM5O3QgcmVzdWJtaXQgKi8KJiM0MzsJCW1jdHBfdXNibGliX3J4X2NhbmNlbCgmYW1wO21jdHBfdXNiLSZndDtyeCk7CiAJCXJldHVybjsKLQl9Ci0KLQlsZW4gPSB1cmItJmd0O2FjdHVhbF9sZW5ndGg7Ci0JX19za2JfcHV0KHNrYiwgbGVuKTsKLQotCXdoaWxlIChza2IpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMOwotCQlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7Ci0JCXU4IHBrdF9sZW47IC8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgbm8gVVNCIGhlYWRlciAqLwotCi0JCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCWhkciA9IHNrYl9wdWxsX2RhdGEoc2tiLCBzaXplb2YoKmhkcikpOwotCQlpZiAoIWhkcikKLQkJCWJyZWFrOwotCi0JCWlmIChiZTE2X3RvX2NwdShoZHItJmd0O2lkKSAhPSBNQ1RQX1VTQl9ETVRGX0lEKSB7Ci0JCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtyeDogaW52YWxpZCBpZCAlMDR4XG4mIzM0OywKLQkJCQkgICBiZTE2X3RvX2NwdShoZHItJmd0O2lkKSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChoZHItJmd0O2xlbiAmbHQ7Ci0JCSAgICBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpIHsKLQkJCW5ldGRldl9kYmcobmV0ZGV2LCAmIzM0O3J4OiBzaG9ydCBwYWNrZXQgKGhkcikgJWRcbiYjMzQ7LAotCQkJCSAgIGhkci0mZ3Q7bGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogd2Uga25vdyB3ZSBoYXZlIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSBoZXJlICovCi0JCXBrdF9sZW4gPSBoZHItJmd0O2xlbiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTsKLQkJaWYgKHBrdF9sZW4gJmd0OyBza2ItJmd0O2xlbikgewotCQkJbmV0ZGV2X2RiZyhuZXRkZXYsCi0JCQkJICAgJiMzNDtyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXG4mIzM0OywKLQkJCQkgICBoZHItJmd0O2xlbiwgc2tiLSZndDtsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAocGt0X2xlbiAmbHQ7IHNrYi0mZ3Q7bGVuKSB7Ci0JCQkvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3Ci0JCQkgKiBza2IgdG8gdXNlIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgotCQkJICovCi0JCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoc2tiMikgewotCQkJCWlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHsKLQkJCQkJa2ZyZWVfc2tiKHNrYjIpOwotCQkJCQlza2IyID0gTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlza2JfdHJpbShza2IsIHBrdF9sZW4pOwotCQl9CiAKLQkJZGV2X2RzdGF0c19yeF9hZGQobmV0ZGV2LCBza2ItJmd0O2xlbik7CiYjNDM7CWNhc2UgLUVQSVBFOgomIzQzOwkJLyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqLwomIzQzOwkJcmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIHRydWUpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybjsKJiM0MzsKJiM0MzsJCW1jdHBfdXNiLSZndDtjbGVhcl9oYWx0ID0gdHJ1ZTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bWN0cF91c2ItJmd0O3J4X2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmICghbWN0cF91c2ItJmd0O3J4X3N0b3BwZWQpCiYjNDM7CQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bWN0cF91c2ItJmd0O3J4X3JldHJ5X3dvcmssCiYjNDM7CQkJCQkgICAgICBSWF9SRVRSWV9ERUxBWSk7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bWN0cF91c2ItJmd0O3J4X2xvY2ssIGZsYWdzKTsKJiM0MzsJCXJldHVybjsKIAotCQlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7Ci0JCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCQljYiA9IF9fbWN0cF9jYihza2IpOwotCQljYi0mZ3Q7aGFsZW4gPSAwOwotCQluZXRpZl9yeChza2IpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxuJiMzNDssIHN0YXR1cyk7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSAtRVRJTUU6CiYjNDM7CWNhc2UgLUVQUk9UTzoKJiM0MzsJY2FzZSAtRUlMU0VROgomIzQzOwljYXNlIC1FT1ZFUkZMT1c6CiYjNDM7CQkvKiBwb3NzaWJseSB0cmFuc2llbnQ7IHJlY29yZCBmaXJzdCBmYWlsdXJlLCByZXN1Ym1pdCAqLwomIzQzOwkJcmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIGZhbHNlKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQlicmVhazsKIAotCQlza2IgPSBza2IyOwomIzQzOwljYXNlIDA6CiYjNDM7CQltY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsICZhbXA7bWN0cF91c2ItJmd0O3J4LCB1cmItJmd0O2FjdHVhbF9sZW5ndGgpOwomIzQzOwkJbWN0cF91c2ItJmd0O2luX2Vycl9jb3VudCA9IDA7CiYjNDM7CQlicmVhazsKIAl9CiAKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKLQogCW1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfQVRPTUlDKTsKIH0KIApAQCAtMjUzLDYgJiM0MzsyNTUsMzAgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfcnhfcmV0cnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWN0cF91c2IsCiAJCQkJCQkgcnhfcmV0cnlfd29yay53b3JrKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovCiYjNDM7CWlmIChtY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCkgewomIzQzOwkJaW50IHBpcGUgPSB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItJmd0O3VzYmRldiwgbWN0cF91c2ItJmd0O2VwX2luKTsKJiM0MzsKJiM0MzsJCXJjID0gdXNiX2NsZWFyX2hhbHQobWN0cF91c2ItJmd0O3VzYmRldiwgcGlwZSk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG1jdHBfdXNiLSZndDtuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7Y2FuJiMzOTt0IGNsZWFyIElOIEVQIGhhbHQ6ICVkXG4mIzM0OywgcmMpOwomIzQzOwomIzQzOwkJCWlmICgmIzQzOyYjNDM7bWN0cF91c2ItJmd0O2luX2Vycl9jb3VudCAmZ3Q7PSByeF9lcnJfbWF4KQomIzQzOwkJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3RwX3VzYi0mZ3Q7cnhfbG9jaywgZmxhZ3MpOwomIzQzOwkJCWlmICghbWN0cF91c2ItJmd0O3J4X3N0b3BwZWQpCiYjNDM7CQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO21jdHBfdXNiLSZndDtyeF9yZXRyeV93b3JrLAomIzQzOwkJCQkJCSAgICAgIFJYX1JFVFJZX0RFTEFZKTsKJiM0MzsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bWN0cF91c2ItJmd0O3J4X2xvY2ssIGZsYWdzKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQltY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCA9IGZhbHNlOwomIzQzOwl9CiAKIAltY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7CiB9CkBAIC0yNjIsNiAmIzQzOzI4OCw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJV1JJVEVfT05DRShtY3RwX3VzYi0mZ3Q7cnhfc3RvcHBlZCwgZmFsc2UpOwomIzQzOwltY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCA9IGZhbHNlOwomIzQzOwltY3RwX3VzYi0mZ3Q7aW5fZXJyX2NvdW50ID0gMDsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKQEAgLTI4NCw3ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO21jdHBfdXNiLSZndDtyeF9yZXRyeV93b3JrKTsKIAogCXVzYl9raWxsX3VyYihtY3RwX3VzYi0mZ3Q7cnhfdXJiKTsKLQl1c2Jfa2lsbF91cmIobWN0cF91c2ItJmd0O3R4X3VyYik7CiYjNDM7CiYjNDM7CXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmFtcDttY3RwX3VzYi0mZ3Q7dHhfYW5jaG9yKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3R4LCBkZXYsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFkpOwomIzQzOwltY3RwX3VzYmxpYl9yeF9jYW5jZWwoJmFtcDttY3RwX3VzYi0mZ3Q7cngpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEsNyAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAJZGV2LSZndDttdHUgPSBNQ1RQX1VTQl9NVFVfTUlOOwogCWRldi0mZ3Q7bWluX210dSA9IE1DVFBfVVNCX01UVV9NSU47Ci0JZGV2LSZndDttYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDsKJiM0MzsJZGV2LSZndDttYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7CiAKIAlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTsKIAlkZXYtJmd0O3R4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOOwpAQCAtMzE3LDYgJiM0MzszNDksNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbWN0cF91c2IgKmRldjsKJiM0MzsJYm9vbCBzcGFuOwogCWludCByYzsKIAogCS8qIG9ubHkgb25lIGFsdGVybmF0ZSAqLwpAQCAtMzI4LDYgJiM0MzszNjEsOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXNwYW4gPSBpZmFjZV9kZXNjLSZndDtkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOOwomIzQzOwogCW5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksICYjMzQ7bWN0cHVzYiVkJiMzNDssIE5FVF9OQU1FX0VOVU0sCiAJCQkgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApOwogCWlmICghbmV0ZGV2KQpAQCAtMzM1LDMzICYjNDM7MzcwLDQ2IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZhbXA7aW50Zi0mZ3Q7ZGV2KTsKIAlkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlkZXYtJmd0O3NwYW4gPSBzcGFuOwogCWRldi0mZ3Q7bmV0ZGV2ID0gbmV0ZGV2OwogCWRldi0mZ3Q7dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlkZXYtJmd0O2ludGYgPSBpbnRmOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDtyeF9sb2NrKTsKJiM0MzsJaWYgKGRldi0mZ3Q7c3BhbikKJiM0MzsJCW5ldGRldi0mZ3Q7bWF4X210dSA9IE1DVFBfVVNCXzFfMV9NVFVfTUFYOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2Rldi0mZ3Q7dHhfcW1lbV9sb2NrKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CiAKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KCZhbXA7ZGV2LSZndDtyeCwgbGUxNl90b19jcHUoZXBfaW4tJmd0O3dNYXhQYWNrZXRTaXplKSwKJiM0MzsJCQkJIGRldi0mZ3Q7c3Bhbik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OwomIzQzOwltY3RwX3VzYmxpYl90eF9pbml0KCZhbXA7ZGV2LSZndDt0eCwgJmFtcDt0eF9vcHMsIGRldiwgZGV2LSZndDtzcGFuKTsKJiM0MzsJaW5pdF91c2JfYW5jaG9yKCZhbXA7ZGV2LSZndDt0eF9hbmNob3IpOwomIzQzOwogCWRldi0mZ3Q7ZXBfaW4gPSBlcF9pbi0mZ3Q7YkVuZHBvaW50QWRkcmVzczsKIAlkZXYtJmd0O2VwX291dCA9IGVwX291dC0mZ3Q7YkVuZHBvaW50QWRkcmVzczsKIAotCWRldi0mZ3Q7dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlkZXYtJmd0O3J4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtJmd0O3R4X3VyYiB8fCAhZGV2LSZndDtyeF91cmIpIHsKJiM0MzsJaWYgKCFkZXYtJmd0O3J4X3VyYikgewogCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2ZyZWVfdXJiczsKJiM0MzsJCWdvdG8gZXJyX2Zpbmlfcnh0eDsKIAl9CiAKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO2Rldi0mZ3Q7cnhfcmV0cnlfd29yaywgbWN0cF91c2JfcnhfcmV0cnlfd29yayk7CiAKIAlyYyA9IG1jdHBfcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfVVNCKTsKIAlpZiAocmMpCi0JCWdvdG8gZXJyX2ZyZWVfdXJiczsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfdXJiOwogCiAJcmV0dXJuIDA7CiAKLWVycl9mcmVlX3VyYnM6Ci0JdXNiX2ZyZWVfdXJiKGRldi0mZ3Q7dHhfdXJiKTsKJiM0MztlcnJfZnJlZV91cmI6CiAJdXNiX2ZyZWVfdXJiKGRldi0mZ3Q7cnhfdXJiKTsKJiM0MztlcnJfZmluaV9yeHR4OgomIzQzOwltY3RwX3VzYmxpYl90eF9maW5pKCZhbXA7ZGV2LSZndDt0eCk7CiYjNDM7CW1jdHBfdXNibGliX3J4X2ZpbmkoJmFtcDtkZXYtJmd0O3J4KTsKJiM0MztlcnJfZnJlZV9uZXRkZXY6CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0zNzEsMTMgJiM0Mzs0MTksMTUgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIAlzdHJ1Y3QgbWN0cF91c2IgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKIAltY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KGRldi0mZ3Q7bmV0ZGV2KTsKLQl1c2JfZnJlZV91cmIoZGV2LSZndDt0eF91cmIpOwomIzQzOwltY3RwX3VzYmxpYl9yeF9maW5pKCZhbXA7ZGV2LSZndDtyeCk7CiYjNDM7CW1jdHBfdXNibGliX3R4X2ZpbmkoJmFtcDtkZXYtJmd0O3R4KTsKIAl1c2JfZnJlZV91cmIoZGV2LSZndDtyeF91cmIpOwogCWZyZWVfbmV0ZGV2KGRldi0mZ3Q7bmV0ZGV2KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1jdHBfdXNiX2RldmljZXNbXSA9IHsKLQl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgMHgwLCAweDEpIH0sCiYjNDM7CXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCBNQ1RQX1VTQl9TVUJDTEFTU19CQVNFLCAweDEpIH0sCiYjNDM7CXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOLCAweDEpIH0sCiAJeyAwIH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45ZGY0MDFhOTE0ZmY1MwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDQxMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBtY3RwLXVzYmxpYi10ZXN0LmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeSwKJiM0MzsgKiB1bml0IHRlc3QgZGVmaW5pdGlvbnMuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZAomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7a3VuaXQvdGVzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21jdHAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21jdHBkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNiL21jdHAtdXNiLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBtY3RwX2RldiAqbWRldjsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9wa3RzOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4IHsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7CiYjNDM7CXN0cnVjdCBtY3RwX3JvdXRlIHJ0OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNibGliX2Rldl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CS8qIHdlIGRvbiYjMzk7dCB0cmFjayBhbnkgVFhlZCBwYWNrZXRzIGF0IHByZXNlbnQgKi8KJiM0MzsJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF90ZXN0X25ldGRldl9vcHMgPSB7CiYjNDM7CS5uZG9fc3RhcnRfeG1pdCA9IG1jdHBfdXNibGliX2Rldl90eCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCB1MTYgZXBfbWF4cGFja2V0ID0gNTEyOwomIzQzO3N0YXRpYyBjb25zdCBtY3RwX2VpZF90IGxvY2FsX2VpZCA9IDg7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJbmRldi0mZ3Q7dHlwZSA9IEFSUEhSRF9NQ1RQOwomIzQzOwluZGV2LSZndDttdHUgPSA4MTkyOwomIzQzOwluZGV2LSZndDtmbGFncyA9IElGRl9OT0FSUDsKJiM0MzsJbmRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bWN0cF90ZXN0X25ldGRldl9vcHM7CiYjNDM7CW5kZXYtJmd0O25lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTsKJiM0MzsJbmRldi0mZ3Q7cGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX0RTVEFUUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9kZXZfYWN0aW9uKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IGRhdGE7CiYjNDM7CiYjNDM7CXNrYl9xdWV1ZV9wdXJnZSgmYW1wO2Rldi0mZ3Q7cnhfcGt0cyk7CiYjNDM7CWlmIChkZXYtJmd0O21kZXYpCiYjNDM7CQltY3RwX2Rldl9wdXQoZGV2LSZndDttZGV2KTsKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LSZndDtuZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqCiYjNDM7bWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwluZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgJiMzNDttY3RwdGVzdCVkJiMzNDssIE5FVF9OQU1FX0VOVU0sCiYjNDM7CQkJICAgIG1jdHBfdXNibGliX2Rldl9zZXR1cCk7CiYjNDM7CWlmICghbmRldikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJZGV2LSZndDtuZGV2ID0gbmRldjsKJiM0MzsJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO2Rldi0mZ3Q7cnhfcGt0cyk7CiYjNDM7CiYjNDM7CXJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWZyZWVfbmV0ZGV2KG5kZXYpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbiwgZGV2KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZGV2LSZndDttZGV2ID0gX19tY3RwX2Rldl9nZXQobmRldik7CiYjNDM7CWlmIChkZXYtJmd0O21kZXYpCiYjNDM7CQlkZXYtJmd0O21kZXYtJmd0O25ldCA9IG1jdHBfZGVmYXVsdF9uZXQoZGV2X25ldChuZGV2KSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7bWRldikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJcmMgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBkZXY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYoc2tiLSZndDtkZXYpOwomIzQzOwomIzQzOwlza2JfcXVldWVfdGFpbCgmYW1wO2Rldi0mZ3Q7cnhfcGt0cywgc2tiKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24odm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4ID0gZGF0YTsKJiM0MzsKJiM0MzsJLyogVGhlIGRldmljZSB3aWxsIGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIC0mZ3Q7cnQgd2lsbCBiZSB1bmxpbmtlZC4KJiM0MzsJICogSnVzdCBlbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgaXMgYXMgZXhwZWN0ZWQuCiYjNDM7CSAqLwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRShjdXJyZW50LSZndDtrdW5pdF90ZXN0LAomIzQzOwkJCSAgcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Y3R4LSZndDtydC5yZWZzKSk7CiYjNDM7CiYjNDM7CWtmcmVlKGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IG1jdHBfcm91dGUgKnJ0OwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4KTsKJiM0MzsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3J0Lmxpc3QpOwomIzQzOwlydCA9ICZhbXA7Y3R4LSZndDtydDsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7cnQtJmd0O3JlZnMsIDEpOwomIzQzOwomIzQzOwlyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbiwgY3R4KTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJY3R4LSZndDtkZXYgPSBtY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYodGVzdCk7CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBjdHgtJmd0O2Rldik7CiYjNDM7CiYjNDM7CXJ0LSZndDttaW4gPSBsb2NhbF9laWQ7CiYjNDM7CXJ0LSZndDttYXggPSBsb2NhbF9laWQ7CiYjNDM7CXJ0LSZndDtkc3RfdHlwZSA9IE1DVFBfUk9VVEVfRElSRUNUOwomIzQzOwlydC0mZ3Q7dHlwZSA9IFJUTl9MT0NBTDsKJiM0MzsJcnQtJmd0O2RldiA9IGN0eC0mZ3Q7ZGV2LSZndDttZGV2OwomIzQzOwlydC0mZ3Q7b3V0cHV0ID0gbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0OwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJbGlzdF9hZGRfcmN1KCZhbXA7Y3R4LSZndDtydC5saXN0LCAmYW1wO2luaXRfbmV0Lm1jdHAucm91dGVzKTsKJiM0MzsJcmVmY291bnRfaW5jKCZhbXA7cnQtJmd0O3JlZnMpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gY3R4OwomIzQzO30KJiM0MzsKJiM0MzsvKiBJbml0IGEgTUNUUC1vdmVyLVVTQiBwYWNrZXQgd2l0aGluIGEgYnVmZmVyLiBAbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlCiYjNDM7ICogYnVmZmVyIHRvIHdyaXRlLCBAcGF5bG9hZF9sZW4gaXMgdGhlIHJlcG9ydGVkIHNpemUgb2YgdGhlIE1DVFAtb3Zlci1VU0IKJiM0MzsgKiBwYWNrZXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdCh2b2lkICpkYXRhLCBzaXplX3QgbGVuLAomIzQzOwkJCQkgICAgICBzaXplX3QgcGF5bG9hZF9sZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgewomIzQzOwkJc3RydWN0IG1jdHBfdXNiX2hkciB1c2I7CiYjNDM7CQlzdHJ1Y3QgbWN0cF9oZHIgbWN0cDsKJiM0MzsJfSBoZHI7CiYjNDM7CiYjNDM7CWhkci51c2IuaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTsKJiM0MzsJaGRyLnVzYi5sZW4gPSBjcHVfdG9fYmUxNihwYXlsb2FkX2xlbik7CiYjNDM7CWhkci5tY3RwLnZlciA9IDE7CiYjNDM7CWhkci5tY3RwLmRlc3QgPSBsb2NhbF9laWQ7CiYjNDM7CWhkci5tY3RwLnNyYyA9IDA7CiYjNDM7CWhkci5tY3RwLmZsYWdzX3NlcV90YWcgPSAwOwomIzQzOwomIzQzOwltZW1jcHkoZGF0YSwgJmFtcDtoZHIsIG1pbihsZW4sIHNpemVvZihoZHIpKSk7CiYjNDM7CWlmIChsZW4gJmd0OyBzaXplb2YoaGRyKSkKJiM0MzsJCW1lbXNldChkYXRhICYjNDM7IHNpemVvZihoZHIpLCAwLCBsZW4gLSBzaXplb2YoaGRyKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjdGlvbl9yeF9maW5pKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4ID0gZGF0YTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfcnhfZmluaShyeCk7CiYjNDM7CWtmcmVlKHJ4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqCiYjNDM7bWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyeCA9IGt6YWxsb2Nfb2JqKCpyeCk7CiYjNDM7CWlmIChyeCkgewomIzQzOwkJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7CiYjNDM7CQlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApOwomIzQzOwl9CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByeCk7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfaW5pdChyeCwgZXBfbWF4cGFja2V0LCBzcGFuKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ4OwomIzQzO30KJiM0MzsKJiM0MzsvKiBXcmFwcGVycyBmb3IgdXNibGliJiMzOTtzIHJ4X2NvbXBsZXRlIGNhbGxiYWNrLCB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQKJiM0MzsgKiBmcm9tIGF0b21pYyBjb250ZXh0CiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCByeCwgbGVuKTsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2luZ2xlIHBhY2tldCwgc3RhcnRpbmcgb24gYSB0cmFuc2ZlciBib3VuZGFyeSwgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbgomIzQzOyAqIHRoZSB0cmFuc2ZlcgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJc2l6ZV90IGxlbjsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJZGV2ID0gY3R4LSZndDtkZXY7CiYjNDM7CiYjNDM7CXJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwKJiM0MzsJCQkJICAgICZhbXA7YnVmLCAmYW1wO2xlbiwgR0ZQX0tFUk5FTCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CS8qIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIG1heHBhY2tldCBvZiB0cmFuc2ZlciBhdmFpbGFibGUgKi8KJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGxlbiwgZXBfbWF4cGFja2V0KTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChidWYsIDgsIDgpOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LSZndDtuZGV2LCByeCwgOCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CXNrYiA9IF9fc2tiX2RlcXVldWUoJmFtcDtkZXYtJmd0O3J4X3BrdHMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTk9UX05VTEwodGVzdCwgc2tiKTsKJiM0MzsJaWYgKHNrYikKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItJmd0O2xlbiwgNCk7CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiB7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CXNpemVfdCBuX3BrdHM7CiYjNDM7CXNpemVfdCBwa3RzWzZdOwomIzQzOwlzaXplX3Qgbl94ZmVyczsKJiM0MzsJc2l6ZV90IHhmZXJzWzZdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MzttY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MoY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnQsCiYjNDM7CQkJCSAgY2hhciAqZGVzYykKJiM0Mzt7CiYjNDM7CXN0cnNjcHkoZGVzYywgdC0mZ3Q7bmFtZSwgS1VOSVRfUEFSQU1fREVTQ19TSVpFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MzttY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHN0cnVjdCBrdW5pdCAqdGVzdCwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnNwYW4sCiYjNDM7CQkJCSAgIHNpemVfdCAqbGVuKQomIzQzO3sKJiM0MzsJc2l6ZV90IHBrdF9sZW4gPSAwLCB4ZmVyX2xlbiA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3Bhbi0mZ3Q7bl9wa3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJS1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLSZndDtwa3RzW2ldLCA4LAomIzQzOwkJCQkgICAgJiMzNDtwa3RbJXVdIGxlbiB0b28gc21hbGwgKCV6dSkgZm9yICVzJiMzNDssCiYjNDM7CQkJCSAgICBpLCBzcGFuLSZndDtwa3RzW2ldLCBzcGFuLSZndDtuYW1lKTsKJiM0MzsJCXBrdF9sZW4gJiM0Mzs9IHNwYW4tJmd0O3BrdHNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNwYW4tJmd0O25feGZlcnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJeGZlcl9sZW4gJiM0Mzs9IHNwYW4tJmd0O3hmZXJzW2ldOwomIzQzOwomIzQzOwlLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHBrdF9sZW4sIHhmZXJfbGVuLAomIzQzOwkJCSAgICAmIzM0O2ludmFsaWQgcGt0X2xlbiAoJXp1KSAhPSB4ZmVyX2xlbiAoJXp1KSBmb3IgJXMmIzM0OywKJiM0MzsJCQkgICAgcGt0X2xlbiwgeGZlcl9sZW4sIHNwYW4tJmd0O25hbWUpOwomIzQzOwomIzQzOwkqbGVuID0gcGt0X2xlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqcGt0X3NwYW4gPSB0ZXN0LSZndDtwYXJhbV92YWx1ZTsKJiM0MzsJc2l6ZV90IGxlbiwgeGZlcl9sZW4sIG9mZiwgeGZlcl9vZmY7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CXU4ICpwa3RidWY7CiYjNDM7CXZvaWQgKmJ1ZjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHRlc3QsIHBrdF9zcGFuLCAmYW1wO2xlbik7CiYjNDM7CXBrdGJ1ZiA9IGt1bml0X2ttYWxsb2NfYXJyYXkodGVzdCwgMSwgbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHBrdGJ1Zik7CiYjNDM7CiYjNDM7CS8qIGxheSBvdXQgcGFja2V0cyAqLwomIzQzOwlmb3IgKG9mZiA9IDAsIGkgPSAwOyBpICZsdDsgcGt0X3NwYW4tJmd0O25fcGt0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWxlbiA9IHBrdF9zcGFuLSZndDtwa3RzW2ldOwomIzQzOwkJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYgJiM0Mzsgb2ZmLCBsZW4sIGxlbik7CiYjNDM7CQlvZmYgJiM0Mzs9IGxlbjsKJiM0MzsJfQomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCB0cnVlKTsKJiM0MzsKJiM0MzsJLyogZmVlZCB0cmFuc2ZlcnMgKi8KJiM0MzsJZm9yIChvZmYgPSAwLCB4ZmVyX29mZiA9IDAsIGkgPSAwOyBpICZsdDsgcGt0X3NwYW4tJmd0O25feGZlcnM7KSB7CiYjNDM7CQl4ZmVyX2xlbiA9IHBrdF9zcGFuLSZndDt4ZmVyc1tpXSAtIHhmZXJfb2ZmOwomIzQzOwkJcmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi0mZ3Q7bmRldiwgcngsCiYjNDM7CQkJCQkgICAgJmFtcDtidWYsICZhbXA7bGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CQlLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpOwomIzQzOwomIzQzOwkJbGVuID0gbWluKGxlbiwgeGZlcl9sZW4pOwomIzQzOwkJbWVtY3B5KGJ1ZiwgcGt0YnVmICYjNDM7IG9mZiwgbGVuKTsKJiM0MzsKJiM0MzsJCWlmIChsZW4gPT0geGZlcl9sZW4pIHsKJiM0MzsJCQkvKiB3aG9sZS9lbmQgeGZlciwgcHJvY2VlZCB0byBuZXh0ICovCiYjNDM7CQkJeGZlcl9vZmYgPSAwOwomIzQzOwkJCWkmIzQzOyYjNDM7OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQkvKiBwYXJ0aWFsICovCiYjNDM7CQkJeGZlcl9vZmYgJiM0Mzs9IGxlbjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtJmd0O25kZXYsIHJ4LCBsZW4pOwomIzQzOwkJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJCW9mZiAmIzQzOz0gbGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi0mZ3Q7cnhfcGt0cy5xbGVuLCBwa3Rfc3Bhbi0mZ3Q7bl9wa3RzKTsKJiM0MzsJZm9yIChpID0gMDsgOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoJmFtcDtkZXYtJmd0O3J4X3BrdHMpOwomIzQzOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAoaSAmbHQ7IHBrdF9zcGFuLSZndDtuX3BrdHMpCiYjNDM7CQkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNrYi0mZ3Q7bGVuLCBwa3Rfc3Bhbi0mZ3Q7cGt0c1tpXSAtIDQpOwomIzQzOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zW10gPSB7CiYjNDM7CS8qIE9uZSBwYWNrZXQgY29tcGxldGVseSB3aXRoaW4gYSB0cmFuc2ZlciAqLwomIzQzOwl7ICYjMzQ7MXAxeC1jb21wbGV0ZSYjMzQ7LCAxLCB7IDggfSwgMSwgeyA4IH0gfSwKJiM0MzsJLyogVHdvIHNtYWxsIHBhY2tldHMgY29tYmluZWQgd2l0aGluIG9uZSB0cmFuc2ZlciAqLwomIzQzOwl7ICYjMzQ7MnAxeC1jb21iaW5lZCYjMzQ7LCAyLCB7IDgsIDggfSwgMSwgeyAxNiB9IH0sCiYjNDM7CS8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgcGF5bG9hZCAqLwomIzQzOwl7ICYjMzQ7MXAyeC1zcGxpdC1wYXlsb2FkJiMzNDssIDEsIHsgMTYgfSwgMiwgeyA4LCA4IH0gfSwKJiM0MzsJLyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgVVNCIHRyYW5zcG9ydCBoZWFkZXIgKi8KJiM0MzsJeyAmIzM0OzFwMngtc3BsaXQtdXNiaGRyJiMzNDssIDEsIHsgMTYgfSwgMiwgeyAyLCAxNCB9IH0sCiYjNDM7CS8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgaGVhZGVyICovCiYjNDM7CXsgJiMzNDsxcDJ4LXNwbGl0LW1jdHBoZHImIzM0OywgMSwgeyAxNiB9LCAyLCB7IDYsIDEwIH0gfSwKJiM0MzsJLyogU2luZ2xlIHBhY2tldCBzcGxpdCBvdmVyIDMgdHJhbnNmZXJzLCBtaWRkbGUgZW50aXJlbHkgY29udGludWF0aW9uICovCiYjNDM7CXsgJiMzNDsxcDN4LXNwbGl0JiMzNDssIDEsIHsgMTIgfSwgMywgeyA0LCA0LCA0IH0gfSwKJiM0MzsJLyogTWF4LXNpemVkIHNpbmdsZSB0cmFuc2ZlciAqLwomIzQzOwl7ICYjMzQ7MXAxeC1sYXJnZSYjMzQ7LCAxLCB7IDgxOTEgfSwgMSwgeyA4MTkxIH0gfSwKJiM0MzsJLyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGEKJiM0MzsJICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhbgomIzQzOwkgKi8KJiM0MzsJeyAmIzM0OzJwMngtbGFyZ2Utc3BsaXQmIzM0OywgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sCiYjNDM7fTsKJiM0MzsKJiM0MztLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucywKJiM0MzsJCSAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgbWN0cF91c2JsaWJfdGVzdF9jYXNlc1tdID0gewomIzQzOwlLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKSwKJiM0MzsJS1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLAomIzQzOwkJCSBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0gewomIzQzOwkubmFtZSA9ICYjMzQ7bWN0cC11c2JsaWImIzM0OywKJiM0MzsJLnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLAomIzQzO307CiYjNDM7CiYjNDM7a3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzE5OTdmOTg5MDI2ZjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMKQEAgLTAsMCAmIzQzOzEsNjI1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeQomIzQzOyAqCiYjNDM7ICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6CiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VzYi9jaDkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNiL21jdHAtdXNiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tY3RwLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKQomIzQzO3sKJiM0MzsJaWYgKCFlcF9wa3RsZW4pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGVwX3BrdGxlbiAmYW1wOyB+VVNCX0VORFBPSU5UX01BWFBfTUFTSykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltZW1zZXQocngsIDAsIHNpemVvZigqcngpKTsKJiM0MzsJcngtJmd0O3NwYW4gPSBzcGFuOwomIzQzOwlyeC0mZ3Q7ZXBfcGt0bGVuID0gZXBfcGt0bGVuOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpCiYjNDM7ewomIzQzOwlrZnJlZV9za2IocngtJmd0O3NrYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2ZpbmkpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUHJlcGFyZSBhIHRyYW5zZmVyIGJ1ZmZlciBmb3IgZnV0dXJlIGNvbXBsZXRpb247ICpidWZwIGFuZCAqbGVucCB3aWxsCiYjNDM7ICogYmUgcG9wdWxhdGVkIG9uIHN1Y2Nlc3MuCiYjNDM7ICovCiYjNDM7aW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LAomIzQzOwkJCSAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSByeC0mZ3Q7c2tiOwomIzQzOwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKJiM0MzsKJiM0MzsJaWYgKHNrYiAmYW1wOyZhbXA7IHNrYi0mZ3Q7bGVuICZndDs9IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYKSB7CiYjNDM7CQkvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovCiYjNDM7CQltY3RwX3VzYmxpYl9yeF9jYW5jZWwocngpOwomIzQzOwkJc2tiID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW4gPSByeC0mZ3Q7c3BhbiA/IHJvdW5kdXAoTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LSZndDtlcF9wa3RsZW4pCiYjNDM7CQk6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7CiYjNDM7CiYjNDM7CWlmICghc2tiKSB7CiYjNDM7CQlza2IgPSBfX25ldGRldl9hbGxvY19za2IobmV0ZGV2LCBsZW4sIGdmcCk7CiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJfSBlbHNlIGlmIChza2ItJmd0O2Nsb25lZCB8fCBza2JfdGFpbHJvb20oc2tiKSAmbHQ7IHJ4LSZndDtlcF9wa3RsZW4pIHsKJiM0MzsJCS8qIFdlIGFsd2F5cyBuZWVkIHRvIHJlYWxsb2MgaWYgLSZndDtjbG9uZWQsIGFzIHdlIGNhbm5vdAomIzQzOwkJICogcmVzdWJtaXQgdGhlIChub3ctc2hhcmVkKSBza2IgYnVmZmVyIGZvciBwb3NzaWJsZSBETUEuCiYjNDM7CQkgKgomIzQzOwkJICogT3RoZXJ3aXNlIChpZiB3ZSBoYXZlIGFuIHVuLWNsb25lZCBTS0IpOiBqdXN0IGVuc3VyZSB3ZQomIzQzOwkJICogaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIHByZXZlbnQgYmFiYmxlLiBTaW5jZSB3ZSBhbGxvY2F0ZWQKJiM0MzsJCSAqIGZvciBtYXggc2l6ZSBpbiB0aGUgbGFzdCBwcmVwYXJlIChhbmQgaGF2ZSBub3QgY29uc3VtZWQgYW55CiYjNDM7CQkgKiBvZiB0aGF0IHNwYWNlIGZvciBhIHByaW9yIE1DVFAgcGFja2V0LCBiZWNhdXNlICFjbG9uZWQpLCB3ZQomIzQzOwkJICogaGF2ZSBzdWZmaWNpZW50IGRhdGEgdG8gZmluaXNoIHRoZSBjdXJyZW50IE1DVFAgcGFja2V0LgomIzQzOwkJICovCiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKJiM0MzsKJiM0MzsJCXNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBsZW4sIGdmcCk7CiYjNDM7CQlpZiAoIXNrYjIpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwomIzQzOwkJc2tiID0gc2tiMjsKJiM0MzsJfQomIzQzOwomIzQzOwlyeC0mZ3Q7c2tiID0gc2tiOwomIzQzOwomIzQzOwkvKiBTcGFubmluZyBtb2RlIGFsbG93cyBaTFBzLCBzbyB3ZSBkb24mIzM5O3QgcmVxdWlyZSBleGFjdGx5IG9uZQomIzQzOwkgKiB0cmFuc2ZlciBwYWNrZXQuIElmIHdlIGhhdmUgZXh0cmEgdGFpbHJvb20sIG1heSBhcyB3ZWxsIHVzZSBpdCwKJiM0MzsJICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSAmZ3Q7PSBlcF9wa3RsZW4uCiYjNDM7CSAqLwomIzQzOwlpZiAocngtJmd0O3NwYW4pCiYjNDM7CQlsZW4gPSByb3VuZGRvd24oc2tiX3RhaWxyb29tKHNrYiksIHJ4LSZndDtlcF9wa3RsZW4pOwomIzQzOwomIzQzOwkqYnVmcCA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKJiM0MzsJKmxlbnAgPSBsZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIobmV0ZGV2LSZndDtkc3RhdHMpOwomIzQzOwlzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwomIzQzOwlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7CiYjNDM7CiYjNDM7CS8qIHdlJiMzOTtyZSBjYWxsZWQgZnJvbSBhbiBVUkIgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2Fubm90IGFzc3VtZSBsb2NhbAomIzQzOwkgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWQKJiM0MzsJICovCiYjNDM7CWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCk7CiYjNDM7CXU2NF9zdGF0c19pbmMoJmFtcDtkc3RhdHMtJmd0O3J4X3BhY2tldHMpOwomIzQzOwl1NjRfc3RhdHNfYWRkKCZhbXA7ZHN0YXRzLSZndDtyeF9ieXRlcywgc2tiLSZndDtsZW4pOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwomIzQzOwlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7CiYjNDM7CXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwomIzQzOwljYiA9IF9fbWN0cF9jYihza2IpOwomIzQzOwljYi0mZ3Q7aGFsZW4gPSAwOwomIzQzOwluZXRpZl9yeChza2IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtkc3RhdHMpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO2RzdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwl1NjRfc3RhdHNfaW5jKCZhbXA7ZHN0YXRzLSZndDtyeF9kcm9wcyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVjZWl2ZSBhIFVTQiBjb21wbGV0aW9uIG9mIEBsZW4gYnl0ZXMgb2YgaW5jb21pbmcgZGF0YS4gV2Ugd2lsbCB0aGVuIHNwbGl0CiYjNDM7ICogdGhpcyBpbnRvIHBhY2tldHMgYW5kIG5ldGlmX3J4KCkgZWFjaC4gSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGluIGF0b21pYwomIzQzOyAqIGNvbnRleHRzIC0gaWUuLCBVUkIgY29tcGxldGlvbi4KJiM0MzsgKgomIzQzOyAqIEFzc3VtZXMgQG5ldGRldiB1c2VzIGRzdGF0cy4KJiM0MzsgKi8KJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSByeC0mZ3Q7c2tiOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9wdXQoc2tiLCBsZW4pOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKJiM0MzsJCS8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgaW5jbHVkaW5nIFVTQiBoZWFkZXIgKi8KJiM0MzsJCXUxNiBwa3RfbGVuOwomIzQzOwomIzQzOwkJLyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KJiM0MzsJCWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqaGRyKSkgewomIzQzOwkJCWlmICghcngtJmd0O3NwYW4pIHsKJiM0MzsJCQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O3J4OiB0aW55IHhmZXIgKCVkKSBpbiBub24tc3BhbiBtb2RlJiMzNDssCiYjNDM7CQkJCQkgICBza2ItJmd0O2xlbik7CiYjNDM7CQkJCXJjID0gLUVOT01TRzsKJiM0MzsJCQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQkJfQomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaGRyID0gKHN0cnVjdCBtY3RwX3VzYl9oZHIgKilza2ItJmd0O2RhdGE7CiYjNDM7CiYjNDM7CQlpZiAoYmUxNl90b19jcHUoaGRyLSZndDtpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkgewomIzQzOwkJCS8qIEJ5IHJlc2V0dGluZyBoZXJlLCB3aWxsIHN0YXJ0IHRoZSBuZXh0IElOIHRyYW5zZmVyCiYjNDM7CQkJICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW4KJiM0MzsJCQkgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkCiYjNDM7CQkJICogd2l0aCB0aGUgc3RhcnQgb2YgYSB0cmFuc2Zlci4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UmIzM5O2xsIGRyb3AKJiM0MzsJCQkgKiB0aGUgY3VycmVudCB0cmFuc2ZlciBvbmx5CiYjNDM7CQkJICovCiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7cng6IGludmFsaWQgaWQgJTA0eFxuJiMzNDssCiYjNDM7CQkJCSAgIGJlMTZfdG9fY3B1KGhkci0mZ3Q7aWQpKTsKJiM0MzsJCQlyYyA9IC1FUFJPVE87CiYjNDM7CQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gYmUxNl90b19jcHUoaGRyLSZndDtsZW4pOwomIzQzOwkJLyogdjEuMSwgd2l0aCBzcGFuIGVuYWJsZWQsIGhhcyBhIDEzLWJpdCBsZW5ndGggKi8KJiM0MzsJCXBrdF9sZW4gJmFtcDs9IHJ4LSZndDtzcGFuID8KJiM0MzsJCQlNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYOwomIzQzOwkJaWYgKHBrdF9sZW4gJmx0OyBzaXplb2YoKmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtyeDogaW52YWxpZCBsZW4gJWRcbiYjMzQ7LCBwa3RfbGVuKTsKJiM0MzsJCQlyYyA9IC1FUFJPVE87CiYjNDM7CQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBzcGFuIGNvbnRpbnVlcyB0byB0aGUgbmV4dCB0cmFuc2ZlciwgcmVzdWJtaXQgKi8KJiM0MzsJCWlmIChwa3RfbGVuICZndDsgc2tiLSZndDtsZW4pIHsKJiM0MzsJCQlpZiAoIXJ4LSZndDtzcGFuKSB7CiYjNDM7CQkJCW5ldGRldl9kYmcobmV0ZGV2LAomIzQzOwkJCQkJICAgJiMzNDtyeDogc2hvcnQgeGZlciAoJWQgdnMgJWQpIGluIG5vbi1zcGFuIG1vZGUmIzM0OywKJiM0MzsJCQkJCSAgIHBrdF9sZW4sIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQkJcmMgPSAtRVBST1RPOwomIzQzOwkJCQlnb3RvIGVycl9yZXNldDsKJiM0MzsJCQl9CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi8KJiM0MzsJCWlmIChwa3RfbGVuID09IHNrYi0mZ3Q7bGVuKSB7CiYjNDM7CQkJbWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpOwomIzQzOwkJCXJ4LSZndDtza2IgPSBOVUxMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogbW9yZSBwYWNrZXRzIGZvbGxvdyAtIFJYIGEgY2xvbmUgc28gdGhhdCB3ZSBjYW4gY29udGludWUKJiM0MzsJCSAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGEKJiM0MzsJCSAqIHNwYW4uCiYjNDM7CQkgKi8KJiM0MzsJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmIChza2IyKSB7CiYjNDM7CQkJc2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7CiYjNDM7CQkJbWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3AobmV0ZGV2KTsKJiM0MzsJCX0KJiM0MzsJCXNrYl9wdWxsKHNrYiwgcGt0X2xlbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc2V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiX2FueShyeC0mZ3Q7c2tiKTsKJiM0MzsJcngtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY29tcGxldGUpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FuY2VsIGEgcnggY29udGV4dDsgc3Vic2VxdWVudCBwcmVwYXJlL2NvbXBsZXRlIGNhbGxzIHdpbGwgbm90IGJlIGEKJiM0MzsgKiBjb250aW51YXRpb24gb2YgYW55IGRhdGEgYWxyZWFkeSByZWNlaXZlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KQomIzQzO3sKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkocngtJmd0O3NrYik7CiYjNDM7CXJ4LSZndDtza2IgPSBOVUxMOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jYW5jZWwpOwomIzQzOwomIzQzOy8qIHRyYW5zbWl0IGNvbnRleHQ6IGVuY2Fwc3VsYXRlcyBvbmUgdHJhbnNmZXIgKi8KJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4IHsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JzOwomIzQzOwl1bnNpZ25lZCBpbnQgYnVmX2xlbiwgbGVuOwomIzQzOwllbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHsKJiM0MzsJCVRYX1NJTkdMRSwKJiM0MzsJCVRYX0ZMQVQsCiYjNDM7CX0gYnVmX3R5cGU7CiYjNDM7CXU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LAomIzQzOwkJCSBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsCiYjNDM7CQkJIHZvaWQgKnByaXYsIGJvb2wgc3BhbikKJiM0Mzt7CiYjNDM7CW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwomIzQzOwl0eC0mZ3Q7b3BzID0gKm9wczsKJiM0MzsJdHgtJmd0O3ByaXYgPSBwcml2OwomIzQzOwl0eC0mZ3Q7c3BhbiA9IHNwYW47CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7dHgtJmd0O2xvY2spOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9pbml0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2F2YWlsKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdHgtJmd0O2J1Zl90eXBlID09IFRYX1NJTkdMRSA/IDAgOiBjdHgtJmd0O2J1Zl9sZW4gLSBjdHgtJmd0O2xlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJLyogVXNlIHRoZSBiYXNlbGluZSBsZW5ndGggKGllLCBCVFUpIGFzIGFuIGFwcHJveGltYXRlCiYjNDM7CSAqICYjMzQ7cmVhc29uYWJseS1zaXplZCYjMzQ7IHBhY2tldCB3ZSBjb3VsZCBleHBlY3QuIElmIHRoZXJlIGlzCiYjNDM7CSAqIGluc3VmZmljaWVudCBjYXBhY2l0eSBmb3IgdGhhdCwgdGhlbiBzZW5kLgomIzQzOwkgKi8KJiM0MzsJY29uc3Qgc2l6ZV90IHBrdF9sZW4gPSBNQ1RQX1VTQl9CVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gbWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSAmbHQ7IHBrdF9sZW47CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2IKJiM0MzsgKiBjb3VsZCBub3QgYmUgYXBwZW5kZWQuIFNvLCBlcnJvcnMgcmVwb3J0ZWQgaGVyZSB0byB0aGUgVFggcGF0aCB3aWxsIHJlc3VsdAomIzQzOyAqIGluIHRoZSBUWCBiZWluZyB0cmFuc21pdHRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2FwcGVuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKGN0eC0mZ3Q7YnVmX3R5cGUgPT0gVFhfU0lOR0xFKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpICZsdDsgc2tiLSZndDtsZW4pCiYjNDM7CQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CiYjNDM7CV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtjdHgtJmd0O3NrYnMsIHNrYik7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7bGVuICYjNDM7PSBza2ItJmd0O2xlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwl2b2lkICpidWY7CiYjNDM7CiYjNDM7CS8qIElmIHdlIGhhdmUgYSBxbGVuIG9mIDEsIHdlIG9ubHkgZW5kZWQgdXAgcGFja2luZyBhIHNpbmdsZSBza2IsCiYjNDM7CSAqIGRlc3BpdGUgYWxsb2NhdGluZyBmb3IgbXVsdGlwbGUuIFNraXAgdGhlIGNvcHkgYW5kIHNlbmQgZGlyZWN0bHkKJiM0MzsJICogZnJvbSB0aGUgc2tiIGRhdGEuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4LSZndDtidWZfdHlwZSA9PSBUWF9TSU5HTEUgfHwgY3R4LSZndDtza2JzLnFsZW4gPT0gMSkgewomIzQzOwkJYnVmID0gY3R4LSZndDtza2JzLm5leHQtJmd0O2RhdGE7CiYjNDM7CiYjNDM7CX0gZWxzZSBpZiAoY3R4LSZndDtidWZfdHlwZSA9PSBUWF9GTEFUKSB7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwkJc2l6ZV90IHBvcyA9IDA7CiYjNDM7CiYjNDM7CQlza2JfcXVldWVfd2FsaygmYW1wO2N0eC0mZ3Q7c2ticywgc2tiKSB7CiYjNDM7CQkJc2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC0mZ3Q7YnVmICYjNDM7IHBvcywgc2tiLSZndDtsZW4pOwomIzQzOwkJCXBvcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlidWYgPSBjdHgtJmd0O2J1ZjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjdHgtJmd0O3R4LSZndDtvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LSZndDtsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsCiYjNDM7CQkJCSAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7Y3R4LSZndDtza2JzKSkgIT0gTlVMTCkKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55X3JlYXNvbihza2IsIHJlYXNvbik7CiYjNDM7CWtmcmVlKGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0eF9jdHgtJmd0O3R4LSZndDtwcml2OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7CiYjNDM7CiYjNDM7LyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSB0eCAmYW1wOyBjb21wbGV0aW9uIHBhdGggaXMgcXVpZXNjZWQgKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCkKJiM0Mzt7CiYjNDM7CW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LSZndDtjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpOwomIzQzOwomIzQzOy8qIE1heCBzaXplIG9mIGEgc3Bhbm5lZCBUWC4gU2luY2Ugd2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBzcGFuIGJ1ZmZlciwgbGltaXQKJiM0MzsgKiB0aGUgdHgtdGltZSBhbGxvY2F0aW9ucyB0byA0ay4gTGFyZ2VyIHBhY2tldHMgd2lsbCBiZSBzZW50IGFzIHNpbmdsZQomIzQzOyAqIHRyYW5zZmVycy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1NQQU5fTUFYID0gNDA5NiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4KTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqCiYjNDM7bWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgYm9vbCBzaW5nbGUpCiYjNDM7ewomIzQzOwllbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHR5cGU7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eDsKJiM0MzsJc2l6ZV90IHN6ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHNpbmdsZSB8fCBza2ItJmd0O2xlbiAmZ3Q7IFRYX1NQQU5fTUFYKSB7CiYjNDM7CQl0eXBlID0gVFhfU0lOR0xFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdHlwZSA9IFRYX0ZMQVQ7CiYjNDM7CQlzeiA9IHR4LSZndDtzcGFuID8gVFhfU1BBTl9NQVggOiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eCA9IGt6YWxsb2NfZmxleCgqY3R4LCBidWYsIHN6LCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFjdHgpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJY3R4LSZndDt0eCA9IHR4OwomIzQzOwljdHgtJmd0O2J1Zl90eXBlID0gdHlwZTsKJiM0MzsJY3R4LSZndDtidWZfbGVuID0gc3o7CiYjNDM7CWN0eC0mZ3Q7bGVuID0gc2tiLSZndDtsZW47CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtjdHgtJmd0O3NrYnMpOwomIzQzOwlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7Y3R4LSZndDtza2JzLCBza2IpOwomIzQzOwomIzQzOwlyZXR1cm4gY3R4OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LAomIzQzOwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCWJvb2wgb2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJaWYgKG9rKSB7CiYjNDM7CQkvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vdwomIzQzOwkJICogdGhhdCB0aGVyZSBpcyBhIDQtYnl0ZSBoZWFkZXIgcHVzaGVkIHRvIGFsbCBza2JzIGluCiYjNDM7CQkgKiB0eF9za2JfcHJlcGFyZSgpCiYjNDM7CQkgKi8KJiM0MzsJCXU2NCBuID0gY3R4LSZndDtza2JzLnFsZW47CiYjNDM7CQlzNjQgbGVuID0gY3R4LSZndDtsZW4gLSAobiAqIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7CiYjNDM7CiYjNDM7CQl1NjRfc3RhdHNfYWRkKCZhbXA7ZHN0YXRzLSZndDt0eF9wYWNrZXRzLCBuKTsKJiM0MzsJCXU2NF9zdGF0c19hZGQoJmFtcDtkc3RhdHMtJmd0O3R4X2J5dGVzLCBsZW4pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTY0X3N0YXRzX2FkZCgmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMsIGN0eC0mZ3Q7c2ticy5xbGVuKTsKJiM0MzsJfQomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O2RzdGF0cyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJdTY0X3N0YXRzX2luYygmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMpOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O2RzdGF0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29tcGxldGlvbiBmb3IgdGhlIC0mZ3Q7c2VuZCgpIG9wLiBUaGlzIHdpbGwgdXBkYXRlIG5ldGRldiBzdGF0cyBhbmQKJiM0MzsgKiBmcmVlIHRoZSB0eCBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogTGlrZWx5IGNhbGxlZCBmcm9tIChhdG9taWMpIFVSQiBjb21wbGV0aW9uIGNvbnRleHQuCiYjNDM7ICovCiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKQomIzQzO3sKJiM0MzsJZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0KJiM0MzsJCW9rID8gU0tCX0NPTlNVTUVEIDogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZSh0eF9jdHgsIGRldiwgb2spOwomIzQzOwltY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eF9jdHgsIHJlYXNvbik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpOwomIzQzOwomIzQzOy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKQomIzQzOyAqCiYjNDM7ICogT24gZXJyb3IsIHBvcHVsYXRlcyBAcmVhc29uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLAomIzQzOwkJCQkgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiAqcmVhc29uKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwbGVuLCBtYXhfbGVuOwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYOwomIzQzOwomIzQzOwlwbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWlmIChwbGVuICYjNDM7IHNpemVvZigqaGRyKSAmZ3Q7IG1heF9sZW4pIHsKJiM0MzsJCSpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19CSUc7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQkqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PTUVNOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCSpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwloZHItJmd0O2lkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7CiYjNDM7CWhkci0mZ3Q7bGVuID0gY3B1X3RvX2JlMTYocGxlbiAmIzQzOyBzaXplb2YoKmhkcikpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvCiYjNDM7ICogb3BzLSZndDtzZW5kKCkuCiYjNDM7ICoKJiM0MzsgKiBUYWtlcyBvd25lcnNoaXAgb2YgQHNrYiwgaW5jbHVkaW5nIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwKJiM0MzsJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7CiYjNDM7CWVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjsKJiM0MzsJY29uc3QgaW50IG1heF90cmllcyA9IDM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCB0cnkgPSAxLCByYzsKJiM0MzsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl90eF9za2JfcHJlcGFyZShza2IsIHR4LSZndDtzcGFuLCAmYW1wO3JlYXNvbik7CiYjNDM7CWlmIChyYykgewomIzQzOwkJbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pOwomIzQzOwkJLyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHgKJiM0MzsJCSAqIGlzIG5vdyBzZW5kYWJsZSAoaWUuOiAhbW9yZSkuCiYjNDM7CQkgKi8KJiM0MzsJCXNrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7CiYjNDM7cmV0cnk6CiYjNDM7CS8qIFRyeSBhbmQgcXVldWUgdG8gdGhlIGN1cnJlbnQgY29udGV4dC4gV2UgZXhpdCB0aGlzIGNyaXRpY2FsIHNlY3Rpb24KJiM0MzsJICogd2l0aCBhIGZldyBiaXRzIG9mIHN0YXRlOgomIzQzOwkgKiAgLSBzZW5kX2N0eDogaW5kaWNhdGluZyBhIHByaW9yIGNvbnRleHQgdGhhdCBuZWVkcyB0byBiZSBzZW50CiYjNDM7CSAqICAtIHNrYjogaW5kaWNhdGluZyB0aGF0IGEgc2tiIHN0aWxsIG5lZWRzIHRvIGJlIHF1ZXVlZC9zZW50CiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWN0eCA9IHR4LSZndDtjdXJfY3R4OwomIzQzOwlpZiAoY3R4KSB7CiYjNDM7CQlpZiAoc2tiKSB7CiYjNDM7CQkJcmMgPSBtY3RwX3VzYmxpYl90eF9hcHBlbmQoY3R4LCBza2IpOwomIzQzOwkJCWlmIChyYykgewomIzQzOwkJCQkvKiBjYW4mIzM5O3QgYXBwZW5kIHRvIHRoZSBwZW5kaW5nIHR4IC0gZGV0YWNoIGZvcgomIzQzOwkJCQkgKiBzZW5kaW5nLCBhbmQgd2UmIzM5O2xsIGNyZWF0ZSBhIG5ldyB0eCBiZWxvdy4KJiM0MzsJCQkJICovCiYjNDM7CQkJCXN3YXAodHgtJmd0O2N1cl9jdHgsIHNlbmRfY3R4KTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQkvKiB3ZSBoYXZlIHF1ZXVlZCAqLwomIzQzOwkJCQlza2IgPSBOVUxMOwomIzQzOwkJCQlpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSkKJiM0MzsJCQkJCXN3YXAodHgtJmd0O2N1cl9jdHgsIHNlbmRfY3R4KTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFtb3JlKSB7CiYjNDM7CQkJc3dhcCh0eC0mZ3Q7Y3VyX2N0eCwgc2VuZF9jdHgpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoc2VuZF9jdHgpIHsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChzZW5kX2N0eCk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQltY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc2VuZF9jdHgsIGRldiwgZmFsc2UpOwomIzQzOwkJCW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHNlbmRfY3R4LCByZWFzb24pOwomIzQzOwkJfQomIzQzOwkJc2VuZF9jdHggPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdlIGhhdmUgZWl0aGVyIHF1ZXVlZCwgb3IgdGhlIHByZXBhcmUgZmFpbGVkOyBub3RoaW5nIG1vcmUgdG8gZG8gKi8KJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZSh0eCwgc2tiLCAhbW9yZSk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQluZXRkZXZfZGJnKGRldiwgJiMzNDtUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCW1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGlmIHdlJiMzOTtyZSByZWFkeSB0byBzZW5kIG5vdywgbm8gbmVlZCB0byBlbnF1ZXVlICovCiYjNDM7CWlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKSB7CiYjNDM7CQlyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoY3R4KTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCW1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpOwomIzQzOwkJCW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKCF0eC0mZ3Q7Y3VyX2N0eCkgewomIzQzOwkJdHgtJmd0O2N1cl9jdHggPSBjdHg7CiYjNDM7CQljdHggPSBOVUxMOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkvKiB3ZSBtYXkgaGF2ZSBsb3N0IHRoZSByYWNlIHdpdGggYSBjb25jdXJyZW50IHR4OyBzaG91bGRuJiMzOTt0IGhhcHBlbiwgYXMKJiM0MzsJICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW4KJiM0MzsJICogZnJvbSB0aGUgdG9wLCBhcyB3ZSBtYXkgYmUgYWJsZSB0byBxdWV1ZSB0aGUgc2tiIHRvIHRoYXQgY29udGV4dC4KJiM0MzsJICovCiYjNDM7CWlmIChjdHgpIHsKJiM0MzsJCS8qIHVubGluayB0aGUgbmV3IChzb2xlKSBza2IsIHdlIGRvbiYjMzk7dCB3YW50IGl0IGZyZWVkIHdpdGggY3R4ICovCiYjNDM7CQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtjdHgtJmd0O3NrYnMpOwomIzQzOwkJbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pOwomIzQzOwkJaWYgKCYjNDM7JiM0Mzt0cnkgJmd0OyBtYXhfdHJpZXMpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQltY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpOwomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTsKJiM0MzsKJiM0MzsvKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJc3dhcCh0eC0mZ3Q7Y3VyX2N0eCwgY3R4KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTsKJiM0MzsJbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpOwomIzQzOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKZXJlbXkgS2VyciAmbHQ7amtAY29kZWNvbnN0cnVjdC5jb20uYXUmZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O01DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5JiMzNDspOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVCkKJiM0MzsjaW5jbHVkZSAmIzM0O21jdHAtdXNibGliLXRlc3QuYyYjMzQ7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaAppbmRleCBhMmY2ZjFlMDRlZmJkMC4uNGJiMDRhMzcxMTA1MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaApAQCAtMiw3ICYjNDM7Miw3IEBACiAvKgogICogbWN0cC11c2IuaCAtIE1DVFAgVVNCIHRyYW5zcG9ydCBiaW5kaW5nOiBjb21tb24gZGVmaW5pdGlvbnMsCiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOgotICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmCiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmCiAgKgogICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0CiAgKiBhbmQgZ2FkZ2V0IGRyaXZlcnMuCkBAIC0xMywxOCAmIzQzOzEzLDk2IEBACiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0gKICNkZWZpbmUgX19MSU5VWF9VU0JfTUNUUF9VU0JfSAogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiYjNDM7LyoKJiM0MzsgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkCiYjNDM7ICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnkKJiM0MzsgKiAzIHJlc2VydmVkIGJpdHMpLiBXZSB1c2UgYSBiZTE2IGZvciBvdXIgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgbGFyZ2VyIHYxLjEKJiM0MzsgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuCiYjNDM7ICovCiBzdHJ1Y3QgbWN0cF91c2JfaGRyIHsKIAlfX2JlMTYJaWQ7Ci0JdTgJcnN2ZDsKLQl1OAlsZW47CiYjNDM7CV9fYmUxNglsZW47CiB9IF9fcGFja2VkOwogCi0jZGVmaW5lIE1DVFBfVVNCX1hGRVJfU0laRQk1MTIKJiM0MzsvKiBtYXggdHJhbnNmZXIgc2l6ZSBmb3IgRFNQMDI4MyB2MS4wICovCiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFCTUxMgogI2RlZmluZSBNQ1RQX1VTQl9CVFUJCTY4CiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU4JTUNUUF9VU0JfQlRVCi0jZGVmaW5lIE1DVFBfVVNCX01UVV9NQVgJKFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkKJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYCVU4X01BWAomIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX01UVV9NQVgJKE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKQomIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgJR0VOTUFTSygxMiwgMCkKJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMV9NVFVfTUFYCShNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkKICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRAkweDFhYjQKIAomIzQzOy8qIG1jdHAtdXNibGliICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSWCBoYW5kbGU6IGRyaXZlcnMgd2lsbCB0eXBpY2FsbHkgY3JlYXRlIG9uZSBvbiBpbml0LCB3aGljaCBwZXJzaXN0cyBmb3IKJiM0MzsgKiB0aGUgbGlmZSBvZiB0aGUgZHJpdmVyLiBUaGUgc2FtZSBoYW5kbGUgaXMgdXNlZCBmb3IgcHJvZ3Jlc3NpdmUKJiM0MzsgKiBwcmVwYXJlIC0mZ3Q7IGNvbXBsZXRlIG9wZXJhdGlvbnMgKGZvciBlYWNoIGluY29taW5nIFVTQiB0cmFuc2ZlciksIHdoaWNoCiYjNDM7ICogcmVzdWx0IGluIG5ldGlmX3J4KCktaW5nIHRoZSBNQ1RQIHBhY2tldHMgcmVjZWl2ZWQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfcnggewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgZXBfcGt0bGVuOwomIzQzOwlib29sIHNwYW47CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCB1MTYgZXBfcGt0bGVuLCBib29sIHNwYW4pOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KTsKJiM0MzsKJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCSAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsCiYjNDM7CQkJICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKTsKJiM0MzsKJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbik7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUWCBoYW5kbGU6IGNyZWF0ZWQgYnkgbWN0cF91c2JsaWJfdHhfcHVzaCgpIGR1cmluZyB0aGUgdHggcGF0aCwgYW5kCiYjNDM7ICogbWF5IHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlIHBhY2tldCB0cmFuc21pdHMuCiYjNDM7ICovCiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eDsKJiM0MzsKJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHsKJiM0MzsJLyogU3RhcnQgYSBVU0IgVFggZm9yIEBkYXRhLiBPbiByZXR1cm5pbmcgc3VjY2VzcywgdGhlIGltcGxlbWVudGF0aW9uCiYjNDM7CSAqIG11c3QgYXJyYW5nZSBmb3IgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSgpIHRvIGJlIGNhbGxlZCBhdCBzb21lCiYjNDM7CSAqIGxhdGVyIHBvaW50IChlZy4sIG9uIHVyYiBjb21wbGV0aW9uKS4KJiM0MzsJICovCiYjNDM7CWludCAoKnNlbmQpKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHggewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJdm9pZCAqcHJpdjsKJiM0MzsJYm9vbCBzcGFuOwomIzQzOwkvKiBwcm90ZWN0cyBhY2Nlc3MgdG8gY3VyX2N0eCAqLwomIzQzOwlzcGlubG9ja190IGxvY2s7CiYjNDM7CS8qIGNvbnRleHQgdG8gd2hpY2ggd2UgYXJlIGFkZGluZyBwYWNrZXRzLCBjbGVhcmVkIG9uIHNlbmQgKi8KJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3VyX2N0eDsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LAomIzQzOwkJCSBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsIHZvaWQgKnByaXYsCiYjNDM7CQkJIGJvb2wgc3Bhbik7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgpOwomIzQzOwomIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCk7CiYjNDM7CiYjNDM7aW50IG1jdHBfdXNibGliX3R4X3B1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQlzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LAomIzQzOwkJCXN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSk7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKTsKJiM0MzsKJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7CiYjNDM7CiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYW5kIEZ1enppbmcgTUNUUC1vdmVyLVVTQiBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGludHJvZHVjaW5nIGEgY29tbW9uIGxpYnJhcnksIGBtY3RwLXVzYmxpYi5jYCwgZm9yIE1DVFAtb3Zlci1VU0IuIFRoZSBleGlzdGluZyBgbWN0cC11c2IuY2AgZHJpdmVyIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGxldmVyYWdlIGl0LCBhbmQgYSBuZXcgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAgS2NvbmZpZyBvcHRpb24gaXMgYmVpbmcgaW50cm9kdWNlZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGlzIGV2ZW4gKnJlYWNoYWJsZSogd2l0aGluIG91ciB2aXJ0dWFsaXplZCB0ZXN0aW5nIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IEdDRSBhbmQgUUVNVS4gVGhlIHByb21wdCYjMzk7cyBoaW50IGFib3V0ICYjMzQ7c29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0OyBpcyBrZXkgaGVyZS4KCkFoLCByaWdodCwgVVNCIGdhZGdldCBhbmQgZHVtbXlfaGNkIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5IG9mIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBtZWFuaW5nIHRoZXkgKmFyZSogYWNjZXNzaWJsZSBpbiBRRU1VLiBUaGF0IHNldHRsZXMgdGhhdC4gQW5kIHNpbmNlIGBtY3RwLXVzYi5jYCBpcyBhIFVTQiAqaG9zdCogZHJpdmVyIGZvciBNQ1RQIGRldmljZXMsIHdoaWNoIHVzZXMgdGhlIFVTQiBidXMsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB0ZXN0IGl0IHVzaW5nIGR1bW15IFVTQiBkZXZpY2VzIG9yIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yay4gQW5kIHRoaXMgaXMgZXhjZWxsZW50IG5ld3MuIFRoZSBwcm9tcHQgYWxzbyBtZW50aW9uZWQgc3l6a2FsbGVyLgoKWWVzLCBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHV0aWxpemUgZHVtbXlfaGNkIGFuZCByYXctZ2FkZ2V0LCBzbyB0aGlzIG9wZW5zIHRoZSBkb29yIHRvIGVmZmVjdGl2ZSBmdXp6aW5nLiBXZSBjYW4gZGVmaW5pdGVseSBmdXp6IHRoaXMhCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGludHJvZHVjZWQgaW4gYG1jdHAtdXNibGliLmNgOiBgbWN0cF91c2JsaWJfcnhfaW5pdGAsIGBtY3RwX3VzYmxpYl9yeF9maW5pYCwgYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfcnhfY2FuY2VsYCwgYG1jdHBfdXNibGliX3R4X2luaXRgLCBgbWN0cF91c2JsaWJfdHhfZmluaWAsIGBtY3RwX3VzYmxpYl90eF9wdXNoYCwgYG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVgLCBhbmQgYG1jdHBfdXNibGliX3R4X2NhbmNlbGAuCgpXZSBhbHNvIGhhdmUgdGhlIGZ1bmN0aW9ucyBpbiBgbWN0cC11c2IuY2A6IGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYG1jdHBfdXNiX3J4X3F1ZXVlYCwgYG1jdHBfdXNiX2luX3VyYl9lcnJgLCBgbWN0cF91c2JfaW5fY29tcGxldGVgLCBgbWN0cF91c2JfcnhfcmV0cnlfd29ya2AsIGBtY3RwX3VzYl9vcGVuYCwgYG1jdHBfdXNiX3N0b3BgLCBgbWN0cF91c2JfcHJvYmVgLCBhbmQgYG1jdHBfdXNiX2Rpc2Nvbm5lY3RgLgoKS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIG5leHQuIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgIGRlcGVuZHMgb24gYFVTQmAuIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGFsc28gZGVwZW5kcyBvbiBgVVNCYCBhbmQgKnNlbGVjdHMqIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiBUaGlzIGltcGxpZXMgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIHRvIHVzZSB0aGUgbGlicmFyeS4gV2FpdCwgd2UgYWxzbyBuZWVkIHRoZSBiYXNlIGBNQ1RQYCBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGJ5IGNoZWNraW5nIHRoZSBgZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz00MT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTQ5LVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjUwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O01DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTktXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjEtICAgICAgICBib29sIFwmIzM0O01DVFAgdXNibGliIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjQtXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjU6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTY2LVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBVU0IgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEZXBlbmRlbmN5IENoZWNrOiBNQ1RQX1RSQU5TUE9SVF9VU0IqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1DVFBfVFJBTlNQT1JUX1VTQmAuIEFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIHJlbHkgb24gdGhpcyBtb2R1bGUuIEZpcnN0LCBJ4oCZbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOiB3aGljaCBvdGhlciBtb2R1bGVzIG1pZ2h0IG5lZWQgYSBVU0IgdHJhbnNwb3J0IGxheWVyIGZvciBNQ1RQIGNvbW11bmljYXRpb24/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDoKCiogICAqKlBsYXRmb3JtLVNwZWNpZmljIERyaXZlcnM6KiogSXMgYE1DVFBfVFJBTlNQT1JUX1VTQmAgdGllZCB0byBhbnkgcGFydGljdWxhciBoYXJkd2FyZSBwbGF0Zm9ybXMgb3IgU29Dcz8gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHBvcnRhYmlsaXR5IGFuZCB0cm91Ymxlc2hvb3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgbW9kdWxlIGxldmVyYWdlcyBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgVVNCIGRyaXZlcnMgYW5kIGhvdyB0aGF0IG1pZ2h0IGltcGFjdCBkZXBsb3ltZW50IG9uIGRpZmZlcmVudCBzeXN0ZW1zLgoqICAgKipNQ1RQIFByb3RvY29scyBhbmQgUHJvZmlsZXM6KiogV2hhdCBNQ1RQIHByb2ZpbGVzIGRlcGVuZCBvbiB0aGlzIFVTQiB0cmFuc3BvcnQ/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcHJvZmlsZXMgb3IgY29tbWFuZHMgdGhhdCB1dGlsaXplIHRoZSBVU0IgaW50ZXJmYWNlIGRpcmVjdGx5PyBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9maWxlcyAoZS5nLiwgUExETSwgTUNUUCBCYXNlKSBhbmQgdGhlIHRyYW5zcG9ydCBpcyBlc3NlbnRpYWwuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIGJhc2VkIG9uIHByb2ZpbGUgdXNhZ2UuCiogICAqKlNlY3VyaXR5IENvbnNpZGVyYXRpb25zOioqIEdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBVU0IsIHdoaWNoIGlzIG9mdGVuIGEgcG9pbnQgb2YgZXh0ZXJuYWwgYWNjZXNzLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gVVNCIGNvbW11bmljYXRpb24gdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JgPyBBcmUgdGhlcmUgc2VjdXJpdHkgZmVhdHVyZXMgdGhhdCBkZXBlbmQgb24gdGhpcy4KKiAgICoqQ29uZmlndXJhdGlvbiBhbmQgQnVpbGQgT3B0aW9uczoqKiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIChLY29uZmlnIG9yIHNpbWlsYXIpIHRoYXQgaW5mbHVlbmNlIHdoZXRoZXIgYE1DVFBfVFJBTlNQT1JUX1VTQmAgaXMgYnVpbHQgb3IgZW5hYmxlZD8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgYnVpbGQgZmxhZ3MgdGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgaXQgd29ya3M/IEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcy4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGVzZSBmYWN0b3JzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIHRvIGVuc3VyZSB0aGF0IEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGltcG9ydGFudCBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG4gIDYxOlx0ICAgICAgICBib29sIFwmIzM0O01DVFAgdXNibGliIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNjI6XHQgICAgICAgIGRlcGVuZHMgb24gTUNUUF9UUkFOU1BPUlRfVVNCTElCPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNjM6XHQgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDY0Olx0XG4gIDY1Olx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxuICA2NjpcdFx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBVU0IgdHJhbnNwb3J0XCYjMzQ7XG4gIDY3Olx0XHRkZXBlbmRzIG9uIFVTQlxuICA2ODpcdFx0c2VsZWN0IE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxuICA2OTpcdFx0aGVscFxuICA3MDpcdFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgVVNCIHRyYW5zcG9ydCxcbiAgNzE6XHRcdCAgZGVmaW5lZCBieSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDI4My5cbiAgNzI6XHRcbiAgNzM6XHRcdCAgTUNUUC1vdmVyLVVTQiBpbnRlcmZhY2VzIGFyZSBwZWVyLXRvLXBlZXIsIHNvIGVhY2ggaW50ZXJmYWNlXG4gIDc0Olx0XHQgIHJlcHJlc2VudHMgYSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIG9uZSByZW1vdGUgTUNUUCBlbmRwb2ludC5cbiAgNzU6XHRcbiAgNzY6XHRlbmRtZW51XG4gIDc3Olx0XG4gIDc4Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUzNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBNQ1RQIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBNQ1RQX1RSQU5TUE9SVF9VU0JgLiBPYnZpb3VzbHksIHRoYXQgbGV2ZXJhZ2VzIHRoZSBgVVNCYCBzdGFjay4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgbm93IEkmIzM5O20gc2hpZnRpbmcgZ2VhcnMsIGRpZ2dpbmcgZGVlcGVyOiB3aGF0JiMzOTtzIHRoZSBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgd2l0aCBgTUNUUGAgaXRzZWxmPyBXaGVyZSBkb2VzIHRoZSBjb3JlIHByb3RvY29sIGZpdCBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmU/IElzIGl0ICpjb21wbGV0ZWx5KiBkZXBlbmRlbnQ/IEFyZSB0aGVyZSAqb3RoZXIqIGRlcGVuZGVuY2llcyB0byBjb25zaWRlcj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGZ1bmRhbWVudGFsIGZyYW1ld29yayBzbyB0aGF0IEkgZG9uJiMzOTt0IGNvbmZ1c2UgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQ1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21jdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWN0cC9LY29uZmlnLTEtXG5uZXQvbWN0cC9LY29uZmlnOjI6bWVudWNvbmZpZyBNQ1RQXG5uZXQvbWN0cC9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIE5FVFxuLS1cbm5ldC9tY3RwL0tjb25maWctMTQtXG5uZXQvbWN0cC9LY29uZmlnOjE1OmNvbmZpZyBNQ1RQX1RFU1Rcbm5ldC9tY3RwL0tjb25maWctMTYtICAgICAgICBib29sIFwmIzM0O01DVFAgY29yZSB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubmV0L21jdHAvS2NvbmZpZy0yMC1cbm5ldC9tY3RwL0tjb25maWc6MjE6Y29uZmlnIE1DVFBfRkxPV1Ncbm5ldC9tY3RwL0tjb25maWctMjItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4OTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQ1RQIFVTQiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBNQ1RQIFVTQiBpbnRlZ3JhdGlvbiBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE1DVFBgIGFuZCBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYW5kIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiAgUmlnaHQsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWN0cC11c2JsaWIuY2AsIHdoaWNoIGRlZmluZXMgdGhlIGNvcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBmb3IgdGhlIFVTQiBsaWJyYXJ5OgoKKiAgIGBtY3RwX3VzYmxpYl9yeF9pbml0YAoqICAgYG1jdHBfdXNibGliX3J4X2ZpbmlgCiogICBgbWN0cF91c2JsaWJfcnhfcHJlcGFyZWAKKiAgIGBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZWAKKiAgIGBtY3RwX3VzYmxpYl9yeF9jYW5jZWxgCiogICBgbWN0cF91c2JsaWJfdHhfaW5pdGAKKiAgIGBtY3RwX3VzYmxpYl90eF9maW5pYAoqICAgYG1jdHBfdXNibGliX3R4X3B1c2hgCiogICBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAKKiAgIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgCgpUaG9zZSBhcmUgbXkgRm9jdXNTeW1ib2xzIGZyb20gdGhlIGBtY3RwLXVzYmxpYi5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSB0aGUgY29ycmVjdCBBUEkgZW50cnkgcG9pbnRzLgoKTm93LCB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIGBtY3RwLXVzYi5jYCwgbGlrZToKCiogICBgbWN0cF91c2JfdHhfc2VuZGAKKiAgIGBtY3RwX3VzYl9zdGFydF94bWl0YAoqICAgYG1jdHBfdXNiX3J4X3F1ZXVlYAoqICAgYG1jdHBfdXNiX2luX3VyYl9lcnJgCiogICBgbWN0cF91c2JfaW5fY29tcGxldGVgCiogICBgbWN0cF91c2JfcnhfcmV0cnlfd29ya2AKKiAgIGBtY3RwX3VzYl9vcGVuYAoqICAgYG1jdHBfdXNiX3N0b3BgCiogICBgbWN0cF91c2JfcHJvYmVgCiogICBgbWN0cF91c2JfZGlzY29ubmVjdGAKCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGFyZSBleHBvc2VkIG9yIGludGVybmFsLiBSaWdodCwgSSByZW1lbWJlciB0aGUgZ3VpZGVsaW5lIGFib3V0IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYG1jdHBfdXNiX3R4X3NlbmRgIGlzIHN0YXRpYy4gWXVwLCBpdCBpcyBpbiBgbWN0cC11c2IuY2AuIFNvIGFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBJIHNob3VsZCByZWFsbHkgYmUgZm9jdXNpbmcgb24gdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiBgbWN0cC11c2JsaWIuY2AgZm9yIG15IGFuYWx5c2lzIGFuZCBhbnkgcG90ZW50aWFsIGludGVyZmFjZSBjaGFuZ2VzLgoKTGV0JiMzOTtzIHRha2UgYSBsb29rIGluIGBtY3RwLXVzYi5jYCwgYmVjYXVzZSBJIHRoaW5rIEkgd2FzIG9uIHRoZSByaWdodCB0cmFjay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSBhbnkgb2YgdGhvc2Ugbm9uLXN0YXRpYz8gTG9va3MgbGlrZSB0aGV5IGFyZSBhbGwgc3RhdGljLCBleGNlcHQgbW9kdWxlIGluaXQvZXhpdC4gV2VsbCwgaXQgbG9va3MgbGlrZSBgbWN0cF91c2JfcHJvYmVgIGlzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIE9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY3RwX3VzYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MzMwPXN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0zNDQtXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MzQ1OnN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMzQ2LVx0XHRcdCAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz00MzY9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1jdHBfdXNiX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNDM4LVx0LmlkX3RhYmxlXHQ9IG1jdHBfdXNiX2RldmljZXMsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6NDM5Olx0LnByb2JlXHRcdD0gbWN0cF91c2JfcHJvYmUsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNDQwLVx0LmRpc2Nvbm5lY3RcdD0gbWN0cF91c2JfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgdGhlIG1jdHBfdXNiX3Byb2JlIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBtY3RwX3VzYl9wcm9iZWAgaXMgYSBzdGF0aWMgY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoLCBvbiBpdHMgb3duLCBzZWVtcyBhY2NlcHRhYmxlLiBUaGUgZGlyZWN0aXZlLCBob3dldmVyLCBzcGVjaWZpY2FsbHkgZW1waGFzaXplcyBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycy4gVGhlcmVmb3JlLCBJIHdpbGwgaW5jbHVkZSB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGZyb20gYG1jdHAtdXNibGliLmNgLCB3aGljaCBzaG91bGQgYWRkcmVzcyB0aGUgY29uY2VybiBtb3JlIGRpcmVjdGx5LiBJdCBpcyBiZXR0ZXIgZm9yIHRoaXMgdG8gYmUgYSBkaXJlY3QgZXhwb3J0LiBUbyB2ZXJpZnkgdGhpcyB3aWxsIHdvcmssIEkgd2lsbCBleGFtaW5lIGBtY3RwLXVzYmxpYi5jYCB0byBpZGVudGlmeSBhbmQgdmVyaWZ5IHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlc2UgZXhwb3J0ZWQgZnVuY3Rpb25zIGFuZCBlbnN1cmUgdGhhdCB0aGlzIGFwcHJvYWNoIHdpbGwgYmUgcG9zc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTE4PWludCBtY3RwX3VzYmxpYl9yeF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHUxNiBlcF9wa3RsZW4sIGJvb2wgc3Bhbilcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzEtfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjMyOkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2luaXQpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTMzLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTM0PXZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNy19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6Mzg6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzktXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQ0PWludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTk3LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo5ODpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy05OS1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MTQxPWludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzMtfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjIzNDpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjM1LVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0yNDA9dm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjQ0LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyNDU6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY2FuY2VsKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yNDYtXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTI1OT12b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjY4LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyNjk6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfaW5pdCk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjcwLVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0zNDk9dm9pZCAqbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4KVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNTItfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM1MzpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzU0LVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0zNTY9dm9pZCBtY3RwX3VzYmxpYl90eF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM1OS19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MzYwOkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM2MS1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NDM5PXZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ0Ny19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NDQ4OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ0OS1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NDkzPWludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5Ny19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NTk4OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3B1c2gpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5OS1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NjAxPXZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYxNi19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NjE3OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNjE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMyMwoJCQkJCQkJb3V0cHV0OiAyNzMKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUGxhbiBmb3IgRnV6emluZyB0aGUgTUNUUCBVU0IgVHJhbnNwb3J0IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgbmV3IE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgdGhhdCB1dGlsaXplcyB0aGUgY29tbW9uIGxpYnJhcnkuIEkgbmVlZCB0byBkZWZpbmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBnb2luZyB0byB0YXJnZXQgd2l0aGluIEZvY3VzU3ltYm9scy4gSXQgbG9va3MgbGlrZSBJJiMzOTtsbCB3YW50IHRvIGluY2x1ZGUgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGluaXRpYWxpemF0aW9uLCBmaW5hbGl6YXRpb24sIHByZXBhcmF0aW9uLCBjb21wbGV0aW9uLCBhbmQgY2FuY2VsbGF0aW9uIGZ1bmN0aW9uczogYG1jdHBfdXNibGliX3J4X2luaXRgLCBgbWN0cF91c2JsaWJfcnhfZmluaWAsIGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3J4X2NhbmNlbGAsIGBtY3RwX3VzYmxpYl90eF9pbml0YCwgYG1jdHBfdXNibGliX3R4X2ZpbmlgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgLgoKTmV4dCwgSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiBJIGtub3cgSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIGBNQ1RQYCwgYE1DVFBfVFJBTlNQT1JUX1VTQmAsIGFuZCBldmVuIHRob3VnaCBpdCYjMzk7cyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBNQ1RQX1RSQU5TUE9SVF9VU0JgLCBpdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIGluY2x1ZGUgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAuIEkgY29uc2lkZXJlZCBgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RgLCBidXQgdGhhdCYjMzk7cyBhIEtVbml0IHRlc3QsIGFuZCBmdXp6aW5nIHRoZSB0ZXN0IGl0c2VsZiBpc24mIzM5O3QgdGhlIGdvYWwgaGVyZTsgd2UgY2FuIGVuYWJsZSBpdCBsYXRlciBpZiBuZWVkZWQsIHRob3VnaCBLVW5pdCB0ZXN0cyB1c3VhbGx5IHJ1biBzZXBhcmF0ZWx5LiBBbHNvLCBzaW5jZSBgTUNUUF9UUkFOU1BPUlRfVVNCYCByZWxpZXMgb24gYFVTQmAsIHRoYXQgbXVzdCBiZSBlbmFibGVkLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gQWgsIHJpZ2h0LCBgTUNUUGAgZGVwZW5kcyBvbiBgTkVUYCwgc28gdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgdG9vLiBTbyBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBnb2luZyB0byBiZTogYE1DVFBgLCBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYFVTQmAsIGFuZCBgTkVUYC4KCkZpbmFsbHksIHRoZSB0YXJnZXQgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIG9yIGR1bW15X2hjZCBpbiBRRU1VLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGlzIHBsYW4sIHNvIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9VU0ImIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2luaXQmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfZmluaSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2NhbmNlbCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9pbml0JiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X2ZpbmkmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfcHVzaCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X2NhbmNlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCAobWN0cC11c2JsaWIpIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIE1DVFAgVVNCIGRyaXZlciB0byB1c2UgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgYW5kIGhhbmRsZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9pbml0JiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2ZpbmkmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jYW5jZWwmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfaW5pdCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9maW5pJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgKG1jdHAtdXNibGliKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNQ1RQIFVTQiBkcml2ZXIgdG8gdXNlIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGFuZCBoYW5kbGVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MTYuMjM1NTc3NjU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5NjAyNDk0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1jdHBfdXNibGliX3J4X2luaXRcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2ZpbmlcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X3ByZXBhcmVcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jYW5jZWxcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2luaXRcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2ZpbmlcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3B1c2hcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2NhbmNlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0IChtY3RwLXVzYmxpYikgYW5kIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgTUNUUCBVU0IgZHJpdmVyIHRvIHVzZSBpdC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIGR1bW15X2hjZCBvciByYXctZ2FkZ2V0KSBhbmQgaGFuZGxlcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MTYuMjM1NTg3NTI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2NjU0MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTNiOTZlYjk2NDUzYTIwNDRkZGEzNzEzZjU4YmY2YTk4ODAyOGIzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAwODo1MzoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcXG5pbmRleCBjZjMyNWFiMGIxZWY1NS4uYzQwYWM5YzY2NWI3NTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuQEAgLTQ3LDkgKzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcXG4gXFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXFxuIFxcdCAgaGF2aW5nIGEgXFxcIm1jdHAtY29udHJvbGxlclxcXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cXG4gXFxuK2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4rXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuK1xcdGRlcGVuZHMgb24gVVNCXFxuK1xcdGhlbHBcXG4rXFx0ICBDb21tb24gcHJvdG9jb2wgaGFuZGxpbmcgZnVuY3Rpb25zIGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydFxcbitcXHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcXG4rXFx0ICB0cmFuc3BvcnQgZHJpdmVyXFxuK1xcbitcXHQgIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgdGhlIHRyYW5zcG9ydCBkcml2ZXIuXFxuK1xcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcXG4rICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbisgICAgICAgIGRlcGVuZHMgb24gTUNUUF9UUkFOU1BPUlRfVVNCTElCPXkgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbisgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuK1xcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXFxuIFxcdHRyaXN0YXRlIFxcXCJNQ1RQIFVTQiB0cmFuc3BvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gVVNCXFxuK1xcdHNlbGVjdCBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4gXFx0aGVscFxcbiBcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxcbiBcXHQgIGRlZmluZWQgYnkgRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyODMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuaW5kZXggYzM2MDA2ODQ5YTFlN2QuLmM4NzBiNjJkM2YxYzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuQEAgLTIsMyArMiw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgKz0gbWN0cC1zZXJpYWwub1xcbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSArPSBtY3RwLWkyYy5vXFxuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICs9IG1jdHAtaTNjLm9cXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgKz0gbWN0cC11c2Iub1xcbitvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCKSArPSBtY3RwLXVzYmxpYi5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li41NDJhNTcwYzc2Y2M5OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcXG5AQCAtMyw5ICszLDkgQEBcXG4gICogbWN0cC11c2IuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGJpbmRpbmcgZHJpdmVyLlxcbiAgKlxcbiAgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcXG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXFxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxcbiAgKlxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuQEAgLTIyLDk1ICsyMiwxMTUgQEBcXG4gc3RydWN0IG1jdHBfdXNiIHtcXG4gXFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjtcXG4gXFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XFxuK1xcdGJvb2wgc3BhbjtcXG4gXFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcbiBcXHR1OCBlcF9pbjtcXG4gXFx0dTggZXBfb3V0O1xcbiBcXG4tXFx0c3RydWN0IHVyYiAqdHhfdXJiO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggcng7XFxuIFxcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcXG4rXFx0aW50IGluX2Vycl9jb3VudDtcXG4rXFx0aW50IGluX2Vycl9vcmlnO1xcbitcXHRib29sIGNsZWFyX2hhbHQ7XFxuIFxcbiBcXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xcbiBcXHRzcGlubG9ja190IHJ4X2xvY2s7XFxuIFxcdGJvb2wgcnhfc3RvcHBlZDtcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xcbitcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4IHR4O1xcbitcXHRzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7XFxuK1xcdC8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi9cXG4rXFx0c3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7XFxuK1xcdGludCB0eF9xbWVtO1xcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLFxcbitcXHRNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMixcXG4gfTtcXG4gXFxuKy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcXG4rICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSxcXG4rICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cXG4rICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxcbisgKlxcbisgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXFxuKyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXFxuKyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xcbitcXG4gc3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuLVxcdGludCBzdGF0dXM7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG4rXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4tXFx0c3RhdHVzID0gdXJiLVxcdTAwM2VzdGF0dXM7XFxuK1xcdG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUodHhfY3R4LCBuZXRkZXYsIHVyYi1cXHUwMDNlc3RhdHVzID09IDApO1xcbiBcXG4tXFx0c3dpdGNoIChzdGF0dXMpIHtcXG4tXFx0Y2FzZSAtRU5PRU5UOlxcbi1cXHRjYXNlIC1FQ09OTlJFU0VUOlxcbi1cXHRjYXNlIC1FU0hVVERPV046XFxuLVxcdGNhc2UgLUVQUk9UTzpcXG4tXFx0XFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIDA6XFxuLVxcdFxcdGRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRuZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7XFxuLVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJ1bmV4cGVjdGVkIHR4IHVyYiBzdGF0dXM6ICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbi1cXHRcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmV0ZGV2KTtcXG4tXFx0fVxcbitcXHR1c2JfZnJlZV91cmIodXJiKTtcXG4gXFxuLVxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xcbitcXHRtY3RwX3VzYi1cXHUwMDNldHhfcW1lbSAtPSBsZW47XFxuK1xcdGlmIChtY3RwX3VzYi1cXHUwMDNldHhfcW1lbSBcXHUwMDNjIFRYX1FNRU1fTUFYIFxcdTAwMjZcXHUwMDI2IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbitzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxcbitcXHRcXHRcXHQgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbi1cXHR1bnNpZ25lZCBpbnQgcGxlbjtcXG4rXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCB1cmIgKnVyYjtcXG4gXFx0aW50IHJjO1xcbiBcXG4tXFx0cGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbi1cXG4tXFx0aWYgKHBsZW4gKyBzaXplb2YoKmhkcikgXFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXFxuLVxcdFxcdGdvdG8gZXJyX2Ryb3A7XFxuLVxcbi1cXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XFxuLVxcdGlmIChyYylcXG4tXFx0XFx0Z290byBlcnJfZHJvcDtcXG4tXFxuLVxcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcXG4tXFx0aWYgKCFoZHIpXFxuLVxcdFxcdGdvdG8gZXJyX2Ryb3A7XFxuLVxcbi1cXHRoZHItXFx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuLVxcdGhkci1cXHUwMDNlcnN2ZCA9IDA7XFxuLVxcdGhkci1cXHUwMDNlbGVuID0gcGxlbiArIHNpemVvZigqaGRyKTtcXG4tXFxuLVxcdHVyYiA9IG1jdHBfdXNiLVxcdTAwM2V0eF91cmI7XFxuK1xcdHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmICghdXJiKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXFx1MDAzZXVzYmRldixcXG4gXFx0XFx0XFx0ICB1c2Jfc25kYnVsa3BpcGUobWN0cF91c2ItXFx1MDAzZXVzYmRldiwgbWN0cF91c2ItXFx1MDAzZWVwX291dCksXFxuLVxcdFxcdFxcdCAgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbixcXG4tXFx0XFx0XFx0ICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7XFxuK1xcdFxcdFxcdCAgZGF0YSwgbGVuLCBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHR4X2N0eCk7XFxuK1xcbitcXHRpZiAobWN0cF91c2ItXFx1MDAzZXNwYW4pXFxuK1xcdFxcdHVyYi1cXHUwMDNldHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUO1xcbitcXG4rXFx0dXNiX2FuY2hvcl91cmIodXJiLCBcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X2FuY2hvcik7XFxuIFxcbi1cXHQvKiBTdG9wcyBUWCBxdWV1ZSBmaXJzdCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uIHdpdGggVVJCIGNvbXBsZXRlICovXFxuLVxcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcXG4gXFx0cmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAocmMpIHtcXG4tXFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShkZXYpO1xcbi1cXHRcXHRnb3RvIGVycl9kcm9wO1xcbitcXHRcXHRuZXRkZXZfZGJnKG1jdHBfdXNiLVxcdTAwM2VuZXRkZXYsIFxcXCJUWCB1cmIgc3VibWl0IGZhaWxlZCwgJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0dXNiX3VuYW5jaG9yX3VyYih1cmIpO1xcbitcXHRcXHR1c2JfZnJlZV91cmIodXJiKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0bWN0cF91c2ItXFx1MDAzZXR4X3FtZW0gKz0gbGVuO1xcbitcXHRcXHRpZiAobWN0cF91c2ItXFx1MDAzZXR4X3FtZW0gXFx1MDAzZT0gVFhfUU1FTV9NQVgpXFxuK1xcdFxcdFxcdG5ldGlmX3N0b3BfcXVldWUobWN0cF91c2ItXFx1MDAzZW5ldGRldik7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7XFxuK1xcdC5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRib29sIG1vcmUgPSBuZXRkZXZfeG1pdF9tb3JlKCk7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eCwgc2tiLCBtb3JlKTtcXG4gXFxuLWVycl9kcm9wOlxcbi1cXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcXG4tXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG4gXFxuQEAgLTEyNSwyNCArMTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xcbiBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXHR2b2lkICpidWY7XFxuIFxcdGludCByYztcXG4gXFxuLVxcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LCBNQ1RQX1VTQl9YRkVSX1NJWkUsIGdmcCk7XFxuLVxcdGlmICghc2tiKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLVxcdTAwM2VuZXRkZXYsIFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2YnVmLCBcXHUwMDI2bGVuLCBnZnApO1xcbitcXHRpZiAocmMpXFxuIFxcdFxcdGdvdG8gZXJyX3JldHJ5O1xcbi1cXHR9XFxuIFxcbiBcXHR1c2JfZmlsbF9idWxrX3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cXHUwMDNldXNiZGV2LFxcbiBcXHRcXHRcXHQgIHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cXHUwMDNlZXBfaW4pLFxcbi1cXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxcbi1cXHRcXHRcXHQgIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBza2IpO1xcbitcXHRcXHRcXHQgIGJ1ZiwgbGVuLCBtY3RwX3VzYl9pbl9jb21wbGV0ZSwgbWN0cF91c2IpO1xcbiBcXG4gXFx0cmMgPSB1c2Jfc3VibWl0X3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiLCBnZnApO1xcbiBcXHRpZiAocmMpIHtcXG4gXFx0XFx0bmV0ZGV2X2RiZyhtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LCBcXFwicnggdXJiIHN1Ym1pdCBmYWlsdXJlOiAlZFxcXFxuXFxcIiwgcmMpO1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngpO1xcbiBcXHRcXHRpZiAocmMgPT0gLUVOT01FTSlcXG4gXFx0XFx0XFx0Z290byBlcnJfcmV0cnk7XFxuIFxcdH1cXG5AQCAtMTU3LDE0ICsxNzYsMzQgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ4X2Vycl9tYXggPSAxMDtcXG4rXFxuKy8qIFJldHVybnMgLTEgaWYgd2UgaGF2ZSBoaXQgZXhjZXNzaXZlIGVycm9ycywgemVybyBvdGhlcndpc2UuICovXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JfaW5fdXJiX2VycihzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBpbnQgc3RhdHVzLFxcbitcXHRcXHRcXHQgICAgICAgYm9vbCBzdGFsbGVkKVxcbit7XFxuK1xcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4rXFxuK1xcdGlmICghbWN0cF91c2ItXFx1MDAzZWluX2Vycl9jb3VudCsrKVxcbitcXHRcXHRtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX29yaWcgPSBzdGF0dXM7XFxuK1xcbitcXHRpZiAobWN0cF91c2ItXFx1MDAzZWluX2Vycl9jb3VudCBcXHUwMDNlPSByeF9lcnJfbWF4KSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobWN0cF91c2ItXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcImV4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSVzIElOIEVQLCBmaXJzdDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHN0YWxsZWQgPyBcXFwiIChzdGFsbGVkKVxcXCIgOiBcXFwiXFxcIixcXG4rXFx0XFx0XFx0ICAgbWN0cF91c2ItXFx1MDAzZWluX2Vycl9vcmlnKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiB7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2IgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItXFx1MDAzZWRldjtcXG4tXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XFxuLVxcdHVuc2lnbmVkIGludCBsZW47XFxuLVxcdGludCBzdGF0dXM7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpbnQgcmMsIHN0YXR1cztcXG4gXFxuIFxcdHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiBcXG5AQCAtMTcyLDgwICsyMTEsNDMgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRjYXNlIC1FTk9FTlQ6XFxuIFxcdGNhc2UgLUVDT05OUkVTRVQ6XFxuIFxcdGNhc2UgLUVTSFVURE9XTjpcXG4tXFx0Y2FzZSAtRVBST1RPOlxcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHRjYXNlIDA6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHQvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbid0IHJlc3VibWl0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuLVxcbi1cXHRsZW4gPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGg7XFxuLVxcdF9fc2tiX3B1dChza2IsIGxlbik7XFxuLVxcbi1cXHR3aGlsZSAoc2tiKSB7XFxuLVxcdFxcdHN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDtcXG4tXFx0XFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbi1cXHRcXHR1OCBwa3RfbGVuOyAvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIG5vIFVTQiBoZWFkZXIgKi9cXG4tXFxuLVxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuLVxcdFxcdGhkciA9IHNrYl9wdWxsX2RhdGEoc2tiLCBzaXplb2YoKmhkcikpO1xcbi1cXHRcXHRpZiAoIWhkcilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHRpZiAoYmUxNl90b19jcHUoaGRyLVxcdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xcbi1cXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInJ4OiBpbnZhbGlkIGlkICUwNHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgIGJlMTZfdG9fY3B1KGhkci1cXHUwMDNlaWQpKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmIChoZHItXFx1MDAzZWxlbiBcXHUwMDNjXFxuLVxcdFxcdCAgICBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSArIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkge1xcbi1cXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInJ4OiBzaG9ydCBwYWNrZXQgKGhkcikgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgIGhkci1cXHUwMDNlbGVuKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qIHdlIGtub3cgd2UgaGF2ZSBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikgaGVyZSAqL1xcbi1cXHRcXHRwa3RfbGVuID0gaGRyLVxcdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XFxuLVxcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pIHtcXG4tXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuLVxcdFxcdFxcdFxcdCAgIFxcXCJyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICBoZHItXFx1MDAzZWxlbiwgc2tiLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKHBrdF9sZW4gXFx1MDAzYyBza2ItXFx1MDAzZWxlbikge1xcbi1cXHRcXHRcXHQvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3XFxuLVxcdFxcdFxcdCAqIHNrYiB0byB1c2Ugb24gdGhlIG5leHQgaXRlcmF0aW9uXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxuLVxcdFxcdFxcdGlmIChza2IyKSB7XFxuLVxcdFxcdFxcdFxcdGlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHtcXG4tXFx0XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYjIpO1xcbi1cXHRcXHRcXHRcXHRcXHRza2IyID0gTlVMTDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNrYl90cmltKHNrYiwgcGt0X2xlbik7XFxuLVxcdFxcdH1cXG4gXFxuLVxcdFxcdGRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRjYXNlIC1FUElQRTpcXG4rXFx0XFx0LyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqL1xcbitcXHRcXHRyYyA9IG1jdHBfdXNiX2luX3VyYl9lcnIobWN0cF91c2IsIHN0YXR1cywgdHJ1ZSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0bWN0cF91c2ItXFx1MDAzZWNsZWFyX2hhbHQgPSB0cnVlO1xcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aWYgKCFtY3RwX3VzYi1cXHUwMDNlcnhfc3RvcHBlZClcXG4rXFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcnhfcmV0cnlfd29yayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgUlhfUkVUUllfREVMQVkpO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XFxuLVxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbi1cXHRcXHRjYiA9IF9fbWN0cF9jYihza2IpO1xcbi1cXHRcXHRjYi1cXHUwMDNlaGFsZW4gPSAwO1xcbi1cXHRcXHRuZXRpZl9yeChza2IpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRjYXNlIC1FVElNRTpcXG4rXFx0Y2FzZSAtRVBST1RPOlxcbitcXHRjYXNlIC1FSUxTRVE6XFxuK1xcdGNhc2UgLUVPVkVSRkxPVzpcXG4rXFx0XFx0LyogcG9zc2libHkgdHJhbnNpZW50OyByZWNvcmQgZmlyc3QgZmFpbHVyZSwgcmVzdWJtaXQgKi9cXG4rXFx0XFx0cmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0c2tiID0gc2tiMjtcXG4rXFx0Y2FzZSAwOlxcbitcXHRcXHRtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngsIHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCk7XFxuK1xcdFxcdG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfY291bnQgPSAwO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHNrYilcXG4tXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLVxcbiBcXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7XFxuIH1cXG4gXFxuQEAgLTI1Myw2ICsyNTUsMzAgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfcnhfcmV0cnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWN0cF91c2IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCByeF9yZXRyeV93b3JrLndvcmspO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovXFxuK1xcdGlmIChtY3RwX3VzYi1cXHUwMDNlY2xlYXJfaGFsdCkge1xcbitcXHRcXHRpbnQgcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cXHUwMDNlZXBfaW4pO1xcbitcXG4rXFx0XFx0cmMgPSB1c2JfY2xlYXJfaGFsdChtY3RwX3VzYi1cXHUwMDNldXNiZGV2LCBwaXBlKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobWN0cF91c2ItXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcImNhbid0IGNsZWFyIElOIEVQIGhhbHQ6ICVkXFxcXG5cXFwiLCByYyk7XFxuK1xcbitcXHRcXHRcXHRpZiAoKyttY3RwX3VzYi1cXHUwMDNlaW5fZXJyX2NvdW50IFxcdTAwM2U9IHJ4X2Vycl9tYXgpXFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRpZiAoIW1jdHBfdXNiLVxcdTAwM2VyeF9zdG9wcGVkKVxcbitcXHRcXHRcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeF9yZXRyeV93b3JrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSWF9SRVRSWV9ERUxBWSk7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeF9sb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRtY3RwX3VzYi1cXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XFxuIH1cXG5AQCAtMjYyLDYgKzI4OCw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuIFxcdFdSSVRFX09OQ0UobWN0cF91c2ItXFx1MDAzZXJ4X3N0b3BwZWQsIGZhbHNlKTtcXG4rXFx0bWN0cF91c2ItXFx1MDAzZWNsZWFyX2hhbHQgPSBmYWxzZTtcXG4rXFx0bWN0cF91c2ItXFx1MDAzZWluX2Vycl9jb3VudCA9IDA7XFxuIFxcbiBcXHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xcbiBcXG5AQCAtMjg0LDcgKzMxMiwxMSBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcnhfcmV0cnlfd29yayk7XFxuIFxcbiBcXHR1c2Jfa2lsbF91cmIobWN0cF91c2ItXFx1MDAzZXJ4X3VyYik7XFxuLVxcdHVzYl9raWxsX3VyYihtY3RwX3VzYi1cXHUwMDNldHhfdXJiKTtcXG4rXFxuK1xcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9hbmNob3IpO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfY2FuY2VsKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNldHgsIGRldiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSk7XFxuK1xcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMwMSw3ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9uZXRkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGRldi1cXHUwMDNlbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcXG4gXFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcXG4tXFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDtcXG4rXFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcXG4gXFx0ZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcXG5AQCAtMzE3LDYgKzM0OSw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcdHN0cnVjdCBtY3RwX3VzYiAqZGV2O1xcbitcXHRib29sIHNwYW47XFxuIFxcdGludCByYztcXG4gXFxuIFxcdC8qIG9ubHkgb25lIGFsdGVybmF0ZSAqL1xcbkBAIC0zMjgsNiArMzYxLDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRzcGFuID0gaWZhY2VfZGVzYy1cXHUwMDNlZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTjtcXG4rXFxuIFxcdG5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFxcXCJtY3RwdXNiJWRcXFwiLCBORVRfTkFNRV9FTlVNLFxcbiBcXHRcXHRcXHQgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApO1xcbiBcXHRpZiAoIW5ldGRldilcXG5AQCAtMzM1LDMzICszNzAsNDYgQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFxuIFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXFx1MDAyNmludGYtXFx1MDAzZWRldik7XFxuIFxcdGRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGRldi1cXHUwMDNlc3BhbiA9IHNwYW47XFxuIFxcdGRldi1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbiBcXHRkZXYtXFx1MDAzZXVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIFxcdGRldi1cXHUwMDNlaW50ZiA9IGludGY7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRpZiAoZGV2LVxcdTAwM2VzcGFuKVxcbitcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzFfTVRVX01BWDtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRldi1cXHUwMDNldHhfcW1lbV9sb2NrKTtcXG4gXFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xcbiBcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4LCBsZTE2X3RvX2NwdShlcF9pbi1cXHUwMDNld01heFBhY2tldFNpemUpLFxcbitcXHRcXHRcXHRcXHQgZGV2LVxcdTAwM2VzcGFuKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX25ldGRldjtcXG4rXFx0bWN0cF91c2JsaWJfdHhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V0eCwgXFx1MDAyNnR4X29wcywgZGV2LCBkZXYtXFx1MDAzZXNwYW4pO1xcbitcXHRpbml0X3VzYl9hbmNob3IoXFx1MDAyNmRldi1cXHUwMDNldHhfYW5jaG9yKTtcXG4rXFxuIFxcdGRldi1cXHUwMDNlZXBfaW4gPSBlcF9pbi1cXHUwMDNlYkVuZHBvaW50QWRkcmVzcztcXG4gXFx0ZGV2LVxcdTAwM2VlcF9vdXQgPSBlcF9vdXQtXFx1MDAzZWJFbmRwb2ludEFkZHJlc3M7XFxuIFxcbi1cXHRkZXYtXFx1MDAzZXR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XFxuIFxcdGRldi1cXHUwMDNlcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcXG4tXFx0aWYgKCFkZXYtXFx1MDAzZXR4X3VyYiB8fCAhZGV2LVxcdTAwM2VyeF91cmIpIHtcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZXJ4X3VyYikge1xcbiBcXHRcXHRyYyA9IC1FTk9NRU07XFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWVfdXJicztcXG4rXFx0XFx0Z290byBlcnJfZmluaV9yeHR4O1xcbiBcXHR9XFxuIFxcbiBcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2ZGV2LVxcdTAwM2VyeF9yZXRyeV93b3JrLCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKTtcXG4gXFxuIFxcdHJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2LCBOVUxMLCBNQ1RQX1BIWVNfQklORElOR19VU0IpO1xcbiBcXHRpZiAocmMpXFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWVfdXJicztcXG4rXFx0XFx0Z290byBlcnJfZnJlZV91cmI7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWVycl9mcmVlX3VyYnM6XFxuLVxcdHVzYl9mcmVlX3VyYihkZXYtXFx1MDAzZXR4X3VyYik7XFxuK2Vycl9mcmVlX3VyYjpcXG4gXFx0dXNiX2ZyZWVfdXJiKGRldi1cXHUwMDNlcnhfdXJiKTtcXG4rZXJyX2Zpbmlfcnh0eDpcXG4rXFx0bWN0cF91c2JsaWJfdHhfZmluaShcXHUwMDI2ZGV2LVxcdTAwM2V0eCk7XFxuK1xcdG1jdHBfdXNibGliX3J4X2ZpbmkoXFx1MDAyNmRldi1cXHUwMDNlcngpO1xcbitlcnJfZnJlZV9uZXRkZXY6XFxuIFxcdGZyZWVfbmV0ZGV2KG5ldGRldik7XFxuIFxcdHJldHVybiByYztcXG4gfVxcbkBAIC0zNzEsMTMgKzQxOSwxNSBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiBcXHRzdHJ1Y3QgbWN0cF91c2IgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuIFxcbiBcXHRtY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KGRldi1cXHUwMDNlbmV0ZGV2KTtcXG4tXFx0dXNiX2ZyZWVfdXJiKGRldi1cXHUwMDNldHhfdXJiKTtcXG4rXFx0bWN0cF91c2JsaWJfcnhfZmluaShcXHUwMDI2ZGV2LVxcdTAwM2VyeCk7XFxuK1xcdG1jdHBfdXNibGliX3R4X2ZpbmkoXFx1MDAyNmRldi1cXHUwMDNldHgpO1xcbiBcXHR1c2JfZnJlZV91cmIoZGV2LVxcdTAwM2VyeF91cmIpO1xcbiBcXHRmcmVlX25ldGRldihkZXYtXFx1MDAzZW5ldGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtY3RwX3VzYl9kZXZpY2VzW10gPSB7XFxuLVxcdHsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCAweDAsIDB4MSkgfSxcXG4rXFx0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UsIDB4MSkgfSxcXG4rXFx0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4sIDB4MSkgfSxcXG4gXFx0eyAwIH0sXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWRmNDAxYTkxNGZmNTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcXG5AQCAtMCwwICsxLDQxMiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBtY3RwLXVzYmxpYi10ZXN0LmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeSxcXG4rICogdW5pdCB0ZXN0IGRlZmluaXRpb25zLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NrdW5pdC90ZXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9hcnAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9tY3RwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbWN0cGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0c3RydWN0IG1jdHBfZGV2ICptZGV2O1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3BrdHM7XFxuK307XFxuK1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHgge1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfcm91dGUgcnQ7XFxuK307XFxuK1xcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdC8qIHdlIGRvbid0IHRyYWNrIGFueSBUWGVkIHBhY2tldHMgYXQgcHJlc2VudCAqL1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3RwX3Rlc3RfbmV0ZGV2X29wcyA9IHtcXG4rXFx0Lm5kb19zdGFydF94bWl0ID0gbWN0cF91c2JsaWJfZGV2X3R4LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHUxNiBlcF9tYXhwYWNrZXQgPSA1MTI7XFxuK3N0YXRpYyBjb25zdCBtY3RwX2VpZF90IGxvY2FsX2VpZCA9IDg7XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0bmRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9NQ1RQO1xcbitcXHRuZGV2LVxcdTAwM2VtdHUgPSA4MTkyO1xcbitcXHRuZGV2LVxcdTAwM2VmbGFncyA9IElGRl9OT0FSUDtcXG4rXFx0bmRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZtY3RwX3Rlc3RfbmV0ZGV2X29wcztcXG4rXFx0bmRldi1cXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xcbitcXHRuZGV2LVxcdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfRFNUQVRTO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24odm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IGRhdGE7XFxuK1xcbitcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcdGlmIChkZXYtXFx1MDAzZW1kZXYpXFxuK1xcdFxcdG1jdHBfZGV2X3B1dChkZXYtXFx1MDAzZW1kZXYpO1xcbitcXHR1bnJlZ2lzdGVyX25ldGRldihkZXYtXFx1MDAzZW5kZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpcXG4rbWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdG5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpkZXYpLCBcXFwibWN0cHRlc3QlZFxcXCIsIE5FVF9OQU1FX0VOVU0sXFxuK1xcdFxcdFxcdCAgICBtY3RwX3VzYmxpYl9kZXZfc2V0dXApO1xcbitcXHRpZiAoIW5kZXYpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGRldi1cXHUwMDNlbmRldiA9IG5kZXY7XFxuK1xcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcbitcXHRyYyA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGZyZWVfbmV0ZGV2KG5kZXYpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbiwgZGV2KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZGV2LVxcdTAwM2VtZGV2ID0gX19tY3RwX2Rldl9nZXQobmRldik7XFxuK1xcdGlmIChkZXYtXFx1MDAzZW1kZXYpXFxuK1xcdFxcdGRldi1cXHUwMDNlbWRldi1cXHUwMDNlbmV0ID0gbWN0cF9kZWZhdWx0X25ldChkZXZfbmV0KG5kZXYpKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbWRldilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0cmMgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBkZXY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X3BrdHMsIHNrYik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4ID0gZGF0YTtcXG4rXFxuK1xcdC8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtXFx1MDAzZXJ0IHdpbGwgYmUgdW5saW5rZWQuXFxuK1xcdCAqIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGlzIGFzIGV4cGVjdGVkLlxcbitcXHQgKi9cXG4rXFx0S1VOSVRfRVhQRUNUX1RSVUUoY3VycmVudC1cXHUwMDNla3VuaXRfdGVzdCxcXG4rXFx0XFx0XFx0ICByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN0eC1cXHUwMDNlcnQucmVmcykpO1xcbitcXG4rXFx0a2ZyZWUoY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqbWN0cF91c2JsaWJfdGVzdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfcm91dGUgKnJ0O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eCk7XFxuK1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3R4LVxcdTAwM2VydC5saXN0KTtcXG4rXFx0cnQgPSBcXHUwMDI2Y3R4LVxcdTAwM2VydDtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZydC1cXHUwMDNlcmVmcywgMSk7XFxuK1xcbitcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbiwgY3R4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlZGV2ID0gbWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHRlc3QpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4LVxcdTAwM2VkZXYpO1xcbitcXG4rXFx0cnQtXFx1MDAzZW1pbiA9IGxvY2FsX2VpZDtcXG4rXFx0cnQtXFx1MDAzZW1heCA9IGxvY2FsX2VpZDtcXG4rXFx0cnQtXFx1MDAzZWRzdF90eXBlID0gTUNUUF9ST1VURV9ESVJFQ1Q7XFxuK1xcdHJ0LVxcdTAwM2V0eXBlID0gUlROX0xPQ0FMO1xcbitcXHRydC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXYtXFx1MDAzZW1kZXY7XFxuK1xcdHJ0LVxcdTAwM2VvdXRwdXQgPSBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQ7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0bGlzdF9hZGRfcmN1KFxcdTAwMjZjdHgtXFx1MDAzZXJ0Lmxpc3QsIFxcdTAwMjZpbml0X25ldC5tY3RwLnJvdXRlcyk7XFxuK1xcdHJlZmNvdW50X2luYyhcXHUwMDI2cnQtXFx1MDAzZXJlZnMpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIGN0eDtcXG4rfVxcbitcXG4rLyogSW5pdCBhIE1DVFAtb3Zlci1VU0IgcGFja2V0IHdpdGhpbiBhIGJ1ZmZlci4gQGxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZVxcbisgKiBidWZmZXIgdG8gd3JpdGUsIEBwYXlsb2FkX2xlbiBpcyB0aGUgcmVwb3J0ZWQgc2l6ZSBvZiB0aGUgTUNUUC1vdmVyLVVTQlxcbisgKiBwYWNrZXQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHZvaWQgKmRhdGEsIHNpemVfdCBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBwYXlsb2FkX2xlbilcXG4re1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRzdHJ1Y3QgbWN0cF91c2JfaGRyIHVzYjtcXG4rXFx0XFx0c3RydWN0IG1jdHBfaGRyIG1jdHA7XFxuK1xcdH0gaGRyO1xcbitcXG4rXFx0aGRyLnVzYi5pZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xcbitcXHRoZHIudXNiLmxlbiA9IGNwdV90b19iZTE2KHBheWxvYWRfbGVuKTtcXG4rXFx0aGRyLm1jdHAudmVyID0gMTtcXG4rXFx0aGRyLm1jdHAuZGVzdCA9IGxvY2FsX2VpZDtcXG4rXFx0aGRyLm1jdHAuc3JjID0gMDtcXG4rXFx0aGRyLm1jdHAuZmxhZ3Nfc2VxX3RhZyA9IDA7XFxuK1xcbitcXHRtZW1jcHkoZGF0YSwgXFx1MDAyNmhkciwgbWluKGxlbiwgc2l6ZW9mKGhkcikpKTtcXG4rXFx0aWYgKGxlbiBcXHUwMDNlIHNpemVvZihoZHIpKVxcbitcXHRcXHRtZW1zZXQoZGF0YSArIHNpemVvZihoZHIpLCAwLCBsZW4gLSBzaXplb2YoaGRyKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjdGlvbl9yeF9maW5pKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCA9IGRhdGE7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl9yeF9maW5pKHJ4KTtcXG4rXFx0a2ZyZWUocngpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3J4ICpcXG4rbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdHJ4ID0ga3phbGxvY19vYmooKnJ4KTtcXG4rXFx0aWYgKHJ4KSB7XFxuK1xcdFxcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpO1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXHR9XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByeCk7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcbitcXHRyZXR1cm4gcng7XFxuK31cXG4rXFxuKy8qIFdyYXBwZXJzIGZvciB1c2JsaWIncyByeF9jb21wbGV0ZSBjYWxsYmFjaywgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkXFxuKyAqIGZyb20gYXRvbWljIGNvbnRleHRcXG4rICovXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIHJ4LCBsZW4pO1xcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyogU2luZ2xlIHBhY2tldCwgc3RhcnRpbmcgb24gYSB0cmFuc2ZlciBib3VuZGFyeSwgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpblxcbisgKiB0aGUgdHJhbnNmZXJcXG4rICovXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdHZvaWQgKmJ1ZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xcbitcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cXHUwMDNlbmRldiwgcngsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2YnVmLCBcXHUwMDI2bGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdC8qIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIG1heHBhY2tldCBvZiB0cmFuc2ZlciBhdmFpbGFibGUgKi9cXG4rXFx0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGxlbiwgZXBfbWF4cGFja2V0KTtcXG4rXFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QoYnVmLCA4LCA4KTtcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCA4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xcbitcXHRpZiAoc2tiKVxcbitcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLVxcdTAwM2VsZW4sIDQpO1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rfVxcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4ge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRzaXplX3Qgbl9wa3RzO1xcbitcXHRzaXplX3QgcGt0c1s2XTtcXG4rXFx0c2l6ZV90IG5feGZlcnM7XFxuK1xcdHNpemVfdCB4ZmVyc1s2XTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkXFxuK21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyhjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqdCxcXG4rXFx0XFx0XFx0XFx0ICBjaGFyICpkZXNjKVxcbit7XFxuK1xcdHN0cnNjcHkoZGVzYywgdC1cXHUwMDNlbmFtZSwgS1VOSVRfUEFSQU1fREVTQ19TSVpFKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl92YWxpZGF0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpzcGFuLFxcbitcXHRcXHRcXHRcXHQgICBzaXplX3QgKmxlbilcXG4re1xcbitcXHRzaXplX3QgcGt0X2xlbiA9IDAsIHhmZXJfbGVuID0gMDtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3Bhbi1cXHUwMDNlbl9wa3RzOyBpKyspIHtcXG4rXFx0XFx0S1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLVxcdTAwM2Vwa3RzW2ldLCA4LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBrdFsldV0gbGVuIHRvbyBzbWFsbCAoJXp1KSBmb3IgJXNcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgaSwgc3Bhbi1cXHUwMDNlcGt0c1tpXSwgc3Bhbi1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHBrdF9sZW4gKz0gc3Bhbi1cXHUwMDNlcGt0c1tpXTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNwYW4tXFx1MDAzZW5feGZlcnM7IGkrKylcXG4rXFx0XFx0eGZlcl9sZW4gKz0gc3Bhbi1cXHUwMDNleGZlcnNbaV07XFxuK1xcbitcXHRLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHBrdF9sZW4sIHhmZXJfbGVuLFxcbitcXHRcXHRcXHQgICAgXFxcImludmFsaWQgcGt0X2xlbiAoJXp1KSAhPSB4ZmVyX2xlbiAoJXp1KSBmb3IgJXNcXFwiLFxcbitcXHRcXHRcXHQgICAgcGt0X2xlbiwgeGZlcl9sZW4sIHNwYW4tXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0KmxlbiA9IHBrdF9sZW47XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpwa3Rfc3BhbiA9IHRlc3QtXFx1MDAzZXBhcmFtX3ZhbHVlO1xcbitcXHRzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0dTggKnBrdGJ1ZjtcXG4rXFx0dm9pZCAqYnVmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHRlc3QsIHBrdF9zcGFuLCBcXHUwMDI2bGVuKTtcXG4rXFx0cGt0YnVmID0ga3VuaXRfa21hbGxvY19hcnJheSh0ZXN0LCAxLCBsZW4sIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcGt0YnVmKTtcXG4rXFxuK1xcdC8qIGxheSBvdXQgcGFja2V0cyAqL1xcbitcXHRmb3IgKG9mZiA9IDAsIGkgPSAwOyBpIFxcdTAwM2MgcGt0X3NwYW4tXFx1MDAzZW5fcGt0czsgaSsrKSB7XFxuK1xcdFxcdGxlbiA9IHBrdF9zcGFuLVxcdTAwM2Vwa3RzW2ldO1xcbitcXHRcXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiArIG9mZiwgbGVuLCBsZW4pO1xcbitcXHRcXHRvZmYgKz0gbGVuO1xcbitcXHR9XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdGRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XFxuK1xcbitcXHQvKiBmZWVkIHRyYW5zZmVycyAqL1xcbitcXHRmb3IgKG9mZiA9IDAsIHhmZXJfb2ZmID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBwa3Rfc3Bhbi1cXHUwMDNlbl94ZmVyczspIHtcXG4rXFx0XFx0eGZlcl9sZW4gPSBwa3Rfc3Bhbi1cXHUwMDNleGZlcnNbaV0gLSB4ZmVyX29mZjtcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cXHUwMDNlbmRldiwgcngsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YnVmLCBcXHUwMDI2bGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdFxcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XFxuK1xcbitcXHRcXHRsZW4gPSBtaW4obGVuLCB4ZmVyX2xlbik7XFxuK1xcdFxcdG1lbWNweShidWYsIHBrdGJ1ZiArIG9mZiwgbGVuKTtcXG4rXFxuK1xcdFxcdGlmIChsZW4gPT0geGZlcl9sZW4pIHtcXG4rXFx0XFx0XFx0Lyogd2hvbGUvZW5kIHhmZXIsIHByb2NlZWQgdG8gbmV4dCAqL1xcbitcXHRcXHRcXHR4ZmVyX29mZiA9IDA7XFxuK1xcdFxcdFxcdGkrKztcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0LyogcGFydGlhbCAqL1xcbitcXHRcXHRcXHR4ZmVyX29mZiArPSBsZW47XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJjID0gbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCBsZW4pO1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXHRcXHRvZmYgKz0gbGVuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBjaGVjayByZWNlaXZlZCBwYWNrZXRzICovXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXFx1MDAzZXJ4X3BrdHMucWxlbiwgcGt0X3NwYW4tXFx1MDAzZW5fcGt0cyk7XFxuK1xcdGZvciAoaSA9IDA7IDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X3BrdHMpO1xcbitcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKGkgXFx1MDAzYyBwa3Rfc3Bhbi1cXHUwMDNlbl9wa3RzKVxcbitcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLVxcdTAwM2VsZW4sIHBrdF9zcGFuLVxcdTAwM2Vwa3RzW2ldIC0gNCk7XFxuK1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcXG4rXFx0LyogT25lIHBhY2tldCBjb21wbGV0ZWx5IHdpdGhpbiBhIHRyYW5zZmVyICovXFxuK1xcdHsgXFxcIjFwMXgtY29tcGxldGVcXFwiLCAxLCB7IDggfSwgMSwgeyA4IH0gfSxcXG4rXFx0LyogVHdvIHNtYWxsIHBhY2tldHMgY29tYmluZWQgd2l0aGluIG9uZSB0cmFuc2ZlciAqL1xcbitcXHR7IFxcXCIycDF4LWNvbWJpbmVkXFxcIiwgMiwgeyA4LCA4IH0sIDEsIHsgMTYgfSB9LFxcbitcXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cXG4rXFx0eyBcXFwiMXAyeC1zcGxpdC1wYXlsb2FkXFxcIiwgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxcbitcXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBVU0IgdHJhbnNwb3J0IGhlYWRlciAqL1xcbitcXHR7IFxcXCIxcDJ4LXNwbGl0LXVzYmhkclxcXCIsIDEsIHsgMTYgfSwgMiwgeyAyLCAxNCB9IH0sXFxuK1xcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgaGVhZGVyICovXFxuK1xcdHsgXFxcIjFwMngtc3BsaXQtbWN0cGhkclxcXCIsIDEsIHsgMTYgfSwgMiwgeyA2LCAxMCB9IH0sXFxuK1xcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xcbitcXHR7IFxcXCIxcDN4LXNwbGl0XFxcIiwgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxcbitcXHQvKiBNYXgtc2l6ZWQgc2luZ2xlIHRyYW5zZmVyICovXFxuK1xcdHsgXFxcIjFwMXgtbGFyZ2VcXFwiLCAxLCB7IDgxOTEgfSwgMSwgeyA4MTkxIH0gfSxcXG4rXFx0LyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGFcXG4rXFx0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxcbitcXHQgKi9cXG4rXFx0eyBcXFwiMnAyeC1sYXJnZS1zcGxpdFxcXCIsIDIsIHsgODE5MCwgODE5MCB9LCAyLCB7IDgxOTEsIDgxODkgfSB9LFxcbit9O1xcbitcXG4rS1VOSVRfQVJSQVlfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbiwgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnMsXFxuK1xcdFxcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLFxcbitcXHRLVU5JVF9DQVNFX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sXFxuK1xcdFxcdFxcdCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLFxcbitcXHR7fVxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xcbitcXHQubmFtZSA9IFxcXCJtY3RwLXVzYmxpYlxcXCIsXFxuK1xcdC50ZXN0X2Nhc2VzID0gbWN0cF91c2JsaWJfdGVzdF9jYXNlcyxcXG4rfTtcXG4rXFxuK2t1bml0X3Rlc3Rfc3VpdGUobWN0cF91c2JsaWJfdGVzdF9zdWl0ZSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxOTk3Zjk4OTAyNmY5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xcbkBAIC0wLDAgKzEsNjI1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeVxcbisgKlxcbisgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcXG4rICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL2NoOS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbWN0cC5oXFx1MDAzZVxcbitcXG4raW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxcbit7XFxuK1xcdGlmICghZXBfcGt0bGVuKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChlcF9wa3RsZW4gXFx1MDAyNiB+VVNCX0VORFBPSU5UX01BWFBfTUFTSylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtZW1zZXQocngsIDAsIHNpemVvZigqcngpKTtcXG4rXFx0cngtXFx1MDAzZXNwYW4gPSBzcGFuO1xcbitcXHRyeC1cXHUwMDNlZXBfcGt0bGVuID0gZXBfcGt0bGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4re1xcbitcXHRrZnJlZV9za2IocngtXFx1MDAzZXNrYik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XFxuK1xcbisvKlxcbisgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcXG4rICogYmUgcG9wdWxhdGVkIG9uIHN1Y2Nlc3MuXFxuKyAqL1xcbitpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxcbitcXHRcXHRcXHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVxcdTAwM2Vza2I7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xcbitcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWxlbiBcXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xcbitcXHRcXHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XFxuK1xcdFxcdHNrYiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbiA9IHJ4LVxcdTAwM2VzcGFuID8gcm91bmR1cChNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCwgcngtXFx1MDAzZWVwX3BrdGxlbilcXG4rXFx0XFx0OiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFO1xcbitcXG4rXFx0aWYgKCFza2IpIHtcXG4rXFx0XFx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgbGVuLCBnZnApO1xcbitcXHRcXHRpZiAoIXNrYilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHR9IGVsc2UgaWYgKHNrYi1cXHUwMDNlY2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpIFxcdTAwM2MgcngtXFx1MDAzZWVwX3BrdGxlbikge1xcbitcXHRcXHQvKiBXZSBhbHdheXMgbmVlZCB0byByZWFsbG9jIGlmIC1cXHUwMDNlY2xvbmVkLCBhcyB3ZSBjYW5ub3RcXG4rXFx0XFx0ICogcmVzdWJtaXQgdGhlIChub3ctc2hhcmVkKSBza2IgYnVmZmVyIGZvciBwb3NzaWJsZSBETUEuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIE90aGVyd2lzZSAoaWYgd2UgaGF2ZSBhbiB1bi1jbG9uZWQgU0tCKToganVzdCBlbnN1cmUgd2VcXG4rXFx0XFx0ICogaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIHByZXZlbnQgYmFiYmxlLiBTaW5jZSB3ZSBhbGxvY2F0ZWRcXG4rXFx0XFx0ICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnlcXG4rXFx0XFx0ICogb2YgdGhhdCBzcGFjZSBmb3IgYSBwcmlvciBNQ1RQIHBhY2tldCwgYmVjYXVzZSAhY2xvbmVkKSwgd2VcXG4rXFx0XFx0ICogaGF2ZSBzdWZmaWNpZW50IGRhdGEgdG8gZmluaXNoIHRoZSBjdXJyZW50IE1DVFAgcGFja2V0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XFxuK1xcbitcXHRcXHRza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgMCwgbGVuLCBnZnApO1xcbitcXHRcXHRpZiAoIXNrYjIpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbitcXHRcXHRza2IgPSBza2IyO1xcbitcXHR9XFxuK1xcbitcXHRyeC1cXHUwMDNlc2tiID0gc2tiO1xcbitcXG4rXFx0LyogU3Bhbm5pbmcgbW9kZSBhbGxvd3MgWkxQcywgc28gd2UgZG9uJ3QgcmVxdWlyZSBleGFjdGx5IG9uZVxcbitcXHQgKiB0cmFuc2ZlciBwYWNrZXQuIElmIHdlIGhhdmUgZXh0cmEgdGFpbHJvb20sIG1heSBhcyB3ZWxsIHVzZSBpdCxcXG4rXFx0ICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSBcXHUwMDNlPSBlcF9wa3RsZW4uXFxuK1xcdCAqL1xcbitcXHRpZiAocngtXFx1MDAzZXNwYW4pXFxuK1xcdFxcdGxlbiA9IHJvdW5kZG93bihza2JfdGFpbHJvb20oc2tiKSwgcngtXFx1MDAzZWVwX3BrdGxlbik7XFxuK1xcbitcXHQqYnVmcCA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTtcXG4rXFx0KmxlbnAgPSBsZW47XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIobmV0ZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbitcXHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4rXFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xcbitcXG4rXFx0Lyogd2UncmUgY2FsbGVkIGZyb20gYW4gVVJCIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIGNhbm5vdCBhc3N1bWUgbG9jYWxcXG4rXFx0ICogaXJxcyBhcmUgYWx3YXlzIGRpc2FibGVkXFxuK1xcdCAqL1xcbitcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCk7XFxuK1xcdHU2NF9zdGF0c19pbmMoXFx1MDAyNmRzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyk7XFxuK1xcdHU2NF9zdGF0c19hZGQoXFx1MDAyNmRzdGF0cy1cXHUwMDNlcnhfYnl0ZXMsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCwgZmxhZ3MpO1xcbitcXG4rXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xcbitcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0Y2IgPSBfX21jdHBfY2Ioc2tiKTtcXG4rXFx0Y2ItXFx1MDAzZWhhbGVuID0gMDtcXG4rXFx0bmV0aWZfcngoc2tiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZWRzdGF0cyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCk7XFxuK1xcdHU2NF9zdGF0c19pbmMoXFx1MDAyNmRzdGF0cy1cXHUwMDNlcnhfZHJvcHMpO1xcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlY2VpdmUgYSBVU0IgY29tcGxldGlvbiBvZiBAbGVuIGJ5dGVzIG9mIGluY29taW5nIGRhdGEuIFdlIHdpbGwgdGhlbiBzcGxpdFxcbisgKiB0aGlzIGludG8gcGFja2V0cyBhbmQgbmV0aWZfcngoKSBlYWNoLiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgaW4gYXRvbWljXFxuKyAqIGNvbnRleHRzIC0gaWUuLCBVUkIgY29tcGxldGlvbi5cXG4rICpcXG4rICogQXNzdW1lcyBAbmV0ZGV2IHVzZXMgZHN0YXRzLlxcbisgKi9cXG4raW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cXHUwMDNlc2tiO1xcbitcXHRpbnQgcmMgPSAwO1xcbitcXG4rXFx0X19za2JfcHV0KHNrYiwgbGVuKTtcXG4rXFxuK1xcdGZvciAoOzspIHtcXG4rXFx0XFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcXG4rXFx0XFx0LyogbGVuZ3RoIG9mIE1DVFAgcGFja2V0LCBpbmNsdWRpbmcgVVNCIGhlYWRlciAqL1xcbitcXHRcXHR1MTYgcGt0X2xlbjtcXG4rXFxuK1xcdFxcdC8qIG5vIGhlYWRlciB5ZXQsIHJlc3VibWl0IGZvciB0aGUgcmVzdCBvZiB0aGUgcGFja2V0ICovXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqaGRyKSkge1xcbitcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VzcGFuKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwicng6IHRpbnkgeGZlciAoJWQpIGluIG5vbi1zcGFuIG1vZGVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdFxcdFxcdHJjID0gLUVOT01TRztcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzZXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGhkciA9IChzdHJ1Y3QgbWN0cF91c2JfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbitcXG4rXFx0XFx0aWYgKGJlMTZfdG9fY3B1KGhkci1cXHUwMDNlaWQpICE9IE1DVFBfVVNCX0RNVEZfSUQpIHtcXG4rXFx0XFx0XFx0LyogQnkgcmVzZXR0aW5nIGhlcmUsIHdpbGwgc3RhcnQgdGhlIG5leHQgSU4gdHJhbnNmZXJcXG4rXFx0XFx0XFx0ICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW5cXG4rXFx0XFx0XFx0ICogd2UgcmUtc3luYyB3aGVuIHdlIG5leHQgc2VlIGEgc3Bhbm5lZCBwYWNrZXQgYWxpZ25lZFxcbitcXHRcXHRcXHQgKiB3aXRoIHRoZSBzdGFydCBvZiBhIHRyYW5zZmVyLlxcbitcXHRcXHRcXHQgKlxcbitcXHRcXHRcXHQgKiBJbiBub24tc3Bhbm5pbmcgbW9kZSwgdGhpcyBqdXN0IG1lYW5zIHdlJ2xsIGRyb3BcXG4rXFx0XFx0XFx0ICogdGhlIGN1cnJlbnQgdHJhbnNmZXIgb25seVxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJyeDogaW52YWxpZCBpZCAlMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBiZTE2X3RvX2NwdShoZHItXFx1MDAzZWlkKSk7XFxuK1xcdFxcdFxcdHJjID0gLUVQUk9UTztcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzZXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSBiZTE2X3RvX2NwdShoZHItXFx1MDAzZWxlbik7XFxuK1xcdFxcdC8qIHYxLjEsIHdpdGggc3BhbiBlbmFibGVkLCBoYXMgYSAxMy1iaXQgbGVuZ3RoICovXFxuK1xcdFxcdHBrdF9sZW4gXFx1MDAyNj0gcngtXFx1MDAzZXNwYW4gP1xcbitcXHRcXHRcXHRNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xcbitcXHRcXHRpZiAocGt0X2xlbiBcXHUwMDNjIHNpemVvZigqaGRyKSArIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwicng6IGludmFsaWQgbGVuICVkXFxcXG5cXFwiLCBwa3RfbGVuKTtcXG4rXFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbitcXHRcXHRcXHRnb3RvIGVycl9yZXNldDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Lyogc3BhbiBjb250aW51ZXMgdG8gdGhlIG5leHQgdHJhbnNmZXIsIHJlc3VibWl0ICovXFxuK1xcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pIHtcXG4rXFx0XFx0XFx0aWYgKCFyeC1cXHUwMDNlc3Bhbikge1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcInJ4OiBzaG9ydCB4ZmVyICglZCB2cyAlZCkgaW4gbm9uLXNwYW4gbW9kZVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHBrdF9sZW4sIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXNldDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Lyogd2UgaGF2ZSAoZXhhY3RseSkgYSBjb21wbGV0ZSBwYWNrZXQsIFJYIGl0IGRpcmVjdGx5ICovXFxuK1xcdFxcdGlmIChwa3RfbGVuID09IHNrYi1cXHUwMDNlbGVuKSB7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiKTtcXG4rXFx0XFx0XFx0cngtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBtb3JlIHBhY2tldHMgZm9sbG93IC0gUlggYSBjbG9uZSBzbyB0aGF0IHdlIGNhbiBjb250aW51ZVxcbitcXHRcXHQgKiBwcm9jZXNzaW5nIHRoZSBjdXJyZW50IFNLQiwgd2hpY2ggbWF5IGJlIHRoZSBzdGFydCBvZiBhXFxuK1xcdFxcdCAqIHNwYW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmIChza2IyKSB7XFxuK1xcdFxcdFxcdHNrYl90cmltKHNrYjIsIHBrdF9sZW4pO1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYjIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChuZXRkZXYpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX3Jlc2V0OlxcbitcXHRkZXZfa2ZyZWVfc2tiX2FueShyeC1cXHUwMDNlc2tiKTtcXG4rXFx0cngtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdHJldHVybiByYztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSk7XFxuK1xcbisvKlxcbisgKiBDYW5jZWwgYSByeCBjb250ZXh0OyBzdWJzZXF1ZW50IHByZXBhcmUvY29tcGxldGUgY2FsbHMgd2lsbCBub3QgYmUgYVxcbisgKiBjb250aW51YXRpb24gb2YgYW55IGRhdGEgYWxyZWFkeSByZWNlaXZlZC5cXG4rICovXFxuK3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXFxuK3tcXG4rXFx0ZGV2X2tmcmVlX3NrYl9hbnkocngtXFx1MDAzZXNrYik7XFxuK1xcdHJ4LVxcdTAwM2Vza2IgPSBOVUxMO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XFxuK1xcbisvKiB0cmFuc21pdCBjb250ZXh0OiBlbmNhcHN1bGF0ZXMgb25lIHRyYW5zZmVyICovXFxuK3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgge1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYnM7XFxuK1xcdHVuc2lnbmVkIGludCBidWZfbGVuLCBsZW47XFxuK1xcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUge1xcbitcXHRcXHRUWF9TSU5HTEUsXFxuK1xcdFxcdFRYX0ZMQVQsXFxuK1xcdH0gYnVmX3R5cGU7XFxuK1xcdHU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4rfTtcXG4rXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxcbitcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLFxcbitcXHRcXHRcXHQgdm9pZCAqcHJpdiwgYm9vbCBzcGFuKVxcbit7XFxuK1xcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpO1xcbitcXHR0eC1cXHUwMDNlb3BzID0gKm9wcztcXG4rXFx0dHgtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHR0eC1cXHUwMDNlc3BhbiA9IHNwYW47XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0eC1cXHUwMDNlbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfaW5pdCk7XFxuK1xcbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2F2YWlsKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcXG4re1xcbitcXHRyZXR1cm4gY3R4LVxcdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUgPyAwIDogY3R4LVxcdTAwM2VidWZfbGVuIC0gY3R4LVxcdTAwM2VsZW47XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcXG4re1xcbitcXHQvKiBVc2UgdGhlIGJhc2VsaW5lIGxlbmd0aCAoaWUsIEJUVSkgYXMgYW4gYXBwcm94aW1hdGVcXG4rXFx0ICogXFxcInJlYXNvbmFibHktc2l6ZWRcXFwiIHBhY2tldCB3ZSBjb3VsZCBleHBlY3QuIElmIHRoZXJlIGlzXFxuK1xcdCAqIGluc3VmZmljaWVudCBjYXBhY2l0eSBmb3IgdGhhdCwgdGhlbiBzZW5kLlxcbitcXHQgKi9cXG4rXFx0Y29uc3Qgc2l6ZV90IHBrdF9sZW4gPSBNQ1RQX1VTQl9CVFUgKyBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XFxuK1xcbitcXHRyZXR1cm4gbWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSBcXHUwMDNjIHBrdF9sZW47XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlIC0gaW5kaWNhdGluZyB0aGF0IHRoZSBuZXcgc2tiXFxuKyAqIGNvdWxkIG5vdCBiZSBhcHBlbmRlZC4gU28sIGVycm9ycyByZXBvcnRlZCBoZXJlIHRvIHRoZSBUWCBwYXRoIHdpbGwgcmVzdWx0XFxuKyAqIGluIHRoZSBUWCBiZWluZyB0cmFuc21pdHRlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfYXBwZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0aWYgKGN0eC1cXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpIFxcdTAwM2Mgc2tiLVxcdTAwM2VsZW4pXFxuK1xcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFxuK1xcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmN0eC1cXHUwMDNlc2ticywgc2tiKTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlbGVuICs9IHNrYi1cXHUwMDNlbGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXFxuK3tcXG4rXFx0dm9pZCAqYnVmO1xcbitcXG4rXFx0LyogSWYgd2UgaGF2ZSBhIHFsZW4gb2YgMSwgd2Ugb25seSBlbmRlZCB1cCBwYWNraW5nIGEgc2luZ2xlIHNrYixcXG4rXFx0ICogZGVzcGl0ZSBhbGxvY2F0aW5nIGZvciBtdWx0aXBsZS4gU2tpcCB0aGUgY29weSBhbmQgc2VuZCBkaXJlY3RseVxcbitcXHQgKiBmcm9tIHRoZSBza2IgZGF0YS5cXG4rXFx0ICovXFxuK1xcdGlmIChjdHgtXFx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSB8fCBjdHgtXFx1MDAzZXNrYnMucWxlbiA9PSAxKSB7XFxuK1xcdFxcdGJ1ZiA9IGN0eC1cXHUwMDNlc2ticy5uZXh0LVxcdTAwM2VkYXRhO1xcbitcXG4rXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZWJ1Zl90eXBlID09IFRYX0ZMQVQpIHtcXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0XFx0c2l6ZV90IHBvcyA9IDA7XFxuK1xcbitcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2Y3R4LVxcdTAwM2Vza2JzLCBza2IpIHtcXG4rXFx0XFx0XFx0c2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC1cXHUwMDNlYnVmICsgcG9zLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdFxcdHBvcyArPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0YnVmID0gY3R4LVxcdTAwM2VidWY7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY3R4LVxcdTAwM2V0eC1cXHUwMDNlb3BzLnNlbmQoY3R4LCBidWYsIGN0eC1cXHUwMDNlbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZjdHgtXFx1MDAzZXNrYnMpKSAhPSBOVUxMKVxcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueV9yZWFzb24oc2tiLCByZWFzb24pO1xcbitcXHRrZnJlZShjdHgpO1xcbit9XFxuK1xcbit2b2lkICptY3RwX3VzYmxpYl90eF9jdHhfcHJpdihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgpXFxuK3tcXG4rXFx0cmV0dXJuIHR4X2N0eC1cXHUwMDNldHgtXFx1MDAzZXByaXY7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY3R4X3ByaXYpO1xcbitcXG4rLyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSB0eCBcXHUwMDI2IGNvbXBsZXRpb24gcGF0aCBpcyBxdWllc2NlZCAqL1xcbit2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eClcXG4re1xcbitcXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eC1cXHUwMDNlY3VyX2N0eCwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpO1xcbitcXG4rLyogTWF4IHNpemUgb2YgYSBzcGFubmVkIFRYLiBTaW5jZSB3ZSBhbGxvY2F0ZSBhIHNlcGFyYXRlIHNwYW4gYnVmZmVyLCBsaW1pdFxcbisgKiB0aGUgdHgtdGltZSBhbGxvY2F0aW9ucyB0byA0ay4gTGFyZ2VyIHBhY2tldHMgd2lsbCBiZSBzZW50IGFzIHNpbmdsZVxcbisgKiB0cmFuc2ZlcnMuXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1NQQU5fTUFYID0gNDA5NiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4KTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpcXG4rbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgIGJvb2wgc2luZ2xlKVxcbit7XFxuK1xcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUgdHlwZTtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4O1xcbitcXHRzaXplX3Qgc3ogPSAwO1xcbitcXG4rXFx0aWYgKHNpbmdsZSB8fCBza2ItXFx1MDAzZWxlbiBcXHUwMDNlIFRYX1NQQU5fTUFYKSB7XFxuK1xcdFxcdHR5cGUgPSBUWF9TSU5HTEU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHR5cGUgPSBUWF9GTEFUO1xcbitcXHRcXHRzeiA9IHR4LVxcdTAwM2VzcGFuID8gVFhfU1BBTl9NQVggOiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRjdHggPSBremFsbG9jX2ZsZXgoKmN0eCwgYnVmLCBzeiwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGN0eC1cXHUwMDNldHggPSB0eDtcXG4rXFx0Y3R4LVxcdTAwM2VidWZfdHlwZSA9IHR5cGU7XFxuK1xcdGN0eC1cXHUwMDNlYnVmX2xlbiA9IHN6O1xcbitcXHRjdHgtXFx1MDAzZWxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZjdHgtXFx1MDAzZXNrYnMpO1xcbitcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZjdHgtXFx1MDAzZXNrYnMsIHNrYik7XFxuK1xcbitcXHRyZXR1cm4gY3R4O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRib29sIG9rKVxcbit7XFxuK1xcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3ApO1xcbitcXHRpZiAob2spIHtcXG4rXFx0XFx0LyogT25seSBpbmNsdWRlIHRoZSBuZXR3b3JrLWxheWVyIGRhdGEgaW4gdHggc3RhdHM7IHdlIGtub3dcXG4rXFx0XFx0ICogdGhhdCB0aGVyZSBpcyBhIDQtYnl0ZSBoZWFkZXIgcHVzaGVkIHRvIGFsbCBza2JzIGluXFxuK1xcdFxcdCAqIHR4X3NrYl9wcmVwYXJlKClcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHU2NCBuID0gY3R4LVxcdTAwM2Vza2JzLnFsZW47XFxuK1xcdFxcdHM2NCBsZW4gPSBjdHgtXFx1MDAzZWxlbiAtIChuICogc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKTtcXG4rXFxuK1xcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNmRzdGF0cy1cXHUwMDNldHhfcGFja2V0cywgbik7XFxuK1xcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNmRzdGF0cy1cXHUwMDNldHhfYnl0ZXMsIGxlbik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNmRzdGF0cy1cXHUwMDNldHhfZHJvcHMsIGN0eC1cXHUwMDNlc2ticy5xbGVuKTtcXG4rXFx0fVxcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlZHN0YXRzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi1cXHUwMDNlZHN0YXRzKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9kcm9wcyk7XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0cHV0X2NwdV9wdHIoZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDb21wbGV0aW9uIGZvciB0aGUgLVxcdTAwM2VzZW5kKCkgb3AuIFRoaXMgd2lsbCB1cGRhdGUgbmV0ZGV2IHN0YXRzIGFuZFxcbisgKiBmcmVlIHRoZSB0eCBjb250ZXh0LlxcbisgKlxcbisgKiBMaWtlbHkgY2FsbGVkIGZyb20gKGF0b21pYykgVVJCIGNvbXBsZXRpb24gY29udGV4dC5cXG4rICovXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvaylcXG4re1xcbitcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPVxcbitcXHRcXHRvayA/IFNLQl9DT05TVU1FRCA6IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHR4X2N0eCwgZGV2LCBvayk7XFxuK1xcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4X2N0eCwgcmVhc29uKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcXG4rXFxuKy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKVxcbisgKlxcbisgKiBPbiBlcnJvciwgcG9wdWxhdGVzIEByZWFzb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3BhbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gKnJlYXNvbilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHBsZW4sIG1heF9sZW47XFxuK1xcdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xcbitcXG4rXFx0cGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRpZiAocGxlbiArIHNpemVvZigqaGRyKSBcXHUwMDNlIG1heF9sZW4pIHtcXG4rXFx0XFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX0JJRztcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKmhkcikpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbitcXHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XFxuK1xcdGlmICghaGRyKSB7XFxuK1xcdFxcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRoZHItXFx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuK1xcdGhkci1cXHUwMDNlbGVuID0gY3B1X3RvX2JlMTYocGxlbiArIHNpemVvZigqaGRyKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogUHVzaCBhIG5ldyBza2IgdG8gdGhlIHRyYW5zZmVyLiBNYXkgcmVzdWx0IGluIHplcm8gb3IgbW9yZSBjYWxscyB0b1xcbisgKiBvcHMtXFx1MDAzZXNlbmQoKS5cXG4rICpcXG4rICogVGFrZXMgb3duZXJzaGlwIG9mIEBza2IsIGluY2x1ZGluZyBvbiBlcnJvci5cXG4rICovXFxuK2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXFxuK1xcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7XFxuK1xcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcXG4rXFx0Y29uc3QgaW50IG1heF90cmllcyA9IDM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCB0cnkgPSAxLCByYztcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc2tiLCB0eC1cXHUwMDNlc3BhbiwgXFx1MDAyNnJlYXNvbik7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xcbitcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4rXFx0XFx0Lyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHhcXG4rXFx0XFx0ICogaXMgbm93IHNlbmRhYmxlIChpZS46ICFtb3JlKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNrYiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbityZXRyeTpcXG4rXFx0LyogVHJ5IGFuZCBxdWV1ZSB0byB0aGUgY3VycmVudCBjb250ZXh0LiBXZSBleGl0IHRoaXMgY3JpdGljYWwgc2VjdGlvblxcbitcXHQgKiB3aXRoIGEgZmV3IGJpdHMgb2Ygc3RhdGU6XFxuK1xcdCAqICAtIHNlbmRfY3R4OiBpbmRpY2F0aW5nIGEgcHJpb3IgY29udGV4dCB0aGF0IG5lZWRzIHRvIGJlIHNlbnRcXG4rXFx0ICogIC0gc2tiOiBpbmRpY2F0aW5nIHRoYXQgYSBza2Igc3RpbGwgbmVlZHMgdG8gYmUgcXVldWVkL3NlbnRcXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjdHggPSB0eC1cXHUwMDNlY3VyX2N0eDtcXG4rXFx0aWYgKGN0eCkge1xcbitcXHRcXHRpZiAoc2tiKSB7XFxuK1xcdFxcdFxcdHJjID0gbWN0cF91c2JsaWJfdHhfYXBwZW5kKGN0eCwgc2tiKTtcXG4rXFx0XFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdFxcdC8qIGNhbid0IGFwcGVuZCB0byB0aGUgcGVuZGluZyB0eCAtIGRldGFjaCBmb3JcXG4rXFx0XFx0XFx0XFx0ICogc2VuZGluZywgYW5kIHdlJ2xsIGNyZWF0ZSBhIG5ldyB0eCBiZWxvdy5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdHN3YXAodHgtXFx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0Lyogd2UgaGF2ZSBxdWV1ZWQgKi9cXG4rXFx0XFx0XFx0XFx0c2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpXFxuK1xcdFxcdFxcdFxcdFxcdHN3YXAodHgtXFx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2UgaWYgKCFtb3JlKSB7XFxuK1xcdFxcdFxcdHN3YXAodHgtXFx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRpZiAoc2VuZF9jdHgpIHtcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKHNlbmRfY3R4KTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzZW5kX2N0eCwgZGV2LCBmYWxzZSk7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHNlbmRfY3R4LCByZWFzb24pO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNlbmRfY3R4ID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0Lyogd2UgaGF2ZSBlaXRoZXIgcXVldWVkLCBvciB0aGUgcHJlcGFyZSBmYWlsZWQ7IG5vdGhpbmcgbW9yZSB0byBkbyAqL1xcbitcXHRpZiAoIXNrYilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHR4LCBza2IsICFtb3JlKTtcXG4rXFx0aWYgKCFjdHgpIHtcXG4rXFx0XFx0bmV0ZGV2X2RiZyhkZXYsIFxcXCJUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGlmIHdlJ3JlIHJlYWR5IHRvIHNlbmQgbm93LCBubyBuZWVkIHRvIGVucXVldWUgKi9cXG4rXFx0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpIHtcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKGN0eCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcXG4rXFx0XFx0XFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKCF0eC1cXHUwMDNlY3VyX2N0eCkge1xcbitcXHRcXHR0eC1cXHUwMDNlY3VyX2N0eCA9IGN0eDtcXG4rXFx0XFx0Y3R4ID0gTlVMTDtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0Lyogd2UgbWF5IGhhdmUgbG9zdCB0aGUgcmFjZSB3aXRoIGEgY29uY3VycmVudCB0eDsgc2hvdWxkbid0IGhhcHBlbiwgYXNcXG4rXFx0ICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW5cXG4rXFx0ICogZnJvbSB0aGUgdG9wLCBhcyB3ZSBtYXkgYmUgYWJsZSB0byBxdWV1ZSB0aGUgc2tiIHRvIHRoYXQgY29udGV4dC5cXG4rXFx0ICovXFxuK1xcdGlmIChjdHgpIHtcXG4rXFx0XFx0LyogdW5saW5rIHRoZSBuZXcgKHNvbGUpIHNrYiwgd2UgZG9uJ3Qgd2FudCBpdCBmcmVlZCB3aXRoIGN0eCAqL1xcbitcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlc2ticyk7XFxuK1xcdFxcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcXG4rXFx0XFx0aWYgKCsrdHJ5IFxcdTAwM2UgbWF4X3RyaWVzKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3B1c2gpO1xcbitcXG4rLyogQ2FuY2VsIGEgdHg6IGFueSB1bi1zZW50IGNvbnRleHQgaXMgcmVsZWFzZWQuICovXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHggPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdHN3YXAodHgtXFx1MDAzZWN1cl9jdHgsIGN0eCk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKGN0eCwgZGV2LCBmYWxzZSk7XFxuK1xcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpO1xcbitcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKZXJlbXkgS2VyciBcXHUwMDNjamtAY29kZWNvbnN0cnVjdC5jb20uYXVcXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiTUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnlcXFwiKTtcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVClcXG4rI2luY2x1ZGUgXFxcIm1jdHAtdXNibGliLXRlc3QuY1xcXCJcXG4rI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXFxuaW5kZXggYTJmNmYxZTA0ZWZiZDAuLjRiYjA0YTM3MTEwNTA0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXFxuQEAgLTIsNyArMiw3IEBAXFxuIC8qXFxuICAqIG1jdHAtdXNiLmggLSBNQ1RQIFVTQiB0cmFuc3BvcnQgYmluZGluZzogY29tbW9uIGRlZmluaXRpb25zLFxcbiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOlxcbi0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGZcXG4rICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXFxuICAqXFxuICAqIFRoZXNlIGFyZSBwcm90b2NvbC1sZXZlbCBkZWZpbml0aW9ucywgdGhhdCBtYXkgYmUgc2hhcmVkIGJldHdlZW4gaG9zdFxcbiAgKiBhbmQgZ2FkZ2V0IGRyaXZlcnMuXFxuQEAgLTEzLDE4ICsxMyw5NiBAQFxcbiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcXG4gI2RlZmluZSBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbisvKlxcbisgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkXFxuKyAqIChwcmVjZWRlZCBieSA4IHJlc2VydmVkIGJpdHMpLCB2MS4xIGhhcyBhIDEzLWJpdCBsZW5ndGggZmllbGQgKHByZWNlZGVkIGJ5XFxuKyAqIDMgcmVzZXJ2ZWQgYml0cykuIFdlIHVzZSBhIGJlMTYgZm9yIG91ciBsZW5ndGggdG8gaGFuZGxlIHRoZSBsYXJnZXIgdjEuMVxcbisgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuXFxuKyAqL1xcbiBzdHJ1Y3QgbWN0cF91c2JfaGRyIHtcXG4gXFx0X19iZTE2XFx0aWQ7XFxuLVxcdHU4XFx0cnN2ZDtcXG4tXFx0dThcXHRsZW47XFxuK1xcdF9fYmUxNlxcdGxlbjtcXG4gfSBfX3BhY2tlZDtcXG4gXFxuLSNkZWZpbmUgTUNUUF9VU0JfWEZFUl9TSVpFXFx0NTEyXFxuKy8qIG1heCB0cmFuc2ZlciBzaXplIGZvciBEU1AwMjgzIHYxLjAgKi9cXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFXFx0NTEyXFxuICNkZWZpbmUgTUNUUF9VU0JfQlRVXFx0XFx0NjhcXG4gI2RlZmluZSBNQ1RQX1VTQl9NVFVfTUlOXFx0TUNUUF9VU0JfQlRVXFxuLSNkZWZpbmUgTUNUUF9VU0JfTVRVX01BWFxcdChVOF9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXFxuKyNkZWZpbmUgTUNUUF9VU0JfMV8wX1BLVExFTl9NQVhcXHRVOF9NQVhcXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfTVRVX01BWFxcdChNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWFxcdEdFTk1BU0soMTIsIDApXFxuKyNkZWZpbmUgTUNUUF9VU0JfMV8xX01UVV9NQVhcXHQoTUNUUF9VU0JfMV8xX1BLVExFTl9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXFxuICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRFxcdDB4MWFiNFxcbiBcXG4rLyogbWN0cC11c2JsaWIgKi9cXG4rXFxuKy8qXFxuKyAqIFJYIGhhbmRsZTogZHJpdmVycyB3aWxsIHR5cGljYWxseSBjcmVhdGUgb25lIG9uIGluaXQsIHdoaWNoIHBlcnNpc3RzIGZvclxcbisgKiB0aGUgbGlmZSBvZiB0aGUgZHJpdmVyLiBUaGUgc2FtZSBoYW5kbGUgaXMgdXNlZCBmb3IgcHJvZ3Jlc3NpdmVcXG4rICogcHJlcGFyZSAtXFx1MDAzZSBjb21wbGV0ZSBvcGVyYXRpb25zIChmb3IgZWFjaCBpbmNvbWluZyBVU0IgdHJhbnNmZXIpLCB3aGljaFxcbisgKiByZXN1bHQgaW4gbmV0aWZfcngoKS1pbmcgdGhlIE1DVFAgcGFja2V0cyByZWNlaXZlZFxcbisgKi9cXG4rc3RydWN0IG1jdHBfdXNibGliX3J4IHtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTE2IGVwX3BrdGxlbjtcXG4rXFx0Ym9vbCBzcGFuO1xcbit9O1xcbitcXG4raW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xcbitcXG4raW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCxcXG4rXFx0XFx0XFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKTtcXG4rXFxuK2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbik7XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KTtcXG4rXFxuKy8qXFxuKyAqIFRYIGhhbmRsZTogY3JlYXRlZCBieSBtY3RwX3VzYmxpYl90eF9wdXNoKCkgZHVyaW5nIHRoZSB0eCBwYXRoLCBhbmRcXG4rICogbWF5IHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlIHBhY2tldCB0cmFuc21pdHMuXFxuKyAqL1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4O1xcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XFxuK1xcdC8qIFN0YXJ0IGEgVVNCIFRYIGZvciBAZGF0YS4gT24gcmV0dXJuaW5nIHN1Y2Nlc3MsIHRoZSBpbXBsZW1lbnRhdGlvblxcbitcXHQgKiBtdXN0IGFycmFuZ2UgZm9yIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoKSB0byBiZSBjYWxsZWQgYXQgc29tZVxcbitcXHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpzZW5kKShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xcbit9O1xcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3R4IHtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XFxuK1xcdHZvaWQgKnByaXY7XFxuK1xcdGJvb2wgc3BhbjtcXG4rXFx0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbitcXHQvKiBjb250ZXh0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcgcGFja2V0cywgY2xlYXJlZCBvbiBzZW5kICovXFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XFxuK307XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcXG4rXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgKm9wcywgdm9pZCAqcHJpdixcXG4rXFx0XFx0XFx0IGJvb2wgc3Bhbik7XFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcXG4rXFxuK3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCk7XFxuK1xcbitpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxcbitcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xcbitcXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKTtcXG4rXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7XFxuK1xcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MTcuMjYzMzg0Mzk3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzc5MzI0Mjk0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1jdHBfdXNibGliX3J4X2luaXRcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2ZpbmlcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X3ByZXBhcmVcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jYW5jZWxcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2luaXRcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2ZpbmlcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3B1c2hcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2NhbmNlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0IChtY3RwLXVzYmxpYikgYW5kIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgTUNUUCBVU0IgZHJpdmVyIHRvIHVzZSBpdC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIGR1bW15X2hjZCBvciByYXctZ2FkZ2V0KSBhbmQgaGFuZGxlcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTNiOTZlYjk2NDUzYTIwNDRkZGEzNzEzZjU4YmY2YTk4ODAyOGIzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA4OjUzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG5pbmRleCBjZjMyNWFiMGIxZWY1NS4uYzQwYWM5YzY2NWI3NTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuQEAgLTQ3LDkgKzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcbiBcdCAgQSBNQ1RQIHByb3RvY29sIG5ldHdvcmsgZGV2aWNlIGlzIGNyZWF0ZWQgZm9yIGVhY2ggSTNDIGJ1c1xuIFx0ICBoYXZpbmcgYSBcIm1jdHAtY29udHJvbGxlclwiIGRldmljZXRyZWUgcHJvcGVydHkuXG4gXG4rY29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxuK1x0dHJpc3RhdGUgXCJNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5XCJcbitcdGRlcGVuZHMgb24gVVNCXG4rXHRoZWxwXG4rXHQgIENvbW1vbiBwcm90b2NvbCBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0XG4rXHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcbitcdCAgdHJhbnNwb3J0IGRyaXZlclxuK1xuK1x0ICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLlxuK1xuK2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxuKyAgICAgICAgYm9vbCBcIk1DVFAgdXNibGliIHRlc3RzXCIgaWYgIUtVTklUX0FMTF9URVNUU1xuKyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuKyAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbitcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG4gXHR0cmlzdGF0ZSBcIk1DVFAgVVNCIHRyYW5zcG9ydFwiXG4gXHRkZXBlbmRzIG9uIFVTQlxuK1x0c2VsZWN0IE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxuIFx0aGVscFxuIFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgVVNCIHRyYW5zcG9ydCxcbiBcdCAgZGVmaW5lZCBieSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDI4My5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxuaW5kZXggYzM2MDA2ODQ5YTFlN2QuLmM4NzBiNjJkM2YxYzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxuQEAgLTIsMyArMiw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgKz0gbWN0cC1zZXJpYWwub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JMkMpICs9IG1jdHAtaTJjLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSArPSBtY3RwLWkzYy5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgKz0gbWN0cC11c2Iub1xuK29iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUIpICs9IG1jdHAtdXNibGliLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li41NDJhNTcwYzc2Y2M5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXG5AQCAtMyw5ICszLDkgQEBcbiAgKiBtY3RwLXVzYi5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgYmluZGluZyBkcml2ZXIuXG4gICpcbiAgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcbi0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGZcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcbiAgKlxuLSAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI1IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbkBAIC0yMiw5NSArMjIsMTE1IEBAXG4gc3RydWN0IG1jdHBfdXNiIHtcbiBcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7XG4gXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjtcbitcdGJvb2wgc3BhbjtcbiBcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXG4gXHR1OCBlcF9pbjtcbiBcdHU4IGVwX291dDtcbiBcbi1cdHN0cnVjdCB1cmIgKnR4X3VyYjtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDtcbiBcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcbitcdGludCBpbl9lcnJfY291bnQ7XG4rXHRpbnQgaW5fZXJyX29yaWc7XG4rXHRib29sIGNsZWFyX2hhbHQ7XG4gXG4gXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xuIFx0c3BpbmxvY2tfdCByeF9sb2NrO1xuIFx0Ym9vbCByeF9zdG9wcGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xuK1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4IHR4O1xuK1x0c3RydWN0IHVzYl9hbmNob3IgdHhfYW5jaG9yO1xuK1x0Lyogc2VyaWFsaXNlcyB0eF9xbWVtIHVwZGF0ZXMgdG8gbmV0ZGV2IHF1ZXVlIHN0YXRlcyAqL1xuK1x0c3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7XG4rXHRpbnQgdHhfcW1lbTtcbit9O1xuK1xuK2VudW0ge1xuK1x0TUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSA9IDB4MDAsXG4rXHRNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMixcbiB9O1xuIFxuKy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcbisgKiBtYXkgdmFyeSBhIGxvdCBiZXR3ZWVuIHNwYW5uaW5nLSBhbmQgbm9uLXNwYW5uaW5nIG1vZGVzLiBJbiBzcGFubmluZyBtb2RlLFxuKyAqIHRoaXMgd2lsbCBhbGxvdyBmb3IgYSBjb3VwbGUgb2YgbWF4LXNpemVkIHRyYW5zZmVycyB0byBiZSBpbiBmbGlnaHQuIEluXG4rICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxuKyAqXG4rICogV2Ugd2FudCB0byBhdm9pZCBkaXNhYmxpbmcgdGhlIHR4IHF1ZXVlIGlmIHBvc3NpYmxlOyBkb2luZyBzbyB3aWxsIGVuZCB1cFxuKyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXG4rICogc28gY2FuIG5vIGxvbmdlciBwZXJmb3JtIHRyYW5zZmVyIHBhY2tpbmcuXG4rICovXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xuK1xuIHN0YXRpYyB2b2lkIG1jdHBfdXNiX291dF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi1cdTAwM2VkZXY7XG4tXHRpbnQgc3RhdHVzO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4ID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4rXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbitcdHVuc2lnbmVkIGludCBsZW4gPSB1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyX2xlbmd0aDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cdTAwM2VuZXRkZXY7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0c3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbitcdG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUodHhfY3R4LCBuZXRkZXYsIHVyYi1cdTAwM2VzdGF0dXMgPT0gMCk7XG4gXG4tXHRzd2l0Y2ggKHN0YXR1cykge1xuLVx0Y2FzZSAtRU5PRU5UOlxuLVx0Y2FzZSAtRUNPTk5SRVNFVDpcbi1cdGNhc2UgLUVTSFVURE9XTjpcbi1cdGNhc2UgLUVQUk9UTzpcbi1cdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSAwOlxuLVx0XHRkZXZfZHN0YXRzX3R4X2FkZChuZXRkZXYsIHNrYi1cdTAwM2VsZW4pO1xuLVx0XHRuZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7XG4tXHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdHJldHVybjtcbi1cdGRlZmF1bHQ6XG4tXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInVuZXhwZWN0ZWQgdHggdXJiIHN0YXR1czogJWRcXG5cIiwgc3RhdHVzKTtcbi1cdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XG4tXHR9XG4rXHR1c2JfZnJlZV91cmIodXJiKTtcbiBcbi1cdGtmcmVlX3NrYihza2IpO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4rXHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIC09IGxlbjtcbitcdGlmIChtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIFx1MDAzYyBUWF9RTUVNX01BWCBcdTAwMjZcdTAwMjYgbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0XHRuZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4rc3RhdGljIGludCBtY3RwX3VzYl90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcbitcdFx0XHQgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbiB7XG4tXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcbi1cdHVuc2lnbmVkIGludCBwbGVuO1xuK1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IHVyYiAqdXJiO1xuIFx0aW50IHJjO1xuIFxuLVx0cGxlbiA9IHNrYi1cdTAwM2VsZW47XG4tXG4tXHRpZiAocGxlbiArIHNpemVvZigqaGRyKSBcdTAwM2UgTUNUUF9VU0JfWEZFUl9TSVpFKVxuLVx0XHRnb3RvIGVycl9kcm9wO1xuLVxuLVx0cmMgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKmhkcikpO1xuLVx0aWYgKHJjKVxuLVx0XHRnb3RvIGVycl9kcm9wO1xuLVxuLVx0aGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpO1xuLVx0aWYgKCFoZHIpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRoZHItXHUwMDNlaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTtcbi1cdGhkci1cdTAwM2Vyc3ZkID0gMDtcbi1cdGhkci1cdTAwM2VsZW4gPSBwbGVuICsgc2l6ZW9mKCpoZHIpO1xuLVxuLVx0dXJiID0gbWN0cF91c2ItXHUwMDNldHhfdXJiO1xuK1x0dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTtcbitcdGlmICghdXJiKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXHUwMDNldXNiZGV2LFxuIFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfb3V0KSxcbi1cdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLFxuLVx0XHRcdCAgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCBza2IpO1xuK1x0XHRcdCAgZGF0YSwgbGVuLCBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHR4X2N0eCk7XG4rXG4rXHRpZiAobWN0cF91c2ItXHUwMDNlc3BhbilcbitcdFx0dXJiLVx1MDAzZXRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDtcbitcbitcdHVzYl9hbmNob3JfdXJiKHVyYiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbiBcbi1cdC8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi9cbi1cdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTtcbiBcdGlmIChyYykge1xuLVx0XHRuZXRpZl93YWtlX3F1ZXVlKGRldik7XG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4rXHRcdG5ldGRldl9kYmcobWN0cF91c2ItXHUwMDNlbmV0ZGV2LCBcIlRYIHVyYiBzdWJtaXQgZmFpbGVkLCAlZFxcblwiLCByYyk7XG4rXHRcdHVzYl91bmFuY2hvcl91cmIodXJiKTtcbitcdFx0dXNiX2ZyZWVfdXJiKHVyYik7XG4rXHR9IGVsc2Uge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcbitcdFx0bWN0cF91c2ItXHUwMDNldHhfcW1lbSArPSBsZW47XG4rXHRcdGlmIChtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIFx1MDAzZT0gVFhfUU1FTV9NQVgpXG4rXHRcdFx0bmV0aWZfc3RvcF9xdWV1ZShtY3RwX3VzYi1cdTAwM2VuZXRkZXYpO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcdHJldHVybiByYztcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgdHhfb3BzID0ge1xuK1x0LnNlbmQgPSBtY3RwX3VzYl90eF9zZW5kLFxuK307XG4rXG4rc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Ym9vbCBtb3JlID0gbmV0ZGV2X3htaXRfbW9yZSgpO1xuK1xuK1x0bWN0cF91c2JsaWJfdHhfcHVzaChkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4LCBza2IsIG1vcmUpO1xuIFxuLWVycl9kcm9wOlxuLVx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKGRldik7XG4tXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuIFxuQEAgLTEyNSwyNCArMTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xuIHN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IGxlbjtcbitcdHZvaWQgKmJ1ZjtcbiBcdGludCByYztcbiBcbi1cdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIE1DVFBfVVNCX1hGRVJfU0laRSwgZ2ZwKTtcbi1cdGlmICghc2tiKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4LFxuK1x0XHRcdFx0ICAgIFx1MDAyNmJ1ZiwgXHUwMDI2bGVuLCBnZnApO1xuK1x0aWYgKHJjKVxuIFx0XHRnb3RvIGVycl9yZXRyeTtcbi1cdH1cbiBcbiBcdHVzYl9maWxsX2J1bGtfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYiwgbWN0cF91c2ItXHUwMDNldXNiZGV2LFxuIFx0XHRcdCAgdXNiX3JjdmJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfaW4pLFxuLVx0XHRcdCAgc2tiLVx1MDAzZWRhdGEsIE1DVFBfVVNCX1hGRVJfU0laRSxcbi1cdFx0XHQgIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBza2IpO1xuK1x0XHRcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XG4gXG4gXHRyYyA9IHVzYl9zdWJtaXRfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYiwgZ2ZwKTtcbiBcdGlmIChyYykge1xuIFx0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCJyeCB1cmIgc3VibWl0IGZhaWx1cmU6ICVkXFxuXCIsIHJjKTtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKVxuIFx0XHRcdGdvdG8gZXJyX3JldHJ5O1xuIFx0fVxuQEAgLTE1NywxNCArMTc2LDM0IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcnhfZXJyX21heCA9IDEwO1xuK1xuKy8qIFJldHVybnMgLTEgaWYgd2UgaGF2ZSBoaXQgZXhjZXNzaXZlIGVycm9ycywgemVybyBvdGhlcndpc2UuICovXG4rc3RhdGljIGludCBtY3RwX3VzYl9pbl91cmJfZXJyKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGludCBzdGF0dXMsXG4rXHRcdFx0ICAgICAgIGJvb2wgc3RhbGxlZClcbit7XG4rXHRtY3RwX3VzYmxpYl9yeF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNlcngpO1xuK1xuK1x0aWYgKCFtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQrKylcbitcdFx0bWN0cF91c2ItXHUwMDNlaW5fZXJyX29yaWcgPSBzdGF0dXM7XG4rXG4rXHRpZiAobWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50IFx1MDAzZT0gcnhfZXJyX21heCkge1xuK1x0XHRuZXRkZXZfZXJyKG1jdHBfdXNiLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcImV4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSVzIElOIEVQLCBmaXJzdDogJWRcXG5cIixcbitcdFx0XHQgICBzdGFsbGVkID8gXCIgKHN0YWxsZWQpXCIgOiBcIlwiLFxuK1x0XHRcdCAgIG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiB7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IG1jdHBfc2tiX2NiICpjYjtcbi1cdHVuc2lnbmVkIGludCBsZW47XG4tXHRpbnQgc3RhdHVzO1xuK1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgcmMsIHN0YXR1cztcbiBcbiBcdHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4gXG5AQCAtMTcyLDgwICsyMTEsNDMgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIFx0Y2FzZSAtRU5PRU5UOlxuIFx0Y2FzZSAtRUNPTk5SRVNFVDpcbiBcdGNhc2UgLUVTSFVURE9XTjpcbi1cdGNhc2UgLUVQUk9UTzpcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybjtcbi1cdGNhc2UgMDpcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJ1bmV4cGVjdGVkIHJ4IHVyYiBzdGF0dXM6ICVkXFxuXCIsIHN0YXR1cyk7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHQvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbid0IHJlc3VibWl0ICovXG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4gXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGxlbiA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuLVx0X19za2JfcHV0KHNrYiwgbGVuKTtcbi1cbi1cdHdoaWxlIChza2IpIHtcbi1cdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMO1xuLVx0XHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XG4tXHRcdHU4IHBrdF9sZW47IC8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgbm8gVVNCIGhlYWRlciAqL1xuLVxuLVx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0XHRoZHIgPSBza2JfcHVsbF9kYXRhKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbi1cdFx0aWYgKCFoZHIpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdGlmIChiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpICE9IE1DVFBfVVNCX0RNVEZfSUQpIHtcbi1cdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJyeDogaW52YWxpZCBpZCAlMDR4XFxuXCIsXG4tXHRcdFx0XHQgICBiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRpZiAoaGRyLVx1MDAzZWxlbiBcdTAwM2Ncbi1cdFx0ICAgIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKSB7XG4tXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwicng6IHNob3J0IHBhY2tldCAoaGRyKSAlZFxcblwiLFxuLVx0XHRcdFx0ICAgaGRyLVx1MDAzZWxlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0Lyogd2Uga25vdyB3ZSBoYXZlIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSBoZXJlICovXG4tXHRcdHBrdF9sZW4gPSBoZHItXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuLVx0XHRpZiAocGt0X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuLVx0XHRcdFx0ICAgXCJyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXFxuXCIsXG4tXHRcdFx0XHQgICBoZHItXHUwMDNlbGVuLCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRpZiAocGt0X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbikge1xuLVx0XHRcdC8qIG1vcmUgcGFja2V0cyBtYXkgZm9sbG93IC0gY2xvbmUgdG8gYSBuZXdcbi1cdFx0XHQgKiBza2IgdG8gdXNlIG9uIHRoZSBuZXh0IGl0ZXJhdGlvblxuLVx0XHRcdCAqL1xuLVx0XHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbi1cdFx0XHRpZiAoc2tiMikge1xuLVx0XHRcdFx0aWYgKCFza2JfcHVsbChza2IyLCBwa3RfbGVuKSkge1xuLVx0XHRcdFx0XHRrZnJlZV9za2Ioc2tiMik7XG4tXHRcdFx0XHRcdHNrYjIgPSBOVUxMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0XHRza2JfdHJpbShza2IsIHBrdF9sZW4pO1xuLVx0XHR9XG4gXG4tXHRcdGRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVx1MDAzZWxlbik7XG4rXHRjYXNlIC1FUElQRTpcbitcdFx0LyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqL1xuK1x0XHRyYyA9IG1jdHBfdXNiX2luX3VyYl9lcnIobWN0cF91c2IsIHN0YXR1cywgdHJ1ZSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQgPSB0cnVlO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9sb2NrLCBmbGFncyk7XG4rXHRcdGlmICghbWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZClcbitcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfcmV0cnlfd29yayxcbitcdFx0XHRcdFx0ICAgICAgUlhfUkVUUllfREVMQVkpO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbitcdFx0cmV0dXJuO1xuIFxuLVx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTtcbi1cdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4tXHRcdGNiID0gX19tY3RwX2NiKHNrYik7XG4tXHRcdGNiLVx1MDAzZWhhbGVuID0gMDtcbi1cdFx0bmV0aWZfcngoc2tiKTtcbitcdGRlZmF1bHQ6XG4rXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cIiwgc3RhdHVzKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIC1FVElNRTpcbitcdGNhc2UgLUVQUk9UTzpcbitcdGNhc2UgLUVJTFNFUTpcbitcdGNhc2UgLUVPVkVSRkxPVzpcbitcdFx0LyogcG9zc2libHkgdHJhbnNpZW50OyByZWNvcmQgZmlyc3QgZmFpbHVyZSwgcmVzdWJtaXQgKi9cbitcdFx0cmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIGZhbHNlKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybjtcbitcdFx0YnJlYWs7XG4gXG4tXHRcdHNrYiA9IHNrYjI7XG4rXHRjYXNlIDA6XG4rXHRcdG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKG5ldGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNlcngsIHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoKTtcbitcdFx0bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcbitcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAoc2tiKVxuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cbiBcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfQVRPTUlDKTtcbiB9XG4gXG5AQCAtMjUzLDYgKzI1NSwzMCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtY3RwX3VzYixcbiBcdFx0XHRcdFx0XHQgcnhfcmV0cnlfd29yay53b3JrKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovXG4rXHRpZiAobWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCkge1xuK1x0XHRpbnQgcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIG1jdHBfdXNiLVx1MDAzZWVwX2luKTtcbitcbitcdFx0cmMgPSB1c2JfY2xlYXJfaGFsdChtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIHBpcGUpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG1jdHBfdXNiLVx1MDAzZW5ldGRldixcbitcdFx0XHRcdCAgIFwiY2FuJ3QgY2xlYXIgSU4gRVAgaGFsdDogJWRcXG5cIiwgcmMpO1xuK1xuK1x0XHRcdGlmICgrK21jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCBcdTAwM2U9IHJ4X2Vycl9tYXgpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xuK1x0XHRcdGlmICghbWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZClcbitcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9yZXRyeV93b3JrLFxuK1x0XHRcdFx0XHRcdCAgICAgIFJYX1JFVFJZX0RFTEFZKTtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0bWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xuK1x0fVxuIFxuIFx0bWN0cF91c2JfcnhfcXVldWUobWN0cF91c2IsIEdGUF9LRVJORUwpO1xuIH1cbkBAIC0yNjIsNiArMjg4LDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdFdSSVRFX09OQ0UobWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZCwgZmFsc2UpO1xuK1x0bWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xuK1x0bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcbiBcbiBcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XG4gXG5AQCAtMjg0LDcgKzMxMiwxMSBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9yZXRyeV93b3JrKTtcbiBcbiBcdHVzYl9raWxsX3VyYihtY3RwX3VzYi1cdTAwM2VyeF91cmIpO1xuLVx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVx1MDAzZXR4X3VyYik7XG4rXG4rXHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X2FuY2hvcik7XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIGRldiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSk7XG4rXHRtY3RwX3VzYmxpYl9yeF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNlcngpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMwMSw3ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9uZXRkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdGRldi1cdTAwM2VtdHUgPSBNQ1RQX1VTQl9NVFVfTUlOO1xuIFx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBNQ1RQX1VTQl9NVFVfTUlOO1xuLVx0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl9NVFVfTUFYO1xuK1x0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzBfTVRVX01BWDtcbiBcbiBcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XG4gXHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG5AQCAtMzE3LDYgKzM0OSw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdHN0cnVjdCBtY3RwX3VzYiAqZGV2O1xuK1x0Ym9vbCBzcGFuO1xuIFx0aW50IHJjO1xuIFxuIFx0Lyogb25seSBvbmUgYWx0ZXJuYXRlICovXG5AQCAtMzI4LDYgKzM2MSw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHNwYW4gPSBpZmFjZV9kZXNjLVx1MDAzZWRlc2MuYkludGVyZmFjZVN1YkNsYXNzID09IE1DVFBfVVNCX1NVQkNMQVNTX1NQQU47XG4rXG4gXHRuZXRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpkZXYpLCBcIm1jdHB1c2IlZFwiLCBORVRfTkFNRV9FTlVNLFxuIFx0XHRcdCAgICAgIG1jdHBfdXNiX25ldGRldl9zZXR1cCk7XG4gXHRpZiAoIW5ldGRldilcbkBAIC0zMzUsMzMgKzM3MCw0NiBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFxuIFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcdTAwMjZpbnRmLVx1MDAzZWRldik7XG4gXHRkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0ZGV2LVx1MDAzZXNwYW4gPSBzcGFuO1xuIFx0ZGV2LVx1MDAzZW5ldGRldiA9IG5ldGRldjtcbiBcdGRldi1cdTAwM2V1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIFx0ZGV2LVx1MDAzZWludGYgPSBpbnRmO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X2xvY2spO1xuK1x0aWYgKGRldi1cdTAwM2VzcGFuKVxuK1x0XHRuZXRkZXYtXHUwMDNlbWF4X210dSA9IE1DVFBfVVNCXzFfMV9NVFVfTUFYO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4X3FtZW1fbG9jayk7XG4gXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7XG4gXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4LCBsZTE2X3RvX2NwdShlcF9pbi1cdTAwM2V3TWF4UGFja2V0U2l6ZSksXG4rXHRcdFx0XHQgZGV2LVx1MDAzZXNwYW4pO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl9mcmVlX25ldGRldjtcbitcdG1jdHBfdXNibGliX3R4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4LCBcdTAwMjZ0eF9vcHMsIGRldiwgZGV2LVx1MDAzZXNwYW4pO1xuK1x0aW5pdF91c2JfYW5jaG9yKFx1MDAyNmRldi1cdTAwM2V0eF9hbmNob3IpO1xuK1xuIFx0ZGV2LVx1MDAzZWVwX2luID0gZXBfaW4tXHUwMDNlYkVuZHBvaW50QWRkcmVzcztcbiBcdGRldi1cdTAwM2VlcF9vdXQgPSBlcF9vdXQtXHUwMDNlYkVuZHBvaW50QWRkcmVzcztcbiBcbi1cdGRldi1cdTAwM2V0eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xuIFx0ZGV2LVx1MDAzZXJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWRldi1cdTAwM2V0eF91cmIgfHwgIWRldi1cdTAwM2VyeF91cmIpIHtcbitcdGlmICghZGV2LVx1MDAzZXJ4X3VyYikge1xuIFx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX2ZyZWVfdXJicztcbitcdFx0Z290byBlcnJfZmluaV9yeHR4O1xuIFx0fVxuIFxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2ZGV2LVx1MDAzZXJ4X3JldHJ5X3dvcmssIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmspO1xuIFxuIFx0cmMgPSBtY3RwX3JlZ2lzdGVyX25ldGRldihuZXRkZXYsIE5VTEwsIE1DVFBfUEhZU19CSU5ESU5HX1VTQik7XG4gXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfdXJicztcbitcdFx0Z290byBlcnJfZnJlZV91cmI7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfZnJlZV91cmJzOlxuLVx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2V0eF91cmIpO1xuK2Vycl9mcmVlX3VyYjpcbiBcdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNlcnhfdXJiKTtcbitlcnJfZmluaV9yeHR4OlxuK1x0bWN0cF91c2JsaWJfdHhfZmluaShcdTAwMjZkZXYtXHUwMDNldHgpO1xuK1x0bWN0cF91c2JsaWJfcnhfZmluaShcdTAwMjZkZXYtXHUwMDNlcngpO1xuK2Vycl9mcmVlX25ldGRldjpcbiBcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG4gXHRyZXR1cm4gcmM7XG4gfVxuQEAgLTM3MSwxMyArNDE5LDE1IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRzdHJ1Y3QgbWN0cF91c2IgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4gXG4gXHRtY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KGRldi1cdTAwM2VuZXRkZXYpO1xuLVx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2V0eF91cmIpO1xuK1x0bWN0cF91c2JsaWJfcnhfZmluaShcdTAwMjZkZXYtXHUwMDNlcngpO1xuK1x0bWN0cF91c2JsaWJfdHhfZmluaShcdTAwMjZkZXYtXHUwMDNldHgpO1xuIFx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuIFx0ZnJlZV9uZXRkZXYoZGV2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtY3RwX3VzYl9kZXZpY2VzW10gPSB7XG4tXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgMHgwLCAweDEpIH0sXG4rXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSwgMHgxKSB9LFxuK1x0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4sIDB4MSkgfSxcbiBcdHsgMCB9LFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45ZGY0MDFhOTE0ZmY1M1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbkBAIC0wLDAgKzEsNDEyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIG1jdHAtdXNibGliLXRlc3QuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5LFxuKyAqIHVuaXQgdGVzdCBkZWZpbml0aW9ucy5cbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21jdHBkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9tY3RwLXVzYi5oXHUwMDNlXG4rXG4rc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1x0c3RydWN0IG1jdHBfZGV2ICptZGV2O1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCByeF9wa3RzO1xuK307XG4rXG4rc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4IHtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG1jdHBfcm91dGUgcnQ7XG4rfTtcbitcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHQvKiB3ZSBkb24ndCB0cmFjayBhbnkgVFhlZCBwYWNrZXRzIGF0IHByZXNlbnQgKi9cbitcdGtmcmVlX3NrYihza2IpO1xuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3RwX3Rlc3RfbmV0ZGV2X29wcyA9IHtcbitcdC5uZG9fc3RhcnRfeG1pdCA9IG1jdHBfdXNibGliX2Rldl90eCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCB1MTYgZXBfbWF4cGFja2V0ID0gNTEyO1xuK3N0YXRpYyBjb25zdCBtY3RwX2VpZF90IGxvY2FsX2VpZCA9IDg7XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdG5kZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9NQ1RQO1xuK1x0bmRldi1cdTAwM2VtdHUgPSA4MTkyO1xuK1x0bmRldi1cdTAwM2VmbGFncyA9IElGRl9OT0FSUDtcbitcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm1jdHBfdGVzdF9uZXRkZXZfb3BzO1xuK1x0bmRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4rXHRuZGV2LVx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbih2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gZGF0YTtcbitcbitcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4rXHRpZiAoZGV2LVx1MDAzZW1kZXYpXG4rXHRcdG1jdHBfZGV2X3B1dChkZXYtXHUwMDNlbWRldik7XG4rXHR1bnJlZ2lzdGVyX25ldGRldihkZXYtXHUwMDNlbmRldik7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKlxuK21jdHBfdXNibGliX3Rlc3RfY3JlYXRlX2RldihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdGludCByYztcbitcbitcdG5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpkZXYpLCBcIm1jdHB0ZXN0JWRcIiwgTkVUX05BTUVfRU5VTSxcbitcdFx0XHQgICAgbWN0cF91c2JsaWJfZGV2X3NldHVwKTtcbitcdGlmICghbmRldilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGRldi1cdTAwM2VuZGV2ID0gbmRldjtcbitcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuK1xuK1x0cmMgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4rXHRpZiAocmMpIHtcbitcdFx0ZnJlZV9uZXRkZXYobmRldik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbiwgZGV2KTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRkZXYtXHUwMDNlbWRldiA9IF9fbWN0cF9kZXZfZ2V0KG5kZXYpO1xuK1x0aWYgKGRldi1cdTAwM2VtZGV2KVxuK1x0XHRkZXYtXHUwMDNlbWRldi1cdTAwM2VuZXQgPSBtY3RwX2RlZmF1bHRfbmV0KGRldl9uZXQobmRldikpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VtZGV2KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0cmMgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIGRldjtcbit9XG4rXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQoc3RydWN0IG1jdHBfZHN0ICpkc3QsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cdTAwM2VkZXYpO1xuK1xuK1x0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMsIHNrYik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4ID0gZGF0YTtcbitcbitcdC8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtXHUwMDNlcnQgd2lsbCBiZSB1bmxpbmtlZC5cbitcdCAqIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGlzIGFzIGV4cGVjdGVkLlxuK1x0ICovXG4rXHRLVU5JVF9FWFBFQ1RfVFJVRShjdXJyZW50LVx1MDAzZWt1bml0X3Rlc3QsXG4rXHRcdFx0ICByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Y3R4LVx1MDAzZXJ0LnJlZnMpKTtcbitcbitcdGtmcmVlKGN0eCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF9yb3V0ZSAqcnQ7XG4rXHRpbnQgcmM7XG4rXG4rXHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBjdHgpO1xuK1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QpO1xuK1x0cnQgPSBcdTAwMjZjdHgtXHUwMDNlcnQ7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2cnQtXHUwMDNlcmVmcywgMSk7XG4rXG4rXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbiwgY3R4KTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRjdHgtXHUwMDNlZGV2ID0gbWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHRlc3QpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eC1cdTAwM2VkZXYpO1xuK1xuK1x0cnQtXHUwMDNlbWluID0gbG9jYWxfZWlkO1xuK1x0cnQtXHUwMDNlbWF4ID0gbG9jYWxfZWlkO1xuK1x0cnQtXHUwMDNlZHN0X3R5cGUgPSBNQ1RQX1JPVVRFX0RJUkVDVDtcbitcdHJ0LVx1MDAzZXR5cGUgPSBSVE5fTE9DQUw7XG4rXHRydC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW1kZXY7XG4rXHRydC1cdTAwM2VvdXRwdXQgPSBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQ7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdGxpc3RfYWRkX3JjdShcdTAwMjZjdHgtXHUwMDNlcnQubGlzdCwgXHUwMDI2aW5pdF9uZXQubWN0cC5yb3V0ZXMpO1xuK1x0cmVmY291bnRfaW5jKFx1MDAyNnJ0LVx1MDAzZXJlZnMpO1xuK1x0cnRubF91bmxvY2soKTtcbitcbitcdHJldHVybiBjdHg7XG4rfVxuK1xuKy8qIEluaXQgYSBNQ1RQLW92ZXItVVNCIHBhY2tldCB3aXRoaW4gYSBidWZmZXIuIEBsZW4gaXMgdGhlIGxlbmd0aCBvZiB0aGVcbisgKiBidWZmZXIgdG8gd3JpdGUsIEBwYXlsb2FkX2xlbiBpcyB0aGUgcmVwb3J0ZWQgc2l6ZSBvZiB0aGUgTUNUUC1vdmVyLVVTQlxuKyAqIHBhY2tldC5cbisgKi9cbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHZvaWQgKmRhdGEsIHNpemVfdCBsZW4sXG4rXHRcdFx0XHQgICAgICBzaXplX3QgcGF5bG9hZF9sZW4pXG4re1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IG1jdHBfdXNiX2hkciB1c2I7XG4rXHRcdHN0cnVjdCBtY3RwX2hkciBtY3RwO1xuK1x0fSBoZHI7XG4rXG4rXHRoZHIudXNiLmlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XG4rXHRoZHIudXNiLmxlbiA9IGNwdV90b19iZTE2KHBheWxvYWRfbGVuKTtcbitcdGhkci5tY3RwLnZlciA9IDE7XG4rXHRoZHIubWN0cC5kZXN0ID0gbG9jYWxfZWlkO1xuK1x0aGRyLm1jdHAuc3JjID0gMDtcbitcdGhkci5tY3RwLmZsYWdzX3NlcV90YWcgPSAwO1xuK1xuK1x0bWVtY3B5KGRhdGEsIFx1MDAyNmhkciwgbWluKGxlbiwgc2l6ZW9mKGhkcikpKTtcbitcdGlmIChsZW4gXHUwMDNlIHNpemVvZihoZHIpKVxuK1x0XHRtZW1zZXQoZGF0YSArIHNpemVvZihoZHIpLCAwLCBsZW4gLSBzaXplb2YoaGRyKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjdGlvbl9yeF9maW5pKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCA9IGRhdGE7XG4rXG4rXHRtY3RwX3VzYmxpYl9yeF9maW5pKHJ4KTtcbitcdGtmcmVlKHJ4KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqXG4rbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHRpbnQgcmM7XG4rXG4rXHRyeCA9IGt6YWxsb2Nfb2JqKCpyeCk7XG4rXHRpZiAocngpIHtcbitcdFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7XG4rXHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHR9XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpO1xuK1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KHJ4LCBlcF9tYXhwYWNrZXQsIHNwYW4pO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcbitcdHJldHVybiByeDtcbit9XG4rXG4rLyogV3JhcHBlcnMgZm9yIHVzYmxpYidzIHJ4X2NvbXBsZXRlIGNhbGxiYWNrLCB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWRcbisgKiBmcm9tIGF0b21pYyBjb250ZXh0XG4rICovXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIHJ4LCBsZW4pO1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qIFNpbmdsZSBwYWNrZXQsIHN0YXJ0aW5nIG9uIGEgdHJhbnNmZXIgYm91bmRhcnksIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW5cbisgKiB0aGUgdHJhbnNmZXJcbisgKi9cbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IGxlbjtcbitcdHZvaWQgKmJ1ZjtcbitcdGludCByYztcbitcbitcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbitcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4rXG4rXHRyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCB0cnVlKTtcbitcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsXG4rXHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcbitcdC8qIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIG1heHBhY2tldCBvZiB0cmFuc2ZlciBhdmFpbGFibGUgKi9cbitcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XG4rXG4rXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KGJ1ZiwgOCwgOCk7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVx1MDAzZW5kZXYsIHJ4LCA4KTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzKTtcbitcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xuK1x0aWYgKHNrYilcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNrYi1cdTAwM2VsZW4sIDQpO1xuK1x0a2ZyZWVfc2tiKHNrYik7XG4rfVxuK1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHRzaXplX3Qgbl9wa3RzO1xuK1x0c2l6ZV90IHBrdHNbNl07XG4rXHRzaXplX3Qgbl94ZmVycztcbitcdHNpemVfdCB4ZmVyc1s2XTtcbit9O1xuK1xuK3N0YXRpYyB2b2lkXG4rbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICp0LFxuK1x0XHRcdFx0ICBjaGFyICpkZXNjKVxuK3tcbitcdHN0cnNjcHkoZGVzYywgdC1cdTAwM2VuYW1lLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUpO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUoc3RydWN0IGt1bml0ICp0ZXN0LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnNwYW4sXG4rXHRcdFx0XHQgICBzaXplX3QgKmxlbilcbit7XG4rXHRzaXplX3QgcGt0X2xlbiA9IDAsIHhmZXJfbGVuID0gMDtcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3Bhbi1cdTAwM2VuX3BrdHM7IGkrKykge1xuK1x0XHRLVU5JVF9BU1NFUlRfR0VfTVNHKHRlc3QsIHNwYW4tXHUwMDNlcGt0c1tpXSwgOCxcbitcdFx0XHRcdCAgICBcInBrdFsldV0gbGVuIHRvbyBzbWFsbCAoJXp1KSBmb3IgJXNcIixcbitcdFx0XHRcdCAgICBpLCBzcGFuLVx1MDAzZXBrdHNbaV0sIHNwYW4tXHUwMDNlbmFtZSk7XG4rXHRcdHBrdF9sZW4gKz0gc3Bhbi1cdTAwM2Vwa3RzW2ldO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3Bhbi1cdTAwM2VuX3hmZXJzOyBpKyspXG4rXHRcdHhmZXJfbGVuICs9IHNwYW4tXHUwMDNleGZlcnNbaV07XG4rXG4rXHRLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHBrdF9sZW4sIHhmZXJfbGVuLFxuK1x0XHRcdCAgICBcImludmFsaWQgcGt0X2xlbiAoJXp1KSAhPSB4ZmVyX2xlbiAoJXp1KSBmb3IgJXNcIixcbitcdFx0XHQgICAgcGt0X2xlbiwgeGZlcl9sZW4sIHNwYW4tXHUwMDNlbmFtZSk7XG4rXG4rXHQqbGVuID0gcGt0X2xlbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnBrdF9zcGFuID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbitcdHNpemVfdCBsZW4sIHhmZXJfbGVuLCBvZmYsIHhmZXJfb2ZmO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcdHU4ICpwa3RidWY7XG4rXHR2b2lkICpidWY7XG4rXHRpbnQgcmM7XG4rXG4rXHRtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHRlc3QsIHBrdF9zcGFuLCBcdTAwMjZsZW4pO1xuK1x0cGt0YnVmID0ga3VuaXRfa21hbGxvY19hcnJheSh0ZXN0LCAxLCBsZW4sIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHBrdGJ1Zik7XG4rXG4rXHQvKiBsYXkgb3V0IHBhY2tldHMgKi9cbitcdGZvciAob2ZmID0gMCwgaSA9IDA7IGkgXHUwMDNjIHBrdF9zcGFuLVx1MDAzZW5fcGt0czsgaSsrKSB7XG4rXHRcdGxlbiA9IHBrdF9zcGFuLVx1MDAzZXBrdHNbaV07XG4rXHRcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmICsgb2ZmLCBsZW4sIGxlbik7XG4rXHRcdG9mZiArPSBsZW47XG4rXHR9XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuK1xuK1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4rXG4rXHQvKiBmZWVkIHRyYW5zZmVycyAqL1xuK1x0Zm9yIChvZmYgPSAwLCB4ZmVyX29mZiA9IDAsIGkgPSAwOyBpIFx1MDAzYyBwa3Rfc3Bhbi1cdTAwM2VuX3hmZXJzOykge1xuK1x0XHR4ZmVyX2xlbiA9IHBrdF9zcGFuLVx1MDAzZXhmZXJzW2ldIC0geGZlcl9vZmY7XG4rXHRcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgR0ZQX0tFUk5FTCk7XG4rXHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XG4rXG4rXHRcdGxlbiA9IG1pbihsZW4sIHhmZXJfbGVuKTtcbitcdFx0bWVtY3B5KGJ1ZiwgcGt0YnVmICsgb2ZmLCBsZW4pO1xuK1xuK1x0XHRpZiAobGVuID09IHhmZXJfbGVuKSB7XG4rXHRcdFx0Lyogd2hvbGUvZW5kIHhmZXIsIHByb2NlZWQgdG8gbmV4dCAqL1xuK1x0XHRcdHhmZXJfb2ZmID0gMDtcbitcdFx0XHRpKys7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogcGFydGlhbCAqL1xuK1x0XHRcdHhmZXJfb2ZmICs9IGxlbjtcbitcdFx0fVxuK1xuK1x0XHRyYyA9IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBsZW4pO1xuK1x0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1x0XHRvZmYgKz0gbGVuO1xuK1x0fVxuK1xuK1x0LyogY2hlY2sgcmVjZWl2ZWQgcGFja2V0cyAqL1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIHBrdF9zcGFuLVx1MDAzZW5fcGt0cyk7XG4rXHRmb3IgKGkgPSAwOyA7IGkrKykge1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4rXG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoaSBcdTAwM2MgcGt0X3NwYW4tXHUwMDNlbl9wa3RzKVxuK1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCBwa3Rfc3Bhbi1cdTAwM2Vwa3RzW2ldIC0gNCk7XG4rXG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcbitcdC8qIE9uZSBwYWNrZXQgY29tcGxldGVseSB3aXRoaW4gYSB0cmFuc2ZlciAqL1xuK1x0eyBcIjFwMXgtY29tcGxldGVcIiwgMSwgeyA4IH0sIDEsIHsgOCB9IH0sXG4rXHQvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovXG4rXHR7IFwiMnAxeC1jb21iaW5lZFwiLCAyLCB7IDgsIDggfSwgMSwgeyAxNiB9IH0sXG4rXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cbitcdHsgXCIxcDJ4LXNwbGl0LXBheWxvYWRcIiwgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxuK1x0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgVVNCIHRyYW5zcG9ydCBoZWFkZXIgKi9cbitcdHsgXCIxcDJ4LXNwbGl0LXVzYmhkclwiLCAxLCB7IDE2IH0sIDIsIHsgMiwgMTQgfSB9LFxuK1x0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi9cbitcdHsgXCIxcDJ4LXNwbGl0LW1jdHBoZHJcIiwgMSwgeyAxNiB9LCAyLCB7IDYsIDEwIH0gfSxcbitcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xuK1x0eyBcIjFwM3gtc3BsaXRcIiwgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxuK1x0LyogTWF4LXNpemVkIHNpbmdsZSB0cmFuc2ZlciAqL1xuK1x0eyBcIjFwMXgtbGFyZ2VcIiwgMSwgeyA4MTkxIH0sIDEsIHsgODE5MSB9IH0sXG4rXHQvKiBUd28gbGFyZ2UgcGFja2V0cywgc3BsaXQgYXQgdGhlIHdvcnN0LWNhc2UgZm9yIGFsbG9jYXRpb24sIHdpdGggYVxuK1x0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxuK1x0ICovXG4rXHR7IFwiMnAyeC1sYXJnZS1zcGxpdFwiLCAyLCB7IDgxOTAsIDgxOTAgfSwgMiwgeyA4MTkxLCA4MTg5IH0gfSxcbit9O1xuK1xuK0tVTklUX0FSUkFZX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zLFxuK1x0XHQgIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyk7XG4rXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG1jdHBfdXNibGliX3Rlc3RfY2FzZXNbXSA9IHtcbitcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLFxuK1x0S1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLFxuK1x0XHRcdCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLFxuK1x0e31cbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgbWN0cF91c2JsaWJfdGVzdF9zdWl0ZSA9IHtcbitcdC5uYW1lID0gXCJtY3RwLXVzYmxpYlwiLFxuK1x0LnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLFxuK307XG4rXG4ra3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzE5OTdmOTg5MDI2Zjlcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xuQEAgLTAsMCArMSw2MjUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogbWN0cC11c2JsaWIuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5XG4rICpcbisgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvY2g5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9tY3RwLmhcdTAwM2VcbitcbitpbnQgbWN0cF91c2JsaWJfcnhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCB1MTYgZXBfcGt0bGVuLCBib29sIHNwYW4pXG4re1xuK1x0aWYgKCFlcF9wa3RsZW4pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGVwX3BrdGxlbiBcdTAwMjYgflVTQl9FTkRQT0lOVF9NQVhQX01BU0spXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bWVtc2V0KHJ4LCAwLCBzaXplb2YoKnJ4KSk7XG4rXHRyeC1cdTAwM2VzcGFuID0gc3BhbjtcbitcdHJ4LVx1MDAzZWVwX3BrdGxlbiA9IGVwX3BrdGxlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9pbml0KTtcbitcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbit7XG4rXHRrZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG4rXG4rLypcbisgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcbisgKiBiZSBwb3B1bGF0ZWQgb24gc3VjY2Vzcy5cbisgKi9cbitpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdCAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsXG4rXHRcdFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4rXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcbitcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xuK1x0XHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XG4rXHRcdHNrYiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRsZW4gPSByeC1cdTAwM2VzcGFuID8gcm91bmR1cChNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCwgcngtXHUwMDNlZXBfcGt0bGVuKVxuK1x0XHQ6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7XG4rXG4rXHRpZiAoIXNrYikge1xuK1x0XHRza2IgPSBfX25ldGRldl9hbGxvY19za2IobmV0ZGV2LCBsZW4sIGdmcCk7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0fSBlbHNlIGlmIChza2ItXHUwMDNlY2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpIFx1MDAzYyByeC1cdTAwM2VlcF9wa3RsZW4pIHtcbitcdFx0LyogV2UgYWx3YXlzIG5lZWQgdG8gcmVhbGxvYyBpZiAtXHUwMDNlY2xvbmVkLCBhcyB3ZSBjYW5ub3RcbitcdFx0ICogcmVzdWJtaXQgdGhlIChub3ctc2hhcmVkKSBza2IgYnVmZmVyIGZvciBwb3NzaWJsZSBETUEuXG4rXHRcdCAqXG4rXHRcdCAqIE90aGVyd2lzZSAoaWYgd2UgaGF2ZSBhbiB1bi1jbG9uZWQgU0tCKToganVzdCBlbnN1cmUgd2VcbitcdFx0ICogaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIHByZXZlbnQgYmFiYmxlLiBTaW5jZSB3ZSBhbGxvY2F0ZWRcbitcdFx0ICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnlcbitcdFx0ICogb2YgdGhhdCBzcGFjZSBmb3IgYSBwcmlvciBNQ1RQIHBhY2tldCwgYmVjYXVzZSAhY2xvbmVkKSwgd2VcbitcdFx0ICogaGF2ZSBzdWZmaWNpZW50IGRhdGEgdG8gZmluaXNoIHRoZSBjdXJyZW50IE1DVFAgcGFja2V0LlxuK1x0XHQgKi9cbitcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XG4rXG4rXHRcdHNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBsZW4sIGdmcCk7XG4rXHRcdGlmICghc2tiMilcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbitcdFx0c2tiID0gc2tiMjtcbitcdH1cbitcbitcdHJ4LVx1MDAzZXNrYiA9IHNrYjtcbitcbitcdC8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbid0IHJlcXVpcmUgZXhhY3RseSBvbmVcbitcdCAqIHRyYW5zZmVyIHBhY2tldC4gSWYgd2UgaGF2ZSBleHRyYSB0YWlscm9vbSwgbWF5IGFzIHdlbGwgdXNlIGl0LFxuK1x0ICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSBcdTAwM2U9IGVwX3BrdGxlbi5cbitcdCAqL1xuK1x0aWYgKHJ4LVx1MDAzZXNwYW4pXG4rXHRcdGxlbiA9IHJvdW5kZG93bihza2JfdGFpbHJvb20oc2tiKSwgcngtXHUwMDNlZXBfcGt0bGVuKTtcbitcbitcdCpidWZwID0gc2tiX3RhaWxfcG9pbnRlcihza2IpO1xuK1x0KmxlbnAgPSBsZW47XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfcHJlcGFyZSk7XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihuZXRkZXYtXHUwMDNlZHN0YXRzKTtcbitcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbitcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKTtcbitcbitcdC8qIHdlJ3JlIGNhbGxlZCBmcm9tIGFuIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIsIGFuZCBjYW5ub3QgYXNzdW1lIGxvY2FsXG4rXHQgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWRcbitcdCAqL1xuK1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbitcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMpO1xuK1x0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcbitcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xuK1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXHRjYiA9IF9fbWN0cF9jYihza2IpO1xuK1x0Y2ItXHUwMDNlaGFsZW4gPSAwO1xuK1x0bmV0aWZfcngoc2tiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNlcnhfZHJvcHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbit9XG4rXG4rLypcbisgKiBSZWNlaXZlIGEgVVNCIGNvbXBsZXRpb24gb2YgQGxlbiBieXRlcyBvZiBpbmNvbWluZyBkYXRhLiBXZSB3aWxsIHRoZW4gc3BsaXRcbisgKiB0aGlzIGludG8gcGFja2V0cyBhbmQgbmV0aWZfcngoKSBlYWNoLiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgaW4gYXRvbWljXG4rICogY29udGV4dHMgLSBpZS4sIFVSQiBjb21wbGV0aW9uLlxuKyAqXG4rICogQXNzdW1lcyBAbmV0ZGV2IHVzZXMgZHN0YXRzLlxuKyAqL1xuK2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4rXHRpbnQgcmMgPSAwO1xuK1xuK1x0X19za2JfcHV0KHNrYiwgbGVuKTtcbitcbitcdGZvciAoOzspIHtcbitcdFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcbitcdFx0LyogbGVuZ3RoIG9mIE1DVFAgcGFja2V0LCBpbmNsdWRpbmcgVVNCIGhlYWRlciAqL1xuK1x0XHR1MTYgcGt0X2xlbjtcbitcbitcdFx0Lyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi9cbitcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqaGRyKSkge1xuK1x0XHRcdGlmICghcngtXHUwMDNlc3Bhbikge1xuK1x0XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHRcdCAgIFwicng6IHRpbnkgeGZlciAoJWQpIGluIG5vbi1zcGFuIG1vZGVcIixcbitcdFx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0XHRyYyA9IC1FTk9NU0c7XG4rXHRcdFx0XHRnb3RvIGVycl9yZXNldDtcbitcdFx0XHR9XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0aGRyID0gKHN0cnVjdCBtY3RwX3VzYl9oZHIgKilza2ItXHUwMDNlZGF0YTtcbitcbitcdFx0aWYgKGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xuK1x0XHRcdC8qIEJ5IHJlc2V0dGluZyBoZXJlLCB3aWxsIHN0YXJ0IHRoZSBuZXh0IElOIHRyYW5zZmVyXG4rXHRcdFx0ICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW5cbitcdFx0XHQgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkXG4rXHRcdFx0ICogd2l0aCB0aGUgc3RhcnQgb2YgYSB0cmFuc2Zlci5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UnbGwgZHJvcFxuK1x0XHRcdCAqIHRoZSBjdXJyZW50IHRyYW5zZmVyIG9ubHlcbitcdFx0XHQgKi9cbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJyeDogaW52YWxpZCBpZCAlMDR4XFxuXCIsXG4rXHRcdFx0XHQgICBiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpKTtcbitcdFx0XHRyYyA9IC1FUFJPVE87XG4rXHRcdFx0Z290byBlcnJfcmVzZXQ7XG4rXHRcdH1cbitcbitcdFx0cGt0X2xlbiA9IGJlMTZfdG9fY3B1KGhkci1cdTAwM2VsZW4pO1xuK1x0XHQvKiB2MS4xLCB3aXRoIHNwYW4gZW5hYmxlZCwgaGFzIGEgMTMtYml0IGxlbmd0aCAqL1xuK1x0XHRwa3RfbGVuIFx1MDAyNj0gcngtXHUwMDNlc3BhbiA/XG4rXHRcdFx0TUNUUF9VU0JfMV8xX1BLVExFTl9NQVggOiBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWDtcbitcdFx0aWYgKHBrdF9sZW4gXHUwMDNjIHNpemVvZigqaGRyKSArIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpKSB7XG4rXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwicng6IGludmFsaWQgbGVuICVkXFxuXCIsIHBrdF9sZW4pO1xuK1x0XHRcdHJjID0gLUVQUk9UTztcbitcdFx0XHRnb3RvIGVycl9yZXNldDtcbitcdFx0fVxuK1xuK1x0XHQvKiBzcGFuIGNvbnRpbnVlcyB0byB0aGUgbmV4dCB0cmFuc2ZlciwgcmVzdWJtaXQgKi9cbitcdFx0aWYgKHBrdF9sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbitcdFx0XHRpZiAoIXJ4LVx1MDAzZXNwYW4pIHtcbitcdFx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuK1x0XHRcdFx0XHQgICBcInJ4OiBzaG9ydCB4ZmVyICglZCB2cyAlZCkgaW4gbm9uLXNwYW4gbW9kZVwiLFxuK1x0XHRcdFx0XHQgICBwa3RfbGVuLCBza2ItXHUwMDNlbGVuKTtcbitcdFx0XHRcdHJjID0gLUVQUk9UTztcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuK1x0XHRcdH1cbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHQvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi9cbitcdFx0aWYgKHBrdF9sZW4gPT0gc2tiLVx1MDAzZWxlbikge1xuK1x0XHRcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiKTtcbitcdFx0XHRyeC1cdTAwM2Vza2IgPSBOVUxMO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qIG1vcmUgcGFja2V0cyBmb2xsb3cgLSBSWCBhIGNsb25lIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlXG4rXHRcdCAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGFcbitcdFx0ICogc3Bhbi5cbitcdFx0ICovXG4rXHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKHNrYjIpIHtcbitcdFx0XHRza2JfdHJpbShza2IyLCBwa3RfbGVuKTtcbitcdFx0XHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYjIpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKG5ldGRldik7XG4rXHRcdH1cbitcdFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXNldDpcbitcdGRldl9rZnJlZV9za2JfYW55KHJ4LVx1MDAzZXNrYik7XG4rXHRyeC1cdTAwM2Vza2IgPSBOVUxMO1xuK1x0cmV0dXJuIHJjO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSk7XG4rXG4rLypcbisgKiBDYW5jZWwgYSByeCBjb250ZXh0OyBzdWJzZXF1ZW50IHByZXBhcmUvY29tcGxldGUgY2FsbHMgd2lsbCBub3QgYmUgYVxuKyAqIGNvbnRpbnVhdGlvbiBvZiBhbnkgZGF0YSBhbHJlYWR5IHJlY2VpdmVkLlxuKyAqL1xuK3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXG4re1xuK1x0ZGV2X2tmcmVlX3NrYl9hbnkocngtXHUwMDNlc2tiKTtcbitcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XG4rXG4rLyogdHJhbnNtaXQgY29udGV4dDogZW5jYXBzdWxhdGVzIG9uZSB0cmFuc2ZlciAqL1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgge1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbitcdHN0cnVjdCBza19idWZmX2hlYWQgc2ticztcbitcdHVuc2lnbmVkIGludCBidWZfbGVuLCBsZW47XG4rXHRlbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHtcbitcdFx0VFhfU0lOR0xFLFxuK1x0XHRUWF9GTEFULFxuK1x0fSBidWZfdHlwZTtcbitcdHU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbit9O1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuK1x0XHRcdCBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsXG4rXHRcdFx0IHZvaWQgKnByaXYsIGJvb2wgc3Bhbilcbit7XG4rXHRtZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTtcbitcdHR4LVx1MDAzZW9wcyA9ICpvcHM7XG4rXHR0eC1cdTAwM2Vwcml2ID0gcHJpdjtcbitcdHR4LVx1MDAzZXNwYW4gPSBzcGFuO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dHgtXHUwMDNlbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2luaXQpO1xuK1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfYXZhaWwoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuK3tcbitcdHJldHVybiBjdHgtXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFID8gMCA6IGN0eC1cdTAwM2VidWZfbGVuIC0gY3R4LVx1MDAzZWxlbjtcbit9XG4rXG4rc3RhdGljIGJvb2wgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuK3tcbitcdC8qIFVzZSB0aGUgYmFzZWxpbmUgbGVuZ3RoIChpZSwgQlRVKSBhcyBhbiBhcHByb3hpbWF0ZVxuK1x0ICogXCJyZWFzb25hYmx5LXNpemVkXCIgcGFja2V0IHdlIGNvdWxkIGV4cGVjdC4gSWYgdGhlcmUgaXNcbitcdCAqIGluc3VmZmljaWVudCBjYXBhY2l0eSBmb3IgdGhhdCwgdGhlbiBzZW5kLlxuK1x0ICovXG4rXHRjb25zdCBzaXplX3QgcGt0X2xlbiA9IE1DVFBfVVNCX0JUVSArIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcbitcbitcdHJldHVybiBtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpIFx1MDAzYyBwa3RfbGVuO1xuK31cbitcbisvKlxuKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlIC0gaW5kaWNhdGluZyB0aGF0IHRoZSBuZXcgc2tiXG4rICogY291bGQgbm90IGJlIGFwcGVuZGVkLiBTbywgZXJyb3JzIHJlcG9ydGVkIGhlcmUgdG8gdGhlIFRYIHBhdGggd2lsbCByZXN1bHRcbisgKiBpbiB0aGUgVFggYmVpbmcgdHJhbnNtaXR0ZWQuXG4rICovXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hcHBlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0aWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKG1jdHBfdXNibGliX3R4X2F2YWlsKGN0eCkgXHUwMDNjIHNrYi1cdTAwM2VsZW4pXG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcbitcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYik7XG4rXG4rXHRjdHgtXHUwMDNlbGVuICs9IHNrYi1cdTAwM2VsZW47XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcbit7XG4rXHR2b2lkICpidWY7XG4rXG4rXHQvKiBJZiB3ZSBoYXZlIGEgcWxlbiBvZiAxLCB3ZSBvbmx5IGVuZGVkIHVwIHBhY2tpbmcgYSBzaW5nbGUgc2tiLFxuK1x0ICogZGVzcGl0ZSBhbGxvY2F0aW5nIGZvciBtdWx0aXBsZS4gU2tpcCB0aGUgY29weSBhbmQgc2VuZCBkaXJlY3RseVxuK1x0ICogZnJvbSB0aGUgc2tiIGRhdGEuXG4rXHQgKi9cbitcdGlmIChjdHgtXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFIHx8IGN0eC1cdTAwM2Vza2JzLnFsZW4gPT0gMSkge1xuK1x0XHRidWYgPSBjdHgtXHUwMDNlc2ticy5uZXh0LVx1MDAzZWRhdGE7XG4rXG4rXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9GTEFUKSB7XG4rXHRcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRcdHNpemVfdCBwb3MgPSAwO1xuK1xuK1x0XHRza2JfcXVldWVfd2FsayhcdTAwMjZjdHgtXHUwMDNlc2ticywgc2tiKSB7XG4rXHRcdFx0c2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC1cdTAwM2VidWYgKyBwb3MsIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHRcdHBvcyArPSBza2ItXHUwMDNlbGVuO1xuK1x0XHR9XG4rXG4rXHRcdGJ1ZiA9IGN0eC1cdTAwM2VidWY7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiBjdHgtXHUwMDNldHgtXHUwMDNlb3BzLnNlbmQoY3R4LCBidWYsIGN0eC1cdTAwM2VsZW4pO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4rXHRcdFx0XHQgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuO1xuK1xuK1x0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmN0eC1cdTAwM2Vza2JzKSkgIT0gTlVMTClcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnlfcmVhc29uKHNrYiwgcmVhc29uKTtcbitcdGtmcmVlKGN0eCk7XG4rfVxuK1xuK3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eClcbit7XG4rXHRyZXR1cm4gdHhfY3R4LVx1MDAzZXR4LVx1MDAzZXByaXY7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2N0eF9wcml2KTtcbitcbisvKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIHR4IFx1MDAyNiBjb21wbGV0aW9uIHBhdGggaXMgcXVpZXNjZWQgKi9cbit2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eClcbit7XG4rXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eC1cdTAwM2VjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpO1xuK1xuKy8qIE1heCBzaXplIG9mIGEgc3Bhbm5lZCBUWC4gU2luY2Ugd2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBzcGFuIGJ1ZmZlciwgbGltaXRcbisgKiB0aGUgdHgtdGltZSBhbGxvY2F0aW9ucyB0byA0ay4gTGFyZ2VyIHBhY2tldHMgd2lsbCBiZSBzZW50IGFzIHNpbmdsZVxuKyAqIHRyYW5zZmVycy5cbisgKi9cbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1NQQU5fTUFYID0gNDA5NiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4KTtcbitcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqXG4rbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgYm9vbCBzaW5nbGUpXG4re1xuK1x0ZW51bSBtY3RwX3VzYmxpYl90eF9idWZfdHlwZSB0eXBlO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4O1xuK1x0c2l6ZV90IHN6ID0gMDtcbitcbitcdGlmIChzaW5nbGUgfHwgc2tiLVx1MDAzZWxlbiBcdTAwM2UgVFhfU1BBTl9NQVgpIHtcbitcdFx0dHlwZSA9IFRYX1NJTkdMRTtcbitcdH0gZWxzZSB7XG4rXHRcdHR5cGUgPSBUWF9GTEFUO1xuK1x0XHRzeiA9IHR4LVx1MDAzZXNwYW4gPyBUWF9TUEFOX01BWCA6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7XG4rXHR9XG4rXG4rXHRjdHggPSBremFsbG9jX2ZsZXgoKmN0eCwgYnVmLCBzeiwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRjdHgtXHUwMDNldHggPSB0eDtcbitcdGN0eC1cdTAwM2VidWZfdHlwZSA9IHR5cGU7XG4rXHRjdHgtXHUwMDNlYnVmX2xlbiA9IHN6O1xuK1x0Y3R4LVx1MDAzZWxlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vza2JzKTtcbitcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYik7XG4rXG4rXHRyZXR1cm4gY3R4O1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRib29sIG9rKVxuK3tcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbitcdGlmIChvaykge1xuK1x0XHQvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vd1xuK1x0XHQgKiB0aGF0IHRoZXJlIGlzIGEgNC1ieXRlIGhlYWRlciBwdXNoZWQgdG8gYWxsIHNrYnMgaW5cbitcdFx0ICogdHhfc2tiX3ByZXBhcmUoKVxuK1x0XHQgKi9cbitcdFx0dTY0IG4gPSBjdHgtXHUwMDNlc2ticy5xbGVuO1xuK1x0XHRzNjQgbGVuID0gY3R4LVx1MDAzZWxlbiAtIChuICogc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKTtcbitcbitcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfcGFja2V0cywgbik7XG4rXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2J5dGVzLCBsZW4pO1xuK1x0fSBlbHNlIHtcbitcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfZHJvcHMsIGN0eC1cdTAwM2Vza2JzLnFsZW4pO1xuK1x0fVxuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbitcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbit9XG4rXG4rLypcbisgKiBDb21wbGV0aW9uIGZvciB0aGUgLVx1MDAzZXNlbmQoKSBvcC4gVGhpcyB3aWxsIHVwZGF0ZSBuZXRkZXYgc3RhdHMgYW5kXG4rICogZnJlZSB0aGUgdHggY29udGV4dC5cbisgKlxuKyAqIExpa2VseSBjYWxsZWQgZnJvbSAoYXRvbWljKSBVUkIgY29tcGxldGlvbiBjb250ZXh0LlxuKyAqL1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spXG4re1xuK1x0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID1cbitcdFx0b2sgPyBTS0JfQ09OU1VNRUQgOiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbitcbitcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZSh0eF9jdHgsIGRldiwgb2spO1xuK1x0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUodHhfY3R4LCByZWFzb24pO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcbitcbisvKiBQcmVwYXJlIGEgc2tiIGZvciBwdXNoKClcbisgKlxuKyAqIE9uIGVycm9yLCBwb3B1bGF0ZXMgQHJlYXNvbi5cbisgKi9cbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3BhbixcbitcdFx0XHRcdCAgICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uICpyZWFzb24pXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwbGVuLCBtYXhfbGVuO1xuK1x0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuK1x0aW50IHJjO1xuK1xuK1x0bWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xuK1xuK1x0cGxlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHRpZiAocGxlbiArIHNpemVvZigqaGRyKSBcdTAwM2UgbWF4X2xlbikge1xuK1x0XHQqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fQklHO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1x0fVxuK1xuK1x0cmMgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKmhkcikpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbitcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbitcdGlmICghaGRyKSB7XG4rXHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0aGRyLVx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XG4rXHRoZHItXHUwMDNlbGVuID0gY3B1X3RvX2JlMTYocGxlbiArIHNpemVvZigqaGRyKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvXG4rICogb3BzLVx1MDAzZXNlbmQoKS5cbisgKlxuKyAqIFRha2VzIG93bmVyc2hpcCBvZiBAc2tiLCBpbmNsdWRpbmcgb24gZXJyb3IuXG4rICovXG4raW50IG1jdHBfdXNibGliX3R4X3B1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuK1x0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSlcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7XG4rXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247XG4rXHRjb25zdCBpbnQgbWF4X3RyaWVzID0gMztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgdHJ5ID0gMSwgcmM7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHNrYiwgdHgtXHUwMDNlc3BhbiwgXHUwMDI2cmVhc29uKTtcbitcdGlmIChyYykge1xuK1x0XHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xuK1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbitcdFx0Lyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHhcbitcdFx0ICogaXMgbm93IHNlbmRhYmxlIChpZS46ICFtb3JlKS5cbitcdFx0ICovXG4rXHRcdHNrYiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbityZXRyeTpcbitcdC8qIFRyeSBhbmQgcXVldWUgdG8gdGhlIGN1cnJlbnQgY29udGV4dC4gV2UgZXhpdCB0aGlzIGNyaXRpY2FsIHNlY3Rpb25cbitcdCAqIHdpdGggYSBmZXcgYml0cyBvZiBzdGF0ZTpcbitcdCAqICAtIHNlbmRfY3R4OiBpbmRpY2F0aW5nIGEgcHJpb3IgY29udGV4dCB0aGF0IG5lZWRzIHRvIGJlIHNlbnRcbitcdCAqICAtIHNrYjogaW5kaWNhdGluZyB0aGF0IGEgc2tiIHN0aWxsIG5lZWRzIHRvIGJlIHF1ZXVlZC9zZW50XG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGN0eCA9IHR4LVx1MDAzZWN1cl9jdHg7XG4rXHRpZiAoY3R4KSB7XG4rXHRcdGlmIChza2IpIHtcbitcdFx0XHRyYyA9IG1jdHBfdXNibGliX3R4X2FwcGVuZChjdHgsIHNrYik7XG4rXHRcdFx0aWYgKHJjKSB7XG4rXHRcdFx0XHQvKiBjYW4ndCBhcHBlbmQgdG8gdGhlIHBlbmRpbmcgdHggLSBkZXRhY2ggZm9yXG4rXHRcdFx0XHQgKiBzZW5kaW5nLCBhbmQgd2UnbGwgY3JlYXRlIGEgbmV3IHR4IGJlbG93LlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0Lyogd2UgaGF2ZSBxdWV1ZWQgKi9cbitcdFx0XHRcdHNrYiA9IE5VTEw7XG4rXHRcdFx0XHRpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSlcbitcdFx0XHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKCFtb3JlKSB7XG4rXHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4rXHRcdH1cbitcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0aWYgKHNlbmRfY3R4KSB7XG4rXHRcdHJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChzZW5kX2N0eCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzZW5kX2N0eCwgZGV2LCBmYWxzZSk7XG4rXHRcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc2VuZF9jdHgsIHJlYXNvbik7XG4rXHRcdH1cbitcdFx0c2VuZF9jdHggPSBOVUxMO1xuK1x0fVxuK1xuK1x0Lyogd2UgaGF2ZSBlaXRoZXIgcXVldWVkLCBvciB0aGUgcHJlcGFyZSBmYWlsZWQ7IG5vdGhpbmcgbW9yZSB0byBkbyAqL1xuK1x0aWYgKCFza2IpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZSh0eCwgc2tiLCAhbW9yZSk7XG4rXHRpZiAoIWN0eCkge1xuK1x0XHRuZXRkZXZfZGJnKGRldiwgXCJUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcXG5cIik7XG4rXHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdC8qIGlmIHdlJ3JlIHJlYWR5IHRvIHNlbmQgbm93LCBubyBuZWVkIHRvIGVucXVldWUgKi9cbitcdGlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKSB7XG4rXHRcdHJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChjdHgpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcbitcdFx0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4rXHRcdH1cbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoIXR4LVx1MDAzZWN1cl9jdHgpIHtcbitcdFx0dHgtXHUwMDNlY3VyX2N0eCA9IGN0eDtcbitcdFx0Y3R4ID0gTlVMTDtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0Lyogd2UgbWF5IGhhdmUgbG9zdCB0aGUgcmFjZSB3aXRoIGEgY29uY3VycmVudCB0eDsgc2hvdWxkbid0IGhhcHBlbiwgYXNcbitcdCAqIG5kb19zdGFydF94bWl0IHNob3VsZCBiZSBzZXJpYWxpc2VkIG92ZXIgb25lIHF1ZXVlLCBidXQgdHJ5IGFnYWluXG4rXHQgKiBmcm9tIHRoZSB0b3AsIGFzIHdlIG1heSBiZSBhYmxlIHRvIHF1ZXVlIHRoZSBza2IgdG8gdGhhdCBjb250ZXh0LlxuK1x0ICovXG4rXHRpZiAoY3R4KSB7XG4rXHRcdC8qIHVubGluayB0aGUgbmV3IChzb2xlKSBza2IsIHdlIGRvbid0IHdhbnQgaXQgZnJlZWQgd2l0aCBjdHggKi9cbitcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vza2JzKTtcbitcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xuK1x0XHRpZiAoKyt0cnkgXHUwMDNlIG1heF90cmllcykge1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4rXHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcdFx0fVxuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3B1c2gpO1xuK1xuKy8qIENhbmNlbCBhIHR4OiBhbnkgdW4tc2VudCBjb250ZXh0IGlzIHJlbGVhc2VkLiAqL1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCA9IE5VTEw7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBjdHgpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKGN0eCwgZGV2LCBmYWxzZSk7XG4rXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XG4rXG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rTU9EVUxFX0FVVEhPUihcIkplcmVteSBLZXJyIFx1MDAzY2prQGNvZGVjb25zdHJ1Y3QuY29tLmF1XHUwMDNlXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIk1DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5XCIpO1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVClcbisjaW5jbHVkZSBcIm1jdHAtdXNibGliLXRlc3QuY1wiXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbmluZGV4IGEyZjZmMWUwNGVmYmQwLi40YmIwNGEzNzExMDUwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbkBAIC0yLDcgKzIsNyBAQFxuIC8qXG4gICogbWN0cC11c2IuaCAtIE1DVFAgVVNCIHRyYW5zcG9ydCBiaW5kaW5nOiBjb21tb24gZGVmaW5pdGlvbnMsXG4gICogYmFzZWQgb24gRE1URjAyODMgc3BlY2lmaWNhdGlvbjpcbi0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGZcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcbiAgKlxuICAqIFRoZXNlIGFyZSBwcm90b2NvbC1sZXZlbCBkZWZpbml0aW9ucywgdGhhdCBtYXkgYmUgc2hhcmVkIGJldHdlZW4gaG9zdFxuICAqIGFuZCBnYWRnZXQgZHJpdmVycy5cbkBAIC0xMywxOCArMTMsOTYgQEBcbiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcbiAjZGVmaW5lIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuKy8qXG4rICogTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgaGVhZGVyLiBEU1AwMjgzIHYxLjAgaGFzIGFuIDgtYml0IGxlbmd0aCBmaWVsZFxuKyAqIChwcmVjZWRlZCBieSA4IHJlc2VydmVkIGJpdHMpLCB2MS4xIGhhcyBhIDEzLWJpdCBsZW5ndGggZmllbGQgKHByZWNlZGVkIGJ5XG4rICogMyByZXNlcnZlZCBiaXRzKS4gV2UgdXNlIGEgYmUxNiBmb3Igb3VyIGxlbmd0aCB0byBoYW5kbGUgdGhlIGxhcmdlciB2MS4xXG4rICogcmVwcmVzZW50YXRpb24sIGFuZCBtYXNrIGFzIGFwcHJvcHJpYXRlLlxuKyAqL1xuIHN0cnVjdCBtY3RwX3VzYl9oZHIge1xuIFx0X19iZTE2XHRpZDtcbi1cdHU4XHRyc3ZkO1xuLVx0dThcdGxlbjtcbitcdF9fYmUxNlx0bGVuO1xuIH0gX19wYWNrZWQ7XG4gXG4tI2RlZmluZSBNQ1RQX1VTQl9YRkVSX1NJWkVcdDUxMlxuKy8qIG1heCB0cmFuc2ZlciBzaXplIGZvciBEU1AwMjgzIHYxLjAgKi9cbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9YRkVSX1NJWkVcdDUxMlxuICNkZWZpbmUgTUNUUF9VU0JfQlRVXHRcdDY4XG4gI2RlZmluZSBNQ1RQX1VTQl9NVFVfTUlOXHRNQ1RQX1VTQl9CVFVcbi0jZGVmaW5lIE1DVFBfVVNCX01UVV9NQVhcdChVOF9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWFx0VThfTUFYXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfTVRVX01BWFx0KE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKVxuKyNkZWZpbmUgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVhcdEdFTk1BU0soMTIsIDApXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzFfTVRVX01BWFx0KE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKVxuICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRFx0MHgxYWI0XG4gXG4rLyogbWN0cC11c2JsaWIgKi9cbitcbisvKlxuKyAqIFJYIGhhbmRsZTogZHJpdmVycyB3aWxsIHR5cGljYWxseSBjcmVhdGUgb25lIG9uIGluaXQsIHdoaWNoIHBlcnNpc3RzIGZvclxuKyAqIHRoZSBsaWZlIG9mIHRoZSBkcml2ZXIuIFRoZSBzYW1lIGhhbmRsZSBpcyB1c2VkIGZvciBwcm9ncmVzc2l2ZVxuKyAqIHByZXBhcmUgLVx1MDAzZSBjb21wbGV0ZSBvcGVyYXRpb25zIChmb3IgZWFjaCBpbmNvbWluZyBVU0IgdHJhbnNmZXIpLCB3aGljaFxuKyAqIHJlc3VsdCBpbiBuZXRpZl9yeCgpLWluZyB0aGUgTUNUUCBwYWNrZXRzIHJlY2VpdmVkXG4rICovXG4rc3RydWN0IG1jdHBfdXNibGliX3J4IHtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHR1MTYgZXBfcGt0bGVuO1xuK1x0Ym9vbCBzcGFuO1xuK307XG4rXG4raW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7XG4rXG4raW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxuK1x0XHRcdCAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcCk7XG4rXG4raW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xuK1xuKy8qXG4rICogVFggaGFuZGxlOiBjcmVhdGVkIGJ5IG1jdHBfdXNibGliX3R4X3B1c2goKSBkdXJpbmcgdGhlIHR4IHBhdGgsIGFuZFxuKyAqIG1heSBwZXJzaXN0IGFjcm9zcyBtdWx0aXBsZSBwYWNrZXQgdHJhbnNtaXRzLlxuKyAqL1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHg7XG4rXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XG4rXHQvKiBTdGFydCBhIFVTQiBUWCBmb3IgQGRhdGEuIE9uIHJldHVybmluZyBzdWNjZXNzLCB0aGUgaW1wbGVtZW50YXRpb25cbitcdCAqIG11c3QgYXJyYW5nZSBmb3IgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSgpIHRvIGJlIGNhbGxlZCBhdCBzb21lXG4rXHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXG4rXHQgKi9cbitcdGludCAoKnNlbmQpKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7XG4rfTtcbitcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdHgge1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4rXHR2b2lkICpwcml2O1xuK1x0Ym9vbCBzcGFuO1xuK1x0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cbitcdHNwaW5sb2NrX3QgbG9jaztcbitcdC8qIGNvbnRleHQgdG8gd2hpY2ggd2UgYXJlIGFkZGluZyBwYWNrZXRzLCBjbGVhcmVkIG9uIHNlbmQgKi9cbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XG4rfTtcbitcbit2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbitcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLCB2b2lkICpwcml2LFxuK1x0XHRcdCBib29sIHNwYW4pO1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcbitcbit2b2lkICptY3RwX3VzYmxpYl90eF9jdHhfcHJpdihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgpO1xuK1xuK2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbitcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbitcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA4OjUzOjE3LjI2MzM4NjQ4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTY0NDM2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIEZ1enppbmcgTUNUUC1vdmVyLVVTQiBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQncyBpbnRyb2R1Y2luZyBhIGNvbW1vbiBsaWJyYXJ5LCBgbWN0cC11c2JsaWIuY2AsIGZvciBNQ1RQLW92ZXItVVNCLiBUaGUgZXhpc3RpbmcgYG1jdHAtdXNiLmNgIGRyaXZlciBpcyBiZWluZyBtb2RpZmllZCB0byBsZXZlcmFnZSBpdCwgYW5kIGEgbmV3IGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgIEtjb25maWcgb3B0aW9uIGlzIGJlaW5nIGludHJvZHVjZWQuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpcyBldmVuICpyZWFjaGFibGUqIHdpdGhpbiBvdXIgdmlydHVhbGl6ZWQgdGVzdGluZyBlbnZpcm9ubWVudHMsIHNwZWNpZmljYWxseSBHQ0UgYW5kIFFFTVUuIFRoZSBwcm9tcHQncyBoaW50IGFib3V0IFwic29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIiBpcyBrZXkgaGVyZS5cblxuQWgsIHJpZ2h0LCBVU0IgZ2FkZ2V0IGFuZCBkdW1teV9oY2QgZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnkgb2Ygc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIG1lYW5pbmcgdGhleSAqYXJlKiBhY2Nlc3NpYmxlIGluIFFFTVUuIFRoYXQgc2V0dGxlcyB0aGF0LiBBbmQgc2luY2UgYG1jdHAtdXNiLmNgIGlzIGEgVVNCICpob3N0KiBkcml2ZXIgZm9yIE1DVFAgZGV2aWNlcywgd2hpY2ggdXNlcyB0aGUgVVNCIGJ1cywgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHRlc3QgaXQgdXNpbmcgZHVtbXkgVVNCIGRldmljZXMgb3IgdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrLiBBbmQgdGhpcyBpcyBleGNlbGxlbnQgbmV3cy4gVGhlIHByb21wdCBhbHNvIG1lbnRpb25lZCBzeXprYWxsZXIuXG5cblllcywgc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHV0aWxpemUgZHVtbXlfaGNkIGFuZCByYXctZ2FkZ2V0LCBzbyB0aGlzIG9wZW5zIHRoZSBkb29yIHRvIGVmZmVjdGl2ZSBmdXp6aW5nLiBXZSBjYW4gZGVmaW5pdGVseSBmdXp6IHRoaXMhXG5cbk5vdywgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGluIGBtY3RwLXVzYmxpYi5jYDogYG1jdHBfdXNibGliX3J4X2luaXRgLCBgbWN0cF91c2JsaWJfcnhfZmluaWAsIGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3J4X2NhbmNlbGAsIGBtY3RwX3VzYmxpYl90eF9pbml0YCwgYG1jdHBfdXNibGliX3R4X2ZpbmlgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgLlxuXG5XZSBhbHNvIGhhdmUgdGhlIGZ1bmN0aW9ucyBpbiBgbWN0cC11c2IuY2A6IGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYG1jdHBfdXNiX3J4X3F1ZXVlYCwgYG1jdHBfdXNiX2luX3VyYl9lcnJgLCBgbWN0cF91c2JfaW5fY29tcGxldGVgLCBgbWN0cF91c2JfcnhfcmV0cnlfd29ya2AsIGBtY3RwX3VzYl9vcGVuYCwgYG1jdHBfdXNiX3N0b3BgLCBgbWN0cF91c2JfcHJvYmVgLCBhbmQgYG1jdHBfdXNiX2Rpc2Nvbm5lY3RgLlxuXG5LY29uZmlnIGRlcGVuZGVuY2llcyBhcmUgbmV4dC4gYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAgZGVwZW5kcyBvbiBgVVNCYC4gYE1DVFBfVFJBTlNQT1JUX1VTQmAgYWxzbyBkZXBlbmRzIG9uIGBVU0JgIGFuZCAqc2VsZWN0cyogYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAuIFRoaXMgaW1wbGllcyB3ZSdsbCBuZWVkIHRvIGVuYWJsZSBgTUNUUF9UUkFOU1BPUlRfVVNCYCB0byB1c2UgdGhlIGxpYnJhcnkuIFdhaXQsIHdlIGFsc28gbmVlZCB0aGUgYmFzZSBgTUNUUGAgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIGJ5IGNoZWNraW5nIHRoZSBgZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1MzoyNi41MTk4MzQwMTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMjcyODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz00MT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDktXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjUwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTktXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjYwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02MS0gICAgICAgIGJvb2wgXFxcIk1DVFAgdXNibGliIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjQtXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjY1OmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcIk1DVFAgVVNCIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MjcuMTEyMTE1OTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2Mjg2MDkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jeSBDaGVjazogTUNUUF9UUkFOU1BPUlRfVVNCKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1DVFBfVFJBTlNQT1JUX1VTQmAuIEFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIHJlbHkgb24gdGhpcyBtb2R1bGUuIEZpcnN0LCBJ4oCZbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOiB3aGljaCBvdGhlciBtb2R1bGVzIG1pZ2h0IG5lZWQgYSBVU0IgdHJhbnNwb3J0IGxheWVyIGZvciBNQ1RQIGNvbW11bmljYXRpb24/IFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipQbGF0Zm9ybS1TcGVjaWZpYyBEcml2ZXJzOioqIElzIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgaGFyZHdhcmUgcGxhdGZvcm1zIG9yIFNvQ3M/IEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciBwb3J0YWJpbGl0eSBhbmQgdHJvdWJsZXNob290aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIG1vZHVsZSBsZXZlcmFnZXMgYW55IHBsYXRmb3JtLXNwZWNpZmljIFVTQiBkcml2ZXJzIGFuZCBob3cgdGhhdCBtaWdodCBpbXBhY3QgZGVwbG95bWVudCBvbiBkaWZmZXJlbnQgc3lzdGVtcy5cbiogICAqKk1DVFAgUHJvdG9jb2xzIGFuZCBQcm9maWxlczoqKiBXaGF0IE1DVFAgcHJvZmlsZXMgZGVwZW5kIG9uIHRoaXMgVVNCIHRyYW5zcG9ydD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwcm9maWxlcyBvciBjb21tYW5kcyB0aGF0IHV0aWxpemUgdGhlIFVTQiBpbnRlcmZhY2UgZGlyZWN0bHk/IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2ZpbGVzIChlLmcuLCBQTERNLCBNQ1RQIEJhc2UpIGFuZCB0aGUgdHJhbnNwb3J0IGlzIGVzc2VudGlhbC4gSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gYmFzZWQgb24gcHJvZmlsZSB1c2FnZS5cbiogICAqKlNlY3VyaXR5IENvbnNpZGVyYXRpb25zOioqIEdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBVU0IsIHdoaWNoIGlzIG9mdGVuIGEgcG9pbnQgb2YgZXh0ZXJuYWwgYWNjZXNzLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gVVNCIGNvbW11bmljYXRpb24gdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JgPyBBcmUgdGhlcmUgc2VjdXJpdHkgZmVhdHVyZXMgdGhhdCBkZXBlbmQgb24gdGhpcy5cbiogICAqKkNvbmZpZ3VyYXRpb24gYW5kIEJ1aWxkIE9wdGlvbnM6KiogQXJlIHRoZXJlIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoS2NvbmZpZyBvciBzaW1pbGFyKSB0aGF0IGluZmx1ZW5jZSB3aGV0aGVyIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGlzIGJ1aWx0IG9yIGVuYWJsZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGJ1aWxkIGZsYWdzIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IGl0IHdvcmtzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGVzZSBmYWN0b3JzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIHRvIGVuc3VyZSB0aGF0IEknbSBub3QgbWlzc2luZyBhbnkgaW1wb3J0YW50IGRlcGVuZGVuY2llcy4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1MzozMS4yNzQ5ODE3MDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxcbiAgNjE6XFx0ICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNjI6XFx0ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfVFJBTlNQT1JUX1VTQkxJQj15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDYzOlxcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDY0OlxcdFxcbiAgNjU6XFx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbiAgNjY6XFx0XFx0dHJpc3RhdGUgXFxcIk1DVFAgVVNCIHRyYW5zcG9ydFxcXCJcXG4gIDY3OlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICA2ODpcXHRcXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXFxuICA2OTpcXHRcXHRoZWxwXFxuICA3MDpcXHRcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxcbiAgNzE6XFx0XFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxcbiAgNzI6XFx0XFxuICA3MzpcXHRcXHQgIE1DVFAtb3Zlci1VU0IgaW50ZXJmYWNlcyBhcmUgcGVlci10by1wZWVyLCBzbyBlYWNoIGludGVyZmFjZVxcbiAgNzQ6XFx0XFx0ICByZXByZXNlbnRzIGEgcGh5c2ljYWwgY29ubmVjdGlvbiB0byBvbmUgcmVtb3RlIE1DVFAgZW5kcG9pbnQuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGVuZG1lbnVcXG4gIDc3OlxcdFxcbiAgNzg6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MzEuMjc1MDk2Nzg0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMDMzNjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCB0aGUgTUNUUCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYE1DVFBfVFJBTlNQT1JUX1VTQmAuIE9idmlvdXNseSwgdGhhdCBsZXZlcmFnZXMgdGhlIGBVU0JgIHN0YWNrLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBub3cgSSdtIHNoaWZ0aW5nIGdlYXJzLCBkaWdnaW5nIGRlZXBlcjogd2hhdCdzIHRoZSBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgd2l0aCBgTUNUUGAgaXRzZWxmPyBXaGVyZSBkb2VzIHRoZSBjb3JlIHByb3RvY29sIGZpdCBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmU/IElzIGl0ICpjb21wbGV0ZWx5KiBkZXBlbmRlbnQ/IEFyZSB0aGVyZSAqb3RoZXIqIGRlcGVuZGVuY2llcyB0byBjb25zaWRlcj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGZ1bmRhbWVudGFsIGZyYW1ld29yayBzbyB0aGF0IEkgZG9uJ3QgY29uZnVzZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTM0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1MzozNC4yNzU0MzY5NTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNTY3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQ1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tY3RwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21jdHAvS2NvbmZpZy0xLVxcbm5ldC9tY3RwL0tjb25maWc6MjptZW51Y29uZmlnIE1DVFBcXG5uZXQvbWN0cC9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBORVRcXG4tLVxcbm5ldC9tY3RwL0tjb25maWctMTQtXFxubmV0L21jdHAvS2NvbmZpZzoxNTpjb25maWcgTUNUUF9URVNUXFxubmV0L21jdHAvS2NvbmZpZy0xNi0gICAgICAgIGJvb2wgXFxcIk1DVFAgY29yZSB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21jdHAvS2NvbmZpZy0yMC1cXG5uZXQvbWN0cC9LY29uZmlnOjIxOmNvbmZpZyBNQ1RQX0ZMT1dTXFxubmV0L21jdHAvS2NvbmZpZy0yMi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA4OjUzOjM0LjUzODAxNDczNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxOTU3NDI5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQ1RQIFVTQiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTUNUUCBVU0IgaW50ZWdyYXRpb24gYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYE1DVFBgIGFuZCBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYW5kIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiAgUmlnaHQsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWN0cC11c2JsaWIuY2AsIHdoaWNoIGRlZmluZXMgdGhlIGNvcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBmb3IgdGhlIFVTQiBsaWJyYXJ5OlxuXG4qICAgYG1jdHBfdXNibGliX3J4X2luaXRgXG4qICAgYG1jdHBfdXNibGliX3J4X2ZpbmlgXG4qICAgYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgXG4qICAgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYFxuKiAgIGBtY3RwX3VzYmxpYl9yeF9jYW5jZWxgXG4qICAgYG1jdHBfdXNibGliX3R4X2luaXRgXG4qICAgYG1jdHBfdXNibGliX3R4X2ZpbmlgXG4qICAgYG1jdHBfdXNibGliX3R4X3B1c2hgXG4qICAgYG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVgXG4qICAgYG1jdHBfdXNibGliX3R4X2NhbmNlbGBcblxuVGhvc2UgYXJlIG15IEZvY3VzU3ltYm9scyBmcm9tIHRoZSBgbWN0cC11c2JsaWIuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSB0aGUgY29ycmVjdCBBUEkgZW50cnkgcG9pbnRzLlxuXG5Ob3csIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW4gYG1jdHAtdXNiLmNgLCBsaWtlOlxuXG4qICAgYG1jdHBfdXNiX3R4X3NlbmRgXG4qICAgYG1jdHBfdXNiX3N0YXJ0X3htaXRgXG4qICAgYG1jdHBfdXNiX3J4X3F1ZXVlYFxuKiAgIGBtY3RwX3VzYl9pbl91cmJfZXJyYFxuKiAgIGBtY3RwX3VzYl9pbl9jb21wbGV0ZWBcbiogICBgbWN0cF91c2JfcnhfcmV0cnlfd29ya2BcbiogICBgbWN0cF91c2Jfb3BlbmBcbiogICBgbWN0cF91c2Jfc3RvcGBcbiogICBgbWN0cF91c2JfcHJvYmVgXG4qICAgYG1jdHBfdXNiX2Rpc2Nvbm5lY3RgXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGFyZSBleHBvc2VkIG9yIGludGVybmFsLiBSaWdodCwgSSByZW1lbWJlciB0aGUgZ3VpZGVsaW5lIGFib3V0IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYG1jdHBfdXNiX3R4X3NlbmRgIGlzIHN0YXRpYy4gWXVwLCBpdCBpcyBpbiBgbWN0cC11c2IuY2AuIFNvIGFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBJIHNob3VsZCByZWFsbHkgYmUgZm9jdXNpbmcgb24gdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiBgbWN0cC11c2JsaWIuY2AgZm9yIG15IGFuYWx5c2lzIGFuZCBhbnkgcG90ZW50aWFsIGludGVyZmFjZSBjaGFuZ2VzLlxuXG5MZXQncyB0YWtlIGEgbG9vayBpbiBgbWN0cC11c2IuY2AsIGJlY2F1c2UgSSB0aGluayBJIHdhcyBvbiB0aGUgcmlnaHQgdHJhY2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgYW55IG9mIHRob3NlIG5vbi1zdGF0aWM/IExvb2tzIGxpa2UgdGhleSBhcmUgYWxsIHN0YXRpYywgZXhjZXB0IG1vZHVsZSBpbml0L2V4aXQuIFdlbGwsIGl0IGxvb2tzIGxpa2UgYG1jdHBfdXNiX3Byb2JlYCBpcyBzdGF0aWMuIEludGVyZXN0aW5nLiBPa2F5LCBsZXQncyB0YWtlIGEgbG9vay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg5MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1Mzo0Mi43MzM3NjI0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc0MjM3OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1jdHBfdXNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MzMwPXN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTM0NC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MzQ1OnN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTM0Ni1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz00MzY9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1jdHBfdXNiX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy00MzgtXFx0LmlkX3RhYmxlXFx0PSBtY3RwX3VzYl9kZXZpY2VzLFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzo0Mzk6XFx0LnByb2JlXFx0XFx0PSBtY3RwX3VzYl9wcm9iZSxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNDQwLVxcdC5kaXNjb25uZWN0XFx0PSBtY3RwX3VzYl9kaXNjb25uZWN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1Mzo0My4xMDgwMTA1MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDI5MzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgbWN0cF91c2JfcHJvYmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgbWN0cF91c2JfcHJvYmVgIGlzIGEgc3RhdGljIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCwgb24gaXRzIG93biwgc2VlbXMgYWNjZXB0YWJsZS4gVGhlIGRpcmVjdGl2ZSwgaG93ZXZlciwgc3BlY2lmaWNhbGx5IGVtcGhhc2l6ZXMgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIGBtY3RwLXVzYmxpYi5jYCwgd2hpY2ggc2hvdWxkIGFkZHJlc3MgdGhlIGNvbmNlcm4gbW9yZSBkaXJlY3RseS4gSXQgaXMgYmV0dGVyIGZvciB0aGlzIHRvIGJlIGEgZGlyZWN0IGV4cG9ydC4gVG8gdmVyaWZ5IHRoaXMgd2lsbCB3b3JrLCBJIHdpbGwgZXhhbWluZSBgbWN0cC11c2JsaWIuY2AgdG8gaWRlbnRpZnkgYW5kIHZlcmlmeSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZXNlIGV4cG9ydGVkIGZ1bmN0aW9ucyBhbmQgZW5zdXJlIHRoYXQgdGhpcyBhcHByb2FjaCB3aWxsIGJlIHBvc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQ3MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1Mzo0Ni42MjgzMDY4MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTY4MDY0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MTg9aW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTMxLX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MzI6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTMzLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0zND12b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNy19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM4OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2ZpbmkpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zOS1cXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz00ND1pbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTk3LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6OTg6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfcHJlcGFyZSk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTk5LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTE0MT1pbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzMtfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyMzQ6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY29tcGxldGUpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzUtXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MjQwPXZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjQ0LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjQ1OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTI0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0yNTk9dm9pZCBtY3RwX3VzYmxpYl90eF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjY4LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjY5OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2luaXQpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MzQ5PXZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNTItfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzozNTM6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY3R4X3ByaXYpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNTQtXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MzU2PXZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM1OS19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM2MDpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9maW5pKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzYxLVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQzOT12b2lkIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ0Ny19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQ0ODpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQ5Mz1pbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5Ny19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjU5ODpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNTk5LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTYwMT12b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYxNi19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjYxNzpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy02MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA4OjUzOjQ2Ljc3Mzk5NDUzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzIxMTgzMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFBsYW4gZm9yIEZ1enppbmcgdGhlIE1DVFAgVVNCIFRyYW5zcG9ydCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBuZXcgTUNUUCBVU0IgdHJhbnNwb3J0IGRyaXZlciB0aGF0IHV0aWxpemVzIHRoZSBjb21tb24gbGlicmFyeS4gSSBuZWVkIHRvIGRlZmluZSB0aGUga2V5IGZ1bmN0aW9ucyBJJ20gZ29pbmcgdG8gdGFyZ2V0IHdpdGhpbiBGb2N1c1N5bWJvbHMuIEl0IGxvb2tzIGxpa2UgSSdsbCB3YW50IHRvIGluY2x1ZGUgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGluaXRpYWxpemF0aW9uLCBmaW5hbGl6YXRpb24sIHByZXBhcmF0aW9uLCBjb21wbGV0aW9uLCBhbmQgY2FuY2VsbGF0aW9uIGZ1bmN0aW9uczogYG1jdHBfdXNibGliX3J4X2luaXRgLCBgbWN0cF91c2JsaWJfcnhfZmluaWAsIGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3J4X2NhbmNlbGAsIGBtY3RwX3VzYmxpYl90eF9pbml0YCwgYG1jdHBfdXNibGliX3R4X2ZpbmlgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgLlxuXG5OZXh0LCBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQuIEkga25vdyBJJ2xsIGRlZmluaXRlbHkgbmVlZCBgTUNUUGAsIGBNQ1RQX1RSQU5TUE9SVF9VU0JgLCBhbmQgZXZlbiB0aG91Z2ggaXQncyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBNQ1RQX1RSQU5TUE9SVF9VU0JgLCBpdCdzIGdvb2QgcHJhY3RpY2UgdG8gaW5jbHVkZSBgTUNUUF9UUkFOU1BPUlRfVVNCTElCYC4gSSBjb25zaWRlcmVkIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVGAsIGJ1dCB0aGF0J3MgYSBLVW5pdCB0ZXN0LCBhbmQgZnV6emluZyB0aGUgdGVzdCBpdHNlbGYgaXNuJ3QgdGhlIGdvYWwgaGVyZTsgd2UgY2FuIGVuYWJsZSBpdCBsYXRlciBpZiBuZWVkZWQsIHRob3VnaCBLVW5pdCB0ZXN0cyB1c3VhbGx5IHJ1biBzZXBhcmF0ZWx5LiBBbHNvLCBzaW5jZSBgTUNUUF9UUkFOU1BPUlRfVVNCYCByZWxpZXMgb24gYFVTQmAsIHRoYXQgbXVzdCBiZSBlbmFibGVkLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEFoLCByaWdodCwgYE1DVFBgIGRlcGVuZHMgb24gYE5FVGAsIHNvIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIHRvby4gU28gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgZ29pbmcgdG8gYmU6IGBNQ1RQYCwgYE1DVFBfVFJBTlNQT1JUX1VTQmAsIGBVU0JgLCBhbmQgYE5FVGAuXG5cbkZpbmFsbHksIHRoZSB0YXJnZXQgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIG9yIGR1bW15X2hjZCBpbiBRRU1VLCBzbyBpdCdzIGRlZmluaXRlbHkgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0LiBJJ20gc2F0aXNmaWVkIHdpdGggdGhpcyBwbGFuLCBzbyBJJ2xsIGdvIGFoZWFkIGFuZCBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTMyMywiT3V0cHV0VG9rZW5zIjoyNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6NTUuMDk1MTgxNjI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjI4NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQ1RQXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9VU0JcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWN0cF91c2JsaWJfcnhfaW5pdFwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfZmluaVwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfcHJlcGFyZVwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2NhbmNlbFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfaW5pdFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfZmluaVwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfcHVzaFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfY2FuY2VsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgKG1jdHAtdXNibGliKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNQ1RQIFVTQiBkcml2ZXIgdG8gdXNlIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGFuZCBoYW5kbGVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1DVFBcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX1VTQlwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9pbml0XCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9maW5pXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9wcmVwYXJlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfY2FuY2VsXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9pbml0XCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9maW5pXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9wdXNoXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9jYW5jZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCAobWN0cC11c2JsaWIpIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIE1DVFAgVVNCIGRyaXZlciB0byB1c2UgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgYW5kIGhhbmRsZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqqffg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 08:41:30 +0000 UTC FinishedAt: 2026-07-25 08:53:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MCTP", "MCTP_TRANSPORT_USB", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MCTP", "MCTP_TRANSPORT_USB", "USB", "NET" ], "series_id": "aec88867-161c-4e87-93ef-35544305f8dd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mctp_usblib_rx_init", "mctp_usblib_rx_fini", "mctp_usblib_rx_prepare", "mctp_usblib_rx_complete", "mctp_usblib_rx_cancel", "mctp_usblib_tx_init", "mctp_usblib_tx_fini", "mctp_usblib_tx_push", "mctp_usblib_tx_send_complete", "mctp_usblib_tx_cancel" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDA4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9pbml0JiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2ZpbmkmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jYW5jZWwmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfaW5pdCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9maW5pJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgKG1jdHAtdXNibGliKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNQ1RQIFVTQiBkcml2ZXIgdG8gdXNlIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGFuZCBoYW5kbGVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA4OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTNiOTZlYjk2NDUzYTIwNDRkZGEzNzEzZjU4YmY2YTk4ODAyOGIzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA4OjUzOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuaW5kZXggY2YzMjVhYjBiMWVmNTUuLmM0MGFjOWM2NjViNzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbkBAIC00Nyw5ICYjNDM7NDcsMjUgQEAgY29uZmlnIE1DVFBfVFJBTlNQT1JUX0kzQ1xuIFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXG4gXHQgIGhhdmluZyBhIFwmIzM0O21jdHAtY29udHJvbGxlclwmIzM0OyBkZXZpY2V0cmVlIHByb3BlcnR5LlxuIFxuJiM0Mztjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TUNUUCBvdmVyIFVTQiBjb21tb24gbGlicmFyeVwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gVVNCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgQ29tbW9uIHByb3RvY29sIGhhbmRsaW5nIGZ1bmN0aW9ucyBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnRcbiYjNDM7XHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcbiYjNDM7XHQgIHRyYW5zcG9ydCBkcml2ZXJcbiYjNDM7XG4mIzQzO1x0ICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLlxuJiM0MztcbiYjNDM7Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG4mIzQzOyAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIHVzYmxpYiB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzQzOyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuJiM0MzsgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzQzO1xuIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcbiBcdHRyaXN0YXRlIFwmIzM0O01DVFAgVVNCIHRyYW5zcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBVU0JcbiYjNDM7XHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXG4gXHRoZWxwXG4gXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxuIFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5pbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXG5AQCAtMiwzICYjNDM7Miw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSAmIzQzOz0gbWN0cC1pMmMub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICYjNDM7PSBtY3RwLWkzYy5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgJiM0Mzs9IG1jdHAtdXNiLm9cbiYjNDM7b2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQikgJiM0Mzs9IG1jdHAtdXNibGliLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li41NDJhNTcwYzc2Y2M5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXG5AQCAtMyw5ICYjNDM7Myw5IEBAXG4gICogbWN0cC11c2IuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGJpbmRpbmcgZHJpdmVyLlxuICAqXG4gICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6XG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXG4mIzQzOyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbkBAIC0yMiw5NSAmIzQzOzIyLDExNSBAQFxuIHN0cnVjdCBtY3RwX3VzYiB7XG4gXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2O1xuIFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XG4mIzQzO1x0Ym9vbCBzcGFuO1xuIFxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcbiBcdHU4IGVwX2luO1xuIFx0dTggZXBfb3V0O1xuIFxuLVx0c3RydWN0IHVyYiAqdHhfdXJiO1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDtcbiBcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcbiYjNDM7XHRpbnQgaW5fZXJyX2NvdW50O1xuJiM0MztcdGludCBpbl9lcnJfb3JpZztcbiYjNDM7XHRib29sIGNsZWFyX2hhbHQ7XG4gXG4gXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xuIFx0c3BpbmxvY2tfdCByeF9sb2NrO1xuIFx0Ym9vbCByeF9zdG9wcGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggdHg7XG4mIzQzO1x0c3RydWN0IHVzYl9hbmNob3IgdHhfYW5jaG9yO1xuJiM0MztcdC8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi9cbiYjNDM7XHRzcGlubG9ja190IHR4X3FtZW1fbG9jaztcbiYjNDM7XHRpbnQgdHhfcW1lbTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLFxuJiM0MztcdE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4gPSAweDAyLFxuIH07XG4gXG4mIzQzOy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcbiYjNDM7ICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSxcbiYjNDM7ICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cbiYjNDM7ICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxuJiM0MzsgKlxuJiM0MzsgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXG4mIzQzOyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXG4mIzQzOyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYl9vdXRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIHtcbi1cdHN0cnVjdCBza19idWZmICpza2IgPSB1cmItXHUwMDNlY29udGV4dDtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItXHUwMDNlZGV2O1xuLVx0aW50IHN0YXR1cztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHggPSB1cmItXHUwMDNlY29udGV4dDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbGVuID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0c3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHR4X2N0eCwgbmV0ZGV2LCB1cmItXHUwMDNlc3RhdHVzID09IDApO1xuIFxuLVx0c3dpdGNoIChzdGF0dXMpIHtcbi1cdGNhc2UgLUVOT0VOVDpcbi1cdGNhc2UgLUVDT05OUkVTRVQ6XG4tXHRjYXNlIC1FU0hVVERPV046XG4tXHRjYXNlIC1FUFJPVE86XG4tXHRcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChuZXRkZXYpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgMDpcbi1cdFx0ZGV2X2RzdGF0c190eF9hZGQobmV0ZGV2LCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpO1xuLVx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRyZXR1cm47XG4tXHRkZWZhdWx0OlxuLVx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7dW5leHBlY3RlZCB0eCB1cmIgc3RhdHVzOiAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbi1cdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XG4tXHR9XG4mIzQzO1x0dXNiX2ZyZWVfdXJiKHVyYik7XG4gXG4tXHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIC09IGxlbjtcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNldHhfcW1lbSBcdTAwM2MgVFhfUU1FTV9NQVggXHUwMDI2XHUwMDI2IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiYjNDM7XHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4mIzQzO1x0XHRcdCAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxuIHtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuLVx0dW5zaWduZWQgaW50IHBsZW47XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCB1cmIgKnVyYjtcbiBcdGludCByYztcbiBcbi1cdHBsZW4gPSBza2ItXHUwMDNlbGVuO1xuLVxuLVx0aWYgKHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpIFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XG4tXHRpZiAoIWhkcilcbi1cdFx0Z290byBlcnJfZHJvcDtcbi1cbi1cdGhkci1cdTAwM2VpZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xuLVx0aGRyLVx1MDAzZXJzdmQgPSAwO1xuLVx0aGRyLVx1MDAzZWxlbiA9IHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpO1xuLVxuLVx0dXJiID0gbWN0cF91c2ItXHUwMDNldHhfdXJiO1xuJiM0MztcdHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCF1cmIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXHUwMDNldXNiZGV2LFxuIFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfb3V0KSxcbi1cdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLFxuLVx0XHRcdCAgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCBza2IpO1xuJiM0MztcdFx0XHQgIGRhdGEsIGxlbiwgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCB0eF9jdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNlc3BhbilcbiYjNDM7XHRcdHVyYi1cdTAwM2V0cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7XG4mIzQzO1xuJiM0MztcdHVzYl9hbmNob3JfdXJiKHVyYiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbiBcbi1cdC8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi9cbi1cdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTtcbiBcdGlmIChyYykge1xuLVx0XHRuZXRpZl93YWtlX3F1ZXVlKGRldik7XG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCYjMzQ7VFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXFxuXCYjMzQ7LCByYyk7XG4mIzQzO1x0XHR1c2JfdW5hbmNob3JfdXJiKHVyYik7XG4mIzQzO1x0XHR1c2JfZnJlZV91cmIodXJiKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtICYjNDM7PSBsZW47XG4mIzQzO1x0XHRpZiAobWN0cF91c2ItXHUwMDNldHhfcW1lbSBcdTAwM2U9IFRYX1FNRU1fTUFYKVxuJiM0MztcdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKG1jdHBfdXNiLVx1MDAzZW5ldGRldik7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHR4X29wcyA9IHtcbiYjNDM7XHQuc2VuZCA9IG1jdHBfdXNiX3R4X3NlbmQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0Ym9vbCBtb3JlID0gbmV0ZGV2X3htaXRfbW9yZSgpO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIHNrYiwgbW9yZSk7XG4gXG4tZXJyX2Ryb3A6XG4tXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcbi1cdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG5AQCAtMTI1LDI0ICYjNDM7MTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xuIHN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dm9pZCAqYnVmO1xuIFx0aW50IHJjO1xuIFxuLVx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApO1xuLVx0aWYgKCFza2IpIHtcbi1cdFx0cmMgPSAtRU5PTUVNO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgZ2ZwKTtcbiYjNDM7XHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX3JldHJ5O1xuLVx0fVxuIFxuIFx0dXNiX2ZpbGxfYnVsa191cmIobWN0cF91c2ItXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cdTAwM2V1c2JkZXYsXG4gXHRcdFx0ICB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cdTAwM2VlcF9pbiksXG4tXHRcdFx0ICBza2ItXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxuLVx0XHRcdCAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7XG4mIzQzO1x0XHRcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XG4gXG4gXHRyYyA9IHVzYl9zdWJtaXRfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYiwgZ2ZwKTtcbiBcdGlmIChyYykge1xuIFx0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCYjMzQ7cnggdXJiIHN1Ym1pdCBmYWlsdXJlOiAlZFxcblwmIzM0OywgcmMpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKVxuIFx0XHRcdGdvdG8gZXJyX3JldHJ5O1xuIFx0fVxuQEAgLTE1NywxNCAmIzQzOzE3NiwzNCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByeF9lcnJfbWF4ID0gMTA7XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm5zIC0xIGlmIHdlIGhhdmUgaGl0IGV4Y2Vzc2l2ZSBlcnJvcnMsIHplcm8gb3RoZXJ3aXNlLiAqL1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNiX2luX3VyYl9lcnIoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgaW50IHN0YXR1cyxcbiYjNDM7XHRcdFx0ICAgICAgIGJvb2wgc3RhbGxlZClcbiYjNDM7e1xuJiM0MztcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4mIzQzO1xuJiM0MztcdGlmICghbWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50JiM0MzsmIzQzOylcbiYjNDM7XHRcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnID0gc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRpZiAobWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50IFx1MDAzZT0gcnhfZXJyX21heCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihtY3RwX3VzYi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O2V4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSVzIElOIEVQLCBmaXJzdDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHN0YWxsZWQgPyBcJiMzNDsgKHN0YWxsZWQpXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuJiM0MztcdFx0XHQgICBtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfb3JpZyk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBtY3RwX3VzYl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi1cdTAwM2VkZXY7XG4tXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XG4tXHR1bnNpZ25lZCBpbnQgbGVuO1xuLVx0aW50IHN0YXR1cztcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGludCByYywgc3RhdHVzO1xuIFxuIFx0c3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbiBcbkBAIC0xNzIsODAgJiM0MzsyMTEsNDMgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIFx0Y2FzZSAtRU5PRU5UOlxuIFx0Y2FzZSAtRUNPTk5SRVNFVDpcbiBcdGNhc2UgLUVTSFVURE9XTjpcbi1cdGNhc2UgLUVQUk9UTzpcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybjtcbi1cdGNhc2UgMDpcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHQvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbiYjMzk7dCByZXN1Ym1pdCAqL1xuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiBcdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0bGVuID0gdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGg7XG4tXHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xuLVxuLVx0d2hpbGUgKHNrYikge1xuLVx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IE5VTEw7XG4tXHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcbi1cdFx0dTggcGt0X2xlbjsgLyogbGVuZ3RoIG9mIE1DVFAgcGFja2V0LCBubyBVU0IgaGVhZGVyICovXG4tXG4tXHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRcdGhkciA9IHNrYl9wdWxsX2RhdGEoc2tiLCBzaXplb2YoKmhkcikpO1xuLVx0XHRpZiAoIWhkcilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0aWYgKGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDtyeDogaW52YWxpZCBpZCAlMDR4XFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgYmUxNl90b19jcHUoaGRyLVx1MDAzZWlkKSk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKGhkci1cdTAwM2VsZW4gXHUwMDNjXG4tXHRcdCAgICBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpIHtcbi1cdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7cng6IHNob3J0IHBhY2tldCAoaGRyKSAlZFxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgIGhkci1cdTAwM2VsZW4pO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdC8qIHdlIGtub3cgd2UgaGF2ZSBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikgaGVyZSAqL1xuLVx0XHRwa3RfbGVuID0gaGRyLVx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcbi1cdFx0aWYgKHBrdF9sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbi1cdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbi1cdFx0XHRcdCAgIFwmIzM0O3J4OiBzaG9ydCBwYWNrZXQgKHhmZXIpICVkLCBhY3R1YWwgJWRcXG5cJiMzNDssXG4tXHRcdFx0XHQgICBoZHItXHUwMDNlbGVuLCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRpZiAocGt0X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbikge1xuLVx0XHRcdC8qIG1vcmUgcGFja2V0cyBtYXkgZm9sbG93IC0gY2xvbmUgdG8gYSBuZXdcbi1cdFx0XHQgKiBza2IgdG8gdXNlIG9uIHRoZSBuZXh0IGl0ZXJhdGlvblxuLVx0XHRcdCAqL1xuLVx0XHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbi1cdFx0XHRpZiAoc2tiMikge1xuLVx0XHRcdFx0aWYgKCFza2JfcHVsbChza2IyLCBwa3RfbGVuKSkge1xuLVx0XHRcdFx0XHRrZnJlZV9za2Ioc2tiMik7XG4tXHRcdFx0XHRcdHNrYjIgPSBOVUxMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0XHRza2JfdHJpbShza2IsIHBrdF9sZW4pO1xuLVx0XHR9XG4gXG4tXHRcdGRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0Y2FzZSAtRVBJUEU6XG4mIzQzO1x0XHQvKiBlbmRwb2ludCBzdGFsbDogY2xlYXIgaGFsdCwgd2hpY2ggd2lsbCBjYXVzZSBhIHJlc3VibWl0ICovXG4mIzQzO1x0XHRyYyA9IG1jdHBfdXNiX2luX3VyYl9lcnIobWN0cF91c2IsIHN0YXR1cywgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRtY3RwX3VzYi1cdTAwM2VjbGVhcl9oYWx0ID0gdHJ1ZTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGlmICghbWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZClcbiYjNDM7XHRcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X3JldHJ5X3dvcmssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBSWF9SRVRSWV9ERUxBWSk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcbi1cdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XG4tXHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuLVx0XHRjYiA9IF9fbWN0cF9jYihza2IpO1xuLVx0XHRjYi1cdTAwM2VoYWxlbiA9IDA7XG4tXHRcdG5ldGlmX3J4KHNrYik7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDt1bmV4cGVjdGVkIHJ4IHVyYiBzdGF0dXM6ICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSAtRVRJTUU6XG4mIzQzO1x0Y2FzZSAtRVBST1RPOlxuJiM0MztcdGNhc2UgLUVJTFNFUTpcbiYjNDM7XHRjYXNlIC1FT1ZFUkZMT1c6XG4mIzQzO1x0XHQvKiBwb3NzaWJseSB0cmFuc2llbnQ7IHJlY29yZCBmaXJzdCBmYWlsdXJlLCByZXN1Ym1pdCAqL1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0YnJlYWs7XG4gXG4tXHRcdHNrYiA9IHNrYjI7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0bWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCBcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCwgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuJiM0MztcdFx0bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKHNrYilcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXG4gXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7XG4gfVxuIFxuQEAgLTI1Myw2ICYjNDM7MjU1LDMwIEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1jdHBfdXNiLFxuIFx0XHRcdFx0XHRcdCByeF9yZXRyeV93b3JrLndvcmspO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHQvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovXG4mIzQzO1x0aWYgKG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQpIHtcbiYjNDM7XHRcdGludCBwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfaW4pO1xuJiM0MztcbiYjNDM7XHRcdHJjID0gdXNiX2NsZWFyX2hhbHQobWN0cF91c2ItXHUwMDNldXNiZGV2LCBwaXBlKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG1jdHBfdXNiLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtjYW4mIzM5O3QgY2xlYXIgSU4gRVAgaGFsdDogJWRcXG5cJiMzNDssIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICgmIzQzOyYjNDM7bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50IFx1MDAzZT0gcnhfZXJyX21heClcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGlmICghbWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZClcbiYjNDM7XHRcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfcmV0cnlfd29yayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgUlhfUkVUUllfREVMQVkpO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfS0VSTkVMKTtcbiB9XG5AQCAtMjYyLDYgJiM0MzsyODgsOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuIFx0V1JJVEVfT05DRShtY3RwX3VzYi1cdTAwM2VyeF9zdG9wcGVkLCBmYWxzZSk7XG4mIzQzO1x0bWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xuJiM0MztcdG1jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCA9IDA7XG4gXG4gXHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xuIFxuQEAgLTI4NCw3ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X3JldHJ5X3dvcmspO1xuIFxuIFx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYik7XG4tXHR1c2Jfa2lsbF91cmIobWN0cF91c2ItXHUwMDNldHhfdXJiKTtcbiYjNDM7XG4mIzQzO1x0dXNiX2tpbGxfYW5jaG9yZWRfdXJicyhcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9hbmNob3IpO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIGRldiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSk7XG4mIzQzO1x0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMDEsNyAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0ZGV2LVx1MDAzZW10dSA9IE1DVFBfVVNCX01UVV9NSU47XG4gXHRkZXYtXHUwMDNlbWluX210dSA9IE1DVFBfVVNCX01UVV9NSU47XG4tXHRkZXYtXHUwMDNlbWF4X210dSA9IE1DVFBfVVNCX01UVV9NQVg7XG4mIzQzO1x0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzBfTVRVX01BWDtcbiBcbiBcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XG4gXHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG5AQCAtMzE3LDYgJiM0MzszNDksNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgbWN0cF91c2IgKmRldjtcbiYjNDM7XHRib29sIHNwYW47XG4gXHRpbnQgcmM7XG4gXG4gXHQvKiBvbmx5IG9uZSBhbHRlcm5hdGUgKi9cbkBAIC0zMjgsNiAmIzQzOzM2MSw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbiYjNDM7XHRzcGFuID0gaWZhY2VfZGVzYy1cdTAwM2VkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOO1xuJiM0MztcbiBcdG5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFwmIzM0O21jdHB1c2IlZFwmIzM0OywgTkVUX05BTUVfRU5VTSxcbiBcdFx0XHQgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApO1xuIFx0aWYgKCFuZXRkZXYpXG5AQCAtMzM1LDMzICYjNDM7MzcwLDQ2IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXG4gXHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIFx1MDAyNmludGYtXHUwMDNlZGV2KTtcbiBcdGRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0ZGV2LVx1MDAzZXNwYW4gPSBzcGFuO1xuIFx0ZGV2LVx1MDAzZW5ldGRldiA9IG5ldGRldjtcbiBcdGRldi1cdTAwM2V1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIFx0ZGV2LVx1MDAzZWludGYgPSBpbnRmO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlc3BhbilcbiYjNDM7XHRcdG5ldGRldi1cdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfMV8xX01UVV9NQVg7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4X3FtZW1fbG9jayk7XG4gXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7XG4gXG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeCwgbGUxNl90b19jcHUoZXBfaW4tXHUwMDNld01heFBhY2tldFNpemUpLFxuJiM0MztcdFx0XHRcdCBkZXYtXHUwMDNlc3Bhbik7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9uZXRkZXY7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfaW5pdChcdTAwMjZkZXYtXHUwMDNldHgsIFx1MDAyNnR4X29wcywgZGV2LCBkZXYtXHUwMDNlc3Bhbik7XG4mIzQzO1x0aW5pdF91c2JfYW5jaG9yKFx1MDAyNmRldi1cdTAwM2V0eF9hbmNob3IpO1xuJiM0MztcbiBcdGRldi1cdTAwM2VlcF9pbiA9IGVwX2luLVx1MDAzZWJFbmRwb2ludEFkZHJlc3M7XG4gXHRkZXYtXHUwMDNlZXBfb3V0ID0gZXBfb3V0LVx1MDAzZWJFbmRwb2ludEFkZHJlc3M7XG4gXG4tXHRkZXYtXHUwMDNldHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcbiBcdGRldi1cdTAwM2VyeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFkZXYtXHUwMDNldHhfdXJiIHx8ICFkZXYtXHUwMDNlcnhfdXJiKSB7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlcnhfdXJiKSB7XG4gXHRcdHJjID0gLUVOT01FTTtcbi1cdFx0Z290byBlcnJfZnJlZV91cmJzO1xuJiM0MztcdFx0Z290byBlcnJfZmluaV9yeHR4O1xuIFx0fVxuIFxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2ZGV2LVx1MDAzZXJ4X3JldHJ5X3dvcmssIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmspO1xuIFxuIFx0cmMgPSBtY3RwX3JlZ2lzdGVyX25ldGRldihuZXRkZXYsIE5VTEwsIE1DVFBfUEhZU19CSU5ESU5HX1VTQik7XG4gXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfdXJicztcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfdXJiO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZXJyX2ZyZWVfdXJiczpcbi1cdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNldHhfdXJiKTtcbiYjNDM7ZXJyX2ZyZWVfdXJiOlxuIFx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuJiM0MztlcnJfZmluaV9yeHR4OlxuJiM0MztcdG1jdHBfdXNibGliX3R4X2ZpbmkoXHUwMDI2ZGV2LVx1MDAzZXR4KTtcbiYjNDM7XHRtY3RwX3VzYmxpYl9yeF9maW5pKFx1MDAyNmRldi1cdTAwM2VyeCk7XG4mIzQzO2Vycl9mcmVlX25ldGRldjpcbiBcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG4gXHRyZXR1cm4gcmM7XG4gfVxuQEAgLTM3MSwxMyAmIzQzOzQxOSwxNSBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0c3RydWN0IG1jdHBfdXNiICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuIFxuIFx0bWN0cF91bnJlZ2lzdGVyX25ldGRldihkZXYtXHUwMDNlbmV0ZGV2KTtcbi1cdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNldHhfdXJiKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl9yeF9maW5pKFx1MDAyNmRldi1cdTAwM2VyeCk7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfZmluaShcdTAwMjZkZXYtXHUwMDNldHgpO1xuIFx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuIFx0ZnJlZV9uZXRkZXYoZGV2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtY3RwX3VzYl9kZXZpY2VzW10gPSB7XG4tXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgMHgwLCAweDEpIH0sXG4mIzQzO1x0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UsIDB4MSkgfSxcbiYjNDM7XHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTiwgMHgxKSB9LFxuIFx0eyAwIH0sXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlkZjQwMWE5MTRmZjUzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xuQEAgLTAsMCAmIzQzOzEsNDEyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIG1jdHAtdXNibGliLXRlc3QuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5LFxuJiM0MzsgKiB1bml0IHRlc3QgZGVmaW5pdGlvbnMuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrdW5pdC90ZXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9tY3RwLXVzYi5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcdHN0cnVjdCBtY3RwX2RldiAqbWRldjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3BrdHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHgge1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuJiM0MztcdHN0cnVjdCBtY3RwX3JvdXRlIHJ0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNibGliX2Rldl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0Lyogd2UgZG9uJiMzOTt0IHRyYWNrIGFueSBUWGVkIHBhY2tldHMgYXQgcHJlc2VudCAqL1xuJiM0MztcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdHJldHVybiBORVRERVZfVFhfT0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF90ZXN0X25ldGRldl9vcHMgPSB7XG4mIzQzO1x0Lm5kb19zdGFydF94bWl0ID0gbWN0cF91c2JsaWJfZGV2X3R4LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHUxNiBlcF9tYXhwYWNrZXQgPSA1MTI7XG4mIzQzO3N0YXRpYyBjb25zdCBtY3RwX2VpZF90IGxvY2FsX2VpZCA9IDg7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRuZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTUNUUDtcbiYjNDM7XHRuZGV2LVx1MDAzZW10dSA9IDgxOTI7XG4mIzQzO1x0bmRldi1cdTAwM2VmbGFncyA9IElGRl9OT0FSUDtcbiYjNDM7XHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZtY3RwX3Rlc3RfbmV0ZGV2X29wcztcbiYjNDM7XHRuZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiYjNDM7XHRuZGV2LVx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbih2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXYgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlbWRldilcbiYjNDM7XHRcdG1jdHBfZGV2X3B1dChkZXYtXHUwMDNlbWRldik7XG4mIzQzO1x0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2LVx1MDAzZW5kZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpcbiYjNDM7bWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bmRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFwmIzM0O21jdHB0ZXN0JWRcJiMzNDssIE5FVF9OQU1FX0VOVU0sXG4mIzQzO1x0XHRcdCAgICBtY3RwX3VzYmxpYl9kZXZfc2V0dXApO1xuJiM0MztcdGlmICghbmRldilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRkZXYtXHUwMDNlbmRldiA9IG5kZXY7XG4mIzQzO1x0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1xuJiM0MztcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0ZnJlZV9uZXRkZXYobmRldik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24sIGRldik7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRkZXYtXHUwMDNlbWRldiA9IF9fbWN0cF9kZXZfZ2V0KG5kZXYpO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlbWRldilcbiYjNDM7XHRcdGRldi1cdTAwM2VtZGV2LVx1MDAzZW5ldCA9IG1jdHBfZGVmYXVsdF9uZXQoZGV2X25ldChuZGV2KSk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW1kZXYpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0cmMgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGV2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3Rlc3RfZHN0X291dHB1dChzdHJ1Y3QgbWN0cF9kc3QgKmRzdCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYoc2tiLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzLCBza2IpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHggPSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZGV2aWNlIHdpbGwgaGF2ZSBiZWVuIGRlc3Ryb3llZCwgc28gLVx1MDAzZXJ0IHdpbGwgYmUgdW5saW5rZWQuXG4mIzQzO1x0ICogSnVzdCBlbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgaXMgYXMgZXhwZWN0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0S1VOSVRfRVhQRUNUX1RSVUUoY3VycmVudC1cdTAwM2VrdW5pdF90ZXN0LFxuJiM0MztcdFx0XHQgIHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZjdHgtXHUwMDNlcnQucmVmcykpO1xuJiM0MztcbiYjNDM7XHRrZnJlZShjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICptY3RwX3VzYmxpYl90ZXN0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfcm91dGUgKnJ0O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0ga3phbGxvY19vYmooKmN0eCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eCk7XG4mIzQzO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VydC5saXN0KTtcbiYjNDM7XHRydCA9IFx1MDAyNmN0eC1cdTAwM2VydDtcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2cnQtXHUwMDNlcmVmcywgMSk7XG4mIzQzO1xuJiM0MztcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBtY3RwX3VzYmxpYl90ZXN0X2ZpbmlfYWN0aW9uLCBjdHgpO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VkZXYgPSBtY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYodGVzdCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eC1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRydC1cdTAwM2VtaW4gPSBsb2NhbF9laWQ7XG4mIzQzO1x0cnQtXHUwMDNlbWF4ID0gbG9jYWxfZWlkO1xuJiM0MztcdHJ0LVx1MDAzZWRzdF90eXBlID0gTUNUUF9ST1VURV9ESVJFQ1Q7XG4mIzQzO1x0cnQtXHUwMDNldHlwZSA9IFJUTl9MT0NBTDtcbiYjNDM7XHRydC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW1kZXY7XG4mIzQzO1x0cnQtXHUwMDNlb3V0cHV0ID0gbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0O1xuJiM0MztcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRsaXN0X2FkZF9yY3UoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QsIFx1MDAyNmluaXRfbmV0Lm1jdHAucm91dGVzKTtcbiYjNDM7XHRyZWZjb3VudF9pbmMoXHUwMDI2cnQtXHUwMDNlcmVmcyk7XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGN0eDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSW5pdCBhIE1DVFAtb3Zlci1VU0IgcGFja2V0IHdpdGhpbiBhIGJ1ZmZlci4gQGxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZVxuJiM0MzsgKiBidWZmZXIgdG8gd3JpdGUsIEBwYXlsb2FkX2xlbiBpcyB0aGUgcmVwb3J0ZWQgc2l6ZSBvZiB0aGUgTUNUUC1vdmVyLVVTQlxuJiM0MzsgKiBwYWNrZXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHZvaWQgKmRhdGEsIHNpemVfdCBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgc2l6ZV90IHBheWxvYWRfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHN0cnVjdCBtY3RwX3VzYl9oZHIgdXNiO1xuJiM0MztcdFx0c3RydWN0IG1jdHBfaGRyIG1jdHA7XG4mIzQzO1x0fSBoZHI7XG4mIzQzO1xuJiM0MztcdGhkci51c2IuaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTtcbiYjNDM7XHRoZHIudXNiLmxlbiA9IGNwdV90b19iZTE2KHBheWxvYWRfbGVuKTtcbiYjNDM7XHRoZHIubWN0cC52ZXIgPSAxO1xuJiM0MztcdGhkci5tY3RwLmRlc3QgPSBsb2NhbF9laWQ7XG4mIzQzO1x0aGRyLm1jdHAuc3JjID0gMDtcbiYjNDM7XHRoZHIubWN0cC5mbGFnc19zZXFfdGFnID0gMDtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGRhdGEsIFx1MDAyNmhkciwgbWluKGxlbiwgc2l6ZW9mKGhkcikpKTtcbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBzaXplb2YoaGRyKSlcbiYjNDM7XHRcdG1lbXNldChkYXRhICYjNDM7IHNpemVvZihoZHIpLCAwLCBsZW4gLSBzaXplb2YoaGRyKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFjdGlvbl9yeF9maW5pKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4ID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfcnhfZmluaShyeCk7XG4mIzQzO1x0a2ZyZWUocngpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3J4ICpcbiYjNDM7bWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJ4ID0ga3phbGxvY19vYmooKnJ4KTtcbiYjNDM7XHRpZiAocngpIHtcbiYjNDM7XHRcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpO1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHJ4KTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KHJ4LCBlcF9tYXhwYWNrZXQsIHNwYW4pO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByeDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogV3JhcHBlcnMgZm9yIHVzYmxpYiYjMzk7cyByeF9jb21wbGV0ZSBjYWxsYmFjaywgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkXG4mIzQzOyAqIGZyb20gYXRvbWljIGNvbnRleHRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRsb2NhbF9iaF9lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTaW5nbGUgcGFja2V0LCBzdGFydGluZyBvbiBhIHRyYW5zZmVyIGJvdW5kYXJ5LCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluXG4mIzQzOyAqIHRoZSB0cmFuc2ZlclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LVx1MDAzZW5kZXYsIHJ4LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0Lyogd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgbWF4cGFja2V0IG9mIHRyYW5zZmVyIGF2YWlsYWJsZSAqL1xuJiM0MztcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XG4mIzQzO1xuJiM0MztcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QoYnVmLCA4LCA4KTtcbiYjNDM7XG4mIzQzO1x0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgOCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX05PVF9OVUxMKHRlc3QsIHNrYik7XG4mIzQzO1x0aWYgKHNrYilcbiYjNDM7XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCA0KTtcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4ge1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0c2l6ZV90IG5fcGt0cztcbiYjNDM7XHRzaXplX3QgcGt0c1s2XTtcbiYjNDM7XHRzaXplX3Qgbl94ZmVycztcbiYjNDM7XHRzaXplX3QgeGZlcnNbNl07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzttY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MoY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnQsXG4mIzQzO1x0XHRcdFx0ICBjaGFyICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3Ryc2NweShkZXNjLCB0LVx1MDAzZW5hbWUsIEtVTklUX1BBUkFNX0RFU0NfU0laRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUoc3RydWN0IGt1bml0ICp0ZXN0LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpzcGFuLFxuJiM0MztcdFx0XHRcdCAgIHNpemVfdCAqbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IHBrdF9sZW4gPSAwLCB4ZmVyX2xlbiA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl9wa3RzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLVx1MDAzZXBrdHNbaV0sIDgsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3BrdFsldV0gbGVuIHRvbyBzbWFsbCAoJXp1KSBmb3IgJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIGksIHNwYW4tXHUwMDNlcGt0c1tpXSwgc3Bhbi1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdHBrdF9sZW4gJiM0Mzs9IHNwYW4tXHUwMDNlcGt0c1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNwYW4tXHUwMDNlbl94ZmVyczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR4ZmVyX2xlbiAmIzQzOz0gc3Bhbi1cdTAwM2V4ZmVyc1tpXTtcbiYjNDM7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRX01TRyh0ZXN0LCBwa3RfbGVuLCB4ZmVyX2xlbixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2ludmFsaWQgcGt0X2xlbiAoJXp1KSAhPSB4ZmVyX2xlbiAoJXp1KSBmb3IgJXNcJiMzNDssXG4mIzQzO1x0XHRcdCAgICBwa3RfbGVuLCB4ZmVyX2xlbiwgc3Bhbi1cdTAwM2VuYW1lKTtcbiYjNDM7XG4mIzQzO1x0KmxlbiA9IHBrdF9sZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnBrdF9zcGFuID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbiYjNDM7XHRzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdHU4ICpwa3RidWY7XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl92YWxpZGF0ZSh0ZXN0LCBwa3Rfc3BhbiwgXHUwMDI2bGVuKTtcbiYjNDM7XHRwa3RidWYgPSBrdW5pdF9rbWFsbG9jX2FycmF5KHRlc3QsIDEsIGxlbiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHBrdGJ1Zik7XG4mIzQzO1xuJiM0MztcdC8qIGxheSBvdXQgcGFja2V0cyAqL1xuJiM0MztcdGZvciAob2ZmID0gMCwgaSA9IDA7IGkgXHUwMDNjIHBrdF9zcGFuLVx1MDAzZW5fcGt0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGxlbiA9IHBrdF9zcGFuLVx1MDAzZXBrdHNbaV07XG4mIzQzO1x0XHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbiwgbGVuKTtcbiYjNDM7XHRcdG9mZiAmIzQzOz0gbGVuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xuJiM0MztcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xuJiM0MztcbiYjNDM7XHQvKiBmZWVkIHRyYW5zZmVycyAqL1xuJiM0MztcdGZvciAob2ZmID0gMCwgeGZlcl9vZmYgPSAwLCBpID0gMDsgaSBcdTAwM2MgcGt0X3NwYW4tXHUwMDNlbl94ZmVyczspIHtcbiYjNDM7XHRcdHhmZXJfbGVuID0gcGt0X3NwYW4tXHUwMDNleGZlcnNbaV0gLSB4ZmVyX29mZjtcbiYjNDM7XHRcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpO1xuJiM0MztcbiYjNDM7XHRcdGxlbiA9IG1pbihsZW4sIHhmZXJfbGVuKTtcbiYjNDM7XHRcdG1lbWNweShidWYsIHBrdGJ1ZiAmIzQzOyBvZmYsIGxlbik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiA9PSB4ZmVyX2xlbikge1xuJiM0MztcdFx0XHQvKiB3aG9sZS9lbmQgeGZlciwgcHJvY2VlZCB0byBuZXh0ICovXG4mIzQzO1x0XHRcdHhmZXJfb2ZmID0gMDtcbiYjNDM7XHRcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBwYXJ0aWFsICovXG4mIzQzO1x0XHRcdHhmZXJfb2ZmICYjNDM7PSBsZW47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKGRldi1cdTAwM2VuZGV2LCByeCwgbGVuKTtcbiYjNDM7XHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4mIzQzO1x0XHRvZmYgJiM0Mzs9IGxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi9cbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGV2LVx1MDAzZXJ4X3BrdHMucWxlbiwgcGt0X3NwYW4tXHUwMDNlbl9wa3RzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFza2IpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpIFx1MDAzYyBwa3Rfc3Bhbi1cdTAwM2VuX3BrdHMpXG4mIzQzO1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCBwa3Rfc3Bhbi1cdTAwM2Vwa3RzW2ldIC0gNCk7XG4mIzQzO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcbiYjNDM7XHQvKiBPbmUgcGFja2V0IGNvbXBsZXRlbHkgd2l0aGluIGEgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMXgtY29tcGxldGVcJiMzNDssIDEsIHsgOCB9LCAxLCB7IDggfSB9LFxuJiM0MztcdC8qIFR3byBzbWFsbCBwYWNrZXRzIGNvbWJpbmVkIHdpdGhpbiBvbmUgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzJwMXgtY29tYmluZWRcJiMzNDssIDIsIHsgOCwgOCB9LCAxLCB7IDE2IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMngtc3BsaXQtcGF5bG9hZFwmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxuJiM0MztcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIFVTQiB0cmFuc3BvcnQgaGVhZGVyICovXG4mIzQzO1x0eyBcJiMzNDsxcDJ4LXNwbGl0LXVzYmhkclwmIzM0OywgMSwgeyAxNiB9LCAyLCB7IDIsIDE0IH0gfSxcbiYjNDM7XHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIGhlYWRlciAqL1xuJiM0MztcdHsgXCYjMzQ7MXAyeC1zcGxpdC1tY3RwaGRyXCYjMzQ7LCAxLCB7IDE2IH0sIDIsIHsgNiwgMTAgfSB9LFxuJiM0MztcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xuJiM0MztcdHsgXCYjMzQ7MXAzeC1zcGxpdFwmIzM0OywgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxuJiM0MztcdC8qIE1heC1zaXplZCBzaW5nbGUgdHJhbnNmZXIgKi9cbiYjNDM7XHR7IFwmIzM0OzFwMXgtbGFyZ2VcJiMzNDssIDEsIHsgODE5MSB9LCAxLCB7IDgxOTEgfSB9LFxuJiM0MztcdC8qIFR3byBsYXJnZSBwYWNrZXRzLCBzcGxpdCBhdCB0aGUgd29yc3QtY2FzZSBmb3IgYWxsb2NhdGlvbiwgd2l0aCBhXG4mIzQzO1x0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxuJiM0MztcdCAqL1xuJiM0MztcdHsgXCYjMzQ7MnAyeC1sYXJnZS1zcGxpdFwmIzM0OywgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucyxcbiYjNDM7XHRcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XG4mIzQzO1x0S1VOSVRfQ0FTRShtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZSksXG4mIzQzO1x0S1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLFxuJiM0MztcdFx0XHQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3Bhbl9nZW5fcGFyYW1zKSxcbiYjNDM7XHR7fVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bWN0cC11c2JsaWJcJiMzNDssXG4mIzQzO1x0LnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7a3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzE5OTdmOTg5MDI2Zjlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xuQEAgLTAsMCAmIzQzOzEsNjI1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeVxuJiM0MzsgKlxuJiM0MzsgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcbiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvY2g5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L21jdHAuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFlcF9wa3RsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVwX3BrdGxlbiBcdTAwMjYgflVTQl9FTkRQT0lOVF9NQVhQX01BU0spXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KHJ4LCAwLCBzaXplb2YoKnJ4KSk7XG4mIzQzO1x0cngtXHUwMDNlc3BhbiA9IHNwYW47XG4mIzQzO1x0cngtXHUwMDNlZXBfcGt0bGVuID0gZXBfcGt0bGVuO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9pbml0KTtcbiYjNDM7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KVxuJiM0Mzt7XG4mIzQzO1x0a2ZyZWVfc2tiKHJ4LVx1MDAzZXNrYik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcbiYjNDM7ICogYmUgcG9wdWxhdGVkIG9uIHN1Y2Nlc3MuXG4mIzQzOyAqL1xuJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxuJiM0MztcdFx0XHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtXHUwMDNlc2tiO1xuJiM0MztcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlbGVuIFx1MDAzZT0gTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgpIHtcbiYjNDM7XHRcdC8qIHNvbWV0aGluZyBtdXN0IGhhdmUgZ29uZSB0ZXJyaWJseSB3cm9uZy4gY2xlYXIgYW5kIHJlc3RhcnQgKi9cbiYjNDM7XHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XG4mIzQzO1x0XHRza2IgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGVuID0gcngtXHUwMDNlc3BhbiA/IHJvdW5kdXAoTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LVx1MDAzZWVwX3BrdGxlbilcbiYjNDM7XHRcdDogTUNUUF9VU0JfMV8wX1hGRVJfU0laRTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFza2IpIHtcbiYjNDM7XHRcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGxlbiwgZ2ZwKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0fSBlbHNlIGlmIChza2ItXHUwMDNlY2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpIFx1MDAzYyByeC1cdTAwM2VlcF9wa3RsZW4pIHtcbiYjNDM7XHRcdC8qIFdlIGFsd2F5cyBuZWVkIHRvIHJlYWxsb2MgaWYgLVx1MDAzZWNsb25lZCwgYXMgd2UgY2Fubm90XG4mIzQzO1x0XHQgKiByZXN1Ym1pdCB0aGUgKG5vdy1zaGFyZWQpIHNrYiBidWZmZXIgZm9yIHBvc3NpYmxlIERNQS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBPdGhlcndpc2UgKGlmIHdlIGhhdmUgYW4gdW4tY2xvbmVkIFNLQik6IGp1c3QgZW5zdXJlIHdlXG4mIzQzO1x0XHQgKiBoYXZlIHN1ZmZpY2llbnQgc3BhY2UgdG8gcHJldmVudCBiYWJibGUuIFNpbmNlIHdlIGFsbG9jYXRlZFxuJiM0MztcdFx0ICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnlcbiYjNDM7XHRcdCAqIG9mIHRoYXQgc3BhY2UgZm9yIGEgcHJpb3IgTUNUUCBwYWNrZXQsIGJlY2F1c2UgIWNsb25lZCksIHdlXG4mIzQzO1x0XHQgKiBoYXZlIHN1ZmZpY2llbnQgZGF0YSB0byBmaW5pc2ggdGhlIGN1cnJlbnQgTUNUUCBwYWNrZXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpza2IyO1xuJiM0MztcbiYjNDM7XHRcdHNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBsZW4sIGdmcCk7XG4mIzQzO1x0XHRpZiAoIXNrYjIpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdHNrYiA9IHNrYjI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2Vza2IgPSBza2I7XG4mIzQzO1xuJiM0MztcdC8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbiYjMzk7dCByZXF1aXJlIGV4YWN0bHkgb25lXG4mIzQzO1x0ICogdHJhbnNmZXIgcGFja2V0LiBJZiB3ZSBoYXZlIGV4dHJhIHRhaWxyb29tLCBtYXkgYXMgd2VsbCB1c2UgaXQsXG4mIzQzO1x0ICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSBcdTAwM2U9IGVwX3BrdGxlbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocngtXHUwMDNlc3BhbilcbiYjNDM7XHRcdGxlbiA9IHJvdW5kZG93bihza2JfdGFpbHJvb20oc2tiKSwgcngtXHUwMDNlZXBfcGt0bGVuKTtcbiYjNDM7XG4mIzQzO1x0KmJ1ZnAgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7XG4mIzQzO1x0KmxlbnAgPSBsZW47XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X3ByZXBhcmUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gdGhpc19jcHVfcHRyKG5ldGRldi1cdTAwM2Vkc3RhdHMpO1xuJiM0MztcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiYjNDM7XHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7XG4mIzQzO1xuJiM0MztcdC8qIHdlJiMzOTtyZSBjYWxsZWQgZnJvbSBhbiBVUkIgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2Fubm90IGFzc3VtZSBsb2NhbFxuJiM0MztcdCAqIGlycXMgYXJlIGFsd2F5cyBkaXNhYmxlZFxuJiM0MztcdCAqL1xuJiM0MztcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNlcnhfcGFja2V0cyk7XG4mIzQzO1x0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xuJiM0MztcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiM0MztcdGNiID0gX19tY3RwX2NiKHNrYik7XG4mIzQzO1x0Y2ItXHUwMDNlaGFsZW4gPSAwO1xuJiM0MztcdG5ldGlmX3J4KHNrYik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXJ4X2Ryb3BzKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWNlaXZlIGEgVVNCIGNvbXBsZXRpb24gb2YgQGxlbiBieXRlcyBvZiBpbmNvbWluZyBkYXRhLiBXZSB3aWxsIHRoZW4gc3BsaXRcbiYjNDM7ICogdGhpcyBpbnRvIHBhY2tldHMgYW5kIG5ldGlmX3J4KCkgZWFjaC4gSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGluIGF0b21pY1xuJiM0MzsgKiBjb250ZXh0cyAtIGllLiwgVVJCIGNvbXBsZXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIEFzc3VtZXMgQG5ldGRldiB1c2VzIGRzdGF0cy5cbiYjNDM7ICovXG4mIzQzO2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4mIzQzO1x0aW50IHJjID0gMDtcbiYjNDM7XG4mIzQzO1x0X19za2JfcHV0KHNrYiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuJiM0MztcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XG4mIzQzO1x0XHQvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIGluY2x1ZGluZyBVU0IgaGVhZGVyICovXG4mIzQzO1x0XHR1MTYgcGt0X2xlbjtcbiYjNDM7XG4mIzQzO1x0XHQvKiBubyBoZWFkZXIgeWV0LCByZXN1Ym1pdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAqL1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqaGRyKSkge1xuJiM0MztcdFx0XHRpZiAoIXJ4LVx1MDAzZXNwYW4pIHtcbiYjNDM7XHRcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O3J4OiB0aW55IHhmZXIgKCVkKSBpbiBub24tc3BhbiBtb2RlXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRcdFx0cmMgPSAtRU5PTVNHO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGhkciA9IChzdHJ1Y3QgbWN0cF91c2JfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xuJiM0MztcdFx0XHQvKiBCeSByZXNldHRpbmcgaGVyZSwgd2lsbCBzdGFydCB0aGUgbmV4dCBJTiB0cmFuc2ZlclxuJiM0MztcdFx0XHQgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgc2tiLiBUaGlzIHdpbGwgbWVhblxuJiM0MztcdFx0XHQgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkXG4mIzQzO1x0XHRcdCAqIHdpdGggdGhlIHN0YXJ0IG9mIGEgdHJhbnNmZXIuXG4mIzQzO1x0XHRcdCAqXG4mIzQzO1x0XHRcdCAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UmIzM5O2xsIGRyb3BcbiYjNDM7XHRcdFx0ICogdGhlIGN1cnJlbnQgdHJhbnNmZXIgb25seVxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3J4OiBpbnZhbGlkIGlkICUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgYmUxNl90b19jcHUoaGRyLVx1MDAzZWlkKSk7XG4mIzQzO1x0XHRcdHJjID0gLUVQUk9UTztcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGt0X2xlbiA9IGJlMTZfdG9fY3B1KGhkci1cdTAwM2VsZW4pO1xuJiM0MztcdFx0LyogdjEuMSwgd2l0aCBzcGFuIGVuYWJsZWQsIGhhcyBhIDEzLWJpdCBsZW5ndGggKi9cbiYjNDM7XHRcdHBrdF9sZW4gXHUwMDI2PSByeC1cdTAwM2VzcGFuID9cbiYjNDM7XHRcdFx0TUNUUF9VU0JfMV8xX1BLVExFTl9NQVggOiBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWDtcbiYjNDM7XHRcdGlmIChwa3RfbGVuIFx1MDAzYyBzaXplb2YoKmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwmIzM0O3J4OiBpbnZhbGlkIGxlbiAlZFxcblwmIzM0OywgcGt0X2xlbik7XG4mIzQzO1x0XHRcdHJjID0gLUVQUk9UTztcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Lyogc3BhbiBjb250aW51ZXMgdG8gdGhlIG5leHQgdHJhbnNmZXIsIHJlc3VibWl0ICovXG4mIzQzO1x0XHRpZiAocGt0X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuJiM0MztcdFx0XHRpZiAoIXJ4LVx1MDAzZXNwYW4pIHtcbiYjNDM7XHRcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O3J4OiBzaG9ydCB4ZmVyICglZCB2cyAlZCkgaW4gbm9uLXNwYW4gbW9kZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHBrdF9sZW4sIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRcdHJjID0gLUVQUk9UTztcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXNldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi9cbiYjNDM7XHRcdGlmIChwa3RfbGVuID09IHNrYi1cdTAwM2VsZW4pIHtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpO1xuJiM0MztcdFx0XHRyeC1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBtb3JlIHBhY2tldHMgZm9sbG93IC0gUlggYSBjbG9uZSBzbyB0aGF0IHdlIGNhbiBjb250aW51ZVxuJiM0MztcdFx0ICogcHJvY2Vzc2luZyB0aGUgY3VycmVudCBTS0IsIHdoaWNoIG1heSBiZSB0aGUgc3RhcnQgb2YgYVxuJiM0MztcdFx0ICogc3Bhbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0aWYgKHNrYjIpIHtcbiYjNDM7XHRcdFx0c2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7XG4mIzQzO1x0XHRcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiMik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChuZXRkZXYpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc2V0OlxuJiM0MztcdGRldl9rZnJlZV9za2JfYW55KHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0cngtXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY29tcGxldGUpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2FuY2VsIGEgcnggY29udGV4dDsgc3Vic2VxdWVudCBwcmVwYXJlL2NvbXBsZXRlIGNhbGxzIHdpbGwgbm90IGJlIGFcbiYjNDM7ICogY29udGludWF0aW9uIG9mIGFueSBkYXRhIGFscmVhZHkgcmVjZWl2ZWQuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KVxuJiM0Mzt7XG4mIzQzO1x0ZGV2X2tmcmVlX3NrYl9hbnkocngtXHUwMDNlc2tiKTtcbiYjNDM7XHRyeC1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XG4mIzQzO1xuJiM0MzsvKiB0cmFuc21pdCBjb250ZXh0OiBlbmNhcHN1bGF0ZXMgb25lIHRyYW5zZmVyICovXG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgge1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHg7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JzO1xuJiM0MztcdHVuc2lnbmVkIGludCBidWZfbGVuLCBsZW47XG4mIzQzO1x0ZW51bSBtY3RwX3VzYmxpYl90eF9idWZfdHlwZSB7XG4mIzQzO1x0XHRUWF9TSU5HTEUsXG4mIzQzO1x0XHRUWF9GTEFULFxuJiM0MztcdH0gYnVmX3R5cGU7XG4mIzQzO1x0dTggYnVmW10gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4mIzQzO1x0XHRcdCBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsXG4mIzQzO1x0XHRcdCB2b2lkICpwcml2LCBib29sIHNwYW4pXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTtcbiYjNDM7XHR0eC1cdTAwM2VvcHMgPSAqb3BzO1xuJiM0MztcdHR4LVx1MDAzZXByaXYgPSBwcml2O1xuJiM0MztcdHR4LVx1MDAzZXNwYW4gPSBzcGFuO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnR4LVx1MDAzZWxvY2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hdmFpbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSA/IDAgOiBjdHgtXHUwMDNlYnVmX2xlbiAtIGN0eC1cdTAwM2VsZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdC8qIFVzZSB0aGUgYmFzZWxpbmUgbGVuZ3RoIChpZSwgQlRVKSBhcyBhbiBhcHByb3hpbWF0ZVxuJiM0MztcdCAqIFwmIzM0O3JlYXNvbmFibHktc2l6ZWRcJiMzNDsgcGFja2V0IHdlIGNvdWxkIGV4cGVjdC4gSWYgdGhlcmUgaXNcbiYjNDM7XHQgKiBpbnN1ZmZpY2llbnQgY2FwYWNpdHkgZm9yIHRoYXQsIHRoZW4gc2VuZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb25zdCBzaXplX3QgcGt0X2xlbiA9IE1DVFBfVVNCX0JUVSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpIFx1MDAzYyBwa3RfbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZSAtIGluZGljYXRpbmcgdGhhdCB0aGUgbmV3IHNrYlxuJiM0MzsgKiBjb3VsZCBub3QgYmUgYXBwZW5kZWQuIFNvLCBlcnJvcnMgcmVwb3J0ZWQgaGVyZSB0byB0aGUgVFggcGF0aCB3aWxsIHJlc3VsdFxuJiM0MzsgKiBpbiB0aGUgVFggYmVpbmcgdHJhbnNtaXR0ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2FwcGVuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSBcdTAwM2Mgc2tiLVx1MDAzZWxlbilcbiYjNDM7XHRcdHJldHVybiAtRU5PQlVGUztcbiYjNDM7XG4mIzQzO1x0X19za2JfcXVldWVfdGFpbChcdTAwMjZjdHgtXHUwMDNlc2ticywgc2tiKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWxlbiAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpidWY7XG4mIzQzO1xuJiM0MztcdC8qIElmIHdlIGhhdmUgYSBxbGVuIG9mIDEsIHdlIG9ubHkgZW5kZWQgdXAgcGFja2luZyBhIHNpbmdsZSBza2IsXG4mIzQzO1x0ICogZGVzcGl0ZSBhbGxvY2F0aW5nIGZvciBtdWx0aXBsZS4gU2tpcCB0aGUgY29weSBhbmQgc2VuZCBkaXJlY3RseVxuJiM0MztcdCAqIGZyb20gdGhlIHNrYiBkYXRhLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjdHgtXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFIHx8IGN0eC1cdTAwM2Vza2JzLnFsZW4gPT0gMSkge1xuJiM0MztcdFx0YnVmID0gY3R4LVx1MDAzZXNrYnMubmV4dC1cdTAwM2VkYXRhO1xuJiM0MztcbiYjNDM7XHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9GTEFUKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdFx0c2l6ZV90IHBvcyA9IDA7XG4mIzQzO1xuJiM0MztcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYikge1xuJiM0MztcdFx0XHRza2JfY29weV9iaXRzKHNrYiwgMCwgY3R4LVx1MDAzZWJ1ZiAmIzQzOyBwb3MsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdFx0XHRwb3MgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0YnVmID0gY3R4LVx1MDAzZWJ1ZjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY3R4LVx1MDAzZXR4LVx1MDAzZW9wcy5zZW5kKGN0eCwgYnVmLCBjdHgtXHUwMDNlbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcbiYjNDM7XHRpZiAoIWN0eClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmN0eC1cdTAwM2Vza2JzKSkgIT0gTlVMTClcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55X3JlYXNvbihza2IsIHJlYXNvbik7XG4mIzQzO1x0a2ZyZWUoY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCAqbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHR4X2N0eC1cdTAwM2V0eC1cdTAwM2Vwcml2O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2N0eF9wcml2KTtcbiYjNDM7XG4mIzQzOy8qIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgdHggXHUwMDI2IGNvbXBsZXRpb24gcGF0aCBpcyBxdWllc2NlZCAqL1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eClcbiYjNDM7e1xuJiM0MztcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LVx1MDAzZWN1cl9jdHgsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9maW5pKTtcbiYjNDM7XG4mIzQzOy8qIE1heCBzaXplIG9mIGEgc3Bhbm5lZCBUWC4gU2luY2Ugd2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBzcGFuIGJ1ZmZlciwgbGltaXRcbiYjNDM7ICogdGhlIHR4LXRpbWUgYWxsb2NhdGlvbnMgdG8gNGsuIExhcmdlciBwYWNrZXRzIHdpbGwgYmUgc2VudCBhcyBzaW5nbGVcbiYjNDM7ICogdHJhbnNmZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9TUEFOX01BWCA9IDQwOTYgLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqXG4mIzQzO21jdHBfdXNibGliX3R4X2N0eF9jcmVhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICBib29sIHNpbmdsZSlcbiYjNDM7e1xuJiM0MztcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUgdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHg7XG4mIzQzO1x0c2l6ZV90IHN6ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNpbmdsZSB8fCBza2ItXHUwMDNlbGVuIFx1MDAzZSBUWF9TUEFOX01BWCkge1xuJiM0MztcdFx0dHlwZSA9IFRYX1NJTkdMRTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHlwZSA9IFRYX0ZMQVQ7XG4mIzQzO1x0XHRzeiA9IHR4LVx1MDAzZXNwYW4gPyBUWF9TUEFOX01BWCA6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjdHggPSBremFsbG9jX2ZsZXgoKmN0eCwgYnVmLCBzeiwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXR4ID0gdHg7XG4mIzQzO1x0Y3R4LVx1MDAzZWJ1Zl90eXBlID0gdHlwZTtcbiYjNDM7XHRjdHgtXHUwMDNlYnVmX2xlbiA9IHN6O1xuJiM0MztcdGN0eC1cdTAwM2VsZW4gPSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpO1xuJiM0MztcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjdHg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0Ym9vbCBvaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRpZiAob2spIHtcbiYjNDM7XHRcdC8qIE9ubHkgaW5jbHVkZSB0aGUgbmV0d29yay1sYXllciBkYXRhIGluIHR4IHN0YXRzOyB3ZSBrbm93XG4mIzQzO1x0XHQgKiB0aGF0IHRoZXJlIGlzIGEgNC1ieXRlIGhlYWRlciBwdXNoZWQgdG8gYWxsIHNrYnMgaW5cbiYjNDM7XHRcdCAqIHR4X3NrYl9wcmVwYXJlKClcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dTY0IG4gPSBjdHgtXHUwMDNlc2ticy5xbGVuO1xuJiM0MztcdFx0czY0IGxlbiA9IGN0eC1cdTAwM2VsZW4gLSAobiAqIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7XG4mIzQzO1xuJiM0MztcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfcGFja2V0cywgbik7XG4mIzQzO1x0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNmRzdGF0cy1cdTAwM2V0eF9ieXRlcywgbGVuKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfZHJvcHMsIGN0eC1cdTAwM2Vza2JzLnFsZW4pO1xuJiM0MztcdH1cbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFx1MDAyNmRzdGF0cy1cdTAwM2VzeW5jcCwgZmxhZ3MpO1xuJiM0MztcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb21wbGV0aW9uIGZvciB0aGUgLVx1MDAzZXNlbmQoKSBvcC4gVGhpcyB3aWxsIHVwZGF0ZSBuZXRkZXYgc3RhdHMgYW5kXG4mIzQzOyAqIGZyZWUgdGhlIHR4IGNvbnRleHQuXG4mIzQzOyAqXG4mIzQzOyAqIExpa2VseSBjYWxsZWQgZnJvbSAoYXRvbWljKSBVUkIgY29tcGxldGlvbiBjb250ZXh0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPVxuJiM0MztcdFx0b2sgPyBTS0JfQ09OU1VNRUQgOiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbiYjNDM7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHR4X2N0eCwgZGV2LCBvayk7XG4mIzQzO1x0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUodHhfY3R4LCByZWFzb24pO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpO1xuJiM0MztcbiYjNDM7LyogUHJlcGFyZSBhIHNrYiBmb3IgcHVzaCgpXG4mIzQzOyAqXG4mIzQzOyAqIE9uIGVycm9yLCBwb3B1bGF0ZXMgQHJlYXNvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLFxuJiM0MztcdFx0XHRcdCAgICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uICpyZWFzb24pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBsZW4sIG1heF9sZW47XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0bWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xuJiM0MztcbiYjNDM7XHRwbGVuID0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRpZiAocGxlbiAmIzQzOyBzaXplb2YoKmhkcikgXHUwMDNlIG1heF9sZW4pIHtcbiYjNDM7XHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19CSUc7XG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKmhkcikpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbiYjNDM7XHRpZiAoIWhkcikge1xuJiM0MztcdFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGRyLVx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XG4mIzQzO1x0aGRyLVx1MDAzZWxlbiA9IGNwdV90b19iZTE2KHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFB1c2ggYSBuZXcgc2tiIHRvIHRoZSB0cmFuc2Zlci4gTWF5IHJlc3VsdCBpbiB6ZXJvIG9yIG1vcmUgY2FsbHMgdG9cbiYjNDM7ICogb3BzLVx1MDAzZXNlbmQoKS5cbiYjNDM7ICpcbiYjNDM7ICogVGFrZXMgb3duZXJzaGlwIG9mIEBza2IsIGluY2x1ZGluZyBvbiBlcnJvci5cbiYjNDM7ICovXG4mIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXG4mIzQzO1x0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCwgKnNlbmRfY3R4ID0gTlVMTDtcbiYjNDM7XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247XG4mIzQzO1x0Y29uc3QgaW50IG1heF90cmllcyA9IDM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgdHJ5ID0gMSwgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0gbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc2tiLCB0eC1cdTAwM2VzcGFuLCBcdTAwMjZyZWFzb24pO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbiYjNDM7XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xuJiM0MztcdFx0Lyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHhcbiYjNDM7XHRcdCAqIGlzIG5vdyBzZW5kYWJsZSAoaWUuOiAhbW9yZSkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNrYiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbiYjNDM7cmV0cnk6XG4mIzQzO1x0LyogVHJ5IGFuZCBxdWV1ZSB0byB0aGUgY3VycmVudCBjb250ZXh0LiBXZSBleGl0IHRoaXMgY3JpdGljYWwgc2VjdGlvblxuJiM0MztcdCAqIHdpdGggYSBmZXcgYml0cyBvZiBzdGF0ZTpcbiYjNDM7XHQgKiAgLSBzZW5kX2N0eDogaW5kaWNhdGluZyBhIHByaW9yIGNvbnRleHQgdGhhdCBuZWVkcyB0byBiZSBzZW50XG4mIzQzO1x0ICogIC0gc2tiOiBpbmRpY2F0aW5nIHRoYXQgYSBza2Igc3RpbGwgbmVlZHMgdG8gYmUgcXVldWVkL3NlbnRcbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0Y3R4ID0gdHgtXHUwMDNlY3VyX2N0eDtcbiYjNDM7XHRpZiAoY3R4KSB7XG4mIzQzO1x0XHRpZiAoc2tiKSB7XG4mIzQzO1x0XHRcdHJjID0gbWN0cF91c2JsaWJfdHhfYXBwZW5kKGN0eCwgc2tiKTtcbiYjNDM7XHRcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdFx0LyogY2FuJiMzOTt0IGFwcGVuZCB0byB0aGUgcGVuZGluZyB0eCAtIGRldGFjaCBmb3JcbiYjNDM7XHRcdFx0XHQgKiBzZW5kaW5nLCBhbmQgd2UmIzM5O2xsIGNyZWF0ZSBhIG5ldyB0eCBiZWxvdy5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHQvKiB3ZSBoYXZlIHF1ZXVlZCAqL1xuJiM0MztcdFx0XHRcdHNrYiA9IE5VTEw7XG4mIzQzO1x0XHRcdFx0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpXG4mIzQzO1x0XHRcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIGlmICghbW9yZSkge1xuJiM0MztcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmIChzZW5kX2N0eCkge1xuJiM0MztcdFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKHNlbmRfY3R4KTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc2VuZF9jdHgsIGRldiwgZmFsc2UpO1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzZW5kX2N0eCwgcmVhc29uKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNlbmRfY3R4ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHdlIGhhdmUgZWl0aGVyIHF1ZXVlZCwgb3IgdGhlIHByZXBhcmUgZmFpbGVkOyBub3RoaW5nIG1vcmUgdG8gZG8gKi9cbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHR4LCBza2IsICFtb3JlKTtcbiYjNDM7XHRpZiAoIWN0eCkge1xuJiM0MztcdFx0bmV0ZGV2X2RiZyhkZXYsIFwmIzM0O1RYIGNvbnRleHQgY3JlYXRlIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGlmIHdlJiMzOTtyZSByZWFkeSB0byBzZW5kIG5vdywgbm8gbmVlZCB0byBlbnF1ZXVlICovXG4mIzQzO1x0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpIHtcbiYjNDM7XHRcdHJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChjdHgpO1xuJiM0MztcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpO1xuJiM0MztcdFx0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoIXR4LVx1MDAzZWN1cl9jdHgpIHtcbiYjNDM7XHRcdHR4LVx1MDAzZWN1cl9jdHggPSBjdHg7XG4mIzQzO1x0XHRjdHggPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0Lyogd2UgbWF5IGhhdmUgbG9zdCB0aGUgcmFjZSB3aXRoIGEgY29uY3VycmVudCB0eDsgc2hvdWxkbiYjMzk7dCBoYXBwZW4sIGFzXG4mIzQzO1x0ICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW5cbiYjNDM7XHQgKiBmcm9tIHRoZSB0b3AsIGFzIHdlIG1heSBiZSBhYmxlIHRvIHF1ZXVlIHRoZSBza2IgdG8gdGhhdCBjb250ZXh0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjdHgpIHtcbiYjNDM7XHRcdC8qIHVubGluayB0aGUgbmV3IChzb2xlKSBza2IsIHdlIGRvbiYjMzk7dCB3YW50IGl0IGZyZWVkIHdpdGggY3R4ICovXG4mIzQzO1x0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y3R4LVx1MDAzZXNrYnMpO1xuJiM0MztcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xuJiM0MztcdFx0aWYgKCYjNDM7JiM0Mzt0cnkgXHUwMDNlIG1heF90cmllcykge1xuJiM0MztcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTtcbiYjNDM7XG4mIzQzOy8qIENhbmNlbCBhIHR4OiBhbnkgdW4tc2VudCBjb250ZXh0IGlzIHJlbGVhc2VkLiAqL1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHggPSBOVUxMO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIGN0eCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICghY3R4KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcbiYjNDM7XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY2FuY2VsKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SmVyZW15IEtlcnIgXHUwMDNjamtAY29kZWNvbnN0cnVjdC5jb20uYXVcdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnlcJiMzNDspO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUKVxuJiM0MzsjaW5jbHVkZSBcJiMzNDttY3RwLXVzYmxpYi10ZXN0LmNcJiMzNDtcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbmluZGV4IGEyZjZmMWUwNGVmYmQwLi40YmIwNGEzNzExMDUwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbkBAIC0yLDcgJiM0MzsyLDcgQEBcbiAvKlxuICAqIG1jdHAtdXNiLmggLSBNQ1RQIFVTQiB0cmFuc3BvcnQgYmluZGluZzogY29tbW9uIGRlZmluaXRpb25zLFxuICAqIGJhc2VkIG9uIERNVEYwMjgzIHNwZWNpZmljYXRpb246XG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXG4mIzQzOyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxuICAqXG4gICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0XG4gICogYW5kIGdhZGdldCBkcml2ZXJzLlxuQEAgLTEzLDE4ICYjNDM7MTMsOTYgQEBcbiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcbiAjZGVmaW5lIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4mIzQzOy8qXG4mIzQzOyAqIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0IGhlYWRlci4gRFNQMDI4MyB2MS4wIGhhcyBhbiA4LWJpdCBsZW5ndGggZmllbGRcbiYjNDM7ICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnlcbiYjNDM7ICogMyByZXNlcnZlZCBiaXRzKS4gV2UgdXNlIGEgYmUxNiBmb3Igb3VyIGxlbmd0aCB0byBoYW5kbGUgdGhlIGxhcmdlciB2MS4xXG4mIzQzOyAqIHJlcHJlc2VudGF0aW9uLCBhbmQgbWFzayBhcyBhcHByb3ByaWF0ZS5cbiYjNDM7ICovXG4gc3RydWN0IG1jdHBfdXNiX2hkciB7XG4gXHRfX2JlMTZcdGlkO1xuLVx0dThcdHJzdmQ7XG4tXHR1OFx0bGVuO1xuJiM0MztcdF9fYmUxNlx0bGVuO1xuIH0gX19wYWNrZWQ7XG4gXG4tI2RlZmluZSBNQ1RQX1VTQl9YRkVSX1NJWkVcdDUxMlxuJiM0MzsvKiBtYXggdHJhbnNmZXIgc2l6ZSBmb3IgRFNQMDI4MyB2MS4wICovXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX1hGRVJfU0laRVx0NTEyXG4gI2RlZmluZSBNQ1RQX1VTQl9CVFVcdFx0NjhcbiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU5cdE1DVFBfVVNCX0JUVVxuLSNkZWZpbmUgTUNUUF9VU0JfTVRVX01BWFx0KFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcbiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWFx0VThfTUFYXG4mIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX01UVV9NQVhcdChNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcbiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWFx0R0VOTUFTSygxMiwgMClcbiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzFfTVRVX01BWFx0KE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKVxuICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRFx0MHgxYWI0XG4gXG4mIzQzOy8qIG1jdHAtdXNibGliICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSWCBoYW5kbGU6IGRyaXZlcnMgd2lsbCB0eXBpY2FsbHkgY3JlYXRlIG9uZSBvbiBpbml0LCB3aGljaCBwZXJzaXN0cyBmb3JcbiYjNDM7ICogdGhlIGxpZmUgb2YgdGhlIGRyaXZlci4gVGhlIHNhbWUgaGFuZGxlIGlzIHVzZWQgZm9yIHByb2dyZXNzaXZlXG4mIzQzOyAqIHByZXBhcmUgLVx1MDAzZSBjb21wbGV0ZSBvcGVyYXRpb25zIChmb3IgZWFjaCBpbmNvbWluZyBVU0IgdHJhbnNmZXIpLCB3aGljaFxuJiM0MzsgKiByZXN1bHQgaW4gbmV0aWZfcngoKS1pbmcgdGhlIE1DVFAgcGFja2V0cyByZWNlaXZlZFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3J4IHtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHUxNiBlcF9wa3RsZW47XG4mIzQzO1x0Ym9vbCBzcGFuO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xuJiM0MztcbiYjNDM7aW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCxcbiYjNDM7XHRcdFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKTtcbiYjNDM7XG4mIzQzO2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbik7XG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRYIGhhbmRsZTogY3JlYXRlZCBieSBtY3RwX3VzYmxpYl90eF9wdXNoKCkgZHVyaW5nIHRoZSB0eCBwYXRoLCBhbmRcbiYjNDM7ICogbWF5IHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlIHBhY2tldCB0cmFuc21pdHMuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4O1xuJiM0MztcbiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XG4mIzQzO1x0LyogU3RhcnQgYSBVU0IgVFggZm9yIEBkYXRhLiBPbiByZXR1cm5pbmcgc3VjY2VzcywgdGhlIGltcGxlbWVudGF0aW9uXG4mIzQzO1x0ICogbXVzdCBhcnJhbmdlIGZvciBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKCkgdG8gYmUgY2FsbGVkIGF0IHNvbWVcbiYjNDM7XHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50ICgqc2VuZCkoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtY3RwX3VzYmxpYl90eCB7XG4mIzQzO1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4mIzQzO1x0dm9pZCAqcHJpdjtcbiYjNDM7XHRib29sIHNwYW47XG4mIzQzO1x0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4mIzQzO1x0LyogY29udGV4dCB0byB3aGljaCB3ZSBhcmUgYWRkaW5nIHBhY2tldHMsIGNsZWFyZWQgb24gc2VuZCAqL1xuJiM0MztcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XG4mIzQzO307XG4mIzQzO1xuJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbiYjNDM7XHRcdFx0IGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgKm9wcywgdm9pZCAqcHJpdixcbiYjNDM7XHRcdFx0IGJvb2wgc3Bhbik7XG4mIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcbiYjNDM7XG4mIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCk7XG4mIzQzO1xuJiM0MztpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuJiM0MztcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xuJiM0MztcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spO1xuJiM0MztcbiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbiYjNDM7XG4gI2VuZGlmIC8qICBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9pbml0JiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2ZpbmkmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jYW5jZWwmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfaW5pdCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9maW5pJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgKG1jdHAtdXNibGliKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNQ1RQIFVTQiBkcml2ZXIgdG8gdXNlIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGFuZCBoYW5kbGVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTNiOTZlYjk2NDUzYTIwNDRkZGEzNzEzZjU4YmY2YTk4ODAyOGIzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDA4OjUzOjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnCmluZGV4IGNmMzI1YWIwYjFlZjU1Li5jNDBhYzljNjY1Yjc1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZwpAQCAtNDcsOSAmIzQzOzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0MKIAkgIEEgTUNUUCBwcm90b2NvbCBuZXR3b3JrIGRldmljZSBpcyBjcmVhdGVkIGZvciBlYWNoIEkzQyBidXMKIAkgIGhhdmluZyBhICYjMzQ7bWN0cC1jb250cm9sbGVyJiMzNDsgZGV2aWNldHJlZSBwcm9wZXJ0eS4KIAomIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKJiM0MzsJdHJpc3RhdGUgJiMzNDtNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBVU0IKJiM0MzsJaGVscAomIzQzOwkgIENvbW1vbiBwcm90b2NvbCBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0CiYjNDM7CSAgaW1wbGVtZW50YXRpb25zLCBzdWl0YWJsZSBmb3IgdXNlIGluIGVpdGhlciBob3N0LSBvciBnYWRnZXQtc2lkZQomIzQzOwkgIHRyYW5zcG9ydCBkcml2ZXIKJiM0MzsKJiM0MzsJICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLgomIzQzOwomIzQzO2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVAomIzQzOyAgICAgICAgYm9vbCAmIzM0O01DVFAgdXNibGliIHRlc3RzJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUUwomIzQzOyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSAmYW1wOyZhbXA7IEtVTklUPXkKJiM0MzsgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTCiYjNDM7CiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCCiAJdHJpc3RhdGUgJiMzNDtNQ1RQIFVTQiB0cmFuc3BvcnQmIzM0OwogCWRlcGVuZHMgb24gVVNCCiYjNDM7CXNlbGVjdCBNQ1RQX1RSQU5TUE9SVF9VU0JMSUIKIAloZWxwCiAJICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgVVNCIHRyYW5zcG9ydCwKIAkgIGRlZmluZWQgYnkgRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyODMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQppbmRleCBjMzYwMDY4NDlhMWU3ZC4uYzg3MGI2MmQzZjFjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZQpAQCAtMiwzICYjNDM7Miw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgJiM0Mzs9IG1jdHAtc2VyaWFsLm8KIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JMkMpICYjNDM7PSBtY3RwLWkyYy5vCiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSAmIzQzOz0gbWN0cC1pM2Mubwogb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgJiM0Mzs9IG1jdHAtdXNiLm8KJiM0MztvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCKSAmIzQzOz0gbWN0cC11c2JsaWIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jCmluZGV4IGZhZGU2NWYyZjI2OTk1Li41NDJhNTcwYzc2Y2M5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYwpAQCAtMyw5ICYjNDM7Myw5IEBACiAgKiBtY3RwLXVzYi5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgYmluZGluZyBkcml2ZXIuCiAgKgogICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6Ci0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGYKJiM0MzsgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGYKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBDb2RlIENvbnN0cnVjdCBQdHkgTHRkCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKQEAgLTIyLDk1ICYjNDM7MjIsMTE1IEBACiBzdHJ1Y3QgbWN0cF91c2IgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiYjNDM7CWJvb2wgc3BhbjsKIAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKIAl1OCBlcF9pbjsKIAl1OCBlcF9vdXQ7CiAKLQlzdHJ1Y3QgdXJiICp0eF91cmI7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDsKIAlzdHJ1Y3QgdXJiICpyeF91cmI7CiYjNDM7CWludCBpbl9lcnJfY291bnQ7CiYjNDM7CWludCBpbl9lcnJfb3JpZzsKJiM0MzsJYm9vbCBjbGVhcl9oYWx0OwogCiAJLyogZW5mb3JjZXMgYXRvbWljIGFjY2VzcyB0byByeF9zdG9wcGVkIGFuZCByZXF1ZXVpbmcgdGhlIHJldHJ5IHdvcmsgKi8KIAlzcGlubG9ja190IHJ4X2xvY2s7CiAJYm9vbCByeF9zdG9wcGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcnhfcmV0cnlfd29yazsKJiM0MzsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4IHR4OwomIzQzOwlzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7CiYjNDM7CS8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi8KJiM0MzsJc3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7CiYjNDM7CWludCB0eF9xbWVtOwomIzQzO307CiYjNDM7CiYjNDM7ZW51bSB7CiYjNDM7CU1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLAomIzQzOwlNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMiwKIH07CiAKJiM0MzsvKiBXZSB1c2UgYSB0b3RhbC1zaXplIGxpbWl0IGZvciBvdXRzdGFuZGluZyBVUkJzLCBhcyB0aGUgdHJhbnNmZXIgY291bnRzCiYjNDM7ICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSwKJiM0MzsgKiB0aGlzIHdpbGwgYWxsb3cgZm9yIGEgY291cGxlIG9mIG1heC1zaXplZCB0cmFuc2ZlcnMgdG8gYmUgaW4gZmxpZ2h0LiBJbgomIzQzOyAqIG5vbi1zcGFubmluZyBtb2RlLCAzMi4KJiM0MzsgKgomIzQzOyAqIFdlIHdhbnQgdG8gYXZvaWQgZGlzYWJsaW5nIHRoZSB0eCBxdWV1ZSBpZiBwb3NzaWJsZTsgZG9pbmcgc28gd2lsbCBlbmQgdXAKJiM0MzsgKiByZXF1ZXVlaW5nIHRvIGdzb19za2IsIGFuZCB3ZSBvbmx5IGRlcXVldWUgZnJvbSB0aGF0IG9uZSBza2IgYXQgYSB0aW1lLAomIzQzOyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgVFhfUU1FTV9NQVggPSAxNjM4NDsKJiM0MzsKIHN0YXRpYyB2b2lkIG1jdHBfdXNiX291dF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0mZ3Q7Y29udGV4dDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLSZndDtkZXY7Ci0JaW50IHN0YXR1czsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4ID0gdXJiLSZndDtjb250ZXh0OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTsKJiM0MzsJdW5zaWduZWQgaW50IGxlbiA9IHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLSZndDtuZXRkZXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKJiM0MzsJbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSh0eF9jdHgsIG5ldGRldiwgdXJiLSZndDtzdGF0dXMgPT0gMCk7CiAKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVTSFVURE9XTjoKLQljYXNlIC1FUFJPVE86Ci0JCWRldl9kc3RhdHNfdHhfZHJvcHBlZChuZXRkZXYpOwotCQlicmVhazsKLQljYXNlIDA6Ci0JCWRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLSZndDtsZW4pOwotCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Ci0JCWNvbnN1bWVfc2tiKHNrYik7Ci0JCXJldHVybjsKLQlkZWZhdWx0OgotCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDt1bmV4cGVjdGVkIHR4IHVyYiBzdGF0dXM6ICVkXG4mIzM0Oywgc3RhdHVzKTsKLQkJZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7Ci0JfQomIzQzOwl1c2JfZnJlZV91cmIodXJiKTsKIAotCWtmcmVlX3NrYihza2IpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKJiM0MzsJbWN0cF91c2ItJmd0O3R4X3FtZW0gLT0gbGVuOwomIzQzOwlpZiAobWN0cF91c2ItJmd0O3R4X3FtZW0gJmx0OyBUWF9RTUVNX01BWCAmYW1wOyZhbXA7IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LAomIzQzOwkJCSAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjsKLQl1bnNpZ25lZCBpbnQgcGxlbjsKJiM0MzsJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHVyYiAqdXJiOwogCWludCByYzsKIAotCXBsZW4gPSBza2ItJmd0O2xlbjsKLQotCWlmIChwbGVuICYjNDM7IHNpemVvZigqaGRyKSAmZ3Q7IE1DVFBfVVNCX1hGRVJfU0laRSkKLQkJZ290byBlcnJfZHJvcDsKLQotCXJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2Ryb3A7Ci0KLQloZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7Ci0JaWYgKCFoZHIpCi0JCWdvdG8gZXJyX2Ryb3A7Ci0KLQloZHItJmd0O2lkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7Ci0JaGRyLSZndDtyc3ZkID0gMDsKLQloZHItJmd0O2xlbiA9IHBsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpOwotCi0JdXJiID0gbWN0cF91c2ItJmd0O3R4X3VyYjsKJiM0MzsJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCF1cmIpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAogCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItJmd0O3VzYmRldiwKIAkJCSAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLSZndDt1c2JkZXYsIG1jdHBfdXNiLSZndDtlcF9vdXQpLAotCQkJICBza2ItJmd0O2RhdGEsIHNrYi0mZ3Q7bGVuLAotCQkJICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7CiYjNDM7CQkJICBkYXRhLCBsZW4sIG1jdHBfdXNiX291dF9jb21wbGV0ZSwgdHhfY3R4KTsKJiM0MzsKJiM0MzsJaWYgKG1jdHBfdXNiLSZndDtzcGFuKQomIzQzOwkJdXJiLSZndDt0cmFuc2Zlcl9mbGFncyB8PSBVUkJfWkVST19QQUNLRVQ7CiYjNDM7CiYjNDM7CXVzYl9hbmNob3JfdXJiKHVyYiwgJmFtcDttY3RwX3VzYi0mZ3Q7dHhfYW5jaG9yKTsKIAotCS8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi8KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyYykgewotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCWdvdG8gZXJyX2Ryb3A7CiYjNDM7CQluZXRkZXZfZGJnKG1jdHBfdXNiLSZndDtuZXRkZXYsICYjMzQ7VFggdXJiIHN1Ym1pdCBmYWlsZWQsICVkXG4mIzM0OywgcmMpOwomIzQzOwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwomIzQzOwkJdXNiX2ZyZWVfdXJiKHVyYik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO21jdHBfdXNiLSZndDt0eF9xbWVtX2xvY2ssIGZsYWdzKTsKJiM0MzsJCW1jdHBfdXNiLSZndDt0eF9xbWVtICYjNDM7PSBsZW47CiYjNDM7CQlpZiAobWN0cF91c2ItJmd0O3R4X3FtZW0gJmd0Oz0gVFhfUU1FTV9NQVgpCiYjNDM7CQkJbmV0aWZfc3RvcF9xdWV1ZShtY3RwX3VzYi0mZ3Q7bmV0ZGV2KTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDttY3RwX3VzYi0mZ3Q7dHhfcW1lbV9sb2NrLCBmbGFncyk7CiAJfQogCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7CiYjNDM7CS5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWJvb2wgbW9yZSA9IG5ldGRldl94bWl0X21vcmUoKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfcHVzaChkZXYsICZhbXA7bWN0cF91c2ItJmd0O3R4LCBza2IsIG1vcmUpOwogCi1lcnJfZHJvcDoKLQlkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTsKLQlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0xMjUsMjQgJiM0MzsxNDUsMjMgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgUlhfUkVUUllfREVMQVkgPSBIWiAvIDQ7CiBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CXZvaWQgKmJ1ZjsKIAlpbnQgcmM7CiAKLQlza2IgPSBfX25ldGRldl9hbGxvY19za2IobWN0cF91c2ItJmd0O25ldGRldiwgTUNUUF9VU0JfWEZFUl9TSVpFLCBnZnApOwotCWlmICghc2tiKSB7Ci0JCXJjID0gLUVOT01FTTsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLSZndDtuZXRkZXYsICZhbXA7bWN0cF91c2ItJmd0O3J4LAomIzQzOwkJCQkgICAgJmFtcDtidWYsICZhbXA7bGVuLCBnZnApOwomIzQzOwlpZiAocmMpCiAJCWdvdG8gZXJyX3JldHJ5OwotCX0KIAogCXVzYl9maWxsX2J1bGtfdXJiKG1jdHBfdXNiLSZndDtyeF91cmIsIG1jdHBfdXNiLSZndDt1c2JkZXYsCiAJCQkgIHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi0mZ3Q7dXNiZGV2LCBtY3RwX3VzYi0mZ3Q7ZXBfaW4pLAotCQkJICBza2ItJmd0O2RhdGEsIE1DVFBfVVNCX1hGRVJfU0laRSwKLQkJCSAgbWN0cF91c2JfaW5fY29tcGxldGUsIHNrYik7CiYjNDM7CQkJICBidWYsIGxlbiwgbWN0cF91c2JfaW5fY29tcGxldGUsIG1jdHBfdXNiKTsKIAogCXJjID0gdXNiX3N1Ym1pdF91cmIobWN0cF91c2ItJmd0O3J4X3VyYiwgZ2ZwKTsKIAlpZiAocmMpIHsKIAkJbmV0ZGV2X2RiZyhtY3RwX3VzYi0mZ3Q7bmV0ZGV2LCAmIzM0O3J4IHVyYiBzdWJtaXQgZmFpbHVyZTogJWRcbiYjMzQ7LCByYyk7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJbWN0cF91c2JsaWJfcnhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3J4KTsKIAkJaWYgKHJjID09IC1FTk9NRU0pCiAJCQlnb3RvIGVycl9yZXRyeTsKIAl9CkBAIC0xNTcsMTQgJiM0MzsxNzYsMzQgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ4X2Vycl9tYXggPSAxMDsKJiM0MzsKJiM0MzsvKiBSZXR1cm5zIC0xIGlmIHdlIGhhdmUgaGl0IGV4Y2Vzc2l2ZSBlcnJvcnMsIHplcm8gb3RoZXJ3aXNlLiAqLwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JfaW5fdXJiX2VycihzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBpbnQgc3RhdHVzLAomIzQzOwkJCSAgICAgICBib29sIHN0YWxsZWQpCiYjNDM7ewomIzQzOwltY3RwX3VzYmxpYl9yeF9jYW5jZWwoJmFtcDttY3RwX3VzYi0mZ3Q7cngpOwomIzQzOwomIzQzOwlpZiAoIW1jdHBfdXNiLSZndDtpbl9lcnJfY291bnQmIzQzOyYjNDM7KQomIzQzOwkJbWN0cF91c2ItJmd0O2luX2Vycl9vcmlnID0gc3RhdHVzOwomIzQzOwomIzQzOwlpZiAobWN0cF91c2ItJmd0O2luX2Vycl9jb3VudCAmZ3Q7PSByeF9lcnJfbWF4KSB7CiYjNDM7CQluZXRkZXZfZXJyKG1jdHBfdXNiLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtleGNlc3NpdmUgZXJyb3JzIGZyb20lcyBJTiBFUCwgZmlyc3Q6ICVkXG4mIzM0OywKJiM0MzsJCQkgICBzdGFsbGVkID8gJiMzNDsgKHN0YWxsZWQpJiMzNDsgOiAmIzM0OyYjMzQ7LAomIzQzOwkJCSAgIG1jdHBfdXNiLSZndDtpbl9lcnJfb3JpZyk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCBza19idWZmICpza2IgPSB1cmItJmd0O2NvbnRleHQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi0mZ3Q7ZGV2OwotCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQlpbnQgc3RhdHVzOwomIzQzOwlzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gdXJiLSZndDtjb250ZXh0OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbWN0cF91c2ItJmd0O25ldGRldjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJaW50IHJjLCBzdGF0dXM7CiAKIAlzdGF0dXMgPSB1cmItJmd0O3N0YXR1czsKIApAQCAtMTcyLDgwICYjNDM7MjExLDQzIEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRUNPTk5SRVNFVDoKIAljYXNlIC1FU0hVVERPV046Ci0JY2FzZSAtRVBST1RPOgotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOwotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxuJiMzNDssIHN0YXR1cyk7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJLyogZGV2aWNlIHNodXRkb3duLCBkb24mIzM5O3QgcmVzdWJtaXQgKi8KJiM0MzsJCW1jdHBfdXNibGliX3J4X2NhbmNlbCgmYW1wO21jdHBfdXNiLSZndDtyeCk7CiAJCXJldHVybjsKLQl9Ci0KLQlsZW4gPSB1cmItJmd0O2FjdHVhbF9sZW5ndGg7Ci0JX19za2JfcHV0KHNrYiwgbGVuKTsKLQotCXdoaWxlIChza2IpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMOwotCQlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7Ci0JCXU4IHBrdF9sZW47IC8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgbm8gVVNCIGhlYWRlciAqLwotCi0JCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCWhkciA9IHNrYl9wdWxsX2RhdGEoc2tiLCBzaXplb2YoKmhkcikpOwotCQlpZiAoIWhkcikKLQkJCWJyZWFrOwotCi0JCWlmIChiZTE2X3RvX2NwdShoZHItJmd0O2lkKSAhPSBNQ1RQX1VTQl9ETVRGX0lEKSB7Ci0JCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtyeDogaW52YWxpZCBpZCAlMDR4XG4mIzM0OywKLQkJCQkgICBiZTE2X3RvX2NwdShoZHItJmd0O2lkKSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChoZHItJmd0O2xlbiAmbHQ7Ci0JCSAgICBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpIHsKLQkJCW5ldGRldl9kYmcobmV0ZGV2LCAmIzM0O3J4OiBzaG9ydCBwYWNrZXQgKGhkcikgJWRcbiYjMzQ7LAotCQkJCSAgIGhkci0mZ3Q7bGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogd2Uga25vdyB3ZSBoYXZlIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSBoZXJlICovCi0JCXBrdF9sZW4gPSBoZHItJmd0O2xlbiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTsKLQkJaWYgKHBrdF9sZW4gJmd0OyBza2ItJmd0O2xlbikgewotCQkJbmV0ZGV2X2RiZyhuZXRkZXYsCi0JCQkJICAgJiMzNDtyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXG4mIzM0OywKLQkJCQkgICBoZHItJmd0O2xlbiwgc2tiLSZndDtsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAocGt0X2xlbiAmbHQ7IHNrYi0mZ3Q7bGVuKSB7Ci0JCQkvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3Ci0JCQkgKiBza2IgdG8gdXNlIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgotCQkJICovCi0JCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoc2tiMikgewotCQkJCWlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHsKLQkJCQkJa2ZyZWVfc2tiKHNrYjIpOwotCQkJCQlza2IyID0gTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlza2JfdHJpbShza2IsIHBrdF9sZW4pOwotCQl9CiAKLQkJZGV2X2RzdGF0c19yeF9hZGQobmV0ZGV2LCBza2ItJmd0O2xlbik7CiYjNDM7CWNhc2UgLUVQSVBFOgomIzQzOwkJLyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqLwomIzQzOwkJcmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIHRydWUpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybjsKJiM0MzsKJiM0MzsJCW1jdHBfdXNiLSZndDtjbGVhcl9oYWx0ID0gdHJ1ZTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7bWN0cF91c2ItJmd0O3J4X2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmICghbWN0cF91c2ItJmd0O3J4X3N0b3BwZWQpCiYjNDM7CQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bWN0cF91c2ItJmd0O3J4X3JldHJ5X3dvcmssCiYjNDM7CQkJCQkgICAgICBSWF9SRVRSWV9ERUxBWSk7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bWN0cF91c2ItJmd0O3J4X2xvY2ssIGZsYWdzKTsKJiM0MzsJCXJldHVybjsKIAotCQlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7Ci0JCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCQljYiA9IF9fbWN0cF9jYihza2IpOwotCQljYi0mZ3Q7aGFsZW4gPSAwOwotCQluZXRpZl9yeChza2IpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7dW5leHBlY3RlZCByeCB1cmIgc3RhdHVzOiAlZFxuJiMzNDssIHN0YXR1cyk7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSAtRVRJTUU6CiYjNDM7CWNhc2UgLUVQUk9UTzoKJiM0MzsJY2FzZSAtRUlMU0VROgomIzQzOwljYXNlIC1FT1ZFUkZMT1c6CiYjNDM7CQkvKiBwb3NzaWJseSB0cmFuc2llbnQ7IHJlY29yZCBmaXJzdCBmYWlsdXJlLCByZXN1Ym1pdCAqLwomIzQzOwkJcmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIGZhbHNlKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQlicmVhazsKIAotCQlza2IgPSBza2IyOwomIzQzOwljYXNlIDA6CiYjNDM7CQltY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsICZhbXA7bWN0cF91c2ItJmd0O3J4LCB1cmItJmd0O2FjdHVhbF9sZW5ndGgpOwomIzQzOwkJbWN0cF91c2ItJmd0O2luX2Vycl9jb3VudCA9IDA7CiYjNDM7CQlicmVhazsKIAl9CiAKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKLQogCW1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfQVRPTUlDKTsKIH0KIApAQCAtMjUzLDYgJiM0MzsyNTUsMzAgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfcnhfcmV0cnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWN0cF91c2IsCiAJCQkJCQkgcnhfcmV0cnlfd29yay53b3JrKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwkvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovCiYjNDM7CWlmIChtY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCkgewomIzQzOwkJaW50IHBpcGUgPSB1c2JfcmN2YnVsa3BpcGUobWN0cF91c2ItJmd0O3VzYmRldiwgbWN0cF91c2ItJmd0O2VwX2luKTsKJiM0MzsKJiM0MzsJCXJjID0gdXNiX2NsZWFyX2hhbHQobWN0cF91c2ItJmd0O3VzYmRldiwgcGlwZSk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG1jdHBfdXNiLSZndDtuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7Y2FuJiMzOTt0IGNsZWFyIElOIEVQIGhhbHQ6ICVkXG4mIzM0OywgcmMpOwomIzQzOwomIzQzOwkJCWlmICgmIzQzOyYjNDM7bWN0cF91c2ItJmd0O2luX2Vycl9jb3VudCAmZ3Q7PSByeF9lcnJfbWF4KQomIzQzOwkJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3RwX3VzYi0mZ3Q7cnhfbG9jaywgZmxhZ3MpOwomIzQzOwkJCWlmICghbWN0cF91c2ItJmd0O3J4X3N0b3BwZWQpCiYjNDM7CQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO21jdHBfdXNiLSZndDtyeF9yZXRyeV93b3JrLAomIzQzOwkJCQkJCSAgICAgIFJYX1JFVFJZX0RFTEFZKTsKJiM0MzsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bWN0cF91c2ItJmd0O3J4X2xvY2ssIGZsYWdzKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQltY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCA9IGZhbHNlOwomIzQzOwl9CiAKIAltY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7CiB9CkBAIC0yNjIsNiAmIzQzOzI4OCw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJV1JJVEVfT05DRShtY3RwX3VzYi0mZ3Q7cnhfc3RvcHBlZCwgZmFsc2UpOwomIzQzOwltY3RwX3VzYi0mZ3Q7Y2xlYXJfaGFsdCA9IGZhbHNlOwomIzQzOwltY3RwX3VzYi0mZ3Q7aW5fZXJyX2NvdW50ID0gMDsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKQEAgLTI4NCw3ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO21jdHBfdXNiLSZndDtyeF9yZXRyeV93b3JrKTsKIAogCXVzYl9raWxsX3VyYihtY3RwX3VzYi0mZ3Q7cnhfdXJiKTsKLQl1c2Jfa2lsbF91cmIobWN0cF91c2ItJmd0O3R4X3VyYik7CiYjNDM7CiYjNDM7CXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmFtcDttY3RwX3VzYi0mZ3Q7dHhfYW5jaG9yKTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdHhfY2FuY2VsKCZhbXA7bWN0cF91c2ItJmd0O3R4LCBkZXYsIFNLQl9EUk9QX1JFQVNPTl9ERVZfUkVBRFkpOwomIzQzOwltY3RwX3VzYmxpYl9yeF9jYW5jZWwoJmFtcDttY3RwX3VzYi0mZ3Q7cngpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEsNyAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAJZGV2LSZndDttdHUgPSBNQ1RQX1VTQl9NVFVfTUlOOwogCWRldi0mZ3Q7bWluX210dSA9IE1DVFBfVVNCX01UVV9NSU47Ci0JZGV2LSZndDttYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDsKJiM0MzsJZGV2LSZndDttYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7CiAKIAlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTsKIAlkZXYtJmd0O3R4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOOwpAQCAtMzE3LDYgJiM0MzszNDksNyBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbWN0cF91c2IgKmRldjsKJiM0MzsJYm9vbCBzcGFuOwogCWludCByYzsKIAogCS8qIG9ubHkgb25lIGFsdGVybmF0ZSAqLwpAQCAtMzI4LDYgJiM0MzszNjEsOCBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQlyZXR1cm4gcmM7CiAJfQogCiYjNDM7CXNwYW4gPSBpZmFjZV9kZXNjLSZndDtkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOOwomIzQzOwogCW5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksICYjMzQ7bWN0cHVzYiVkJiMzNDssIE5FVF9OQU1FX0VOVU0sCiAJCQkgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApOwogCWlmICghbmV0ZGV2KQpAQCAtMzM1LDMzICYjNDM7MzcwLDQ2IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZhbXA7aW50Zi0mZ3Q7ZGV2KTsKIAlkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlkZXYtJmd0O3NwYW4gPSBzcGFuOwogCWRldi0mZ3Q7bmV0ZGV2ID0gbmV0ZGV2OwogCWRldi0mZ3Q7dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlkZXYtJmd0O2ludGYgPSBpbnRmOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDtyeF9sb2NrKTsKJiM0MzsJaWYgKGRldi0mZ3Q7c3BhbikKJiM0MzsJCW5ldGRldi0mZ3Q7bWF4X210dSA9IE1DVFBfVVNCXzFfMV9NVFVfTUFYOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2Rldi0mZ3Q7dHhfcW1lbV9sb2NrKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CiAKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KCZhbXA7ZGV2LSZndDtyeCwgbGUxNl90b19jcHUoZXBfaW4tJmd0O3dNYXhQYWNrZXRTaXplKSwKJiM0MzsJCQkJIGRldi0mZ3Q7c3Bhbik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbmV0ZGV2OwomIzQzOwltY3RwX3VzYmxpYl90eF9pbml0KCZhbXA7ZGV2LSZndDt0eCwgJmFtcDt0eF9vcHMsIGRldiwgZGV2LSZndDtzcGFuKTsKJiM0MzsJaW5pdF91c2JfYW5jaG9yKCZhbXA7ZGV2LSZndDt0eF9hbmNob3IpOwomIzQzOwogCWRldi0mZ3Q7ZXBfaW4gPSBlcF9pbi0mZ3Q7YkVuZHBvaW50QWRkcmVzczsKIAlkZXYtJmd0O2VwX291dCA9IGVwX291dC0mZ3Q7YkVuZHBvaW50QWRkcmVzczsKIAotCWRldi0mZ3Q7dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlkZXYtJmd0O3J4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtJmd0O3R4X3VyYiB8fCAhZGV2LSZndDtyeF91cmIpIHsKJiM0MzsJaWYgKCFkZXYtJmd0O3J4X3VyYikgewogCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2ZyZWVfdXJiczsKJiM0MzsJCWdvdG8gZXJyX2Zpbmlfcnh0eDsKIAl9CiAKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO2Rldi0mZ3Q7cnhfcmV0cnlfd29yaywgbWN0cF91c2JfcnhfcmV0cnlfd29yayk7CiAKIAlyYyA9IG1jdHBfcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldiwgTlVMTCwgTUNUUF9QSFlTX0JJTkRJTkdfVVNCKTsKIAlpZiAocmMpCi0JCWdvdG8gZXJyX2ZyZWVfdXJiczsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfdXJiOwogCiAJcmV0dXJuIDA7CiAKLWVycl9mcmVlX3VyYnM6Ci0JdXNiX2ZyZWVfdXJiKGRldi0mZ3Q7dHhfdXJiKTsKJiM0MztlcnJfZnJlZV91cmI6CiAJdXNiX2ZyZWVfdXJiKGRldi0mZ3Q7cnhfdXJiKTsKJiM0MztlcnJfZmluaV9yeHR4OgomIzQzOwltY3RwX3VzYmxpYl90eF9maW5pKCZhbXA7ZGV2LSZndDt0eCk7CiYjNDM7CW1jdHBfdXNibGliX3J4X2ZpbmkoJmFtcDtkZXYtJmd0O3J4KTsKJiM0MztlcnJfZnJlZV9uZXRkZXY6CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0zNzEsMTMgJiM0Mzs0MTksMTUgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIAlzdHJ1Y3QgbWN0cF91c2IgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKIAltY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KGRldi0mZ3Q7bmV0ZGV2KTsKLQl1c2JfZnJlZV91cmIoZGV2LSZndDt0eF91cmIpOwomIzQzOwltY3RwX3VzYmxpYl9yeF9maW5pKCZhbXA7ZGV2LSZndDtyeCk7CiYjNDM7CW1jdHBfdXNibGliX3R4X2ZpbmkoJmFtcDtkZXYtJmd0O3R4KTsKIAl1c2JfZnJlZV91cmIoZGV2LSZndDtyeF91cmIpOwogCWZyZWVfbmV0ZGV2KGRldi0mZ3Q7bmV0ZGV2KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1jdHBfdXNiX2RldmljZXNbXSA9IHsKLQl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgMHgwLCAweDEpIH0sCiYjNDM7CXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCBNQ1RQX1VTQl9TVUJDTEFTU19CQVNFLCAweDEpIH0sCiYjNDM7CXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCBNQ1RQX1VTQl9TVUJDTEFTU19TUEFOLCAweDEpIH0sCiAJeyAwIH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45ZGY0MDFhOTE0ZmY1MwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDQxMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBtY3RwLXVzYmxpYi10ZXN0LmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeSwKJiM0MzsgKiB1bml0IHRlc3QgZGVmaW5pdGlvbnMuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZAomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7a3VuaXQvdGVzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21jdHAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21jdHBkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNiL21jdHAtdXNiLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBtY3RwX2RldiAqbWRldjsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9wa3RzOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4IHsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7CiYjNDM7CXN0cnVjdCBtY3RwX3JvdXRlIHJ0OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNibGliX2Rldl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CS8qIHdlIGRvbiYjMzk7dCB0cmFjayBhbnkgVFhlZCBwYWNrZXRzIGF0IHByZXNlbnQgKi8KJiM0MzsJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWN0cF90ZXN0X25ldGRldl9vcHMgPSB7CiYjNDM7CS5uZG9fc3RhcnRfeG1pdCA9IG1jdHBfdXNibGliX2Rldl90eCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCB1MTYgZXBfbWF4cGFja2V0ID0gNTEyOwomIzQzO3N0YXRpYyBjb25zdCBtY3RwX2VpZF90IGxvY2FsX2VpZCA9IDg7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJbmRldi0mZ3Q7dHlwZSA9IEFSUEhSRF9NQ1RQOwomIzQzOwluZGV2LSZndDttdHUgPSA4MTkyOwomIzQzOwluZGV2LSZndDtmbGFncyA9IElGRl9OT0FSUDsKJiM0MzsJbmRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bWN0cF90ZXN0X25ldGRldl9vcHM7CiYjNDM7CW5kZXYtJmd0O25lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTsKJiM0MzsJbmRldi0mZ3Q7cGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX0RTVEFUUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9kZXZfYWN0aW9uKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IGRhdGE7CiYjNDM7CiYjNDM7CXNrYl9xdWV1ZV9wdXJnZSgmYW1wO2Rldi0mZ3Q7cnhfcGt0cyk7CiYjNDM7CWlmIChkZXYtJmd0O21kZXYpCiYjNDM7CQltY3RwX2Rldl9wdXQoZGV2LSZndDttZGV2KTsKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LSZndDtuZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqCiYjNDM7bWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwluZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqZGV2KSwgJiMzNDttY3RwdGVzdCVkJiMzNDssIE5FVF9OQU1FX0VOVU0sCiYjNDM7CQkJICAgIG1jdHBfdXNibGliX2Rldl9zZXR1cCk7CiYjNDM7CWlmICghbmRldikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJZGV2LSZndDtuZGV2ID0gbmRldjsKJiM0MzsJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO2Rldi0mZ3Q7cnhfcGt0cyk7CiYjNDM7CiYjNDM7CXJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWZyZWVfbmV0ZGV2KG5kZXYpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbiwgZGV2KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZGV2LSZndDttZGV2ID0gX19tY3RwX2Rldl9nZXQobmRldik7CiYjNDM7CWlmIChkZXYtJmd0O21kZXYpCiYjNDM7CQlkZXYtJmd0O21kZXYtJmd0O25ldCA9IG1jdHBfZGVmYXVsdF9uZXQoZGV2X25ldChuZGV2KSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7bWRldikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJcmMgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXJldHVybiBkZXY7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYoc2tiLSZndDtkZXYpOwomIzQzOwomIzQzOwlza2JfcXVldWVfdGFpbCgmYW1wO2Rldi0mZ3Q7cnhfcGt0cywgc2tiKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZmluaV9hY3Rpb24odm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4ID0gZGF0YTsKJiM0MzsKJiM0MzsJLyogVGhlIGRldmljZSB3aWxsIGhhdmUgYmVlbiBkZXN0cm95ZWQsIHNvIC0mZ3Q7cnQgd2lsbCBiZSB1bmxpbmtlZC4KJiM0MzsJICogSnVzdCBlbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgaXMgYXMgZXhwZWN0ZWQuCiYjNDM7CSAqLwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRShjdXJyZW50LSZndDtrdW5pdF90ZXN0LAomIzQzOwkJCSAgcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Y3R4LSZndDtydC5yZWZzKSk7CiYjNDM7CiYjNDM7CWtmcmVlKGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IG1jdHBfcm91dGUgKnJ0OwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpOwomIzQzOwlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4KTsKJiM0MzsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtjdHgtJmd0O3J0Lmxpc3QpOwomIzQzOwlydCA9ICZhbXA7Y3R4LSZndDtydDsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7cnQtJmd0O3JlZnMsIDEpOwomIzQzOwomIzQzOwlyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbiwgY3R4KTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJY3R4LSZndDtkZXYgPSBtY3RwX3VzYmxpYl90ZXN0X2NyZWF0ZV9kZXYodGVzdCk7CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBjdHgtJmd0O2Rldik7CiYjNDM7CiYjNDM7CXJ0LSZndDttaW4gPSBsb2NhbF9laWQ7CiYjNDM7CXJ0LSZndDttYXggPSBsb2NhbF9laWQ7CiYjNDM7CXJ0LSZndDtkc3RfdHlwZSA9IE1DVFBfUk9VVEVfRElSRUNUOwomIzQzOwlydC0mZ3Q7dHlwZSA9IFJUTl9MT0NBTDsKJiM0MzsJcnQtJmd0O2RldiA9IGN0eC0mZ3Q7ZGV2LSZndDttZGV2OwomIzQzOwlydC0mZ3Q7b3V0cHV0ID0gbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0OwomIzQzOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJbGlzdF9hZGRfcmN1KCZhbXA7Y3R4LSZndDtydC5saXN0LCAmYW1wO2luaXRfbmV0Lm1jdHAucm91dGVzKTsKJiM0MzsJcmVmY291bnRfaW5jKCZhbXA7cnQtJmd0O3JlZnMpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gY3R4OwomIzQzO30KJiM0MzsKJiM0MzsvKiBJbml0IGEgTUNUUC1vdmVyLVVTQiBwYWNrZXQgd2l0aGluIGEgYnVmZmVyLiBAbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlCiYjNDM7ICogYnVmZmVyIHRvIHdyaXRlLCBAcGF5bG9hZF9sZW4gaXMgdGhlIHJlcG9ydGVkIHNpemUgb2YgdGhlIE1DVFAtb3Zlci1VU0IKJiM0MzsgKiBwYWNrZXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdCh2b2lkICpkYXRhLCBzaXplX3QgbGVuLAomIzQzOwkJCQkgICAgICBzaXplX3QgcGF5bG9hZF9sZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgewomIzQzOwkJc3RydWN0IG1jdHBfdXNiX2hkciB1c2I7CiYjNDM7CQlzdHJ1Y3QgbWN0cF9oZHIgbWN0cDsKJiM0MzsJfSBoZHI7CiYjNDM7CiYjNDM7CWhkci51c2IuaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTsKJiM0MzsJaGRyLnVzYi5sZW4gPSBjcHVfdG9fYmUxNihwYXlsb2FkX2xlbik7CiYjNDM7CWhkci5tY3RwLnZlciA9IDE7CiYjNDM7CWhkci5tY3RwLmRlc3QgPSBsb2NhbF9laWQ7CiYjNDM7CWhkci5tY3RwLnNyYyA9IDA7CiYjNDM7CWhkci5tY3RwLmZsYWdzX3NlcV90YWcgPSAwOwomIzQzOwomIzQzOwltZW1jcHkoZGF0YSwgJmFtcDtoZHIsIG1pbihsZW4sIHNpemVvZihoZHIpKSk7CiYjNDM7CWlmIChsZW4gJmd0OyBzaXplb2YoaGRyKSkKJiM0MzsJCW1lbXNldChkYXRhICYjNDM7IHNpemVvZihoZHIpLCAwLCBsZW4gLSBzaXplb2YoaGRyKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjdGlvbl9yeF9maW5pKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4ID0gZGF0YTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfcnhfZmluaShyeCk7CiYjNDM7CWtmcmVlKHJ4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqCiYjNDM7bWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKQomIzQzO3sKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlyeCA9IGt6YWxsb2Nfb2JqKCpyeCk7CiYjNDM7CWlmIChyeCkgewomIzQzOwkJcmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7CiYjNDM7CQlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApOwomIzQzOwl9CiYjNDM7CUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByeCk7CiYjNDM7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfaW5pdChyeCwgZXBfbWF4cGFja2V0LCBzcGFuKTsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ4OwomIzQzO30KJiM0MzsKJiM0MzsvKiBXcmFwcGVycyBmb3IgdXNibGliJiMzOTtzIHJ4X2NvbXBsZXRlIGNhbGxiYWNrLCB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQKJiM0MzsgKiBmcm9tIGF0b21pYyBjb250ZXh0CiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlsb2NhbF9iaF9kaXNhYmxlKCk7CiYjNDM7CXJjID0gbWN0cF91c2JsaWJfcnhfY29tcGxldGUobmV0ZGV2LCByeCwgbGVuKTsKJiM0MzsJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2luZ2xlIHBhY2tldCwgc3RhcnRpbmcgb24gYSB0cmFuc2ZlciBib3VuZGFyeSwgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbgomIzQzOyAqIHRoZSB0cmFuc2ZlcgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJc2l6ZV90IGxlbjsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTsKJiM0MzsJZGV2ID0gY3R4LSZndDtkZXY7CiYjNDM7CiYjNDM7CXJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoZGV2LSZndDtuZGV2LCByeCwKJiM0MzsJCQkJICAgICZhbXA7YnVmLCAmYW1wO2xlbiwgR0ZQX0tFUk5FTCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CS8qIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIG1heHBhY2tldCBvZiB0cmFuc2ZlciBhdmFpbGFibGUgKi8KJiM0MzsJS1VOSVRfQVNTRVJUX0dFKHRlc3QsIGxlbiwgZXBfbWF4cGFja2V0KTsKJiM0MzsKJiM0MzsJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChidWYsIDgsIDgpOwomIzQzOwomIzQzOwlyYyA9IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LSZndDtuZGV2LCByeCwgOCk7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CXNrYiA9IF9fc2tiX2RlcXVldWUoJmFtcDtkZXYtJmd0O3J4X3BrdHMpOwomIzQzOwlLVU5JVF9FWFBFQ1RfTk9UX05VTEwodGVzdCwgc2tiKTsKJiM0MzsJaWYgKHNrYikKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItJmd0O2xlbiwgNCk7CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiB7CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CXNpemVfdCBuX3BrdHM7CiYjNDM7CXNpemVfdCBwa3RzWzZdOwomIzQzOwlzaXplX3Qgbl94ZmVyczsKJiM0MzsJc2l6ZV90IHhmZXJzWzZdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MzttY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3RvX2Rlc2MoY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnQsCiYjNDM7CQkJCSAgY2hhciAqZGVzYykKJiM0Mzt7CiYjNDM7CXN0cnNjcHkoZGVzYywgdC0mZ3Q7bmFtZSwgS1VOSVRfUEFSQU1fREVTQ19TSVpFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MzttY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHN0cnVjdCBrdW5pdCAqdGVzdCwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnNwYW4sCiYjNDM7CQkJCSAgIHNpemVfdCAqbGVuKQomIzQzO3sKJiM0MzsJc2l6ZV90IHBrdF9sZW4gPSAwLCB4ZmVyX2xlbiA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3Bhbi0mZ3Q7bl9wa3RzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJS1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLSZndDtwa3RzW2ldLCA4LAomIzQzOwkJCQkgICAgJiMzNDtwa3RbJXVdIGxlbiB0b28gc21hbGwgKCV6dSkgZm9yICVzJiMzNDssCiYjNDM7CQkJCSAgICBpLCBzcGFuLSZndDtwa3RzW2ldLCBzcGFuLSZndDtuYW1lKTsKJiM0MzsJCXBrdF9sZW4gJiM0Mzs9IHNwYW4tJmd0O3BrdHNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNwYW4tJmd0O25feGZlcnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJeGZlcl9sZW4gJiM0Mzs9IHNwYW4tJmd0O3hmZXJzW2ldOwomIzQzOwomIzQzOwlLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHBrdF9sZW4sIHhmZXJfbGVuLAomIzQzOwkJCSAgICAmIzM0O2ludmFsaWQgcGt0X2xlbiAoJXp1KSAhPSB4ZmVyX2xlbiAoJXp1KSBmb3IgJXMmIzM0OywKJiM0MzsJCQkgICAgcGt0X2xlbiwgeGZlcl9sZW4sIHNwYW4tJmd0O25hbWUpOwomIzQzOwomIzQzOwkqbGVuID0gcGt0X2xlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqcGt0X3NwYW4gPSB0ZXN0LSZndDtwYXJhbV92YWx1ZTsKJiM0MzsJc2l6ZV90IGxlbiwgeGZlcl9sZW4sIG9mZiwgeGZlcl9vZmY7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2OwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeDsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CXU4ICpwa3RidWY7CiYjNDM7CXZvaWQgKmJ1ZjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwltY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHRlc3QsIHBrdF9zcGFuLCAmYW1wO2xlbik7CiYjNDM7CXBrdGJ1ZiA9IGt1bml0X2ttYWxsb2NfYXJyYXkodGVzdCwgMSwgbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHBrdGJ1Zik7CiYjNDM7CiYjNDM7CS8qIGxheSBvdXQgcGFja2V0cyAqLwomIzQzOwlmb3IgKG9mZiA9IDAsIGkgPSAwOyBpICZsdDsgcGt0X3NwYW4tJmd0O25fcGt0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWxlbiA9IHBrdF9zcGFuLSZndDtwa3RzW2ldOwomIzQzOwkJbWN0cF91c2JsaWJfdGVzdF9pbml0X3BrdChwa3RidWYgJiM0Mzsgb2ZmLCBsZW4sIGxlbik7CiYjNDM7CQlvZmYgJiM0Mzs9IGxlbjsKJiM0MzsJfQomIzQzOwomIzQzOwljdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7CiYjNDM7CWRldiA9IGN0eC0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCB0cnVlKTsKJiM0MzsKJiM0MzsJLyogZmVlZCB0cmFuc2ZlcnMgKi8KJiM0MzsJZm9yIChvZmYgPSAwLCB4ZmVyX29mZiA9IDAsIGkgPSAwOyBpICZsdDsgcGt0X3NwYW4tJmd0O25feGZlcnM7KSB7CiYjNDM7CQl4ZmVyX2xlbiA9IHBrdF9zcGFuLSZndDt4ZmVyc1tpXSAtIHhmZXJfb2ZmOwomIzQzOwkJcmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi0mZ3Q7bmRldiwgcngsCiYjNDM7CQkJCQkgICAgJmFtcDtidWYsICZhbXA7bGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7CiYjNDM7CiYjNDM7CQlLVU5JVF9BU1NFUlRfR0UodGVzdCwgbGVuLCBlcF9tYXhwYWNrZXQpOwomIzQzOwomIzQzOwkJbGVuID0gbWluKGxlbiwgeGZlcl9sZW4pOwomIzQzOwkJbWVtY3B5KGJ1ZiwgcGt0YnVmICYjNDM7IG9mZiwgbGVuKTsKJiM0MzsKJiM0MzsJCWlmIChsZW4gPT0geGZlcl9sZW4pIHsKJiM0MzsJCQkvKiB3aG9sZS9lbmQgeGZlciwgcHJvY2VlZCB0byBuZXh0ICovCiYjNDM7CQkJeGZlcl9vZmYgPSAwOwomIzQzOwkJCWkmIzQzOyYjNDM7OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQkvKiBwYXJ0aWFsICovCiYjNDM7CQkJeGZlcl9vZmYgJiM0Mzs9IGxlbjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtJmd0O25kZXYsIHJ4LCBsZW4pOwomIzQzOwkJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTsKJiM0MzsJCW9mZiAmIzQzOz0gbGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGNoZWNrIHJlY2VpdmVkIHBhY2tldHMgKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi0mZ3Q7cnhfcGt0cy5xbGVuLCBwa3Rfc3Bhbi0mZ3Q7bl9wa3RzKTsKJiM0MzsJZm9yIChpID0gMDsgOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoJmFtcDtkZXYtJmd0O3J4X3BrdHMpOwomIzQzOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAoaSAmbHQ7IHBrdF9zcGFuLSZndDtuX3BrdHMpCiYjNDM7CQkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNrYi0mZ3Q7bGVuLCBwa3Rfc3Bhbi0mZ3Q7cGt0c1tpXSAtIDQpOwomIzQzOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zW10gPSB7CiYjNDM7CS8qIE9uZSBwYWNrZXQgY29tcGxldGVseSB3aXRoaW4gYSB0cmFuc2ZlciAqLwomIzQzOwl7ICYjMzQ7MXAxeC1jb21wbGV0ZSYjMzQ7LCAxLCB7IDggfSwgMSwgeyA4IH0gfSwKJiM0MzsJLyogVHdvIHNtYWxsIHBhY2tldHMgY29tYmluZWQgd2l0aGluIG9uZSB0cmFuc2ZlciAqLwomIzQzOwl7ICYjMzQ7MnAxeC1jb21iaW5lZCYjMzQ7LCAyLCB7IDgsIDggfSwgMSwgeyAxNiB9IH0sCiYjNDM7CS8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgcGF5bG9hZCAqLwomIzQzOwl7ICYjMzQ7MXAyeC1zcGxpdC1wYXlsb2FkJiMzNDssIDEsIHsgMTYgfSwgMiwgeyA4LCA4IH0gfSwKJiM0MzsJLyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgVVNCIHRyYW5zcG9ydCBoZWFkZXIgKi8KJiM0MzsJeyAmIzM0OzFwMngtc3BsaXQtdXNiaGRyJiMzNDssIDEsIHsgMTYgfSwgMiwgeyAyLCAxNCB9IH0sCiYjNDM7CS8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgaGVhZGVyICovCiYjNDM7CXsgJiMzNDsxcDJ4LXNwbGl0LW1jdHBoZHImIzM0OywgMSwgeyAxNiB9LCAyLCB7IDYsIDEwIH0gfSwKJiM0MzsJLyogU2luZ2xlIHBhY2tldCBzcGxpdCBvdmVyIDMgdHJhbnNmZXJzLCBtaWRkbGUgZW50aXJlbHkgY29udGludWF0aW9uICovCiYjNDM7CXsgJiMzNDsxcDN4LXNwbGl0JiMzNDssIDEsIHsgMTIgfSwgMywgeyA0LCA0LCA0IH0gfSwKJiM0MzsJLyogTWF4LXNpemVkIHNpbmdsZSB0cmFuc2ZlciAqLwomIzQzOwl7ICYjMzQ7MXAxeC1sYXJnZSYjMzQ7LCAxLCB7IDgxOTEgfSwgMSwgeyA4MTkxIH0gfSwKJiM0MzsJLyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGEKJiM0MzsJICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhbgomIzQzOwkgKi8KJiM0MzsJeyAmIzM0OzJwMngtbGFyZ2Utc3BsaXQmIzM0OywgMiwgeyA4MTkwLCA4MTkwIH0sIDIsIHsgODE5MSwgODE4OSB9IH0sCiYjNDM7fTsKJiM0MzsKJiM0MztLVU5JVF9BUlJBWV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFucywKJiM0MzsJCSAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgbWN0cF91c2JsaWJfdGVzdF9jYXNlc1tdID0gewomIzQzOwlLVU5JVF9DQVNFKG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKSwKJiM0MzsJS1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLAomIzQzOwkJCSBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0gewomIzQzOwkubmFtZSA9ICYjMzQ7bWN0cC11c2JsaWImIzM0OywKJiM0MzsJLnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLAomIzQzO307CiYjNDM7CiYjNDM7a3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzE5OTdmOTg5MDI2ZjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMKQEAgLTAsMCAmIzQzOzEsNjI1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeQomIzQzOyAqCiYjNDM7ICogRFNQMDI4MyBpcyBhdmFpbGFibGUgYXQ6CiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VzYi9jaDkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNiL21jdHAtdXNiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tY3RwLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKQomIzQzO3sKJiM0MzsJaWYgKCFlcF9wa3RsZW4pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGVwX3BrdGxlbiAmYW1wOyB+VVNCX0VORFBPSU5UX01BWFBfTUFTSykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltZW1zZXQocngsIDAsIHNpemVvZigqcngpKTsKJiM0MzsJcngtJmd0O3NwYW4gPSBzcGFuOwomIzQzOwlyeC0mZ3Q7ZXBfcGt0bGVuID0gZXBfcGt0bGVuOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpCiYjNDM7ewomIzQzOwlrZnJlZV9za2IocngtJmd0O3NrYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2ZpbmkpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUHJlcGFyZSBhIHRyYW5zZmVyIGJ1ZmZlciBmb3IgZnV0dXJlIGNvbXBsZXRpb247ICpidWZwIGFuZCAqbGVucCB3aWxsCiYjNDM7ICogYmUgcG9wdWxhdGVkIG9uIHN1Y2Nlc3MuCiYjNDM7ICovCiYjNDM7aW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LAomIzQzOwkJCSAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSByeC0mZ3Q7c2tiOwomIzQzOwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKJiM0MzsKJiM0MzsJaWYgKHNrYiAmYW1wOyZhbXA7IHNrYi0mZ3Q7bGVuICZndDs9IE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYKSB7CiYjNDM7CQkvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovCiYjNDM7CQltY3RwX3VzYmxpYl9yeF9jYW5jZWwocngpOwomIzQzOwkJc2tiID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlsZW4gPSByeC0mZ3Q7c3BhbiA/IHJvdW5kdXAoTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgsIHJ4LSZndDtlcF9wa3RsZW4pCiYjNDM7CQk6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7CiYjNDM7CiYjNDM7CWlmICghc2tiKSB7CiYjNDM7CQlza2IgPSBfX25ldGRldl9hbGxvY19za2IobmV0ZGV2LCBsZW4sIGdmcCk7CiYjNDM7CQlpZiAoIXNrYikKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJfSBlbHNlIGlmIChza2ItJmd0O2Nsb25lZCB8fCBza2JfdGFpbHJvb20oc2tiKSAmbHQ7IHJ4LSZndDtlcF9wa3RsZW4pIHsKJiM0MzsJCS8qIFdlIGFsd2F5cyBuZWVkIHRvIHJlYWxsb2MgaWYgLSZndDtjbG9uZWQsIGFzIHdlIGNhbm5vdAomIzQzOwkJICogcmVzdWJtaXQgdGhlIChub3ctc2hhcmVkKSBza2IgYnVmZmVyIGZvciBwb3NzaWJsZSBETUEuCiYjNDM7CQkgKgomIzQzOwkJICogT3RoZXJ3aXNlIChpZiB3ZSBoYXZlIGFuIHVuLWNsb25lZCBTS0IpOiBqdXN0IGVuc3VyZSB3ZQomIzQzOwkJICogaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIHByZXZlbnQgYmFiYmxlLiBTaW5jZSB3ZSBhbGxvY2F0ZWQKJiM0MzsJCSAqIGZvciBtYXggc2l6ZSBpbiB0aGUgbGFzdCBwcmVwYXJlIChhbmQgaGF2ZSBub3QgY29uc3VtZWQgYW55CiYjNDM7CQkgKiBvZiB0aGF0IHNwYWNlIGZvciBhIHByaW9yIE1DVFAgcGFja2V0LCBiZWNhdXNlICFjbG9uZWQpLCB3ZQomIzQzOwkJICogaGF2ZSBzdWZmaWNpZW50IGRhdGEgdG8gZmluaXNoIHRoZSBjdXJyZW50IE1DVFAgcGFja2V0LgomIzQzOwkJICovCiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKJiM0MzsKJiM0MzsJCXNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBsZW4sIGdmcCk7CiYjNDM7CQlpZiAoIXNrYjIpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwomIzQzOwkJc2tiID0gc2tiMjsKJiM0MzsJfQomIzQzOwomIzQzOwlyeC0mZ3Q7c2tiID0gc2tiOwomIzQzOwomIzQzOwkvKiBTcGFubmluZyBtb2RlIGFsbG93cyBaTFBzLCBzbyB3ZSBkb24mIzM5O3QgcmVxdWlyZSBleGFjdGx5IG9uZQomIzQzOwkgKiB0cmFuc2ZlciBwYWNrZXQuIElmIHdlIGhhdmUgZXh0cmEgdGFpbHJvb20sIG1heSBhcyB3ZWxsIHVzZSBpdCwKJiM0MzsJICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSAmZ3Q7PSBlcF9wa3RsZW4uCiYjNDM7CSAqLwomIzQzOwlpZiAocngtJmd0O3NwYW4pCiYjNDM7CQlsZW4gPSByb3VuZGRvd24oc2tiX3RhaWxyb29tKHNrYiksIHJ4LSZndDtlcF9wa3RsZW4pOwomIzQzOwomIzQzOwkqYnVmcCA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKJiM0MzsJKmxlbnAgPSBsZW47CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIobmV0ZGV2LSZndDtkc3RhdHMpOwomIzQzOwlzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwomIzQzOwlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7CiYjNDM7CiYjNDM7CS8qIHdlJiMzOTtyZSBjYWxsZWQgZnJvbSBhbiBVUkIgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2Fubm90IGFzc3VtZSBsb2NhbAomIzQzOwkgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWQKJiM0MzsJICovCiYjNDM7CWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCk7CiYjNDM7CXU2NF9zdGF0c19pbmMoJmFtcDtkc3RhdHMtJmd0O3J4X3BhY2tldHMpOwomIzQzOwl1NjRfc3RhdHNfYWRkKCZhbXA7ZHN0YXRzLSZndDtyeF9ieXRlcywgc2tiLSZndDtsZW4pOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwomIzQzOwlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7CiYjNDM7CXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwomIzQzOwljYiA9IF9fbWN0cF9jYihza2IpOwomIzQzOwljYi0mZ3Q7aGFsZW4gPSAwOwomIzQzOwluZXRpZl9yeChza2IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtkc3RhdHMpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO2RzdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwl1NjRfc3RhdHNfaW5jKCZhbXA7ZHN0YXRzLSZndDtyeF9kcm9wcyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVjZWl2ZSBhIFVTQiBjb21wbGV0aW9uIG9mIEBsZW4gYnl0ZXMgb2YgaW5jb21pbmcgZGF0YS4gV2Ugd2lsbCB0aGVuIHNwbGl0CiYjNDM7ICogdGhpcyBpbnRvIHBhY2tldHMgYW5kIG5ldGlmX3J4KCkgZWFjaC4gSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGluIGF0b21pYwomIzQzOyAqIGNvbnRleHRzIC0gaWUuLCBVUkIgY29tcGxldGlvbi4KJiM0MzsgKgomIzQzOyAqIEFzc3VtZXMgQG5ldGRldiB1c2VzIGRzdGF0cy4KJiM0MzsgKi8KJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSByeC0mZ3Q7c2tiOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9wdXQoc2tiLCBsZW4pOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKJiM0MzsJCS8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgaW5jbHVkaW5nIFVTQiBoZWFkZXIgKi8KJiM0MzsJCXUxNiBwa3RfbGVuOwomIzQzOwomIzQzOwkJLyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KJiM0MzsJCWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqaGRyKSkgewomIzQzOwkJCWlmICghcngtJmd0O3NwYW4pIHsKJiM0MzsJCQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O3J4OiB0aW55IHhmZXIgKCVkKSBpbiBub24tc3BhbiBtb2RlJiMzNDssCiYjNDM7CQkJCQkgICBza2ItJmd0O2xlbik7CiYjNDM7CQkJCXJjID0gLUVOT01TRzsKJiM0MzsJCQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQkJfQomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaGRyID0gKHN0cnVjdCBtY3RwX3VzYl9oZHIgKilza2ItJmd0O2RhdGE7CiYjNDM7CiYjNDM7CQlpZiAoYmUxNl90b19jcHUoaGRyLSZndDtpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkgewomIzQzOwkJCS8qIEJ5IHJlc2V0dGluZyBoZXJlLCB3aWxsIHN0YXJ0IHRoZSBuZXh0IElOIHRyYW5zZmVyCiYjNDM7CQkJICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW4KJiM0MzsJCQkgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkCiYjNDM7CQkJICogd2l0aCB0aGUgc3RhcnQgb2YgYSB0cmFuc2Zlci4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UmIzM5O2xsIGRyb3AKJiM0MzsJCQkgKiB0aGUgY3VycmVudCB0cmFuc2ZlciBvbmx5CiYjNDM7CQkJICovCiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsICYjMzQ7cng6IGludmFsaWQgaWQgJTA0eFxuJiMzNDssCiYjNDM7CQkJCSAgIGJlMTZfdG9fY3B1KGhkci0mZ3Q7aWQpKTsKJiM0MzsJCQlyYyA9IC1FUFJPVE87CiYjNDM7CQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwa3RfbGVuID0gYmUxNl90b19jcHUoaGRyLSZndDtsZW4pOwomIzQzOwkJLyogdjEuMSwgd2l0aCBzcGFuIGVuYWJsZWQsIGhhcyBhIDEzLWJpdCBsZW5ndGggKi8KJiM0MzsJCXBrdF9sZW4gJmFtcDs9IHJ4LSZndDtzcGFuID8KJiM0MzsJCQlNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYOwomIzQzOwkJaWYgKHBrdF9sZW4gJmx0OyBzaXplb2YoKmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX2hkcikpIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtyeDogaW52YWxpZCBsZW4gJWRcbiYjMzQ7LCBwa3RfbGVuKTsKJiM0MzsJCQlyYyA9IC1FUFJPVE87CiYjNDM7CQkJZ290byBlcnJfcmVzZXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBzcGFuIGNvbnRpbnVlcyB0byB0aGUgbmV4dCB0cmFuc2ZlciwgcmVzdWJtaXQgKi8KJiM0MzsJCWlmIChwa3RfbGVuICZndDsgc2tiLSZndDtsZW4pIHsKJiM0MzsJCQlpZiAoIXJ4LSZndDtzcGFuKSB7CiYjNDM7CQkJCW5ldGRldl9kYmcobmV0ZGV2LAomIzQzOwkJCQkJICAgJiMzNDtyeDogc2hvcnQgeGZlciAoJWQgdnMgJWQpIGluIG5vbi1zcGFuIG1vZGUmIzM0OywKJiM0MzsJCQkJCSAgIHBrdF9sZW4sIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCQkJcmMgPSAtRVBST1RPOwomIzQzOwkJCQlnb3RvIGVycl9yZXNldDsKJiM0MzsJCQl9CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi8KJiM0MzsJCWlmIChwa3RfbGVuID09IHNrYi0mZ3Q7bGVuKSB7CiYjNDM7CQkJbWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IpOwomIzQzOwkJCXJ4LSZndDtza2IgPSBOVUxMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogbW9yZSBwYWNrZXRzIGZvbGxvdyAtIFJYIGEgY2xvbmUgc28gdGhhdCB3ZSBjYW4gY29udGludWUKJiM0MzsJCSAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGEKJiM0MzsJCSAqIHNwYW4uCiYjNDM7CQkgKi8KJiM0MzsJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKJiM0MzsJCWlmIChza2IyKSB7CiYjNDM7CQkJc2tiX3RyaW0oc2tiMiwgcGt0X2xlbik7CiYjNDM7CQkJbWN0cF91c2JsaWJfcngobmV0ZGV2LCBza2IyKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3AobmV0ZGV2KTsKJiM0MzsJCX0KJiM0MzsJCXNrYl9wdWxsKHNrYiwgcGt0X2xlbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc2V0OgomIzQzOwlkZXZfa2ZyZWVfc2tiX2FueShyeC0mZ3Q7c2tiKTsKJiM0MzsJcngtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY29tcGxldGUpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FuY2VsIGEgcnggY29udGV4dDsgc3Vic2VxdWVudCBwcmVwYXJlL2NvbXBsZXRlIGNhbGxzIHdpbGwgbm90IGJlIGEKJiM0MzsgKiBjb250aW51YXRpb24gb2YgYW55IGRhdGEgYWxyZWFkeSByZWNlaXZlZC4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KQomIzQzO3sKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkocngtJmd0O3NrYik7CiYjNDM7CXJ4LSZndDtza2IgPSBOVUxMOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jYW5jZWwpOwomIzQzOwomIzQzOy8qIHRyYW5zbWl0IGNvbnRleHQ6IGVuY2Fwc3VsYXRlcyBvbmUgdHJhbnNmZXIgKi8KJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4IHsKJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JzOwomIzQzOwl1bnNpZ25lZCBpbnQgYnVmX2xlbiwgbGVuOwomIzQzOwllbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHsKJiM0MzsJCVRYX1NJTkdMRSwKJiM0MzsJCVRYX0ZMQVQsCiYjNDM7CX0gYnVmX3R5cGU7CiYjNDM7CXU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LAomIzQzOwkJCSBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsCiYjNDM7CQkJIHZvaWQgKnByaXYsIGJvb2wgc3BhbikKJiM0Mzt7CiYjNDM7CW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwomIzQzOwl0eC0mZ3Q7b3BzID0gKm9wczsKJiM0MzsJdHgtJmd0O3ByaXYgPSBwcml2OwomIzQzOwl0eC0mZ3Q7c3BhbiA9IHNwYW47CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7dHgtJmd0O2xvY2spOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9pbml0KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2F2YWlsKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdHgtJmd0O2J1Zl90eXBlID09IFRYX1NJTkdMRSA/IDAgOiBjdHgtJmd0O2J1Zl9sZW4gLSBjdHgtJmd0O2xlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJLyogVXNlIHRoZSBiYXNlbGluZSBsZW5ndGggKGllLCBCVFUpIGFzIGFuIGFwcHJveGltYXRlCiYjNDM7CSAqICYjMzQ7cmVhc29uYWJseS1zaXplZCYjMzQ7IHBhY2tldCB3ZSBjb3VsZCBleHBlY3QuIElmIHRoZXJlIGlzCiYjNDM7CSAqIGluc3VmZmljaWVudCBjYXBhY2l0eSBmb3IgdGhhdCwgdGhlbiBzZW5kLgomIzQzOwkgKi8KJiM0MzsJY29uc3Qgc2l6ZV90IHBrdF9sZW4gPSBNQ1RQX1VTQl9CVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gbWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSAmbHQ7IHBrdF9sZW47CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUgLSBpbmRpY2F0aW5nIHRoYXQgdGhlIG5ldyBza2IKJiM0MzsgKiBjb3VsZCBub3QgYmUgYXBwZW5kZWQuIFNvLCBlcnJvcnMgcmVwb3J0ZWQgaGVyZSB0byB0aGUgVFggcGF0aCB3aWxsIHJlc3VsdAomIzQzOyAqIGluIHRoZSBUWCBiZWluZyB0cmFuc21pdHRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2FwcGVuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKGN0eC0mZ3Q7YnVmX3R5cGUgPT0gVFhfU0lOR0xFKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpICZsdDsgc2tiLSZndDtsZW4pCiYjNDM7CQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CiYjNDM7CV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtjdHgtJmd0O3NrYnMsIHNrYik7CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7bGVuICYjNDM7PSBza2ItJmd0O2xlbjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwl2b2lkICpidWY7CiYjNDM7CiYjNDM7CS8qIElmIHdlIGhhdmUgYSBxbGVuIG9mIDEsIHdlIG9ubHkgZW5kZWQgdXAgcGFja2luZyBhIHNpbmdsZSBza2IsCiYjNDM7CSAqIGRlc3BpdGUgYWxsb2NhdGluZyBmb3IgbXVsdGlwbGUuIFNraXAgdGhlIGNvcHkgYW5kIHNlbmQgZGlyZWN0bHkKJiM0MzsJICogZnJvbSB0aGUgc2tiIGRhdGEuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4LSZndDtidWZfdHlwZSA9PSBUWF9TSU5HTEUgfHwgY3R4LSZndDtza2JzLnFsZW4gPT0gMSkgewomIzQzOwkJYnVmID0gY3R4LSZndDtza2JzLm5leHQtJmd0O2RhdGE7CiYjNDM7CiYjNDM7CX0gZWxzZSBpZiAoY3R4LSZndDtidWZfdHlwZSA9PSBUWF9GTEFUKSB7CiYjNDM7CQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwkJc2l6ZV90IHBvcyA9IDA7CiYjNDM7CiYjNDM7CQlza2JfcXVldWVfd2FsaygmYW1wO2N0eC0mZ3Q7c2ticywgc2tiKSB7CiYjNDM7CQkJc2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC0mZ3Q7YnVmICYjNDM7IHBvcywgc2tiLSZndDtsZW4pOwomIzQzOwkJCXBvcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlidWYgPSBjdHgtJmd0O2J1ZjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjdHgtJmd0O3R4LSZndDtvcHMuc2VuZChjdHgsIGJ1ZiwgY3R4LSZndDtsZW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsCiYjNDM7CQkJCSAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlpZiAoIWN0eCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7Y3R4LSZndDtza2JzKSkgIT0gTlVMTCkKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55X3JlYXNvbihza2IsIHJlYXNvbik7CiYjNDM7CWtmcmVlKGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0eF9jdHgtJmd0O3R4LSZndDtwcml2OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7CiYjNDM7CiYjNDM7LyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSB0eCAmYW1wOyBjb21wbGV0aW9uIHBhdGggaXMgcXVpZXNjZWQgKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCkKJiM0Mzt7CiYjNDM7CW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4LSZndDtjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpOwomIzQzOwomIzQzOy8qIE1heCBzaXplIG9mIGEgc3Bhbm5lZCBUWC4gU2luY2Ugd2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBzcGFuIGJ1ZmZlciwgbGltaXQKJiM0MzsgKiB0aGUgdHgtdGltZSBhbGxvY2F0aW9ucyB0byA0ay4gTGFyZ2VyIHBhY2tldHMgd2lsbCBiZSBzZW50IGFzIHNpbmdsZQomIzQzOyAqIHRyYW5zZmVycy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1NQQU5fTUFYID0gNDA5NiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4KTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqCiYjNDM7bWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgYm9vbCBzaW5nbGUpCiYjNDM7ewomIzQzOwllbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHR5cGU7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eDsKJiM0MzsJc2l6ZV90IHN6ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHNpbmdsZSB8fCBza2ItJmd0O2xlbiAmZ3Q7IFRYX1NQQU5fTUFYKSB7CiYjNDM7CQl0eXBlID0gVFhfU0lOR0xFOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdHlwZSA9IFRYX0ZMQVQ7CiYjNDM7CQlzeiA9IHR4LSZndDtzcGFuID8gVFhfU1BBTl9NQVggOiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eCA9IGt6YWxsb2NfZmxleCgqY3R4LCBidWYsIHN6LCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFjdHgpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJY3R4LSZndDt0eCA9IHR4OwomIzQzOwljdHgtJmd0O2J1Zl90eXBlID0gdHlwZTsKJiM0MzsJY3R4LSZndDtidWZfbGVuID0gc3o7CiYjNDM7CWN0eC0mZ3Q7bGVuID0gc2tiLSZndDtsZW47CiYjNDM7CXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtjdHgtJmd0O3NrYnMpOwomIzQzOwlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7Y3R4LSZndDtza2JzLCBza2IpOwomIzQzOwomIzQzOwlyZXR1cm4gY3R4OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LAomIzQzOwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCWJvb2wgb2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJaWYgKG9rKSB7CiYjNDM7CQkvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vdwomIzQzOwkJICogdGhhdCB0aGVyZSBpcyBhIDQtYnl0ZSBoZWFkZXIgcHVzaGVkIHRvIGFsbCBza2JzIGluCiYjNDM7CQkgKiB0eF9za2JfcHJlcGFyZSgpCiYjNDM7CQkgKi8KJiM0MzsJCXU2NCBuID0gY3R4LSZndDtza2JzLnFsZW47CiYjNDM7CQlzNjQgbGVuID0gY3R4LSZndDtsZW4gLSAobiAqIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSk7CiYjNDM7CiYjNDM7CQl1NjRfc3RhdHNfYWRkKCZhbXA7ZHN0YXRzLSZndDt0eF9wYWNrZXRzLCBuKTsKJiM0MzsJCXU2NF9zdGF0c19hZGQoJmFtcDtkc3RhdHMtJmd0O3R4X2J5dGVzLCBsZW4pOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTY0X3N0YXRzX2FkZCgmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMsIGN0eC0mZ3Q7c2ticy5xbGVuKTsKJiM0MzsJfQomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O2RzdGF0cyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi0mZ3Q7ZHN0YXRzKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtkc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJdTY0X3N0YXRzX2luYygmYW1wO2RzdGF0cy0mZ3Q7dHhfZHJvcHMpOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7ZHN0YXRzLSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O2RzdGF0cyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29tcGxldGlvbiBmb3IgdGhlIC0mZ3Q7c2VuZCgpIG9wLiBUaGlzIHdpbGwgdXBkYXRlIG5ldGRldiBzdGF0cyBhbmQKJiM0MzsgKiBmcmVlIHRoZSB0eCBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogTGlrZWx5IGNhbGxlZCBmcm9tIChhdG9taWMpIFVSQiBjb21wbGV0aW9uIGNvbnRleHQuCiYjNDM7ICovCiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKQomIzQzO3sKJiM0MzsJZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0KJiM0MzsJCW9rID8gU0tCX0NPTlNVTUVEIDogU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7CiYjNDM7CiYjNDM7CW1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZSh0eF9jdHgsIGRldiwgb2spOwomIzQzOwltY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eF9jdHgsIHJlYXNvbik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpOwomIzQzOwomIzQzOy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKQomIzQzOyAqCiYjNDM7ICogT24gZXJyb3IsIHBvcHVsYXRlcyBAcmVhc29uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzcGFuLAomIzQzOwkJCQkgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiAqcmVhc29uKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwbGVuLCBtYXhfbGVuOwomIzQzOwlzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYOwomIzQzOwomIzQzOwlwbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWlmIChwbGVuICYjNDM7IHNpemVvZigqaGRyKSAmZ3Q7IG1heF9sZW4pIHsKJiM0MzsJCSpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19CSUc7CiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQkqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PTUVNOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCSpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwloZHItJmd0O2lkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7CiYjNDM7CWhkci0mZ3Q7bGVuID0gY3B1X3RvX2JlMTYocGxlbiAmIzQzOyBzaXplb2YoKmhkcikpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvCiYjNDM7ICogb3BzLSZndDtzZW5kKCkuCiYjNDM7ICoKJiM0MzsgKiBUYWtlcyBvd25lcnNoaXAgb2YgQHNrYiwgaW5jbHVkaW5nIG9uIGVycm9yLgomIzQzOyAqLwomIzQzO2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCwKJiM0MzsJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7CiYjNDM7CWVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjsKJiM0MzsJY29uc3QgaW50IG1heF90cmllcyA9IDM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCB0cnkgPSAxLCByYzsKJiM0MzsKJiM0MzsJcmMgPSBtY3RwX3VzYmxpYl90eF9za2JfcHJlcGFyZShza2IsIHR4LSZndDtzcGFuLCAmYW1wO3JlYXNvbik7CiYjNDM7CWlmIChyYykgewomIzQzOwkJbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3AoZGV2KTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pOwomIzQzOwkJLyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHgKJiM0MzsJCSAqIGlzIG5vdyBzZW5kYWJsZSAoaWUuOiAhbW9yZSkuCiYjNDM7CQkgKi8KJiM0MzsJCXNrYiA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7CiYjNDM7cmV0cnk6CiYjNDM7CS8qIFRyeSBhbmQgcXVldWUgdG8gdGhlIGN1cnJlbnQgY29udGV4dC4gV2UgZXhpdCB0aGlzIGNyaXRpY2FsIHNlY3Rpb24KJiM0MzsJICogd2l0aCBhIGZldyBiaXRzIG9mIHN0YXRlOgomIzQzOwkgKiAgLSBzZW5kX2N0eDogaW5kaWNhdGluZyBhIHByaW9yIGNvbnRleHQgdGhhdCBuZWVkcyB0byBiZSBzZW50CiYjNDM7CSAqICAtIHNrYjogaW5kaWNhdGluZyB0aGF0IGEgc2tiIHN0aWxsIG5lZWRzIHRvIGJlIHF1ZXVlZC9zZW50CiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWN0eCA9IHR4LSZndDtjdXJfY3R4OwomIzQzOwlpZiAoY3R4KSB7CiYjNDM7CQlpZiAoc2tiKSB7CiYjNDM7CQkJcmMgPSBtY3RwX3VzYmxpYl90eF9hcHBlbmQoY3R4LCBza2IpOwomIzQzOwkJCWlmIChyYykgewomIzQzOwkJCQkvKiBjYW4mIzM5O3QgYXBwZW5kIHRvIHRoZSBwZW5kaW5nIHR4IC0gZGV0YWNoIGZvcgomIzQzOwkJCQkgKiBzZW5kaW5nLCBhbmQgd2UmIzM5O2xsIGNyZWF0ZSBhIG5ldyB0eCBiZWxvdy4KJiM0MzsJCQkJICovCiYjNDM7CQkJCXN3YXAodHgtJmd0O2N1cl9jdHgsIHNlbmRfY3R4KTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQkvKiB3ZSBoYXZlIHF1ZXVlZCAqLwomIzQzOwkJCQlza2IgPSBOVUxMOwomIzQzOwkJCQlpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSkKJiM0MzsJCQkJCXN3YXAodHgtJmd0O2N1cl9jdHgsIHNlbmRfY3R4KTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKCFtb3JlKSB7CiYjNDM7CQkJc3dhcCh0eC0mZ3Q7Y3VyX2N0eCwgc2VuZF9jdHgpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoc2VuZF9jdHgpIHsKJiM0MzsJCXJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChzZW5kX2N0eCk7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQltY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc2VuZF9jdHgsIGRldiwgZmFsc2UpOwomIzQzOwkJCW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHNlbmRfY3R4LCByZWFzb24pOwomIzQzOwkJfQomIzQzOwkJc2VuZF9jdHggPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdlIGhhdmUgZWl0aGVyIHF1ZXVlZCwgb3IgdGhlIHByZXBhcmUgZmFpbGVkOyBub3RoaW5nIG1vcmUgdG8gZG8gKi8KJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZSh0eCwgc2tiLCAhbW9yZSk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQluZXRkZXZfZGJnKGRldiwgJiMzNDtUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJCW1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGlmIHdlJiMzOTtyZSByZWFkeSB0byBzZW5kIG5vdywgbm8gbmVlZCB0byBlbnF1ZXVlICovCiYjNDM7CWlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKSB7CiYjNDM7CQlyYyA9IG1jdHBfdXNibGliX3R4X3NlbmQoY3R4KTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCW1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShjdHgsIGRldiwgZmFsc2UpOwomIzQzOwkJCW1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKCF0eC0mZ3Q7Y3VyX2N0eCkgewomIzQzOwkJdHgtJmd0O2N1cl9jdHggPSBjdHg7CiYjNDM7CQljdHggPSBOVUxMOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwkvKiB3ZSBtYXkgaGF2ZSBsb3N0IHRoZSByYWNlIHdpdGggYSBjb25jdXJyZW50IHR4OyBzaG91bGRuJiMzOTt0IGhhcHBlbiwgYXMKJiM0MzsJICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW4KJiM0MzsJICogZnJvbSB0aGUgdG9wLCBhcyB3ZSBtYXkgYmUgYWJsZSB0byBxdWV1ZSB0aGUgc2tiIHRvIHRoYXQgY29udGV4dC4KJiM0MzsJICovCiYjNDM7CWlmIChjdHgpIHsKJiM0MzsJCS8qIHVubGluayB0aGUgbmV3IChzb2xlKSBza2IsIHdlIGRvbiYjMzk7dCB3YW50IGl0IGZyZWVkIHdpdGggY3R4ICovCiYjNDM7CQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtjdHgtJmd0O3NrYnMpOwomIzQzOwkJbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pOwomIzQzOwkJaWYgKCYjNDM7JiM0Mzt0cnkgJmd0OyBtYXhfdHJpZXMpIHsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQltY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpOwomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTsKJiM0MzsKJiM0MzsvKiBDYW5jZWwgYSB0eDogYW55IHVuLXNlbnQgY29udGV4dCBpcyByZWxlYXNlZC4gKi8KJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJc3dhcCh0eC0mZ3Q7Y3VyX2N0eCwgY3R4KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmICghY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTsKJiM0MzsJbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpOwomIzQzOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKZXJlbXkgS2VyciAmbHQ7amtAY29kZWNvbnN0cnVjdC5jb20uYXUmZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O01DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5JiMzNDspOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVCkKJiM0MzsjaW5jbHVkZSAmIzM0O21jdHAtdXNibGliLXRlc3QuYyYjMzQ7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaAppbmRleCBhMmY2ZjFlMDRlZmJkMC4uNGJiMDRhMzcxMTA1MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaApAQCAtMiw3ICYjNDM7Miw3IEBACiAvKgogICogbWN0cC11c2IuaCAtIE1DVFAgVVNCIHRyYW5zcG9ydCBiaW5kaW5nOiBjb21tb24gZGVmaW5pdGlvbnMsCiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOgotICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmCiYjNDM7ICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmCiAgKgogICogVGhlc2UgYXJlIHByb3RvY29sLWxldmVsIGRlZmluaXRpb25zLCB0aGF0IG1heSBiZSBzaGFyZWQgYmV0d2VlbiBob3N0CiAgKiBhbmQgZ2FkZ2V0IGRyaXZlcnMuCkBAIC0xMywxOCAmIzQzOzEzLDk2IEBACiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0gKICNkZWZpbmUgX19MSU5VWF9VU0JfTUNUUF9VU0JfSAogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiYjNDM7LyoKJiM0MzsgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkCiYjNDM7ICogKHByZWNlZGVkIGJ5IDggcmVzZXJ2ZWQgYml0cyksIHYxLjEgaGFzIGEgMTMtYml0IGxlbmd0aCBmaWVsZCAocHJlY2VkZWQgYnkKJiM0MzsgKiAzIHJlc2VydmVkIGJpdHMpLiBXZSB1c2UgYSBiZTE2IGZvciBvdXIgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgbGFyZ2VyIHYxLjEKJiM0MzsgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuCiYjNDM7ICovCiBzdHJ1Y3QgbWN0cF91c2JfaGRyIHsKIAlfX2JlMTYJaWQ7Ci0JdTgJcnN2ZDsKLQl1OAlsZW47CiYjNDM7CV9fYmUxNglsZW47CiB9IF9fcGFja2VkOwogCi0jZGVmaW5lIE1DVFBfVVNCX1hGRVJfU0laRQk1MTIKJiM0MzsvKiBtYXggdHJhbnNmZXIgc2l6ZSBmb3IgRFNQMDI4MyB2MS4wICovCiYjNDM7I2RlZmluZSBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFCTUxMgogI2RlZmluZSBNQ1RQX1VTQl9CVFUJCTY4CiAjZGVmaW5lIE1DVFBfVVNCX01UVV9NSU4JTUNUUF9VU0JfQlRVCi0jZGVmaW5lIE1DVFBfVVNCX01UVV9NQVgJKFU4X01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkKJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYCVU4X01BWAomIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8wX01UVV9NQVgJKE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKQomIzQzOyNkZWZpbmUgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVgJR0VOTUFTSygxMiwgMCkKJiM0MzsjZGVmaW5lIE1DVFBfVVNCXzFfMV9NVFVfTUFYCShNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkKICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRAkweDFhYjQKIAomIzQzOy8qIG1jdHAtdXNibGliICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSWCBoYW5kbGU6IGRyaXZlcnMgd2lsbCB0eXBpY2FsbHkgY3JlYXRlIG9uZSBvbiBpbml0LCB3aGljaCBwZXJzaXN0cyBmb3IKJiM0MzsgKiB0aGUgbGlmZSBvZiB0aGUgZHJpdmVyLiBUaGUgc2FtZSBoYW5kbGUgaXMgdXNlZCBmb3IgcHJvZ3Jlc3NpdmUKJiM0MzsgKiBwcmVwYXJlIC0mZ3Q7IGNvbXBsZXRlIG9wZXJhdGlvbnMgKGZvciBlYWNoIGluY29taW5nIFVTQiB0cmFuc2ZlciksIHdoaWNoCiYjNDM7ICogcmVzdWx0IGluIG5ldGlmX3J4KCktaW5nIHRoZSBNQ1RQIHBhY2tldHMgcmVjZWl2ZWQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfcnggewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwl1MTYgZXBfcGt0bGVuOwomIzQzOwlib29sIHNwYW47CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCB1MTYgZXBfcGt0bGVuLCBib29sIHNwYW4pOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KTsKJiM0MzsKJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCSAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsCiYjNDM7CQkJICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKTsKJiM0MzsKJiM0MztpbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbik7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUWCBoYW5kbGU6IGNyZWF0ZWQgYnkgbWN0cF91c2JsaWJfdHhfcHVzaCgpIGR1cmluZyB0aGUgdHggcGF0aCwgYW5kCiYjNDM7ICogbWF5IHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlIHBhY2tldCB0cmFuc21pdHMuCiYjNDM7ICovCiYjNDM7c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eDsKJiM0MzsKJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIHsKJiM0MzsJLyogU3RhcnQgYSBVU0IgVFggZm9yIEBkYXRhLiBPbiByZXR1cm5pbmcgc3VjY2VzcywgdGhlIGltcGxlbWVudGF0aW9uCiYjNDM7CSAqIG11c3QgYXJyYW5nZSBmb3IgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSgpIHRvIGJlIGNhbGxlZCBhdCBzb21lCiYjNDM7CSAqIGxhdGVyIHBvaW50IChlZy4sIG9uIHVyYiBjb21wbGV0aW9uKS4KJiM0MzsJICovCiYjNDM7CWludCAoKnNlbmQpKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbWN0cF91c2JsaWJfdHggewomIzQzOwlzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzIG9wczsKJiM0MzsJdm9pZCAqcHJpdjsKJiM0MzsJYm9vbCBzcGFuOwomIzQzOwkvKiBwcm90ZWN0cyBhY2Nlc3MgdG8gY3VyX2N0eCAqLwomIzQzOwlzcGlubG9ja190IGxvY2s7CiYjNDM7CS8qIGNvbnRleHQgdG8gd2hpY2ggd2UgYXJlIGFkZGluZyBwYWNrZXRzLCBjbGVhcmVkIG9uIHNlbmQgKi8KJiM0MzsJc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3VyX2N0eDsKJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LAomIzQzOwkJCSBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsIHZvaWQgKnByaXYsCiYjNDM7CQkJIGJvb2wgc3Bhbik7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgpOwomIzQzOwomIzQzO3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCk7CiYjNDM7CiYjNDM7aW50IG1jdHBfdXNibGliX3R4X3B1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQlzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LAomIzQzOwkJCXN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSk7CiYjNDM7CiYjNDM7dm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKTsKJiM0MzsKJiM0Mzt2b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7CiYjNDM7CiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYW5kIEZ1enppbmcgTUNUUC1vdmVyLVVTQiBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGludHJvZHVjaW5nIGEgY29tbW9uIGxpYnJhcnksIGBtY3RwLXVzYmxpYi5jYCwgZm9yIE1DVFAtb3Zlci1VU0IuIFRoZSBleGlzdGluZyBgbWN0cC11c2IuY2AgZHJpdmVyIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGxldmVyYWdlIGl0LCBhbmQgYSBuZXcgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAgS2NvbmZpZyBvcHRpb24gaXMgYmVpbmcgaW50cm9kdWNlZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGlzIGV2ZW4gKnJlYWNoYWJsZSogd2l0aGluIG91ciB2aXJ0dWFsaXplZCB0ZXN0aW5nIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IEdDRSBhbmQgUUVNVS4gVGhlIHByb21wdCYjMzk7cyBoaW50IGFib3V0ICYjMzQ7c29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0OyBpcyBrZXkgaGVyZS4KCkFoLCByaWdodCwgVVNCIGdhZGdldCBhbmQgZHVtbXlfaGNkIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5IG9mIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBtZWFuaW5nIHRoZXkgKmFyZSogYWNjZXNzaWJsZSBpbiBRRU1VLiBUaGF0IHNldHRsZXMgdGhhdC4gQW5kIHNpbmNlIGBtY3RwLXVzYi5jYCBpcyBhIFVTQiAqaG9zdCogZHJpdmVyIGZvciBNQ1RQIGRldmljZXMsIHdoaWNoIHVzZXMgdGhlIFVTQiBidXMsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB0ZXN0IGl0IHVzaW5nIGR1bW15IFVTQiBkZXZpY2VzIG9yIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yay4gQW5kIHRoaXMgaXMgZXhjZWxsZW50IG5ld3MuIFRoZSBwcm9tcHQgYWxzbyBtZW50aW9uZWQgc3l6a2FsbGVyLgoKWWVzLCBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHV0aWxpemUgZHVtbXlfaGNkIGFuZCByYXctZ2FkZ2V0LCBzbyB0aGlzIG9wZW5zIHRoZSBkb29yIHRvIGVmZmVjdGl2ZSBmdXp6aW5nLiBXZSBjYW4gZGVmaW5pdGVseSBmdXp6IHRoaXMhCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGludHJvZHVjZWQgaW4gYG1jdHAtdXNibGliLmNgOiBgbWN0cF91c2JsaWJfcnhfaW5pdGAsIGBtY3RwX3VzYmxpYl9yeF9maW5pYCwgYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgLCBgbWN0cF91c2JsaWJfcnhfY29tcGxldGVgLCBgbWN0cF91c2JsaWJfcnhfY2FuY2VsYCwgYG1jdHBfdXNibGliX3R4X2luaXRgLCBgbWN0cF91c2JsaWJfdHhfZmluaWAsIGBtY3RwX3VzYmxpYl90eF9wdXNoYCwgYG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVgLCBhbmQgYG1jdHBfdXNibGliX3R4X2NhbmNlbGAuCgpXZSBhbHNvIGhhdmUgdGhlIGZ1bmN0aW9ucyBpbiBgbWN0cC11c2IuY2A6IGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYG1jdHBfdXNiX3J4X3F1ZXVlYCwgYG1jdHBfdXNiX2luX3VyYl9lcnJgLCBgbWN0cF91c2JfaW5fY29tcGxldGVgLCBgbWN0cF91c2JfcnhfcmV0cnlfd29ya2AsIGBtY3RwX3VzYl9vcGVuYCwgYG1jdHBfdXNiX3N0b3BgLCBgbWN0cF91c2JfcHJvYmVgLCBhbmQgYG1jdHBfdXNiX2Rpc2Nvbm5lY3RgLgoKS2NvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIG5leHQuIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgIGRlcGVuZHMgb24gYFVTQmAuIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGFsc28gZGVwZW5kcyBvbiBgVVNCYCBhbmQgKnNlbGVjdHMqIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiBUaGlzIGltcGxpZXMgd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIHRvIHVzZSB0aGUgbGlicmFyeS4gV2FpdCwgd2UgYWxzbyBuZWVkIHRoZSBiYXNlIGBNQ1RQYCBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGJ5IGNoZWNraW5nIHRoZSBgZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz00MT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTQ5LVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjUwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O01DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTktXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjA6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjEtICAgICAgICBib29sIFwmIzM0O01DVFAgdXNibGliIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjQtXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWc6NjU6Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTY2LVx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBVU0IgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEZXBlbmRlbmN5IENoZWNrOiBNQ1RQX1RSQU5TUE9SVF9VU0IqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1DVFBfVFJBTlNQT1JUX1VTQmAuIEFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIHJlbHkgb24gdGhpcyBtb2R1bGUuIEZpcnN0LCBJ4oCZbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOiB3aGljaCBvdGhlciBtb2R1bGVzIG1pZ2h0IG5lZWQgYSBVU0IgdHJhbnNwb3J0IGxheWVyIGZvciBNQ1RQIGNvbW11bmljYXRpb24/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDoKCiogICAqKlBsYXRmb3JtLVNwZWNpZmljIERyaXZlcnM6KiogSXMgYE1DVFBfVFJBTlNQT1JUX1VTQmAgdGllZCB0byBhbnkgcGFydGljdWxhciBoYXJkd2FyZSBwbGF0Zm9ybXMgb3IgU29Dcz8gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHBvcnRhYmlsaXR5IGFuZCB0cm91Ymxlc2hvb3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgbW9kdWxlIGxldmVyYWdlcyBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgVVNCIGRyaXZlcnMgYW5kIGhvdyB0aGF0IG1pZ2h0IGltcGFjdCBkZXBsb3ltZW50IG9uIGRpZmZlcmVudCBzeXN0ZW1zLgoqICAgKipNQ1RQIFByb3RvY29scyBhbmQgUHJvZmlsZXM6KiogV2hhdCBNQ1RQIHByb2ZpbGVzIGRlcGVuZCBvbiB0aGlzIFVTQiB0cmFuc3BvcnQ/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcHJvZmlsZXMgb3IgY29tbWFuZHMgdGhhdCB1dGlsaXplIHRoZSBVU0IgaW50ZXJmYWNlIGRpcmVjdGx5PyBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwcm9maWxlcyAoZS5nLiwgUExETSwgTUNUUCBCYXNlKSBhbmQgdGhlIHRyYW5zcG9ydCBpcyBlc3NlbnRpYWwuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIGJhc2VkIG9uIHByb2ZpbGUgdXNhZ2UuCiogICAqKlNlY3VyaXR5IENvbnNpZGVyYXRpb25zOioqIEdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBVU0IsIHdoaWNoIGlzIG9mdGVuIGEgcG9pbnQgb2YgZXh0ZXJuYWwgYWNjZXNzLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gVVNCIGNvbW11bmljYXRpb24gdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JgPyBBcmUgdGhlcmUgc2VjdXJpdHkgZmVhdHVyZXMgdGhhdCBkZXBlbmQgb24gdGhpcy4KKiAgICoqQ29uZmlndXJhdGlvbiBhbmQgQnVpbGQgT3B0aW9uczoqKiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIChLY29uZmlnIG9yIHNpbWlsYXIpIHRoYXQgaW5mbHVlbmNlIHdoZXRoZXIgYE1DVFBfVFJBTlNQT1JUX1VTQmAgaXMgYnVpbHQgb3IgZW5hYmxlZD8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgYnVpbGQgZmxhZ3MgdGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgaXQgd29ya3M/IEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcy4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGVzZSBmYWN0b3JzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIHRvIGVuc3VyZSB0aGF0IEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGltcG9ydGFudCBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQl9URVNUXG4gIDYxOlx0ICAgICAgICBib29sIFwmIzM0O01DVFAgdXNibGliIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNjI6XHQgICAgICAgIGRlcGVuZHMgb24gTUNUUF9UUkFOU1BPUlRfVVNCTElCPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNjM6XHQgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDY0Olx0XG4gIDY1Olx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxuICA2NjpcdFx0dHJpc3RhdGUgXCYjMzQ7TUNUUCBVU0IgdHJhbnNwb3J0XCYjMzQ7XG4gIDY3Olx0XHRkZXBlbmRzIG9uIFVTQlxuICA2ODpcdFx0c2VsZWN0IE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxuICA2OTpcdFx0aGVscFxuICA3MDpcdFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgVVNCIHRyYW5zcG9ydCxcbiAgNzE6XHRcdCAgZGVmaW5lZCBieSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDI4My5cbiAgNzI6XHRcbiAgNzM6XHRcdCAgTUNUUC1vdmVyLVVTQiBpbnRlcmZhY2VzIGFyZSBwZWVyLXRvLXBlZXIsIHNvIGVhY2ggaW50ZXJmYWNlXG4gIDc0Olx0XHQgIHJlcHJlc2VudHMgYSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIG9uZSByZW1vdGUgTUNUUCBlbmRwb2ludC5cbiAgNzU6XHRcbiAgNzY6XHRlbmRtZW51XG4gIDc3Olx0XG4gIDc4Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUzNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEZXBlbmRlbmNpZXMgYW5kIHRoZSBNQ1RQIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBNQ1RQX1RSQU5TUE9SVF9VU0JgLiBPYnZpb3VzbHksIHRoYXQgbGV2ZXJhZ2VzIHRoZSBgVVNCYCBzdGFjay4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgbm93IEkmIzM5O20gc2hpZnRpbmcgZ2VhcnMsIGRpZ2dpbmcgZGVlcGVyOiB3aGF0JiMzOTtzIHRoZSBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgd2l0aCBgTUNUUGAgaXRzZWxmPyBXaGVyZSBkb2VzIHRoZSBjb3JlIHByb3RvY29sIGZpdCBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmU/IElzIGl0ICpjb21wbGV0ZWx5KiBkZXBlbmRlbnQ/IEFyZSB0aGVyZSAqb3RoZXIqIGRlcGVuZGVuY2llcyB0byBjb25zaWRlcj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGZ1bmRhbWVudGFsIGZyYW1ld29yayBzbyB0aGF0IEkgZG9uJiMzOTt0IGNvbmZ1c2UgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQ1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21jdHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWN0cC9LY29uZmlnLTEtXG5uZXQvbWN0cC9LY29uZmlnOjI6bWVudWNvbmZpZyBNQ1RQXG5uZXQvbWN0cC9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIE5FVFxuLS1cbm5ldC9tY3RwL0tjb25maWctMTQtXG5uZXQvbWN0cC9LY29uZmlnOjE1OmNvbmZpZyBNQ1RQX1RFU1Rcbm5ldC9tY3RwL0tjb25maWctMTYtICAgICAgICBib29sIFwmIzM0O01DVFAgY29yZSB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubmV0L21jdHAvS2NvbmZpZy0yMC1cbm5ldC9tY3RwL0tjb25maWc6MjE6Y29uZmlnIE1DVFBfRkxPV1Ncbm5ldC9tY3RwL0tjb25maWctMjItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4OTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQ1RQIFVTQiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBNQ1RQIFVTQiBpbnRlZ3JhdGlvbiBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE1DVFBgIGFuZCBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYW5kIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiAgUmlnaHQsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWN0cC11c2JsaWIuY2AsIHdoaWNoIGRlZmluZXMgdGhlIGNvcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBmb3IgdGhlIFVTQiBsaWJyYXJ5OgoKKiAgIGBtY3RwX3VzYmxpYl9yeF9pbml0YAoqICAgYG1jdHBfdXNibGliX3J4X2ZpbmlgCiogICBgbWN0cF91c2JsaWJfcnhfcHJlcGFyZWAKKiAgIGBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZWAKKiAgIGBtY3RwX3VzYmxpYl9yeF9jYW5jZWxgCiogICBgbWN0cF91c2JsaWJfdHhfaW5pdGAKKiAgIGBtY3RwX3VzYmxpYl90eF9maW5pYAoqICAgYG1jdHBfdXNibGliX3R4X3B1c2hgCiogICBgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZWAKKiAgIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgCgpUaG9zZSBhcmUgbXkgRm9jdXNTeW1ib2xzIGZyb20gdGhlIGBtY3RwLXVzYmxpYi5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSB0aGUgY29ycmVjdCBBUEkgZW50cnkgcG9pbnRzLgoKTm93LCB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIGBtY3RwLXVzYi5jYCwgbGlrZToKCiogICBgbWN0cF91c2JfdHhfc2VuZGAKKiAgIGBtY3RwX3VzYl9zdGFydF94bWl0YAoqICAgYG1jdHBfdXNiX3J4X3F1ZXVlYAoqICAgYG1jdHBfdXNiX2luX3VyYl9lcnJgCiogICBgbWN0cF91c2JfaW5fY29tcGxldGVgCiogICBgbWN0cF91c2JfcnhfcmV0cnlfd29ya2AKKiAgIGBtY3RwX3VzYl9vcGVuYAoqICAgYG1jdHBfdXNiX3N0b3BgCiogICBgbWN0cF91c2JfcHJvYmVgCiogICBgbWN0cF91c2JfZGlzY29ubmVjdGAKCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGFyZSBleHBvc2VkIG9yIGludGVybmFsLiBSaWdodCwgSSByZW1lbWJlciB0aGUgZ3VpZGVsaW5lIGFib3V0IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYG1jdHBfdXNiX3R4X3NlbmRgIGlzIHN0YXRpYy4gWXVwLCBpdCBpcyBpbiBgbWN0cC11c2IuY2AuIFNvIGFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBJIHNob3VsZCByZWFsbHkgYmUgZm9jdXNpbmcgb24gdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiBgbWN0cC11c2JsaWIuY2AgZm9yIG15IGFuYWx5c2lzIGFuZCBhbnkgcG90ZW50aWFsIGludGVyZmFjZSBjaGFuZ2VzLgoKTGV0JiMzOTtzIHRha2UgYSBsb29rIGluIGBtY3RwLXVzYi5jYCwgYmVjYXVzZSBJIHRoaW5rIEkgd2FzIG9uIHRoZSByaWdodCB0cmFjay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSBhbnkgb2YgdGhvc2Ugbm9uLXN0YXRpYz8gTG9va3MgbGlrZSB0aGV5IGFyZSBhbGwgc3RhdGljLCBleGNlcHQgbW9kdWxlIGluaXQvZXhpdC4gV2VsbCwgaXQgbG9va3MgbGlrZSBgbWN0cF91c2JfcHJvYmVgIGlzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIE9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY3RwX3VzYl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MzMwPXN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy0zNDQtXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MzQ1OnN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtMzQ2LVx0XHRcdCAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz00MzY9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1jdHBfdXNiX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNDM4LVx0LmlkX3RhYmxlXHQ9IG1jdHBfdXNiX2RldmljZXMsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6NDM5Olx0LnByb2JlXHRcdD0gbWN0cF91c2JfcHJvYmUsXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNDQwLVx0LmRpc2Nvbm5lY3RcdD0gbWN0cF91c2JfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgdGhlIG1jdHBfdXNiX3Byb2JlIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBtY3RwX3VzYl9wcm9iZWAgaXMgYSBzdGF0aWMgY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoLCBvbiBpdHMgb3duLCBzZWVtcyBhY2NlcHRhYmxlLiBUaGUgZGlyZWN0aXZlLCBob3dldmVyLCBzcGVjaWZpY2FsbHkgZW1waGFzaXplcyBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVycy4gVGhlcmVmb3JlLCBJIHdpbGwgaW5jbHVkZSB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGZyb20gYG1jdHAtdXNibGliLmNgLCB3aGljaCBzaG91bGQgYWRkcmVzcyB0aGUgY29uY2VybiBtb3JlIGRpcmVjdGx5LiBJdCBpcyBiZXR0ZXIgZm9yIHRoaXMgdG8gYmUgYSBkaXJlY3QgZXhwb3J0LiBUbyB2ZXJpZnkgdGhpcyB3aWxsIHdvcmssIEkgd2lsbCBleGFtaW5lIGBtY3RwLXVzYmxpYi5jYCB0byBpZGVudGlmeSBhbmQgdmVyaWZ5IHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlc2UgZXhwb3J0ZWQgZnVuY3Rpb25zIGFuZCBlbnN1cmUgdGhhdCB0aGlzIGFwcHJvYWNoIHdpbGwgYmUgcG9zc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTE4PWludCBtY3RwX3VzYmxpYl9yeF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHUxNiBlcF9wa3RsZW4sIGJvb2wgc3Bhbilcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzEtfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjMyOkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2luaXQpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTMzLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTM0PXZvaWQgbWN0cF91c2JsaWJfcnhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNy19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6Mzg6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzktXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQ0PWludCBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTk3LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzo5ODpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy05OS1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MTQxPWludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzMtfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjIzNDpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjM1LVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0yNDA9dm9pZCBtY3RwX3VzYmxpYl9yeF9jYW5jZWwoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjQ0LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyNDU6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY2FuY2VsKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yNDYtXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTI1OT12b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjY4LX1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyNjk6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfaW5pdCk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjcwLVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0zNDk9dm9pZCAqbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4KVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNTItfVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM1MzpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jdHhfcHJpdik7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzU0LVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0zNTY9dm9pZCBtY3RwX3VzYmxpYl90eF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM1OS19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MzYwOkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM2MS1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NDM5PXZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ0Ny19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NDQ4OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ0OS1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NDkzPWludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5Ny19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NTk4OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3B1c2gpO1xuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5OS1cbi0tXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9NjAxPXZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYxNi19XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6NjE3OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNjE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMyMwoJCQkJCQkJb3V0cHV0OiAyNzMKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUGxhbiBmb3IgRnV6emluZyB0aGUgTUNUUCBVU0IgVHJhbnNwb3J0IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoaXMgbmV3IE1DVFAgVVNCIHRyYW5zcG9ydCBkcml2ZXIgdGhhdCB1dGlsaXplcyB0aGUgY29tbW9uIGxpYnJhcnkuIEkgbmVlZCB0byBkZWZpbmUgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBnb2luZyB0byB0YXJnZXQgd2l0aGluIEZvY3VzU3ltYm9scy4gSXQgbG9va3MgbGlrZSBJJiMzOTtsbCB3YW50IHRvIGluY2x1ZGUgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGluaXRpYWxpemF0aW9uLCBmaW5hbGl6YXRpb24sIHByZXBhcmF0aW9uLCBjb21wbGV0aW9uLCBhbmQgY2FuY2VsbGF0aW9uIGZ1bmN0aW9uczogYG1jdHBfdXNibGliX3J4X2luaXRgLCBgbWN0cF91c2JsaWJfcnhfZmluaWAsIGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3J4X2NhbmNlbGAsIGBtY3RwX3VzYmxpYl90eF9pbml0YCwgYG1jdHBfdXNibGliX3R4X2ZpbmlgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgLgoKTmV4dCwgSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50LiBJIGtub3cgSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIGBNQ1RQYCwgYE1DVFBfVFJBTlNQT1JUX1VTQmAsIGFuZCBldmVuIHRob3VnaCBpdCYjMzk7cyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBNQ1RQX1RSQU5TUE9SVF9VU0JgLCBpdCYjMzk7cyBnb29kIHByYWN0aWNlIHRvIGluY2x1ZGUgYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAuIEkgY29uc2lkZXJlZCBgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RgLCBidXQgdGhhdCYjMzk7cyBhIEtVbml0IHRlc3QsIGFuZCBmdXp6aW5nIHRoZSB0ZXN0IGl0c2VsZiBpc24mIzM5O3QgdGhlIGdvYWwgaGVyZTsgd2UgY2FuIGVuYWJsZSBpdCBsYXRlciBpZiBuZWVkZWQsIHRob3VnaCBLVW5pdCB0ZXN0cyB1c3VhbGx5IHJ1biBzZXBhcmF0ZWx5LiBBbHNvLCBzaW5jZSBgTUNUUF9UUkFOU1BPUlRfVVNCYCByZWxpZXMgb24gYFVTQmAsIHRoYXQgbXVzdCBiZSBlbmFibGVkLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gQWgsIHJpZ2h0LCBgTUNUUGAgZGVwZW5kcyBvbiBgTkVUYCwgc28gdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgdG9vLiBTbyBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBnb2luZyB0byBiZTogYE1DVFBgLCBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYFVTQmAsIGFuZCBgTkVUYC4KCkZpbmFsbHksIHRoZSB0YXJnZXQgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIG9yIGR1bW15X2hjZCBpbiBRRU1VLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGlzIHBsYW4sIHNvIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUNUUCYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9VU0ImIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2luaXQmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfZmluaSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2NhbmNlbCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9pbml0JiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X2ZpbmkmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfcHVzaCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X2NhbmNlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCAobWN0cC11c2JsaWIpIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIE1DVFAgVVNCIGRyaXZlciB0byB1c2UgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgYW5kIGhhbmRsZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfVVNCJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9pbml0JiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3J4X2ZpbmkmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfcnhfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl9yeF9jYW5jZWwmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfaW5pdCYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9maW5pJiMzNDssCiAgICAmIzM0O21jdHBfdXNibGliX3R4X3B1c2gmIzM0OywKICAgICYjMzQ7bWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDttY3RwX3VzYmxpYl90eF9jYW5jZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgKG1jdHAtdXNibGliKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNQ1RQIFVTQiBkcml2ZXIgdG8gdXNlIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGFuZCBoYW5kbGVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MTYuMjM1NTc3NjU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5NjAyNDk0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1jdHBfdXNibGliX3J4X2luaXRcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2ZpbmlcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X3ByZXBhcmVcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jYW5jZWxcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2luaXRcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2ZpbmlcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3B1c2hcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2NhbmNlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0IChtY3RwLXVzYmxpYikgYW5kIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgTUNUUCBVU0IgZHJpdmVyIHRvIHVzZSBpdC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIGR1bW15X2hjZCBvciByYXctZ2FkZ2V0KSBhbmQgaGFuZGxlcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MTYuMjM1NTg3NTI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2NjU0MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTNiOTZlYjk2NDUzYTIwNDRkZGEzNzEzZjU4YmY2YTk4ODAyOGIzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAwODo1MzoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWcgYi9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcXG5pbmRleCBjZjMyNWFiMGIxZWY1NS4uYzQwYWM5YzY2NWI3NTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxuQEAgLTQ3LDkgKzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcXG4gXFx0ICBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBJM0MgYnVzXFxuIFxcdCAgaGF2aW5nIGEgXFxcIm1jdHAtY29udHJvbGxlclxcXCIgZGV2aWNldHJlZSBwcm9wZXJ0eS5cXG4gXFxuK2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4rXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuK1xcdGRlcGVuZHMgb24gVVNCXFxuK1xcdGhlbHBcXG4rXFx0ICBDb21tb24gcHJvdG9jb2wgaGFuZGxpbmcgZnVuY3Rpb25zIGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydFxcbitcXHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcXG4rXFx0ICB0cmFuc3BvcnQgZHJpdmVyXFxuK1xcbitcXHQgIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgdGhlIHRyYW5zcG9ydCBkcml2ZXIuXFxuK1xcbitjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCTElCX1RFU1RcXG4rICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbisgICAgICAgIGRlcGVuZHMgb24gTUNUUF9UUkFOU1BPUlRfVVNCTElCPXkgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbisgICAgICAgIGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuK1xcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXFxuIFxcdHRyaXN0YXRlIFxcXCJNQ1RQIFVTQiB0cmFuc3BvcnRcXFwiXFxuIFxcdGRlcGVuZHMgb24gVVNCXFxuK1xcdHNlbGVjdCBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG4gXFx0aGVscFxcbiBcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxcbiBcXHQgIGRlZmluZWQgYnkgRE1URiBzcGVjaWZpY2F0aW9uIERTUDAyODMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuaW5kZXggYzM2MDA2ODQ5YTFlN2QuLmM4NzBiNjJkM2YxYzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlXFxuQEAgLTIsMyArMiw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgKz0gbWN0cC1zZXJpYWwub1xcbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTJDKSArPSBtY3RwLWkyYy5vXFxuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JM0MpICs9IG1jdHAtaTNjLm9cXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgKz0gbWN0cC11c2Iub1xcbitvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfVVNCTElCKSArPSBtY3RwLXVzYmxpYi5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li41NDJhNTcwYzc2Y2M5OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcXG4rKysgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcXG5AQCAtMyw5ICszLDkgQEBcXG4gICogbWN0cC11c2IuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGJpbmRpbmcgZHJpdmVyLlxcbiAgKlxcbiAgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcXG4tICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4wLjEucGRmXFxuKyAqIGh0dHBzOi8vd3d3LmRtdGYub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc3RhbmRhcmRzL2RvY3VtZW50cy9EU1AwMjgzXzEuMS4wLnBkZlxcbiAgKlxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuQEAgLTIyLDk1ICsyMiwxMTUgQEBcXG4gc3RydWN0IG1jdHBfdXNiIHtcXG4gXFx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjtcXG4gXFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XFxuK1xcdGJvb2wgc3BhbjtcXG4gXFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcbiBcXHR1OCBlcF9pbjtcXG4gXFx0dTggZXBfb3V0O1xcbiBcXG4tXFx0c3RydWN0IHVyYiAqdHhfdXJiO1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggcng7XFxuIFxcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcXG4rXFx0aW50IGluX2Vycl9jb3VudDtcXG4rXFx0aW50IGluX2Vycl9vcmlnO1xcbitcXHRib29sIGNsZWFyX2hhbHQ7XFxuIFxcbiBcXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xcbiBcXHRzcGlubG9ja190IHJ4X2xvY2s7XFxuIFxcdGJvb2wgcnhfc3RvcHBlZDtcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xcbitcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4IHR4O1xcbitcXHRzdHJ1Y3QgdXNiX2FuY2hvciB0eF9hbmNob3I7XFxuK1xcdC8qIHNlcmlhbGlzZXMgdHhfcW1lbSB1cGRhdGVzIHRvIG5ldGRldiBxdWV1ZSBzdGF0ZXMgKi9cXG4rXFx0c3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7XFxuK1xcdGludCB0eF9xbWVtO1xcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UgPSAweDAwLFxcbitcXHRNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMixcXG4gfTtcXG4gXFxuKy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcXG4rICogbWF5IHZhcnkgYSBsb3QgYmV0d2VlbiBzcGFubmluZy0gYW5kIG5vbi1zcGFubmluZyBtb2Rlcy4gSW4gc3Bhbm5pbmcgbW9kZSxcXG4rICogdGhpcyB3aWxsIGFsbG93IGZvciBhIGNvdXBsZSBvZiBtYXgtc2l6ZWQgdHJhbnNmZXJzIHRvIGJlIGluIGZsaWdodC4gSW5cXG4rICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxcbisgKlxcbisgKiBXZSB3YW50IHRvIGF2b2lkIGRpc2FibGluZyB0aGUgdHggcXVldWUgaWYgcG9zc2libGU7IGRvaW5nIHNvIHdpbGwgZW5kIHVwXFxuKyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXFxuKyAqIHNvIGNhbiBubyBsb25nZXIgcGVyZm9ybSB0cmFuc2ZlciBwYWNraW5nLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xcbitcXG4gc3RhdGljIHZvaWQgbWN0cF91c2Jfb3V0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVxcdTAwM2Vjb250ZXh0O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuLVxcdGludCBzdGF0dXM7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG4rXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4tXFx0c3RhdHVzID0gdXJiLVxcdTAwM2VzdGF0dXM7XFxuK1xcdG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUodHhfY3R4LCBuZXRkZXYsIHVyYi1cXHUwMDNlc3RhdHVzID09IDApO1xcbiBcXG4tXFx0c3dpdGNoIChzdGF0dXMpIHtcXG4tXFx0Y2FzZSAtRU5PRU5UOlxcbi1cXHRjYXNlIC1FQ09OTlJFU0VUOlxcbi1cXHRjYXNlIC1FU0hVVERPV046XFxuLVxcdGNhc2UgLUVQUk9UTzpcXG4tXFx0XFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIDA6XFxuLVxcdFxcdGRldl9kc3RhdHNfdHhfYWRkKG5ldGRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRuZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7XFxuLVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJ1bmV4cGVjdGVkIHR4IHVyYiBzdGF0dXM6ICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbi1cXHRcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQobmV0ZGV2KTtcXG4tXFx0fVxcbitcXHR1c2JfZnJlZV91cmIodXJiKTtcXG4gXFxuLVxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xcbitcXHRtY3RwX3VzYi1cXHUwMDNldHhfcW1lbSAtPSBsZW47XFxuK1xcdGlmIChtY3RwX3VzYi1cXHUwMDNldHhfcW1lbSBcXHUwMDNjIFRYX1FNRU1fTUFYIFxcdTAwMjZcXHUwMDI2IG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4rXFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbitzdGF0aWMgaW50IG1jdHBfdXNiX3R4X3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxcbitcXHRcXHRcXHQgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4ge1xcbi1cXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbi1cXHR1bnNpZ25lZCBpbnQgcGxlbjtcXG4rXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCB1cmIgKnVyYjtcXG4gXFx0aW50IHJjO1xcbiBcXG4tXFx0cGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbi1cXG4tXFx0aWYgKHBsZW4gKyBzaXplb2YoKmhkcikgXFx1MDAzZSBNQ1RQX1VTQl9YRkVSX1NJWkUpXFxuLVxcdFxcdGdvdG8gZXJyX2Ryb3A7XFxuLVxcbi1cXHRyYyA9IHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqaGRyKSk7XFxuLVxcdGlmIChyYylcXG4tXFx0XFx0Z290byBlcnJfZHJvcDtcXG4tXFxuLVxcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcXG4tXFx0aWYgKCFoZHIpXFxuLVxcdFxcdGdvdG8gZXJyX2Ryb3A7XFxuLVxcbi1cXHRoZHItXFx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuLVxcdGhkci1cXHUwMDNlcnN2ZCA9IDA7XFxuLVxcdGhkci1cXHUwMDNlbGVuID0gcGxlbiArIHNpemVvZigqaGRyKTtcXG4tXFxuLVxcdHVyYiA9IG1jdHBfdXNiLVxcdTAwM2V0eF91cmI7XFxuK1xcdHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmICghdXJiKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXFx1MDAzZXVzYmRldixcXG4gXFx0XFx0XFx0ICB1c2Jfc25kYnVsa3BpcGUobWN0cF91c2ItXFx1MDAzZXVzYmRldiwgbWN0cF91c2ItXFx1MDAzZWVwX291dCksXFxuLVxcdFxcdFxcdCAgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbixcXG4tXFx0XFx0XFx0ICBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHNrYik7XFxuK1xcdFxcdFxcdCAgZGF0YSwgbGVuLCBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHR4X2N0eCk7XFxuK1xcbitcXHRpZiAobWN0cF91c2ItXFx1MDAzZXNwYW4pXFxuK1xcdFxcdHVyYi1cXHUwMDNldHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUO1xcbitcXG4rXFx0dXNiX2FuY2hvcl91cmIodXJiLCBcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXR4X2FuY2hvcik7XFxuIFxcbi1cXHQvKiBTdG9wcyBUWCBxdWV1ZSBmaXJzdCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uIHdpdGggVVJCIGNvbXBsZXRlICovXFxuLVxcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcXG4gXFx0cmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAocmMpIHtcXG4tXFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShkZXYpO1xcbi1cXHRcXHRnb3RvIGVycl9kcm9wO1xcbitcXHRcXHRuZXRkZXZfZGJnKG1jdHBfdXNiLVxcdTAwM2VuZXRkZXYsIFxcXCJUWCB1cmIgc3VibWl0IGZhaWxlZCwgJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0XFx0dXNiX3VuYW5jaG9yX3VyYih1cmIpO1xcbitcXHRcXHR1c2JfZnJlZV91cmIodXJiKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0bWN0cF91c2ItXFx1MDAzZXR4X3FtZW0gKz0gbGVuO1xcbitcXHRcXHRpZiAobWN0cF91c2ItXFx1MDAzZXR4X3FtZW0gXFx1MDAzZT0gVFhfUU1FTV9NQVgpXFxuK1xcdFxcdFxcdG5ldGlmX3N0b3BfcXVldWUobWN0cF91c2ItXFx1MDAzZW5ldGRldik7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB0eF9vcHMgPSB7XFxuK1xcdC5zZW5kID0gbWN0cF91c2JfdHhfc2VuZCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBuZXRkZXZfdHhfdCBtY3RwX3VzYl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRib29sIG1vcmUgPSBuZXRkZXZfeG1pdF9tb3JlKCk7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90eF9wdXNoKGRldiwgXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eCwgc2tiLCBtb3JlKTtcXG4gXFxuLWVycl9kcm9wOlxcbi1cXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcXG4tXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG4gXFxuQEAgLTEyNSwyNCArMTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xcbiBzdGF0aWMgaW50IG1jdHBfdXNiX3J4X3F1ZXVlKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGdmcF90IGdmcClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXHR2b2lkICpidWY7XFxuIFxcdGludCByYztcXG4gXFxuLVxcdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LCBNQ1RQX1VTQl9YRkVSX1NJWkUsIGdmcCk7XFxuLVxcdGlmICghc2tiKSB7XFxuLVxcdFxcdHJjID0gLUVOT01FTTtcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKG1jdHBfdXNiLVxcdTAwM2VuZXRkZXYsIFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2YnVmLCBcXHUwMDI2bGVuLCBnZnApO1xcbitcXHRpZiAocmMpXFxuIFxcdFxcdGdvdG8gZXJyX3JldHJ5O1xcbi1cXHR9XFxuIFxcbiBcXHR1c2JfZmlsbF9idWxrX3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiLCBtY3RwX3VzYi1cXHUwMDNldXNiZGV2LFxcbiBcXHRcXHRcXHQgIHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cXHUwMDNlZXBfaW4pLFxcbi1cXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGF0YSwgTUNUUF9VU0JfWEZFUl9TSVpFLFxcbi1cXHRcXHRcXHQgIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBza2IpO1xcbitcXHRcXHRcXHQgIGJ1ZiwgbGVuLCBtY3RwX3VzYl9pbl9jb21wbGV0ZSwgbWN0cF91c2IpO1xcbiBcXG4gXFx0cmMgPSB1c2Jfc3VibWl0X3VyYihtY3RwX3VzYi1cXHUwMDNlcnhfdXJiLCBnZnApO1xcbiBcXHRpZiAocmMpIHtcXG4gXFx0XFx0bmV0ZGV2X2RiZyhtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2LCBcXFwicnggdXJiIHN1Ym1pdCBmYWlsdXJlOiAlZFxcXFxuXFxcIiwgcmMpO1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0bWN0cF91c2JsaWJfcnhfY2FuY2VsKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngpO1xcbiBcXHRcXHRpZiAocmMgPT0gLUVOT01FTSlcXG4gXFx0XFx0XFx0Z290byBlcnJfcmV0cnk7XFxuIFxcdH1cXG5AQCAtMTU3LDE0ICsxNzYsMzQgQEAgc3RhdGljIGludCBtY3RwX3VzYl9yeF9xdWV1ZShzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBnZnBfdCBnZnApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJ4X2Vycl9tYXggPSAxMDtcXG4rXFxuKy8qIFJldHVybnMgLTEgaWYgd2UgaGF2ZSBoaXQgZXhjZXNzaXZlIGVycm9ycywgemVybyBvdGhlcndpc2UuICovXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JfaW5fdXJiX2VycihzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiLCBpbnQgc3RhdHVzLFxcbitcXHRcXHRcXHQgICAgICAgYm9vbCBzdGFsbGVkKVxcbit7XFxuK1xcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4rXFxuK1xcdGlmICghbWN0cF91c2ItXFx1MDAzZWluX2Vycl9jb3VudCsrKVxcbitcXHRcXHRtY3RwX3VzYi1cXHUwMDNlaW5fZXJyX29yaWcgPSBzdGF0dXM7XFxuK1xcbitcXHRpZiAobWN0cF91c2ItXFx1MDAzZWluX2Vycl9jb3VudCBcXHUwMDNlPSByeF9lcnJfbWF4KSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobWN0cF91c2ItXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcImV4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSVzIElOIEVQLCBmaXJzdDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHN0YWxsZWQgPyBcXFwiIChzdGFsbGVkKVxcXCIgOiBcXFwiXFxcIixcXG4rXFx0XFx0XFx0ICAgbWN0cF91c2ItXFx1MDAzZWluX2Vycl9vcmlnKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiB7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2IgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBza2ItXFx1MDAzZWRldjtcXG4tXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XFxuLVxcdHVuc2lnbmVkIGludCBsZW47XFxuLVxcdGludCBzdGF0dXM7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cXHUwMDNlbmV0ZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpbnQgcmMsIHN0YXR1cztcXG4gXFxuIFxcdHN0YXR1cyA9IHVyYi1cXHUwMDNlc3RhdHVzO1xcbiBcXG5AQCAtMTcyLDgwICsyMTEsNDMgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRjYXNlIC1FTk9FTlQ6XFxuIFxcdGNhc2UgLUVDT05OUkVTRVQ6XFxuIFxcdGNhc2UgLUVTSFVURE9XTjpcXG4tXFx0Y2FzZSAtRVBST1RPOlxcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHRjYXNlIDA6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHQvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbid0IHJlc3VibWl0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuLVxcbi1cXHRsZW4gPSB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGg7XFxuLVxcdF9fc2tiX3B1dChza2IsIGxlbik7XFxuLVxcbi1cXHR3aGlsZSAoc2tiKSB7XFxuLVxcdFxcdHN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDtcXG4tXFx0XFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbi1cXHRcXHR1OCBwa3RfbGVuOyAvKiBsZW5ndGggb2YgTUNUUCBwYWNrZXQsIG5vIFVTQiBoZWFkZXIgKi9cXG4tXFxuLVxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuLVxcdFxcdGhkciA9IHNrYl9wdWxsX2RhdGEoc2tiLCBzaXplb2YoKmhkcikpO1xcbi1cXHRcXHRpZiAoIWhkcilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHRpZiAoYmUxNl90b19jcHUoaGRyLVxcdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xcbi1cXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInJ4OiBpbnZhbGlkIGlkICUwNHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgIGJlMTZfdG9fY3B1KGhkci1cXHUwMDNlaWQpKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmIChoZHItXFx1MDAzZWxlbiBcXHUwMDNjXFxuLVxcdFxcdCAgICBzaXplb2Yoc3RydWN0IG1jdHBfaGRyKSArIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSkge1xcbi1cXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInJ4OiBzaG9ydCBwYWNrZXQgKGhkcikgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgIGhkci1cXHUwMDNlbGVuKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qIHdlIGtub3cgd2UgaGF2ZSBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikgaGVyZSAqL1xcbi1cXHRcXHRwa3RfbGVuID0gaGRyLVxcdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XFxuLVxcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pIHtcXG4tXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuLVxcdFxcdFxcdFxcdCAgIFxcXCJyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICBoZHItXFx1MDAzZWxlbiwgc2tiLVxcdTAwM2VsZW4pO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKHBrdF9sZW4gXFx1MDAzYyBza2ItXFx1MDAzZWxlbikge1xcbi1cXHRcXHRcXHQvKiBtb3JlIHBhY2tldHMgbWF5IGZvbGxvdyAtIGNsb25lIHRvIGEgbmV3XFxuLVxcdFxcdFxcdCAqIHNrYiB0byB1c2Ugb24gdGhlIG5leHQgaXRlcmF0aW9uXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxuLVxcdFxcdFxcdGlmIChza2IyKSB7XFxuLVxcdFxcdFxcdFxcdGlmICghc2tiX3B1bGwoc2tiMiwgcGt0X2xlbikpIHtcXG4tXFx0XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYjIpO1xcbi1cXHRcXHRcXHRcXHRcXHRza2IyID0gTlVMTDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNrYl90cmltKHNrYiwgcGt0X2xlbik7XFxuLVxcdFxcdH1cXG4gXFxuLVxcdFxcdGRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRjYXNlIC1FUElQRTpcXG4rXFx0XFx0LyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqL1xcbitcXHRcXHRyYyA9IG1jdHBfdXNiX2luX3VyYl9lcnIobWN0cF91c2IsIHN0YXR1cywgdHJ1ZSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0bWN0cF91c2ItXFx1MDAzZWNsZWFyX2hhbHQgPSB0cnVlO1xcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aWYgKCFtY3RwX3VzYi1cXHUwMDNlcnhfc3RvcHBlZClcXG4rXFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcnhfcmV0cnlfd29yayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgUlhfUkVUUllfREVMQVkpO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfTUNUUCk7XFxuLVxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbi1cXHRcXHRjYiA9IF9fbWN0cF9jYihza2IpO1xcbi1cXHRcXHRjYi1cXHUwMDNlaGFsZW4gPSAwO1xcbi1cXHRcXHRuZXRpZl9yeChza2IpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRjYXNlIC1FVElNRTpcXG4rXFx0Y2FzZSAtRVBST1RPOlxcbitcXHRjYXNlIC1FSUxTRVE6XFxuK1xcdGNhc2UgLUVPVkVSRkxPVzpcXG4rXFx0XFx0LyogcG9zc2libHkgdHJhbnNpZW50OyByZWNvcmQgZmlyc3QgZmFpbHVyZSwgcmVzdWJtaXQgKi9cXG4rXFx0XFx0cmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0c2tiID0gc2tiMjtcXG4rXFx0Y2FzZSAwOlxcbitcXHRcXHRtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcngsIHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCk7XFxuK1xcdFxcdG1jdHBfdXNiLVxcdTAwM2Vpbl9lcnJfY291bnQgPSAwO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHNrYilcXG4tXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLVxcbiBcXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0FUT01JQyk7XFxuIH1cXG4gXFxuQEAgLTI1Myw2ICsyNTUsMzAgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfcnhfcmV0cnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWN0cF91c2IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCByeF9yZXRyeV93b3JrLndvcmspO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHQvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovXFxuK1xcdGlmIChtY3RwX3VzYi1cXHUwMDNlY2xlYXJfaGFsdCkge1xcbitcXHRcXHRpbnQgcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cXHUwMDNldXNiZGV2LCBtY3RwX3VzYi1cXHUwMDNlZXBfaW4pO1xcbitcXG4rXFx0XFx0cmMgPSB1c2JfY2xlYXJfaGFsdChtY3RwX3VzYi1cXHUwMDNldXNiZGV2LCBwaXBlKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobWN0cF91c2ItXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcImNhbid0IGNsZWFyIElOIEVQIGhhbHQ6ICVkXFxcXG5cXFwiLCByYyk7XFxuK1xcbitcXHRcXHRcXHRpZiAoKyttY3RwX3VzYi1cXHUwMDNlaW5fZXJyX2NvdW50IFxcdTAwM2U9IHJ4X2Vycl9tYXgpXFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRpZiAoIW1jdHBfdXNiLVxcdTAwM2VyeF9zdG9wcGVkKVxcbitcXHRcXHRcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeF9yZXRyeV93b3JrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSWF9SRVRSWV9ERUxBWSk7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2VyeF9sb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRtY3RwX3VzYi1cXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRtY3RwX3VzYl9yeF9xdWV1ZShtY3RwX3VzYiwgR0ZQX0tFUk5FTCk7XFxuIH1cXG5AQCAtMjYyLDYgKzI4OCw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuIFxcdFdSSVRFX09OQ0UobWN0cF91c2ItXFx1MDAzZXJ4X3N0b3BwZWQsIGZhbHNlKTtcXG4rXFx0bWN0cF91c2ItXFx1MDAzZWNsZWFyX2hhbHQgPSBmYWxzZTtcXG4rXFx0bWN0cF91c2ItXFx1MDAzZWluX2Vycl9jb3VudCA9IDA7XFxuIFxcbiBcXHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xcbiBcXG5AQCAtMjg0LDcgKzMxMiwxMSBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNlcnhfcmV0cnlfd29yayk7XFxuIFxcbiBcXHR1c2Jfa2lsbF91cmIobWN0cF91c2ItXFx1MDAzZXJ4X3VyYik7XFxuLVxcdHVzYl9raWxsX3VyYihtY3RwX3VzYi1cXHUwMDNldHhfdXJiKTtcXG4rXFxuK1xcdHVzYl9raWxsX2FuY2hvcmVkX3VyYnMoXFx1MDAyNm1jdHBfdXNiLVxcdTAwM2V0eF9hbmNob3IpO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfY2FuY2VsKFxcdTAwMjZtY3RwX3VzYi1cXHUwMDNldHgsIGRldiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSk7XFxuK1xcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcXHUwMDI2bWN0cF91c2ItXFx1MDAzZXJ4KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMwMSw3ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9uZXRkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGRldi1cXHUwMDNlbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcXG4gXFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gTUNUUF9VU0JfTVRVX01JTjtcXG4tXFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfTVRVX01BWDtcXG4rXFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTUNUUF9VU0JfMV8wX01UVV9NQVg7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcXG4gXFx0ZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcXG5AQCAtMzE3LDYgKzM0OSw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcdHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcdHN0cnVjdCBtY3RwX3VzYiAqZGV2O1xcbitcXHRib29sIHNwYW47XFxuIFxcdGludCByYztcXG4gXFxuIFxcdC8qIG9ubHkgb25lIGFsdGVybmF0ZSAqL1xcbkBAIC0zMjgsNiArMzYxLDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHR9XFxuIFxcbitcXHRzcGFuID0gaWZhY2VfZGVzYy1cXHUwMDNlZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gTUNUUF9VU0JfU1VCQ0xBU1NfU1BBTjtcXG4rXFxuIFxcdG5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmRldiksIFxcXCJtY3RwdXNiJWRcXFwiLCBORVRfTkFNRV9FTlVNLFxcbiBcXHRcXHRcXHQgICAgICBtY3RwX3VzYl9uZXRkZXZfc2V0dXApO1xcbiBcXHRpZiAoIW5ldGRldilcXG5AQCAtMzM1LDMzICszNzAsNDYgQEAgc3RhdGljIGludCBtY3RwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFxuIFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXFx1MDAyNmludGYtXFx1MDAzZWRldik7XFxuIFxcdGRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGRldi1cXHUwMDNlc3BhbiA9IHNwYW47XFxuIFxcdGRldi1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbiBcXHRkZXYtXFx1MDAzZXVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIFxcdGRldi1cXHUwMDNlaW50ZiA9IGludGY7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRpZiAoZGV2LVxcdTAwM2VzcGFuKVxcbitcXHRcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzFfTVRVX01BWDtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRldi1cXHUwMDNldHhfcW1lbV9sb2NrKTtcXG4gXFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xcbiBcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4LCBsZTE2X3RvX2NwdShlcF9pbi1cXHUwMDNld01heFBhY2tldFNpemUpLFxcbitcXHRcXHRcXHRcXHQgZGV2LVxcdTAwM2VzcGFuKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX25ldGRldjtcXG4rXFx0bWN0cF91c2JsaWJfdHhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V0eCwgXFx1MDAyNnR4X29wcywgZGV2LCBkZXYtXFx1MDAzZXNwYW4pO1xcbitcXHRpbml0X3VzYl9hbmNob3IoXFx1MDAyNmRldi1cXHUwMDNldHhfYW5jaG9yKTtcXG4rXFxuIFxcdGRldi1cXHUwMDNlZXBfaW4gPSBlcF9pbi1cXHUwMDNlYkVuZHBvaW50QWRkcmVzcztcXG4gXFx0ZGV2LVxcdTAwM2VlcF9vdXQgPSBlcF9vdXQtXFx1MDAzZWJFbmRwb2ludEFkZHJlc3M7XFxuIFxcbi1cXHRkZXYtXFx1MDAzZXR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XFxuIFxcdGRldi1cXHUwMDNlcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTtcXG4tXFx0aWYgKCFkZXYtXFx1MDAzZXR4X3VyYiB8fCAhZGV2LVxcdTAwM2VyeF91cmIpIHtcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZXJ4X3VyYikge1xcbiBcXHRcXHRyYyA9IC1FTk9NRU07XFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWVfdXJicztcXG4rXFx0XFx0Z290byBlcnJfZmluaV9yeHR4O1xcbiBcXHR9XFxuIFxcbiBcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2ZGV2LVxcdTAwM2VyeF9yZXRyeV93b3JrLCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKTtcXG4gXFxuIFxcdHJjID0gbWN0cF9yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2LCBOVUxMLCBNQ1RQX1BIWVNfQklORElOR19VU0IpO1xcbiBcXHRpZiAocmMpXFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWVfdXJicztcXG4rXFx0XFx0Z290byBlcnJfZnJlZV91cmI7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWVycl9mcmVlX3VyYnM6XFxuLVxcdHVzYl9mcmVlX3VyYihkZXYtXFx1MDAzZXR4X3VyYik7XFxuK2Vycl9mcmVlX3VyYjpcXG4gXFx0dXNiX2ZyZWVfdXJiKGRldi1cXHUwMDNlcnhfdXJiKTtcXG4rZXJyX2Zpbmlfcnh0eDpcXG4rXFx0bWN0cF91c2JsaWJfdHhfZmluaShcXHUwMDI2ZGV2LVxcdTAwM2V0eCk7XFxuK1xcdG1jdHBfdXNibGliX3J4X2ZpbmkoXFx1MDAyNmRldi1cXHUwMDNlcngpO1xcbitlcnJfZnJlZV9uZXRkZXY6XFxuIFxcdGZyZWVfbmV0ZGV2KG5ldGRldik7XFxuIFxcdHJldHVybiByYztcXG4gfVxcbkBAIC0zNzEsMTMgKzQxOSwxNSBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiBcXHRzdHJ1Y3QgbWN0cF91c2IgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuIFxcbiBcXHRtY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KGRldi1cXHUwMDNlbmV0ZGV2KTtcXG4tXFx0dXNiX2ZyZWVfdXJiKGRldi1cXHUwMDNldHhfdXJiKTtcXG4rXFx0bWN0cF91c2JsaWJfcnhfZmluaShcXHUwMDI2ZGV2LVxcdTAwM2VyeCk7XFxuK1xcdG1jdHBfdXNibGliX3R4X2ZpbmkoXFx1MDAyNmRldi1cXHUwMDNldHgpO1xcbiBcXHR1c2JfZnJlZV91cmIoZGV2LVxcdTAwM2VyeF91cmIpO1xcbiBcXHRmcmVlX25ldGRldihkZXYtXFx1MDAzZW5ldGRldik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtY3RwX3VzYl9kZXZpY2VzW10gPSB7XFxuLVxcdHsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQ1RQLCAweDAsIDB4MSkgfSxcXG4rXFx0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX0JBU0UsIDB4MSkgfSxcXG4rXFx0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4sIDB4MSkgfSxcXG4gXFx0eyAwIH0sXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWItdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWRmNDAxYTkxNGZmNTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcXG5AQCAtMCwwICsxLDQxMiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBtY3RwLXVzYmxpYi10ZXN0LmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeSxcXG4rICogdW5pdCB0ZXN0IGRlZmluaXRpb25zLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQ29kZSBDb25zdHJ1Y3QgUHR5IEx0ZFxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NrdW5pdC90ZXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9hcnAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9tY3RwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbWN0cGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYge1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0c3RydWN0IG1jdHBfZGV2ICptZGV2O1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3BrdHM7XFxuK307XFxuK1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHgge1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfcm91dGUgcnQ7XFxuK307XFxuK1xcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdC8qIHdlIGRvbid0IHRyYWNrIGFueSBUWGVkIHBhY2tldHMgYXQgcHJlc2VudCAqL1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3RwX3Rlc3RfbmV0ZGV2X29wcyA9IHtcXG4rXFx0Lm5kb19zdGFydF94bWl0ID0gbWN0cF91c2JsaWJfZGV2X3R4LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHUxNiBlcF9tYXhwYWNrZXQgPSA1MTI7XFxuK3N0YXRpYyBjb25zdCBtY3RwX2VpZF90IGxvY2FsX2VpZCA9IDg7XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0bmRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9NQ1RQO1xcbitcXHRuZGV2LVxcdTAwM2VtdHUgPSA4MTkyO1xcbitcXHRuZGV2LVxcdTAwM2VmbGFncyA9IElGRl9OT0FSUDtcXG4rXFx0bmRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZtY3RwX3Rlc3RfbmV0ZGV2X29wcztcXG4rXFx0bmRldi1cXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xcbitcXHRuZGV2LVxcdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfRFNUQVRTO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2Rldl9hY3Rpb24odm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IGRhdGE7XFxuK1xcbitcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcdGlmIChkZXYtXFx1MDAzZW1kZXYpXFxuK1xcdFxcdG1jdHBfZGV2X3B1dChkZXYtXFx1MDAzZW1kZXYpO1xcbitcXHR1bnJlZ2lzdGVyX25ldGRldihkZXYtXFx1MDAzZW5kZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpcXG4rbWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdG5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpkZXYpLCBcXFwibWN0cHRlc3QlZFxcXCIsIE5FVF9OQU1FX0VOVU0sXFxuK1xcdFxcdFxcdCAgICBtY3RwX3VzYmxpYl9kZXZfc2V0dXApO1xcbitcXHRpZiAoIW5kZXYpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0ZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGRldi1cXHUwMDNlbmRldiA9IG5kZXY7XFxuK1xcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcbitcXHRyYyA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGZyZWVfbmV0ZGV2KG5kZXYpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbiwgZGV2KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZGV2LVxcdTAwM2VtZGV2ID0gX19tY3RwX2Rldl9nZXQobmRldik7XFxuK1xcdGlmIChkZXYtXFx1MDAzZW1kZXYpXFxuK1xcdFxcdGRldi1cXHUwMDNlbWRldi1cXHUwMDNlbmV0ID0gbWN0cF9kZWZhdWx0X25ldChkZXZfbmV0KG5kZXYpKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbWRldilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0cmMgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBkZXY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9kc3Rfb3V0cHV0KHN0cnVjdCBtY3RwX2RzdCAqZHN0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X3BrdHMsIHNrYik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4ID0gZGF0YTtcXG4rXFxuK1xcdC8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtXFx1MDAzZXJ0IHdpbGwgYmUgdW5saW5rZWQuXFxuK1xcdCAqIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGlzIGFzIGV4cGVjdGVkLlxcbitcXHQgKi9cXG4rXFx0S1VOSVRfRVhQRUNUX1RSVUUoY3VycmVudC1cXHUwMDNla3VuaXRfdGVzdCxcXG4rXFx0XFx0XFx0ICByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN0eC1cXHUwMDNlcnQucmVmcykpO1xcbitcXG4rXFx0a2ZyZWUoY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqbWN0cF91c2JsaWJfdGVzdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IG1jdHBfcm91dGUgKnJ0O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eCk7XFxuK1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3R4LVxcdTAwM2VydC5saXN0KTtcXG4rXFx0cnQgPSBcXHUwMDI2Y3R4LVxcdTAwM2VydDtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZydC1cXHUwMDNlcmVmcywgMSk7XFxuK1xcbitcXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbiwgY3R4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlZGV2ID0gbWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHRlc3QpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgY3R4LVxcdTAwM2VkZXYpO1xcbitcXG4rXFx0cnQtXFx1MDAzZW1pbiA9IGxvY2FsX2VpZDtcXG4rXFx0cnQtXFx1MDAzZW1heCA9IGxvY2FsX2VpZDtcXG4rXFx0cnQtXFx1MDAzZWRzdF90eXBlID0gTUNUUF9ST1VURV9ESVJFQ1Q7XFxuK1xcdHJ0LVxcdTAwM2V0eXBlID0gUlROX0xPQ0FMO1xcbitcXHRydC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXYtXFx1MDAzZW1kZXY7XFxuK1xcdHJ0LVxcdTAwM2VvdXRwdXQgPSBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQ7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0bGlzdF9hZGRfcmN1KFxcdTAwMjZjdHgtXFx1MDAzZXJ0Lmxpc3QsIFxcdTAwMjZpbml0X25ldC5tY3RwLnJvdXRlcyk7XFxuK1xcdHJlZmNvdW50X2luYyhcXHUwMDI2cnQtXFx1MDAzZXJlZnMpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIGN0eDtcXG4rfVxcbitcXG4rLyogSW5pdCBhIE1DVFAtb3Zlci1VU0IgcGFja2V0IHdpdGhpbiBhIGJ1ZmZlci4gQGxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZVxcbisgKiBidWZmZXIgdG8gd3JpdGUsIEBwYXlsb2FkX2xlbiBpcyB0aGUgcmVwb3J0ZWQgc2l6ZSBvZiB0aGUgTUNUUC1vdmVyLVVTQlxcbisgKiBwYWNrZXQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHZvaWQgKmRhdGEsIHNpemVfdCBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBwYXlsb2FkX2xlbilcXG4re1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRzdHJ1Y3QgbWN0cF91c2JfaGRyIHVzYjtcXG4rXFx0XFx0c3RydWN0IG1jdHBfaGRyIG1jdHA7XFxuK1xcdH0gaGRyO1xcbitcXG4rXFx0aGRyLnVzYi5pZCA9IGNwdV90b19iZTE2KE1DVFBfVVNCX0RNVEZfSUQpO1xcbitcXHRoZHIudXNiLmxlbiA9IGNwdV90b19iZTE2KHBheWxvYWRfbGVuKTtcXG4rXFx0aGRyLm1jdHAudmVyID0gMTtcXG4rXFx0aGRyLm1jdHAuZGVzdCA9IGxvY2FsX2VpZDtcXG4rXFx0aGRyLm1jdHAuc3JjID0gMDtcXG4rXFx0aGRyLm1jdHAuZmxhZ3Nfc2VxX3RhZyA9IDA7XFxuK1xcbitcXHRtZW1jcHkoZGF0YSwgXFx1MDAyNmhkciwgbWluKGxlbiwgc2l6ZW9mKGhkcikpKTtcXG4rXFx0aWYgKGxlbiBcXHUwMDNlIHNpemVvZihoZHIpKVxcbitcXHRcXHRtZW1zZXQoZGF0YSArIHNpemVvZihoZHIpLCAwLCBsZW4gLSBzaXplb2YoaGRyKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjdGlvbl9yeF9maW5pKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCA9IGRhdGE7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl9yeF9maW5pKHJ4KTtcXG4rXFx0a2ZyZWUocngpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3J4ICpcXG4rbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKVxcbit7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdHJ4ID0ga3phbGxvY19vYmooKnJ4KTtcXG4rXFx0aWYgKHJ4KSB7XFxuK1xcdFxcdHJjID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBhY3Rpb25fcnhfZmluaSwgcngpO1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXHR9XFxuK1xcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCByeCk7XFxuK1xcbitcXHRyYyA9IG1jdHBfdXNibGliX3J4X2luaXQocngsIGVwX21heHBhY2tldCwgc3Bhbik7XFxuK1xcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XFxuK1xcbitcXHRyZXR1cm4gcng7XFxuK31cXG4rXFxuKy8qIFdyYXBwZXJzIGZvciB1c2JsaWIncyByeF9jb21wbGV0ZSBjYWxsYmFjaywgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkXFxuKyAqIGZyb20gYXRvbWljIGNvbnRleHRcXG4rICovXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIHJ4LCBsZW4pO1xcbitcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rLyogU2luZ2xlIHBhY2tldCwgc3RhcnRpbmcgb24gYSB0cmFuc2ZlciBib3VuZGFyeSwgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpblxcbisgKiB0aGUgdHJhbnNmZXJcXG4rICovXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3Rfcnhfc2luZ2xlKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdHZvaWQgKmJ1ZjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0Y3R4ID0gbWN0cF91c2JsaWJfdGVzdF9pbml0KHRlc3QpO1xcbitcXHRkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHJ4ID0gbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHRlc3QsIHRydWUpO1xcbitcXG4rXFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cXHUwMDNlbmRldiwgcngsXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2YnVmLCBcXHUwMDI2bGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdC8qIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIG1heHBhY2tldCBvZiB0cmFuc2ZlciBhdmFpbGFibGUgKi9cXG4rXFx0S1VOSVRfQVNTRVJUX0dFKHRlc3QsIGxlbiwgZXBfbWF4cGFja2V0KTtcXG4rXFxuK1xcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QoYnVmLCA4LCA4KTtcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCA4KTtcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmRldi1cXHUwMDNlcnhfcGt0cyk7XFxuK1xcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xcbitcXHRpZiAoc2tiKVxcbitcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLVxcdTAwM2VsZW4sIDQpO1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rfVxcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4ge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRzaXplX3Qgbl9wa3RzO1xcbitcXHRzaXplX3QgcGt0c1s2XTtcXG4rXFx0c2l6ZV90IG5feGZlcnM7XFxuK1xcdHNpemVfdCB4ZmVyc1s2XTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkXFxuK21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyhjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbiAqdCxcXG4rXFx0XFx0XFx0XFx0ICBjaGFyICpkZXNjKVxcbit7XFxuK1xcdHN0cnNjcHkoZGVzYywgdC1cXHUwMDNlbmFtZSwgS1VOSVRfUEFSQU1fREVTQ19TSVpFKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl92YWxpZGF0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpzcGFuLFxcbitcXHRcXHRcXHRcXHQgICBzaXplX3QgKmxlbilcXG4re1xcbitcXHRzaXplX3QgcGt0X2xlbiA9IDAsIHhmZXJfbGVuID0gMDtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3Bhbi1cXHUwMDNlbl9wa3RzOyBpKyspIHtcXG4rXFx0XFx0S1VOSVRfQVNTRVJUX0dFX01TRyh0ZXN0LCBzcGFuLVxcdTAwM2Vwa3RzW2ldLCA4LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBrdFsldV0gbGVuIHRvbyBzbWFsbCAoJXp1KSBmb3IgJXNcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgaSwgc3Bhbi1cXHUwMDNlcGt0c1tpXSwgc3Bhbi1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHBrdF9sZW4gKz0gc3Bhbi1cXHUwMDNlcGt0c1tpXTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNwYW4tXFx1MDAzZW5feGZlcnM7IGkrKylcXG4rXFx0XFx0eGZlcl9sZW4gKz0gc3Bhbi1cXHUwMDNleGZlcnNbaV07XFxuK1xcbitcXHRLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHBrdF9sZW4sIHhmZXJfbGVuLFxcbitcXHRcXHRcXHQgICAgXFxcImludmFsaWQgcGt0X2xlbiAoJXp1KSAhPSB4ZmVyX2xlbiAoJXp1KSBmb3IgJXNcXFwiLFxcbitcXHRcXHRcXHQgICAgcGt0X2xlbiwgeGZlcl9sZW4sIHNwYW4tXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0KmxlbiA9IHBrdF9sZW47XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4oc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICpwa3Rfc3BhbiA9IHRlc3QtXFx1MDAzZXBhcmFtX3ZhbHVlO1xcbitcXHRzaXplX3QgbGVuLCB4ZmVyX2xlbiwgb2ZmLCB4ZmVyX29mZjtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4O1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4O1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0dTggKnBrdGJ1ZjtcXG4rXFx0dm9pZCAqYnVmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHRlc3QsIHBrdF9zcGFuLCBcXHUwMDI2bGVuKTtcXG4rXFx0cGt0YnVmID0ga3VuaXRfa21hbGxvY19hcnJheSh0ZXN0LCAxLCBsZW4sIEdGUF9LRVJORUwpO1xcbitcXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcGt0YnVmKTtcXG4rXFxuK1xcdC8qIGxheSBvdXQgcGFja2V0cyAqL1xcbitcXHRmb3IgKG9mZiA9IDAsIGkgPSAwOyBpIFxcdTAwM2MgcGt0X3NwYW4tXFx1MDAzZW5fcGt0czsgaSsrKSB7XFxuK1xcdFxcdGxlbiA9IHBrdF9zcGFuLVxcdTAwM2Vwa3RzW2ldO1xcbitcXHRcXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHBrdGJ1ZiArIG9mZiwgbGVuLCBsZW4pO1xcbitcXHRcXHRvZmYgKz0gbGVuO1xcbitcXHR9XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XFxuK1xcdGRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XFxuK1xcbitcXHQvKiBmZWVkIHRyYW5zZmVycyAqL1xcbitcXHRmb3IgKG9mZiA9IDAsIHhmZXJfb2ZmID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBwa3Rfc3Bhbi1cXHUwMDNlbl94ZmVyczspIHtcXG4rXFx0XFx0eGZlcl9sZW4gPSBwa3Rfc3Bhbi1cXHUwMDNleGZlcnNbaV0gLSB4ZmVyX29mZjtcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKGRldi1cXHUwMDNlbmRldiwgcngsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YnVmLCBcXHUwMDI2bGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcXG4rXFxuK1xcdFxcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XFxuK1xcbitcXHRcXHRsZW4gPSBtaW4obGVuLCB4ZmVyX2xlbik7XFxuK1xcdFxcdG1lbWNweShidWYsIHBrdGJ1ZiArIG9mZiwgbGVuKTtcXG4rXFxuK1xcdFxcdGlmIChsZW4gPT0geGZlcl9sZW4pIHtcXG4rXFx0XFx0XFx0Lyogd2hvbGUvZW5kIHhmZXIsIHByb2NlZWQgdG8gbmV4dCAqL1xcbitcXHRcXHRcXHR4ZmVyX29mZiA9IDA7XFxuK1xcdFxcdFxcdGkrKztcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0LyogcGFydGlhbCAqL1xcbitcXHRcXHRcXHR4ZmVyX29mZiArPSBsZW47XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJjID0gbWN0cF91c2JsaWJfdGVzdF9yeF9jb21wbGV0ZShkZXYtXFx1MDAzZW5kZXYsIHJ4LCBsZW4pO1xcbitcXHRcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xcbitcXHRcXHRvZmYgKz0gbGVuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBjaGVjayByZWNlaXZlZCBwYWNrZXRzICovXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkZXYtXFx1MDAzZXJ4X3BrdHMucWxlbiwgcGt0X3NwYW4tXFx1MDAzZW5fcGt0cyk7XFxuK1xcdGZvciAoaSA9IDA7IDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X3BrdHMpO1xcbitcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKGkgXFx1MDAzYyBwa3Rfc3Bhbi1cXHUwMDNlbl9wa3RzKVxcbitcXHRcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgc2tiLVxcdTAwM2VsZW4sIHBrdF9zcGFuLVxcdTAwM2Vwa3RzW2ldIC0gNCk7XFxuK1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcXG4rXFx0LyogT25lIHBhY2tldCBjb21wbGV0ZWx5IHdpdGhpbiBhIHRyYW5zZmVyICovXFxuK1xcdHsgXFxcIjFwMXgtY29tcGxldGVcXFwiLCAxLCB7IDggfSwgMSwgeyA4IH0gfSxcXG4rXFx0LyogVHdvIHNtYWxsIHBhY2tldHMgY29tYmluZWQgd2l0aGluIG9uZSB0cmFuc2ZlciAqL1xcbitcXHR7IFxcXCIycDF4LWNvbWJpbmVkXFxcIiwgMiwgeyA4LCA4IH0sIDEsIHsgMTYgfSB9LFxcbitcXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cXG4rXFx0eyBcXFwiMXAyeC1zcGxpdC1wYXlsb2FkXFxcIiwgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxcbitcXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBVU0IgdHJhbnNwb3J0IGhlYWRlciAqL1xcbitcXHR7IFxcXCIxcDJ4LXNwbGl0LXVzYmhkclxcXCIsIDEsIHsgMTYgfSwgMiwgeyAyLCAxNCB9IH0sXFxuK1xcdC8qIEEgcGFja2V0IHNwbGl0IG92ZXIgdHdvIHRyYW5zZmVycywgYXQgdGhlIE1DVFAgaGVhZGVyICovXFxuK1xcdHsgXFxcIjFwMngtc3BsaXQtbWN0cGhkclxcXCIsIDEsIHsgMTYgfSwgMiwgeyA2LCAxMCB9IH0sXFxuK1xcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xcbitcXHR7IFxcXCIxcDN4LXNwbGl0XFxcIiwgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxcbitcXHQvKiBNYXgtc2l6ZWQgc2luZ2xlIHRyYW5zZmVyICovXFxuK1xcdHsgXFxcIjFwMXgtbGFyZ2VcXFwiLCAxLCB7IDgxOTEgfSwgMSwgeyA4MTkxIH0gfSxcXG4rXFx0LyogVHdvIGxhcmdlIHBhY2tldHMsIHNwbGl0IGF0IHRoZSB3b3JzdC1jYXNlIGZvciBhbGxvY2F0aW9uLCB3aXRoIGFcXG4rXFx0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxcbitcXHQgKi9cXG4rXFx0eyBcXFwiMnAyeC1sYXJnZS1zcGxpdFxcXCIsIDIsIHsgODE5MCwgODE5MCB9LCAyLCB7IDgxOTEsIDgxODkgfSB9LFxcbit9O1xcbitcXG4rS1VOSVRfQVJSQVlfUEFSQU0obWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbiwgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnMsXFxuK1xcdFxcdCAgbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzW10gPSB7XFxuK1xcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLFxcbitcXHRLVU5JVF9DQVNFX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sXFxuK1xcdFxcdFxcdCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLFxcbitcXHR7fVxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtY3RwX3VzYmxpYl90ZXN0X3N1aXRlID0ge1xcbitcXHQubmFtZSA9IFxcXCJtY3RwLXVzYmxpYlxcXCIsXFxuK1xcdC50ZXN0X2Nhc2VzID0gbWN0cF91c2JsaWJfdGVzdF9jYXNlcyxcXG4rfTtcXG4rXFxuK2t1bml0X3Rlc3Rfc3VpdGUobWN0cF91c2JsaWJfdGVzdF9zdWl0ZSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxOTk3Zjk4OTAyNmY5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xcbkBAIC0wLDAgKzEsNjI1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIG1jdHAtdXNibGliLmMgLSBNQ1RQLW92ZXItVVNCIChETVRGIERTUDAyODMpIHRyYW5zcG9ydCBoZWxwZXIgbGlicmFyeVxcbisgKlxcbisgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcXG4rICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL2NoOS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNiL21jdHAtdXNiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbWN0cC5oXFx1MDAzZVxcbitcXG4raW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxcbit7XFxuK1xcdGlmICghZXBfcGt0bGVuKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChlcF9wa3RsZW4gXFx1MDAyNiB+VVNCX0VORFBPSU5UX01BWFBfTUFTSylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtZW1zZXQocngsIDAsIHNpemVvZigqcngpKTtcXG4rXFx0cngtXFx1MDAzZXNwYW4gPSBzcGFuO1xcbitcXHRyeC1cXHUwMDNlZXBfcGt0bGVuID0gZXBfcGt0bGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4re1xcbitcXHRrZnJlZV9za2IocngtXFx1MDAzZXNrYik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XFxuK1xcbisvKlxcbisgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcXG4rICogYmUgcG9wdWxhdGVkIG9uIHN1Y2Nlc3MuXFxuKyAqL1xcbitpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxcbitcXHRcXHRcXHQgICB2b2lkICoqYnVmcCwgc2l6ZV90ICpsZW5wLCBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVxcdTAwM2Vza2I7XFxuK1xcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xcbitcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBza2ItXFx1MDAzZWxlbiBcXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xcbitcXHRcXHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXFxuK1xcdFxcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XFxuK1xcdFxcdHNrYiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGxlbiA9IHJ4LVxcdTAwM2VzcGFuID8gcm91bmR1cChNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCwgcngtXFx1MDAzZWVwX3BrdGxlbilcXG4rXFx0XFx0OiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFO1xcbitcXG4rXFx0aWYgKCFza2IpIHtcXG4rXFx0XFx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgbGVuLCBnZnApO1xcbitcXHRcXHRpZiAoIXNrYilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHR9IGVsc2UgaWYgKHNrYi1cXHUwMDNlY2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpIFxcdTAwM2MgcngtXFx1MDAzZWVwX3BrdGxlbikge1xcbitcXHRcXHQvKiBXZSBhbHdheXMgbmVlZCB0byByZWFsbG9jIGlmIC1cXHUwMDNlY2xvbmVkLCBhcyB3ZSBjYW5ub3RcXG4rXFx0XFx0ICogcmVzdWJtaXQgdGhlIChub3ctc2hhcmVkKSBza2IgYnVmZmVyIGZvciBwb3NzaWJsZSBETUEuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIE90aGVyd2lzZSAoaWYgd2UgaGF2ZSBhbiB1bi1jbG9uZWQgU0tCKToganVzdCBlbnN1cmUgd2VcXG4rXFx0XFx0ICogaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIHByZXZlbnQgYmFiYmxlLiBTaW5jZSB3ZSBhbGxvY2F0ZWRcXG4rXFx0XFx0ICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnlcXG4rXFx0XFx0ICogb2YgdGhhdCBzcGFjZSBmb3IgYSBwcmlvciBNQ1RQIHBhY2tldCwgYmVjYXVzZSAhY2xvbmVkKSwgd2VcXG4rXFx0XFx0ICogaGF2ZSBzdWZmaWNpZW50IGRhdGEgdG8gZmluaXNoIHRoZSBjdXJyZW50IE1DVFAgcGFja2V0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XFxuK1xcbitcXHRcXHRza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgMCwgbGVuLCBnZnApO1xcbitcXHRcXHRpZiAoIXNrYjIpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbitcXHRcXHRza2IgPSBza2IyO1xcbitcXHR9XFxuK1xcbitcXHRyeC1cXHUwMDNlc2tiID0gc2tiO1xcbitcXG4rXFx0LyogU3Bhbm5pbmcgbW9kZSBhbGxvd3MgWkxQcywgc28gd2UgZG9uJ3QgcmVxdWlyZSBleGFjdGx5IG9uZVxcbitcXHQgKiB0cmFuc2ZlciBwYWNrZXQuIElmIHdlIGhhdmUgZXh0cmEgdGFpbHJvb20sIG1heSBhcyB3ZWxsIHVzZSBpdCxcXG4rXFx0ICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSBcXHUwMDNlPSBlcF9wa3RsZW4uXFxuK1xcdCAqL1xcbitcXHRpZiAocngtXFx1MDAzZXNwYW4pXFxuK1xcdFxcdGxlbiA9IHJvdW5kZG93bihza2JfdGFpbHJvb20oc2tiKSwgcngtXFx1MDAzZWVwX3BrdGxlbik7XFxuK1xcbitcXHQqYnVmcCA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTtcXG4rXFx0KmxlbnAgPSBsZW47XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9wcmVwYXJlKTtcXG4rXFxuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IHBjcHVfZHN0YXRzICpkc3RhdHMgPSB0aGlzX2NwdV9wdHIobmV0ZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbitcXHRzdHJ1Y3QgbWN0cF9za2JfY2IgKmNiO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4rXFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpO1xcbitcXG4rXFx0Lyogd2UncmUgY2FsbGVkIGZyb20gYW4gVVJCIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIGNhbm5vdCBhc3N1bWUgbG9jYWxcXG4rXFx0ICogaXJxcyBhcmUgYWx3YXlzIGRpc2FibGVkXFxuK1xcdCAqL1xcbitcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCk7XFxuK1xcdHU2NF9zdGF0c19pbmMoXFx1MDAyNmRzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyk7XFxuK1xcdHU2NF9zdGF0c19hZGQoXFx1MDAyNmRzdGF0cy1cXHUwMDNlcnhfYnl0ZXMsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCwgZmxhZ3MpO1xcbitcXG4rXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xcbitcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFx0Y2IgPSBfX21jdHBfY2Ioc2tiKTtcXG4rXFx0Y2ItXFx1MDAzZWhhbGVuID0gMDtcXG4rXFx0bmV0aWZfcngoc2tiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZWRzdGF0cyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2ZHN0YXRzLVxcdTAwM2VzeW5jcCk7XFxuK1xcdHU2NF9zdGF0c19pbmMoXFx1MDAyNmRzdGF0cy1cXHUwMDNlcnhfZHJvcHMpO1xcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlY2VpdmUgYSBVU0IgY29tcGxldGlvbiBvZiBAbGVuIGJ5dGVzIG9mIGluY29taW5nIGRhdGEuIFdlIHdpbGwgdGhlbiBzcGxpdFxcbisgKiB0aGlzIGludG8gcGFja2V0cyBhbmQgbmV0aWZfcngoKSBlYWNoLiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgaW4gYXRvbWljXFxuKyAqIGNvbnRleHRzIC0gaWUuLCBVUkIgY29tcGxldGlvbi5cXG4rICpcXG4rICogQXNzdW1lcyBAbmV0ZGV2IHVzZXMgZHN0YXRzLlxcbisgKi9cXG4raW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cXHUwMDNlc2tiO1xcbitcXHRpbnQgcmMgPSAwO1xcbitcXG4rXFx0X19za2JfcHV0KHNrYiwgbGVuKTtcXG4rXFxuK1xcdGZvciAoOzspIHtcXG4rXFx0XFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcXG4rXFx0XFx0LyogbGVuZ3RoIG9mIE1DVFAgcGFja2V0LCBpbmNsdWRpbmcgVVNCIGhlYWRlciAqL1xcbitcXHRcXHR1MTYgcGt0X2xlbjtcXG4rXFxuK1xcdFxcdC8qIG5vIGhlYWRlciB5ZXQsIHJlc3VibWl0IGZvciB0aGUgcmVzdCBvZiB0aGUgcGFja2V0ICovXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqaGRyKSkge1xcbitcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VzcGFuKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwicng6IHRpbnkgeGZlciAoJWQpIGluIG5vbi1zcGFuIG1vZGVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdFxcdFxcdHJjID0gLUVOT01TRztcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzZXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGhkciA9IChzdHJ1Y3QgbWN0cF91c2JfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbitcXG4rXFx0XFx0aWYgKGJlMTZfdG9fY3B1KGhkci1cXHUwMDNlaWQpICE9IE1DVFBfVVNCX0RNVEZfSUQpIHtcXG4rXFx0XFx0XFx0LyogQnkgcmVzZXR0aW5nIGhlcmUsIHdpbGwgc3RhcnQgdGhlIG5leHQgSU4gdHJhbnNmZXJcXG4rXFx0XFx0XFx0ICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW5cXG4rXFx0XFx0XFx0ICogd2UgcmUtc3luYyB3aGVuIHdlIG5leHQgc2VlIGEgc3Bhbm5lZCBwYWNrZXQgYWxpZ25lZFxcbitcXHRcXHRcXHQgKiB3aXRoIHRoZSBzdGFydCBvZiBhIHRyYW5zZmVyLlxcbitcXHRcXHRcXHQgKlxcbitcXHRcXHRcXHQgKiBJbiBub24tc3Bhbm5pbmcgbW9kZSwgdGhpcyBqdXN0IG1lYW5zIHdlJ2xsIGRyb3BcXG4rXFx0XFx0XFx0ICogdGhlIGN1cnJlbnQgdHJhbnNmZXIgb25seVxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJyeDogaW52YWxpZCBpZCAlMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBiZTE2X3RvX2NwdShoZHItXFx1MDAzZWlkKSk7XFxuK1xcdFxcdFxcdHJjID0gLUVQUk9UTztcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzZXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBrdF9sZW4gPSBiZTE2X3RvX2NwdShoZHItXFx1MDAzZWxlbik7XFxuK1xcdFxcdC8qIHYxLjEsIHdpdGggc3BhbiBlbmFibGVkLCBoYXMgYSAxMy1iaXQgbGVuZ3RoICovXFxuK1xcdFxcdHBrdF9sZW4gXFx1MDAyNj0gcngtXFx1MDAzZXNwYW4gP1xcbitcXHRcXHRcXHRNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xcbitcXHRcXHRpZiAocGt0X2xlbiBcXHUwMDNjIHNpemVvZigqaGRyKSArIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LCBcXFwicng6IGludmFsaWQgbGVuICVkXFxcXG5cXFwiLCBwa3RfbGVuKTtcXG4rXFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbitcXHRcXHRcXHRnb3RvIGVycl9yZXNldDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Lyogc3BhbiBjb250aW51ZXMgdG8gdGhlIG5leHQgdHJhbnNmZXIsIHJlc3VibWl0ICovXFxuK1xcdFxcdGlmIChwa3RfbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pIHtcXG4rXFx0XFx0XFx0aWYgKCFyeC1cXHUwMDNlc3Bhbikge1xcbitcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcInJ4OiBzaG9ydCB4ZmVyICglZCB2cyAlZCkgaW4gbm9uLXNwYW4gbW9kZVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHBrdF9sZW4sIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0XFx0XFx0cmMgPSAtRVBST1RPO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXNldDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Lyogd2UgaGF2ZSAoZXhhY3RseSkgYSBjb21wbGV0ZSBwYWNrZXQsIFJYIGl0IGRpcmVjdGx5ICovXFxuK1xcdFxcdGlmIChwa3RfbGVuID09IHNrYi1cXHUwMDNlbGVuKSB7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiKTtcXG4rXFx0XFx0XFx0cngtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBtb3JlIHBhY2tldHMgZm9sbG93IC0gUlggYSBjbG9uZSBzbyB0aGF0IHdlIGNhbiBjb250aW51ZVxcbitcXHRcXHQgKiBwcm9jZXNzaW5nIHRoZSBjdXJyZW50IFNLQiwgd2hpY2ggbWF5IGJlIHRoZSBzdGFydCBvZiBhXFxuK1xcdFxcdCAqIHNwYW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdGlmIChza2IyKSB7XFxuK1xcdFxcdFxcdHNrYl90cmltKHNrYjIsIHBrdF9sZW4pO1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYjIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl9yeF9zdGF0c19zaW5nbGVfZHJvcChuZXRkZXYpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNrYl9wdWxsKHNrYiwgcGt0X2xlbik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX3Jlc2V0OlxcbitcXHRkZXZfa2ZyZWVfc2tiX2FueShyeC1cXHUwMDNlc2tiKTtcXG4rXFx0cngtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdHJldHVybiByYztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSk7XFxuK1xcbisvKlxcbisgKiBDYW5jZWwgYSByeCBjb250ZXh0OyBzdWJzZXF1ZW50IHByZXBhcmUvY29tcGxldGUgY2FsbHMgd2lsbCBub3QgYmUgYVxcbisgKiBjb250aW51YXRpb24gb2YgYW55IGRhdGEgYWxyZWFkeSByZWNlaXZlZC5cXG4rICovXFxuK3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXFxuK3tcXG4rXFx0ZGV2X2tmcmVlX3NrYl9hbnkocngtXFx1MDAzZXNrYik7XFxuK1xcdHJ4LVxcdTAwM2Vza2IgPSBOVUxMO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XFxuK1xcbisvKiB0cmFuc21pdCBjb250ZXh0OiBlbmNhcHN1bGF0ZXMgb25lIHRyYW5zZmVyICovXFxuK3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgge1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4O1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYnM7XFxuK1xcdHVuc2lnbmVkIGludCBidWZfbGVuLCBsZW47XFxuK1xcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUge1xcbitcXHRcXHRUWF9TSU5HTEUsXFxuK1xcdFxcdFRYX0ZMQVQsXFxuK1xcdH0gYnVmX3R5cGU7XFxuK1xcdHU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4rfTtcXG4rXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxcbitcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLFxcbitcXHRcXHRcXHQgdm9pZCAqcHJpdiwgYm9vbCBzcGFuKVxcbit7XFxuK1xcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpO1xcbitcXHR0eC1cXHUwMDNlb3BzID0gKm9wcztcXG4rXFx0dHgtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHR0eC1cXHUwMDNlc3BhbiA9IHNwYW47XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0eC1cXHUwMDNlbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfaW5pdCk7XFxuK1xcbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X2F2YWlsKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcXG4re1xcbitcXHRyZXR1cm4gY3R4LVxcdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUgPyAwIDogY3R4LVxcdTAwM2VidWZfbGVuIC0gY3R4LVxcdTAwM2VsZW47XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcXG4re1xcbitcXHQvKiBVc2UgdGhlIGJhc2VsaW5lIGxlbmd0aCAoaWUsIEJUVSkgYXMgYW4gYXBwcm94aW1hdGVcXG4rXFx0ICogXFxcInJlYXNvbmFibHktc2l6ZWRcXFwiIHBhY2tldCB3ZSBjb3VsZCBleHBlY3QuIElmIHRoZXJlIGlzXFxuK1xcdCAqIGluc3VmZmljaWVudCBjYXBhY2l0eSBmb3IgdGhhdCwgdGhlbiBzZW5kLlxcbitcXHQgKi9cXG4rXFx0Y29uc3Qgc2l6ZV90IHBrdF9sZW4gPSBNQ1RQX1VTQl9CVFUgKyBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XFxuK1xcbitcXHRyZXR1cm4gbWN0cF91c2JsaWJfdHhfYXZhaWwoY3R4KSBcXHUwMDNjIHBrdF9sZW47XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlIC0gaW5kaWNhdGluZyB0aGF0IHRoZSBuZXcgc2tiXFxuKyAqIGNvdWxkIG5vdCBiZSBhcHBlbmRlZC4gU28sIGVycm9ycyByZXBvcnRlZCBoZXJlIHRvIHRoZSBUWCBwYXRoIHdpbGwgcmVzdWx0XFxuKyAqIGluIHRoZSBUWCBiZWluZyB0cmFuc21pdHRlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfYXBwZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0aWYgKGN0eC1cXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpIFxcdTAwM2Mgc2tiLVxcdTAwM2VsZW4pXFxuK1xcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFxuK1xcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmN0eC1cXHUwMDNlc2ticywgc2tiKTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlbGVuICs9IHNrYi1cXHUwMDNlbGVuO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfc2VuZChzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgpXFxuK3tcXG4rXFx0dm9pZCAqYnVmO1xcbitcXG4rXFx0LyogSWYgd2UgaGF2ZSBhIHFsZW4gb2YgMSwgd2Ugb25seSBlbmRlZCB1cCBwYWNraW5nIGEgc2luZ2xlIHNrYixcXG4rXFx0ICogZGVzcGl0ZSBhbGxvY2F0aW5nIGZvciBtdWx0aXBsZS4gU2tpcCB0aGUgY29weSBhbmQgc2VuZCBkaXJlY3RseVxcbitcXHQgKiBmcm9tIHRoZSBza2IgZGF0YS5cXG4rXFx0ICovXFxuK1xcdGlmIChjdHgtXFx1MDAzZWJ1Zl90eXBlID09IFRYX1NJTkdMRSB8fCBjdHgtXFx1MDAzZXNrYnMucWxlbiA9PSAxKSB7XFxuK1xcdFxcdGJ1ZiA9IGN0eC1cXHUwMDNlc2ticy5uZXh0LVxcdTAwM2VkYXRhO1xcbitcXG4rXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZWJ1Zl90eXBlID09IFRYX0ZMQVQpIHtcXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0XFx0c2l6ZV90IHBvcyA9IDA7XFxuK1xcbitcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2Y3R4LVxcdTAwM2Vza2JzLCBza2IpIHtcXG4rXFx0XFx0XFx0c2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC1cXHUwMDNlYnVmICsgcG9zLCBza2ItXFx1MDAzZWxlbik7XFxuK1xcdFxcdFxcdHBvcyArPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0YnVmID0gY3R4LVxcdTAwM2VidWY7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY3R4LVxcdTAwM2V0eC1cXHUwMDNlb3BzLnNlbmQoY3R4LCBidWYsIGN0eC1cXHUwMDNlbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHQgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFxcdTAwMjZjdHgtXFx1MDAzZXNrYnMpKSAhPSBOVUxMKVxcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueV9yZWFzb24oc2tiLCByZWFzb24pO1xcbitcXHRrZnJlZShjdHgpO1xcbit9XFxuK1xcbit2b2lkICptY3RwX3VzYmxpYl90eF9jdHhfcHJpdihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgpXFxuK3tcXG4rXFx0cmV0dXJuIHR4X2N0eC1cXHUwMDNldHgtXFx1MDAzZXByaXY7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY3R4X3ByaXYpO1xcbitcXG4rLyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSB0eCBcXHUwMDI2IGNvbXBsZXRpb24gcGF0aCBpcyBxdWllc2NlZCAqL1xcbit2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eClcXG4re1xcbitcXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eC1cXHUwMDNlY3VyX2N0eCwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpO1xcbitcXG4rLyogTWF4IHNpemUgb2YgYSBzcGFubmVkIFRYLiBTaW5jZSB3ZSBhbGxvY2F0ZSBhIHNlcGFyYXRlIHNwYW4gYnVmZmVyLCBsaW1pdFxcbisgKiB0aGUgdHgtdGltZSBhbGxvY2F0aW9ucyB0byA0ay4gTGFyZ2VyIHBhY2tldHMgd2lsbCBiZSBzZW50IGFzIHNpbmdsZVxcbisgKiB0cmFuc2ZlcnMuXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1NQQU5fTUFYID0gNDA5NiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4KTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpcXG4rbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgIGJvb2wgc2luZ2xlKVxcbit7XFxuK1xcdGVudW0gbWN0cF91c2JsaWJfdHhfYnVmX3R5cGUgdHlwZTtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4O1xcbitcXHRzaXplX3Qgc3ogPSAwO1xcbitcXG4rXFx0aWYgKHNpbmdsZSB8fCBza2ItXFx1MDAzZWxlbiBcXHUwMDNlIFRYX1NQQU5fTUFYKSB7XFxuK1xcdFxcdHR5cGUgPSBUWF9TSU5HTEU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHR5cGUgPSBUWF9GTEFUO1xcbitcXHRcXHRzeiA9IHR4LVxcdTAwM2VzcGFuID8gVFhfU1BBTl9NQVggOiBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRjdHggPSBremFsbG9jX2ZsZXgoKmN0eCwgYnVmLCBzeiwgR0ZQX0FUT01JQyk7XFxuK1xcdGlmICghY3R4KVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGN0eC1cXHUwMDNldHggPSB0eDtcXG4rXFx0Y3R4LVxcdTAwM2VidWZfdHlwZSA9IHR5cGU7XFxuK1xcdGN0eC1cXHUwMDNlYnVmX2xlbiA9IHN6O1xcbitcXHRjdHgtXFx1MDAzZWxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZjdHgtXFx1MDAzZXNrYnMpO1xcbitcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZjdHgtXFx1MDAzZXNrYnMsIHNrYik7XFxuK1xcbitcXHRyZXR1cm4gY3R4O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRib29sIG9rKVxcbit7XFxuK1xcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3ApO1xcbitcXHRpZiAob2spIHtcXG4rXFx0XFx0LyogT25seSBpbmNsdWRlIHRoZSBuZXR3b3JrLWxheWVyIGRhdGEgaW4gdHggc3RhdHM7IHdlIGtub3dcXG4rXFx0XFx0ICogdGhhdCB0aGVyZSBpcyBhIDQtYnl0ZSBoZWFkZXIgcHVzaGVkIHRvIGFsbCBza2JzIGluXFxuK1xcdFxcdCAqIHR4X3NrYl9wcmVwYXJlKClcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHU2NCBuID0gY3R4LVxcdTAwM2Vza2JzLnFsZW47XFxuK1xcdFxcdHM2NCBsZW4gPSBjdHgtXFx1MDAzZWxlbiAtIChuICogc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKTtcXG4rXFxuK1xcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNmRzdGF0cy1cXHUwMDNldHhfcGFja2V0cywgbik7XFxuK1xcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNmRzdGF0cy1cXHUwMDNldHhfYnl0ZXMsIGxlbik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNmRzdGF0cy1cXHUwMDNldHhfZHJvcHMsIGN0eC1cXHUwMDNlc2ticy5xbGVuKTtcXG4rXFx0fVxcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlZHN0YXRzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdHhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi1cXHUwMDNlZHN0YXRzKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFxcdTAwMjZkc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2ZHN0YXRzLVxcdTAwM2V0eF9kcm9wcyk7XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNmRzdGF0cy1cXHUwMDNlc3luY3AsIGZsYWdzKTtcXG4rXFx0cHV0X2NwdV9wdHIoZGV2LVxcdTAwM2Vkc3RhdHMpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDb21wbGV0aW9uIGZvciB0aGUgLVxcdTAwM2VzZW5kKCkgb3AuIFRoaXMgd2lsbCB1cGRhdGUgbmV0ZGV2IHN0YXRzIGFuZFxcbisgKiBmcmVlIHRoZSB0eCBjb250ZXh0LlxcbisgKlxcbisgKiBMaWtlbHkgY2FsbGVkIGZyb20gKGF0b21pYykgVVJCIGNvbXBsZXRpb24gY29udGV4dC5cXG4rICovXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBvaylcXG4re1xcbitcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPVxcbitcXHRcXHRvayA/IFNLQl9DT05TVU1FRCA6IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKHR4X2N0eCwgZGV2LCBvayk7XFxuK1xcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHR4X2N0eCwgcmVhc29uKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcXG4rXFxuKy8qIFByZXBhcmUgYSBza2IgZm9yIHB1c2goKVxcbisgKlxcbisgKiBPbiBlcnJvciwgcG9wdWxhdGVzIEByZWFzb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3BhbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgZW51bSBza2JfZHJvcF9yZWFzb24gKnJlYXNvbilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHBsZW4sIG1heF9sZW47XFxuK1xcdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0bWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xcbitcXG4rXFx0cGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRpZiAocGxlbiArIHNpemVvZigqaGRyKSBcXHUwMDNlIG1heF9sZW4pIHtcXG4rXFx0XFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX0JJRztcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKmhkcikpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0KnJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT01FTTtcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuK1xcbitcXHRoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7XFxuK1xcdGlmICghaGRyKSB7XFxuK1xcdFxcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRoZHItXFx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XFxuK1xcdGhkci1cXHUwMDNlbGVuID0gY3B1X3RvX2JlMTYocGxlbiArIHNpemVvZigqaGRyKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogUHVzaCBhIG5ldyBza2IgdG8gdGhlIHRyYW5zZmVyLiBNYXkgcmVzdWx0IGluIHplcm8gb3IgbW9yZSBjYWxscyB0b1xcbisgKiBvcHMtXFx1MDAzZXNlbmQoKS5cXG4rICpcXG4rICogVGFrZXMgb3duZXJzaGlwIG9mIEBza2IsIGluY2x1ZGluZyBvbiBlcnJvci5cXG4rICovXFxuK2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXFxuK1xcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7XFxuK1xcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcXG4rXFx0Y29uc3QgaW50IG1heF90cmllcyA9IDM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGludCB0cnkgPSAxLCByYztcXG4rXFxuK1xcdHJjID0gbWN0cF91c2JsaWJfdHhfc2tiX3ByZXBhcmUoc2tiLCB0eC1cXHUwMDNlc3BhbiwgXFx1MDAyNnJlYXNvbik7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xcbitcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4rXFx0XFx0Lyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHhcXG4rXFx0XFx0ICogaXMgbm93IHNlbmRhYmxlIChpZS46ICFtb3JlKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNrYiA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xcbityZXRyeTpcXG4rXFx0LyogVHJ5IGFuZCBxdWV1ZSB0byB0aGUgY3VycmVudCBjb250ZXh0LiBXZSBleGl0IHRoaXMgY3JpdGljYWwgc2VjdGlvblxcbitcXHQgKiB3aXRoIGEgZmV3IGJpdHMgb2Ygc3RhdGU6XFxuK1xcdCAqICAtIHNlbmRfY3R4OiBpbmRpY2F0aW5nIGEgcHJpb3IgY29udGV4dCB0aGF0IG5lZWRzIHRvIGJlIHNlbnRcXG4rXFx0ICogIC0gc2tiOiBpbmRpY2F0aW5nIHRoYXQgYSBza2Igc3RpbGwgbmVlZHMgdG8gYmUgcXVldWVkL3NlbnRcXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjdHggPSB0eC1cXHUwMDNlY3VyX2N0eDtcXG4rXFx0aWYgKGN0eCkge1xcbitcXHRcXHRpZiAoc2tiKSB7XFxuK1xcdFxcdFxcdHJjID0gbWN0cF91c2JsaWJfdHhfYXBwZW5kKGN0eCwgc2tiKTtcXG4rXFx0XFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdFxcdC8qIGNhbid0IGFwcGVuZCB0byB0aGUgcGVuZGluZyB0eCAtIGRldGFjaCBmb3JcXG4rXFx0XFx0XFx0XFx0ICogc2VuZGluZywgYW5kIHdlJ2xsIGNyZWF0ZSBhIG5ldyB0eCBiZWxvdy5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdHN3YXAodHgtXFx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0Lyogd2UgaGF2ZSBxdWV1ZWQgKi9cXG4rXFx0XFx0XFx0XFx0c2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpXFxuK1xcdFxcdFxcdFxcdFxcdHN3YXAodHgtXFx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2UgaWYgKCFtb3JlKSB7XFxuK1xcdFxcdFxcdHN3YXAodHgtXFx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRpZiAoc2VuZF9jdHgpIHtcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKHNlbmRfY3R4KTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzZW5kX2N0eCwgZGV2LCBmYWxzZSk7XFxuK1xcdFxcdFxcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKHNlbmRfY3R4LCByZWFzb24pO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNlbmRfY3R4ID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0Lyogd2UgaGF2ZSBlaXRoZXIgcXVldWVkLCBvciB0aGUgcHJlcGFyZSBmYWlsZWQ7IG5vdGhpbmcgbW9yZSB0byBkbyAqL1xcbitcXHRpZiAoIXNrYilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRjdHggPSBtY3RwX3VzYmxpYl90eF9jdHhfY3JlYXRlKHR4LCBza2IsICFtb3JlKTtcXG4rXFx0aWYgKCFjdHgpIHtcXG4rXFx0XFx0bmV0ZGV2X2RiZyhkZXYsIFxcXCJUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGlmIHdlJ3JlIHJlYWR5IHRvIHNlbmQgbm93LCBubyBuZWVkIHRvIGVucXVldWUgKi9cXG4rXFx0aWYgKCFtb3JlIHx8IG1jdHBfdXNibGliX3R4X3Nob3VsZF9zZW5kKGN0eCkpIHtcXG4rXFx0XFx0cmMgPSBtY3RwX3VzYmxpYl90eF9zZW5kKGN0eCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcXG4rXFx0XFx0XFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKCF0eC1cXHUwMDNlY3VyX2N0eCkge1xcbitcXHRcXHR0eC1cXHUwMDNlY3VyX2N0eCA9IGN0eDtcXG4rXFx0XFx0Y3R4ID0gTlVMTDtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0Lyogd2UgbWF5IGhhdmUgbG9zdCB0aGUgcmFjZSB3aXRoIGEgY29uY3VycmVudCB0eDsgc2hvdWxkbid0IGhhcHBlbiwgYXNcXG4rXFx0ICogbmRvX3N0YXJ0X3htaXQgc2hvdWxkIGJlIHNlcmlhbGlzZWQgb3ZlciBvbmUgcXVldWUsIGJ1dCB0cnkgYWdhaW5cXG4rXFx0ICogZnJvbSB0aGUgdG9wLCBhcyB3ZSBtYXkgYmUgYWJsZSB0byBxdWV1ZSB0aGUgc2tiIHRvIHRoYXQgY29udGV4dC5cXG4rXFx0ICovXFxuK1xcdGlmIChjdHgpIHtcXG4rXFx0XFx0LyogdW5saW5rIHRoZSBuZXcgKHNvbGUpIHNrYiwgd2UgZG9uJ3Qgd2FudCBpdCBmcmVlZCB3aXRoIGN0eCAqL1xcbitcXHRcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlc2ticyk7XFxuK1xcdFxcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcXG4rXFx0XFx0aWYgKCsrdHJ5IFxcdTAwM2UgbWF4X3RyaWVzKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRcXHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3B1c2gpO1xcbitcXG4rLyogQ2FuY2VsIGEgdHg6IGFueSB1bi1zZW50IGNvbnRleHQgaXMgcmVsZWFzZWQuICovXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4re1xcbitcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHggPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdHN3YXAodHgtXFx1MDAzZWN1cl9jdHgsIGN0eCk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKGN0eCwgZGV2LCBmYWxzZSk7XFxuK1xcdG1jdHBfdXNibGliX3R4X2N0eF9mcmVlKGN0eCwgcmVhc29uKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpO1xcbitcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKZXJlbXkgS2VyciBcXHUwMDNjamtAY29kZWNvbnN0cnVjdC5jb20uYXVcXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiTUNUUCBVU0IgdHJhbnNwb3J0IGxpYnJhcnlcXFwiKTtcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVClcXG4rI2luY2x1ZGUgXFxcIm1jdHAtdXNibGliLXRlc3QuY1xcXCJcXG4rI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXFxuaW5kZXggYTJmNmYxZTA0ZWZiZDAuLjRiYjA0YTM3MTEwNTA0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9tY3RwLXVzYi5oXFxuQEAgLTIsNyArMiw3IEBAXFxuIC8qXFxuICAqIG1jdHAtdXNiLmggLSBNQ1RQIFVTQiB0cmFuc3BvcnQgYmluZGluZzogY29tbW9uIGRlZmluaXRpb25zLFxcbiAgKiBiYXNlZCBvbiBETVRGMDI4MyBzcGVjaWZpY2F0aW9uOlxcbi0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGZcXG4rICogaHR0cHM6Ly93d3cuZG10Zi5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9zdGFuZGFyZHMvZG9jdW1lbnRzL0RTUDAyODNfMS4xLjAucGRmXFxuICAqXFxuICAqIFRoZXNlIGFyZSBwcm90b2NvbC1sZXZlbCBkZWZpbml0aW9ucywgdGhhdCBtYXkgYmUgc2hhcmVkIGJldHdlZW4gaG9zdFxcbiAgKiBhbmQgZ2FkZ2V0IGRyaXZlcnMuXFxuQEAgLTEzLDE4ICsxMyw5NiBAQFxcbiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcXG4gI2RlZmluZSBfX0xJTlVYX1VTQl9NQ1RQX1VTQl9IXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbisvKlxcbisgKiBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCBoZWFkZXIuIERTUDAyODMgdjEuMCBoYXMgYW4gOC1iaXQgbGVuZ3RoIGZpZWxkXFxuKyAqIChwcmVjZWRlZCBieSA4IHJlc2VydmVkIGJpdHMpLCB2MS4xIGhhcyBhIDEzLWJpdCBsZW5ndGggZmllbGQgKHByZWNlZGVkIGJ5XFxuKyAqIDMgcmVzZXJ2ZWQgYml0cykuIFdlIHVzZSBhIGJlMTYgZm9yIG91ciBsZW5ndGggdG8gaGFuZGxlIHRoZSBsYXJnZXIgdjEuMVxcbisgKiByZXByZXNlbnRhdGlvbiwgYW5kIG1hc2sgYXMgYXBwcm9wcmlhdGUuXFxuKyAqL1xcbiBzdHJ1Y3QgbWN0cF91c2JfaGRyIHtcXG4gXFx0X19iZTE2XFx0aWQ7XFxuLVxcdHU4XFx0cnN2ZDtcXG4tXFx0dThcXHRsZW47XFxuK1xcdF9fYmUxNlxcdGxlbjtcXG4gfSBfX3BhY2tlZDtcXG4gXFxuLSNkZWZpbmUgTUNUUF9VU0JfWEZFUl9TSVpFXFx0NTEyXFxuKy8qIG1heCB0cmFuc2ZlciBzaXplIGZvciBEU1AwMjgzIHYxLjAgKi9cXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfWEZFUl9TSVpFXFx0NTEyXFxuICNkZWZpbmUgTUNUUF9VU0JfQlRVXFx0XFx0NjhcXG4gI2RlZmluZSBNQ1RQX1VTQl9NVFVfTUlOXFx0TUNUUF9VU0JfQlRVXFxuLSNkZWZpbmUgTUNUUF9VU0JfTVRVX01BWFxcdChVOF9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXFxuKyNkZWZpbmUgTUNUUF9VU0JfMV8wX1BLVExFTl9NQVhcXHRVOF9NQVhcXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfTVRVX01BWFxcdChNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWCAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSlcXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWFxcdEdFTk1BU0soMTIsIDApXFxuKyNkZWZpbmUgTUNUUF9VU0JfMV8xX01UVV9NQVhcXHQoTUNUUF9VU0JfMV8xX1BLVExFTl9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXFxuICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRFxcdDB4MWFiNFxcbiBcXG4rLyogbWN0cC11c2JsaWIgKi9cXG4rXFxuKy8qXFxuKyAqIFJYIGhhbmRsZTogZHJpdmVycyB3aWxsIHR5cGljYWxseSBjcmVhdGUgb25lIG9uIGluaXQsIHdoaWNoIHBlcnNpc3RzIGZvclxcbisgKiB0aGUgbGlmZSBvZiB0aGUgZHJpdmVyLiBUaGUgc2FtZSBoYW5kbGUgaXMgdXNlZCBmb3IgcHJvZ3Jlc3NpdmVcXG4rICogcHJlcGFyZSAtXFx1MDAzZSBjb21wbGV0ZSBvcGVyYXRpb25zIChmb3IgZWFjaCBpbmNvbWluZyBVU0IgdHJhbnNmZXIpLCB3aGljaFxcbisgKiByZXN1bHQgaW4gbmV0aWZfcngoKS1pbmcgdGhlIE1DVFAgcGFja2V0cyByZWNlaXZlZFxcbisgKi9cXG4rc3RydWN0IG1jdHBfdXNibGliX3J4IHtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTE2IGVwX3BrdGxlbjtcXG4rXFx0Ym9vbCBzcGFuO1xcbit9O1xcbitcXG4raW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcXG4rdm9pZCBtY3RwX3VzYmxpYl9yeF9maW5pKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xcbitcXG4raW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCxcXG4rXFx0XFx0XFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKTtcXG4rXFxuK2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgc2l6ZV90IGxlbik7XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3J4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4KTtcXG4rXFxuKy8qXFxuKyAqIFRYIGhhbmRsZTogY3JlYXRlZCBieSBtY3RwX3VzYmxpYl90eF9wdXNoKCkgZHVyaW5nIHRoZSB0eCBwYXRoLCBhbmRcXG4rICogbWF5IHBlcnNpc3QgYWNyb3NzIG11bHRpcGxlIHBhY2tldCB0cmFuc21pdHMuXFxuKyAqL1xcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4O1xcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XFxuK1xcdC8qIFN0YXJ0IGEgVVNCIFRYIGZvciBAZGF0YS4gT24gcmV0dXJuaW5nIHN1Y2Nlc3MsIHRoZSBpbXBsZW1lbnRhdGlvblxcbitcXHQgKiBtdXN0IGFycmFuZ2UgZm9yIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoKSB0byBiZSBjYWxsZWQgYXQgc29tZVxcbitcXHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpzZW5kKShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pO1xcbit9O1xcbitcXG4rc3RydWN0IG1jdHBfdXNibGliX3R4IHtcXG4rXFx0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XFxuK1xcdHZvaWQgKnByaXY7XFxuK1xcdGJvb2wgc3BhbjtcXG4rXFx0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbitcXHQvKiBjb250ZXh0IHRvIHdoaWNoIHdlIGFyZSBhZGRpbmcgcGFja2V0cywgY2xlYXJlZCBvbiBzZW5kICovXFxuK1xcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XFxuK307XFxuK1xcbit2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcXG4rXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgKm9wcywgdm9pZCAqcHJpdixcXG4rXFx0XFx0XFx0IGJvb2wgc3Bhbik7XFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcXG4rXFxuK3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCk7XFxuK1xcbitpbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxcbitcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xcbitcXG4rdm9pZCBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG9rKTtcXG4rXFxuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7XFxuK1xcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MTcuMjYzMzg0Mzk3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mzc5MzI0Mjk0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUNUUFwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfVVNCXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1jdHBfdXNibGliX3J4X2luaXRcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2ZpbmlcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X3ByZXBhcmVcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jYW5jZWxcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2luaXRcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2ZpbmlcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3B1c2hcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNibGliX3R4X2NhbmNlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29tbW9uIGxpYnJhcnkgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0IChtY3RwLXVzYmxpYikgYW5kIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgTUNUUCBVU0IgZHJpdmVyIHRvIHVzZSBpdC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIGR1bW15X2hjZCBvciByYXctZ2FkZ2V0KSBhbmQgaGFuZGxlcyBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTNiOTZlYjk2NDUzYTIwNDRkZGEzNzEzZjU4YmY2YTk4ODAyOGIzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA4OjUzOjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXG5pbmRleCBjZjMyNWFiMGIxZWY1NS4uYzQwYWM5YzY2NWI3NTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tY3RwL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZ1xuQEAgLTQ3LDkgKzQ3LDI1IEBAIGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JM0NcbiBcdCAgQSBNQ1RQIHByb3RvY29sIG5ldHdvcmsgZGV2aWNlIGlzIGNyZWF0ZWQgZm9yIGVhY2ggSTNDIGJ1c1xuIFx0ICBoYXZpbmcgYSBcIm1jdHAtY29udHJvbGxlclwiIGRldmljZXRyZWUgcHJvcGVydHkuXG4gXG4rY29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxuK1x0dHJpc3RhdGUgXCJNQ1RQIG92ZXIgVVNCIGNvbW1vbiBsaWJyYXJ5XCJcbitcdGRlcGVuZHMgb24gVVNCXG4rXHRoZWxwXG4rXHQgIENvbW1vbiBwcm90b2NvbCBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIE1DVFAtb3Zlci1VU0IgdHJhbnNwb3J0XG4rXHQgIGltcGxlbWVudGF0aW9ucywgc3VpdGFibGUgZm9yIHVzZSBpbiBlaXRoZXIgaG9zdC0gb3IgZ2FkZ2V0LXNpZGVcbitcdCAgdHJhbnNwb3J0IGRyaXZlclxuK1xuK1x0ICBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGJ5IHRoZSB0cmFuc3BvcnQgZHJpdmVyLlxuK1xuK2NvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxuKyAgICAgICAgYm9vbCBcIk1DVFAgdXNibGliIHRlc3RzXCIgaWYgIUtVTklUX0FMTF9URVNUU1xuKyAgICAgICAgZGVwZW5kcyBvbiBNQ1RQX1RSQU5TUE9SVF9VU0JMSUI9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuKyAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbitcbiBjb25maWcgTUNUUF9UUkFOU1BPUlRfVVNCXG4gXHR0cmlzdGF0ZSBcIk1DVFAgVVNCIHRyYW5zcG9ydFwiXG4gXHRkZXBlbmRzIG9uIFVTQlxuK1x0c2VsZWN0IE1DVFBfVFJBTlNQT1JUX1VTQkxJQlxuIFx0aGVscFxuIFx0ICBQcm92aWRlcyBhIGRyaXZlciB0byBhY2Nlc3MgTUNUUCBkZXZpY2VzIG92ZXIgVVNCIHRyYW5zcG9ydCxcbiBcdCAgZGVmaW5lZCBieSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDI4My5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxuaW5kZXggYzM2MDA2ODQ5YTFlN2QuLmM4NzBiNjJkM2YxYzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9NYWtlZmlsZVxuQEAgLTIsMyArMiw0IEBAIG9iai0kKENPTkZJR19NQ1RQX1NFUklBTCkgKz0gbWN0cC1zZXJpYWwub1xuIG9iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9JMkMpICs9IG1jdHAtaTJjLm9cbiBvYmotJChDT05GSUdfTUNUUF9UUkFOU1BPUlRfSTNDKSArPSBtY3RwLWkzYy5vXG4gb2JqLSQoQ09ORklHX01DVFBfVFJBTlNQT1JUX1VTQikgKz0gbWN0cC11c2Iub1xuK29iai0kKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUIpICs9IG1jdHAtdXNibGliLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmNcbmluZGV4IGZhZGU2NWYyZjI2OTk1Li41NDJhNTcwYzc2Y2M5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1xuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jXG5AQCAtMyw5ICszLDkgQEBcbiAgKiBtY3RwLXVzYi5jIC0gTUNUUC1vdmVyLVVTQiAoRE1URiBEU1AwMjgzKSB0cmFuc3BvcnQgYmluZGluZyBkcml2ZXIuXG4gICpcbiAgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcbi0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGZcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcbiAgKlxuLSAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI1IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbkBAIC0yMiw5NSArMjIsMTE1IEBAXG4gc3RydWN0IG1jdHBfdXNiIHtcbiBcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7XG4gXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjtcbitcdGJvb2wgc3BhbjtcbiBcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXG4gXHR1OCBlcF9pbjtcbiBcdHU4IGVwX291dDtcbiBcbi1cdHN0cnVjdCB1cmIgKnR4X3VyYjtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCByeDtcbiBcdHN0cnVjdCB1cmIgKnJ4X3VyYjtcbitcdGludCBpbl9lcnJfY291bnQ7XG4rXHRpbnQgaW5fZXJyX29yaWc7XG4rXHRib29sIGNsZWFyX2hhbHQ7XG4gXG4gXHQvKiBlbmZvcmNlcyBhdG9taWMgYWNjZXNzIHRvIHJ4X3N0b3BwZWQgYW5kIHJlcXVldWluZyB0aGUgcmV0cnkgd29yayAqL1xuIFx0c3BpbmxvY2tfdCByeF9sb2NrO1xuIFx0Ym9vbCByeF9zdG9wcGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayByeF9yZXRyeV93b3JrO1xuK1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4IHR4O1xuK1x0c3RydWN0IHVzYl9hbmNob3IgdHhfYW5jaG9yO1xuK1x0Lyogc2VyaWFsaXNlcyB0eF9xbWVtIHVwZGF0ZXMgdG8gbmV0ZGV2IHF1ZXVlIHN0YXRlcyAqL1xuK1x0c3BpbmxvY2tfdCB0eF9xbWVtX2xvY2s7XG4rXHRpbnQgdHhfcW1lbTtcbit9O1xuK1xuK2VudW0ge1xuK1x0TUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSA9IDB4MDAsXG4rXHRNQ1RQX1VTQl9TVUJDTEFTU19TUEFOID0gMHgwMixcbiB9O1xuIFxuKy8qIFdlIHVzZSBhIHRvdGFsLXNpemUgbGltaXQgZm9yIG91dHN0YW5kaW5nIFVSQnMsIGFzIHRoZSB0cmFuc2ZlciBjb3VudHNcbisgKiBtYXkgdmFyeSBhIGxvdCBiZXR3ZWVuIHNwYW5uaW5nLSBhbmQgbm9uLXNwYW5uaW5nIG1vZGVzLiBJbiBzcGFubmluZyBtb2RlLFxuKyAqIHRoaXMgd2lsbCBhbGxvdyBmb3IgYSBjb3VwbGUgb2YgbWF4LXNpemVkIHRyYW5zZmVycyB0byBiZSBpbiBmbGlnaHQuIEluXG4rICogbm9uLXNwYW5uaW5nIG1vZGUsIDMyLlxuKyAqXG4rICogV2Ugd2FudCB0byBhdm9pZCBkaXNhYmxpbmcgdGhlIHR4IHF1ZXVlIGlmIHBvc3NpYmxlOyBkb2luZyBzbyB3aWxsIGVuZCB1cFxuKyAqIHJlcXVldWVpbmcgdG8gZ3NvX3NrYiwgYW5kIHdlIG9ubHkgZGVxdWV1ZSBmcm9tIHRoYXQgb25lIHNrYiBhdCBhIHRpbWUsXG4rICogc28gY2FuIG5vIGxvbmdlciBwZXJmb3JtIHRyYW5zZmVyIHBhY2tpbmcuXG4rICovXG4rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUWF9RTUVNX01BWCA9IDE2Mzg0O1xuK1xuIHN0YXRpYyB2b2lkIG1jdHBfdXNiX291dF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4ge1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi1cdTAwM2VkZXY7XG4tXHRpbnQgc3RhdHVzO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4ID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4rXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbWN0cF91c2JsaWJfdHhfY3R4X3ByaXYodHhfY3R4KTtcbitcdHVuc2lnbmVkIGludCBsZW4gPSB1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyX2xlbmd0aDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBtY3RwX3VzYi1cdTAwM2VuZXRkZXY7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0c3RhdHVzID0gdXJiLVx1MDAzZXN0YXR1cztcbitcdG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUodHhfY3R4LCBuZXRkZXYsIHVyYi1cdTAwM2VzdGF0dXMgPT0gMCk7XG4gXG4tXHRzd2l0Y2ggKHN0YXR1cykge1xuLVx0Y2FzZSAtRU5PRU5UOlxuLVx0Y2FzZSAtRUNPTk5SRVNFVDpcbi1cdGNhc2UgLUVTSFVURE9XTjpcbi1cdGNhc2UgLUVQUk9UTzpcbi1cdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSAwOlxuLVx0XHRkZXZfZHN0YXRzX3R4X2FkZChuZXRkZXYsIHNrYi1cdTAwM2VsZW4pO1xuLVx0XHRuZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7XG4tXHRcdGNvbnN1bWVfc2tiKHNrYik7XG4tXHRcdHJldHVybjtcbi1cdGRlZmF1bHQ6XG4tXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInVuZXhwZWN0ZWQgdHggdXJiIHN0YXR1czogJWRcXG5cIiwgc3RhdHVzKTtcbi1cdFx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKG5ldGRldik7XG4tXHR9XG4rXHR1c2JfZnJlZV91cmIodXJiKTtcbiBcbi1cdGtmcmVlX3NrYihza2IpO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfcW1lbV9sb2NrLCBmbGFncyk7XG4rXHRtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIC09IGxlbjtcbitcdGlmIChtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIFx1MDAzYyBUWF9RTUVNX01BWCBcdTAwMjZcdTAwMjYgbmV0aWZfcnVubmluZyhuZXRkZXYpKVxuK1x0XHRuZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4rc3RhdGljIGludCBtY3RwX3VzYl90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCxcbitcdFx0XHQgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbiB7XG4tXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBtY3RwX3VzYl9oZHIgKmhkcjtcbi1cdHVuc2lnbmVkIGludCBwbGVuO1xuK1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IG1jdHBfdXNibGliX3R4X2N0eF9wcml2KHR4X2N0eCk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IHVyYiAqdXJiO1xuIFx0aW50IHJjO1xuIFxuLVx0cGxlbiA9IHNrYi1cdTAwM2VsZW47XG4tXG4tXHRpZiAocGxlbiArIHNpemVvZigqaGRyKSBcdTAwM2UgTUNUUF9VU0JfWEZFUl9TSVpFKVxuLVx0XHRnb3RvIGVycl9kcm9wO1xuLVxuLVx0cmMgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKmhkcikpO1xuLVx0aWYgKHJjKVxuLVx0XHRnb3RvIGVycl9kcm9wO1xuLVxuLVx0aGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpO1xuLVx0aWYgKCFoZHIpXG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4tXG4tXHRoZHItXHUwMDNlaWQgPSBjcHVfdG9fYmUxNihNQ1RQX1VTQl9ETVRGX0lEKTtcbi1cdGhkci1cdTAwM2Vyc3ZkID0gMDtcbi1cdGhkci1cdTAwM2VsZW4gPSBwbGVuICsgc2l6ZW9mKCpoZHIpO1xuLVxuLVx0dXJiID0gbWN0cF91c2ItXHUwMDNldHhfdXJiO1xuK1x0dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTtcbitcdGlmICghdXJiKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgbWN0cF91c2ItXHUwMDNldXNiZGV2LFxuIFx0XHRcdCAgdXNiX3NuZGJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfb3V0KSxcbi1cdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLFxuLVx0XHRcdCAgbWN0cF91c2Jfb3V0X2NvbXBsZXRlLCBza2IpO1xuK1x0XHRcdCAgZGF0YSwgbGVuLCBtY3RwX3VzYl9vdXRfY29tcGxldGUsIHR4X2N0eCk7XG4rXG4rXHRpZiAobWN0cF91c2ItXHUwMDNlc3BhbilcbitcdFx0dXJiLVx1MDAzZXRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDtcbitcbitcdHVzYl9hbmNob3JfdXJiKHVyYiwgXHUwMDI2bWN0cF91c2ItXHUwMDNldHhfYW5jaG9yKTtcbiBcbi1cdC8qIFN0b3BzIFRYIHF1ZXVlIGZpcnN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBVUkIgY29tcGxldGUgKi9cbi1cdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJjID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTtcbiBcdGlmIChyYykge1xuLVx0XHRuZXRpZl93YWtlX3F1ZXVlKGRldik7XG4tXHRcdGdvdG8gZXJyX2Ryb3A7XG4rXHRcdG5ldGRldl9kYmcobWN0cF91c2ItXHUwMDNlbmV0ZGV2LCBcIlRYIHVyYiBzdWJtaXQgZmFpbGVkLCAlZFxcblwiLCByYyk7XG4rXHRcdHVzYl91bmFuY2hvcl91cmIodXJiKTtcbitcdFx0dXNiX2ZyZWVfdXJiKHVyYik7XG4rXHR9IGVsc2Uge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2V0eF9xbWVtX2xvY2ssIGZsYWdzKTtcbitcdFx0bWN0cF91c2ItXHUwMDNldHhfcW1lbSArPSBsZW47XG4rXHRcdGlmIChtY3RwX3VzYi1cdTAwM2V0eF9xbWVtIFx1MDAzZT0gVFhfUU1FTV9NQVgpXG4rXHRcdFx0bmV0aWZfc3RvcF9xdWV1ZShtY3RwX3VzYi1cdTAwM2VuZXRkZXYpO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X3FtZW1fbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcdHJldHVybiByYztcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90eF9vcHMgdHhfb3BzID0ge1xuK1x0LnNlbmQgPSBtY3RwX3VzYl90eF9zZW5kLFxuK307XG4rXG4rc3RhdGljIG5ldGRldl90eF90IG1jdHBfdXNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Ym9vbCBtb3JlID0gbmV0ZGV2X3htaXRfbW9yZSgpO1xuK1xuK1x0bWN0cF91c2JsaWJfdHhfcHVzaChkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4LCBza2IsIG1vcmUpO1xuIFxuLWVycl9kcm9wOlxuLVx0ZGV2X2RzdGF0c190eF9kcm9wcGVkKGRldik7XG4tXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuIFxuQEAgLTEyNSwyNCArMTQ1LDIzIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJYX1JFVFJZX0RFTEFZID0gSFogLyA0O1xuIHN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IGxlbjtcbitcdHZvaWQgKmJ1ZjtcbiBcdGludCByYztcbiBcbi1cdHNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIE1DVFBfVVNCX1hGRVJfU0laRSwgZ2ZwKTtcbi1cdGlmICghc2tiKSB7XG4tXHRcdHJjID0gLUVOT01FTTtcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShtY3RwX3VzYi1cdTAwM2VuZXRkZXYsIFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4LFxuK1x0XHRcdFx0ICAgIFx1MDAyNmJ1ZiwgXHUwMDI2bGVuLCBnZnApO1xuK1x0aWYgKHJjKVxuIFx0XHRnb3RvIGVycl9yZXRyeTtcbi1cdH1cbiBcbiBcdHVzYl9maWxsX2J1bGtfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYiwgbWN0cF91c2ItXHUwMDNldXNiZGV2LFxuIFx0XHRcdCAgdXNiX3JjdmJ1bGtwaXBlKG1jdHBfdXNiLVx1MDAzZXVzYmRldiwgbWN0cF91c2ItXHUwMDNlZXBfaW4pLFxuLVx0XHRcdCAgc2tiLVx1MDAzZWRhdGEsIE1DVFBfVVNCX1hGRVJfU0laRSxcbi1cdFx0XHQgIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBza2IpO1xuK1x0XHRcdCAgYnVmLCBsZW4sIG1jdHBfdXNiX2luX2NvbXBsZXRlLCBtY3RwX3VzYik7XG4gXG4gXHRyYyA9IHVzYl9zdWJtaXRfdXJiKG1jdHBfdXNiLVx1MDAzZXJ4X3VyYiwgZ2ZwKTtcbiBcdGlmIChyYykge1xuIFx0XHRuZXRkZXZfZGJnKG1jdHBfdXNiLVx1MDAzZW5ldGRldiwgXCJyeCB1cmIgc3VibWl0IGZhaWx1cmU6ICVkXFxuXCIsIHJjKTtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4gXHRcdGlmIChyYyA9PSAtRU5PTUVNKVxuIFx0XHRcdGdvdG8gZXJyX3JldHJ5O1xuIFx0fVxuQEAgLTE1NywxNCArMTc2LDM0IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcnhfcXVldWUoc3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiwgZ2ZwX3QgZ2ZwKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcnhfZXJyX21heCA9IDEwO1xuK1xuKy8qIFJldHVybnMgLTEgaWYgd2UgaGF2ZSBoaXQgZXhjZXNzaXZlIGVycm9ycywgemVybyBvdGhlcndpc2UuICovXG4rc3RhdGljIGludCBtY3RwX3VzYl9pbl91cmJfZXJyKHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IsIGludCBzdGF0dXMsXG4rXHRcdFx0ICAgICAgIGJvb2wgc3RhbGxlZClcbit7XG4rXHRtY3RwX3VzYmxpYl9yeF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNlcngpO1xuK1xuK1x0aWYgKCFtY3RwX3VzYi1cdTAwM2Vpbl9lcnJfY291bnQrKylcbitcdFx0bWN0cF91c2ItXHUwMDNlaW5fZXJyX29yaWcgPSBzdGF0dXM7XG4rXG4rXHRpZiAobWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50IFx1MDAzZT0gcnhfZXJyX21heCkge1xuK1x0XHRuZXRkZXZfZXJyKG1jdHBfdXNiLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcImV4Y2Vzc2l2ZSBlcnJvcnMgZnJvbSVzIElOIEVQLCBmaXJzdDogJWRcXG5cIixcbitcdFx0XHQgICBzdGFsbGVkID8gXCIgKHN0YWxsZWQpXCIgOiBcIlwiLFxuK1x0XHRcdCAgIG1jdHBfdXNiLVx1MDAzZWluX2Vycl9vcmlnKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2luX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiB7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbi1cdHN0cnVjdCBtY3RwX3VzYiAqbWN0cF91c2IgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IG1jdHBfc2tiX2NiICpjYjtcbi1cdHVuc2lnbmVkIGludCBsZW47XG4tXHRpbnQgc3RhdHVzO1xuK1x0c3RydWN0IG1jdHBfdXNiICptY3RwX3VzYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG1jdHBfdXNiLVx1MDAzZW5ldGRldjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgcmMsIHN0YXR1cztcbiBcbiBcdHN0YXR1cyA9IHVyYi1cdTAwM2VzdGF0dXM7XG4gXG5AQCAtMTcyLDgwICsyMTEsNDMgQEAgc3RhdGljIHZvaWQgbWN0cF91c2JfaW5fY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuIFx0Y2FzZSAtRU5PRU5UOlxuIFx0Y2FzZSAtRUNPTk5SRVNFVDpcbiBcdGNhc2UgLUVTSFVURE9XTjpcbi1cdGNhc2UgLUVQUk9UTzpcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybjtcbi1cdGNhc2UgMDpcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJ1bmV4cGVjdGVkIHJ4IHVyYiBzdGF0dXM6ICVkXFxuXCIsIHN0YXR1cyk7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHQvKiBkZXZpY2Ugc2h1dGRvd24sIGRvbid0IHJlc3VibWl0ICovXG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeCk7XG4gXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGxlbiA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuLVx0X19za2JfcHV0KHNrYiwgbGVuKTtcbi1cbi1cdHdoaWxlIChza2IpIHtcbi1cdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMO1xuLVx0XHRzdHJ1Y3QgbWN0cF91c2JfaGRyICpoZHI7XG4tXHRcdHU4IHBrdF9sZW47IC8qIGxlbmd0aCBvZiBNQ1RQIHBhY2tldCwgbm8gVVNCIGhlYWRlciAqL1xuLVxuLVx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0XHRoZHIgPSBza2JfcHVsbF9kYXRhKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbi1cdFx0aWYgKCFoZHIpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdGlmIChiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpICE9IE1DVFBfVVNCX0RNVEZfSUQpIHtcbi1cdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJyeDogaW52YWxpZCBpZCAlMDR4XFxuXCIsXG4tXHRcdFx0XHQgICBiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRpZiAoaGRyLVx1MDAzZWxlbiBcdTAwM2Ncbi1cdFx0ICAgIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKSB7XG4tXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwicng6IHNob3J0IHBhY2tldCAoaGRyKSAlZFxcblwiLFxuLVx0XHRcdFx0ICAgaGRyLVx1MDAzZWxlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0Lyogd2Uga25vdyB3ZSBoYXZlIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKSBoZXJlICovXG4tXHRcdHBrdF9sZW4gPSBoZHItXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpO1xuLVx0XHRpZiAocGt0X2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuLVx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuLVx0XHRcdFx0ICAgXCJyeDogc2hvcnQgcGFja2V0ICh4ZmVyKSAlZCwgYWN0dWFsICVkXFxuXCIsXG4tXHRcdFx0XHQgICBoZHItXHUwMDNlbGVuLCBza2ItXHUwMDNlbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRpZiAocGt0X2xlbiBcdTAwM2Mgc2tiLVx1MDAzZWxlbikge1xuLVx0XHRcdC8qIG1vcmUgcGFja2V0cyBtYXkgZm9sbG93IC0gY2xvbmUgdG8gYSBuZXdcbi1cdFx0XHQgKiBza2IgdG8gdXNlIG9uIHRoZSBuZXh0IGl0ZXJhdGlvblxuLVx0XHRcdCAqL1xuLVx0XHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbi1cdFx0XHRpZiAoc2tiMikge1xuLVx0XHRcdFx0aWYgKCFza2JfcHVsbChza2IyLCBwa3RfbGVuKSkge1xuLVx0XHRcdFx0XHRrZnJlZV9za2Ioc2tiMik7XG4tXHRcdFx0XHRcdHNrYjIgPSBOVUxMO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0XHRza2JfdHJpbShza2IsIHBrdF9sZW4pO1xuLVx0XHR9XG4gXG4tXHRcdGRldl9kc3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVx1MDAzZWxlbik7XG4rXHRjYXNlIC1FUElQRTpcbitcdFx0LyogZW5kcG9pbnQgc3RhbGw6IGNsZWFyIGhhbHQsIHdoaWNoIHdpbGwgY2F1c2UgYSByZXN1Ym1pdCAqL1xuK1x0XHRyYyA9IG1jdHBfdXNiX2luX3VyYl9lcnIobWN0cF91c2IsIHN0YXR1cywgdHJ1ZSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdG1jdHBfdXNiLVx1MDAzZWNsZWFyX2hhbHQgPSB0cnVlO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9sb2NrLCBmbGFncyk7XG4rXHRcdGlmICghbWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZClcbitcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfcmV0cnlfd29yayxcbitcdFx0XHRcdFx0ICAgICAgUlhfUkVUUllfREVMQVkpO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbitcdFx0cmV0dXJuO1xuIFxuLVx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQ1RQKTtcbi1cdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4tXHRcdGNiID0gX19tY3RwX2NiKHNrYik7XG4tXHRcdGNiLVx1MDAzZWhhbGVuID0gMDtcbi1cdFx0bmV0aWZfcngoc2tiKTtcbitcdGRlZmF1bHQ6XG4rXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcInVuZXhwZWN0ZWQgcnggdXJiIHN0YXR1czogJWRcXG5cIiwgc3RhdHVzKTtcbitcdFx0ZmFsbHRocm91Z2g7XG4rXHRjYXNlIC1FVElNRTpcbitcdGNhc2UgLUVQUk9UTzpcbitcdGNhc2UgLUVJTFNFUTpcbitcdGNhc2UgLUVPVkVSRkxPVzpcbitcdFx0LyogcG9zc2libHkgdHJhbnNpZW50OyByZWNvcmQgZmlyc3QgZmFpbHVyZSwgcmVzdWJtaXQgKi9cbitcdFx0cmMgPSBtY3RwX3VzYl9pbl91cmJfZXJyKG1jdHBfdXNiLCBzdGF0dXMsIGZhbHNlKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybjtcbitcdFx0YnJlYWs7XG4gXG4tXHRcdHNrYiA9IHNrYjI7XG4rXHRjYXNlIDA6XG4rXHRcdG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKG5ldGRldiwgXHUwMDI2bWN0cF91c2ItXHUwMDNlcngsIHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoKTtcbitcdFx0bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcbitcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAoc2tiKVxuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cbiBcdG1jdHBfdXNiX3J4X3F1ZXVlKG1jdHBfdXNiLCBHRlBfQVRPTUlDKTtcbiB9XG4gXG5AQCAtMjUzLDYgKzI1NSwzMCBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9yeF9yZXRyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtY3RwX3VzYixcbiBcdFx0XHRcdFx0XHQgcnhfcmV0cnlfd29yay53b3JrKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKiBXZSBhcmUgb25seSBjYWxsZWQgd2hlbiByeCBjb21wbGV0aW9ucyBhcmUgc3VzcGVuZGVkICovXG4rXHRpZiAobWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCkge1xuK1x0XHRpbnQgcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIG1jdHBfdXNiLVx1MDAzZWVwX2luKTtcbitcbitcdFx0cmMgPSB1c2JfY2xlYXJfaGFsdChtY3RwX3VzYi1cdTAwM2V1c2JkZXYsIHBpcGUpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG1jdHBfdXNiLVx1MDAzZW5ldGRldixcbitcdFx0XHRcdCAgIFwiY2FuJ3QgY2xlYXIgSU4gRVAgaGFsdDogJWRcXG5cIiwgcmMpO1xuK1xuK1x0XHRcdGlmICgrK21jdHBfdXNiLVx1MDAzZWluX2Vycl9jb3VudCBcdTAwM2U9IHJ4X2Vycl9tYXgpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0cF91c2ItXHUwMDNlcnhfbG9jaywgZmxhZ3MpO1xuK1x0XHRcdGlmICghbWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZClcbitcdFx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9yZXRyeV93b3JrLFxuK1x0XHRcdFx0XHRcdCAgICAgIFJYX1JFVFJZX0RFTEFZKTtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXJ4X2xvY2ssIGZsYWdzKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0bWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xuK1x0fVxuIFxuIFx0bWN0cF91c2JfcnhfcXVldWUobWN0cF91c2IsIEdGUF9LRVJORUwpO1xuIH1cbkBAIC0yNjIsNiArMjg4LDggQEAgc3RhdGljIGludCBtY3RwX3VzYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbWN0cF91c2IgKm1jdHBfdXNiID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdFdSSVRFX09OQ0UobWN0cF91c2ItXHUwMDNlcnhfc3RvcHBlZCwgZmFsc2UpO1xuK1x0bWN0cF91c2ItXHUwMDNlY2xlYXJfaGFsdCA9IGZhbHNlO1xuK1x0bWN0cF91c2ItXHUwMDNlaW5fZXJyX2NvdW50ID0gMDtcbiBcbiBcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XG4gXG5AQCAtMjg0LDcgKzMxMiwxMSBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZtY3RwX3VzYi1cdTAwM2VyeF9yZXRyeV93b3JrKTtcbiBcbiBcdHVzYl9raWxsX3VyYihtY3RwX3VzYi1cdTAwM2VyeF91cmIpO1xuLVx0dXNiX2tpbGxfdXJiKG1jdHBfdXNiLVx1MDAzZXR4X3VyYik7XG4rXG4rXHR1c2Jfa2lsbF9hbmNob3JlZF91cmJzKFx1MDAyNm1jdHBfdXNiLVx1MDAzZXR4X2FuY2hvcik7XG4rXG4rXHRtY3RwX3VzYmxpYl90eF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNldHgsIGRldiwgU0tCX0RST1BfUkVBU09OX0RFVl9SRUFEWSk7XG4rXHRtY3RwX3VzYmxpYl9yeF9jYW5jZWwoXHUwMDI2bWN0cF91c2ItXHUwMDNlcngpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTMwMSw3ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBtY3RwX3VzYl9uZXRkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdGRldi1cdTAwM2VtdHUgPSBNQ1RQX1VTQl9NVFVfTUlOO1xuIFx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBNQ1RQX1VTQl9NVFVfTUlOO1xuLVx0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl9NVFVfTUFYO1xuK1x0ZGV2LVx1MDAzZW1heF9tdHUgPSBNQ1RQX1VTQl8xXzBfTVRVX01BWDtcbiBcbiBcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcik7XG4gXHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG5AQCAtMzE3LDYgKzM0OSw3IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdHN0cnVjdCBtY3RwX3VzYiAqZGV2O1xuK1x0Ym9vbCBzcGFuO1xuIFx0aW50IHJjO1xuIFxuIFx0Lyogb25seSBvbmUgYWx0ZXJuYXRlICovXG5AQCAtMzI4LDYgKzM2MSw4IEBAIHN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gXHRcdHJldHVybiByYztcbiBcdH1cbiBcbitcdHNwYW4gPSBpZmFjZV9kZXNjLVx1MDAzZWRlc2MuYkludGVyZmFjZVN1YkNsYXNzID09IE1DVFBfVVNCX1NVQkNMQVNTX1NQQU47XG4rXG4gXHRuZXRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpkZXYpLCBcIm1jdHB1c2IlZFwiLCBORVRfTkFNRV9FTlVNLFxuIFx0XHRcdCAgICAgIG1jdHBfdXNiX25ldGRldl9zZXR1cCk7XG4gXHRpZiAoIW5ldGRldilcbkBAIC0zMzUsMzMgKzM3MCw0NiBAQCBzdGF0aWMgaW50IG1jdHBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFxuIFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcdTAwMjZpbnRmLVx1MDAzZWRldik7XG4gXHRkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0ZGV2LVx1MDAzZXNwYW4gPSBzcGFuO1xuIFx0ZGV2LVx1MDAzZW5ldGRldiA9IG5ldGRldjtcbiBcdGRldi1cdTAwM2V1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIFx0ZGV2LVx1MDAzZWludGYgPSBpbnRmO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X2xvY2spO1xuK1x0aWYgKGRldi1cdTAwM2VzcGFuKVxuK1x0XHRuZXRkZXYtXHUwMDNlbWF4X210dSA9IE1DVFBfVVNCXzFfMV9NVFVfTUFYO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4X3FtZW1fbG9jayk7XG4gXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7XG4gXG4rXHRyYyA9IG1jdHBfdXNibGliX3J4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4LCBsZTE2X3RvX2NwdShlcF9pbi1cdTAwM2V3TWF4UGFja2V0U2l6ZSksXG4rXHRcdFx0XHQgZGV2LVx1MDAzZXNwYW4pO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl9mcmVlX25ldGRldjtcbitcdG1jdHBfdXNibGliX3R4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXR4LCBcdTAwMjZ0eF9vcHMsIGRldiwgZGV2LVx1MDAzZXNwYW4pO1xuK1x0aW5pdF91c2JfYW5jaG9yKFx1MDAyNmRldi1cdTAwM2V0eF9hbmNob3IpO1xuK1xuIFx0ZGV2LVx1MDAzZWVwX2luID0gZXBfaW4tXHUwMDNlYkVuZHBvaW50QWRkcmVzcztcbiBcdGRldi1cdTAwM2VlcF9vdXQgPSBlcF9vdXQtXHUwMDNlYkVuZHBvaW50QWRkcmVzcztcbiBcbi1cdGRldi1cdTAwM2V0eF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpO1xuIFx0ZGV2LVx1MDAzZXJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIWRldi1cdTAwM2V0eF91cmIgfHwgIWRldi1cdTAwM2VyeF91cmIpIHtcbitcdGlmICghZGV2LVx1MDAzZXJ4X3VyYikge1xuIFx0XHRyYyA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX2ZyZWVfdXJicztcbitcdFx0Z290byBlcnJfZmluaV9yeHR4O1xuIFx0fVxuIFxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2ZGV2LVx1MDAzZXJ4X3JldHJ5X3dvcmssIG1jdHBfdXNiX3J4X3JldHJ5X3dvcmspO1xuIFxuIFx0cmMgPSBtY3RwX3JlZ2lzdGVyX25ldGRldihuZXRkZXYsIE5VTEwsIE1DVFBfUEhZU19CSU5ESU5HX1VTQik7XG4gXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfdXJicztcbitcdFx0Z290byBlcnJfZnJlZV91cmI7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfZnJlZV91cmJzOlxuLVx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2V0eF91cmIpO1xuK2Vycl9mcmVlX3VyYjpcbiBcdHVzYl9mcmVlX3VyYihkZXYtXHUwMDNlcnhfdXJiKTtcbitlcnJfZmluaV9yeHR4OlxuK1x0bWN0cF91c2JsaWJfdHhfZmluaShcdTAwMjZkZXYtXHUwMDNldHgpO1xuK1x0bWN0cF91c2JsaWJfcnhfZmluaShcdTAwMjZkZXYtXHUwMDNlcngpO1xuK2Vycl9mcmVlX25ldGRldjpcbiBcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG4gXHRyZXR1cm4gcmM7XG4gfVxuQEAgLTM3MSwxMyArNDE5LDE1IEBAIHN0YXRpYyB2b2lkIG1jdHBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRzdHJ1Y3QgbWN0cF91c2IgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4gXG4gXHRtY3RwX3VucmVnaXN0ZXJfbmV0ZGV2KGRldi1cdTAwM2VuZXRkZXYpO1xuLVx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2V0eF91cmIpO1xuK1x0bWN0cF91c2JsaWJfcnhfZmluaShcdTAwMjZkZXYtXHUwMDNlcngpO1xuK1x0bWN0cF91c2JsaWJfdHhfZmluaShcdTAwMjZkZXYtXHUwMDNldHgpO1xuIFx0dXNiX2ZyZWVfdXJiKGRldi1cdTAwM2VyeF91cmIpO1xuIFx0ZnJlZV9uZXRkZXYoZGV2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtY3RwX3VzYl9kZXZpY2VzW10gPSB7XG4tXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgMHgwLCAweDEpIH0sXG4rXHR7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUNUUCwgTUNUUF9VU0JfU1VCQ0xBU1NfQkFTRSwgMHgxKSB9LFxuK1x0eyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01DVFAsIE1DVFBfVVNCX1NVQkNMQVNTX1NQQU4sIDB4MSkgfSxcbiBcdHsgMCB9LFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLXRlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45ZGY0MDFhOTE0ZmY1M1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi10ZXN0LmNcbkBAIC0wLDAgKzEsNDEyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIG1jdHAtdXNibGliLXRlc3QuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5LFxuKyAqIHVuaXQgdGVzdCBkZWZpbml0aW9ucy5cbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2RlIENvbnN0cnVjdCBQdHkgTHRkXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbWN0cC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21jdHBkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi9tY3RwLXVzYi5oXHUwMDNlXG4rXG4rc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2IHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1x0c3RydWN0IG1jdHBfZGV2ICptZGV2O1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCByeF9wa3RzO1xuK307XG4rXG4rc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4IHtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2O1xuK1x0c3RydWN0IG1jdHBfcm91dGUgcnQ7XG4rfTtcbitcbitzdGF0aWMgbmV0ZGV2X3R4X3QgbWN0cF91c2JsaWJfZGV2X3R4KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHQvKiB3ZSBkb24ndCB0cmFjayBhbnkgVFhlZCBwYWNrZXRzIGF0IHByZXNlbnQgKi9cbitcdGtmcmVlX3NrYihza2IpO1xuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3RwX3Rlc3RfbmV0ZGV2X29wcyA9IHtcbitcdC5uZG9fc3RhcnRfeG1pdCA9IG1jdHBfdXNibGliX2Rldl90eCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCB1MTYgZXBfbWF4cGFja2V0ID0gNTEyO1xuK3N0YXRpYyBjb25zdCBtY3RwX2VpZF90IGxvY2FsX2VpZCA9IDg7XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdG5kZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9NQ1RQO1xuK1x0bmRldi1cdTAwM2VtdHUgPSA4MTkyO1xuK1x0bmRldi1cdTAwM2VmbGFncyA9IElGRl9OT0FSUDtcbitcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm1jdHBfdGVzdF9uZXRkZXZfb3BzO1xuK1x0bmRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4rXHRuZGV2LVx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9EU1RBVFM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbih2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2RldiAqZGV2ID0gZGF0YTtcbitcbitcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4rXHRpZiAoZGV2LVx1MDAzZW1kZXYpXG4rXHRcdG1jdHBfZGV2X3B1dChkZXYtXHUwMDNlbWRldik7XG4rXHR1bnJlZ2lzdGVyX25ldGRldihkZXYtXHUwMDNlbmRldik7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKlxuK21jdHBfdXNibGliX3Rlc3RfY3JlYXRlX2RldihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdGludCByYztcbitcbitcdG5kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKCpkZXYpLCBcIm1jdHB0ZXN0JWRcIiwgTkVUX05BTUVfRU5VTSxcbitcdFx0XHQgICAgbWN0cF91c2JsaWJfZGV2X3NldHVwKTtcbitcdGlmICghbmRldilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGRldi1cdTAwM2VuZGV2ID0gbmRldjtcbitcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMpO1xuK1xuK1x0cmMgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4rXHRpZiAocmMpIHtcbitcdFx0ZnJlZV9uZXRkZXYobmRldik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIG1jdHBfdXNibGliX3Rlc3RfZGV2X2FjdGlvbiwgZGV2KTtcbitcdGlmIChyYylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRkZXYtXHUwMDNlbWRldiA9IF9fbWN0cF9kZXZfZ2V0KG5kZXYpO1xuK1x0aWYgKGRldi1cdTAwM2VtZGV2KVxuK1x0XHRkZXYtXHUwMDNlbWRldi1cdTAwM2VuZXQgPSBtY3RwX2RlZmF1bHRfbmV0KGRldl9uZXQobmRldikpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VtZGV2KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJ0bmxfbG9jaygpO1xuK1x0cmMgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIGRldjtcbit9XG4rXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQoc3RydWN0IG1jdHBfZHN0ICpkc3QsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9kZXYgKmRldiA9IG5ldGRldl9wcml2KHNrYi1cdTAwM2VkZXYpO1xuK1xuK1x0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXJ4X3BrdHMsIHNrYik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbih2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X2N0eCAqY3R4ID0gZGF0YTtcbitcbitcdC8qIFRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gZGVzdHJveWVkLCBzbyAtXHUwMDNlcnQgd2lsbCBiZSB1bmxpbmtlZC5cbitcdCAqIEp1c3QgZW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGlzIGFzIGV4cGVjdGVkLlxuK1x0ICovXG4rXHRLVU5JVF9FWFBFQ1RfVFJVRShjdXJyZW50LVx1MDAzZWt1bml0X3Rlc3QsXG4rXHRcdFx0ICByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Y3R4LVx1MDAzZXJ0LnJlZnMpKTtcbitcbitcdGtmcmVlKGN0eCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKm1jdHBfdXNibGliX3Rlc3RfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3QgbWN0cF9yb3V0ZSAqcnQ7XG4rXHRpbnQgcmM7XG4rXG4rXHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbitcdEtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBjdHgpO1xuK1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXJ0Lmxpc3QpO1xuK1x0cnQgPSBcdTAwMjZjdHgtXHUwMDNlcnQ7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2cnQtXHUwMDNlcmVmcywgMSk7XG4rXG4rXHRyYyA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgbWN0cF91c2JsaWJfdGVzdF9maW5pX2FjdGlvbiwgY3R4KTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRjdHgtXHUwMDNlZGV2ID0gbWN0cF91c2JsaWJfdGVzdF9jcmVhdGVfZGV2KHRlc3QpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eC1cdTAwM2VkZXYpO1xuK1xuK1x0cnQtXHUwMDNlbWluID0gbG9jYWxfZWlkO1xuK1x0cnQtXHUwMDNlbWF4ID0gbG9jYWxfZWlkO1xuK1x0cnQtXHUwMDNlZHN0X3R5cGUgPSBNQ1RQX1JPVVRFX0RJUkVDVDtcbitcdHJ0LVx1MDAzZXR5cGUgPSBSVE5fTE9DQUw7XG4rXHRydC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW1kZXY7XG4rXHRydC1cdTAwM2VvdXRwdXQgPSBtY3RwX3VzYmxpYl90ZXN0X2RzdF9vdXRwdXQ7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdGxpc3RfYWRkX3JjdShcdTAwMjZjdHgtXHUwMDNlcnQubGlzdCwgXHUwMDI2aW5pdF9uZXQubWN0cC5yb3V0ZXMpO1xuK1x0cmVmY291bnRfaW5jKFx1MDAyNnJ0LVx1MDAzZXJlZnMpO1xuK1x0cnRubF91bmxvY2soKTtcbitcbitcdHJldHVybiBjdHg7XG4rfVxuK1xuKy8qIEluaXQgYSBNQ1RQLW92ZXItVVNCIHBhY2tldCB3aXRoaW4gYSBidWZmZXIuIEBsZW4gaXMgdGhlIGxlbmd0aCBvZiB0aGVcbisgKiBidWZmZXIgdG8gd3JpdGUsIEBwYXlsb2FkX2xlbiBpcyB0aGUgcmVwb3J0ZWQgc2l6ZSBvZiB0aGUgTUNUUC1vdmVyLVVTQlxuKyAqIHBhY2tldC5cbisgKi9cbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KHZvaWQgKmRhdGEsIHNpemVfdCBsZW4sXG4rXHRcdFx0XHQgICAgICBzaXplX3QgcGF5bG9hZF9sZW4pXG4re1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IG1jdHBfdXNiX2hkciB1c2I7XG4rXHRcdHN0cnVjdCBtY3RwX2hkciBtY3RwO1xuK1x0fSBoZHI7XG4rXG4rXHRoZHIudXNiLmlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XG4rXHRoZHIudXNiLmxlbiA9IGNwdV90b19iZTE2KHBheWxvYWRfbGVuKTtcbitcdGhkci5tY3RwLnZlciA9IDE7XG4rXHRoZHIubWN0cC5kZXN0ID0gbG9jYWxfZWlkO1xuK1x0aGRyLm1jdHAuc3JjID0gMDtcbitcdGhkci5tY3RwLmZsYWdzX3NlcV90YWcgPSAwO1xuK1xuK1x0bWVtY3B5KGRhdGEsIFx1MDAyNmhkciwgbWluKGxlbiwgc2l6ZW9mKGhkcikpKTtcbitcdGlmIChsZW4gXHUwMDNlIHNpemVvZihoZHIpKVxuK1x0XHRtZW1zZXQoZGF0YSArIHNpemVvZihoZHIpLCAwLCBsZW4gLSBzaXplb2YoaGRyKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjdGlvbl9yeF9maW5pKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCA9IGRhdGE7XG4rXG4rXHRtY3RwX3VzYmxpYl9yeF9maW5pKHJ4KTtcbitcdGtmcmVlKHJ4KTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqXG4rbWN0cF91c2JsaWJfdGVzdF9yeF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCwgYm9vbCBzcGFuKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHRpbnQgcmM7XG4rXG4rXHRyeCA9IGt6YWxsb2Nfb2JqKCpyeCk7XG4rXHRpZiAocngpIHtcbitcdFx0cmMgPSBrdW5pdF9hZGRfYWN0aW9uX29yX3Jlc2V0KHRlc3QsIGFjdGlvbl9yeF9maW5pLCByeCk7XG4rXHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXHR9XG4rXHRLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcngpO1xuK1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9pbml0KHJ4LCBlcF9tYXhwYWNrZXQsIHNwYW4pO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcbitcdHJldHVybiByeDtcbit9XG4rXG4rLyogV3JhcHBlcnMgZm9yIHVzYmxpYidzIHJ4X2NvbXBsZXRlIGNhbGxiYWNrLCB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWRcbisgKiBmcm9tIGF0b21pYyBjb250ZXh0XG4rICovXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90ZXN0X3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0cmMgPSBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShuZXRkZXYsIHJ4LCBsZW4pO1xuK1x0bG9jYWxfYmhfZW5hYmxlKCk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKy8qIFNpbmdsZSBwYWNrZXQsIHN0YXJ0aW5nIG9uIGEgdHJhbnNmZXIgYm91bmRhcnksIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW5cbisgKiB0aGUgdHJhbnNmZXJcbisgKi9cbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90ZXN0X3J4X3NpbmdsZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0c2l6ZV90IGxlbjtcbitcdHZvaWQgKmJ1ZjtcbitcdGludCByYztcbitcbitcdGN0eCA9IG1jdHBfdXNibGliX3Rlc3RfaW5pdCh0ZXN0KTtcbitcdGRldiA9IGN0eC1cdTAwM2VkZXY7XG4rXG4rXHRyeCA9IG1jdHBfdXNibGliX3Rlc3RfcnhfaW5pdCh0ZXN0LCB0cnVlKTtcbitcbitcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsXG4rXHRcdFx0XHQgICAgXHUwMDI2YnVmLCBcdTAwMjZsZW4sIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJjLCAwKTtcbitcbitcdC8qIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIG1heHBhY2tldCBvZiB0cmFuc2ZlciBhdmFpbGFibGUgKi9cbitcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XG4rXG4rXHRtY3RwX3VzYmxpYl90ZXN0X2luaXRfcGt0KGJ1ZiwgOCwgOCk7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVx1MDAzZW5kZXYsIHJ4LCA4KTtcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmRldi1cdTAwM2VyeF9wa3RzKTtcbitcdEtVTklUX0VYUEVDVF9OT1RfTlVMTCh0ZXN0LCBza2IpO1xuK1x0aWYgKHNrYilcbitcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHNrYi1cdTAwM2VsZW4sIDQpO1xuK1x0a2ZyZWVfc2tiKHNrYik7XG4rfVxuK1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuIHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHRzaXplX3Qgbl9wa3RzO1xuK1x0c2l6ZV90IHBrdHNbNl07XG4rXHRzaXplX3Qgbl94ZmVycztcbitcdHNpemVfdCB4ZmVyc1s2XTtcbit9O1xuK1xuK3N0YXRpYyB2b2lkXG4rbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3Bhbl90b19kZXNjKGNvbnN0IHN0cnVjdCBtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuICp0LFxuK1x0XHRcdFx0ICBjaGFyICpkZXNjKVxuK3tcbitcdHN0cnNjcHkoZGVzYywgdC1cdTAwM2VuYW1lLCBLVU5JVF9QQVJBTV9ERVNDX1NJWkUpO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK21jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdmFsaWRhdGUoc3RydWN0IGt1bml0ICp0ZXN0LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnNwYW4sXG4rXHRcdFx0XHQgICBzaXplX3QgKmxlbilcbit7XG4rXHRzaXplX3QgcGt0X2xlbiA9IDAsIHhmZXJfbGVuID0gMDtcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3Bhbi1cdTAwM2VuX3BrdHM7IGkrKykge1xuK1x0XHRLVU5JVF9BU1NFUlRfR0VfTVNHKHRlc3QsIHNwYW4tXHUwMDNlcGt0c1tpXSwgOCxcbitcdFx0XHRcdCAgICBcInBrdFsldV0gbGVuIHRvbyBzbWFsbCAoJXp1KSBmb3IgJXNcIixcbitcdFx0XHRcdCAgICBpLCBzcGFuLVx1MDAzZXBrdHNbaV0sIHNwYW4tXHUwMDNlbmFtZSk7XG4rXHRcdHBrdF9sZW4gKz0gc3Bhbi1cdTAwM2Vwa3RzW2ldO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3Bhbi1cdTAwM2VuX3hmZXJzOyBpKyspXG4rXHRcdHhmZXJfbGVuICs9IHNwYW4tXHUwMDNleGZlcnNbaV07XG4rXG4rXHRLVU5JVF9BU1NFUlRfRVFfTVNHKHRlc3QsIHBrdF9sZW4sIHhmZXJfbGVuLFxuK1x0XHRcdCAgICBcImludmFsaWQgcGt0X2xlbiAoJXp1KSAhPSB4ZmVyX2xlbiAoJXp1KSBmb3IgJXNcIixcbitcdFx0XHQgICAgcGt0X2xlbiwgeGZlcl9sZW4sIHNwYW4tXHUwMDNlbmFtZSk7XG4rXG4rXHQqbGVuID0gcGt0X2xlbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfdGVzdF9yeF9wa3Rfc3BhbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gKnBrdF9zcGFuID0gdGVzdC1cdTAwM2VwYXJhbV92YWx1ZTtcbitcdHNpemVfdCBsZW4sIHhmZXJfbGVuLCBvZmYsIHhmZXJfb2ZmO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3Rlc3RfZGV2ICpkZXY7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdGVzdF9jdHggKmN0eDtcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcng7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcdHU4ICpwa3RidWY7XG4rXHR2b2lkICpidWY7XG4rXHRpbnQgcmM7XG4rXG4rXHRtY3RwX3VzYmxpYl90ZXN0X3BrdF9zcGFuX3ZhbGlkYXRlKHRlc3QsIHBrdF9zcGFuLCBcdTAwMjZsZW4pO1xuK1x0cGt0YnVmID0ga3VuaXRfa21hbGxvY19hcnJheSh0ZXN0LCAxLCBsZW4sIEdGUF9LRVJORUwpO1xuK1x0S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHBrdGJ1Zik7XG4rXG4rXHQvKiBsYXkgb3V0IHBhY2tldHMgKi9cbitcdGZvciAob2ZmID0gMCwgaSA9IDA7IGkgXHUwMDNjIHBrdF9zcGFuLVx1MDAzZW5fcGt0czsgaSsrKSB7XG4rXHRcdGxlbiA9IHBrdF9zcGFuLVx1MDAzZXBrdHNbaV07XG4rXHRcdG1jdHBfdXNibGliX3Rlc3RfaW5pdF9wa3QocGt0YnVmICsgb2ZmLCBsZW4sIGxlbik7XG4rXHRcdG9mZiArPSBsZW47XG4rXHR9XG4rXG4rXHRjdHggPSBtY3RwX3VzYmxpYl90ZXN0X2luaXQodGVzdCk7XG4rXHRkZXYgPSBjdHgtXHUwMDNlZGV2O1xuK1xuK1x0cnggPSBtY3RwX3VzYmxpYl90ZXN0X3J4X2luaXQodGVzdCwgdHJ1ZSk7XG4rXG4rXHQvKiBmZWVkIHRyYW5zZmVycyAqL1xuK1x0Zm9yIChvZmYgPSAwLCB4ZmVyX29mZiA9IDAsIGkgPSAwOyBpIFx1MDAzYyBwa3Rfc3Bhbi1cdTAwM2VuX3hmZXJzOykge1xuK1x0XHR4ZmVyX2xlbiA9IHBrdF9zcGFuLVx1MDAzZXhmZXJzW2ldIC0geGZlcl9vZmY7XG4rXHRcdHJjID0gbWN0cF91c2JsaWJfcnhfcHJlcGFyZShkZXYtXHUwMDNlbmRldiwgcngsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZidWYsIFx1MDAyNmxlbiwgR0ZQX0tFUk5FTCk7XG4rXHRcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByYywgMCk7XG4rXG4rXHRcdEtVTklUX0FTU0VSVF9HRSh0ZXN0LCBsZW4sIGVwX21heHBhY2tldCk7XG4rXG4rXHRcdGxlbiA9IG1pbihsZW4sIHhmZXJfbGVuKTtcbitcdFx0bWVtY3B5KGJ1ZiwgcGt0YnVmICsgb2ZmLCBsZW4pO1xuK1xuK1x0XHRpZiAobGVuID09IHhmZXJfbGVuKSB7XG4rXHRcdFx0Lyogd2hvbGUvZW5kIHhmZXIsIHByb2NlZWQgdG8gbmV4dCAqL1xuK1x0XHRcdHhmZXJfb2ZmID0gMDtcbitcdFx0XHRpKys7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogcGFydGlhbCAqL1xuK1x0XHRcdHhmZXJfb2ZmICs9IGxlbjtcbitcdFx0fVxuK1xuK1x0XHRyYyA9IG1jdHBfdXNibGliX3Rlc3RfcnhfY29tcGxldGUoZGV2LVx1MDAzZW5kZXYsIHJ4LCBsZW4pO1xuK1x0XHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmMsIDApO1xuK1x0XHRvZmYgKz0gbGVuO1xuK1x0fVxuK1xuK1x0LyogY2hlY2sgcmVjZWl2ZWQgcGFja2V0cyAqL1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRldi1cdTAwM2VyeF9wa3RzLnFsZW4sIHBrdF9zcGFuLVx1MDAzZW5fcGt0cyk7XG4rXHRmb3IgKGkgPSAwOyA7IGkrKykge1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZkZXYtXHUwMDNlcnhfcGt0cyk7XG4rXG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoaSBcdTAwM2MgcGt0X3NwYW4tXHUwMDNlbl9wa3RzKVxuK1x0XHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBza2ItXHUwMDNlbGVuLCBwa3Rfc3Bhbi1cdTAwM2Vwa3RzW2ldIC0gNCk7XG4rXG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW4gbWN0cF91c2JsaWJfdGVzdF9wa3Rfc3BhbnNbXSA9IHtcbitcdC8qIE9uZSBwYWNrZXQgY29tcGxldGVseSB3aXRoaW4gYSB0cmFuc2ZlciAqL1xuK1x0eyBcIjFwMXgtY29tcGxldGVcIiwgMSwgeyA4IH0sIDEsIHsgOCB9IH0sXG4rXHQvKiBUd28gc21hbGwgcGFja2V0cyBjb21iaW5lZCB3aXRoaW4gb25lIHRyYW5zZmVyICovXG4rXHR7IFwiMnAxeC1jb21iaW5lZFwiLCAyLCB7IDgsIDggfSwgMSwgeyAxNiB9IH0sXG4rXHQvKiBBIHBhY2tldCBzcGxpdCBvdmVyIHR3byB0cmFuc2ZlcnMsIGF0IHRoZSBNQ1RQIHBheWxvYWQgKi9cbitcdHsgXCIxcDJ4LXNwbGl0LXBheWxvYWRcIiwgMSwgeyAxNiB9LCAyLCB7IDgsIDggfSB9LFxuK1x0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgVVNCIHRyYW5zcG9ydCBoZWFkZXIgKi9cbitcdHsgXCIxcDJ4LXNwbGl0LXVzYmhkclwiLCAxLCB7IDE2IH0sIDIsIHsgMiwgMTQgfSB9LFxuK1x0LyogQSBwYWNrZXQgc3BsaXQgb3ZlciB0d28gdHJhbnNmZXJzLCBhdCB0aGUgTUNUUCBoZWFkZXIgKi9cbitcdHsgXCIxcDJ4LXNwbGl0LW1jdHBoZHJcIiwgMSwgeyAxNiB9LCAyLCB7IDYsIDEwIH0gfSxcbitcdC8qIFNpbmdsZSBwYWNrZXQgc3BsaXQgb3ZlciAzIHRyYW5zZmVycywgbWlkZGxlIGVudGlyZWx5IGNvbnRpbnVhdGlvbiAqL1xuK1x0eyBcIjFwM3gtc3BsaXRcIiwgMSwgeyAxMiB9LCAzLCB7IDQsIDQsIDQgfSB9LFxuK1x0LyogTWF4LXNpemVkIHNpbmdsZSB0cmFuc2ZlciAqL1xuK1x0eyBcIjFwMXgtbGFyZ2VcIiwgMSwgeyA4MTkxIH0sIDEsIHsgODE5MSB9IH0sXG4rXHQvKiBUd28gbGFyZ2UgcGFja2V0cywgc3BsaXQgYXQgdGhlIHdvcnN0LWNhc2UgZm9yIGFsbG9jYXRpb24sIHdpdGggYVxuK1x0ICogc2luZ2xlIGJ5dGUgY29udGludWluZyB0aGUgc3BhblxuK1x0ICovXG4rXHR7IFwiMnAyeC1sYXJnZS1zcGxpdFwiLCAyLCB7IDgxOTAsIDgxOTAgfSwgMiwgeyA4MTkxLCA4MTg5IH0gfSxcbit9O1xuK1xuK0tVTklUX0FSUkFZX1BBUkFNKG1jdHBfdXNibGliX3Rlc3RfcnhfcGt0X3NwYW4sIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5zLFxuK1x0XHQgIG1jdHBfdXNibGliX3Rlc3RfcGt0X3NwYW5fdG9fZGVzYyk7XG4rXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG1jdHBfdXNibGliX3Rlc3RfY2FzZXNbXSA9IHtcbitcdEtVTklUX0NBU0UobWN0cF91c2JsaWJfdGVzdF9yeF9zaW5nbGUpLFxuK1x0S1VOSVRfQ0FTRV9QQVJBTShtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuLFxuK1x0XHRcdCBtY3RwX3VzYmxpYl90ZXN0X3J4X3BrdF9zcGFuX2dlbl9wYXJhbXMpLFxuK1x0e31cbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgbWN0cF91c2JsaWJfdGVzdF9zdWl0ZSA9IHtcbitcdC5uYW1lID0gXCJtY3RwLXVzYmxpYlwiLFxuK1x0LnRlc3RfY2FzZXMgPSBtY3RwX3VzYmxpYl90ZXN0X2Nhc2VzLFxuK307XG4rXG4ra3VuaXRfdGVzdF9zdWl0ZShtY3RwX3VzYmxpYl90ZXN0X3N1aXRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMgYi9kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzE5OTdmOTg5MDI2Zjlcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1xuQEAgLTAsMCArMSw2MjUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogbWN0cC11c2JsaWIuYyAtIE1DVFAtb3Zlci1VU0IgKERNVEYgRFNQMDI4MykgdHJhbnNwb3J0IGhlbHBlciBsaWJyYXJ5XG4rICpcbisgKiBEU1AwMjgzIGlzIGF2YWlsYWJsZSBhdDpcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IENvZGUgQ29uc3RydWN0IFB0eSBMdGRcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvY2g5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91c2IvbWN0cC11c2IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9tY3RwLmhcdTAwM2VcbitcbitpbnQgbWN0cF91c2JsaWJfcnhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCB1MTYgZXBfcGt0bGVuLCBib29sIHNwYW4pXG4re1xuK1x0aWYgKCFlcF9wa3RsZW4pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGVwX3BrdGxlbiBcdTAwMjYgflVTQl9FTkRQT0lOVF9NQVhQX01BU0spXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bWVtc2V0KHJ4LCAwLCBzaXplb2YoKnJ4KSk7XG4rXHRyeC1cdTAwM2VzcGFuID0gc3BhbjtcbitcdHJ4LVx1MDAzZWVwX3BrdGxlbiA9IGVwX3BrdGxlbjtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9pbml0KTtcbitcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcbit7XG4rXHRrZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfZmluaSk7XG4rXG4rLypcbisgKiBQcmVwYXJlIGEgdHJhbnNmZXIgYnVmZmVyIGZvciBmdXR1cmUgY29tcGxldGlvbjsgKmJ1ZnAgYW5kICpsZW5wIHdpbGxcbisgKiBiZSBwb3B1bGF0ZWQgb24gc3VjY2Vzcy5cbisgKi9cbitpbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdCAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsXG4rXHRcdFx0ICAgdm9pZCAqKmJ1ZnAsIHNpemVfdCAqbGVucCwgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4rXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcbitcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCkge1xuK1x0XHQvKiBzb21ldGhpbmcgbXVzdCBoYXZlIGdvbmUgdGVycmlibHkgd3JvbmcuIGNsZWFyIGFuZCByZXN0YXJ0ICovXG4rXHRcdG1jdHBfdXNibGliX3J4X2NhbmNlbChyeCk7XG4rXHRcdHNrYiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRsZW4gPSByeC1cdTAwM2VzcGFuID8gcm91bmR1cChNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCwgcngtXHUwMDNlZXBfcGt0bGVuKVxuK1x0XHQ6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7XG4rXG4rXHRpZiAoIXNrYikge1xuK1x0XHRza2IgPSBfX25ldGRldl9hbGxvY19za2IobmV0ZGV2LCBsZW4sIGdmcCk7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0fSBlbHNlIGlmIChza2ItXHUwMDNlY2xvbmVkIHx8IHNrYl90YWlscm9vbShza2IpIFx1MDAzYyByeC1cdTAwM2VlcF9wa3RsZW4pIHtcbitcdFx0LyogV2UgYWx3YXlzIG5lZWQgdG8gcmVhbGxvYyBpZiAtXHUwMDNlY2xvbmVkLCBhcyB3ZSBjYW5ub3RcbitcdFx0ICogcmVzdWJtaXQgdGhlIChub3ctc2hhcmVkKSBza2IgYnVmZmVyIGZvciBwb3NzaWJsZSBETUEuXG4rXHRcdCAqXG4rXHRcdCAqIE90aGVyd2lzZSAoaWYgd2UgaGF2ZSBhbiB1bi1jbG9uZWQgU0tCKToganVzdCBlbnN1cmUgd2VcbitcdFx0ICogaGF2ZSBzdWZmaWNpZW50IHNwYWNlIHRvIHByZXZlbnQgYmFiYmxlLiBTaW5jZSB3ZSBhbGxvY2F0ZWRcbitcdFx0ICogZm9yIG1heCBzaXplIGluIHRoZSBsYXN0IHByZXBhcmUgKGFuZCBoYXZlIG5vdCBjb25zdW1lZCBhbnlcbitcdFx0ICogb2YgdGhhdCBzcGFjZSBmb3IgYSBwcmlvciBNQ1RQIHBhY2tldCwgYmVjYXVzZSAhY2xvbmVkKSwgd2VcbitcdFx0ICogaGF2ZSBzdWZmaWNpZW50IGRhdGEgdG8gZmluaXNoIHRoZSBjdXJyZW50IE1DVFAgcGFja2V0LlxuK1x0XHQgKi9cbitcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjI7XG4rXG4rXHRcdHNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCAwLCBsZW4sIGdmcCk7XG4rXHRcdGlmICghc2tiMilcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbitcdFx0c2tiID0gc2tiMjtcbitcdH1cbitcbitcdHJ4LVx1MDAzZXNrYiA9IHNrYjtcbitcbitcdC8qIFNwYW5uaW5nIG1vZGUgYWxsb3dzIFpMUHMsIHNvIHdlIGRvbid0IHJlcXVpcmUgZXhhY3RseSBvbmVcbitcdCAqIHRyYW5zZmVyIHBhY2tldC4gSWYgd2UgaGF2ZSBleHRyYSB0YWlscm9vbSwgbWF5IGFzIHdlbGwgdXNlIGl0LFxuK1x0ICogYW5kIHdlIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSB0YWlscm9vbSBcdTAwM2U9IGVwX3BrdGxlbi5cbitcdCAqL1xuK1x0aWYgKHJ4LVx1MDAzZXNwYW4pXG4rXHRcdGxlbiA9IHJvdW5kZG93bihza2JfdGFpbHJvb20oc2tiKSwgcngtXHUwMDNlZXBfcGt0bGVuKTtcbitcbitcdCpidWZwID0gc2tiX3RhaWxfcG9pbnRlcihza2IpO1xuK1x0KmxlbnAgPSBsZW47XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfcHJlcGFyZSk7XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihuZXRkZXYtXHUwMDNlZHN0YXRzKTtcbitcdHN0cnVjdCBtY3RwX3NrYl9jYiAqY2I7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbitcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKTtcbitcbitcdC8qIHdlJ3JlIGNhbGxlZCBmcm9tIGFuIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIsIGFuZCBjYW5ub3QgYXNzdW1lIGxvY2FsXG4rXHQgKiBpcnFzIGFyZSBhbHdheXMgZGlzYWJsZWRcbitcdCAqL1xuK1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbitcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMpO1xuK1x0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcbitcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01DVFApO1xuK1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXHRjYiA9IF9fbWN0cF9jYihza2IpO1xuK1x0Y2ItXHUwMDNlaGFsZW4gPSAwO1xuK1x0bmV0aWZfcngoc2tiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWN0cF91c2JsaWJfcnhfc3RhdHNfc2luZ2xlX2Ryb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcGNwdV9kc3RhdHMgKmRzdGF0cyA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0dTY0X3N0YXRzX2luYyhcdTAwMjZkc3RhdHMtXHUwMDNlcnhfZHJvcHMpO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbit9XG4rXG4rLypcbisgKiBSZWNlaXZlIGEgVVNCIGNvbXBsZXRpb24gb2YgQGxlbiBieXRlcyBvZiBpbmNvbWluZyBkYXRhLiBXZSB3aWxsIHRoZW4gc3BsaXRcbisgKiB0aGlzIGludG8gcGFja2V0cyBhbmQgbmV0aWZfcngoKSBlYWNoLiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgaW4gYXRvbWljXG4rICogY29udGV4dHMgLSBpZS4sIFVSQiBjb21wbGV0aW9uLlxuKyAqXG4rICogQXNzdW1lcyBAbmV0ZGV2IHVzZXMgZHN0YXRzLlxuKyAqL1xuK2ludCBtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdCAgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LCBzaXplX3QgbGVuKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4rXHRpbnQgcmMgPSAwO1xuK1xuK1x0X19za2JfcHV0KHNrYiwgbGVuKTtcbitcbitcdGZvciAoOzspIHtcbitcdFx0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjtcbitcdFx0LyogbGVuZ3RoIG9mIE1DVFAgcGFja2V0LCBpbmNsdWRpbmcgVVNCIGhlYWRlciAqL1xuK1x0XHR1MTYgcGt0X2xlbjtcbitcbitcdFx0Lyogbm8gaGVhZGVyIHlldCwgcmVzdWJtaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi9cbitcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqaGRyKSkge1xuK1x0XHRcdGlmICghcngtXHUwMDNlc3Bhbikge1xuK1x0XHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHRcdCAgIFwicng6IHRpbnkgeGZlciAoJWQpIGluIG5vbi1zcGFuIG1vZGVcIixcbitcdFx0XHRcdFx0ICAgc2tiLVx1MDAzZWxlbik7XG4rXHRcdFx0XHRyYyA9IC1FTk9NU0c7XG4rXHRcdFx0XHRnb3RvIGVycl9yZXNldDtcbitcdFx0XHR9XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0aGRyID0gKHN0cnVjdCBtY3RwX3VzYl9oZHIgKilza2ItXHUwMDNlZGF0YTtcbitcbitcdFx0aWYgKGJlMTZfdG9fY3B1KGhkci1cdTAwM2VpZCkgIT0gTUNUUF9VU0JfRE1URl9JRCkge1xuK1x0XHRcdC8qIEJ5IHJlc2V0dGluZyBoZXJlLCB3aWxsIHN0YXJ0IHRoZSBuZXh0IElOIHRyYW5zZmVyXG4rXHRcdFx0ICogYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IHNrYi4gVGhpcyB3aWxsIG1lYW5cbitcdFx0XHQgKiB3ZSByZS1zeW5jIHdoZW4gd2UgbmV4dCBzZWUgYSBzcGFubmVkIHBhY2tldCBhbGlnbmVkXG4rXHRcdFx0ICogd2l0aCB0aGUgc3RhcnQgb2YgYSB0cmFuc2Zlci5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIEluIG5vbi1zcGFubmluZyBtb2RlLCB0aGlzIGp1c3QgbWVhbnMgd2UnbGwgZHJvcFxuK1x0XHRcdCAqIHRoZSBjdXJyZW50IHRyYW5zZmVyIG9ubHlcbitcdFx0XHQgKi9cbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCJyeDogaW52YWxpZCBpZCAlMDR4XFxuXCIsXG4rXHRcdFx0XHQgICBiZTE2X3RvX2NwdShoZHItXHUwMDNlaWQpKTtcbitcdFx0XHRyYyA9IC1FUFJPVE87XG4rXHRcdFx0Z290byBlcnJfcmVzZXQ7XG4rXHRcdH1cbitcbitcdFx0cGt0X2xlbiA9IGJlMTZfdG9fY3B1KGhkci1cdTAwM2VsZW4pO1xuK1x0XHQvKiB2MS4xLCB3aXRoIHNwYW4gZW5hYmxlZCwgaGFzIGEgMTMtYml0IGxlbmd0aCAqL1xuK1x0XHRwa3RfbGVuIFx1MDAyNj0gcngtXHUwMDNlc3BhbiA/XG4rXHRcdFx0TUNUUF9VU0JfMV8xX1BLVExFTl9NQVggOiBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWDtcbitcdFx0aWYgKHBrdF9sZW4gXHUwMDNjIHNpemVvZigqaGRyKSArIHNpemVvZihzdHJ1Y3QgbWN0cF9oZHIpKSB7XG4rXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwicng6IGludmFsaWQgbGVuICVkXFxuXCIsIHBrdF9sZW4pO1xuK1x0XHRcdHJjID0gLUVQUk9UTztcbitcdFx0XHRnb3RvIGVycl9yZXNldDtcbitcdFx0fVxuK1xuK1x0XHQvKiBzcGFuIGNvbnRpbnVlcyB0byB0aGUgbmV4dCB0cmFuc2ZlciwgcmVzdWJtaXQgKi9cbitcdFx0aWYgKHBrdF9sZW4gXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbitcdFx0XHRpZiAoIXJ4LVx1MDAzZXNwYW4pIHtcbitcdFx0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuK1x0XHRcdFx0XHQgICBcInJ4OiBzaG9ydCB4ZmVyICglZCB2cyAlZCkgaW4gbm9uLXNwYW4gbW9kZVwiLFxuK1x0XHRcdFx0XHQgICBwa3RfbGVuLCBza2ItXHUwMDNlbGVuKTtcbitcdFx0XHRcdHJjID0gLUVQUk9UTztcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc2V0O1xuK1x0XHRcdH1cbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHQvKiB3ZSBoYXZlIChleGFjdGx5KSBhIGNvbXBsZXRlIHBhY2tldCwgUlggaXQgZGlyZWN0bHkgKi9cbitcdFx0aWYgKHBrdF9sZW4gPT0gc2tiLVx1MDAzZWxlbikge1xuK1x0XHRcdG1jdHBfdXNibGliX3J4KG5ldGRldiwgc2tiKTtcbitcdFx0XHRyeC1cdTAwM2Vza2IgPSBOVUxMO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdC8qIG1vcmUgcGFja2V0cyBmb2xsb3cgLSBSWCBhIGNsb25lIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlXG4rXHRcdCAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgU0tCLCB3aGljaCBtYXkgYmUgdGhlIHN0YXJ0IG9mIGFcbitcdFx0ICogc3Bhbi5cbitcdFx0ICovXG4rXHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbitcdFx0aWYgKHNrYjIpIHtcbitcdFx0XHRza2JfdHJpbShza2IyLCBwa3RfbGVuKTtcbitcdFx0XHRtY3RwX3VzYmxpYl9yeChuZXRkZXYsIHNrYjIpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG1jdHBfdXNibGliX3J4X3N0YXRzX3NpbmdsZV9kcm9wKG5ldGRldik7XG4rXHRcdH1cbitcdFx0c2tiX3B1bGwoc2tiLCBwa3RfbGVuKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXNldDpcbitcdGRldl9rZnJlZV9za2JfYW55KHJ4LVx1MDAzZXNrYik7XG4rXHRyeC1cdTAwM2Vza2IgPSBOVUxMO1xuK1x0cmV0dXJuIHJjO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZSk7XG4rXG4rLypcbisgKiBDYW5jZWwgYSByeCBjb250ZXh0OyBzdWJzZXF1ZW50IHByZXBhcmUvY29tcGxldGUgY2FsbHMgd2lsbCBub3QgYmUgYVxuKyAqIGNvbnRpbnVhdGlvbiBvZiBhbnkgZGF0YSBhbHJlYWR5IHJlY2VpdmVkLlxuKyAqL1xuK3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXG4re1xuK1x0ZGV2X2tmcmVlX3NrYl9hbnkocngtXHUwMDNlc2tiKTtcbitcdHJ4LVx1MDAzZXNrYiA9IE5VTEw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XG4rXG4rLyogdHJhbnNtaXQgY29udGV4dDogZW5jYXBzdWxhdGVzIG9uZSB0cmFuc2ZlciAqL1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHgge1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eDtcbitcdHN0cnVjdCBza19idWZmX2hlYWQgc2ticztcbitcdHVuc2lnbmVkIGludCBidWZfbGVuLCBsZW47XG4rXHRlbnVtIG1jdHBfdXNibGliX3R4X2J1Zl90eXBlIHtcbitcdFx0VFhfU0lOR0xFLFxuK1x0XHRUWF9GTEFULFxuK1x0fSBidWZfdHlwZTtcbitcdHU4IGJ1ZltdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbit9O1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfaW5pdChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuK1x0XHRcdCBjb25zdCBzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfb3BzICpvcHMsXG4rXHRcdFx0IHZvaWQgKnByaXYsIGJvb2wgc3Bhbilcbit7XG4rXHRtZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTtcbitcdHR4LVx1MDAzZW9wcyA9ICpvcHM7XG4rXHR0eC1cdTAwM2Vwcml2ID0gcHJpdjtcbitcdHR4LVx1MDAzZXNwYW4gPSBzcGFuO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dHgtXHUwMDNlbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2luaXQpO1xuK1xuK3N0YXRpYyBpbnQgbWN0cF91c2JsaWJfdHhfYXZhaWwoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuK3tcbitcdHJldHVybiBjdHgtXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFID8gMCA6IGN0eC1cdTAwM2VidWZfbGVuIC0gY3R4LVx1MDAzZWxlbjtcbit9XG4rXG4rc3RhdGljIGJvb2wgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4KVxuK3tcbitcdC8qIFVzZSB0aGUgYmFzZWxpbmUgbGVuZ3RoIChpZSwgQlRVKSBhcyBhbiBhcHByb3hpbWF0ZVxuK1x0ICogXCJyZWFzb25hYmx5LXNpemVkXCIgcGFja2V0IHdlIGNvdWxkIGV4cGVjdC4gSWYgdGhlcmUgaXNcbitcdCAqIGluc3VmZmljaWVudCBjYXBhY2l0eSBmb3IgdGhhdCwgdGhlbiBzZW5kLlxuK1x0ICovXG4rXHRjb25zdCBzaXplX3QgcGt0X2xlbiA9IE1DVFBfVVNCX0JUVSArIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JfaGRyKTtcbitcbitcdHJldHVybiBtY3RwX3VzYmxpYl90eF9hdmFpbChjdHgpIFx1MDAzYyBwa3RfbGVuO1xuK31cbitcbisvKlxuKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlIC0gaW5kaWNhdGluZyB0aGF0IHRoZSBuZXcgc2tiXG4rICogY291bGQgbm90IGJlIGFwcGVuZGVkLiBTbywgZXJyb3JzIHJlcG9ydGVkIGhlcmUgdG8gdGhlIFRYIHBhdGggd2lsbCByZXN1bHRcbisgKiBpbiB0aGUgVFggYmVpbmcgdHJhbnNtaXR0ZWQuXG4rICovXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9hcHBlbmQoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuK1x0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0aWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9TSU5HTEUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKG1jdHBfdXNibGliX3R4X2F2YWlsKGN0eCkgXHUwMDNjIHNrYi1cdTAwM2VsZW4pXG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcbitcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYik7XG4rXG4rXHRjdHgtXHUwMDNlbGVuICs9IHNrYi1cdTAwM2VsZW47XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBtY3RwX3VzYmxpYl90eF9zZW5kKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eClcbit7XG4rXHR2b2lkICpidWY7XG4rXG4rXHQvKiBJZiB3ZSBoYXZlIGEgcWxlbiBvZiAxLCB3ZSBvbmx5IGVuZGVkIHVwIHBhY2tpbmcgYSBzaW5nbGUgc2tiLFxuK1x0ICogZGVzcGl0ZSBhbGxvY2F0aW5nIGZvciBtdWx0aXBsZS4gU2tpcCB0aGUgY29weSBhbmQgc2VuZCBkaXJlY3RseVxuK1x0ICogZnJvbSB0aGUgc2tiIGRhdGEuXG4rXHQgKi9cbitcdGlmIChjdHgtXHUwMDNlYnVmX3R5cGUgPT0gVFhfU0lOR0xFIHx8IGN0eC1cdTAwM2Vza2JzLnFsZW4gPT0gMSkge1xuK1x0XHRidWYgPSBjdHgtXHUwMDNlc2ticy5uZXh0LVx1MDAzZWRhdGE7XG4rXG4rXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2VidWZfdHlwZSA9PSBUWF9GTEFUKSB7XG4rXHRcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRcdHNpemVfdCBwb3MgPSAwO1xuK1xuK1x0XHRza2JfcXVldWVfd2FsayhcdTAwMjZjdHgtXHUwMDNlc2ticywgc2tiKSB7XG4rXHRcdFx0c2tiX2NvcHlfYml0cyhza2IsIDAsIGN0eC1cdTAwM2VidWYgKyBwb3MsIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHRcdHBvcyArPSBza2ItXHUwMDNlbGVuO1xuK1x0XHR9XG4rXG4rXHRcdGJ1ZiA9IGN0eC1cdTAwM2VidWY7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiBjdHgtXHUwMDNldHgtXHUwMDNlb3BzLnNlbmQoY3R4LCBidWYsIGN0eC1cdTAwM2VsZW4pO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsXG4rXHRcdFx0XHQgICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuK3tcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuO1xuK1xuK1x0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNmN0eC1cdTAwM2Vza2JzKSkgIT0gTlVMTClcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnlfcmVhc29uKHNrYiwgcmVhc29uKTtcbitcdGtmcmVlKGN0eCk7XG4rfVxuK1xuK3ZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eClcbit7XG4rXHRyZXR1cm4gdHhfY3R4LVx1MDAzZXR4LVx1MDAzZXByaXY7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2N0eF9wcml2KTtcbitcbisvKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIHR4IFx1MDAyNiBjb21wbGV0aW9uIHBhdGggaXMgcXVpZXNjZWQgKi9cbit2b2lkIG1jdHBfdXNibGliX3R4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eClcbit7XG4rXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZSh0eC1cdTAwM2VjdXJfY3R4LCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2ZpbmkpO1xuK1xuKy8qIE1heCBzaXplIG9mIGEgc3Bhbm5lZCBUWC4gU2luY2Ugd2UgYWxsb2NhdGUgYSBzZXBhcmF0ZSBzcGFuIGJ1ZmZlciwgbGltaXRcbisgKiB0aGUgdHgtdGltZSBhbGxvY2F0aW9ucyB0byA0ay4gTGFyZ2VyIHBhY2tldHMgd2lsbCBiZSBzZW50IGFzIHNpbmdsZVxuKyAqIHRyYW5zZmVycy5cbisgKi9cbitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRYX1NQQU5fTUFYID0gNDA5NiAtIHNpemVvZihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4KTtcbitcbitzdGF0aWMgc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqXG4rbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgYm9vbCBzaW5nbGUpXG4re1xuK1x0ZW51bSBtY3RwX3VzYmxpYl90eF9idWZfdHlwZSB0eXBlO1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4O1xuK1x0c2l6ZV90IHN6ID0gMDtcbitcbitcdGlmIChzaW5nbGUgfHwgc2tiLVx1MDAzZWxlbiBcdTAwM2UgVFhfU1BBTl9NQVgpIHtcbitcdFx0dHlwZSA9IFRYX1NJTkdMRTtcbitcdH0gZWxzZSB7XG4rXHRcdHR5cGUgPSBUWF9GTEFUO1xuK1x0XHRzeiA9IHR4LVx1MDAzZXNwYW4gPyBUWF9TUEFOX01BWCA6IE1DVFBfVVNCXzFfMF9YRkVSX1NJWkU7XG4rXHR9XG4rXG4rXHRjdHggPSBremFsbG9jX2ZsZXgoKmN0eCwgYnVmLCBzeiwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRjdHgtXHUwMDNldHggPSB0eDtcbitcdGN0eC1cdTAwM2VidWZfdHlwZSA9IHR5cGU7XG4rXHRjdHgtXHUwMDNlYnVmX2xlbiA9IHN6O1xuK1x0Y3R4LVx1MDAzZWxlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vza2JzKTtcbitcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y3R4LVx1MDAzZXNrYnMsIHNrYik7XG4rXG4rXHRyZXR1cm4gY3R4O1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqY3R4LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRib29sIG9rKVxuK3tcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbitcdGlmIChvaykge1xuK1x0XHQvKiBPbmx5IGluY2x1ZGUgdGhlIG5ldHdvcmstbGF5ZXIgZGF0YSBpbiB0eCBzdGF0czsgd2Uga25vd1xuK1x0XHQgKiB0aGF0IHRoZXJlIGlzIGEgNC1ieXRlIGhlYWRlciBwdXNoZWQgdG8gYWxsIHNrYnMgaW5cbitcdFx0ICogdHhfc2tiX3ByZXBhcmUoKVxuK1x0XHQgKi9cbitcdFx0dTY0IG4gPSBjdHgtXHUwMDNlc2ticy5xbGVuO1xuK1x0XHRzNjQgbGVuID0gY3R4LVx1MDAzZWxlbiAtIChuICogc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKTtcbitcbitcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfcGFja2V0cywgbik7XG4rXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2J5dGVzLCBsZW4pO1xuK1x0fSBlbHNlIHtcbitcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZkc3RhdHMtXHUwMDNldHhfZHJvcHMsIGN0eC1cdTAwM2Vza2JzLnFsZW4pO1xuK1x0fVxuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZkc3RhdHMtXHUwMDNlc3luY3AsIGZsYWdzKTtcbitcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2Vkc3RhdHMpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBwY3B1X2RzdGF0cyAqZHN0YXRzID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZWRzdGF0cyk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwKTtcbitcdHU2NF9zdGF0c19pbmMoXHUwMDI2ZHN0YXRzLVx1MDAzZXR4X2Ryb3BzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXHUwMDI2ZHN0YXRzLVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlZHN0YXRzKTtcbit9XG4rXG4rLypcbisgKiBDb21wbGV0aW9uIGZvciB0aGUgLVx1MDAzZXNlbmQoKSBvcC4gVGhpcyB3aWxsIHVwZGF0ZSBuZXRkZXYgc3RhdHMgYW5kXG4rICogZnJlZSB0aGUgdHggY29udGV4dC5cbisgKlxuKyAqIExpa2VseSBjYWxsZWQgZnJvbSAoYXRvbWljKSBVUkIgY29tcGxldGlvbiBjb250ZXh0LlxuKyAqL1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spXG4re1xuK1x0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID1cbitcdFx0b2sgPyBTS0JfQ09OU1VNRUQgOiBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbitcbitcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZSh0eF9jdHgsIGRldiwgb2spO1xuK1x0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUodHhfY3R4LCByZWFzb24pO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcbitcbisvKiBQcmVwYXJlIGEgc2tiIGZvciBwdXNoKClcbisgKlxuKyAqIE9uIGVycm9yLCBwb3B1bGF0ZXMgQHJlYXNvbi5cbisgKi9cbitzdGF0aWMgaW50IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc3BhbixcbitcdFx0XHRcdCAgICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uICpyZWFzb24pXG4re1xuK1x0dW5zaWduZWQgbG9uZyBwbGVuLCBtYXhfbGVuO1xuK1x0c3RydWN0IG1jdHBfdXNiX2hkciAqaGRyO1xuK1x0aW50IHJjO1xuK1xuK1x0bWF4X2xlbiA9IHNwYW4gPyBNQ1RQX1VTQl8xXzFfUEtUTEVOX01BWCA6IE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYO1xuK1xuK1x0cGxlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHRpZiAocGxlbiArIHNpemVvZigqaGRyKSBcdTAwM2UgbWF4X2xlbikge1xuK1x0XHQqcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1BLVF9UT09fQklHO1xuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1x0fVxuK1xuK1x0cmMgPSBza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKmhkcikpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG4rXHRcdHJldHVybiByYztcbitcdH1cbitcbitcdGhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTtcbitcdGlmICghaGRyKSB7XG4rXHRcdCpyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9NRU07XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0aGRyLVx1MDAzZWlkID0gY3B1X3RvX2JlMTYoTUNUUF9VU0JfRE1URl9JRCk7XG4rXHRoZHItXHUwMDNlbGVuID0gY3B1X3RvX2JlMTYocGxlbiArIHNpemVvZigqaGRyKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQdXNoIGEgbmV3IHNrYiB0byB0aGUgdHJhbnNmZXIuIE1heSByZXN1bHQgaW4gemVybyBvciBtb3JlIGNhbGxzIHRvXG4rICogb3BzLVx1MDAzZXNlbmQoKS5cbisgKlxuKyAqIFRha2VzIG93bmVyc2hpcCBvZiBAc2tiLCBpbmNsdWRpbmcgb24gZXJyb3IuXG4rICovXG4raW50IG1jdHBfdXNibGliX3R4X3B1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LFxuK1x0XHRcdHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbW9yZSlcbit7XG4rXHRzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICpjdHgsICpzZW5kX2N0eCA9IE5VTEw7XG4rXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247XG4rXHRjb25zdCBpbnQgbWF4X3RyaWVzID0gMztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgdHJ5ID0gMSwgcmM7XG4rXG4rXHRyYyA9IG1jdHBfdXNibGliX3R4X3NrYl9wcmVwYXJlKHNrYiwgdHgtXHUwMDNlc3BhbiwgXHUwMDI2cmVhc29uKTtcbitcdGlmIChyYykge1xuK1x0XHRtY3RwX3VzYmxpYl90eF9zdGF0c19zaW5nbGVfZHJvcChkZXYpO1xuK1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbitcdFx0Lyogd2UgbWF5IHN0aWxsIG5lZWQgdG8gcHJvY2VlZCwgaW4gY2FzZSBhbiBleGlzdGluZyBjdHhcbitcdFx0ICogaXMgbm93IHNlbmRhYmxlIChpZS46ICFtb3JlKS5cbitcdFx0ICovXG4rXHRcdHNrYiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbityZXRyeTpcbitcdC8qIFRyeSBhbmQgcXVldWUgdG8gdGhlIGN1cnJlbnQgY29udGV4dC4gV2UgZXhpdCB0aGlzIGNyaXRpY2FsIHNlY3Rpb25cbitcdCAqIHdpdGggYSBmZXcgYml0cyBvZiBzdGF0ZTpcbitcdCAqICAtIHNlbmRfY3R4OiBpbmRpY2F0aW5nIGEgcHJpb3IgY29udGV4dCB0aGF0IG5lZWRzIHRvIGJlIHNlbnRcbitcdCAqICAtIHNrYjogaW5kaWNhdGluZyB0aGF0IGEgc2tiIHN0aWxsIG5lZWRzIHRvIGJlIHF1ZXVlZC9zZW50XG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGN0eCA9IHR4LVx1MDAzZWN1cl9jdHg7XG4rXHRpZiAoY3R4KSB7XG4rXHRcdGlmIChza2IpIHtcbitcdFx0XHRyYyA9IG1jdHBfdXNibGliX3R4X2FwcGVuZChjdHgsIHNrYik7XG4rXHRcdFx0aWYgKHJjKSB7XG4rXHRcdFx0XHQvKiBjYW4ndCBhcHBlbmQgdG8gdGhlIHBlbmRpbmcgdHggLSBkZXRhY2ggZm9yXG4rXHRcdFx0XHQgKiBzZW5kaW5nLCBhbmQgd2UnbGwgY3JlYXRlIGEgbmV3IHR4IGJlbG93LlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRzd2FwKHR4LVx1MDAzZWN1cl9jdHgsIHNlbmRfY3R4KTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0Lyogd2UgaGF2ZSBxdWV1ZWQgKi9cbitcdFx0XHRcdHNrYiA9IE5VTEw7XG4rXHRcdFx0XHRpZiAoIW1vcmUgfHwgbWN0cF91c2JsaWJfdHhfc2hvdWxkX3NlbmQoY3R4KSlcbitcdFx0XHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKCFtb3JlKSB7XG4rXHRcdFx0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBzZW5kX2N0eCk7XG4rXHRcdH1cbitcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0aWYgKHNlbmRfY3R4KSB7XG4rXHRcdHJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChzZW5kX2N0eCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3VwZGF0ZShzZW5kX2N0eCwgZGV2LCBmYWxzZSk7XG4rXHRcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoc2VuZF9jdHgsIHJlYXNvbik7XG4rXHRcdH1cbitcdFx0c2VuZF9jdHggPSBOVUxMO1xuK1x0fVxuK1xuK1x0Lyogd2UgaGF2ZSBlaXRoZXIgcXVldWVkLCBvciB0aGUgcHJlcGFyZSBmYWlsZWQ7IG5vdGhpbmcgbW9yZSB0byBkbyAqL1xuK1x0aWYgKCFza2IpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y3R4ID0gbWN0cF91c2JsaWJfdHhfY3R4X2NyZWF0ZSh0eCwgc2tiLCAhbW9yZSk7XG4rXHRpZiAoIWN0eCkge1xuK1x0XHRuZXRkZXZfZGJnKGRldiwgXCJUWCBjb250ZXh0IGNyZWF0ZSBmYWlsZWRcXG5cIik7XG4rXHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdC8qIGlmIHdlJ3JlIHJlYWR5IHRvIHNlbmQgbm93LCBubyBuZWVkIHRvIGVucXVldWUgKi9cbitcdGlmICghbW9yZSB8fCBtY3RwX3VzYmxpYl90eF9zaG91bGRfc2VuZChjdHgpKSB7XG4rXHRcdHJjID0gbWN0cF91c2JsaWJfdHhfc2VuZChjdHgpO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRtY3RwX3VzYmxpYl90eF9zdGF0c191cGRhdGUoY3R4LCBkZXYsIGZhbHNlKTtcbitcdFx0XHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4rXHRcdH1cbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoIXR4LVx1MDAzZWN1cl9jdHgpIHtcbitcdFx0dHgtXHUwMDNlY3VyX2N0eCA9IGN0eDtcbitcdFx0Y3R4ID0gTlVMTDtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0Lyogd2UgbWF5IGhhdmUgbG9zdCB0aGUgcmFjZSB3aXRoIGEgY29uY3VycmVudCB0eDsgc2hvdWxkbid0IGhhcHBlbiwgYXNcbitcdCAqIG5kb19zdGFydF94bWl0IHNob3VsZCBiZSBzZXJpYWxpc2VkIG92ZXIgb25lIHF1ZXVlLCBidXQgdHJ5IGFnYWluXG4rXHQgKiBmcm9tIHRoZSB0b3AsIGFzIHdlIG1heSBiZSBhYmxlIHRvIHF1ZXVlIHRoZSBza2IgdG8gdGhhdCBjb250ZXh0LlxuK1x0ICovXG4rXHRpZiAoY3R4KSB7XG4rXHRcdC8qIHVubGluayB0aGUgbmV3IChzb2xlKSBza2IsIHdlIGRvbid0IHdhbnQgaXQgZnJlZWQgd2l0aCBjdHggKi9cbitcdFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vza2JzKTtcbitcdFx0bWN0cF91c2JsaWJfdHhfY3R4X2ZyZWUoY3R4LCByZWFzb24pO1xuK1x0XHRpZiAoKyt0cnkgXHUwMDNlIG1heF90cmllcykge1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdG1jdHBfdXNibGliX3R4X3N0YXRzX3NpbmdsZV9kcm9wKGRldik7XG4rXHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcdFx0fVxuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X3B1c2gpO1xuK1xuKy8qIENhbmNlbCBhIHR4OiBhbnkgdW4tc2VudCBjb250ZXh0IGlzIHJlbGVhc2VkLiAqL1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuK3tcbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN0eCA9IE5VTEw7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0c3dhcCh0eC1cdTAwM2VjdXJfY3R4LCBjdHgpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoIWN0eClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWN0cF91c2JsaWJfdHhfc3RhdHNfdXBkYXRlKGN0eCwgZGV2LCBmYWxzZSk7XG4rXHRtY3RwX3VzYmxpYl90eF9jdHhfZnJlZShjdHgsIHJlYXNvbik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2NhbmNlbCk7XG4rXG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rTU9EVUxFX0FVVEhPUihcIkplcmVteSBLZXJyIFx1MDAzY2prQGNvZGVjb25zdHJ1Y3QuY29tLmF1XHUwMDNlXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIk1DVFAgVVNCIHRyYW5zcG9ydCBsaWJyYXJ5XCIpO1xuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVClcbisjaW5jbHVkZSBcIm1jdHAtdXNibGliLXRlc3QuY1wiXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbWN0cC11c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbmluZGV4IGEyZjZmMWUwNGVmYmQwLi40YmIwNGEzNzExMDUwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdXNiL21jdHAtdXNiLmhcbkBAIC0yLDcgKzIsNyBAQFxuIC8qXG4gICogbWN0cC11c2IuaCAtIE1DVFAgVVNCIHRyYW5zcG9ydCBiaW5kaW5nOiBjb21tb24gZGVmaW5pdGlvbnMsXG4gICogYmFzZWQgb24gRE1URjAyODMgc3BlY2lmaWNhdGlvbjpcbi0gKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjAuMS5wZGZcbisgKiBodHRwczovL3d3dy5kbXRmLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3N0YW5kYXJkcy9kb2N1bWVudHMvRFNQMDI4M18xLjEuMC5wZGZcbiAgKlxuICAqIFRoZXNlIGFyZSBwcm90b2NvbC1sZXZlbCBkZWZpbml0aW9ucywgdGhhdCBtYXkgYmUgc2hhcmVkIGJldHdlZW4gaG9zdFxuICAqIGFuZCBnYWRnZXQgZHJpdmVycy5cbkBAIC0xMywxOCArMTMsOTYgQEBcbiAjaWZuZGVmIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcbiAjZGVmaW5lIF9fTElOVVhfVVNCX01DVFBfVVNCX0hcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuKy8qXG4rICogTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgaGVhZGVyLiBEU1AwMjgzIHYxLjAgaGFzIGFuIDgtYml0IGxlbmd0aCBmaWVsZFxuKyAqIChwcmVjZWRlZCBieSA4IHJlc2VydmVkIGJpdHMpLCB2MS4xIGhhcyBhIDEzLWJpdCBsZW5ndGggZmllbGQgKHByZWNlZGVkIGJ5XG4rICogMyByZXNlcnZlZCBiaXRzKS4gV2UgdXNlIGEgYmUxNiBmb3Igb3VyIGxlbmd0aCB0byBoYW5kbGUgdGhlIGxhcmdlciB2MS4xXG4rICogcmVwcmVzZW50YXRpb24sIGFuZCBtYXNrIGFzIGFwcHJvcHJpYXRlLlxuKyAqL1xuIHN0cnVjdCBtY3RwX3VzYl9oZHIge1xuIFx0X19iZTE2XHRpZDtcbi1cdHU4XHRyc3ZkO1xuLVx0dThcdGxlbjtcbitcdF9fYmUxNlx0bGVuO1xuIH0gX19wYWNrZWQ7XG4gXG4tI2RlZmluZSBNQ1RQX1VTQl9YRkVSX1NJWkVcdDUxMlxuKy8qIG1heCB0cmFuc2ZlciBzaXplIGZvciBEU1AwMjgzIHYxLjAgKi9cbisjZGVmaW5lIE1DVFBfVVNCXzFfMF9YRkVSX1NJWkVcdDUxMlxuICNkZWZpbmUgTUNUUF9VU0JfQlRVXHRcdDY4XG4gI2RlZmluZSBNQ1RQX1VTQl9NVFVfTUlOXHRNQ1RQX1VTQl9CVFVcbi0jZGVmaW5lIE1DVFBfVVNCX01UVV9NQVhcdChVOF9NQVggLSBzaXplb2Yoc3RydWN0IG1jdHBfdXNiX2hkcikpXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfUEtUTEVOX01BWFx0VThfTUFYXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzBfTVRVX01BWFx0KE1DVFBfVVNCXzFfMF9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKVxuKyNkZWZpbmUgTUNUUF9VU0JfMV8xX1BLVExFTl9NQVhcdEdFTk1BU0soMTIsIDApXG4rI2RlZmluZSBNQ1RQX1VTQl8xXzFfTVRVX01BWFx0KE1DVFBfVVNCXzFfMV9QS1RMRU5fTUFYIC0gc2l6ZW9mKHN0cnVjdCBtY3RwX3VzYl9oZHIpKVxuICNkZWZpbmUgTUNUUF9VU0JfRE1URl9JRFx0MHgxYWI0XG4gXG4rLyogbWN0cC11c2JsaWIgKi9cbitcbisvKlxuKyAqIFJYIGhhbmRsZTogZHJpdmVycyB3aWxsIHR5cGljYWxseSBjcmVhdGUgb25lIG9uIGluaXQsIHdoaWNoIHBlcnNpc3RzIGZvclxuKyAqIHRoZSBsaWZlIG9mIHRoZSBkcml2ZXIuIFRoZSBzYW1lIGhhbmRsZSBpcyB1c2VkIGZvciBwcm9ncmVzc2l2ZVxuKyAqIHByZXBhcmUgLVx1MDAzZSBjb21wbGV0ZSBvcGVyYXRpb25zIChmb3IgZWFjaCBpbmNvbWluZyBVU0IgdHJhbnNmZXIpLCB3aGljaFxuKyAqIHJlc3VsdCBpbiBuZXRpZl9yeCgpLWluZyB0aGUgTUNUUCBwYWNrZXRzIHJlY2VpdmVkXG4rICovXG4rc3RydWN0IG1jdHBfdXNibGliX3J4IHtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHR1MTYgZXBfcGt0bGVuO1xuK1x0Ym9vbCBzcGFuO1xuK307XG4rXG4raW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKTtcbit2b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCk7XG4rXG4raW50IG1jdHBfdXNibGliX3J4X3ByZXBhcmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICBzdHJ1Y3QgbWN0cF91c2JsaWJfcnggKnJ4LFxuK1x0XHRcdCAgIHZvaWQgKipidWZwLCBzaXplX3QgKmxlbnAsIGdmcF90IGdmcCk7XG4rXG4raW50IG1jdHBfdXNibGliX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgIHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngsIHNpemVfdCBsZW4pO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpO1xuK1xuKy8qXG4rICogVFggaGFuZGxlOiBjcmVhdGVkIGJ5IG1jdHBfdXNibGliX3R4X3B1c2goKSBkdXJpbmcgdGhlIHR4IHBhdGgsIGFuZFxuKyAqIG1heSBwZXJzaXN0IGFjcm9zcyBtdWx0aXBsZSBwYWNrZXQgdHJhbnNtaXRzLlxuKyAqL1xuK3N0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHg7XG4rXG4rc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyB7XG4rXHQvKiBTdGFydCBhIFVTQiBUWCBmb3IgQGRhdGEuIE9uIHJldHVybmluZyBzdWNjZXNzLCB0aGUgaW1wbGVtZW50YXRpb25cbitcdCAqIG11c3QgYXJyYW5nZSBmb3IgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZSgpIHRvIGJlIGNhbGxlZCBhdCBzb21lXG4rXHQgKiBsYXRlciBwb2ludCAoZWcuLCBvbiB1cmIgY29tcGxldGlvbikuXG4rXHQgKi9cbitcdGludCAoKnNlbmQpKHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7XG4rfTtcbitcbitzdHJ1Y3QgbWN0cF91c2JsaWJfdHgge1xuK1x0c3RydWN0IG1jdHBfdXNibGliX3R4X29wcyBvcHM7XG4rXHR2b2lkICpwcml2O1xuK1x0Ym9vbCBzcGFuO1xuK1x0LyogcHJvdGVjdHMgYWNjZXNzIHRvIGN1cl9jdHggKi9cbitcdHNwaW5sb2NrX3QgbG9jaztcbitcdC8qIGNvbnRleHQgdG8gd2hpY2ggd2UgYXJlIGFkZGluZyBwYWNrZXRzLCBjbGVhcmVkIG9uIHNlbmQgKi9cbitcdHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKmN1cl9jdHg7XG4rfTtcbitcbit2b2lkIG1jdHBfdXNibGliX3R4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbitcdFx0XHQgY29uc3Qgc3RydWN0IG1jdHBfdXNibGliX3R4X29wcyAqb3BzLCB2b2lkICpwcml2LFxuK1x0XHRcdCBib29sIHNwYW4pO1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KTtcbitcbit2b2lkICptY3RwX3VzYmxpYl90eF9jdHhfcHJpdihzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgpO1xuK1xuK2ludCBtY3RwX3VzYmxpYl90eF9wdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0c3RydWN0IG1jdHBfdXNibGliX3R4ICp0eCxcbitcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIG1vcmUpO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgbWN0cF91c2JsaWJfdHhfY3R4ICp0eF9jdHgsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgb2spO1xuK1xuK3ZvaWQgbWN0cF91c2JsaWJfdHhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbitcbiAjZW5kaWYgLyogIF9fTElOVVhfVVNCX01DVFBfVVNCX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA4OjUzOjE3LjI2MzM4NjQ4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTY0NDM2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIEZ1enppbmcgTUNUUC1vdmVyLVVTQiBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQncyBpbnRyb2R1Y2luZyBhIGNvbW1vbiBsaWJyYXJ5LCBgbWN0cC11c2JsaWIuY2AsIGZvciBNQ1RQLW92ZXItVVNCLiBUaGUgZXhpc3RpbmcgYG1jdHAtdXNiLmNgIGRyaXZlciBpcyBiZWluZyBtb2RpZmllZCB0byBsZXZlcmFnZSBpdCwgYW5kIGEgbmV3IGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgIEtjb25maWcgb3B0aW9uIGlzIGJlaW5nIGludHJvZHVjZWQuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpcyBldmVuICpyZWFjaGFibGUqIHdpdGhpbiBvdXIgdmlydHVhbGl6ZWQgdGVzdGluZyBlbnZpcm9ubWVudHMsIHNwZWNpZmljYWxseSBHQ0UgYW5kIFFFTVUuIFRoZSBwcm9tcHQncyBoaW50IGFib3V0IFwic29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIiBpcyBrZXkgaGVyZS5cblxuQWgsIHJpZ2h0LCBVU0IgZ2FkZ2V0IGFuZCBkdW1teV9oY2QgZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnkgb2Ygc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIG1lYW5pbmcgdGhleSAqYXJlKiBhY2Nlc3NpYmxlIGluIFFFTVUuIFRoYXQgc2V0dGxlcyB0aGF0LiBBbmQgc2luY2UgYG1jdHAtdXNiLmNgIGlzIGEgVVNCICpob3N0KiBkcml2ZXIgZm9yIE1DVFAgZGV2aWNlcywgd2hpY2ggdXNlcyB0aGUgVVNCIGJ1cywgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHRlc3QgaXQgdXNpbmcgZHVtbXkgVVNCIGRldmljZXMgb3IgdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrLiBBbmQgdGhpcyBpcyBleGNlbGxlbnQgbmV3cy4gVGhlIHByb21wdCBhbHNvIG1lbnRpb25lZCBzeXprYWxsZXIuXG5cblllcywgc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzIHV0aWxpemUgZHVtbXlfaGNkIGFuZCByYXctZ2FkZ2V0LCBzbyB0aGlzIG9wZW5zIHRoZSBkb29yIHRvIGVmZmVjdGl2ZSBmdXp6aW5nLiBXZSBjYW4gZGVmaW5pdGVseSBmdXp6IHRoaXMhXG5cbk5vdywgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGluIGBtY3RwLXVzYmxpYi5jYDogYG1jdHBfdXNibGliX3J4X2luaXRgLCBgbWN0cF91c2JsaWJfcnhfZmluaWAsIGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3J4X2NhbmNlbGAsIGBtY3RwX3VzYmxpYl90eF9pbml0YCwgYG1jdHBfdXNibGliX3R4X2ZpbmlgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgLlxuXG5XZSBhbHNvIGhhdmUgdGhlIGZ1bmN0aW9ucyBpbiBgbWN0cC11c2IuY2A6IGBtY3RwX3VzYl9vdXRfY29tcGxldGVgLCBgbWN0cF91c2JfdHhfc2VuZGAsIGBtY3RwX3VzYl9zdGFydF94bWl0YCwgYG1jdHBfdXNiX3J4X3F1ZXVlYCwgYG1jdHBfdXNiX2luX3VyYl9lcnJgLCBgbWN0cF91c2JfaW5fY29tcGxldGVgLCBgbWN0cF91c2JfcnhfcmV0cnlfd29ya2AsIGBtY3RwX3VzYl9vcGVuYCwgYG1jdHBfdXNiX3N0b3BgLCBgbWN0cF91c2JfcHJvYmVgLCBhbmQgYG1jdHBfdXNiX2Rpc2Nvbm5lY3RgLlxuXG5LY29uZmlnIGRlcGVuZGVuY2llcyBhcmUgbmV4dC4gYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAgZGVwZW5kcyBvbiBgVVNCYC4gYE1DVFBfVFJBTlNQT1JUX1VTQmAgYWxzbyBkZXBlbmRzIG9uIGBVU0JgIGFuZCAqc2VsZWN0cyogYE1DVFBfVFJBTlNQT1JUX1VTQkxJQmAuIFRoaXMgaW1wbGllcyB3ZSdsbCBuZWVkIHRvIGVuYWJsZSBgTUNUUF9UUkFOU1BPUlRfVVNCYCB0byB1c2UgdGhlIGxpYnJhcnkuIFdhaXQsIHdlIGFsc28gbmVlZCB0aGUgYmFzZSBgTUNUUGAgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIGJ5IGNoZWNraW5nIHRoZSBgZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1MzoyNi41MTk4MzQwMTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkyMjcyODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz00MT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTNDXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNDktXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjUwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIk1DVFAgb3ZlciBVU0IgY29tbW9uIGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNTktXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjYwOmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy02MS0gICAgICAgIGJvb2wgXFxcIk1DVFAgdXNibGliIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjQtXFxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnOjY1OmNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JcXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcIk1DVFAgVVNCIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MjcuMTEyMTE1OTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2Mjg2MDkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jeSBDaGVjazogTUNUUF9UUkFOU1BPUlRfVVNCKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1DVFBfVFJBTlNQT1JUX1VTQmAuIEFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIHJlbHkgb24gdGhpcyBtb2R1bGUuIEZpcnN0LCBJ4oCZbGwgbWVudGFsbHkgcnVuIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzOiB3aGljaCBvdGhlciBtb2R1bGVzIG1pZ2h0IG5lZWQgYSBVU0IgdHJhbnNwb3J0IGxheWVyIGZvciBNQ1RQIGNvbW11bmljYXRpb24/IFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipQbGF0Zm9ybS1TcGVjaWZpYyBEcml2ZXJzOioqIElzIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgaGFyZHdhcmUgcGxhdGZvcm1zIG9yIFNvQ3M/IEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciBwb3J0YWJpbGl0eSBhbmQgdHJvdWJsZXNob290aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIG1vZHVsZSBsZXZlcmFnZXMgYW55IHBsYXRmb3JtLXNwZWNpZmljIFVTQiBkcml2ZXJzIGFuZCBob3cgdGhhdCBtaWdodCBpbXBhY3QgZGVwbG95bWVudCBvbiBkaWZmZXJlbnQgc3lzdGVtcy5cbiogICAqKk1DVFAgUHJvdG9jb2xzIGFuZCBQcm9maWxlczoqKiBXaGF0IE1DVFAgcHJvZmlsZXMgZGVwZW5kIG9uIHRoaXMgVVNCIHRyYW5zcG9ydD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBwcm9maWxlcyBvciBjb21tYW5kcyB0aGF0IHV0aWxpemUgdGhlIFVTQiBpbnRlcmZhY2UgZGlyZWN0bHk/IFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHByb2ZpbGVzIChlLmcuLCBQTERNLCBNQ1RQIEJhc2UpIGFuZCB0aGUgdHJhbnNwb3J0IGlzIGVzc2VudGlhbC4gSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gYmFzZWQgb24gcHJvZmlsZSB1c2FnZS5cbiogICAqKlNlY3VyaXR5IENvbnNpZGVyYXRpb25zOioqIEdpdmVuIHRoYXQgdGhpcyBpbnZvbHZlcyBVU0IsIHdoaWNoIGlzIG9mdGVuIGEgcG9pbnQgb2YgZXh0ZXJuYWwgYWNjZXNzLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gVVNCIGNvbW11bmljYXRpb24gdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JgPyBBcmUgdGhlcmUgc2VjdXJpdHkgZmVhdHVyZXMgdGhhdCBkZXBlbmQgb24gdGhpcy5cbiogICAqKkNvbmZpZ3VyYXRpb24gYW5kIEJ1aWxkIE9wdGlvbnM6KiogQXJlIHRoZXJlIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoS2NvbmZpZyBvciBzaW1pbGFyKSB0aGF0IGluZmx1ZW5jZSB3aGV0aGVyIGBNQ1RQX1RSQU5TUE9SVF9VU0JgIGlzIGJ1aWx0IG9yIGVuYWJsZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGJ1aWxkIGZsYWdzIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IGl0IHdvcmtzPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGVzZSBmYWN0b3JzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIHRvIGVuc3VyZSB0aGF0IEknbSBub3QgbWlzc2luZyBhbnkgaW1wb3J0YW50IGRlcGVuZGVuY2llcy4gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1MzozMS4yNzQ5ODE3MDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdGNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVFxcbiAgNjE6XFx0ICAgICAgICBib29sIFxcXCJNQ1RQIHVzYmxpYiB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNjI6XFx0ICAgICAgICBkZXBlbmRzIG9uIE1DVFBfVFJBTlNQT1JUX1VTQkxJQj15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDYzOlxcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDY0OlxcdFxcbiAgNjU6XFx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX1VTQlxcbiAgNjY6XFx0XFx0dHJpc3RhdGUgXFxcIk1DVFAgVVNCIHRyYW5zcG9ydFxcXCJcXG4gIDY3OlxcdFxcdGRlcGVuZHMgb24gVVNCXFxuICA2ODpcXHRcXHRzZWxlY3QgTUNUUF9UUkFOU1BPUlRfVVNCTElCXFxuICA2OTpcXHRcXHRoZWxwXFxuICA3MDpcXHRcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBVU0IgdHJhbnNwb3J0LFxcbiAgNzE6XFx0XFx0ICBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjgzLlxcbiAgNzI6XFx0XFxuICA3MzpcXHRcXHQgIE1DVFAtb3Zlci1VU0IgaW50ZXJmYWNlcyBhcmUgcGVlci10by1wZWVyLCBzbyBlYWNoIGludGVyZmFjZVxcbiAgNzQ6XFx0XFx0ICByZXByZXNlbnRzIGEgcGh5c2ljYWwgY29ubmVjdGlvbiB0byBvbmUgcmVtb3RlIE1DVFAgZW5kcG9pbnQuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGVuZG1lbnVcXG4gIDc3OlxcdFxcbiAgNzg6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6MzEuMjc1MDk2Nzg0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMDMzNjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCB0aGUgTUNUUCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYE1DVFBfVFJBTlNQT1JUX1VTQmAuIE9idmlvdXNseSwgdGhhdCBsZXZlcmFnZXMgdGhlIGBVU0JgIHN0YWNrLiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBub3cgSSdtIHNoaWZ0aW5nIGdlYXJzLCBkaWdnaW5nIGRlZXBlcjogd2hhdCdzIHRoZSBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgd2l0aCBgTUNUUGAgaXRzZWxmPyBXaGVyZSBkb2VzIHRoZSBjb3JlIHByb3RvY29sIGZpdCBpbnRvIHRoZSBvdmVyYWxsIHBpY3R1cmU/IElzIGl0ICpjb21wbGV0ZWx5KiBkZXBlbmRlbnQ/IEFyZSB0aGVyZSAqb3RoZXIqIGRlcGVuZGVuY2llcyB0byBjb25zaWRlcj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGZ1bmRhbWVudGFsIGZyYW1ld29yayBzbyB0aGF0IEkgZG9uJ3QgY29uZnVzZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTM0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1MzozNC4yNzU0MzY5NTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNTY3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQ1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tY3RwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21jdHAvS2NvbmZpZy0xLVxcbm5ldC9tY3RwL0tjb25maWc6MjptZW51Y29uZmlnIE1DVFBcXG5uZXQvbWN0cC9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBORVRcXG4tLVxcbm5ldC9tY3RwL0tjb25maWctMTQtXFxubmV0L21jdHAvS2NvbmZpZzoxNTpjb25maWcgTUNUUF9URVNUXFxubmV0L21jdHAvS2NvbmZpZy0xNi0gICAgICAgIGJvb2wgXFxcIk1DVFAgY29yZSB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubmV0L21jdHAvS2NvbmZpZy0yMC1cXG5uZXQvbWN0cC9LY29uZmlnOjIxOmNvbmZpZyBNQ1RQX0ZMT1dTXFxubmV0L21jdHAvS2NvbmZpZy0yMi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA4OjUzOjM0LjUzODAxNDczNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxOTU3NDI5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQ1RQIFVTQiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTUNUUCBVU0IgaW50ZWdyYXRpb24gYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYE1DVFBgIGFuZCBgTUNUUF9UUkFOU1BPUlRfVVNCYCwgYW5kIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJgLiAgUmlnaHQsIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWN0cC11c2JsaWIuY2AsIHdoaWNoIGRlZmluZXMgdGhlIGNvcmUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBmb3IgdGhlIFVTQiBsaWJyYXJ5OlxuXG4qICAgYG1jdHBfdXNibGliX3J4X2luaXRgXG4qICAgYG1jdHBfdXNibGliX3J4X2ZpbmlgXG4qICAgYG1jdHBfdXNibGliX3J4X3ByZXBhcmVgXG4qICAgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYFxuKiAgIGBtY3RwX3VzYmxpYl9yeF9jYW5jZWxgXG4qICAgYG1jdHBfdXNibGliX3R4X2luaXRgXG4qICAgYG1jdHBfdXNibGliX3R4X2ZpbmlgXG4qICAgYG1jdHBfdXNibGliX3R4X3B1c2hgXG4qICAgYG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGVgXG4qICAgYG1jdHBfdXNibGliX3R4X2NhbmNlbGBcblxuVGhvc2UgYXJlIG15IEZvY3VzU3ltYm9scyBmcm9tIHRoZSBgbWN0cC11c2JsaWIuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSB0aGUgY29ycmVjdCBBUEkgZW50cnkgcG9pbnRzLlxuXG5Ob3csIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW4gYG1jdHAtdXNiLmNgLCBsaWtlOlxuXG4qICAgYG1jdHBfdXNiX3R4X3NlbmRgXG4qICAgYG1jdHBfdXNiX3N0YXJ0X3htaXRgXG4qICAgYG1jdHBfdXNiX3J4X3F1ZXVlYFxuKiAgIGBtY3RwX3VzYl9pbl91cmJfZXJyYFxuKiAgIGBtY3RwX3VzYl9pbl9jb21wbGV0ZWBcbiogICBgbWN0cF91c2JfcnhfcmV0cnlfd29ya2BcbiogICBgbWN0cF91c2Jfb3BlbmBcbiogICBgbWN0cF91c2Jfc3RvcGBcbiogICBgbWN0cF91c2JfcHJvYmVgXG4qICAgYG1jdHBfdXNiX2Rpc2Nvbm5lY3RgXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGFyZSBleHBvc2VkIG9yIGludGVybmFsLiBSaWdodCwgSSByZW1lbWJlciB0aGUgZ3VpZGVsaW5lIGFib3V0IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYG1jdHBfdXNiX3R4X3NlbmRgIGlzIHN0YXRpYy4gWXVwLCBpdCBpcyBpbiBgbWN0cC11c2IuY2AuIFNvIGFjY29yZGluZyB0byB0aGUgcHJvbXB0LCBJIHNob3VsZCByZWFsbHkgYmUgZm9jdXNpbmcgb24gdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiBgbWN0cC11c2JsaWIuY2AgZm9yIG15IGFuYWx5c2lzIGFuZCBhbnkgcG90ZW50aWFsIGludGVyZmFjZSBjaGFuZ2VzLlxuXG5MZXQncyB0YWtlIGEgbG9vayBpbiBgbWN0cC11c2IuY2AsIGJlY2F1c2UgSSB0aGluayBJIHdhcyBvbiB0aGUgcmlnaHQgdHJhY2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgYW55IG9mIHRob3NlIG5vbi1zdGF0aWM/IExvb2tzIGxpa2UgdGhleSBhcmUgYWxsIHN0YXRpYywgZXhjZXB0IG1vZHVsZSBpbml0L2V4aXQuIFdlbGwsIGl0IGxvb2tzIGxpa2UgYG1jdHBfdXNiX3Byb2JlYCBpcyBzdGF0aWMuIEludGVyZXN0aW5nLiBPa2F5LCBsZXQncyB0YWtlIGEgbG9vay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg5MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1Mzo0Mi43MzM3NjI0M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc0MjM3OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1jdHBfdXNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM9MzMwPXN0YXRpYyB2b2lkIG1jdHBfdXNiX25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTM0NC1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmM6MzQ1OnN0YXRpYyBpbnQgbWN0cF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYi5jLTM0Ni1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYz00MzY9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1jdHBfdXNiX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYy00MzgtXFx0LmlkX3RhYmxlXFx0PSBtY3RwX3VzYl9kZXZpY2VzLFxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2IuYzo0Mzk6XFx0LnByb2JlXFx0XFx0PSBtY3RwX3VzYl9wcm9iZSxcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNiLmMtNDQwLVxcdC5kaXNjb25uZWN0XFx0PSBtY3RwX3VzYl9kaXNjb25uZWN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1Mzo0My4xMDgwMTA1MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDI5MzI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgbWN0cF91c2JfcHJvYmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgbWN0cF91c2JfcHJvYmVgIGlzIGEgc3RhdGljIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCwgb24gaXRzIG93biwgc2VlbXMgYWNjZXB0YWJsZS4gVGhlIGRpcmVjdGl2ZSwgaG93ZXZlciwgc3BlY2lmaWNhbGx5IGVtcGhhc2l6ZXMgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMuIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIGBtY3RwLXVzYmxpYi5jYCwgd2hpY2ggc2hvdWxkIGFkZHJlc3MgdGhlIGNvbmNlcm4gbW9yZSBkaXJlY3RseS4gSXQgaXMgYmV0dGVyIGZvciB0aGlzIHRvIGJlIGEgZGlyZWN0IGV4cG9ydC4gVG8gdmVyaWZ5IHRoaXMgd2lsbCB3b3JrLCBJIHdpbGwgZXhhbWluZSBgbWN0cC11c2JsaWIuY2AgdG8gaWRlbnRpZnkgYW5kIHZlcmlmeSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZXNlIGV4cG9ydGVkIGZ1bmN0aW9ucyBhbmQgZW5zdXJlIHRoYXQgdGhpcyBhcHByb2FjaCB3aWxsIGJlIHBvc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQ3MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwODo1Mzo0Ni42MjgzMDY4MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTY4MDY0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MTg9aW50IG1jdHBfdXNibGliX3J4X2luaXQoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeCwgdTE2IGVwX3BrdGxlbiwgYm9vbCBzcGFuKVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTMxLX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MzI6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfaW5pdCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTMzLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0zND12b2lkIG1jdHBfdXNibGliX3J4X2Zpbmkoc3RydWN0IG1jdHBfdXNibGliX3J4ICpyeClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNy19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM4OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2ZpbmkpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zOS1cXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz00ND1pbnQgbWN0cF91c2JsaWJfcnhfcHJlcGFyZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTk3LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6OTg6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfcHJlcGFyZSk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTk5LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTE0MT1pbnQgbWN0cF91c2JsaWJfcnhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzMtfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzoyMzQ6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfcnhfY29tcGxldGUpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yMzUtXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MjQwPXZvaWQgbWN0cF91c2JsaWJfcnhfY2FuY2VsKHN0cnVjdCBtY3RwX3VzYmxpYl9yeCAqcngpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjQ0LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjQ1OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3J4X2NhbmNlbCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTI0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYz0yNTk9dm9pZCBtY3RwX3VzYmxpYl90eF9pbml0KHN0cnVjdCBtY3RwX3VzYmxpYl90eCAqdHgsXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMjY4LX1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM6MjY5OkVYUE9SVF9TWU1CT0xfR1BMKG1jdHBfdXNibGliX3R4X2luaXQpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0yNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MzQ5PXZvaWQgKm1jdHBfdXNibGliX3R4X2N0eF9wcml2KHN0cnVjdCBtY3RwX3VzYmxpYl90eF9jdHggKnR4X2N0eClcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNTItfVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYzozNTM6RVhQT1JUX1NZTUJPTF9HUEwobWN0cF91c2JsaWJfdHhfY3R4X3ByaXYpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy0zNTQtXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmM9MzU2PXZvaWQgbWN0cF91c2JsaWJfdHhfZmluaShzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4KVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTM1OS19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjM2MDpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9maW5pKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtMzYxLVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQzOT12b2lkIG1jdHBfdXNibGliX3R4X3NlbmRfY29tcGxldGUoc3RydWN0IG1jdHBfdXNibGliX3R4X2N0eCAqdHhfY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTQ0Ny19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjQ0ODpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNDQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTQ5Mz1pbnQgbWN0cF91c2JsaWJfdHhfcHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTU5Ny19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjU5ODpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9wdXNoKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtdXNibGliLmMtNTk5LVxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jPTYwMT12b2lkIG1jdHBfdXNibGliX3R4X2NhbmNlbChzdHJ1Y3QgbWN0cF91c2JsaWJfdHggKnR4LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jLTYxNi19XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLXVzYmxpYi5jOjYxNzpFWFBPUlRfU1lNQk9MX0dQTChtY3RwX3VzYmxpYl90eF9jYW5jZWwpO1xcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC11c2JsaWIuYy02MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA4OjUzOjQ2Ljc3Mzk5NDUzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzIxMTgzMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFBsYW4gZm9yIEZ1enppbmcgdGhlIE1DVFAgVVNCIFRyYW5zcG9ydCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBuZXcgTUNUUCBVU0IgdHJhbnNwb3J0IGRyaXZlciB0aGF0IHV0aWxpemVzIHRoZSBjb21tb24gbGlicmFyeS4gSSBuZWVkIHRvIGRlZmluZSB0aGUga2V5IGZ1bmN0aW9ucyBJJ20gZ29pbmcgdG8gdGFyZ2V0IHdpdGhpbiBGb2N1c1N5bWJvbHMuIEl0IGxvb2tzIGxpa2UgSSdsbCB3YW50IHRvIGluY2x1ZGUgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGluaXRpYWxpemF0aW9uLCBmaW5hbGl6YXRpb24sIHByZXBhcmF0aW9uLCBjb21wbGV0aW9uLCBhbmQgY2FuY2VsbGF0aW9uIGZ1bmN0aW9uczogYG1jdHBfdXNibGliX3J4X2luaXRgLCBgbWN0cF91c2JsaWJfcnhfZmluaWAsIGBtY3RwX3VzYmxpYl9yeF9wcmVwYXJlYCwgYG1jdHBfdXNibGliX3J4X2NvbXBsZXRlYCwgYG1jdHBfdXNibGliX3J4X2NhbmNlbGAsIGBtY3RwX3VzYmxpYl90eF9pbml0YCwgYG1jdHBfdXNibGliX3R4X2ZpbmlgLCBgbWN0cF91c2JsaWJfdHhfcHVzaGAsIGBtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlYCwgYW5kIGBtY3RwX3VzYmxpYl90eF9jYW5jZWxgLlxuXG5OZXh0LCBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQuIEkga25vdyBJJ2xsIGRlZmluaXRlbHkgbmVlZCBgTUNUUGAsIGBNQ1RQX1RSQU5TUE9SVF9VU0JgLCBhbmQgZXZlbiB0aG91Z2ggaXQncyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBNQ1RQX1RSQU5TUE9SVF9VU0JgLCBpdCdzIGdvb2QgcHJhY3RpY2UgdG8gaW5jbHVkZSBgTUNUUF9UUkFOU1BPUlRfVVNCTElCYC4gSSBjb25zaWRlcmVkIGBNQ1RQX1RSQU5TUE9SVF9VU0JMSUJfVEVTVGAsIGJ1dCB0aGF0J3MgYSBLVW5pdCB0ZXN0LCBhbmQgZnV6emluZyB0aGUgdGVzdCBpdHNlbGYgaXNuJ3QgdGhlIGdvYWwgaGVyZTsgd2UgY2FuIGVuYWJsZSBpdCBsYXRlciBpZiBuZWVkZWQsIHRob3VnaCBLVW5pdCB0ZXN0cyB1c3VhbGx5IHJ1biBzZXBhcmF0ZWx5LiBBbHNvLCBzaW5jZSBgTUNUUF9UUkFOU1BPUlRfVVNCYCByZWxpZXMgb24gYFVTQmAsIHRoYXQgbXVzdCBiZSBlbmFibGVkLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEFoLCByaWdodCwgYE1DVFBgIGRlcGVuZHMgb24gYE5FVGAsIHNvIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIHRvby4gU28gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgZ29pbmcgdG8gYmU6IGBNQ1RQYCwgYE1DVFBfVFJBTlNQT1JUX1VTQmAsIGBVU0JgLCBhbmQgYE5FVGAuXG5cbkZpbmFsbHksIHRoZSB0YXJnZXQgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIG9yIGR1bW15X2hjZCBpbiBRRU1VLCBzbyBpdCdzIGRlZmluaXRlbHkgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0LiBJJ20gc2F0aXNmaWVkIHdpdGggdGhpcyBwbGFuLCBzbyBJJ2xsIGdvIGFoZWFkIGFuZCBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTMyMywiT3V0cHV0VG9rZW5zIjoyNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDg6NTM6NTUuMDk1MTgxNjI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjI4NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQ1RQXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9VU0JcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWN0cF91c2JsaWJfcnhfaW5pdFwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfZmluaVwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfcHJlcGFyZVwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfY29tcGxldGVcIixcbiAgICBcIm1jdHBfdXNibGliX3J4X2NhbmNlbFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfaW5pdFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfZmluaVwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfcHVzaFwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfc2VuZF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JsaWJfdHhfY2FuY2VsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjb21tb24gbGlicmFyeSBmb3IgTUNUUC1vdmVyLVVTQiB0cmFuc3BvcnQgKG1jdHAtdXNibGliKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBNQ1RQIFVTQiBkcml2ZXIgdG8gdXNlIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkIG9yIHJhdy1nYWRnZXQpIGFuZCBoYW5kbGVzIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1DVFBcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX1VTQlwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9pbml0XCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9maW5pXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9wcmVwYXJlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl9yeF9jb21wbGV0ZVwiLFxuICAgIFwibWN0cF91c2JsaWJfcnhfY2FuY2VsXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9pbml0XCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9maW5pXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9wdXNoXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9zZW5kX2NvbXBsZXRlXCIsXG4gICAgXCJtY3RwX3VzYmxpYl90eF9jYW5jZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbW1vbiBsaWJyYXJ5IGZvciBNQ1RQLW92ZXItVVNCIHRyYW5zcG9ydCAobWN0cC11c2JsaWIpIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIE1DVFAgVVNCIGRyaXZlciB0byB1c2UgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2Qgb3IgcmF3LWdhZGdldCkgYW5kIGhhbmRsZXMgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqqffg[1] Phase: Succeeded StartedAt: 2026-07-25 08:54:40 +0000 UTC FinishedAt: 2026-07-25 08:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 08:54:40 +0000 UTC FinishedAt: 2026-07-25 08:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2] Phase: Succeeded StartedAt: 2026-07-25 08:54:40 +0000 UTC FinishedAt: 2026-07-25 11:05:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 08:54:40 +0000 UTC FinishedAt: 2026-07-25 11:05:02 +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":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 08:54:40 +0000 UTC FinishedAt: 2026-07-25 08:54:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 08:54:40 +0000 UTC FinishedAt: 2026-07-25 08:54:47 +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":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqqffg/series-workflowqqffg-convert-artifact-1281243639/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 08:54:50 +0000 UTC FinishedAt: 2026-07-25 09:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 08:54:50 +0000 UTC FinishedAt: 2026-07-25 09:35:14 +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:*2a95a576-663d-4423-979e-027d52c85247,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-workflowqqffg/series-workflowqqffg-convert-artifact-1281243639/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": "b3729ab1-8a1b-4472-aa91-ab583acd2371", "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-workflowqqffg/series-workflowqqffg-build-action-2281950285/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 08:54:50 +0000 UTC FinishedAt: 2026-07-25 09:34:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2a95a576-663d-4423-979e-027d52c85247,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-workflowqqffg/series-workflowqqffg-convert-artifact-1281243639/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": "b3729ab1-8a1b-4472-aa91-ab583acd2371", "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-workflowqqffg/series-workflowqqffg-build-action-2281950285/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 09:35:14 +0000 UTC FinishedAt: 2026-07-25 09:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 09:35:15 +0000 UTC FinishedAt: 2026-07-25 09:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 09:35:15 +0000 UTC FinishedAt: 2026-07-25 09:35:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 09:35:15 +0000 UTC FinishedAt: 2026-07-25 09:35: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":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqqffg/series-workflowqqffg-convert-artifact-1658658086/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 09:35:56 +0000 UTC FinishedAt: 2026-07-25 09:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 09:35:56 +0000 UTC FinishedAt: 2026-07-25 09:37:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b3729ab1-8a1b-4472-aa91-ab583acd2371,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-workflowqqffg/series-workflowqqffg-build-action-2281950285/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-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 09:37:42 +0000 UTC FinishedAt: 2026-07-25 09:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 09:37:42 +0000 UTC FinishedAt: 2026-07-25 09:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 09:37:42 +0000 UTC FinishedAt: 2026-07-25 10:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 09:37:42 +0000 UTC FinishedAt: 2026-07-25 10:17:07 +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:*2a95a576-663d-4423-979e-027d52c85247,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-workflowqqffg/series-workflowqqffg-convert-artifact-1658658086/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": "6f080671-c017-4ab0-ad7e-f2c0b9ec6fe6", "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-workflowqqffg/series-workflowqqffg-build-action-2477538026/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 09:37:43 +0000 UTC FinishedAt: 2026-07-25 10:17:00 +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:*2a95a576-663d-4423-979e-027d52c85247,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-workflowqqffg/series-workflowqqffg-convert-artifact-1658658086/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": "6f080671-c017-4ab0-ad7e-f2c0b9ec6fe6", "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-workflowqqffg/series-workflowqqffg-build-action-2477538026/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 10:17:07 +0000 UTC FinishedAt: 2026-07-25 10:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 10:17:07 +0000 UTC FinishedAt: 2026-07-25 10:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 10:17:07 +0000 UTC FinishedAt: 2026-07-25 10:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 10:17:08 +0000 UTC FinishedAt: 2026-07-25 10:18:48 +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:*6f080671-c017-4ab0-ad7e-f2c0b9ec6fe6,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-workflowqqffg/series-workflowqqffg-build-action-2477538026/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-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 10:19:00 +0000 UTC FinishedAt: 2026-07-25 11:05:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 10:19:00 +0000 UTC FinishedAt: 2026-07-25 11:05:02 +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":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"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:*b3729ab1-8a1b-4472-aa91-ab583acd2371,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f080671-c017-4ab0-ad7e-f2c0b9ec6fe6,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-workflowqqffg/series-workflowqqffg-build-action-2281950285/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-workflowqqffg/series-workflowqqffg-build-action-2477538026/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 10:19:00 +0000 UTC FinishedAt: 2026-07-25 10:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 10:19:00 +0000 UTC FinishedAt: 2026-07-25 10:19:08 +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":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"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-workflowqqffg/series-workflowqqffg-convert-artifact-351949931/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 10:19:00 +0000 UTC FinishedAt: 2026-07-25 10:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 10:19:00 +0000 UTC FinishedAt: 2026-07-25 10:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 10:19:01 +0000 UTC FinishedAt: 2026-07-25 10:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 10:19:12 +0000 UTC FinishedAt: 2026-07-25 11:05:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqffg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mctp_usblib_rx_init","mctp_usblib_rx_fini","mctp_usblib_rx_prepare","mctp_usblib_rx_complete","mctp_usblib_rx_cancel","mctp_usblib_tx_init","mctp_usblib_tx_fini","mctp_usblib_tx_push","mctp_usblib_tx_send_complete","mctp_usblib_tx_cancel"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["MCTP","MCTP_TRANSPORT_USB","USB","NET"],"series_id":"aec88867-161c-4e87-93ef-35544305f8dd","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 10:19:12 +0000 UTC FinishedAt: 2026-07-25 11:04:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b3729ab1-8a1b-4472-aa91-ab583acd2371,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f080671-c017-4ab0-ad7e-f2c0b9ec6fe6,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-workflowqqffg/series-workflowqqffg-build-action-2281950285/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-workflowqqffg/series-workflowqqffg-build-action-2477538026/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-workflowqqffg/series-workflowqqffg-convert-artifact-351949931/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,}