Name: series-workflowc2wqz Phase: Succeeded StartedAt: 2026-08-05 22:31:12 +0000 UTC FinishedAt: 2026-08-06 02:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[0] Phase: Succeeded StartedAt: 2026-08-05 22:31:12 +0000 UTC FinishedAt: 2026-08-05 22:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 22:31:12 +0000 UTC FinishedAt: 2026-08-05 22:48:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "E1000E" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "E1000E" ], "series_id": "d42963ba-6c74-4265-8a5e-c438067013af" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "e1000_alloc_rx_buffers", "e1000_clean_rx_irq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0UxMDAwRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2UxMDAwX2FsbG9jX3J4X2J1ZmZlcnMmIzM0OywKICAgICYjMzQ7ZTEwMDBfY2xlYW5fcnhfaXJxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSWCBwYXRoIG9mIHRoZSBlMTAwMGUgZHJpdmVyIChlMTAwMF9hbGxvY19yeF9idWZmZXJzIGFuZCBlMTAwMF9jbGVhbl9yeF9pcnEpLCB3aGljaCBpcyBmdWxseSBlbXVsYXRlZCBpbiBRRU1VIGFuZCByZWFjaGFibGUuIEl0IGFsc28gbW9kaWZpZXMgaTQwZSwgaWNlLCBhbmQgaWdjIGRyaXZlcnMsIGJ1dCB0aG9zZSBhcmUgbm90IG5hdGl2ZWx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFdlIGZvY3VzIG9uIHRoZSBlMTAwMGUgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI2ZjBhZjVjOTQzN2Y0MTY0YjAyYzYxMThhYTBkNzg0NDU1ZGFiMTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjQ3OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcbmluZGV4IDBiY2EyOTNjZjljYjcuLjgyYjNjY2M3MDI3ZWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaWNlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcbkBAIC05NDEsNiAmIzQzOzk0MSw4NiBAQCBUbyBzZWUgaW5wdXQgc2lnbmFsIG9uIHRob3NlIFBUUCBwaW5zLCB5b3UgbmVlZCB0byBjb25maWd1cmUgRFBMTCBwcm9wZXJseS5cbiBPdXRwdXQgc2lnbmFsIGlzIG9ubHkgdmlzaWJsZSBvbiBEUExMIGFuZCB0byBzZW5kIGl0IHRvIHRoZSBib2FyZCBTTUEvVS5GTCBwaW5zLFxuIERQTEwgb3V0cHV0IHBpbnMgaGF2ZSB0byBiZSBtYW51YWxseSBjb25maWd1cmVkLlxuIFxuJiM0MztVbm1hbmFnZWQgRFBMTCBTdXBwb3J0XG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7SGFyZHdhcmUgdmFyaWFudHMgb2YgRTgzMCBtYXkgc3VwcG9ydCBhbiB1bm1hbmFnZWQgRFBMTDpcbiYjNDM7XG4mIzQzOy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE4RiBmb3IgT0NQIDMuMCxcbiYjNDM7XG4mIzQzOy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE0Ri5cbiYjNDM7XG4mIzQzO0luIHRoZSBjYXNlIG9mIHRoZSB1bm1hbmFnZWQgRFBMTCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaGFyZGNvZGVkIHdpdGhpbiB0aGVcbiYjNDM7aGFyZHdhcmUgYW5kIGZpcm13YXJlLCBtZWFuaW5nIHVzZXJzIGNhbm5vdCBtb2RpZnkgc2V0dGluZ3MuIEhvd2V2ZXIsXG4mIzQzO3VzZXJzIGNhbiBjaGVjayB0aGUgRFBMTCBsb2NrIHN0YXR1cyBhbmQgb2J0YWluIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cbiYjNDM7dGhyb3VnaCB0aGUgTGludXggRFBMTCBzdWJzeXN0ZW0uXG4mIzQzO1xuJiM0MztXaGVuIHByZXNlbnQsIHRoZSBEUExMIGRldmljZSBsb2NrcyB0byBhbiBleHRlcm5hbCBzaWduYWwgcHJvdmlkZWQgdGhyb3VnaCB0aGVcbiYjNDM7UENJZS9PQ1AgcGluLiBUaGUgZXhwZWN0ZWQgaW5wdXQgc2lnbmFsIGlzIDFQUFMgKDEgUHVsc2UgUGVyIFNlY29uZCkgZW1iZWRkZWRcbiYjNDM7b24gYSAxME1IeiByZWZlcmVuY2UgY2xvY2suXG4mIzQzO1RoZSBEUExMIHByb2R1Y2VzIG91dHB1dDpcbiYjNDM7XG4mIzQzOy0gZm9yIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2wpIFx1MDAyNiBQSFkgKFBoeXNpY2FsIExheWVyKSBjbG9ja3MsXG4mIzQzO1xuJiM0MzstIDFQUFMgZm9yIHN5bmNocm9uaXphdGlvbiBvZiBvbmJvYXJkIFBIQyAoUHJlY2lzaW9uIEhhcmR3YXJlIENsb2NrKSB0aW1lci5cbiYjNDM7XG4mIzQzO0V4YW1wbGUgb3V0cHV0IG9mIHF1ZXJ5aW5nIHRoZSBMaW51eCBEUExMIHN1YnN5c3RlbSBjYW4gYmUgZm91bmQgYmVsb3cuXG4mIzQzO1xuJiM0MzsuLiBjb2RlLWJsb2NrOjogY29uc29sZVxuJiM0MzsgIDpjYXB0aW9uOiBEdW1waW5nIHRoZSBEUExMIHBpbnNcbiYjNDM7XG4mIzQzOyAgJCBcdTAwM2N5bmxcdTAwM2UgLS1zcGVjIERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcGxsLnlhbWwgLS1kdW1wIHBpbi1nZXRcbiYjNDM7ICBbeyYjMzk7Ym9hcmQtbGFiZWwmIzM5OzogJiMzOTsxNTg4LVRJTUVfU1lOQyYjMzk7LFxuJiM0MzsgICAgJiMzOTtjYXBhYmlsaXRpZXMmIzM5Ozogc2V0KCksXG4mIzQzOyAgICAmIzM5O2Nsb2NrLWlkJiMzOTs6IDI4MjU3NDQ3MTU2MTIxNixcbiYjNDM7ICAgICYjMzk7ZXN5bmMtZnJlcXVlbmN5JiMzOTs6IDEsXG4mIzQzOyAgICAmIzM5O2VzeW5jLWZyZXF1ZW5jeS1zdXBwb3J0ZWQmIzM5OzogW3smIzM5O2ZyZXF1ZW5jeS1tYXgmIzM5OzogMSwgJiMzOTtmcmVxdWVuY3ktbWluJiMzOTs6IDF9XSxcbiYjNDM7ICAgICYjMzk7ZXN5bmMtcHVsc2UmIzM5OzogMjUsXG4mIzQzOyAgICAmIzM5O2ZyZXF1ZW5jeSYjMzk7OiAxMDAwMDAwMCxcbiYjNDM7ICAgICYjMzk7aWQmIzM5OzogMTMsXG4mIzQzOyAgICAmIzM5O21vZHVsZS1uYW1lJiMzOTs6ICYjMzk7aWNlJiMzOTssXG4mIzQzOyAgICAmIzM5O3BhcmVudC1kZXZpY2UmIzM5OzogW3smIzM5O2RpcmVjdGlvbiYjMzk7OiAmIzM5O2lucHV0JiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtwYXJlbnQtaWQmIzM5OzogNixcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3N0YXRlJiMzOTs6ICYjMzk7Y29ubmVjdGVkJiMzOTt9XSxcbiYjNDM7ICAgICYjMzk7cGhhc2UtYWRqdXN0LW1heCYjMzk7OiAwLFxuJiM0MzsgICAgJiMzOTtwaGFzZS1hZGp1c3QtbWluJiMzOTs6IDAsXG4mIzQzOyAgICAmIzM5O3R5cGUmIzM5OzogJiMzOTtleHQmIzM5O30sXG4mIzQzOyAgICB7JiMzOTtib2FyZC1sYWJlbCYjMzk7OiAmIzM5O01BQy1QSFktQ0xLJiMzOTssXG4mIzQzOyAgICAgICYjMzk7Y2FwYWJpbGl0aWVzJiMzOTs6IHNldCgpLFxuJiM0MzsgICAgJiMzOTtjbG9jay1pZCYjMzk7OiAyODI1NzQ0NzE1NjEyMTYsXG4mIzQzOyAgICAmIzM5O2ZyZXF1ZW5jeSYjMzk7OiAxNTYyNTAwMDAsXG4mIzQzOyAgICAmIzM5O2lkJiMzOTs6IDE0LFxuJiM0MzsgICAgJiMzOTttb2R1bGUtbmFtZSYjMzk7OiAmIzM5O2ljZSYjMzk7LFxuJiM0MzsgICAgJiMzOTtwYXJlbnQtZGV2aWNlJiMzOTs6IFt7JiMzOTtkaXJlY3Rpb24mIzM5OzogJiMzOTtvdXRwdXQmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3BhcmVudC1pZCYjMzk7OiA2LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICYjMzk7c3RhdGUmIzM5OzogJiMzOTtjb25uZWN0ZWQmIzM5O31dLFxuJiM0MzsgICAgJiMzOTtwaGFzZS1hZGp1c3QtbWF4JiMzOTs6IDAsXG4mIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1taW4mIzM5OzogMCxcbiYjNDM7ICAgICYjMzk7dHlwZSYjMzk7OiAmIzM5O3N5bmNlLWV0aC1wb3J0JiMzOTt9LFxuJiM0MzsgIHsmIzM5O2JvYXJkLWxhYmVsJiMzOTs6ICYjMzk7MTU4OC1USU1FX1JFRiYjMzk7LFxuJiM0MzsgICAgJiMzOTtjYXBhYmlsaXRpZXMmIzM5Ozogc2V0KCksXG4mIzQzOyAgICAmIzM5O2Nsb2NrLWlkJiMzOTs6IDI4MjU3NDQ3MTU2MTIxNixcbiYjNDM7ICAgICYjMzk7ZnJlcXVlbmN5JiMzOTs6IDEsXG4mIzQzOyAgICAmIzM5O2lkJiMzOTs6IDE1LFxuJiM0MzsgICAgJiMzOTttb2R1bGUtbmFtZSYjMzk7OiAmIzM5O2ljZSYjMzk7LFxuJiM0MzsgICAgJiMzOTtwYXJlbnQtZGV2aWNlJiMzOTs6IFt7JiMzOTtkaXJlY3Rpb24mIzM5OzogJiMzOTtvdXRwdXQmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3BhcmVudC1pZCYjMzk7OiA2LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICYjMzk7c3RhdGUmIzM5OzogJiMzOTtjb25uZWN0ZWQmIzM5O31dLFxuJiM0MzsgICAgJiMzOTtwaGFzZS1hZGp1c3QtbWF4JiMzOTs6IDAsXG4mIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1taW4mIzM5OzogMCxcbiYjNDM7ICAgICYjMzk7dHlwZSYjMzk7OiAmIzM5O2ludC1vc2NpbGxhdG9yJiMzOTt9XVxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGNvbnNvbGVcbiYjNDM7ICA6Y2FwdGlvbjogRHVtcGluZyB0aGUgRFBMTCBkZXZpY2VzXG4mIzQzO1xuJiM0MzsgICQgXHUwMDNjeW5sXHUwMDNlIC0tc3BlYyBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHBsbC55YW1sIC0tZHVtcCBkZXZpY2UtZ2V0XG4mIzQzOyAgW3smIzM5O2Nsb2NrLWlkJiMzOTs6IDI4MjU3NDQ3MTU2MTIxNixcbiYjNDM7ICAgICYjMzk7aWQmIzM5OzogNixcbiYjNDM7ICAgICYjMzk7bG9jay1zdGF0dXMmIzM5OzogJiMzOTtsb2NrZWQmIzM5OyxcbiYjNDM7ICAgICYjMzk7bW9kZSYjMzk7OiAmIzM5O21hbnVhbCYjMzk7LFxuJiM0MzsgICAgJiMzOTttb2RlLXN1cHBvcnRlZCYjMzk7OiBbJiMzOTttYW51YWwmIzM5O10sXG4mIzQzOyAgICAmIzM5O21vZHVsZS1uYW1lJiMzOTs6ICYjMzk7aWNlJiMzOTssXG4mIzQzOyAgICAmIzM5O3R5cGUmIzM5OzogJiMzOTtwcHMmIzM5O31dXG4mIzQzO1xuIEdOU1MgbW9kdWxlXG4gLS0tLS0tLS0tLS1cbiBSZXF1aXJlcyBrZXJuZWwgY29tcGlsZWQgd2l0aCBDT05GSUdfR05TUz15IG9yIENPTkZJR19HTlNTPW0uXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jXG5pbmRleCA4NDRmMzFhYjM3YWQ0Li5iMDhiY2JkYjE5ZDk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNcbkBAIC02NzUsNiAmIzQzOzY3NSw4IEBAIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdHNrYiA9IGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYjtcbiBcdFx0aWYgKHNrYikge1xuIFx0XHRcdHNrYl90cmltKHNrYiwgMCk7XG4mIzQzO1x0XHRcdGlmIChsaWtlbHkoYnVmZmVyX2luZm8tXHUwMDNlZG1hKSlcbiYjNDM7XHRcdFx0XHRnb3RvIHdyaXRlX2Rlc2M7XG4gXHRcdFx0Z290byBtYXBfc2tiO1xuIFx0XHR9XG4gXG5AQCAtNjkyLDEwICYjNDM7Njk0LDEyIEBAIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdFx0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuIFx0XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSkpIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtSeCBETUEgbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSA9IDA7XG4gXHRcdFx0YWRhcHRlci1cdTAwM2VyeF9kbWFfZmFpbGVkJiM0MzsmIzQzOztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuJiM0Mzt3cml0ZV9kZXNjOlxuIFx0XHRyeF9kZXNjID0gRTEwMDBfUlhfREVTQ19FWFQoKnJ4X3JpbmcsIGkpO1xuIFx0XHRyeF9kZXNjLVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby1cdTAwM2VkbWEpO1xuIFxuQEAgLTk1Myw3ICYjNDM7OTU3LDYgQEAgc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbiBcdFx0ZG1hX3JtYigpO1x0LyogcmVhZCBkZXNjcmlwdG9yIGFuZCByeF9idWZmZXJfaW5mbyBhZnRlciBzdGF0dXMgREQgKi9cbiBcbiBcdFx0c2tiID0gYnVmZmVyX2luZm8tXHUwMDNlc2tiO1xuLVx0XHRidWZmZXJfaW5mby1cdTAwM2Vza2IgPSBOVUxMO1xuIFxuIFx0XHRwcmVmZXRjaChza2ItXHUwMDNlZGF0YSAtIE5FVF9JUF9BTElHTik7XG4gXG5AQCAtOTY3LDkgJiM0Mzs5NzAsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFxuIFx0XHRjbGVhbmVkID0gdHJ1ZTtcbiBcdFx0Y2xlYW5lZF9jb3VudCYjNDM7JiM0Mzs7XG4tXHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbi1cdFx0XHRcdCBhZGFwdGVyLVx1MDAzZXJ4X2J1ZmZlcl9sZW4sIERNQV9GUk9NX0RFVklDRSk7XG4tXHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSA9IDA7XG4gXG4gXHRcdGxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtXHUwMDNld2IudXBwZXIubGVuZ3RoKTtcbiBcbkBAIC05ODUsOCAmIzQzOzk4NSw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXG4gXHRcdGlmIChhZGFwdGVyLVx1MDAzZWZsYWdzMiBcdTAwMjYgRkxBRzJfSVNfRElTQ0FSRElORykge1xuIFx0XHRcdC8qIEFsbCByZWNlaXZlcyBtdXN0IGZpdCBpbnRvIGEgc2luZ2xlIGJ1ZmZlciAqL1xuIFx0XHRcdGVfZGJnKFwmIzM0O1JlY2VpdmUgcGFja2V0IGNvbnN1bWVkIG11bHRpcGxlIGJ1ZmZlcnNcXG5cJiMzNDspO1xuLVx0XHRcdC8qIHJlY3ljbGUgKi9cbi1cdFx0XHRidWZmZXJfaW5mby1cdTAwM2Vza2IgPSBza2I7XG4gXHRcdFx0aWYgKHN0YXRlcnIgXHUwMDI2IEUxMDAwX1JYRF9TVEFUX0VPUClcbiBcdFx0XHRcdGFkYXB0ZXItXHUwMDNlZmxhZ3MyIFx1MDAyNj0gfkZMQUcyX0lTX0RJU0NBUkRJTkc7XG4gXHRcdFx0Z290byBuZXh0X2Rlc2M7XG5AQCAtOTk0LDggJiM0Mzs5OTIsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFxuIFx0XHRpZiAodW5saWtlbHkoKHN0YXRlcnIgXHUwMDI2IEUxMDAwX1JYREVYVF9FUlJfRlJBTUVfRVJSX01BU0spIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgIShuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhBTEwpKSkge1xuLVx0XHRcdC8qIHJlY3ljbGUgKi9cbi1cdFx0XHRidWZmZXJfaW5mby1cdTAwM2Vza2IgPSBza2I7XG4gXHRcdFx0Z290byBuZXh0X2Rlc2M7XG4gXHRcdH1cbiBcbkBAIC0xMDIyLDE5ICYjNDM7MTAxOCwzMyBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFx0XHRcdHN0cnVjdCBza19idWZmICpuZXdfc2tiID1cbiBcdFx0XHRcdG5hcGlfYWxsb2Nfc2tiKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSwgbGVuZ3RoKTtcbiBcdFx0XHRpZiAobmV3X3NrYikge1xuJiM0MztcdFx0XHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXJ4X2J1ZmZlcl9sZW4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0RE1BX0ZST01fREVWSUNFKTtcbiBcdFx0XHRcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChuZXdfc2tiLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgIC1ORVRfSVBfQUxJR04sXG4gXHRcdFx0XHRcdFx0XHQgICAgICAgKHNrYi1cdTAwM2VkYXRhIC1cbiBcdFx0XHRcdFx0XHRcdFx0TkVUX0lQX0FMSUdOKSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgICAobGVuZ3RoICYjNDM7XG4gXHRcdFx0XHRcdFx0XHRcdE5FVF9JUF9BTElHTikpO1xuLVx0XHRcdFx0Lyogc2F2ZSB0aGUgc2tiIGluIGJ1ZmZlcl9pbmZvIGFzIGdvb2QgKi9cbi1cdFx0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYiA9IHNrYjtcbiYjNDM7XHRcdFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBidWZmZXJfaW5mby1cdTAwM2VkbWEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgYWRhcHRlci1cdTAwM2VyeF9idWZmZXJfbGVuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIERNQV9GUk9NX0RFVklDRSk7XG4gXHRcdFx0XHRza2IgPSBuZXdfc2tiO1xuJiM0MztcdFx0XHRcdGdvdG8gY29weWJyZWFrX2RvbmU7XG4gXHRcdFx0fVxuIFx0XHRcdC8qIGVsc2UganVzdCBjb250aW51ZSB3aXRoIHRoZSBvbGQgb25lICovXG4gXHRcdH1cbi1cdFx0LyogZW5kIGNvcHlicmVhayBjb2RlICovXG4mIzQzO1xuJiM0MztcdFx0YnVmZmVyX2luZm8tXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7XHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbiYjNDM7XHRcdFx0XHQgYWRhcHRlci1cdTAwM2VyeF9idWZmZXJfbGVuLFxuJiM0MztcdFx0XHRcdCBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcdFx0YnVmZmVyX2luZm8tXHUwMDNlZG1hID0gMDtcbiYjNDM7XG4mIzQzO2NvcHlicmVha19kb25lOlxuIFx0XHRza2JfcHV0KHNrYiwgbGVuZ3RoKTtcbiBcbiBcdFx0LyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbmluZGV4IDBjZDBlNTU5N2M5MDkuLmFiYmM3MWU4MTVhZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjZ2VuZXJhdGVkL3V0c3JlbGVhc2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9wY3R5cGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQvaW50ZWwvbGliaWUvcnguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfbWFjdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbkBAIC0yNDExLDEwICYjNDM7MjQxMiwxMiBAQCB2b2lkIGk0MGVfYXFjX2FkZF9maWx0ZXJzKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcbiBcbiBcdGlmIChmY250ICE9IG51bV9hZGQpIHtcbiBcdFx0aWYgKHZzaS1cdTAwM2V0eXBlID09IEk0MEVfVlNJX01BSU4pIHtcbi1cdFx0XHRzZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVx1MDAzZXN0YXRlKTtcbi1cdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdCBcJiMzNDtFcnJvciAlcyBhZGRpbmcgUlggZmlsdGVycyBvbiAlcywgcHJvbWlzY3VvdXMgbW9kZSBmb3JjZWQgb25cXG5cJiMzNDssXG4tXHRcdFx0XHQgbGliaWVfYXFfc3RyKGFxX3N0YXR1cyksIHZzaV9uYW1lKTtcbiYjNDM7XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHZzaS1cdTAwM2VzdGF0ZSkpIHtcbiYjNDM7XHRcdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtFcnJvciAlcyBhZGRpbmcgUlggZmlsdGVycyBvbiAlcywgcHJvbWlzY3VvdXMgbW9kZSBmb3JjZWQgb25cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgbGliaWVfYXFfc3RyKGFxX3N0YXR1cyksIHZzaV9uYW1lKTtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKHZzaS1cdTAwM2V0eXBlID09IEk0MEVfVlNJX1NSSU9WIHx8XG4gXHRcdFx0ICAgdnNpLVx1MDAzZXR5cGUgPT0gSTQwRV9WU0lfVk1EUTEgfHxcbiBcdFx0XHQgICB2c2ktXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9WTURRMikge1xuQEAgLTI0NjQsMTAgJiM0MzsyNDY3LDExIEBAIGk0MGVfYXFjX2Jyb2FkY2FzdF9maWx0ZXIoc3RydWN0IGk0MGVfdnNpICp2c2ksIGNvbnN0IGNoYXIgKnZzaV9uYW1lLFxuIFx0fVxuIFxuIFx0aWYgKGFxX3JldCkge1xuLVx0XHRzZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVx1MDAzZXN0YXRlKTtcbi1cdFx0ZGV2X3dhcm4oXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0IFwmIzM0O0Vycm9yICVzLCBmb3JjaW5nIG92ZXJmbG93IHByb21pc2N1b3VzIG9uICVzXFxuXCYjMzQ7LFxuLVx0XHRcdCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYXEuYXNxX2xhc3Rfc3RhdHVzKSwgdnNpX25hbWUpO1xuJiM0MztcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVx1MDAzZXN0YXRlKSkge1xuJiM0MztcdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RXJyb3IgJXMsIGZvcmNpbmcgb3ZlcmZsb3cgcHJvbWlzY3VvdXMgb24gJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGxpYmllX2FxX3N0cihody1cdTAwM2VhcS5hc3FfbGFzdF9zdGF0dXMpLCB2c2lfbmFtZSk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gYXFfcmV0O1xuQEAgLTM2MjIsNyAmIzQzOzM2MjYsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGk0MGVfcmluZyAqcmluZylcbiBcdH1cbiBcbiBza2lwOlxuLVx0eGRwX2luaXRfYnVmZihcdTAwMjZyaW5nLVx1MDAzZXhkcCwgeGRwX2ZyYW1lX3N6LCBcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuJiM0MztcdHhkcF9pbml0X2J1ZmYoXHUwMDI2cmluZy1cdTAwM2V4ZHBfY3R4LnhkcCwgeGRwX2ZyYW1lX3N6LCBcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuIFxuIFx0cnhfY3R4LmRidWZmID0gRElWX1JPVU5EX1VQKHJpbmctXHUwMDNlcnhfYnVmX2xlbixcbiBcdFx0XHRcdCAgICBCSVRfVUxMKEk0MEVfUlhRX0NUWF9EQlVGRl9TSElGVCkpO1xuQEAgLTEzNTgyLDYgJiM0MzsxMzU4Niw1MyBAQCBzdGF0aWMgaW50IGk0MGVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGk0MGVfeGRwX3J4X2hhc2goY29uc3Qgc3RydWN0IHhkcF9tZCAqX2N0eCwgdTMyICpoYXNoLFxuJiM0MztcdFx0XHQgICAgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSAqcnNzX3R5cGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqY3R4ID0gKGNvbnN0IHZvaWQgKilfY3R4O1xuJiM0MztcdGNvbnN0IHVuaW9uIGk0MGVfcnhfZGVzYyAqZGVzYyA9IGN0eC1cdTAwM2VkZXNjO1xuJiM0MztcdHN0cnVjdCBsaWJldGhfcnhfcHQgcnhfcHR5cGU7XG4mIzQzO1x0dTggcmF3X3J4X3B0eXBlO1xuJiM0MztcdHU2NCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGxlNjRfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQxLnN0YXR1c19lcnJvcl9sZW4pO1xuJiM0MztcdHJhd19yeF9wdHlwZSA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfUFRZUEVfTUFTSywgc3RhdHVzKTtcbiYjNDM7XHRyeF9wdHlwZSA9IGxpYmllX3J4X3B0X3BhcnNlKHJhd19yeF9wdHlwZSk7XG4mIzQzO1xuJiM0MztcdGlmICghbGliZXRoX3J4X3B0X2hhc19oYXNoKGN0eC1cdTAwM2V4ZHAucnhxLVx1MDAzZWRldiwgcnhfcHR5cGUpIHx8XG4mIzQzO1x0ICAgIEZJRUxEX0dFVChJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfTUFTSywgc3RhdHVzKSAhPVxuJiM0MztcdFx0ICAgIEk0MEVfUlhfREVTQ19GTFRTVEFUX1JTU19IQVNIKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHQqaGFzaCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQwLmhpX2R3b3JkLnJzcyk7XG4mIzQzO1x0KnJzc190eXBlID0gcnhfcHR5cGUuaGFzaF90eXBlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpNDBlX3hkcF9yeF92bGFuX3RhZyhjb25zdCBzdHJ1Y3QgeGRwX21kICpfY3R4LCBfX2JlMTYgKnZsYW5fcHJvdG8sXG4mIzQzO1x0XHRcdFx0dTE2ICp2bGFuX3RjaSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpNDBlX3hkcF9idWZmICpjdHggPSAoY29uc3Qgdm9pZCAqKV9jdHg7XG4mIzQzO1x0Y29uc3QgdW5pb24gaTQwZV9yeF9kZXNjICpkZXNjID0gY3R4LVx1MDAzZWRlc2M7XG4mIzQzO1x0dTY0IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0gbGU2NF90b19jcHUoZGVzYy1cdTAwM2V3Yi5xd29yZDEuc3RhdHVzX2Vycm9yX2xlbik7XG4mIzQzO1xuJiM0MztcdGlmICghKHN0YXR1cyBcdTAwMjYgQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTDJUQUcxUF9TSElGVCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHQqdmxhbl9wcm90byA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKTtcbiYjNDM7XHQqdmxhbl90Y2kgPSBsZTE2X3RvX2NwdShkZXNjLVx1MDAzZXdiLnF3b3JkMC5sb19kd29yZC5sMnRhZzEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB4ZHBfbWV0YWRhdGFfb3BzIGk0MGVfeGRwX21ldGFkYXRhX29wcyA9IHtcbiYjNDM7XHQueG1vX3J4X2hhc2hcdFx0PSBpNDBlX3hkcF9yeF9oYXNoLFxuJiM0MztcdC54bW9fcnhfdmxhbl90YWdcdD0gaTQwZV94ZHBfcnhfdmxhbl90YWcsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaTQwZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19vcGVuXHRcdD0gaTQwZV9vcGVuLFxuIFx0Lm5kb19zdG9wXHRcdD0gaTQwZV9jbG9zZSxcbkBAIC0xMzc4NCw2ICYjNDM7MTM4MzUsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlnX25ldGRldihzdHJ1Y3QgaTQwZV92c2kgKnZzaSlcbiBcdGk0MGVfdnNpX2NvbmZpZ19uZXRkZXZfdGModnNpLCB2c2ktXHUwMDNldGNfY29uZmlnLmVuYWJsZWRfdGMpO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZpNDBlX25ldGRldl9vcHM7XG4mIzQzO1x0bmV0ZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZpNDBlX3hkcF9tZXRhZGF0YV9vcHM7XG4gXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXHRpNDBlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXG5pbmRleCBlZjVlNjU3ODE2ZjAwLi43ZjY4YWRiNTEwOWIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuQEAgLTI0MzgsMTAgJiM0MzsyNDM4LDExIEBAIHN0YXRpYyBpbnQgaTQwZV9jbGVhbl9yeF9pcnEoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgaW50IGJ1ZGdldCxcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGludCAqcnhfY2xlYW5lZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfcnhfYnl0ZXMgPSAwLCB0b3RhbF9yeF9wYWNrZXRzID0gMDtcbiYjNDM7XHRzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqeGRwX2N0eCA9IFx1MDAyNnJ4X3JpbmctXHUwMDNleGRwX2N0eDtcbiBcdHUxNiBjbGVhbmVkX2NvdW50ID0gSTQwRV9ERVNDX1VOVVNFRChyeF9yaW5nKTtcbiBcdHUxNiBjbGVhbl90aHJlc2hvbGQgPSByeF9yaW5nLVx1MDAzZWNvdW50IC8gMjtcbiBcdHVuc2lnbmVkIGludCBvZmZzZXQgPSByeF9yaW5nLVx1MDAzZXJ4X29mZnNldDtcbi1cdHN0cnVjdCB4ZHBfYnVmZiAqeGRwID0gXHUwMDI2cnhfcmluZy1cdTAwM2V4ZHA7XG4mIzQzO1x0c3RydWN0IHhkcF9idWZmICp4ZHAgPSBcdTAwMjZ4ZHBfY3R4LVx1MDAzZXhkcDtcbiBcdHVuc2lnbmVkIGludCB4ZHBfeG1pdCA9IDA7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFx0Ym9vbCBmYWlsdXJlID0gZmFsc2U7XG5AQCAtMjUzMCw2ICYjNDM7MjUzMSw4IEBAIHN0YXRpYyBpbnQgaTQwZV9jbGVhbl9yeF9pcnEoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgaW50IGJ1ZGdldCxcbiBcdFx0aWYgKG5lb3ApXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHR4ZHBfY3R4LVx1MDAzZWRlc2MgPSByeF9kZXNjO1xuJiM0MztcbiBcdFx0eGRwX3JlcyA9IGk0MGVfcnVuX3hkcChyeF9yaW5nLCB4ZHAsIHhkcF9wcm9nKTtcbiBcbiBcdFx0aWYgKHhkcF9yZXMpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaFxuaW5kZXggMWU1ZmQ2M2Q0N2Y0Ny4uYmI3NDFmZjNlNWYyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcbkBAIC0yODMsNiAmIzQzOzI4MywxMSBAQCBzdHJ1Y3QgaTQwZV9yeF9idWZmZXIge1xuIFx0X191MzIgcGFnZV9jb3VudDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgaTQwZV94ZHBfYnVmZiB7XG4mIzQzO1x0c3RydWN0IHhkcF9idWZmIHhkcDtcbiYjNDM7XHRjb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2M7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBpNDBlX3F1ZXVlX3N0YXRzIHtcbiBcdHU2NCBwYWNrZXRzO1xuIFx0dTY0IGJ5dGVzO1xuQEAgLTM0NSw3ICYjNDM7MzUwLDcgQEAgc3RydWN0IGk0MGVfcmluZyB7XG4gXHQgKiBhbmQgdG8gcmVzdW1lIHBhY2tldCBidWlsZGluZyBmb3IgdGhpcyByaW5nIGluIHRoZSBuZXh0IGNhbGwgdG9cbiBcdCAqIGk0MGVfY2xlYW5fcnhfcmluZ19pcnEoKS5cbiBcdCAqL1xuLVx0c3RydWN0IHhkcF9idWZmIHhkcDtcbiYjNDM7XHRzdHJ1Y3QgaTQwZV94ZHBfYnVmZiB4ZHBfY3R4O1xuIFxuIFx0LyogTmV4dCBkZXNjcmlwdG9yIHRvIGJlIHByb2Nlc3NlZDsgbmV4dF90b19jbGVhbiBpcyB1cGRhdGVkIG9ubHkgb25cbiBcdCAqIHByb2Nlc3NpbmcgRU9QIGRlc2NyaXB0b3JcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R5cGUuaFxuaW5kZXggZWQ4YmJkYjU4NmRhOS4uMTZhNjVjNmU1MTUzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmhcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAjaWZuZGVmIF9JNDBFX1RZUEVfSF9cbiAjZGVmaW5lIF9JNDBFX1RZUEVfSF9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9pZl9ldGhlci5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aTQwZV9hZG1pbnEuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2k0MGVfaG1jLmhcJiMzNDtcbkBAIC02OTksNiAmIzQzOzcwMCwxMCBAQCBlbnVtIGk0MGVfcnhfZGVzY19zdGF0dXNfYml0cyB7XG4gXHRJNDBFX1JYX0RFU0NfU1RBVFVTX0xBU1QgLyogdGhpcyBlbnRyeSBtdXN0IGJlIGxhc3QhISEgKi9cbiB9O1xuIFxuJiM0MzsjZGVmaW5lIEk0MEVfUlhfREVTQ19TVEFUVVNfRkxUU1RBVF9NQVNLICAgICAgICAgICAgICAgICAgIFxcXG4mIzQzO1x0R0VOTUFTS19VTEwoSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX1NISUZUICYjNDM7IDEsIFxcXG4mIzQzO1x0XHQgICAgSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX1NISUZUKVxuJiM0MztcbiAjZGVmaW5lIEk0MEVfUlhEX1FXMV9TVEFUVVNfU0hJRlRcdDBcbiAjZGVmaW5lIEk0MEVfUlhEX1FXMV9TVEFUVVNfTUFTS1x0KChCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MQVNUKSAtIDEpIFxcXG4gXHRcdFx0XHRcdCBcdTAwM2NcdTAwM2MgSTQwRV9SWERfUVcxX1NUQVRVU19TSElGVClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbmluZGV4IDlmNDczODhlYWJhNTMuLjUxYTA1Y2U0YzdjZTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xuQEAgLTI0Niw2ICYjNDM7MjQ2LDggQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxuIFx0dTMyIG5iX2J1ZmZzLCBpO1xuIFx0ZG1hX2FkZHJfdCBkbWE7XG4gXG4mIzQzO1x0WFNLX0NIRUNLX1BSSVZfVFlQRShzdHJ1Y3QgaTQwZV94ZHBfYnVmZik7XG4mIzQzO1xuIFx0cnhfZGVzYyA9IEk0MEVfUlhfREVTQyhyeF9yaW5nLCBudHUpO1xuIFx0eGRwID0gaTQwZV9yeF9iaShyeF9yaW5nLCBudHUpO1xuIFxuQEAgLTM5Niw2ICYjNDM7Mzk4LDE0IEBAIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFdBUk5fT05fT05DRSgxKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqeHNrX2J1ZmZfdG9faTQwZV9jdHgoc3RydWN0IHhkcF9idWZmICp4ZHApXG4mIzQzO3tcbiYjNDM7XHQvKiB4ZHBfYnVmZiBwb2ludGVyIHVzZWQgYnkgWkMgY29kZSBwYXRoIGlzIGFsbG9jYXRlZCBhcyB4ZHBfYnVmZl94c2suXG4mIzQzO1x0ICogaTQwZV94ZHBfYnVmZiBwcml2YXRlIGZpZWxkcyBvdmVybGFwIHdpdGggeGRwX2J1ZmZfeHNrLVx1MDAzZWNiLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiAoc3RydWN0IGk0MGVfeGRwX2J1ZmYgKil4ZHA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaTQwZV9jbGVhbl9yeF9pcnFfemMgLSBDb25zdW1lcyBSeCBwYWNrZXRzIGZyb20gdGhlIGhhcmR3YXJlIHJpbmdcbiAgKiBAcnhfcmluZzogUnggcmluZ1xuQEAgLTQ3Miw2ICYjNDM7NDgyLDggQEAgaW50IGk0MGVfY2xlYW5fcnhfaXJxX3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIGludCBidWRnZXQpXG4gXHRcdGlmIChpNDBlX2lzX25vbl9lb3AocnhfcmluZywgcnhfZGVzYykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHR4c2tfYnVmZl90b19pNDBlX2N0eChmaXJzdCktXHUwMDNlZGVzYyA9IHJ4X2Rlc2M7XG4mIzQzO1xuIFx0XHR4ZHBfcmVzID0gaTQwZV9ydW5feGRwX3pjKHJ4X3JpbmcsIGZpcnN0LCB4ZHBfcHJvZyk7XG4gXHRcdGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMocnhfcmluZywgZmlyc3QsIHJ4X2Rlc2MsIFx1MDAyNnJ4X3BhY2tldHMsXG4gXHRcdFx0XHRcdCAgXHUwMDI2cnhfYnl0ZXMsIHhkcF9yZXMsIFx1MDAyNmZhaWx1cmUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmNcbmluZGV4IDhlOWE4YTgxNzhkNDguLmE4M2ViOWYxMDRjODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9oZWFsdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmNcbkBAIC0xMDEsNiAmIzQzOzEwMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2hlYWx0aF9zdGF0dXMgaWNlX2hlYWx0aF9zdGF0dXNfbG9va3VwW10gPSB7XG4gXHRcdFwmIzM0O1N1cHBsaWVkIE1JQiBmaWxlIGlzIGludmFsaWQuIERDQiByZXZlcnRlZCB0byBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXCYjMzQ7LFxuIFx0XHRcJiMzNDtEaXNhYmxlIEZXLUxMRFAgYW5kIGNoZWNrIERDQnggc3lzdGVtIGNvbmZpZ3VyYXRpb24uXCYjMzQ7LFxuIFx0XHR7aWNlX3BvcnRfbnVtYmVyX2xhYmVsLCBcJiMzNDtNSUIgSURcJiMzNDt9fSxcbiYjNDM7XHR7SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLLCBcJiMzNDtMb2NhbCBEUExMIGxvY2sgc3RhdHVzXCYjMzQ7LFxuJiM0MztcdFx0TlVMTCx9LFxuIH07XG4gXG4gc3RhdGljIGludCBpY2VfaGVhbHRoX3N0YXR1c19sb29rdXBfY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuQEAgLTI0Miw2ICYjNDM7MjQ0LDEwIEBAIHZvaWQgaWNlX3Byb2Nlc3NfaGVhbHRoX3N0YXR1c19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9ycV9ldmVudF9pbmZvXG4gXHRcdFx0XHRwZi1cdTAwM2VoZWFsdGhfcmVwb3J0ZXJzLmZ3X3N0YXR1cyA9ICpoZWFsdGhfaW5mbztcbiBcdFx0XHRcdGRldmxpbmtfaGVhbHRoX3JlcG9ydChwZi1cdTAwM2VoZWFsdGhfcmVwb3J0ZXJzLmZ3LFxuIFx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O0ZXIHN5bmRyb21lIHJlcG9ydGVkXCYjMzQ7LCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRpZiAoc3RhdHVzX2NvZGUgPT0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgIHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZClcbiYjNDM7XHRcdFx0XHRcdGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChwZiwgaGVhbHRoX2luZm8sIHRydWUpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfUEY6XG4gXHRcdFx0Y2FzZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfUE9SVDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oXG5pbmRleCA0Mjg3OGFiYWM5ZWIxLi44NDhhYzU4MzQyOTc5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZG1pbnFfY21kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oXG5AQCAtMTUwMCw2ICYjNDM7MTUwMCw3IEBAIHN0cnVjdCBpY2VfYXFjX2dldF9saW5rX3RvcG8ge1xuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfUENBOTU3NVx0XHQweDIxXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDMwNjMyXzgwMDMyXHQweDI0XG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9TSTUzODNfNTM4NFx0MHgyNVxuJiM0MzsjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDBcdFx0MHgyN1xuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfRTgyMl9QSFlcdFx0MHgzMFxuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfQzgyN1x0XHQweDMxXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9HRU5fQ0xLX01VWFx0MHg0N1xuQEAgLTI0ODMsMTEgJiM0MzsyNDg0LDE0IEBAIGVudW0gaWNlX2FxY19oZWFsdGhfc3RhdHVzIHtcbiBcdElDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfQk1DX1JFU0VUXHRcdFx0PSAweDUwQixcbiBcdElDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfTEFTVF9NTkdfRkFJTFx0XHRcdD0gMHg1MEMsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX1JFU09VUkNFX0FMTE9DX0ZBSUxcdFx0PSAweDUwRCxcbiYjNDM7XHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0tcdFx0XHQ9IDB4NjAxLFxuIFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9GV19MT09QXHRcdFx0PSAweDEwMDAsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0ZXX1BGUl9GQUlMXHRcdFx0PSAweDEwMDEsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfRkFJTF9BUVx0XHRcdD0gMHgxMDAyLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNXHRcdFx0XHQ2NFxuJiM0MztcbiAvKiBHZXQgSGVhbHRoIFN0YXR1cyAoaW5kaXJlY3QgMHhGRjIyKSAqL1xuIHN0cnVjdCBpY2VfYXFjX2dldF9oZWFsdGhfc3RhdHVzIHtcbiBcdF9fbGUxNiBoZWFsdGhfc3RhdHVzX2NvdW50O1xuQEAgLTI1MTQsNiAmIzQzOzI1MTgsMTMgQEAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtIHtcbiBcdF9fbGUzMiBpbnRlcm5hbF9kYXRhMjtcbiB9O1xuIFxuJiM0MzsvKiBHZXQgSGVhbHRoIFN0YXR1cyByZXNwb25zZSBidWZmZXIgZW50cnksICgweEZGMjEpXG4mIzQzOyAqIHJlcGVhdGVkIHBlciByZXBvcnRlZCBoZWFsdGggc3RhdHVzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSB7XG4mIzQzO1x0X19sZTE2IGhlYWx0aF9zdGF0dXNfY29kZTtcbiYjNDM7fTtcbiYjNDM7XG4gLyogQWRtaW4gUXVldWUgY29tbWFuZCBvcGNvZGVzICovXG4gZW51bSBpY2VfYWRtaW5xX29wYyB7XG4gXHQvKiBBUSBjb21tYW5kcyAqL1xuQEAgLTI2NzcsNiAmIzQzOzI2ODgsNyBAQCBlbnVtIGljZV9hZG1pbnFfb3BjIHtcbiBcbiBcdC8qIFN5c3RlbSBEaWFnbm9zdGljIGNvbW1hbmRzICovXG4gXHRpY2VfYXFjX29wY19zZXRfaGVhbHRoX3N0YXR1c19jZmdcdFx0PSAweEZGMjAsXG4mIzQzO1x0aWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzXHQ9IDB4RkYyMSxcbiBcdGljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzXHRcdFx0PSAweEZGMjIsXG4gXG4gXHQvKiBGVyBMb2dnaW5nIENvbW1hbmRzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNcbmluZGV4IGVmMWNlMTA2ZjgxYjUuLjJjNzJlZDE4Njk1YzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG5AQCAtMzA0OCw2ICYjNDM7MzA0OCwyOSBAQCBib29sIGljZV9pc19jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0IC0gY2hlY2sgZm9yIHVubWFuYWdlZCBDR1UgcHJlc2VuY2VcbiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2sgaWYgdGhlIHVubWFuYWdlZCBDbG9jayBHZW5lcmF0aW9uIFVuaXQgKENHVSkgZGV2aWNlIGlzIHByZXNlbnQgaW4gdGhlIG5ldGxpc3QuXG4mIzQzOyAqIFNhdmUgdGhlIENHVSBwYXJ0IG51bWJlciBpbiB0aGUgaHcgc3RydWN0dXJlIGZvciBsYXRlciB1c2UuXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiB0cnVlIC0gdW5tYW5hZ2VkIGNndSBpcyBwcmVzZW50XG4mIzQzOyAqICogZmFsc2UgLSB1bm1hbmFnZWQgY2d1IGlzIG5vdCBwcmVzZW50XG4mIzQzOyAqL1xuJiM0Mztib29sIGljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWljZV9maW5kX25ldGxpc3Rfbm9kZShodywgSUNFX0FRQ19MSU5LX1RPUE9fTk9ERV9UWVBFX0NMS19DVFJMLFxuJiM0MztcdFx0XHRcdCAgIElDRV9BUUNfTElOS19UT1BPX05PREVfQ1RYX0dMT0JBTCxcbiYjNDM7XHRcdFx0XHQgICBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwLFxuJiM0MztcdFx0XHRcdCAgIE5VTEwpKSB7XG4mIzQzO1x0XHRody1cdTAwM2VjZ3VfcGFydF9udW1iZXIgPSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2lzX2dwc19pbl9uZXRsaXN0XG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcbkBAIC02MzEyLDYgJiM0Mzs2MzM1LDExOSBAQCBib29sIGljZV9pc19md19oZWFsdGhfcmVwb3J0X3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdFx0XHRcdCAgICAgSUNFX0ZXX0FQSV9IRUFMVEhfUkVQT1JUX1BBVENIKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXNfc3VwcG9ydGVkIC0gZ2V0IHN1cHBvcnRlZCBoZWFsdGggc3RhdHVzIGNvZGVzXG4mIzQzOyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4mIzQzOyAqIEBidWZmOiBwb2ludGVyIHRvIGJ1ZmZlciB3aGVyZSBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIHdpbGwgYmUgc3RvcmVkXG4mIzQzOyAqIEBudW06IG51bWJlciBvZiBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIGJ1ZmZlciBjYW4gaG9sZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAtIHN1Y2Nlc3MsXG4mIzQzOyAqICogbmVnYXRpdmUgLSBBUSBlcnJvciBjb2RlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0MztpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXNfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtICpidWZmLFxuJiM0MztcdFx0XHRcdCAgIGludCBudW0pXG4mIzQzO3tcbiYjNDM7XHR1MTYgY29kZSA9IGljZV9hcWNfb3BjX2dldF9zdXBwb3J0ZWRfaGVhbHRoX3N0YXR1c19jb2RlcztcbiYjNDM7XHRzdHJ1Y3QgbGliaWVfYXFfZGVzYyBkZXNjO1xuJiM0MztcbiYjNDM7XHRpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYyhcdTAwMjZkZXNjLCBjb2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGljZV9hcV9zZW5kX2NtZChodywgXHUwMDI2ZGVzYywgYnVmZiwgbnVtICogc2l6ZW9mKCpidWZmKSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMgLSBnZXQgY3VycmVudCBoZWFsdGggc3RhdHVzIGFycmF5IGZyb20gdGhlIGZpcm13YXJlXG4mIzQzOyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4mIzQzOyAqIEBidWZmOiBwb2ludGVyIHRvIGJ1ZmZlciB3aGVyZSBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIHdpbGwgYmUgc3RvcmVkXG4mIzQzOyAqIEBudW06IG51bWJlciBvZiBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIGJ1ZmZlciBjYW4gaG9sZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAtIHN1Y2Nlc3MsXG4mIzQzOyAqICogbmVnYXRpdmUgLSBBUSBlcnJvciBjb2RlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1cyhzdHJ1Y3QgaWNlX2h3ICpodyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsIGludCBudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGliaWVfYXFfZGVzYyBkZXNjO1xuJiM0MztcbiYjNDM7XHRpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYyhcdTAwMjZkZXNjLFxuJiM0MztcdFx0XHRcdCAgICAgIGljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGljZV9hcV9zZW5kX2NtZChodywgXHUwMDI2ZGVzYywgYnVmZiwgbnVtICogc2l6ZW9mKCpidWZmKSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZCAtIGNoZWNrIGlmIGhlYWx0aCBzdGF0dXMgY29kZSBpcyBzdXBwb3J0ZWRcbiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNvZGU6IGhlYWx0aCBzdGF0dXMgY29kZSB0byBjaGVja1xuJiM0MzsgKiBAc3VwcG9ydGVkOiBwb2ludGVyIHRvIGJvb2xlYW4gcmVzdWx0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7aW50IGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgY29kZSxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgKnN1cHBvcnRlZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGludCBCVUZGX1NJWkUgPSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfQ09ERV9OVU07XG4mIzQzO1x0c3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19zdXBwX2VsZW0gKmJ1ZmY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0KnN1cHBvcnRlZCA9IGZhbHNlO1xuJiM0MztcdGJ1ZmYgPSBremFsbG9jX29ianMoKmJ1ZmYsIEJVRkZfU0laRSk7XG4mIzQzO1x0aWYgKCFidWZmKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0cmV0ID0gaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzX3N1cHBvcnRlZChodywgYnVmZiwgQlVGRl9TSVpFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBmcmVlX2J1ZmY7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEJVRkZfU0laRSBcdTAwMjZcdTAwMjYgYnVmZltpXS5oZWFsdGhfc3RhdHVzX2NvZGU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGxlMTZfdG9fY3B1KGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlKSA9PSBjb2RlKSB7XG4mIzQzO1x0XHRcdCpzdXBwb3J0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO2ZyZWVfYnVmZjpcbiYjNDM7XHRrZnJlZShidWZmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZSAtIGdldCBsYXN0IGhlYWx0aCBzdGF0dXMgZm9yIGdpdmVuIGNvZGVcbiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQG91dDogcG9pbnRlciB0byB0aGUgaGVhbHRoIHN0YXR1cyBzdHJ1Y3QgdG8gYmUgZmlsbGVkXG4mIzQzOyAqIEBjb2RlOiBoZWFsdGggc3RhdHVzIGNvZGUgdG8gY2hlY2tcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZShzdHJ1Y3QgaWNlX2h3ICpodyxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpvdXQsXG4mIzQzO1x0XHRcdFx0ICAgIHUxNiBjb2RlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgaW50IEJVRkZfU0laRSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19DT0RFX05VTTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmY7XG4mIzQzO1x0aW50IHJldCwgbGFzdF9zdGF0dXMgPSAtMTtcbiYjNDM7XG4mIzQzO1x0YnVmZiA9IGt6YWxsb2Nfb2JqcygqYnVmZiwgQlVGRl9TSVpFKTtcbiYjNDM7XHRpZiAoIWJ1ZmYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZXQgPSBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoaHcsIGJ1ZmYsIEJVRkZfU0laRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZnJlZV9idWZmO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBCVUZGX1NJWkUgXHUwMDI2XHUwMDI2IGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChsZTE2X3RvX2NwdShidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZSkgPT0gY29kZSlcbiYjNDM7XHRcdFx0bGFzdF9zdGF0dXMgPSBpO1xuJiM0MztcbiYjNDM7XHRpZiAobGFzdF9zdGF0dXMgXHUwMDNlPSAwKVxuJiM0MztcdFx0bWVtY3B5KG91dCwgXHUwMDI2YnVmZltsYXN0X3N0YXR1c10sIHNpemVvZigqb3V0KSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWVtc2V0KG91dCwgMCwgc2l6ZW9mKCpvdXQpKTtcbiYjNDM7XG4mIzQzO2ZyZWVfYnVmZjpcbiYjNDM7XHRrZnJlZShidWZmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9hcV9zZXRfaGVhbHRoX3N0YXR1c19jZmcgLSBDb25maWd1cmUgRlcgaGVhbHRoIGV2ZW50c1xuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcbmluZGV4IDlmNTM0NDIxMjE5NTUuLjUxMDM2MTg4Y2QzOTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oXG5AQCAtMTYyLDYgJiM0MzsxNjIsNyBAQCBpY2VfYXFfZ2V0X3BoeV9jYXBzKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBxdWFsX21vZHMsIHU4IHJlcG9ydF9tb2RlLFxuIGJvb2wgaWNlX2lzX3BoeV9yY2xrX2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xuIGJvb2wgaWNlX2lzX2Nsb2NrX211eF9pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTtcbiBib29sIGljZV9pc19jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4mIzQzO2Jvb2wgaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4gYm9vbCBpY2VfaXNfZ3BzX2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xuIGludFxuIGljZV9hcV9nZXRfbmV0bGlzdF9ub2RlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua190b3BvICpjbWQsXG5AQCAtMTg4LDYgJiM0MzsxODksMTMgQEAgaWNlX2dldF9saW5rX2RlZmF1bHRfb3ZlcnJpZGUoc3RydWN0IGljZV9saW5rX2RlZmF1bHRfb3ZlcnJpZGVfdGx2ICpsZG8sXG4gXHRcdFx0ICAgICAgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpKTtcbiBib29sIGljZV9pc19waHlfY2Fwc19hbl9lbmFibGVkKHN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICpjYXBzKTtcbiBib29sIGljZV9pc19md19oZWFsdGhfcmVwb3J0X3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4mIzQzO2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKTtcbiYjNDM7aW50IGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgY29kZSxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgKnN1cHBvcnRlZCk7XG4mIzQzO2ludCBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKHN0cnVjdCBpY2VfaHcgKmh3LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKm91dCxcbiYjNDM7XHRcdFx0XHQgICAgdTE2IGNvZGUpO1xuIGludCBpY2VfYXFfc2V0X2hlYWx0aF9zdGF0dXNfY2ZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBldmVudF9zb3VyY2UpO1xuIGludCBpY2VfYXFfZ2V0X3BoeV9lcXVhbGl6YXRpb24oc3RydWN0IGljZV9odyAqaHcsIHUxNiBkYXRhX2luLCB1MTYgb3BfY29kZSxcbiBcdFx0XHRcdHU4IHNlcmRlc19udW0sIGludCAqb3V0cHV0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuY1xuaW5kZXggYTEwYzFjOGQ4Njk3Ny4uYmI1Y2MwYTJiYTY5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmNcbkBAIC04NzIsNyAmIzQzOzg3Miw3IEBAIHN0YXRpYyBpbnQgaWNlX2RjYm5sX2RlbGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRpZiAocGYtXHUwMDNlZGNieF9jYXAgXHUwMDI2IERDQl9DQVBfRENCWF9MTERfTUFOQUdFRCkge1xuLVx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7Y2FuJiMzOTt0IGRlbGV0ZSBEU0NQIG5ldGxpbmsgYXBwIHdoZW4gRlcgRENCIGFnZW50IGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7Y2FuJiMzOTt0IGRlbGV0ZSBEU0NQIG5ldGxpbmsgYXBwIHdoZW4gRlcgRENCIGFnZW50IGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbmluZGV4IDg1YTc0Y2Q2ZWExZjMuLjFjYTEzN2Y2N2RkNDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbkBAIC0xOSw2ICYjNDM7MTksOCBAQFxuICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfU0ZQXHRcdDRcbiAjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9JTlBVVF9CQVNFX1FTRlBcdFx0NlxuICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX09VVFBVVF9CQVNFXHRcdDBcbiYjNDM7I2RlZmluZSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRFx0XHQxXG4mIzQzOyNkZWZpbmUgSUNFX0RQTExfSEVBTFRIX1NUQVRVU19VTkxPQ0tFRFx0XHQwXG4gXG4gI2RlZmluZSBFODI1X1JDTEtfUEFSRU5UXzBfUElOX0lEWFx0XHQwXG4gI2RlZmluZSBFODI1X1JDTEtfUEFSRU5UXzFfUElOX0lEWFx0XHQxXG5AQCAtODksNiAmIzQzOzkxLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkW10gPSB7XG4mIzQzO1x0RFBMTF9QSU5fRlJFUVVFTkNZXzFQUFMsXG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIGljZV9kcGxsX2lzX3N3X3BpbiAtIGNoZWNrIGlmIGdpdmVuIHBpbiBzaGFsbCBiZSBjb250cm9sbGVkIGJ5IFNXXG4gICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxuQEAgLTEwOTgsOSAmIzQzOzExMDQsMTEgQEAgaWNlX2RwbGxfcGluX3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuLVx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRpZiAoIXBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4gXHRpZiAocGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQgfHxcbiBcdCAgICBwaW5fdHlwZSA9PSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpXG4gXHRcdCpzdGF0ZSA9IHAtXHUwMDNlc3RhdGVbZC1cdTAwM2VkcGxsX2lkeF07XG5AQCAtMjI0Myw5ICYjNDM7MjI1MSwxNCBAQCBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbi1cdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlO1xuLVx0ZXN5bmMtXHUwMDNlcmFuZ2VfbnVtID0gQVJSQVlfU0laRShpY2VfZXN5bmNfcmFuZ2UpO1xuLVx0aWYgKHAtXHUwMDNlZmxhZ3NbMF0gXHUwMDI2IElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9FU1lOQ19FTikge1xuJiM0MztcdGlmIChwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbiYjNDM7XHRcdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZDtcbiYjNDM7XHRcdGVzeW5jLVx1MDAzZXJhbmdlX251bSA9IEFSUkFZX1NJWkUoaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlO1xuJiM0MztcdFx0ZXN5bmMtXHUwMDNlcmFuZ2VfbnVtID0gQVJSQVlfU0laRShpY2VfZXN5bmNfcmFuZ2UpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocC1cdTAwM2VmbGFnc1swXSBcdTAwMjYgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRCkge1xuIFx0XHRlc3luYy1cdTAwM2VmcmVxID0gRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFo7XG4gXHRcdGVzeW5jLVx1MDAzZXB1bHNlID0gSUNFX0RQTExfUElOX0VTWU5DX1BVTFNFX0hJR0hfUEVSQ0VOVDtcbiBcdH0gZWxzZSB7XG5AQCAtMjg3Niw2ICYjNDM7Mjg4OSwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfb3BzID0ge1xuIFx0LmVzeW5jX2dldCA9IGljZV9kcGxsX291dHB1dF9lc3luY19nZXQsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgaWNlX2RwbGxfaW5wdXRfdW5tYW5hZ2VkX29wcyA9IHtcbiYjNDM7XHQuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX2lucHV0X2ZyZXF1ZW5jeV9nZXQsXG4mIzQzO1x0LmRpcmVjdGlvbl9nZXQgPSBpY2VfZHBsbF9pbnB1dF9kaXJlY3Rpb24sXG4mIzQzO1x0LnN0YXRlX29uX2RwbGxfZ2V0ID0gaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0LFxuJiM0MztcdC5lc3luY19nZXQgPSBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyA9IHtcbiYjNDM7XHQuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX291dHB1dF9mcmVxdWVuY3lfZ2V0LFxuJiM0MztcdC5kaXJlY3Rpb25fZ2V0ID0gaWNlX2RwbGxfb3V0cHV0X2RpcmVjdGlvbixcbiYjNDM7XHQuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfc3RhdGVfZ2V0LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyBpY2VfZHBsbF9vcHMgPSB7XG4gXHQubG9ja19zdGF0dXNfZ2V0ID0gaWNlX2RwbGxfbG9ja19zdGF0dXNfZ2V0LFxuIFx0Lm1vZGVfZ2V0ID0gaWNlX2RwbGxfbW9kZV9nZXQsXG5AQCAtMzQzOSw4ICYjNDM7MzQ2NSwxMCBAQCBpY2VfZHBsbF9kZWluaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZHBsbF9kZXZpY2UgKnNlY29uZClcbiB7XG4gXHRpZiAoY2d1KSB7XG4tXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XG4tXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpO1xuJiM0MztcdFx0aWYgKGZpcnN0KVxuJiM0MztcdFx0XHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZmlyc3QsIHBpbnMsIG9wcywgY291bnQpO1xuJiM0MztcdFx0aWYgKHNlY29uZClcbiYjNDM7XHRcdFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKHNlY29uZCwgcGlucywgb3BzLCBjb3VudCk7XG4gXHR9XG4gXHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMocGlucywgY291bnQpO1xuIH1cbkBAIC0zNDcyLDEyICYjNDM7MzUwMCwxNSBAQCBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSxcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBpY2VfZHBsbF9nZXRfcGlucyhwZiwgcGlucywgc3RhcnRfaWR4LCBjb3VudCwgcGYtXHUwMDNlZHBsbHMuY2xvY2tfaWQpO1xuLVx0aWYgKHJldClcbiYjNDM7XHRpZiAoIWNndSB8fCByZXQpXG4gXHRcdHJldHVybiByZXQ7XG4tXHRpZiAoY2d1KSB7XG4mIzQzO1xuJiM0MztcdGlmIChmaXJzdCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIHJlbGVhc2VfcGlucztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNlY29uZCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKHNlY29uZCwgcGlucywgb3BzLCBjb3VudCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byB1bnJlZ2lzdGVyX2ZpcnN0O1xuQEAgLTM0ODYsNyAmIzQzOzM1MTcsOCBAQCBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSxcbiBcdHJldHVybiAwO1xuIFxuIHVucmVnaXN0ZXJfZmlyc3Q6XG4tXHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZmlyc3QsIHBpbnMsIG9wcywgY291bnQpO1xuJiM0MztcdGlmIChmaXJzdClcbiYjNDM7XHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XG4gcmVsZWFzZV9waW5zOlxuIFx0aWNlX2RwbGxfcmVsZWFzZV9waW5zKHBpbnMsIGNvdW50KTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMzgyNCw2ICYjNDM7Mzg1NiwxOCBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmRlID0gXHUwMDI2ZC1cdTAwM2VlZWM7XG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmRwID0gXHUwMDI2ZC1cdTAwM2VwcHM7XG4gXG4mIzQzO1x0aWYgKGQtXHUwMDNldW5tYW5hZ2VkKSB7XG4mIzQzO1x0XHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtXHUwMDNlZHBsbCwgaW5wdXRzLFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNmljZV9kcGxsX2lucHV0X3VubWFuYWdlZF9vcHMsXG4mIzQzO1x0XHRcdFx0XHQgbnVtX2lucHV0cyk7XG4mIzQzO1x0XHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtXHUwMDNlZHBsbCwgb3V0cHV0cyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyxcbiYjNDM7XHRcdFx0XHRcdCBudW1fb3V0cHV0cyk7XG4mIzQzO1x0XHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMoaW5wdXRzLCBudW1faW5wdXRzKTtcbiYjNDM7XHRcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhvdXRwdXRzLCBudW1fb3V0cHV0cyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGljZV9kcGxsX2RlaW5pdF9yY2xrX3BpbihwZik7XG4gXHRpZiAocGYtXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcbiBcdFx0aWNlX2RwbGxfZGVpbml0X3R4Y2xrX3BpbnMocGYpO1xuQEAgLTQwODIsMjMgJiM0Mzs0MTI2LDI5IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbiBcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKmlucHV0X29wcztcbiBcdGludCByZXQsIGNvdW50O1xuIFxuLVx0aW5wdXRfb3BzID0gXHUwMDI2aWNlX2RwbGxfaW5wdXRfb3BzO1xuLVx0b3V0cHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX291dHB1dF9vcHM7XG4mIzQzO1x0aWYgKCFwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbiYjNDM7XHRcdGlucHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX2lucHV0X29wcztcbiYjNDM7XHRcdG91dHB1dF9vcHMgPSBcdTAwMjZpY2VfZHBsbF9vdXRwdXRfb3BzO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpbnB1dF9vcHMgPSBcdTAwMjZpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzO1xuJiM0MztcdFx0b3V0cHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX291dHB1dF91bm1hbmFnZWRfb3BzO1xuJiM0MztcdH1cbiBcbiBcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXHUwMDNlZHBsbHMuaW5wdXRzLCAwLFxuIFx0XHRcdFx0XHRwZi1cdTAwM2VkcGxscy5udW1faW5wdXRzLCBpbnB1dF9vcHMsXG4tXHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsLFxuLVx0XHRcdFx0XHRwZi1cdTAwM2VkcGxscy5wcHMuZHBsbCk7XG4mIzQzO1x0XHRcdFx0XHRwZi1cdTAwM2VkcGxscy5lZWMuZHBsbCwgcGYtXHUwMDNlZHBsbHMucHBzLmRwbGwpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdGNvdW50ID0gcGYtXHUwMDNlZHBsbHMubnVtX2lucHV0cztcbi1cdGlmIChjZ3UpIHtcbiYjNDM7XHRpZiAoY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLm91dHB1dHMsXG4gXHRcdFx0XHRcdFx0Y291bnQsIHBmLVx1MDAzZWRwbGxzLm51bV9vdXRwdXRzLFxuIFx0XHRcdFx0XHRcdG91dHB1dF9vcHMsIHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsLFxuIFx0XHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIGRlaW5pdF9pbnB1dHM7XG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0Y291bnQgJiM0Mzs9IHBmLVx1MDAzZWRwbGxzLm51bV9vdXRwdXRzO1xuIFx0XHRpZiAoIXBmLVx1MDAzZWRwbGxzLmdlbmVyaWMpIHtcbiBcdFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLnNtYSxcbkBAIC00MjA2LDEyICYjNDM7NDI1NiwxMyBAQCBpY2VfZHBsbF9pbml0X2RwbGwoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbCAqZCwgYm9vbCBjZ3UsXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRkLVx1MDAzZXBmID0gcGY7XG4tXHRpZiAoY2d1IHx8IHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XG4mIzQzO1x0aWYgKGNndSB8fCBwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQgfHxcbiYjNDM7XHQgICAgcGYtXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzID0gXHUwMDI2aWNlX2RwbGxfb3BzO1xuIFxuIFx0XHRpZiAodHlwZSA9PSBEUExMX1RZUEVfUFBTIFx1MDAyNlx1MDAyNiBpY2VfZHBsbF9pc19wcHNfcGhhc2VfbW9uaXRvcihwZikpXG4gXHRcdFx0b3BzID0gIFx1MDAyNmljZV9kcGxsX3BvbV9vcHM7XG4tXHRcdGlmIChjZ3UpXG4mIzQzO1x0XHRpZiAoY2d1IFx1MDAyNlx1MDAyNiAhcGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKVxuIFx0XHRcdGljZV9kcGxsX3VwZGF0ZV9zdGF0ZShwZiwgZCwgdHJ1ZSk7XG4gXHRcdHJldCA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGQtXHUwMDNlZHBsbCwgdHlwZSwgb3BzLCBkKTtcbiBcdFx0aWYgKHJldCkge1xuQEAgLTQyMzksNiAmIzQzOzQyOTAsMzMgQEAgc3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X3dvcmtlcihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGt0aHJlYWRfZGVzdHJveV93b3JrZXIoZC1cdTAwM2Vrd29ya2VyKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9waW5fZnJlcV9pbmZvIC0gZmluZCBwaW4gZnJlcXVlbmN5IGZyb20gc3VwcG9ydGVkIG9uZXNcbiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHBpbl9pZHg6IHBpbiBpbmRleFxuJiM0MzsgKiBAaW5wdXQ6IGlmIGlucHV0IHBpblxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRocm91Z2ggdGhlIGFycmF5IG9mIHN1cHBvcnRlZCBmcmVxdWVuY2llcyBmb3IgYVxuJiM0MzsgKiBEUExMIHBpbiBhbmQgcmV0dXJucyBzaW5nbGUgZnJlcXVlbmN5IHBpbiBpcyBjYXBhYmxlLCBpZiBwaW4gc3VwcG9ydCBvbmx5XG4mIzQzOyAqIG9uZSBmcmVxdWVuY3kuIFNoYWxsIGJlIHVzZWQgb25seSBmb3IgZHBsbCB3aXRoIGRyaXZlciBoYXJkY29kZWQgZnJlcXVlbmN5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAtIGZhaWx1cmUsIHBpbiB1c2VzIG11bHRpcGxlIGZyZXF1ZW5jaWVzLFxuJiM0MzsgKiAqIGZyZXF1ZW5jeSAtIHN1Y2Nlc3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdTY0IGljZV9kcGxsX3Bpbl9mcmVxX2luZm8oc3RydWN0IGljZV9odyAqaHcsIHU4IHBpbl9pZHgsIGJvb2wgaW5wdXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5ICpmcmVxcztcbiYjNDM7XHR1OCBmcmVxX251bTtcbiYjNDM7XG4mIzQzO1x0LyogR2V0IHN1cHBvcnRlZCBmcmVxdWVuY2llcyBmb3IgdGhpcyBwaW4gKi9cbiYjNDM7XHRmcmVxcyA9IGljZV9jZ3VfZ2V0X3Bpbl9mcmVxX3N1cHAoaHcsIHBpbl9pZHgsIGlucHV0LCBcdTAwMjZmcmVxX251bSk7XG4mIzQzO1x0aWYgKCFmcmVxcyB8fCBmcmVxX251bSAhPSAxIHx8IGZyZXFzWzBdLm1pbiAhPSBmcmVxc1swXS5tYXgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZyZXFzWzBdLm1pbjtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyXG4gICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuQEAgLTQzOTgsNiAmIzQzOzQ0NzYsMTkgQEAgaWNlX2RwbGxfaW5pdF9pbmZvX2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRwaW5zW2ldLnByb3AuYm9hcmRfbGFiZWwgPSBpY2VfY2d1X2dldF9waW5fbmFtZShodywgaSwgaW5wdXQpO1xuIFx0XHRwaW5zW2ldLnByb3AudHlwZSA9IGljZV9jZ3VfZ2V0X3Bpbl90eXBlKGh3LCBpLCBpbnB1dCk7XG4gXHRcdGlmIChpbnB1dCkge1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XG4mIzQzO1x0XHRcdFx0cGluc1tpXS5mcmVxID0gaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhodywgaSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgIGlucHV0KTtcbiYjNDM7XHRcdFx0XHRwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRcdHBpbnNbaV0uc3RhdHVzID1cbiYjNDM7XHRcdFx0XHRcdElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfU1RBVFVTX0VTWU5DX0NBUDtcbiYjNDM7XHRcdFx0XHRwaW5zW2ldLmZsYWdzWzBdID0gSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRDtcbiYjNDM7XHRcdFx0XHQvKiBza2lwIHByaW9yaXR5LCBjYXBhYmlsaXRpZXMsIHBoYXNlIHJhbmdlLFxuJiM0MztcdFx0XHRcdCAqIHBpbiBzdGF0ZSBBUSBxdWVyeSBhbmQgZnJlcV9zdXBwb3J0ZWQgLVxuJiM0MztcdFx0XHRcdCAqIG5vdCBhdmFpbGFibGUgZm9yIHVubWFuYWdlZCBEUExMXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRyZXQgPSBpY2VfYXFfZ2V0X2NndV9yZWZfcHJpbyhodywgZGUtXHUwMDNlZHBsbF9pZHgsIGksXG4gXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2ZGUtXHUwMDNlaW5wdXRfcHJpb1tpXSk7XG4gXHRcdFx0aWYgKHJldClcbkBAIC00NDExLDYgJiM0Mzs0NTAyLDE2IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcbiBcdFx0XHRpZiAoaWNlX2RwbGxfaXNfc3dfcGluKHBmLCBpLCB0cnVlKSlcbiBcdFx0XHRcdHBpbnNbaV0uaGlkZGVuID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuJiM0MztcdFx0XHRcdHBpbnNbaV0uZnJlcSA9IGljZV9kcGxsX3Bpbl9mcmVxX2luZm8oaHcsIGksXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgICBpbnB1dCk7XG4mIzQzO1x0XHRcdFx0cGluc1tpXS5zdGF0ZVswXSA9IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcbiYjNDM7XHRcdFx0XHQvKiBza2lwIG91dHB1dCBzdGF0ZSBjYXBzLCBwaGFzZSByYW5nZSxcbiYjNDM7XHRcdFx0XHQgKiBwaW4gc3RhdGUgQVEgcXVlcnkgYW5kIGZyZXFfc3VwcG9ydGVkIC1cbiYjNDM7XHRcdFx0XHQgKiBub3QgYXZhaWxhYmxlIGZvciB1bm1hbmFnZWQgRFBMTFxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0cmV0ID0gaWNlX2NndV9nZXRfb3V0cHV0X3Bpbl9zdGF0ZV9jYXBzKGh3LCBpLCBcdTAwMjZjYXBzKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbkBAIC00NDI4LDEwICYjNDM7NDUyOSwxMyBAQCBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsXG4gXHRcdHBpbnNbaV0ucHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xuIFx0XHRwaW5zW2ldLnBmID0gcGY7XG4gXHR9XG4tXHRpZiAoaW5wdXQpXG4mIzQzO1x0aWYgKGlucHV0IFx1MDAyNlx1MDAyNiAhcGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XG4gXHRcdHJldCA9IGljZV9kcGxsX2luaXRfcmVmX3N5bmNfaW5wdXRzKHBmKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtNDcxMiw2ICYjNDM7NDgxNiw4MiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19lODI1YyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZCAtIGluaXRpYWxpemUgbG9jayBzdGF0ZSBmb3IgdW5tYW5hZ2VkIGRwbGxcbiYjNDM7ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBJbml0aWFsaXplIHRoZSBsb2NrIHN0YXRlIGZvciB1bm1hbmFnZWQgRFBMTCBieSBjaGVja2luZyBoZWFsdGggc3RhdHVzLlxuJiM0MzsgKiBGb3IgdW5tYW5hZ2VkIERQTEwsIHdlIHJlbHkgb24gaGFyZHdhcmUgYXV0b25vbW91cyBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwIC0gc3VjY2Vzc1xuJiM0MzsgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvblxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9sb2NrX3N0YXRlX2luaXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IGNvZGUgPSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0s7XG4mIzQzO1x0c3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtIGJ1ZmY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZShcdTAwMjZwZi1cdTAwM2VodywgXHUwMDI2YnVmZiwgY29kZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHBmLCBcdTAwMjZidWZmLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9pbml0X2luZm9fdW5tYW5hZ2VkIC0gaW5pdCBkcGxsIGluZm9ybWF0aW9uIGZvciB1bm1hbmFnZWQgZHBsbFxuJiM0MzsgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIEFjcXVpcmUgKGZyb20gSFcpIGFuZCBzZXQgYmFzaWMgZHBsbCBpbmZvcm1hdGlvbiAob24gcGYtXHUwMDNlZHBsbHMgc3RydWN0KS5cbiYjNDM7ICogRm9yIHVubWFuYWdlZCBkcGxsIG1vZGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwIC0gc3VjY2Vzc1xuJiM0MzsgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvblxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxscyAqZCA9IFx1MDAyNnBmLVx1MDAzZWRwbGxzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGQtXHUwMDNlY2xvY2tfaWQgPSBpY2VfZ2VuZXJhdGVfY2xvY2tfaWQocGYpO1xuJiM0MztcdGQtXHUwMDNlbnVtX2lucHV0cyA9IGljZV9jZ3VfZ2V0X3Bpbl9udW0oXHUwMDI2cGYtXHUwMDNlaHcsIHRydWUpO1xuJiM0MztcdGQtXHUwMDNlbnVtX291dHB1dHMgPSBpY2VfY2d1X2dldF9waW5fbnVtKFx1MDAyNnBmLVx1MDAzZWh3LCBmYWxzZSk7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChwZik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0ZC1cdTAwM2VpbnB1dHMgPSBremFsbG9jX29ianMoKmQtXHUwMDNlaW5wdXRzLCBkLVx1MDAzZW51bV9pbnB1dHMpO1xuJiM0MztcdGlmICghZC1cdTAwM2VpbnB1dHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBkZWluaXRfaW5mbztcbiYjNDM7XG4mIzQzO1x0ZC1cdTAwM2VvdXRwdXRzID0ga3phbGxvY19vYmpzKCpkLVx1MDAzZW91dHB1dHMsIGQtXHUwMDNlbnVtX291dHB1dHMpO1xuJiM0MztcdGlmICghZC1cdTAwM2VvdXRwdXRzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBkZWluaXRfaW5mbztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGRlaW5pdF9pbmZvO1xuJiM0MztcbiYjNDM7XHRkLVx1MDAzZXBwcy5tb2RlID0gRFBMTF9NT0RFX01BTlVBTDtcbiYjNDM7XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDslcyAtIHN1Y2Nlc3MsIGlucHV0czoldSwgb3V0cHV0czoldVxcblwmIzM0OyxcbiYjNDM7XHRcdF9fZnVuY19fLCBkLVx1MDAzZW51bV9pbnB1dHMsIGQtXHUwMDNlbnVtX291dHB1dHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztkZWluaXRfaW5mbzpcbiYjNDM7XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDslcyAtIGZhaWw6IGQtXHUwMDNlaW5wdXRzOiVwLCBkLVx1MDAzZW91dHB1dHM6JXBcXG5cJiMzNDssXG4mIzQzO1x0XHRfX2Z1bmNfXywgZC1cdTAwM2VpbnB1dHMsIGQtXHUwMDNlb3V0cHV0cyk7XG4mIzQzO1x0aWNlX2RwbGxfZGVpbml0X2luZm8ocGYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfaW5pdF9pbmZvIC0gcHJlcGFyZSBwZiYjMzk7cyBkcGxsIGluZm9ybWF0aW9uIHN0cnVjdHVyZVxuICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC00ODE1LDYgJiM0Mzs0OTk1LDQyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkIC0gZGV0ZXJtaW5lIGxvY2sgc3RhdGUgZnJvbSBoZWFsdGggc3RhdHVzXG4mIzQzOyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGJ1ZmY6IGhlYWx0aCBzdGF0dXMgYnVmZmVyXG4mIzQzOyAqIEBub3RpZnk6IGlmIHRydWUsIG5vdGlmeSBkcGxsIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBTZXQgdW5tYW5hZ2VkIGRwbGwgbG9jayBzdGF0ZSBiYXNlZCBvbiBoZWFsdGggc3RhdHVzIGNvZGUgYW5kIGludGVybmFsIGRhdGEuXG4mIzQzOyAqIENvbnRleHQ6IEFjcXVpcmVzIGFuZCByZWxlYXNlcyBwZi1cdTAwM2VkcGxscy5sb2NrIChtdXN0IHJlbGVhc2UgYmVmb3JlIG5vdGlmeVxuJiM0MzsgKiBpZiBjYWxsZWQpLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZixcbiYjNDM7XHRcdFx0XHQgICAgICAgYm9vbCBub3RpZnkpXG4mIzQzO3tcbiYjNDM7XHR1MzIgaW50ZXJuYWxfZGF0YSA9IGxlMzJfdG9fY3B1KGJ1ZmYtXHUwMDNlaW50ZXJuYWxfZGF0YTEpO1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4mIzQzO1x0aWYgKGJ1ZmYtXHUwMDNlaGVhbHRoX3N0YXR1c19jb2RlID09IDAgfHxcbiYjNDM7XHQgICAgaW50ZXJuYWxfZGF0YSA9PSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRClcbiYjNDM7XHRcdGQtXHUwMDNlZHBsbF9zdGF0ZSA9IERQTExfTE9DS19TVEFUVVNfTE9DS0VEO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGQtXHUwMDNlZHBsbF9zdGF0ZSA9IERQTExfTE9DS19TVEFUVVNfVU5MT0NLRUQ7XG4mIzQzO1xuJiM0MztcdGlmIChkLVx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9PSBkLVx1MDAzZWRwbGxfc3RhdGUpXG4mIzQzO1x0XHRub3RpZnkgPSBmYWxzZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkLVx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9IGQtXHUwMDNlZHBsbF9zdGF0ZTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4mIzQzO1x0aWYgKG5vdGlmeSBcdTAwMjZcdTAwMjYgZC1cdTAwM2VkcGxsKVxuJiM0MztcdFx0ZHBsbF9kZXZpY2VfY2hhbmdlX250ZihkLVx1MDAzZWRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9kcGxsX2RlaW5pdCAtIERpc2FibGUgdGhlIGRyaXZlci9IVyBzdXBwb3J0IGZvciBkcGxsIHN1YnN5c3RlbVxuICAqIHRoZSBkcGxsIGRldmljZS5cbkBAIC00ODU0LDkgJiM0Mzs1MDcwLDEwIEBAIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxuIFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnBmLVx1MDAzZWRwbGxzLnR4Y2xrX3dvcmspO1xuIFxuLVx0aWNlX2RwbGxfZGVpbml0X3BpbnMocGYsIGNndSk7XG4mIzQzO1x0aWNlX2RwbGxfZGVpbml0X3BpbnMocGYsIGNndSB8fCBwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpO1xuIFx0aWYgKCFJU19FUlJfT1JfTlVMTChwZi1cdTAwM2VkcGxscy5wcHMuZHBsbCkpXG4tXHRcdGljZV9kcGxsX2RlaW5pdF9kcGxsKHBmLCBcdTAwMjZwZi1cdTAwM2VkcGxscy5wcHMsIGNndSk7XG4mIzQzO1x0XHRpY2VfZHBsbF9kZWluaXRfZHBsbChwZiwgXHUwMDI2cGYtXHUwMDNlZHBsbHMucHBzLFxuJiM0MztcdFx0XHRcdCAgICAgY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XG4gXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsKSlcbiBcdFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLmVlYywgY2d1KTtcbiBcdGlmICghSVNfRVJSX09SX05VTEwocGYtXHUwMDNlZHBsbHMudHhjLmRwbGwpKVxuQEAgLTQ4NjYsNiAmIzQzOzUwODMsNDUgQEAgdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkIC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciB1bm1hbmFnZWQgZHBsbCBzdWJzeXN0ZW1cbiYjNDM7ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBTZXQgdXAgdGhlIGRldmljZSBkcGxscyBmb3IgdW5tYW5hZ2VkIG1vZGUsIHJlZ2lzdGVyIHRoZW0gYW5kIHBpbnMgY29ubmVjdGVkXG4mIzQzOyAqIHdpdGhpbiBMaW51eCBkcGxsIHN1YnN5c3RlbS4gQWxsb3cgdXNlcnNwYWNlIHRvIG9idGFpbiBzdGF0ZSBvZiBEUExMLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi1cdTAwM2VkcGxscy5sb2NrIG11dGV4LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxzICpkID0gXHUwMDI2cGYtXHUwMDNlZHBsbHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZkLVx1MDAzZWxvY2spO1xuJiM0MztcdGVyciA9IGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQocGYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9leGl0O1xuJiM0MztcdGVyciA9IGljZV9kcGxsX2luaXRfZHBsbChwZiwgXHUwMDI2cGYtXHUwMDNlZHBsbHMucHBzLCB0cnVlLCBEUExMX1RZUEVfUFBTKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBkZWluaXRfaW5mbztcbiYjNDM7XHRlcnIgPSBpY2VfZHBsbF9pbml0X3BpbnMocGYsIHRydWUpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRlaW5pdF9wcHM7XG4mIzQzO1x0c2V0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO2RlaW5pdF9wcHM6XG4mIzQzO1x0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcywgdHJ1ZSk7XG4mIzQzO2RlaW5pdF9pbmZvOlxuJiM0MztcdGljZV9kcGxsX2RlaW5pdF9pbmZvKHBmKTtcbiYjNDM7ZXJyX2V4aXQ6XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkLVx1MDAzZWxvY2spO1xuJiM0MztcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtEUExMcyBpbml0IGZhaWx1cmUgZXJyOiVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9kcGxsX2luaXRfZTgyNSAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbiAgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG5AQCAtNDk3NSw4ICYjNDM7NTIzMSwyMyBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MTAoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7RFBMTHMgaW5pdCBmYWlsdXJlIGVycjolZFxcblwmIzM0OywgZXJyKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9pbml0IC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciBkcGxsIHN1YnN5c3RlbVxuJiM0MzsgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIFNldCB1cCB0aGUgZGV2aWNlIGRwbGxzLCByZWdpc3RlciB0aGVtIGFuZCBwaW5zIGNvbm5lY3RlZCB3aXRoaW4gTGludXggZHBsbFxuJiM0MzsgKiBzdWJzeXN0ZW0uIEFsbG93IHVzZXJzcGFjZSB0byBvYnRhaW4gc3RhdGUgb2YgRFBMTCBhbmQgaGFuZGxpbmcgb2YgRFBMTFxuJiM0MzsgKiBjb25maWd1cmF0aW9uIHJlcXVlc3RzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi1cdTAwM2VkcGxscy5sb2NrIG11dGV4LlxuJiM0MzsgKi9cbiB2b2lkIGljZV9kcGxsX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuJiM0MztcdGlmIChwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbiYjNDM7XHRcdGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHBmKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChwZi1cdTAwM2Vody5tYWNfdHlwZSkge1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcbiBcdFx0aWNlX2RwbGxfaW5pdF9lODI1KHBmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5pbmRleCAxMDNiYTNlNDkwNjgyLi5jNTlkNzQ2YTg1NjcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5AQCAtMjYsNiAmIzQzOzI2LDggQEBcbiAjZGVmaW5lIElDRV9DR1VfUjExX1NZTkNFX1NfQllQX0NMS1x0R0VOTUFTSyg2LCAxKVxuIFxuICNkZWZpbmUgSUNFX0NHVV9CWVBBU1NfTVVYX09GRlNFVF9FODI1Q1x0M1xuJiM0MzsjZGVmaW5lIElDRV9EUExMX1VOTUFOQUdFRF9QSU5fTlVNXHQ0XG4mIzQzOyNkZWZpbmUgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRFx0SUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOXG4gXG4gLyoqXG4gICogZW51bSBpY2VfZHBsbF9waW5fc3cgLSBlbnVtZXJhdGUgaWNlIHNvZnR3YXJlIHBpbiBpbmRpY2VzOlxuQEAgLTE5Myw2ICYjNDM7MTk1LDcgQEAgc3RydWN0IGljZV9kcGxscyB7XG4gXHRzMzIgb3V0cHV0X3BoYXNlX2Fkal9tYXg7XG4gXHR1MzIgcGVyaW9kaWNfY291bnRlcjtcbiBcdGJvb2wgZ2VuZXJpYztcbiYjNDM7XHRib29sIHVubWFuYWdlZDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB0eGNsa193b3JrO1xuIFx0Ym9vbCB0eGNsa19zd2l0Y2hfcmVxdWVzdGVkO1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB0eGNsa19ub3RpZnlfcndzZW07XG5AQCAtMjAxLDkgJiM0MzsyMDQsMTYgQEAgc3RydWN0IGljZV9kcGxscyB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF8xNTg4X0NMT0NLKVxuIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpO1xuJiM0Mzt2b2lkIGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZixcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIG5vdGlmeSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZFxuJiM0MztpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsXG4mIzQzO1x0XHRcdFx0ICBib29sIG5vdGlmeSkgeyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbmluZGV4IDhjZGM0ZmRhODllOTcuLmZjOWQ0ZTBmYTc1NTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5AQCAtMTQxNSw2ICYjNDM7MTQxNSwxMCBAQCBzdGF0aWMgaW50IGljZV92c2lfYWxsb2NfcmluZ3Moc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLCByaW5nLVx1MDAzZWZsYWdzKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzEsIHJpbmctXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpXG4mIzQzO1x0XHRcdHNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfR0NTLCByaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4gXHRcdFdSSVRFX09OQ0UodnNpLVx1MDAzZXR4X3JpbmdzW2ldLCByaW5nKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi5mZWZiYzUxYzcxOTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzQyOCw3ICYjNDM7MzQyOCw3IEBAIHN0YXRpYyBpbnQgaWNlX3JlcV9pcnFfbXNpeF9taXNjKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHQgICAgICgocGYtXHUwMDNlbGxfdHNfaXJxLmluZGV4ICYjNDM7IHBmX2ludHJfc3RhcnRfb2Zmc2V0KSBcdTAwMjZcbiBcdFx0ICAgICAgUEZJTlRfU0JfQ1RMX01TSVhfSU5EWF9NKSB8IFBGSU5UX1NCX0NUTF9DQVVTRV9FTkFfTSk7XG4gXHR3cjMyKGh3LCBHTElOVF9JVFIoSUNFX1JYX0lUUiwgcGYtXHUwMDNlb2ljcl9pcnEuaW5kZXgpLFxuLVx0ICAgICBJVFJfUkVHX0FMSUdOKElDRV9JVFJfOEspIFx1MDAzZVx1MDAzZSBJQ0VfSVRSX0dSQU5fUyk7XG4mIzQzO1x0ICAgICBJVFJfUkVHX0FMSUdOKElDRV9JVFJfMjBLKSBcdTAwM2VcdTAwM2UgSUNFX0lUUl9HUkFOX1MpO1xuIFxuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xuQEAgLTM0OTEsOSAmIzQzOzM0OTEsOCBAQCB2b2lkIGljZV9zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdFx0TkVUSUZfRl9SWEhBU0g7XG4gXG4gXHRjc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNXHQgIHxcbi1cdFx0XHQgTkVUSUZfRl9JUF9DU1VNICB8XG4gXHRcdFx0IE5FVElGX0ZfU0NUUF9DUkMgfFxuLVx0XHRcdCBORVRJRl9GX0lQVjZfQ1NVTTtcbiYjNDM7XHRcdFx0IE5FVElGX0ZfSFdfQ1NVTTtcbiBcbiBcdHZsYW5vX2ZlYXR1cmVzID0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSIHxcbiBcdFx0XHQgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggICAgIHxcbkBAIC0zNTU1LDEyICYjNDM7MzU1NCw2IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdC8qIEFsbG93IGNvcmUgdG8gbWFuYWdlIElSUXMgYWZmaW5pdHkgKi9cbiBcdG5ldGlmX3NldF9hZmZpbml0eV9hdXRvKG5ldGRldik7XG4gXG4tXHQvKiBNdXR1YWwgZXhjbHVzaXZpdHkgZm9yIFRTTyBhbmQgR0NTIGlzIGVuZm9yY2VkIGJ5IHRoZSBzZXQgZmVhdHVyZXNcbi1cdCAqIG5kbyBjYWxsYmFjay5cbi1cdCAqL1xuLVx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcbi1cdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTtcbi1cbiBcdG5ldGlmX3NldF90c29fbWF4X3NpemUobmV0ZGV2LCBJQ0VfTUFYX1RTT19TSVpFKTtcbiB9XG4gXG5AQCAtNDcyMCw3ICYjNDM7NDcxMyw5IEBAIHZvaWQgaWNlX2RlaW5pdF9kZXYoc3RydWN0IGljZV9wZiAqcGYpXG4gXG4gc3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuJiM0MztcdHUxNiBjb2RlID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGlmIChpY2VfaXNfc2FmZV9tb2RlKHBmKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ3MzIsOCAmIzQzOzQ3MjcsMTUgQEAgc3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HTlNTKSlcbiBcdFx0aWNlX2duc3NfaW5pdChwZik7XG4gXG4mIzQzO1x0LyogSW5pdGlhbGl6ZSB1bm1hbmFnZWQgRFBMTCBkZXRlY3Rpb24gKi9cbiYjNDM7XHRlcnIgPSBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChcdTAwMjZwZi1cdTAwM2VodywgY29kZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBcdTAwMjZwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpO1xuJiM0MztcdGlmIChlcnIgfHwgIWljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3QoXHUwMDI2cGYtXHUwMDNlaHcpKVxuJiM0MztcdFx0cGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkID0gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfQ0dVKSB8fFxuLVx0ICAgIGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfUEhZX1JDTEspKVxuJiM0MztcdCAgICBpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX1BIWV9SQ0xLKSB8fFxuJiM0MztcdCAgICBwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpXG4gXHRcdGljZV9kcGxsX2luaXQocGYpO1xuIFxuIFx0LyogTm90ZTogRmxvdyBkaXJlY3RvciBpbml0IGZhaWx1cmUgaXMgbm9uLWZhdGFsIHRvIGxvYWQgKi9cbkBAIC02NTEwLDE4ICYjNDM7NjUxMiw2IEBAIGljZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcbiBcdFx0cmV0ID0gaWNlX3NldF9sb29wYmFjayh2c2ksICEhKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKSk7XG4gXG4tXHQvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTXG4tXHQgKiAoTkVUSUZfRl9IV19DU1VNKSBpcyBub3Qgc3VwcG9ydGVkLlxuLVx0ICovXG4tXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSkgXHUwMDI2XHUwMDI2IChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9BTExfVFNPKSkpIHtcbi1cdFx0aWYgKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxuXCYjMzQ7KTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RvIGVuYWJsZSBIVyBjaGVja3N1bSwgeW91IG11c3QgZmlyc3QgZGlzYWJsZSBUU08uXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uZTgzOTJlYzRmMTM0OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0yMzI3LDYgJiM0MzsyMzI3LDggQEAgdTY0IGljZV9wdHBfZ2V0X3J4X2h3dHMoY29uc3QgdW5pb24gaWNlXzMyYl9yeF9mbGV4X2Rlc2MgKnJ4X2Rlc2MsXG4gXHR0c19oaWdoID0gbGUzMl90b19jcHUocnhfZGVzYy1cdTAwM2V3Yi5mbGV4X3RzLnRzX2hpZ2gpO1xuIFx0dHNfbnMgPSBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoY2FjaGVkX3RpbWUsIHRzX2hpZ2gpO1xuIFxuJiM0MztcdGljZV90cmFjZShyeF9od3RzdGFtcCwgY2FjaGVkX3RpbWUsIHRzX2hpZ2gsIHRzX25zKTtcbiYjNDM7XG4gXHRyZXR1cm4gdHNfbnM7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCA4ZTVmOTc4MzU5NTRjLi5mOTA1MTA0Zjk1ZDg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTIwLDYgJiM0MzsyMCwxMCBAQCBzdGF0aWMgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeltdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZXzEwTUhaLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9jZ3VfcGluX2ZyZXFfMTU2XzI1bWh6W10gPSB7XG4mIzQzO1x0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDE1NjI1MDAwMCwgMTU2MjUwMDAwKSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODEwdF9zZnBfY2d1X2lucHV0c1tdID0ge1xuIFx0eyBcJiMzNDtDVkwtU0RQMjJcJiMzNDssXHQgIFpMX1JFRjBQLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxuIFx0XHRBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfY29tbW9uKSwgaWNlX2NndV9waW5fZnJlcV9jb21tb24gfSxcbkBAIC0xMzEsNiAmIzQzOzEzNSwxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MjNfemxfY2d1X291dHB1dHNbXSA9IHtcbiBcdHsgXCYjMzQ7Tk9ORVwmIzM0OyxcdCAgIFpMX09VVDUsIDAsIDAgfSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MzBfdW5tYW5hZ2VkX2lucHV0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7MTU4OC1USU1FX1NZTkNcJiMzNDssIDAsIERQTExfUElOX1RZUEVfRVhULFxuJiM0MztcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeiksIGljZV9jZ3VfcGluX2ZyZXFfMTBfbWh6IH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MzBfdW5tYW5hZ2VkX291dHB1dHNbXSA9IHtcbiYjNDM7XHR7IFwmIzM0O01BQy1QSFktQ0xLXCYjMzQ7LCAwLCBEUExMX1BJTl9UWVBFX1NZTkNFX0VUSF9QT1JULFxuJiM0MztcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzE1Nl8yNW1oeiksIGljZV9jZ3VfcGluX2ZyZXFfMTU2XzI1bWh6IH0sXG4mIzQzO1x0eyBcJiMzNDsxNTg4LVRJTUVfUkVGXCYjMzQ7LCAxLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxuJiM0MztcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzFfaHopLCBpY2VfY2d1X3Bpbl9mcmVxXzFfaHp9LFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBMb3cgbGV2ZWwgZnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIGFuZCBtYW5hZ2luZyB0aGUgZGV2aWNlIGNsb2NrIHVzZWRcbiAgKiBmb3IgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sLlxuICAqXG5AQCAtNTk3OSw2ICYjNDM7NTk5NSwyNCBAQCBpY2VfY2d1X2dldF9waW5fZGVzYyhzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dCwgaW50ICpzaXplKVxuIFx0Y2FzZSBJQ0VfREVWX0lEX0U4MjNDX1NHTUlJOlxuIFx0XHR0ID0gaWNlX2NndV9nZXRfcGluX2Rlc2NfZTgyMyhodywgaW5wdXQsIHNpemUpO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENDX0JBQ0tQTEFORTpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1FTRlA1NjpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1NGUDpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1NGUF9ERDpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENfQkFDS1BMQU5FOlxuJiM0MztcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ19RU0ZQOlxuJiM0MztcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ19TRlA6XG4mIzQzO1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBfWFhWX0JBQ0tQTEFORTpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfUVNGUDpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfU0ZQOlxuJiM0MztcdFx0aWYgKGlucHV0KSB7XG4mIzQzO1x0XHRcdHQgPSBpY2VfZTgzMF91bm1hbmFnZWRfaW5wdXRzO1xuJiM0MztcdFx0XHQqc2l6ZSA9IEFSUkFZX1NJWkUoaWNlX2U4MzBfdW5tYW5hZ2VkX2lucHV0cyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR0ID0gaWNlX2U4MzBfdW5tYW5hZ2VkX291dHB1dHM7XG4mIzQzO1x0XHRcdCpzaXplID0gQVJSQVlfU0laRShpY2VfZTgzMF91bm1hbmFnZWRfb3V0cHV0cyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTYwMDUsNiAmIzQzOzYwMzksMTggQEAgaW50IGljZV9jZ3VfZ2V0X251bV9waW5zKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX2NndV9nZXRfcGluX251bSAtIGdldCBwaW4gZGVzY3JpcHRpb24gYXJyYXkgc2l6ZVxuJiM0MzsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxuJiM0MzsgKiBAaW5wdXQ6IGlmIHJlcXVlc3QgaXMgZG9uZSBhZ2FpbnN0IGlucHV0IG9yIG91dHB1dCBwaW5zXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogc2l6ZSBvZiBwaW4gZGVzY3JpcHRpb24gYXJyYXkgZm9yIGdpdmVuIGh3LlxuJiM0MzsgKi9cbiYjNDM7aW50IGljZV9jZ3VfZ2V0X3Bpbl9udW0oc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaWNlX2NndV9nZXRfbnVtX3BpbnMoaHcsIGlucHV0KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfY2d1X2dldF9waW5fdHlwZSAtIGdldCBwaW4mIzM5O3MgdHlwZVxuICAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmhcbmluZGV4IDE2YjE5ODhlOTkzZDIuLmZhMWU5MDhjZWJhYzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXG5AQCAtMzY0LDYgJiM0MzszNjQsNyBAQCBpbnQgaWNlX3JlYWRfc21hX2N0cmwoc3RydWN0IGljZV9odyAqaHcsIHU4ICpkYXRhKTtcbiBpbnQgaWNlX3dyaXRlX3NtYV9jdHJsKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBkYXRhKTtcbiBpbnQgaWNlX3B0cF9yZWFkX3NkcF9hYyhzdHJ1Y3QgaWNlX2h3ICpodywgX19sZTE2ICplbnRyaWVzLCB1aW50ICpudW1fZW50cmllcyk7XG4gaW50IGljZV9jZ3VfZ2V0X251bV9waW5zKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KTtcbiYjNDM7aW50IGljZV9jZ3VfZ2V0X3Bpbl9udW0oc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpO1xuIGVudW0gZHBsbF9waW5fdHlwZSBpY2VfY2d1X2dldF9waW5fdHlwZShzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluLCBib29sIGlucHV0KTtcbiBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5ICpcbiBpY2VfY2d1X2dldF9waW5fZnJlcV9zdXBwKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwaW4sIGJvb2wgaW5wdXQsIHU4ICpudW0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jXG5pbmRleCA2YTU4NzViZDljNmIxLi40ZGFlZTI1MmUyYTYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xuQEAgLTI2MTIsNyAmIzQzOzI2MTIsNiBAQCBpY2VfZmlsbF9zd19ydWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2ZsdHJfaW5mbyAqZl9pbmZvLFxuIFx0dTE2IHZsYW5faWQgPSBJQ0VfTUFYX1ZMQU5fSUQgJiM0MzsgMTtcbiBcdHUxNiB2bGFuX3RwaWQgPSBFVEhfUF84MDIxUTtcbiBcdHZvaWQgKmRhZGRyID0gTlVMTDtcbi1cdHUxNiBldGhfaGRyX3N6O1xuIFx0dTggKmV0aF9oZHI7XG4gXHR1MzIgYWN0ID0gMDtcbiBcdF9fYmUxNiAqb2ZmO1xuQEAgLTI2MjUsMTEgJiM0MzsyNjI0LDEwIEBAIGljZV9maWxsX3N3X3J1bGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfZmx0cl9pbmZvICpmX2luZm8sXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGV0aF9oZHJfc3ogPSBzaXplb2YoZHVtbXlfZXRoX2hlYWRlcik7XG4gXHRldGhfaGRyID0gc19ydWxlLVx1MDAzZWhkcl9kYXRhO1xuIFxuIFx0LyogaW5pdGlhbGl6ZSB0aGUgZXRoZXIgaGVhZGVyIHdpdGggYSBkdW1teSBoZWFkZXIgKi9cbi1cdG1lbWNweShldGhfaGRyLCBkdW1teV9ldGhfaGVhZGVyLCBldGhfaGRyX3N6KTtcbiYjNDM7XHRpY2VfZmlsbF9ldGhfaGRyKGV0aF9oZHIpO1xuIFx0aWNlX2ZpbGxfc3dfaW5mbyhodywgZl9pbmZvKTtcbiBcbiBcdHN3aXRjaCAoZl9pbmZvLVx1MDAzZWZsdHJfYWN0KSB7XG5AQCAtMjczMCw3ICYjNDM7MjcyOCw3IEBAIGljZV9maWxsX3N3X3J1bGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfZmx0cl9pbmZvICpmX2luZm8sXG4gXG4gXHQvKiBDcmVhdGUgdGhlIHN3aXRjaCBydWxlIHdpdGggdGhlIGZpbmFsIGR1bW15IEV0aGVybmV0IGhlYWRlciAqL1xuIFx0aWYgKG9wYyAhPSBpY2VfYXFjX29wY191cGRhdGVfc3dfcnVsZXMpXG4tXHRcdHNfcnVsZS1cdTAwM2VoZHJfbGVuID0gY3B1X3RvX2xlMTYoZXRoX2hkcl9zeik7XG4mIzQzO1x0XHRzX3J1bGUtXHUwMDNlaGRyX2xlbiA9IGNwdV90b19sZTE2KERVTU1ZX0VUSF9IRFJfTEVOKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbmluZGV4IGQyMDM1N2MwNDEyNzMuLjQ1NjBlNTVjOGY5YzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jXG5AQCAtMTc0LDYgJiM0MzsxNzQsNyBAQCBzdGF0aWMgdTE2IGljZV9jaGVja19zdXBwb3J0ZWRfdmxhbl90cGlkKHUxNiB2bGFuX3RwaWQpXG4gXHRjYXNlIEVUSF9QXzgwMjFROlxuIFx0Y2FzZSBFVEhfUF84MDIxQUQ6XG4gXHRjYXNlIEVUSF9QX1FJTlExOlxuJiM0MztcdGNhc2UgRVRIX1BfODAyMUFIOlxuIFx0XHRyZXR1cm4gdmxhbl90cGlkO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oXG5pbmRleCA0ZjM1ZWY4ZDZiMjk5Li4zY2I4YzZlYTAzY2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcbkBAIC0yNDEsNiAmIzQzOzI0MSwyNCBAQCBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfZndfcmVxKTtcbiBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfZndfZG9uZSk7XG4gREVGSU5FX1RYX1RTVEFNUF9PUF9FVkVOVChpY2VfdHhfdHN0YW1wX2NvbXBsZXRlKTtcbiBcbiYjNDM7LyogVHJhY2UgZXZlbnQgZm9yIFJ4IHRpbWVzdGFtcCAqL1xuJiM0MztUUkFDRV9FVkVOVChpY2VfcnhfaHd0c3RhbXAsXG4mIzQzO1x0ICAgIFRQX1BST1RPKHU2NCBjYWNoZWRfdGltZSwgdTMyIHRzX2hpZ2gsIHU2NCB0c19ucyksXG4mIzQzO1xuJiM0MztcdCAgICBUUF9BUkdTKGNhY2hlZF90aW1lLCB0c19oaWdoLCB0c19ucyksXG4mIzQzO1xuJiM0MztcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KF9fZmllbGQodTY0LCBjYWNoZWRfdGltZSlcbiYjNDM7XHRcdFx0ICAgICBfX2ZpZWxkKHUzMiwgdHNfaGlnaClcbiYjNDM7XHRcdFx0ICAgICBfX2ZpZWxkKHU2NCwgdHNfbnMpKSxcbiYjNDM7XG4mIzQzO1x0ICAgIFRQX2Zhc3RfYXNzaWduKF9fZW50cnktXHUwMDNlY2FjaGVkX3RpbWUgPSBjYWNoZWRfdGltZTtcbiYjNDM7XHRcdFx0ICAgX19lbnRyeS1cdTAwM2V0c19oaWdoID0gdHNfaGlnaDtcbiYjNDM7XHRcdFx0ICAgX19lbnRyeS1cdTAwM2V0c19ucyA9IHRzX25zOyksXG4mIzQzO1xuJiM0MztcdCAgICBUUF9wcmludGsoXCYjMzQ7Y2FjaGVkX3RpbWU9JWxsdSB0c19oaWdoPSV1IHRzX25zPSVsbHVcJiMzNDssXG4mIzQzO1x0XHQgICAgICBfX2VudHJ5LVx1MDAzZWNhY2hlZF90aW1lLCBfX2VudHJ5LVx1MDAzZXRzX2hpZ2gsIF9fZW50cnktXHUwMDNldHNfbnMpXG4mIzQzOyk7XG4mIzQzO1xuIERFQ0xBUkVfRVZFTlRfQ0xBU1MoaWNlX2Vzd19icl9mZGJfdGVtcGxhdGUsXG4gXHRcdCAgICBUUF9QUk9UTyhzdHJ1Y3QgaWNlX2Vzd19icl9mZGJfZW50cnkgKmZkYiksXG4gXHRcdCAgICBUUF9BUkdTKGZkYiksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xuaW5kZXggMzEzMDNhYjViZTE3NS4uNDc3Yzg2ZDhjNTNiYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xuQEAgLTE3MzksNyAmIzQzOzE3MzksNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRsM19sZW4gPSBsNC5oZHIgLSBpcC5oZHI7XG4gXHRvZmZzZXQgfD0gKGwzX2xlbiAvIDQpIFx1MDAzY1x1MDAzYyBJQ0VfVFhfREVTQ19MRU5fSVBMRU5fUztcbiBcbi1cdGlmICgodHhfcmluZy1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKHRlc3RfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgdHhfcmluZy1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmaXJzdC1cdTAwM2V0eF9mbGFncyBcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNrYl9jc3VtX2lzX3NjdHAoc2tiKSkge1xuIFx0XHQvKiBTZXQgR0NTICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuaW5kZXggNWU1MTdmMjE5Mzc5OC4uMTVkYmQ1MTAwOTEyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuQEAgLTIxNyw2ICYjNDM7MjE3LDcgQEAgZW51bSBpY2VfdHhfcmluZ19mbGFncyB7XG4gXHRJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSxcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLFxuIFx0SUNFX1RYX1JJTkdfRkxBR1NfVFhUSU1FLFxuJiM0MztcdElDRV9UWF9SSU5HX0ZMQUdTX0dDUyxcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX05CSVRTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdnNpX3ZsYW5fbGliLmNcbmluZGV4IDU0OTg0OTY2ODUxZDUuLmI2NzI3MmUyZjYwM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jXG5AQCAtMjQsNyAmIzQzOzI0LDggQEAgc3RhdGljIHZvaWQgcHJpbnRfaW52YWxpZF90cGlkKHN0cnVjdCBpY2VfdnNpICp2c2ksIHUxNiB0cGlkKVxuIHN0YXRpYyBib29sIHZhbGlkYXRlX3ZsYW4oc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGljZV92bGFuICp2bGFuKVxuIHtcbiBcdGlmICh2bGFuLVx1MDAzZXRwaWQgIT0gRVRIX1BfODAyMVEgXHUwMDI2XHUwMDI2IHZsYW4tXHUwMDNldHBpZCAhPSBFVEhfUF84MDIxQUQgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmxhbi1cdTAwM2V0cGlkICE9IEVUSF9QX1FJTlExIFx1MDAyNlx1MDAyNiAodmxhbi1cdTAwM2V0cGlkIHx8IHZsYW4tXHUwMDNldmlkKSkge1xuJiM0MztcdCAgICB2bGFuLVx1MDAzZXRwaWQgIT0gRVRIX1BfUUlOUTEgXHUwMDI2XHUwMDI2IHZsYW4tXHUwMDNldHBpZCAhPSBFVEhfUF84MDIxQUggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICh2bGFuLVx1MDAzZXRwaWQgfHwgdmxhbi1cdTAwM2V2aWQpKSB7XG4gXHRcdHByaW50X2ludmFsaWRfdHBpZCh2c2ksIHZsYW4tXHUwMDNldHBpZCk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuY1xuaW5kZXggY2E4MDE4ZTNkZDQyOC4uMDZkMmY5YmU5M2FlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmNcbkBAIC0xNzAyLDYgJiM0MzsxNzAyLDkgQEAgc3RhdGljIGJvb2wgaWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fdHBpZCh1MTYgZmlsdGVyaW5nX2NhcHMsIHUxNiB0cGlkKVxuIFx0Y2FzZSBFVEhfUF9RSU5RMTpcbiBcdFx0dmxhbl9ldGhlcnR5cGUgPSBWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV85MTAwO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIEVUSF9QXzgwMjFBSDpcbiYjNDM7XHRcdHZsYW5fZXRoZXJ0eXBlID0gVklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhFNztcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKCEoZmlsdGVyaW5nX2NhcHMgXHUwMDI2IHZsYW5fZXRoZXJ0eXBlKSlcbkBAIC0yMTM2LDYgJiM0MzsyMTM5LDkgQEAgc3RhdGljIGludCBpY2VfdmNfZ2V0X3RwaWQodTMyIGV0aGVydHlwZV9zZXR0aW5nLCB1MTYgKnRwaWQpXG4gXHRjYXNlIFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzkxMDA6XG4gXHRcdCp0cGlkID0gRVRIX1BfUUlOUTE7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhFNzpcbiYjNDM7XHRcdCp0cGlkID0gRVRIX1BfODAyMUFIO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHQqdHBpZCA9IDA7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcbmluZGV4IDIxZDJmZTM4YTQxYTYuLjQyNGMxMmMwMzk0YTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcbkBAIC0xMSw2ICYjNDM7MTEsOCBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9oZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gXG5AQCAtNzEwNSw2ICYjNDM7NzEwNyw1NyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaWdjX3Fidl9zY2hlZHVsaW5nX3RpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGlnY19nZXRfYWNwaV9tYWNfcGFzc3RocnUodTggKm1hYylcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRcdGFjcGlfb2JqZWN0X3R5cGUgdHlwZTtcbiYjNDM7XHRcdHUzMiBsZW5ndGg7XG4mIzQzO1x0fSBzb3VyY2VzW10gPSB7XG4mIzQzO1x0XHR7IFwmIzM0O1xcXFxfU0IuQU1BQ1wmIzM0OywgQUNQSV9UWVBFX0JVRkZFUiwgMjMgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7XFxcXE1BQ0FcJiMzNDssICAgICBBQ1BJX1RZUEVfU1RSSU5HLCAyMiB9LFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjtcbiYjNDM7XHR1bmlvbiBhY3BpX29iamVjdCAqb2JqO1xuJiM0MztcdGJvb2wgbWFjX2ZvdW5kID0gZmFsc2U7XG4mIzQzO1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuJiM0MztcdHU4IGJ1ZltFVEhfQUxFTl07XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQUNQSSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc291cmNlcykgXHUwMDI2XHUwMDI2ICFtYWNfZm91bmQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRidWZmZXIubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7XG4mIzQzO1x0XHRidWZmZXIucG9pbnRlciA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0c3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoTlVMTCwgKGNoYXIgKilzb3VyY2VzW2ldLm5hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBOVUxMLCBcdTAwMjZidWZmZXIpO1xuJiM0MztcdFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRvYmogPSBidWZmZXIucG9pbnRlcjtcbiYjNDM7XHRcdGlmICghb2JqIHx8IG9iai1cdTAwM2V0eXBlICE9IHNvdXJjZXNbaV0udHlwZSB8fFxuJiM0MztcdFx0ICAgIG9iai1cdTAwM2VzdHJpbmcubGVuZ3RoICE9IHNvdXJjZXNbaV0ubGVuZ3RoKVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfb2JqO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdHJuY21wKG9iai1cdTAwM2VzdHJpbmcucG9pbnRlciwgXCYjMzQ7X0FVWE1BQ18jXCYjMzQ7LCA5KSB8fFxuJiM0MztcdFx0ICAgIG9iai1cdTAwM2VzdHJpbmcucG9pbnRlclsyMV0gIT0gJiMzOTsjJiMzOTspXG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9vYmo7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGhleDJiaW4oYnVmLCBvYmotXHUwMDNlc3RyaW5nLnBvaW50ZXIgJiM0MzsgOSwgRVRIX0FMRU4pIHx8XG4mIzQzO1x0XHQgICAgIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYnVmKSlcbiYjNDM7XHRcdFx0Z290byBmcmVlX29iajtcbiYjNDM7XG4mIzQzO1x0XHRldGhlcl9hZGRyX2NvcHkobWFjLCBidWYpO1xuJiM0MztcdFx0bWFjX2ZvdW5kID0gdHJ1ZTtcbiYjNDM7ZnJlZV9vYmo6XG4mIzQzO1x0XHRrZnJlZShvYmopO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hY19mb3VuZDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpZ2NfcHJvYmUgLSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUm91dGluZVxuICAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuQEAgLTcyNjgsOSAmIzQzOzczMjEsMTYgQEAgc3RhdGljIGludCBpZ2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHR9XG4gXG4gXHRpZiAoZXRoX3BsYXRmb3JtX2dldF9tYWNfYWRkcmVzcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgaHctXHUwMDNlbWFjLmFkZHIpKSB7XG4tXHRcdC8qIGNvcHkgdGhlIE1BQyBhZGRyZXNzIG91dCBvZiB0aGUgTlZNICovXG4tXHRcdGlmIChody1cdTAwM2VtYWMub3BzLnJlYWRfbWFjX2FkZHIoaHcpKVxuJiM0MztcdFx0LyogTG9vayBmb3IgYSBzeXN0ZW0tcHJvdmlkZWQgTUFDIGluIHRoZSBBQ1BJIHRhYmxlIGJlZm9yZVxuJiM0MztcdFx0ICogZmFsbGluZyBiYWNrIHRvIHJlYWRpbmcgdGhlIGFkZHJlc3MgZnJvbSB0aGUgTlZNLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoaWdjX2dldF9hY3BpX21hY19wYXNzdGhydShody1cdTAwM2VtYWMuYWRkcikpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2LVx1MDAzZWFkZHJfYXNzaWduX3R5cGUgPSBORVRfQUREUl9TVE9MRU47XG4mIzQzO1x0XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtVc2luZyBBQ1BJIHBhc3MtdGhyb3VnaCBNQUMgYWRkciAlcE1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGh3LVx1MDAzZW1hYy5hZGRyKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoaHctXHUwMDNlbWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSkge1xuIFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O05WTSBSZWFkIEVycm9yXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LVx1MDAzZW1hYy5hZGRyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oIGIvaW5jbHVkZS9saW51eC9hdmYvdmlydGNobmwuaFxuaW5kZXggMTFiZGFiNTUyMmZkNS4uNTExYzg4MjdjNjQwZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcbkBAIC02MzYsNiAmIzQzOzYzNiw3IEBAIGVudW0gdmlydGNobmxfdmxhbl9zdXBwb3J0IHtcbiBcdFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzgxMDAgPVx0XHRCSVQoMCksXG4gXHRWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEE4ID1cdFx0QklUKDEpLFxuIFx0VklSVENITkxfVkxBTl9FVEhFUlRZUEVfOTEwMCA9XHRcdEJJVCgyKSxcbiYjNDM7XHRWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEU3ID1cdFx0QklUKDMpLFxuIFx0VklSVENITkxfVkxBTl9UQUdfTE9DQVRJT05fTDJUQUcxID1cdEJJVCg4KSxcbiBcdFZJUlRDSE5MX1ZMQU5fVEFHX0xPQ0FUSU9OX0wyVEFHMiA9XHRCSVQoOSksXG4gXHRWSVJUQ0hOTF9WTEFOX1RBR19MT0NBVElPTl9MMlRBRzJfMiA9XHRCSVQoMTApLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFMTAwMEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlMTAwMF9hbGxvY19yeF9idWZmZXJzJiMzNDssCiAgICAmIzM0O2UxMDAwX2NsZWFuX3J4X2lycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNmYwYWY1Yzk0MzdmNDE2NGIwMmM2MTE4YWEwZDc4NDQ1NWRhYjEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAyMjo0NzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3QKaW5kZXggMGJjYTI5M2NmOWNiNy4uODJiM2NjYzcwMjdlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3QKQEAgLTk0MSw2ICYjNDM7OTQxLDg2IEBAIFRvIHNlZSBpbnB1dCBzaWduYWwgb24gdGhvc2UgUFRQIHBpbnMsIHlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBEUExMIHByb3Blcmx5LgogT3V0cHV0IHNpZ25hbCBpcyBvbmx5IHZpc2libGUgb24gRFBMTCBhbmQgdG8gc2VuZCBpdCB0byB0aGUgYm9hcmQgU01BL1UuRkwgcGlucywKIERQTEwgb3V0cHV0IHBpbnMgaGF2ZSB0byBiZSBtYW51YWxseSBjb25maWd1cmVkLgogCiYjNDM7VW5tYW5hZ2VkIERQTEwgU3VwcG9ydAomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MztIYXJkd2FyZSB2YXJpYW50cyBvZiBFODMwIG1heSBzdXBwb3J0IGFuIHVubWFuYWdlZCBEUExMOgomIzQzOwomIzQzOy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE4RiBmb3IgT0NQIDMuMCwKJiM0MzsKJiM0MzstIEludGVsKFIpIEV0aGVybmV0IE5ldHdvcmsgQWRhcHRlciBFODMwLVhYVkRBNEYuCiYjNDM7CiYjNDM7SW4gdGhlIGNhc2Ugb2YgdGhlIHVubWFuYWdlZCBEUExMLCB0aGUgY29uZmlndXJhdGlvbiBpcyBoYXJkY29kZWQgd2l0aGluIHRoZQomIzQzO2hhcmR3YXJlIGFuZCBmaXJtd2FyZSwgbWVhbmluZyB1c2VycyBjYW5ub3QgbW9kaWZ5IHNldHRpbmdzLiBIb3dldmVyLAomIzQzO3VzZXJzIGNhbiBjaGVjayB0aGUgRFBMTCBsb2NrIHN0YXR1cyBhbmQgb2J0YWluIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KJiM0Mzt0aHJvdWdoIHRoZSBMaW51eCBEUExMIHN1YnN5c3RlbS4KJiM0MzsKJiM0MztXaGVuIHByZXNlbnQsIHRoZSBEUExMIGRldmljZSBsb2NrcyB0byBhbiBleHRlcm5hbCBzaWduYWwgcHJvdmlkZWQgdGhyb3VnaCB0aGUKJiM0MztQQ0llL09DUCBwaW4uIFRoZSBleHBlY3RlZCBpbnB1dCBzaWduYWwgaXMgMVBQUyAoMSBQdWxzZSBQZXIgU2Vjb25kKSBlbWJlZGRlZAomIzQzO29uIGEgMTBNSHogcmVmZXJlbmNlIGNsb2NrLgomIzQzO1RoZSBEUExMIHByb2R1Y2VzIG91dHB1dDoKJiM0MzsKJiM0MzstIGZvciBNQUMgKE1lZGlhIEFjY2VzcyBDb250cm9sKSAmYW1wOyBQSFkgKFBoeXNpY2FsIExheWVyKSBjbG9ja3MsCiYjNDM7CiYjNDM7LSAxUFBTIGZvciBzeW5jaHJvbml6YXRpb24gb2Ygb25ib2FyZCBQSEMgKFByZWNpc2lvbiBIYXJkd2FyZSBDbG9jaykgdGltZXIuCiYjNDM7CiYjNDM7RXhhbXBsZSBvdXRwdXQgb2YgcXVlcnlpbmcgdGhlIExpbnV4IERQTEwgc3Vic3lzdGVtIGNhbiBiZSBmb3VuZCBiZWxvdy4KJiM0MzsKJiM0MzsuLiBjb2RlLWJsb2NrOjogY29uc29sZQomIzQzOyAgOmNhcHRpb246IER1bXBpbmcgdGhlIERQTEwgcGlucwomIzQzOwomIzQzOyAgJCAmbHQ7eW5sJmd0OyAtLXNwZWMgRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RwbGwueWFtbCAtLWR1bXAgcGluLWdldAomIzQzOyAgW3smIzM5O2JvYXJkLWxhYmVsJiMzOTs6ICYjMzk7MTU4OC1USU1FX1NZTkMmIzM5OywKJiM0MzsgICAgJiMzOTtjYXBhYmlsaXRpZXMmIzM5Ozogc2V0KCksCiYjNDM7ICAgICYjMzk7Y2xvY2staWQmIzM5OzogMjgyNTc0NDcxNTYxMjE2LAomIzQzOyAgICAmIzM5O2VzeW5jLWZyZXF1ZW5jeSYjMzk7OiAxLAomIzQzOyAgICAmIzM5O2VzeW5jLWZyZXF1ZW5jeS1zdXBwb3J0ZWQmIzM5OzogW3smIzM5O2ZyZXF1ZW5jeS1tYXgmIzM5OzogMSwgJiMzOTtmcmVxdWVuY3ktbWluJiMzOTs6IDF9XSwKJiM0MzsgICAgJiMzOTtlc3luYy1wdWxzZSYjMzk7OiAyNSwKJiM0MzsgICAgJiMzOTtmcmVxdWVuY3kmIzM5OzogMTAwMDAwMDAsCiYjNDM7ICAgICYjMzk7aWQmIzM5OzogMTMsCiYjNDM7ICAgICYjMzk7bW9kdWxlLW5hbWUmIzM5OzogJiMzOTtpY2UmIzM5OywKJiM0MzsgICAgJiMzOTtwYXJlbnQtZGV2aWNlJiMzOTs6IFt7JiMzOTtkaXJlY3Rpb24mIzM5OzogJiMzOTtpbnB1dCYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtwYXJlbnQtaWQmIzM5OzogNiwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICYjMzk7c3RhdGUmIzM5OzogJiMzOTtjb25uZWN0ZWQmIzM5O31dLAomIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1tYXgmIzM5OzogMCwKJiM0MzsgICAgJiMzOTtwaGFzZS1hZGp1c3QtbWluJiMzOTs6IDAsCiYjNDM7ICAgICYjMzk7dHlwZSYjMzk7OiAmIzM5O2V4dCYjMzk7fSwKJiM0MzsgICAgeyYjMzk7Ym9hcmQtbGFiZWwmIzM5OzogJiMzOTtNQUMtUEhZLUNMSyYjMzk7LAomIzQzOyAgICAgICYjMzk7Y2FwYWJpbGl0aWVzJiMzOTs6IHNldCgpLAomIzQzOyAgICAmIzM5O2Nsb2NrLWlkJiMzOTs6IDI4MjU3NDQ3MTU2MTIxNiwKJiM0MzsgICAgJiMzOTtmcmVxdWVuY3kmIzM5OzogMTU2MjUwMDAwLAomIzQzOyAgICAmIzM5O2lkJiMzOTs6IDE0LAomIzQzOyAgICAmIzM5O21vZHVsZS1uYW1lJiMzOTs6ICYjMzk7aWNlJiMzOTssCiYjNDM7ICAgICYjMzk7cGFyZW50LWRldmljZSYjMzk7OiBbeyYjMzk7ZGlyZWN0aW9uJiMzOTs6ICYjMzk7b3V0cHV0JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3BhcmVudC1pZCYjMzk7OiA2LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtzdGF0ZSYjMzk7OiAmIzM5O2Nvbm5lY3RlZCYjMzk7fV0sCiYjNDM7ICAgICYjMzk7cGhhc2UtYWRqdXN0LW1heCYjMzk7OiAwLAomIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1taW4mIzM5OzogMCwKJiM0MzsgICAgJiMzOTt0eXBlJiMzOTs6ICYjMzk7c3luY2UtZXRoLXBvcnQmIzM5O30sCiYjNDM7ICB7JiMzOTtib2FyZC1sYWJlbCYjMzk7OiAmIzM5OzE1ODgtVElNRV9SRUYmIzM5OywKJiM0MzsgICAgJiMzOTtjYXBhYmlsaXRpZXMmIzM5Ozogc2V0KCksCiYjNDM7ICAgICYjMzk7Y2xvY2staWQmIzM5OzogMjgyNTc0NDcxNTYxMjE2LAomIzQzOyAgICAmIzM5O2ZyZXF1ZW5jeSYjMzk7OiAxLAomIzQzOyAgICAmIzM5O2lkJiMzOTs6IDE1LAomIzQzOyAgICAmIzM5O21vZHVsZS1uYW1lJiMzOTs6ICYjMzk7aWNlJiMzOTssCiYjNDM7ICAgICYjMzk7cGFyZW50LWRldmljZSYjMzk7OiBbeyYjMzk7ZGlyZWN0aW9uJiMzOTs6ICYjMzk7b3V0cHV0JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3BhcmVudC1pZCYjMzk7OiA2LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtzdGF0ZSYjMzk7OiAmIzM5O2Nvbm5lY3RlZCYjMzk7fV0sCiYjNDM7ICAgICYjMzk7cGhhc2UtYWRqdXN0LW1heCYjMzk7OiAwLAomIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1taW4mIzM5OzogMCwKJiM0MzsgICAgJiMzOTt0eXBlJiMzOTs6ICYjMzk7aW50LW9zY2lsbGF0b3ImIzM5O31dCiYjNDM7CiYjNDM7Li4gY29kZS1ibG9jazo6IGNvbnNvbGUKJiM0MzsgIDpjYXB0aW9uOiBEdW1waW5nIHRoZSBEUExMIGRldmljZXMKJiM0MzsKJiM0MzsgICQgJmx0O3lubCZndDsgLS1zcGVjIERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcGxsLnlhbWwgLS1kdW1wIGRldmljZS1nZXQKJiM0MzsgIFt7JiMzOTtjbG9jay1pZCYjMzk7OiAyODI1NzQ0NzE1NjEyMTYsCiYjNDM7ICAgICYjMzk7aWQmIzM5OzogNiwKJiM0MzsgICAgJiMzOTtsb2NrLXN0YXR1cyYjMzk7OiAmIzM5O2xvY2tlZCYjMzk7LAomIzQzOyAgICAmIzM5O21vZGUmIzM5OzogJiMzOTttYW51YWwmIzM5OywKJiM0MzsgICAgJiMzOTttb2RlLXN1cHBvcnRlZCYjMzk7OiBbJiMzOTttYW51YWwmIzM5O10sCiYjNDM7ICAgICYjMzk7bW9kdWxlLW5hbWUmIzM5OzogJiMzOTtpY2UmIzM5OywKJiM0MzsgICAgJiMzOTt0eXBlJiMzOTs6ICYjMzk7cHBzJiMzOTt9XQomIzQzOwogR05TUyBtb2R1bGUKIC0tLS0tLS0tLS0tCiBSZXF1aXJlcyBrZXJuZWwgY29tcGlsZWQgd2l0aCBDT05GSUdfR05TUz15IG9yIENPTkZJR19HTlNTPW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMKaW5kZXggODQ0ZjMxYWIzN2FkNC4uYjA4YmNiZGIxOWQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYwpAQCAtNjc1LDYgJiM0Mzs2NzUsOCBAQCBzdGF0aWMgdm9pZCBlMTAwMF9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLAogCQlza2IgPSBidWZmZXJfaW5mby0mZ3Q7c2tiOwogCQlpZiAoc2tiKSB7CiAJCQlza2JfdHJpbShza2IsIDApOwomIzQzOwkJCWlmIChsaWtlbHkoYnVmZmVyX2luZm8tJmd0O2RtYSkpCiYjNDM7CQkJCWdvdG8gd3JpdGVfZGVzYzsKIAkJCWdvdG8gbWFwX3NrYjsKIAkJfQogCkBAIC02OTIsMTAgJiM0Mzs2OTQsMTIgQEAgc3RhdGljIHZvaWQgZTEwMDBfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywKIAkJCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKIAkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZhbXA7cGRldi0mZ3Q7ZGV2LCBidWZmZXJfaW5mby0mZ3Q7ZG1hKSkgewogCQkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtSeCBETUEgbWFwIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJCWJ1ZmZlcl9pbmZvLSZndDtkbWEgPSAwOwogCQkJYWRhcHRlci0mZ3Q7cnhfZG1hX2ZhaWxlZCYjNDM7JiM0Mzs7CiAJCQlicmVhazsKIAkJfQogCiYjNDM7d3JpdGVfZGVzYzoKIAkJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0NfRVhUKCpyeF9yaW5nLCBpKTsKIAkJcnhfZGVzYy0mZ3Q7cmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLSZndDtkbWEpOwogCkBAIC05NTMsNyAmIzQzOzk1Nyw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsCiAJCWRtYV9ybWIoKTsJLyogcmVhZCBkZXNjcmlwdG9yIGFuZCByeF9idWZmZXJfaW5mbyBhZnRlciBzdGF0dXMgREQgKi8KIAogCQlza2IgPSBidWZmZXJfaW5mby0mZ3Q7c2tiOwotCQlidWZmZXJfaW5mby0mZ3Q7c2tiID0gTlVMTDsKIAogCQlwcmVmZXRjaChza2ItJmd0O2RhdGEgLSBORVRfSVBfQUxJR04pOwogCkBAIC05NjcsOSAmIzQzOzk3MCw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsCiAKIAkJY2xlYW5lZCA9IHRydWU7CiAJCWNsZWFuZWRfY291bnQmIzQzOyYjNDM7OwotCQlkbWFfdW5tYXBfc2luZ2xlKCZhbXA7cGRldi0mZ3Q7ZGV2LCBidWZmZXJfaW5mby0mZ3Q7ZG1hLAotCQkJCSBhZGFwdGVyLSZndDtyeF9idWZmZXJfbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlidWZmZXJfaW5mby0mZ3Q7ZG1hID0gMDsKIAogCQlsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9kZXNjLSZndDt3Yi51cHBlci5sZW5ndGgpOwogCkBAIC05ODUsOCAmIzQzOzk4NSw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsCiAJCWlmIChhZGFwdGVyLSZndDtmbGFnczIgJmFtcDsgRkxBRzJfSVNfRElTQ0FSRElORykgewogCQkJLyogQWxsIHJlY2VpdmVzIG11c3QgZml0IGludG8gYSBzaW5nbGUgYnVmZmVyICovCiAJCQllX2RiZygmIzM0O1JlY2VpdmUgcGFja2V0IGNvbnN1bWVkIG11bHRpcGxlIGJ1ZmZlcnNcbiYjMzQ7KTsKLQkJCS8qIHJlY3ljbGUgKi8KLQkJCWJ1ZmZlcl9pbmZvLSZndDtza2IgPSBza2I7CiAJCQlpZiAoc3RhdGVyciAmYW1wOyBFMTAwMF9SWERfU1RBVF9FT1ApCiAJCQkJYWRhcHRlci0mZ3Q7ZmxhZ3MyICZhbXA7PSB+RkxBRzJfSVNfRElTQ0FSRElORzsKIAkJCWdvdG8gbmV4dF9kZXNjOwpAQCAtOTk0LDggJiM0Mzs5OTIsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLAogCiAJCWlmICh1bmxpa2VseSgoc3RhdGVyciAmYW1wOyBFMTAwMF9SWERFWFRfRVJSX0ZSQU1FX0VSUl9NQVNLKSAmYW1wOyZhbXA7CiAJCQkgICAgICEobmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX1JYQUxMKSkpIHsKLQkJCS8qIHJlY3ljbGUgKi8KLQkJCWJ1ZmZlcl9pbmZvLSZndDtza2IgPSBza2I7CiAJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQogCkBAIC0xMDIyLDE5ICYjNDM7MTAxOCwzMyBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLAogCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPQogCQkJCW5hcGlfYWxsb2Nfc2tiKCZhbXA7YWRhcHRlci0mZ3Q7bmFwaSwgbGVuZ3RoKTsKIAkJCWlmIChuZXdfc2tiKSB7CiYjNDM7CQkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCQlidWZmZXJfaW5mby0mZ3Q7ZG1hLAomIzQzOwkJCQkJCQlhZGFwdGVyLSZndDtyeF9idWZmZXJfbGVuLAomIzQzOwkJCQkJCQlETUFfRlJPTV9ERVZJQ0UpOwogCQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChuZXdfc2tiLAogCQkJCQkJCSAgICAgICAtTkVUX0lQX0FMSUdOLAogCQkJCQkJCSAgICAgICAoc2tiLSZndDtkYXRhIC0KIAkJCQkJCQkJTkVUX0lQX0FMSUdOKSwKIAkJCQkJCQkgICAgICAgKGxlbmd0aCAmIzQzOwogCQkJCQkJCQlORVRfSVBfQUxJR04pKTsKLQkJCQkvKiBzYXZlIHRoZSBza2IgaW4gYnVmZmVyX2luZm8gYXMgZ29vZCAqLwotCQkJCWJ1ZmZlcl9pbmZvLSZndDtza2IgPSBza2I7CiYjNDM7CQkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCQkgICBidWZmZXJfaW5mby0mZ3Q7ZG1hLAomIzQzOwkJCQkJCQkgICBhZGFwdGVyLSZndDtyeF9idWZmZXJfbGVuLAomIzQzOwkJCQkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOwogCQkJCXNrYiA9IG5ld19za2I7CiYjNDM7CQkJCWdvdG8gY29weWJyZWFrX2RvbmU7CiAJCQl9CiAJCQkvKiBlbHNlIGp1c3QgY29udGludWUgd2l0aCB0aGUgb2xkIG9uZSAqLwogCQl9Ci0JCS8qIGVuZCBjb3B5YnJlYWsgY29kZSAqLwomIzQzOwomIzQzOwkJYnVmZmVyX2luZm8tJmd0O3NrYiA9IE5VTEw7CiYjNDM7CQlkbWFfdW5tYXBfc2luZ2xlKCZhbXA7cGRldi0mZ3Q7ZGV2LCBidWZmZXJfaW5mby0mZ3Q7ZG1hLAomIzQzOwkJCQkgYWRhcHRlci0mZ3Q7cnhfYnVmZmVyX2xlbiwKJiM0MzsJCQkJIERNQV9GUk9NX0RFVklDRSk7CiYjNDM7CQlidWZmZXJfaW5mby0mZ3Q7ZG1hID0gMDsKJiM0MzsKJiM0Mztjb3B5YnJlYWtfZG9uZToKIAkJc2tiX3B1dChza2IsIGxlbmd0aCk7CiAKIAkJLyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwppbmRleCAwY2QwZTU1OTdjOTA5Li5hYmJjNzFlODE1YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKQEAgLTQsNiAmIzQzOzQsNyBAQAogI2luY2x1ZGUgJmx0O2dlbmVyYXRlZC91dHNyZWxlYXNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3Jhc2hfZHVtcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldC9pbnRlbC9saWJpZS9wY3R5cGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0L2ludGVsL2xpYmllL3J4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYnJpZGdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfbWFjdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwpAQCAtMjQxMSwxMCAmIzQzOzI0MTIsMTIgQEAgdm9pZCBpNDBlX2FxY19hZGRfZmlsdGVycyhzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgY29uc3QgY2hhciAqdnNpX25hbWUsCiAKIAlpZiAoZmNudCAhPSBudW1fYWRkKSB7CiAJCWlmICh2c2ktJmd0O3R5cGUgPT0gSTQwRV9WU0lfTUFJTikgewotCQkJc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsIHZzaS0mZ3Q7c3RhdGUpOwotCQkJZGV2X3dhcm4oJmFtcDt2c2ktJmd0O2JhY2stJmd0O3BkZXYtJmd0O2RldiwKLQkJCQkgJiMzNDtFcnJvciAlcyBhZGRpbmcgUlggZmlsdGVycyBvbiAlcywgcHJvbWlzY3VvdXMgbW9kZSBmb3JjZWQgb25cbiYjMzQ7LAotCQkJCSBsaWJpZV9hcV9zdHIoYXFfc3RhdHVzKSwgdnNpX25hbWUpOwomIzQzOwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsCiYjNDM7CQkJCQkgICAgICB2c2ktJmd0O3N0YXRlKSkgewomIzQzOwkJCQlkZXZfd2FybigmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7RXJyb3IgJXMgYWRkaW5nIFJYIGZpbHRlcnMgb24gJXMsIHByb21pc2N1b3VzIG1vZGUgZm9yY2VkIG9uXG4mIzM0OywKJiM0MzsJCQkJCSBsaWJpZV9hcV9zdHIoYXFfc3RhdHVzKSwgdnNpX25hbWUpOwomIzQzOwkJCX0KIAkJfSBlbHNlIGlmICh2c2ktJmd0O3R5cGUgPT0gSTQwRV9WU0lfU1JJT1YgfHwKIAkJCSAgIHZzaS0mZ3Q7dHlwZSA9PSBJNDBFX1ZTSV9WTURRMSB8fAogCQkJICAgdnNpLSZndDt0eXBlID09IEk0MEVfVlNJX1ZNRFEyKSB7CkBAIC0yNDY0LDEwICYjNDM7MjQ2NywxMSBAQCBpNDBlX2FxY19icm9hZGNhc3RfZmlsdGVyKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSwKIAl9CiAKIAlpZiAoYXFfcmV0KSB7Ci0JCXNldF9iaXQoX19JNDBFX1ZTSV9PVkVSRkxPV19QUk9NSVNDLCB2c2ktJmd0O3N0YXRlKTsKLQkJZGV2X3dhcm4oJmFtcDt2c2ktJmd0O2JhY2stJmd0O3BkZXYtJmd0O2RldiwKLQkJCSAmIzM0O0Vycm9yICVzLCBmb3JjaW5nIG92ZXJmbG93IHByb21pc2N1b3VzIG9uICVzXG4mIzM0OywKLQkJCSBsaWJpZV9hcV9zdHIoaHctJmd0O2FxLmFzcV9sYXN0X3N0YXR1cyksIHZzaV9uYW1lKTsKJiM0MzsJCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsIHZzaS0mZ3Q7c3RhdGUpKSB7CiYjNDM7CQkJZGV2X3dhcm4oJmFtcDt2c2ktJmd0O2JhY2stJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7RXJyb3IgJXMsIGZvcmNpbmcgb3ZlcmZsb3cgcHJvbWlzY3VvdXMgb24gJXNcbiYjMzQ7LAomIzQzOwkJCQkgbGliaWVfYXFfc3RyKGh3LSZndDthcS5hc3FfbGFzdF9zdGF0dXMpLCB2c2lfbmFtZSk7CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIGFxX3JldDsKQEAgLTM2MjIsNyAmIzQzOzM2MjYsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGk0MGVfcmluZyAqcmluZykKIAl9CiAKIHNraXA6Ci0JeGRwX2luaXRfYnVmZigmYW1wO3JpbmctJmd0O3hkcCwgeGRwX2ZyYW1lX3N6LCAmYW1wO3JpbmctJmd0O3hkcF9yeHEpOwomIzQzOwl4ZHBfaW5pdF9idWZmKCZhbXA7cmluZy0mZ3Q7eGRwX2N0eC54ZHAsIHhkcF9mcmFtZV9zeiwgJmFtcDtyaW5nLSZndDt4ZHBfcnhxKTsKIAogCXJ4X2N0eC5kYnVmZiA9IERJVl9ST1VORF9VUChyaW5nLSZndDtyeF9idWZfbGVuLAogCQkJCSAgICBCSVRfVUxMKEk0MEVfUlhRX0NUWF9EQlVGRl9TSElGVCkpOwpAQCAtMTM1ODIsNiAmIzQzOzEzNTg2LDUzIEBAIHN0YXRpYyBpbnQgaTQwZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW50IGk0MGVfeGRwX3J4X2hhc2goY29uc3Qgc3RydWN0IHhkcF9tZCAqX2N0eCwgdTMyICpoYXNoLAomIzQzOwkJCSAgICBlbnVtIHhkcF9yc3NfaGFzaF90eXBlICpyc3NfdHlwZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpNDBlX3hkcF9idWZmICpjdHggPSAoY29uc3Qgdm9pZCAqKV9jdHg7CiYjNDM7CWNvbnN0IHVuaW9uIGk0MGVfcnhfZGVzYyAqZGVzYyA9IGN0eC0mZ3Q7ZGVzYzsKJiM0MzsJc3RydWN0IGxpYmV0aF9yeF9wdCByeF9wdHlwZTsKJiM0MzsJdTggcmF3X3J4X3B0eXBlOwomIzQzOwl1NjQgc3RhdHVzOwomIzQzOwomIzQzOwlzdGF0dXMgPSBsZTY0X3RvX2NwdShkZXNjLSZndDt3Yi5xd29yZDEuc3RhdHVzX2Vycm9yX2xlbik7CiYjNDM7CXJhd19yeF9wdHlwZSA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfUFRZUEVfTUFTSywgc3RhdHVzKTsKJiM0MzsJcnhfcHR5cGUgPSBsaWJpZV9yeF9wdF9wYXJzZShyYXdfcnhfcHR5cGUpOwomIzQzOwomIzQzOwlpZiAoIWxpYmV0aF9yeF9wdF9oYXNfaGFzaChjdHgtJmd0O3hkcC5yeHEtJmd0O2RldiwgcnhfcHR5cGUpIHx8CiYjNDM7CSAgICBGSUVMRF9HRVQoSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX01BU0ssIHN0YXR1cykgIT0KJiM0MzsJCSAgICBJNDBFX1JYX0RFU0NfRkxUU1RBVF9SU1NfSEFTSCkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKJiM0MzsKJiM0MzsJKmhhc2ggPSBsZTMyX3RvX2NwdShkZXNjLSZndDt3Yi5xd29yZDAuaGlfZHdvcmQucnNzKTsKJiM0MzsJKnJzc190eXBlID0gcnhfcHR5cGUuaGFzaF90eXBlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpNDBlX3hkcF9yeF92bGFuX3RhZyhjb25zdCBzdHJ1Y3QgeGRwX21kICpfY3R4LCBfX2JlMTYgKnZsYW5fcHJvdG8sCiYjNDM7CQkJCXUxNiAqdmxhbl90Y2kpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqY3R4ID0gKGNvbnN0IHZvaWQgKilfY3R4OwomIzQzOwljb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2MgPSBjdHgtJmd0O2Rlc2M7CiYjNDM7CXU2NCBzdGF0dXM7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGxlNjRfdG9fY3B1KGRlc2MtJmd0O3diLnF3b3JkMS5zdGF0dXNfZXJyb3JfbGVuKTsKJiM0MzsKJiM0MzsJaWYgKCEoc3RhdHVzICZhbXA7IEJJVChJNDBFX1JYX0RFU0NfU1RBVFVTX0wyVEFHMVBfU0hJRlQpKSkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKJiM0MzsKJiM0MzsJKnZsYW5fcHJvdG8gPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSk7CiYjNDM7CSp2bGFuX3RjaSA9IGxlMTZfdG9fY3B1KGRlc2MtJmd0O3diLnF3b3JkMC5sb19kd29yZC5sMnRhZzEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB4ZHBfbWV0YWRhdGFfb3BzIGk0MGVfeGRwX21ldGFkYXRhX29wcyA9IHsKJiM0MzsJLnhtb19yeF9oYXNoCQk9IGk0MGVfeGRwX3J4X2hhc2gsCiYjNDM7CS54bW9fcnhfdmxhbl90YWcJPSBpNDBlX3hkcF9yeF92bGFuX3RhZywKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNDBlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IGk0MGVfb3BlbiwKIAkubmRvX3N0b3AJCT0gaTQwZV9jbG9zZSwKQEAgLTEzNzg0LDYgJiM0MzsxMzgzNSw3IEBAIHN0YXRpYyBpbnQgaTQwZV9jb25maWdfbmV0ZGV2KHN0cnVjdCBpNDBlX3ZzaSAqdnNpKQogCWk0MGVfdnNpX2NvbmZpZ19uZXRkZXZfdGModnNpLCB2c2ktJmd0O3RjX2NvbmZpZy5lbmFibGVkX3RjKTsKIAogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7aTQwZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3hkcF9tZXRhZGF0YV9vcHMgPSAmYW1wO2k0MGVfeGRwX21ldGFkYXRhX29wczsKIAluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCWk0MGVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jCmluZGV4IGVmNWU2NTc4MTZmMDAuLjdmNjhhZGI1MTA5YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYwpAQCAtMjQzOCwxMCAmIzQzOzI0MzgsMTEgQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LAogCQkJICAgICB1bnNpZ25lZCBpbnQgKnJ4X2NsZWFuZWQpCiB7CiAJdW5zaWduZWQgaW50IHRvdGFsX3J4X2J5dGVzID0gMCwgdG90YWxfcnhfcGFja2V0cyA9IDA7CiYjNDM7CXN0cnVjdCBpNDBlX3hkcF9idWZmICp4ZHBfY3R4ID0gJmFtcDtyeF9yaW5nLSZndDt4ZHBfY3R4OwogCXUxNiBjbGVhbmVkX2NvdW50ID0gSTQwRV9ERVNDX1VOVVNFRChyeF9yaW5nKTsKIAl1MTYgY2xlYW5fdGhyZXNob2xkID0gcnhfcmluZy0mZ3Q7Y291bnQgLyAyOwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSByeF9yaW5nLSZndDtyeF9vZmZzZXQ7Ci0Jc3RydWN0IHhkcF9idWZmICp4ZHAgPSAmYW1wO3J4X3JpbmctJmd0O3hkcDsKJiM0MzsJc3RydWN0IHhkcF9idWZmICp4ZHAgPSAmYW1wO3hkcF9jdHgtJmd0O3hkcDsKIAl1bnNpZ25lZCBpbnQgeGRwX3htaXQgPSAwOwogCXN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7CiAJYm9vbCBmYWlsdXJlID0gZmFsc2U7CkBAIC0yNTMwLDYgJiM0MzsyNTMxLDggQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LAogCQlpZiAobmVvcCkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQl4ZHBfY3R4LSZndDtkZXNjID0gcnhfZGVzYzsKJiM0MzsKIAkJeGRwX3JlcyA9IGk0MGVfcnVuX3hkcChyeF9yaW5nLCB4ZHAsIHhkcF9wcm9nKTsKIAogCQlpZiAoeGRwX3JlcykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmgKaW5kZXggMWU1ZmQ2M2Q0N2Y0Ny4uYmI3NDFmZjNlNWYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oCkBAIC0yODMsNiAmIzQzOzI4MywxMSBAQCBzdHJ1Y3QgaTQwZV9yeF9idWZmZXIgewogCV9fdTMyIHBhZ2VfY291bnQ7CiB9OwogCiYjNDM7c3RydWN0IGk0MGVfeGRwX2J1ZmYgewomIzQzOwlzdHJ1Y3QgeGRwX2J1ZmYgeGRwOwomIzQzOwljb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2M7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBpNDBlX3F1ZXVlX3N0YXRzIHsKIAl1NjQgcGFja2V0czsKIAl1NjQgYnl0ZXM7CkBAIC0zNDUsNyAmIzQzOzM1MCw3IEBAIHN0cnVjdCBpNDBlX3JpbmcgewogCSAqIGFuZCB0byByZXN1bWUgcGFja2V0IGJ1aWxkaW5nIGZvciB0aGlzIHJpbmcgaW4gdGhlIG5leHQgY2FsbCB0bwogCSAqIGk0MGVfY2xlYW5fcnhfcmluZ19pcnEoKS4KIAkgKi8KLQlzdHJ1Y3QgeGRwX2J1ZmYgeGRwOwomIzQzOwlzdHJ1Y3QgaTQwZV94ZHBfYnVmZiB4ZHBfY3R4OwogCiAJLyogTmV4dCBkZXNjcmlwdG9yIHRvIGJlIHByb2Nlc3NlZDsgbmV4dF90b19jbGVhbiBpcyB1cGRhdGVkIG9ubHkgb24KIAkgKiBwcm9jZXNzaW5nIEVPUCBkZXNjcmlwdG9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R5cGUuaAppbmRleCBlZDhiYmRiNTg2ZGE5Li4xNmE2NWM2ZTUxNTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmgKQEAgLTQsNiAmIzQzOzQsNyBAQAogI2lmbmRlZiBfSTQwRV9UWVBFX0hfCiAjZGVmaW5lIF9JNDBFX1RZUEVfSF8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9pZl9ldGhlci5oJmd0OwogI2luY2x1ZGUgJiMzNDtpNDBlX2FkbWlucS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aTQwZV9obWMuaCYjMzQ7CkBAIC02OTksNiAmIzQzOzcwMCwxMCBAQCBlbnVtIGk0MGVfcnhfZGVzY19zdGF0dXNfYml0cyB7CiAJSTQwRV9SWF9ERVNDX1NUQVRVU19MQVNUIC8qIHRoaXMgZW50cnkgbXVzdCBiZSBsYXN0ISEhICovCiB9OwogCiYjNDM7I2RlZmluZSBJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfTUFTSyAgICAgICAgICAgICAgICAgICBcCiYjNDM7CUdFTk1BU0tfVUxMKEk0MEVfUlhfREVTQ19TVEFUVVNfRkxUU1RBVF9TSElGVCAmIzQzOyAxLCBcCiYjNDM7CQkgICAgSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX1NISUZUKQomIzQzOwogI2RlZmluZSBJNDBFX1JYRF9RVzFfU1RBVFVTX1NISUZUCTAKICNkZWZpbmUgSTQwRV9SWERfUVcxX1NUQVRVU19NQVNLCSgoQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTEFTVCkgLSAxKSBcCiAJCQkJCSAmbHQ7Jmx0OyBJNDBFX1JYRF9RVzFfU1RBVFVTX1NISUZUKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jCmluZGV4IDlmNDczODhlYWJhNTMuLjUxYTA1Y2U0YzdjZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMKQEAgLTI0Niw2ICYjNDM7MjQ2LDggQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KQogCXUzMiBuYl9idWZmcywgaTsKIAlkbWFfYWRkcl90IGRtYTsKIAomIzQzOwlYU0tfQ0hFQ0tfUFJJVl9UWVBFKHN0cnVjdCBpNDBlX3hkcF9idWZmKTsKJiM0MzsKIAlyeF9kZXNjID0gSTQwRV9SWF9ERVNDKHJ4X3JpbmcsIG50dSk7CiAJeGRwID0gaTQwZV9yeF9iaShyeF9yaW5nLCBudHUpOwogCkBAIC0zOTYsNiAmIzQzOzM5OCwxNCBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsCiAJV0FSTl9PTl9PTkNFKDEpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBpNDBlX3hkcF9idWZmICp4c2tfYnVmZl90b19pNDBlX2N0eChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkKJiM0Mzt7CiYjNDM7CS8qIHhkcF9idWZmIHBvaW50ZXIgdXNlZCBieSBaQyBjb2RlIHBhdGggaXMgYWxsb2NhdGVkIGFzIHhkcF9idWZmX3hzay4KJiM0MzsJICogaTQwZV94ZHBfYnVmZiBwcml2YXRlIGZpZWxkcyBvdmVybGFwIHdpdGggeGRwX2J1ZmZfeHNrLSZndDtjYi4KJiM0MzsJICovCiYjNDM7CXJldHVybiAoc3RydWN0IGk0MGVfeGRwX2J1ZmYgKil4ZHA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpNDBlX2NsZWFuX3J4X2lycV96YyAtIENvbnN1bWVzIFJ4IHBhY2tldHMgZnJvbSB0aGUgaGFyZHdhcmUgcmluZwogICogQHJ4X3Jpbmc6IFJ4IHJpbmcKQEAgLTQ3Miw2ICYjNDM7NDgyLDggQEAgaW50IGk0MGVfY2xlYW5fcnhfaXJxX3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIGludCBidWRnZXQpCiAJCWlmIChpNDBlX2lzX25vbl9lb3AocnhfcmluZywgcnhfZGVzYykpCiAJCQljb250aW51ZTsKIAomIzQzOwkJeHNrX2J1ZmZfdG9faTQwZV9jdHgoZmlyc3QpLSZndDtkZXNjID0gcnhfZGVzYzsKJiM0MzsKIAkJeGRwX3JlcyA9IGk0MGVfcnVuX3hkcF96YyhyeF9yaW5nLCBmaXJzdCwgeGRwX3Byb2cpOwogCQlpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHJ4X3JpbmcsIGZpcnN0LCByeF9kZXNjLCAmYW1wO3J4X3BhY2tldHMsCiAJCQkJCSAgJmFtcDtyeF9ieXRlcywgeGRwX3JlcywgJmFtcDtmYWlsdXJlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmMKaW5kZXggOGU5YThhODE3OGQ0OC4uYTgzZWI5ZjEwNGM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmMKQEAgLTEwMSw2ICYjNDM7MTAxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfaGVhbHRoX3N0YXR1cyBpY2VfaGVhbHRoX3N0YXR1c19sb29rdXBbXSA9IHsKIAkJJiMzNDtTdXBwbGllZCBNSUIgZmlsZSBpcyBpbnZhbGlkLiBEQ0IgcmV2ZXJ0ZWQgdG8gZGVmYXVsdCBjb25maWd1cmF0aW9uLiYjMzQ7LAogCQkmIzM0O0Rpc2FibGUgRlctTExEUCBhbmQgY2hlY2sgRENCeCBzeXN0ZW0gY29uZmlndXJhdGlvbi4mIzM0OywKIAkJe2ljZV9wb3J0X251bWJlcl9sYWJlbCwgJiMzNDtNSUIgSUQmIzM0O319LAomIzQzOwl7SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLLCAmIzM0O0xvY2FsIERQTEwgbG9jayBzdGF0dXMmIzM0OywKJiM0MzsJCU5VTEwsfSwKIH07CiAKIHN0YXRpYyBpbnQgaWNlX2hlYWx0aF9zdGF0dXNfbG9va3VwX2NvbXBhcmUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKQEAgLTI0Miw2ICYjNDM7MjQ0LDEwIEBAIHZvaWQgaWNlX3Byb2Nlc3NfaGVhbHRoX3N0YXR1c19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9ycV9ldmVudF9pbmZvCiAJCQkJcGYtJmd0O2hlYWx0aF9yZXBvcnRlcnMuZndfc3RhdHVzID0gKmhlYWx0aF9pbmZvOwogCQkJCWRldmxpbmtfaGVhbHRoX3JlcG9ydChwZi0mZ3Q7aGVhbHRoX3JlcG9ydGVycy5mdywKIAkJCQkJCSAgICAgICYjMzQ7Rlcgc3luZHJvbWUgcmVwb3J0ZWQmIzM0OywgTlVMTCk7CiYjNDM7CQkJCWlmIChzdGF0dXNfY29kZSA9PSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0sgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgdGVzdF9iaXQoSUNFX0ZMQUdfRFBMTCwgcGYtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICBwZi0mZ3Q7ZHBsbHMudW5tYW5hZ2VkKQomIzQzOwkJCQkJaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHBmLCBoZWFsdGhfaW5mbywgdHJ1ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElDRV9BUUNfSEVBTFRIX1NUQVRVU19QRjoKIAkJCWNhc2UgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX1BPUlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oCmluZGV4IDQyODc4YWJhYzllYjEuLjg0OGFjNTgzNDI5NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oCkBAIC0xNTAwLDYgJiM0MzsxNTAwLDcgQEAgc3RydWN0IGljZV9hcWNfZ2V0X2xpbmtfdG9wbyB7CiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1BDQTk1NzUJCTB4MjEKICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfWkwzMDYzMl84MDAzMgkweDI0CiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1NJNTM4M181Mzg0CTB4MjUKJiM0MzsjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDAJCTB4MjcKICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfRTgyMl9QSFkJCTB4MzAKICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfQzgyNwkJMHgzMQogI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9HRU5fQ0xLX01VWAkweDQ3CkBAIC0yNDgzLDExICYjNDM7MjQ4NCwxNCBAQCBlbnVtIGljZV9hcWNfaGVhbHRoX3N0YXR1cyB7CiAJSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9CTUNfUkVTRVQJCQk9IDB4NTBCLAogCUlDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfTEFTVF9NTkdfRkFJTAkJCT0gMHg1MEMsCiAJSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9SRVNPVVJDRV9BTExPQ19GQUlMCQk9IDB4NTBELAomIzQzOwlJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0sJCQk9IDB4NjAxLAogCUlDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfRldfTE9PUAkJCT0gMHgxMDAwLAogCUlDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfRldfUEZSX0ZBSUwJCQk9IDB4MTAwMSwKIAlJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfRkFJTF9BUQkJCT0gMHgxMDAyLAogfTsKIAomIzQzOyNkZWZpbmUgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNCQkJCTY0CiYjNDM7CiAvKiBHZXQgSGVhbHRoIFN0YXR1cyAoaW5kaXJlY3QgMHhGRjIyKSAqLwogc3RydWN0IGljZV9hcWNfZ2V0X2hlYWx0aF9zdGF0dXMgewogCV9fbGUxNiBoZWFsdGhfc3RhdHVzX2NvdW50OwpAQCAtMjUxNCw2ICYjNDM7MjUxOCwxMyBAQCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gewogCV9fbGUzMiBpbnRlcm5hbF9kYXRhMjsKIH07CiAKJiM0MzsvKiBHZXQgSGVhbHRoIFN0YXR1cyByZXNwb25zZSBidWZmZXIgZW50cnksICgweEZGMjEpCiYjNDM7ICogcmVwZWF0ZWQgcGVyIHJlcG9ydGVkIGhlYWx0aCBzdGF0dXMKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSB7CiYjNDM7CV9fbGUxNiBoZWFsdGhfc3RhdHVzX2NvZGU7CiYjNDM7fTsKJiM0MzsKIC8qIEFkbWluIFF1ZXVlIGNvbW1hbmQgb3Bjb2RlcyAqLwogZW51bSBpY2VfYWRtaW5xX29wYyB7CiAJLyogQVEgY29tbWFuZHMgKi8KQEAgLTI2NzcsNiAmIzQzOzI2ODgsNyBAQCBlbnVtIGljZV9hZG1pbnFfb3BjIHsKIAogCS8qIFN5c3RlbSBEaWFnbm9zdGljIGNvbW1hbmRzICovCiAJaWNlX2FxY19vcGNfc2V0X2hlYWx0aF9zdGF0dXNfY2ZnCQk9IDB4RkYyMCwKJiM0MzsJaWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzCT0gMHhGRjIxLAogCWljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzCQkJPSAweEZGMjIsCiAKIAkvKiBGVyBMb2dnaW5nIENvbW1hbmRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYwppbmRleCBlZjFjZTEwNmY4MWI1Li4yYzcyZWQxODY5NWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMKQEAgLTMwNDgsNiAmIzQzOzMwNDgsMjkgQEAgYm9vbCBpY2VfaXNfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdCAtIGNoZWNrIGZvciB1bm1hbmFnZWQgQ0dVIHByZXNlbmNlCiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIENoZWNrIGlmIHRoZSB1bm1hbmFnZWQgQ2xvY2sgR2VuZXJhdGlvbiBVbml0IChDR1UpIGRldmljZSBpcyBwcmVzZW50IGluIHRoZSBuZXRsaXN0LgomIzQzOyAqIFNhdmUgdGhlIENHVSBwYXJ0IG51bWJlciBpbiB0aGUgaHcgc3RydWN0dXJlIGZvciBsYXRlciB1c2UuCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogdHJ1ZSAtIHVubWFuYWdlZCBjZ3UgaXMgcHJlc2VudAomIzQzOyAqICogZmFsc2UgLSB1bm1hbmFnZWQgY2d1IGlzIG5vdCBwcmVzZW50CiYjNDM7ICovCiYjNDM7Ym9vbCBpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KQomIzQzO3sKJiM0MzsJaWYgKCFpY2VfZmluZF9uZXRsaXN0X25vZGUoaHcsIElDRV9BUUNfTElOS19UT1BPX05PREVfVFlQRV9DTEtfQ1RSTCwKJiM0MzsJCQkJICAgSUNFX0FRQ19MSU5LX1RPUE9fTk9ERV9DVFhfR0xPQkFMLAomIzQzOwkJCQkgICBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwLAomIzQzOwkJCQkgICBOVUxMKSkgewomIzQzOwkJaHctJmd0O2NndV9wYXJ0X251bWJlciA9IElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDA7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfaXNfZ3BzX2luX25ldGxpc3QKICAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0CkBAIC02MzEyLDYgJiM0Mzs2MzM1LDExOSBAQCBib29sIGljZV9pc19md19oZWFsdGhfcmVwb3J0X3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodykKIAkJCQkgICAgIElDRV9GV19BUElfSEVBTFRIX1JFUE9SVF9QQVRDSCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXNfc3VwcG9ydGVkIC0gZ2V0IHN1cHBvcnRlZCBoZWFsdGggc3RhdHVzIGNvZGVzCiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3QKJiM0MzsgKiBAYnVmZjogcG9pbnRlciB0byBidWZmZXIgd2hlcmUgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyB3aWxsIGJlIHN0b3JlZAomIzQzOyAqIEBudW06IG51bWJlciBvZiBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIGJ1ZmZlciBjYW4gaG9sZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAtIHN1Y2Nlc3MsCiYjNDM7ICogKiBuZWdhdGl2ZSAtIEFRIGVycm9yIGNvZGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO2ljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcsCiYjNDM7CQkJCSAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtICpidWZmLAomIzQzOwkJCQkgICBpbnQgbnVtKQomIzQzO3sKJiM0MzsJdTE2IGNvZGUgPSBpY2VfYXFjX29wY19nZXRfc3VwcG9ydGVkX2hlYWx0aF9zdGF0dXNfY29kZXM7CiYjNDM7CXN0cnVjdCBsaWJpZV9hcV9kZXNjIGRlc2M7CiYjNDM7CiYjNDM7CWljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKCZhbXA7ZGVzYywgY29kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBpY2VfYXFfc2VuZF9jbWQoaHcsICZhbXA7ZGVzYywgYnVmZiwgbnVtICogc2l6ZW9mKCpidWZmKSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1cyAtIGdldCBjdXJyZW50IGhlYWx0aCBzdGF0dXMgYXJyYXkgZnJvbSB0aGUgZmlybXdhcmUKJiM0MzsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdAomIzQzOyAqIEBidWZmOiBwb2ludGVyIHRvIGJ1ZmZlciB3aGVyZSBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIHdpbGwgYmUgc3RvcmVkCiYjNDM7ICogQG51bTogbnVtYmVyIG9mIGhlYWx0aCBzdGF0dXMgZWxlbWVudHMgYnVmZmVyIGNhbiBob2xkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwIC0gc3VjY2VzcywKJiM0MzsgKiAqIG5lZ2F0aXZlIC0gQVEgZXJyb3IgY29kZS4KJiM0MzsgKi8KJiM0MztpbnQgaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzKHN0cnVjdCBpY2VfaHcgKmh3LAomIzQzOwkJCSAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpYmllX2FxX2Rlc2MgZGVzYzsKJiM0MzsKJiM0MzsJaWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoJmFtcDtkZXNjLAomIzQzOwkJCQkgICAgICBpY2VfYXFjX29wY19nZXRfaGVhbHRoX3N0YXR1cyk7CiYjNDM7CiYjNDM7CXJldHVybiBpY2VfYXFfc2VuZF9jbWQoaHcsICZhbXA7ZGVzYywgYnVmZiwgbnVtICogc2l6ZW9mKCpidWZmKSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkIC0gY2hlY2sgaWYgaGVhbHRoIHN0YXR1cyBjb2RlIGlzIHN1cHBvcnRlZAomIzQzOyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlCiYjNDM7ICogQGNvZGU6IGhlYWx0aCBzdGF0dXMgY29kZSB0byBjaGVjawomIzQzOyAqIEBzdXBwb3J0ZWQ6IHBvaW50ZXIgdG8gYm9vbGVhbiByZXN1bHQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO2ludCBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IGNvZGUsCiYjNDM7CQkJCQlib29sICpzdXBwb3J0ZWQpCiYjNDM7ewomIzQzOwljb25zdCBpbnQgQlVGRl9TSVpFID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNOwomIzQzOwlzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSAqYnVmZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJKnN1cHBvcnRlZCA9IGZhbHNlOwomIzQzOwlidWZmID0ga3phbGxvY19vYmpzKCpidWZmLCBCVUZGX1NJWkUpOwomIzQzOwlpZiAoIWJ1ZmYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcmV0ID0gaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzX3N1cHBvcnRlZChodywgYnVmZiwgQlVGRl9TSVpFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZnJlZV9idWZmOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IEJVRkZfU0laRSAmYW1wOyZhbXA7IGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlOyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChsZTE2X3RvX2NwdShidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZSkgPT0gY29kZSkgewomIzQzOwkJCSpzdXBwb3J0ZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzO2ZyZWVfYnVmZjoKJiM0MzsJa2ZyZWUoYnVmZik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV9nZXRfbGFzdF9oZWFsdGhfc3RhdHVzX2NvZGUgLSBnZXQgbGFzdCBoZWFsdGggc3RhdHVzIGZvciBnaXZlbiBjb2RlCiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAb3V0OiBwb2ludGVyIHRvIHRoZSBoZWFsdGggc3RhdHVzIHN0cnVjdCB0byBiZSBmaWxsZWQKJiM0MzsgKiBAY29kZTogaGVhbHRoIHN0YXR1cyBjb2RlIHRvIGNoZWNrCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztpbnQgaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZShzdHJ1Y3QgaWNlX2h3ICpodywKJiM0MzsJCQkJICAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqb3V0LAomIzQzOwkJCQkgICAgdTE2IGNvZGUpCiYjNDM7ewomIzQzOwljb25zdCBpbnQgQlVGRl9TSVpFID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNOwomIzQzOwlzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmY7CiYjNDM7CWludCByZXQsIGxhc3Rfc3RhdHVzID0gLTE7CiYjNDM7CiYjNDM7CWJ1ZmYgPSBremFsbG9jX29ianMoKmJ1ZmYsIEJVRkZfU0laRSk7CiYjNDM7CWlmICghYnVmZikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlyZXQgPSBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoaHcsIGJ1ZmYsIEJVRkZfU0laRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGZyZWVfYnVmZjsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBCVUZGX1NJWkUgJmFtcDsmYW1wOyBidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAobGUxNl90b19jcHUoYnVmZltpXS5oZWFsdGhfc3RhdHVzX2NvZGUpID09IGNvZGUpCiYjNDM7CQkJbGFzdF9zdGF0dXMgPSBpOwomIzQzOwomIzQzOwlpZiAobGFzdF9zdGF0dXMgJmd0Oz0gMCkKJiM0MzsJCW1lbWNweShvdXQsICZhbXA7YnVmZltsYXN0X3N0YXR1c10sIHNpemVvZigqb3V0KSk7CiYjNDM7CWVsc2UKJiM0MzsJCW1lbXNldChvdXQsIDAsIHNpemVvZigqb3V0KSk7CiYjNDM7CiYjNDM7ZnJlZV9idWZmOgomIzQzOwlrZnJlZShidWZmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9hcV9zZXRfaGVhbHRoX3N0YXR1c19jZmcgLSBDb25maWd1cmUgRlcgaGVhbHRoIGV2ZW50cwogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oCmluZGV4IDlmNTM0NDIxMjE5NTUuLjUxMDM2MTg4Y2QzOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaApAQCAtMTYyLDYgJiM0MzsxNjIsNyBAQCBpY2VfYXFfZ2V0X3BoeV9jYXBzKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBxdWFsX21vZHMsIHU4IHJlcG9ydF9tb2RlLAogYm9vbCBpY2VfaXNfcGh5X3JjbGtfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7CiBib29sIGljZV9pc19jbG9ja19tdXhfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7CiBib29sIGljZV9pc19jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7CiYjNDM7Ym9vbCBpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTsKIGJvb2wgaWNlX2lzX2dwc19pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTsKIGludAogaWNlX2FxX2dldF9uZXRsaXN0X25vZGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfYXFjX2dldF9saW5rX3RvcG8gKmNtZCwKQEAgLTE4OCw2ICYjNDM7MTg5LDEzIEBAIGljZV9nZXRfbGlua19kZWZhdWx0X292ZXJyaWRlKHN0cnVjdCBpY2VfbGlua19kZWZhdWx0X292ZXJyaWRlX3RsdiAqbGRvLAogCQkJICAgICAgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpKTsKIGJvb2wgaWNlX2lzX3BoeV9jYXBzX2FuX2VuYWJsZWQoc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHMpOwogYm9vbCBpY2VfaXNfZndfaGVhbHRoX3JlcG9ydF9zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcpOwomIzQzO2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsCiYjNDM7CQkJICAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsIGludCBudW0pOwomIzQzO2ludCBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IGNvZGUsCiYjNDM7CQkJCQlib29sICpzdXBwb3J0ZWQpOwomIzQzO2ludCBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKHN0cnVjdCBpY2VfaHcgKmh3LAomIzQzOwkJCQkgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpvdXQsCiYjNDM7CQkJCSAgICB1MTYgY29kZSk7CiBpbnQgaWNlX2FxX3NldF9oZWFsdGhfc3RhdHVzX2NmZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggZXZlbnRfc291cmNlKTsKIGludCBpY2VfYXFfZ2V0X3BoeV9lcXVhbGl6YXRpb24oc3RydWN0IGljZV9odyAqaHcsIHUxNiBkYXRhX2luLCB1MTYgb3BfY29kZSwKIAkJCQl1OCBzZXJkZXNfbnVtLCBpbnQgKm91dHB1dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuYwppbmRleCBhMTBjMWM4ZDg2OTc3Li5iYjVjYzBhMmJhNjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmMKQEAgLTg3Miw3ICYjNDM7ODcyLDcgQEAgc3RhdGljIGludCBpY2VfZGNibmxfZGVsYXBwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBkY2JfYXBwICphcHApCiAJaW50IHJldCA9IDA7CiAKIAlpZiAocGYtJmd0O2RjYnhfY2FwICZhbXA7IERDQl9DQVBfRENCWF9MTERfTUFOQUdFRCkgewotCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtjYW4mIzM5O3QgZGVsZXRlIERTQ1AgbmV0bGluayBhcHAgd2hlbiBGVyBEQ0IgYWdlbnQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtjYW4mIzM5O3QgZGVsZXRlIERTQ1AgbmV0bGluayBhcHAgd2hlbiBGVyBEQ0IgYWdlbnQgaXMgYWN0aXZlXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYwppbmRleCA4NWE3NGNkNmVhMWYzLi4xY2ExMzdmNjdkZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYwpAQCAtMTksNiAmIzQzOzE5LDggQEAKICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfU0ZQCQk0CiAjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9JTlBVVF9CQVNFX1FTRlAJCTYKICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX09VVFBVVF9CQVNFCQkwCiYjNDM7I2RlZmluZSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRAkJMQomIzQzOyNkZWZpbmUgSUNFX0RQTExfSEVBTFRIX1NUQVRVU19VTkxPQ0tFRAkJMAogCiAjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMF9QSU5fSURYCQkwCiAjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMV9QSU5fSURYCQkxCkBAIC04OSw2ICYjNDM7OTEsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2VzeW5jX3JhbmdlW10gPSB7CiAJRFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkW10gPSB7CiYjNDM7CURQTExfUElOX0ZSRVFVRU5DWV8xUFBTLAomIzQzO307CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX2lzX3N3X3BpbiAtIGNoZWNrIGlmIGdpdmVuIHBpbiBzaGFsbCBiZSBjb250cm9sbGVkIGJ5IFNXCiAgKiBAcGY6IHByaXZhdGUgYm9hcmQgc3RydWN0dXJlCkBAIC0xMDk4LDkgJiM0MzsxMTA0LDExIEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LAogCQlyZXR1cm4gLUVCVVNZOwogCiAJbXV0ZXhfbG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKLQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwLCBwaW5fdHlwZSwgZXh0YWNrKTsKLQlpZiAocmV0KQotCQlnb3RvIHVubG9jazsKJiM0MzsJaWYgKCFwZi0mZ3Q7ZHBsbHMudW5tYW5hZ2VkKSB7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwLCBwaW5fdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CX0KIAlpZiAocGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQgfHwKIAkgICAgcGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUKQogCQkqc3RhdGUgPSBwLSZndDtzdGF0ZVtkLSZndDtkcGxsX2lkeF07CkBAIC0yMjQzLDkgJiM0MzsyMjUxLDE0IEBAIGljZV9kcGxsX2lucHV0X2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLQllc3luYy0mZ3Q7cmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2U7Ci0JZXN5bmMtJmd0O3JhbmdlX251bSA9IEFSUkFZX1NJWkUoaWNlX2VzeW5jX3JhbmdlKTsKLQlpZiAocC0mZ3Q7ZmxhZ3NbMF0gJmFtcDsgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOKSB7CiYjNDM7CWlmIChwZi0mZ3Q7ZHBsbHMudW5tYW5hZ2VkKSB7CiYjNDM7CQllc3luYy0mZ3Q7cmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkOwomIzQzOwkJZXN5bmMtJmd0O3JhbmdlX251bSA9IEFSUkFZX1NJWkUoaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllc3luYy0mZ3Q7cmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2U7CiYjNDM7CQllc3luYy0mZ3Q7cmFuZ2VfbnVtID0gQVJSQVlfU0laRShpY2VfZXN5bmNfcmFuZ2UpOwomIzQzOwl9CiYjNDM7CWlmIChwLSZndDtmbGFnc1swXSAmYW1wOyBJQ0VfRFBMTF9JTl9FU1lOQ19FTkFCTEVEKSB7CiAJCWVzeW5jLSZndDtmcmVxID0gRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFo7CiAJCWVzeW5jLSZndDtwdWxzZSA9IElDRV9EUExMX1BJTl9FU1lOQ19QVUxTRV9ISUdIX1BFUkNFTlQ7CiAJfSBlbHNlIHsKQEAgLTI4NzYsNiAmIzQzOzI4ODksMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgaWNlX2RwbGxfb3V0cHV0X29wcyA9IHsKIAkuZXN5bmNfZ2V0ID0gaWNlX2RwbGxfb3V0cHV0X2VzeW5jX2dldCwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzID0gewomIzQzOwkuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX2lucHV0X2ZyZXF1ZW5jeV9nZXQsCiYjNDM7CS5kaXJlY3Rpb25fZ2V0ID0gaWNlX2RwbGxfaW5wdXRfZGlyZWN0aW9uLAomIzQzOwkuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQsCiYjNDM7CS5lc3luY19nZXQgPSBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyA9IHsKJiM0MzsJLmZyZXF1ZW5jeV9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfZnJlcXVlbmN5X2dldCwKJiM0MzsJLmRpcmVjdGlvbl9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfZGlyZWN0aW9uLAomIzQzOwkuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfc3RhdGVfZ2V0LAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyBpY2VfZHBsbF9vcHMgPSB7CiAJLmxvY2tfc3RhdHVzX2dldCA9IGljZV9kcGxsX2xvY2tfc3RhdHVzX2dldCwKIAkubW9kZV9nZXQgPSBpY2VfZHBsbF9tb2RlX2dldCwKQEAgLTM0MzksOCAmIzQzOzM0NjUsMTAgQEAgaWNlX2RwbGxfZGVpbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSwKIAkJCSAgICBzdHJ1Y3QgZHBsbF9kZXZpY2UgKnNlY29uZCkKIHsKIAlpZiAoY2d1KSB7Ci0JCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7Ci0JCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpOwomIzQzOwkJaWYgKGZpcnN0KQomIzQzOwkJCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7CiYjNDM7CQlpZiAoc2Vjb25kKQomIzQzOwkJCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpOwogCX0KIAlpY2VfZHBsbF9yZWxlYXNlX3BpbnMocGlucywgY291bnQpOwogfQpAQCAtMzQ3MiwxMiAmIzQzOzM1MDAsMTUgQEAgaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsCiAJaW50IHJldDsKIAogCXJldCA9IGljZV9kcGxsX2dldF9waW5zKHBmLCBwaW5zLCBzdGFydF9pZHgsIGNvdW50LCBwZi0mZ3Q7ZHBsbHMuY2xvY2tfaWQpOwotCWlmIChyZXQpCiYjNDM7CWlmICghY2d1IHx8IHJldCkKIAkJcmV0dXJuIHJldDsKLQlpZiAoY2d1KSB7CiYjNDM7CiYjNDM7CWlmIChmaXJzdCkgewogCQlyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gcmVsZWFzZV9waW5zOwomIzQzOwl9CiYjNDM7CWlmIChzZWNvbmQpIHsKIAkJcmV0ID0gaWNlX2RwbGxfcmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpOwogCQlpZiAocmV0KQogCQkJZ290byB1bnJlZ2lzdGVyX2ZpcnN0OwpAQCAtMzQ4Niw3ICYjNDM7MzUxNyw4IEBAIGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LAogCXJldHVybiAwOwogCiB1bnJlZ2lzdGVyX2ZpcnN0OgotCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7CiYjNDM7CWlmIChmaXJzdCkKJiM0MzsJCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7CiByZWxlYXNlX3BpbnM6CiAJaWNlX2RwbGxfcmVsZWFzZV9waW5zKHBpbnMsIGNvdW50KTsKIAlyZXR1cm4gcmV0OwpAQCAtMzgyNCw2ICYjNDM7Mzg1NiwxOCBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpCiAJc3RydWN0IGljZV9kcGxsICpkZSA9ICZhbXA7ZC0mZ3Q7ZWVjOwogCXN0cnVjdCBpY2VfZHBsbCAqZHAgPSAmYW1wO2QtJmd0O3BwczsKIAomIzQzOwlpZiAoZC0mZ3Q7dW5tYW5hZ2VkKSB7CiYjNDM7CQlpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtJmd0O2RwbGwsIGlucHV0cywKJiM0MzsJCQkJCSAmYW1wO2ljZV9kcGxsX2lucHV0X3VubWFuYWdlZF9vcHMsCiYjNDM7CQkJCQkgbnVtX2lucHV0cyk7CiYjNDM7CQlpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtJmd0O2RwbGwsIG91dHB1dHMsCiYjNDM7CQkJCQkgJmFtcDtpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcywKJiM0MzsJCQkJCSBudW1fb3V0cHV0cyk7CiYjNDM7CQlpY2VfZHBsbF9yZWxlYXNlX3BpbnMoaW5wdXRzLCBudW1faW5wdXRzKTsKJiM0MzsJCWljZV9kcGxsX3JlbGVhc2VfcGlucyhvdXRwdXRzLCBudW1fb3V0cHV0cyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlpY2VfZHBsbF9kZWluaXRfcmNsa19waW4ocGYpOwogCWlmIChwZi0mZ3Q7aHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHsKIAkJaWNlX2RwbGxfZGVpbml0X3R4Y2xrX3BpbnMocGYpOwpAQCAtNDA4MiwyMyAmIzQzOzQxMjYsMjkgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KQogCWNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKmlucHV0X29wczsKIAlpbnQgcmV0LCBjb3VudDsKIAotCWlucHV0X29wcyA9ICZhbXA7aWNlX2RwbGxfaW5wdXRfb3BzOwotCW91dHB1dF9vcHMgPSAmYW1wO2ljZV9kcGxsX291dHB1dF9vcHM7CiYjNDM7CWlmICghcGYtJmd0O2RwbGxzLnVubWFuYWdlZCkgewomIzQzOwkJaW5wdXRfb3BzID0gJmFtcDtpY2VfZHBsbF9pbnB1dF9vcHM7CiYjNDM7CQlvdXRwdXRfb3BzID0gJmFtcDtpY2VfZHBsbF9vdXRwdXRfb3BzOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaW5wdXRfb3BzID0gJmFtcDtpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzOwomIzQzOwkJb3V0cHV0X29wcyA9ICZhbXA7aWNlX2RwbGxfb3V0cHV0X3VubWFuYWdlZF9vcHM7CiYjNDM7CX0KIAogCXJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtJmd0O2RwbGxzLmlucHV0cywgMCwKIAkJCQkJcGYtJmd0O2RwbGxzLm51bV9pbnB1dHMsIGlucHV0X29wcywKLQkJCQkJcGYtJmd0O2RwbGxzLmVlYy5kcGxsLAotCQkJCQlwZi0mZ3Q7ZHBsbHMucHBzLmRwbGwpOwomIzQzOwkJCQkJcGYtJmd0O2RwbGxzLmVlYy5kcGxsLCBwZi0mZ3Q7ZHBsbHMucHBzLmRwbGwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJY291bnQgPSBwZi0mZ3Q7ZHBsbHMubnVtX2lucHV0czsKLQlpZiAoY2d1KSB7CiYjNDM7CWlmIChjZ3UgfHwgcGYtJmd0O2RwbGxzLnVubWFuYWdlZCkgewogCQlyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLSZndDtkcGxscy5vdXRwdXRzLAogCQkJCQkJY291bnQsIHBmLSZndDtkcGxscy5udW1fb3V0cHV0cywKIAkJCQkJCW91dHB1dF9vcHMsIHBmLSZndDtkcGxscy5lZWMuZHBsbCwKIAkJCQkJCXBmLSZndDtkcGxscy5wcHMuZHBsbCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGRlaW5pdF9pbnB1dHM7CiYjNDM7CQlpZiAocGYtJmd0O2RwbGxzLnVubWFuYWdlZCkKJiM0MzsJCQlyZXR1cm4gMDsKIAkJY291bnQgJiM0Mzs9IHBmLSZndDtkcGxscy5udW1fb3V0cHV0czsKIAkJaWYgKCFwZi0mZ3Q7ZHBsbHMuZ2VuZXJpYykgewogCQkJcmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi0mZ3Q7ZHBsbHMuc21hLApAQCAtNDIwNiwxMiAmIzQzOzQyNTYsMTMgQEAgaWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LAogCQlyZXR1cm4gcmV0OwogCX0KIAlkLSZndDtwZiA9IHBmOwotCWlmIChjZ3UgfHwgcGYtJmd0O2h3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7CiYjNDM7CWlmIChjZ3UgfHwgcGYtJmd0O2RwbGxzLnVubWFuYWdlZCB8fAomIzQzOwkgICAgcGYtJmd0O2h3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7CiAJCWNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcyA9ICZhbXA7aWNlX2RwbGxfb3BzOwogCiAJCWlmICh0eXBlID09IERQTExfVFlQRV9QUFMgJmFtcDsmYW1wOyBpY2VfZHBsbF9pc19wcHNfcGhhc2VfbW9uaXRvcihwZikpCiAJCQlvcHMgPSAgJmFtcDtpY2VfZHBsbF9wb21fb3BzOwotCQlpZiAoY2d1KQomIzQzOwkJaWYgKGNndSAmYW1wOyZhbXA7ICFwZi0mZ3Q7ZHBsbHMudW5tYW5hZ2VkKQogCQkJaWNlX2RwbGxfdXBkYXRlX3N0YXRlKHBmLCBkLCB0cnVlKTsKIAkJcmV0ID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoZC0mZ3Q7ZHBsbCwgdHlwZSwgb3BzLCBkKTsKIAkJaWYgKHJldCkgewpAQCAtNDIzOSw2ICYjNDM7NDI5MCwzMyBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfd29ya2VyKHN0cnVjdCBpY2VfcGYgKnBmKQogCWt0aHJlYWRfZGVzdHJveV93b3JrZXIoZC0mZ3Q7a3dvcmtlcik7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9waW5fZnJlcV9pbmZvIC0gZmluZCBwaW4gZnJlcXVlbmN5IGZyb20gc3VwcG9ydGVkIG9uZXMKJiM0MzsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZQomIzQzOyAqIEBwaW5faWR4OiBwaW4gaW5kZXgKJiM0MzsgKiBAaW5wdXQ6IGlmIGlucHV0IHBpbgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyB0aHJvdWdoIHRoZSBhcnJheSBvZiBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMgZm9yIGEKJiM0MzsgKiBEUExMIHBpbiBhbmQgcmV0dXJucyBzaW5nbGUgZnJlcXVlbmN5IHBpbiBpcyBjYXBhYmxlLCBpZiBwaW4gc3VwcG9ydCBvbmx5CiYjNDM7ICogb25lIGZyZXF1ZW5jeS4gU2hhbGwgYmUgdXNlZCBvbmx5IGZvciBkcGxsIHdpdGggZHJpdmVyIGhhcmRjb2RlZCBmcmVxdWVuY3kuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwIC0gZmFpbHVyZSwgcGluIHVzZXMgbXVsdGlwbGUgZnJlcXVlbmNpZXMsCiYjNDM7ICogKiBmcmVxdWVuY3kgLSBzdWNjZXNzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1NjQgaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluX2lkeCwgYm9vbCBpbnB1dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKmZyZXFzOwomIzQzOwl1OCBmcmVxX251bTsKJiM0MzsKJiM0MzsJLyogR2V0IHN1cHBvcnRlZCBmcmVxdWVuY2llcyBmb3IgdGhpcyBwaW4gKi8KJiM0MzsJZnJlcXMgPSBpY2VfY2d1X2dldF9waW5fZnJlcV9zdXBwKGh3LCBwaW5faWR4LCBpbnB1dCwgJmFtcDtmcmVxX251bSk7CiYjNDM7CWlmICghZnJlcXMgfHwgZnJlcV9udW0gIT0gMSB8fCBmcmVxc1swXS5taW4gIT0gZnJlcXNbMF0ubWF4KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBmcmVxc1swXS5taW47CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyCiAgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC00Mzk4LDYgJiM0Mzs0NDc2LDE5IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwKIAkJcGluc1tpXS5wcm9wLmJvYXJkX2xhYmVsID0gaWNlX2NndV9nZXRfcGluX25hbWUoaHcsIGksIGlucHV0KTsKIAkJcGluc1tpXS5wcm9wLnR5cGUgPSBpY2VfY2d1X2dldF9waW5fdHlwZShodywgaSwgaW5wdXQpOwogCQlpZiAoaW5wdXQpIHsKJiM0MzsJCQlpZiAocGYtJmd0O2RwbGxzLnVubWFuYWdlZCkgewomIzQzOwkJCQlwaW5zW2ldLmZyZXEgPSBpY2VfZHBsbF9waW5fZnJlcV9pbmZvKGh3LCBpLAomIzQzOwkJCQkJCQkJICAgICAgaW5wdXQpOwomIzQzOwkJCQlwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOwomIzQzOwkJCQlwaW5zW2ldLnN0YXR1cyA9CiYjNDM7CQkJCQlJQ0VfQVFDX0dFVF9DR1VfSU5fQ0ZHX1NUQVRVU19FU1lOQ19DQVA7CiYjNDM7CQkJCXBpbnNbaV0uZmxhZ3NbMF0gPSBJQ0VfRFBMTF9JTl9FU1lOQ19FTkFCTEVEOwomIzQzOwkJCQkvKiBza2lwIHByaW9yaXR5LCBjYXBhYmlsaXRpZXMsIHBoYXNlIHJhbmdlLAomIzQzOwkJCQkgKiBwaW4gc3RhdGUgQVEgcXVlcnkgYW5kIGZyZXFfc3VwcG9ydGVkIC0KJiM0MzsJCQkJICogbm90IGF2YWlsYWJsZSBmb3IgdW5tYW5hZ2VkIERQTEwKJiM0MzsJCQkJICovCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCXJldCA9IGljZV9hcV9nZXRfY2d1X3JlZl9wcmlvKGh3LCBkZS0mZ3Q7ZHBsbF9pZHgsIGksCiAJCQkJCQkgICAgICAmYW1wO2RlLSZndDtpbnB1dF9wcmlvW2ldKTsKIAkJCWlmIChyZXQpCkBAIC00NDExLDYgJiM0Mzs0NTAyLDE2IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwKIAkJCWlmIChpY2VfZHBsbF9pc19zd19waW4ocGYsIGksIHRydWUpKQogCQkJCXBpbnNbaV0uaGlkZGVuID0gdHJ1ZTsKIAkJfSBlbHNlIHsKJiM0MzsJCQlpZiAocGYtJmd0O2RwbGxzLnVubWFuYWdlZCkgewomIzQzOwkJCQlwaW5zW2ldLmZyZXEgPSBpY2VfZHBsbF9waW5fZnJlcV9pbmZvKGh3LCBpLAomIzQzOwkJCQkJCQkJICAgICAgaW5wdXQpOwomIzQzOwkJCQlwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOwomIzQzOwkJCQkvKiBza2lwIG91dHB1dCBzdGF0ZSBjYXBzLCBwaGFzZSByYW5nZSwKJiM0MzsJCQkJICogcGluIHN0YXRlIEFRIHF1ZXJ5IGFuZCBmcmVxX3N1cHBvcnRlZCAtCiYjNDM7CQkJCSAqIG5vdCBhdmFpbGFibGUgZm9yIHVubWFuYWdlZCBEUExMCiYjNDM7CQkJCSAqLwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiAJCQlyZXQgPSBpY2VfY2d1X2dldF9vdXRwdXRfcGluX3N0YXRlX2NhcHMoaHcsIGksICZhbXA7Y2Fwcyk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CkBAIC00NDI4LDEwICYjNDM7NDUyOSwxMyBAQCBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsCiAJCXBpbnNbaV0ucHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtOwogCQlwaW5zW2ldLnBmID0gcGY7CiAJfQotCWlmIChpbnB1dCkKJiM0MzsJaWYgKGlucHV0ICZhbXA7JmFtcDsgIXBmLSZndDtkcGxscy51bm1hbmFnZWQpIHsKIAkJcmV0ID0gaWNlX2RwbGxfaW5pdF9yZWZfc3luY19pbnB1dHMocGYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC00NzEyLDYgJiM0Mzs0ODE2LDgyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjKHN0cnVjdCBpY2VfcGYgKnBmKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9sb2NrX3N0YXRlX2luaXRfdW5tYW5hZ2VkIC0gaW5pdGlhbGl6ZSBsb2NrIHN0YXRlIGZvciB1bm1hbmFnZWQgZHBsbAomIzQzOyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIEluaXRpYWxpemUgdGhlIGxvY2sgc3RhdGUgZm9yIHVubWFuYWdlZCBEUExMIGJ5IGNoZWNraW5nIGhlYWx0aCBzdGF0dXMuCiYjNDM7ICogRm9yIHVubWFuYWdlZCBEUExMLCB3ZSByZWx5IG9uIGhhcmR3YXJlIGF1dG9ub21vdXMgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAtIHN1Y2Nlc3MKJiM0MzsgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvbgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZikKJiM0Mzt7CiYjNDM7CXUxNiBjb2RlID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLOwomIzQzOwlzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gYnVmZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZSgmYW1wO3BmLSZndDtodywgJmFtcDtidWZmLCBjb2RlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChwZiwgJmFtcDtidWZmLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQgLSBpbml0IGRwbGwgaW5mb3JtYXRpb24gZm9yIHVubWFuYWdlZCBkcGxsCiYjNDM7ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogQWNxdWlyZSAoZnJvbSBIVykgYW5kIHNldCBiYXNpYyBkcGxsIGluZm9ybWF0aW9uIChvbiBwZi0mZ3Q7ZHBsbHMgc3RydWN0KS4KJiM0MzsgKiBGb3IgdW5tYW5hZ2VkIGRwbGwgbW9kZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgLSBzdWNjZXNzCiYjNDM7ICogKiBuZWdhdGl2ZSAtIGluaXQgZmFpbHVyZSByZWFzb24KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNlX2RwbGxzICpkID0gJmFtcDtwZi0mZ3Q7ZHBsbHM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWQtJmd0O2Nsb2NrX2lkID0gaWNlX2dlbmVyYXRlX2Nsb2NrX2lkKHBmKTsKJiM0MzsJZC0mZ3Q7bnVtX2lucHV0cyA9IGljZV9jZ3VfZ2V0X3Bpbl9udW0oJmFtcDtwZi0mZ3Q7aHcsIHRydWUpOwomIzQzOwlkLSZndDtudW1fb3V0cHV0cyA9IGljZV9jZ3VfZ2V0X3Bpbl9udW0oJmFtcDtwZi0mZ3Q7aHcsIGZhbHNlKTsKJiM0MzsJcmV0ID0gaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChwZik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlkLSZndDtpbnB1dHMgPSBremFsbG9jX29ianMoKmQtJmd0O2lucHV0cywgZC0mZ3Q7bnVtX2lucHV0cyk7CiYjNDM7CWlmICghZC0mZ3Q7aW5wdXRzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGRlaW5pdF9pbmZvOwomIzQzOwomIzQzOwlkLSZndDtvdXRwdXRzID0ga3phbGxvY19vYmpzKCpkLSZndDtvdXRwdXRzLCBkLSZndDtudW1fb3V0cHV0cyk7CiYjNDM7CWlmICghZC0mZ3Q7b3V0cHV0cykgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZGVpbml0X2luZm87CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGRlaW5pdF9pbmZvOwomIzQzOwomIzQzOwlkLSZndDtwcHMubW9kZSA9IERQTExfTU9ERV9NQU5VQUw7CiYjNDM7CWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7JXMgLSBzdWNjZXNzLCBpbnB1dHM6JXUsIG91dHB1dHM6JXVcbiYjMzQ7LAomIzQzOwkJX19mdW5jX18sIGQtJmd0O251bV9pbnB1dHMsIGQtJmd0O251bV9vdXRwdXRzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZGVpbml0X2luZm86CiYjNDM7CWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7JXMgLSBmYWlsOiBkLSZndDtpbnB1dHM6JXAsIGQtJmd0O291dHB1dHM6JXBcbiYjMzQ7LAomIzQzOwkJX19mdW5jX18sIGQtJmd0O2lucHV0cywgZC0mZ3Q7b3V0cHV0cyk7CiYjNDM7CWljZV9kcGxsX2RlaW5pdF9pbmZvKHBmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX2luaXRfaW5mbyAtIHByZXBhcmUgcGYmIzM5O3MgZHBsbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTQ4MTUsNiAmIzQzOzQ5OTUsNDIgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm8oc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQgLSBkZXRlcm1pbmUgbG9jayBzdGF0ZSBmcm9tIGhlYWx0aCBzdGF0dXMKJiM0MzsgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICogQGJ1ZmY6IGhlYWx0aCBzdGF0dXMgYnVmZmVyCiYjNDM7ICogQG5vdGlmeTogaWYgdHJ1ZSwgbm90aWZ5IGRwbGwgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBTZXQgdW5tYW5hZ2VkIGRwbGwgbG9jayBzdGF0ZSBiYXNlZCBvbiBoZWFsdGggc3RhdHVzIGNvZGUgYW5kIGludGVybmFsIGRhdGEuCiYjNDM7ICogQ29udGV4dDogQWNxdWlyZXMgYW5kIHJlbGVhc2VzIHBmLSZndDtkcGxscy5sb2NrIChtdXN0IHJlbGVhc2UgYmVmb3JlIG5vdGlmeQomIzQzOyAqIGlmIGNhbGxlZCkuCiYjNDM7ICovCiYjNDM7dm9pZCBpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsCiYjNDM7CQkJCSAgICAgICBib29sIG5vdGlmeSkKJiM0Mzt7CiYjNDM7CXUzMiBpbnRlcm5hbF9kYXRhID0gbGUzMl90b19jcHUoYnVmZi0mZ3Q7aW50ZXJuYWxfZGF0YTEpOwomIzQzOwlzdHJ1Y3QgaWNlX2RwbGwgKmQgPSAmYW1wO3BmLSZndDtkcGxscy5wcHM7CiYjNDM7CiYjNDM7CWlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwomIzQzOwlpZiAoYnVmZi0mZ3Q7aGVhbHRoX3N0YXR1c19jb2RlID09IDAgfHwKJiM0MzsJICAgIGludGVybmFsX2RhdGEgPT0gSUNFX0RQTExfSEVBTFRIX1NUQVRVU19MT0NLRUQpCiYjNDM7CQlkLSZndDtkcGxsX3N0YXRlID0gRFBMTF9MT0NLX1NUQVRVU19MT0NLRUQ7CiYjNDM7CWVsc2UKJiM0MzsJCWQtJmd0O2RwbGxfc3RhdGUgPSBEUExMX0xPQ0tfU1RBVFVTX1VOTE9DS0VEOwomIzQzOwomIzQzOwlpZiAoZC0mZ3Q7cHJldl9kcGxsX3N0YXRlID09IGQtJmd0O2RwbGxfc3RhdGUpCiYjNDM7CQlub3RpZnkgPSBmYWxzZTsKJiM0MzsJZWxzZQomIzQzOwkJZC0mZ3Q7cHJldl9kcGxsX3N0YXRlID0gZC0mZ3Q7ZHBsbF9zdGF0ZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwomIzQzOwlpZiAobm90aWZ5ICZhbXA7JmFtcDsgZC0mZ3Q7ZHBsbCkKJiM0MzsJCWRwbGxfZGV2aWNlX2NoYW5nZV9udGYoZC0mZ3Q7ZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfZHBsbF9kZWluaXQgLSBEaXNhYmxlIHRoZSBkcml2ZXIvSFcgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW0KICAqIHRoZSBkcGxsIGRldmljZS4KQEAgLTQ4NTQsOSAmIzQzOzUwNzAsMTAgQEAgdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpCiAJaWYgKHBmLSZndDtody5tYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSkKIAkJY2FuY2VsX3dvcmtfc3luYygmYW1wO3BmLSZndDtkcGxscy50eGNsa193b3JrKTsKIAotCWljZV9kcGxsX2RlaW5pdF9waW5zKHBmLCBjZ3UpOwomIzQzOwlpY2VfZHBsbF9kZWluaXRfcGlucyhwZiwgY2d1IHx8IHBmLSZndDtkcGxscy51bm1hbmFnZWQpOwogCWlmICghSVNfRVJSX09SX05VTEwocGYtJmd0O2RwbGxzLnBwcy5kcGxsKSkKLQkJaWNlX2RwbGxfZGVpbml0X2RwbGwocGYsICZhbXA7cGYtJmd0O2RwbGxzLnBwcywgY2d1KTsKJiM0MzsJCWljZV9kcGxsX2RlaW5pdF9kcGxsKHBmLCAmYW1wO3BmLSZndDtkcGxscy5wcHMsCiYjNDM7CQkJCSAgICAgY2d1IHx8IHBmLSZndDtkcGxscy51bm1hbmFnZWQpOwogCWlmICghSVNfRVJSX09SX05VTEwocGYtJmd0O2RwbGxzLmVlYy5kcGxsKSkKIAkJaWNlX2RwbGxfZGVpbml0X2RwbGwocGYsICZhbXA7cGYtJmd0O2RwbGxzLmVlYywgY2d1KTsKIAlpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLSZndDtkcGxscy50eGMuZHBsbCkpCkBAIC00ODY2LDYgJiM0Mzs1MDgzLDQ1IEBAIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKQogCW11dGV4X2Rlc3Ryb3koJmFtcDtwZi0mZ3Q7ZHBsbHMubG9jayk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9pbml0X3VubWFuYWdlZCAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgdW5tYW5hZ2VkIGRwbGwgc3Vic3lzdGVtCiYjNDM7ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogU2V0IHVwIHRoZSBkZXZpY2UgZHBsbHMgZm9yIHVubWFuYWdlZCBtb2RlLCByZWdpc3RlciB0aGVtIGFuZCBwaW5zIGNvbm5lY3RlZAomIzQzOyAqIHdpdGhpbiBMaW51eCBkcGxsIHN1YnN5c3RlbS4gQWxsb3cgdXNlcnNwYWNlIHRvIG9idGFpbiBzdGF0ZSBvZiBEUExMLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogSW5pdGlhbGl6ZXMgcGYtJmd0O2RwbGxzLmxvY2sgbXV0ZXguCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNlX2RwbGxzICpkID0gJmFtcDtwZi0mZ3Q7ZHBsbHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZC0mZ3Q7bG9jayk7CiYjNDM7CWVyciA9IGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQocGYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZXhpdDsKJiM0MzsJZXJyID0gaWNlX2RwbGxfaW5pdF9kcGxsKHBmLCAmYW1wO3BmLSZndDtkcGxscy5wcHMsIHRydWUsIERQTExfVFlQRV9QUFMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBkZWluaXRfaW5mbzsKJiM0MzsJZXJyID0gaWNlX2RwbGxfaW5pdF9waW5zKHBmLCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVpbml0X3BwczsKJiM0MzsJc2V0X2JpdChJQ0VfRkxBR19EUExMLCBwZi0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7ZGVpbml0X3BwczoKJiM0MzsJaWNlX2RwbGxfZGVpbml0X2RwbGwocGYsICZhbXA7cGYtJmd0O2RwbGxzLnBwcywgdHJ1ZSk7CiYjNDM7ZGVpbml0X2luZm86CiYjNDM7CWljZV9kcGxsX2RlaW5pdF9pbmZvKHBmKTsKJiM0MztlcnJfZXhpdDoKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2QtJmd0O2xvY2spOwomIzQzOwlkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtEUExMcyBpbml0IGZhaWx1cmUgZXJyOiVkXG4mIzM0OywgZXJyKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX2luaXRfZTgyNSAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW0KICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTQ5NzUsOCAmIzQzOzUyMzEsMjMgQEAgc3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF9lODEwKHN0cnVjdCBpY2VfcGYgKnBmKQogCWRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCAmIzM0O0RQTExzIGluaXQgZmFpbHVyZSBlcnI6JWRcbiYjMzQ7LCBlcnIpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWNlX2RwbGxfaW5pdCAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW0KJiM0MzsgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBTZXQgdXAgdGhlIGRldmljZSBkcGxscywgcmVnaXN0ZXIgdGhlbSBhbmQgcGlucyBjb25uZWN0ZWQgd2l0aGluIExpbnV4IGRwbGwKJiM0MzsgKiBzdWJzeXN0ZW0uIEFsbG93IHVzZXJzcGFjZSB0byBvYnRhaW4gc3RhdGUgb2YgRFBMTCBhbmQgaGFuZGxpbmcgb2YgRFBMTAomIzQzOyAqIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi0mZ3Q7ZHBsbHMubG9jayBtdXRleC4KJiM0MzsgKi8KIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikKIHsKJiM0MzsJaWYgKHBmLSZndDtkcGxscy51bm1hbmFnZWQpIHsKJiM0MzsJCWljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHBmKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAocGYtJmd0O2h3Lm1hY190eXBlKSB7CiAJY2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNToKIAkJaWNlX2RwbGxfaW5pdF9lODI1KHBmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgKaW5kZXggMTAzYmEzZTQ5MDY4Mi4uYzU5ZDc0NmE4NTY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgKQEAgLTI2LDYgJiM0MzsyNiw4IEBACiAjZGVmaW5lIElDRV9DR1VfUjExX1NZTkNFX1NfQllQX0NMSwlHRU5NQVNLKDYsIDEpCiAKICNkZWZpbmUgSUNFX0NHVV9CWVBBU1NfTVVYX09GRlNFVF9FODI1QwkzCiYjNDM7I2RlZmluZSBJQ0VfRFBMTF9VTk1BTkFHRURfUElOX05VTQk0CiYjNDM7I2RlZmluZSBJQ0VfRFBMTF9JTl9FU1lOQ19FTkFCTEVECUlDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9FU1lOQ19FTgogCiAvKioKICAqIGVudW0gaWNlX2RwbGxfcGluX3N3IC0gZW51bWVyYXRlIGljZSBzb2Z0d2FyZSBwaW4gaW5kaWNlczoKQEAgLTE5Myw2ICYjNDM7MTk1LDcgQEAgc3RydWN0IGljZV9kcGxscyB7CiAJczMyIG91dHB1dF9waGFzZV9hZGpfbWF4OwogCXUzMiBwZXJpb2RpY19jb3VudGVyOwogCWJvb2wgZ2VuZXJpYzsKJiM0MzsJYm9vbCB1bm1hbmFnZWQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4Y2xrX3dvcms7CiAJYm9vbCB0eGNsa19zd2l0Y2hfcmVxdWVzdGVkOwogCXN0cnVjdCByd19zZW1hcGhvcmUgdHhjbGtfbm90aWZ5X3J3c2VtOwpAQCAtMjAxLDkgJiM0MzsyMDQsMTYgQEAgc3RydWN0IGljZV9kcGxscyB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUFRQXzE1ODhfQ0xPQ0spCiB2b2lkIGljZV9kcGxsX2luaXQoc3RydWN0IGljZV9wZiAqcGYpOwogdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpOwomIzQzO3ZvaWQgaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLAomIzQzOwkJCQkgICAgICAgYm9vbCBub3RpZnkpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfZHBsbF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZAomIzQzO2ljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZiwKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsCiYjNDM7CQkJCSAgYm9vbCBub3RpZnkpIHsgfQogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKaW5kZXggOGNkYzRmZGE4OWU5Ny4uZmM5ZDRlMGZhNzU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jCkBAIC0xNDE1LDYgJiM0MzsxNDE1LDEwIEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9hbGxvY19yaW5ncyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQkJc2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwgcmluZy0mZ3Q7ZmxhZ3MpOwogCQllbHNlCiAJCQlzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CQlpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpKQomIzQzOwkJCXNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfR0NTLCByaW5nLSZndDtmbGFncyk7CiYjNDM7CiAJCVdSSVRFX09OQ0UodnNpLSZndDt0eF9yaW5nc1tpXSwgcmluZyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCmluZGV4IGQ4ODgzNTQ4MmQzYWEuLmZlZmJjNTFjNzE5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC0zNDI4LDcgJiM0MzszNDI4LDcgQEAgc3RhdGljIGludCBpY2VfcmVxX2lycV9tc2l4X21pc2Moc3RydWN0IGljZV9wZiAqcGYpCiAJCSAgICAgKChwZi0mZ3Q7bGxfdHNfaXJxLmluZGV4ICYjNDM7IHBmX2ludHJfc3RhcnRfb2Zmc2V0KSAmYW1wOwogCQkgICAgICBQRklOVF9TQl9DVExfTVNJWF9JTkRYX00pIHwgUEZJTlRfU0JfQ1RMX0NBVVNFX0VOQV9NKTsKIAl3cjMyKGh3LCBHTElOVF9JVFIoSUNFX1JYX0lUUiwgcGYtJmd0O29pY3JfaXJxLmluZGV4KSwKLQkgICAgIElUUl9SRUdfQUxJR04oSUNFX0lUUl84SykgJmd0OyZndDsgSUNFX0lUUl9HUkFOX1MpOwomIzQzOwkgICAgIElUUl9SRUdfQUxJR04oSUNFX0lUUl8yMEspICZndDsmZ3Q7IElDRV9JVFJfR1JBTl9TKTsKIAogCWljZV9mbHVzaChodyk7CiAJaWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7CkBAIC0zNDkxLDkgJiM0MzszNDkxLDggQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQkJTkVUSUZfRl9SWEhBU0g7CiAKIAljc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNCSAgfAotCQkJIE5FVElGX0ZfSVBfQ1NVTSAgfAogCQkJIE5FVElGX0ZfU0NUUF9DUkMgfAotCQkJIE5FVElGX0ZfSVBWNl9DU1VNOwomIzQzOwkJCSBORVRJRl9GX0hXX0NTVU07CiAKIAl2bGFub19mZWF0dXJlcyA9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUiB8CiAJCQkgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggICAgIHwKQEAgLTM1NTUsMTIgJiM0MzszNTU0LDYgQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCS8qIEFsbG93IGNvcmUgdG8gbWFuYWdlIElSUXMgYWZmaW5pdHkgKi8KIAluZXRpZl9zZXRfYWZmaW5pdHlfYXV0byhuZXRkZXYpOwogCi0JLyogTXV0dWFsIGV4Y2x1c2l2aXR5IGZvciBUU08gYW5kIEdDUyBpcyBlbmZvcmNlZCBieSB0aGUgc2V0IGZlYXR1cmVzCi0JICogbmRvIGNhbGxiYWNrLgotCSAqLwotCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpCi0JCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCiAJbmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShuZXRkZXYsIElDRV9NQVhfVFNPX1NJWkUpOwogfQogCkBAIC00NzIwLDcgJiM0Mzs0NzEzLDkgQEAgdm9pZCBpY2VfZGVpbml0X2RldihzdHJ1Y3QgaWNlX3BmICpwZikKIAogc3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpCiB7CiYjNDM7CXUxNiBjb2RlID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpOwomIzQzOwlpbnQgZXJyOwogCiAJaWYgKGljZV9pc19zYWZlX21vZGUocGYpKQogCQlyZXR1cm47CkBAIC00NzMyLDggJiM0Mzs0NzI3LDE1IEBAIHN0YXRpYyB2b2lkIGljZV9pbml0X2ZlYXR1cmVzKHN0cnVjdCBpY2VfcGYgKnBmKQogCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dOU1MpKQogCQlpY2VfZ25zc19pbml0KHBmKTsKIAomIzQzOwkvKiBJbml0aWFsaXplIHVubWFuYWdlZCBEUExMIGRldGVjdGlvbiAqLwomIzQzOwllcnIgPSBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZCgmYW1wO3BmLSZndDtodywgY29kZSwKJiM0MzsJCQkJCQkgICZhbXA7cGYtJmd0O2RwbGxzLnVubWFuYWdlZCk7CiYjNDM7CWlmIChlcnIgfHwgIWljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3QoJmFtcDtwZi0mZ3Q7aHcpKQomIzQzOwkJcGYtJmd0O2RwbGxzLnVubWFuYWdlZCA9IGZhbHNlOwomIzQzOwogCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0NHVSkgfHwKLQkgICAgaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9QSFlfUkNMSykpCiYjNDM7CSAgICBpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX1BIWV9SQ0xLKSB8fAomIzQzOwkgICAgcGYtJmd0O2RwbGxzLnVubWFuYWdlZCkKIAkJaWNlX2RwbGxfaW5pdChwZik7CiAKIAkvKiBOb3RlOiBGbG93IGRpcmVjdG9yIGluaXQgZmFpbHVyZSBpcyBub24tZmF0YWwgdG8gbG9hZCAqLwpAQCAtNjUxMCwxOCAmIzQzOzY1MTIsNiBAQCBpY2Vfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfTE9PUEJBQ0spCiAJCXJldCA9IGljZV9zZXRfbG9vcGJhY2sodnNpLCAhIShmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0xPT1BCQUNLKSk7CiAKLQkvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTCi0JICogKE5FVElGX0ZfSFdfQ1NVTSkgaXMgbm90IHN1cHBvcnRlZC4KLQkgKi8KLQlpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpICZhbXA7JmFtcDsKLQkgICAgKChmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX0NTVU0pICZhbXA7JmFtcDsgKGZlYXR1cmVzICZhbXA7IE5FVElGX0ZfQUxMX1RTTykpKSB7Ci0JCWlmIChuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfQ1NVTSkKLQkJCWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VG8gZW5hYmxlIFRTTywgeW91IG11c3QgZmlyc3QgZGlzYWJsZSBIVyBjaGVja3N1bS5cbiYjMzQ7KTsKLQkJZWxzZQotCQkJZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtUbyBlbmFibGUgSFcgY2hlY2tzdW0sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgVFNPLlxuJiMzNDspOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwppbmRleCBlYWVjMzZhYjZhZTNmLi5lODM5MmVjNGYxMzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMKQEAgLTIzMjcsNiAmIzQzOzIzMjcsOCBAQCB1NjQgaWNlX3B0cF9nZXRfcnhfaHd0cyhjb25zdCB1bmlvbiBpY2VfMzJiX3J4X2ZsZXhfZGVzYyAqcnhfZGVzYywKIAl0c19oaWdoID0gbGUzMl90b19jcHUocnhfZGVzYy0mZ3Q7d2IuZmxleF90cy50c19oaWdoKTsKIAl0c19ucyA9IGljZV9wdHBfZXh0ZW5kXzMyYl90cyhjYWNoZWRfdGltZSwgdHNfaGlnaCk7CiAKJiM0MzsJaWNlX3RyYWNlKHJ4X2h3dHN0YW1wLCBjYWNoZWRfdGltZSwgdHNfaGlnaCwgdHNfbnMpOwomIzQzOwogCXJldHVybiB0c19uczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKaW5kZXggOGU1Zjk3ODM1OTU0Yy4uZjkwNTEwNGY5NWQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCkBAIC0yMCw2ICYjNDM7MjAsMTAgQEAgc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xMF9taHpbXSA9IHsKIAlEUExMX1BJTl9GUkVRVUVOQ1lfMTBNSFosCiB9OwogCiYjNDM7c3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xNTZfMjVtaHpbXSA9IHsKJiM0MzsJRFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDE1NjI1MDAwMCwgMTU2MjUwMDAwKSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODEwdF9zZnBfY2d1X2lucHV0c1tdID0gewogCXsgJiMzNDtDVkwtU0RQMjImIzM0OywJICBaTF9SRUYwUCwgRFBMTF9QSU5fVFlQRV9JTlRfT1NDSUxMQVRPUiwKIAkJQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxX2NvbW1vbiksIGljZV9jZ3VfcGluX2ZyZXFfY29tbW9uIH0sCkBAIC0xMzEsNiAmIzQzOzEzNSwxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MjNfemxfY2d1X291dHB1dHNbXSA9IHsKIAl7ICYjMzQ7Tk9ORSYjMzQ7LAkgICBaTF9PVVQ1LCAwLCAwIH0sCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHNbXSA9IHsKJiM0MzsJeyAmIzM0OzE1ODgtVElNRV9TWU5DJiMzNDssIDAsIERQTExfUElOX1RZUEVfRVhULAomIzQzOwkgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xMF9taHopLCBpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODMwX3VubWFuYWdlZF9vdXRwdXRzW10gPSB7CiYjNDM7CXsgJiMzNDtNQUMtUEhZLUNMSyYjMzQ7LCAwLCBEUExMX1BJTl9UWVBFX1NZTkNFX0VUSF9QT1JULAomIzQzOwkgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xNTZfMjVtaHopLCBpY2VfY2d1X3Bpbl9mcmVxXzE1Nl8yNW1oeiB9LAomIzQzOwl7ICYjMzQ7MTU4OC1USU1FX1JFRiYjMzQ7LCAxLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLAomIzQzOwkgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xX2h6KSwgaWNlX2NndV9waW5fZnJlcV8xX2h6fSwKJiM0Mzt9OwomIzQzOwogLyogTG93IGxldmVsIGZ1bmN0aW9ucyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhbmQgbWFuYWdpbmcgdGhlIGRldmljZSBjbG9jayB1c2VkCiAgKiBmb3IgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sLgogICoKQEAgLTU5NzksNiAmIzQzOzU5OTUsMjQgQEAgaWNlX2NndV9nZXRfcGluX2Rlc2Moc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQsIGludCAqc2l6ZSkKIAljYXNlIElDRV9ERVZfSURfRTgyM0NfU0dNSUk6CiAJCXQgPSBpY2VfY2d1X2dldF9waW5fZGVzY19lODIzKGh3LCBpbnB1dCwgc2l6ZSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIElDRV9ERVZfSURfRTgzMENDX0JBQ0tQTEFORToKJiM0MzsJY2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19RU0ZQNTY6CiYjNDM7CWNhc2UgSUNFX0RFVl9JRF9FODMwQ0NfU0ZQOgomIzQzOwljYXNlIElDRV9ERVZfSURfRTgzMENDX1NGUF9ERDoKJiM0MzsJY2FzZSBJQ0VfREVWX0lEX0U4MzBDX0JBQ0tQTEFORToKJiM0MzsJY2FzZSBJQ0VfREVWX0lEX0U4MzBDX1FTRlA6CiYjNDM7CWNhc2UgSUNFX0RFVl9JRF9FODMwQ19TRlA6CiYjNDM7CWNhc2UgSUNFX0RFVl9JRF9FODMwX1hYVl9CQUNLUExBTkU6CiYjNDM7CWNhc2UgSUNFX0RFVl9JRF9FODMwX1hYVl9RU0ZQOgomIzQzOwljYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfU0ZQOgomIzQzOwkJaWYgKGlucHV0KSB7CiYjNDM7CQkJdCA9IGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHM7CiYjNDM7CQkJKnNpemUgPSBBUlJBWV9TSVpFKGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHMpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl0ID0gaWNlX2U4MzBfdW5tYW5hZ2VkX291dHB1dHM7CiYjNDM7CQkJKnNpemUgPSBBUlJBWV9TSVpFKGljZV9lODMwX3VubWFuYWdlZF9vdXRwdXRzKTsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTYwMDUsNiAmIzQzOzYwMzksMTggQEAgaW50IGljZV9jZ3VfZ2V0X251bV9waW5zKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWNlX2NndV9nZXRfcGluX251bSAtIGdldCBwaW4gZGVzY3JpcHRpb24gYXJyYXkgc2l6ZQomIzQzOyAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0CiYjNDM7ICogQGlucHV0OiBpZiByZXF1ZXN0IGlzIGRvbmUgYWdhaW5zdCBpbnB1dCBvciBvdXRwdXQgcGlucwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBzaXplIG9mIHBpbiBkZXNjcmlwdGlvbiBhcnJheSBmb3IgZ2l2ZW4gaHcuCiYjNDM7ICovCiYjNDM7aW50IGljZV9jZ3VfZ2V0X3Bpbl9udW0oc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gaWNlX2NndV9nZXRfbnVtX3BpbnMoaHcsIGlucHV0KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9jZ3VfZ2V0X3Bpbl90eXBlIC0gZ2V0IHBpbiYjMzk7cyB0eXBlCiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmgKaW5kZXggMTZiMTk4OGU5OTNkMi4uZmExZTkwOGNlYmFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oCkBAIC0zNjQsNiAmIzQzOzM2NCw3IEBAIGludCBpY2VfcmVhZF9zbWFfY3RybChzdHJ1Y3QgaWNlX2h3ICpodywgdTggKmRhdGEpOwogaW50IGljZV93cml0ZV9zbWFfY3RybChzdHJ1Y3QgaWNlX2h3ICpodywgdTggZGF0YSk7CiBpbnQgaWNlX3B0cF9yZWFkX3NkcF9hYyhzdHJ1Y3QgaWNlX2h3ICpodywgX19sZTE2ICplbnRyaWVzLCB1aW50ICpudW1fZW50cmllcyk7CiBpbnQgaWNlX2NndV9nZXRfbnVtX3BpbnMoc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpOwomIzQzO2ludCBpY2VfY2d1X2dldF9waW5fbnVtKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KTsKIGVudW0gZHBsbF9waW5fdHlwZSBpY2VfY2d1X2dldF9waW5fdHlwZShzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluLCBib29sIGlucHV0KTsKIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKgogaWNlX2NndV9nZXRfcGluX2ZyZXFfc3VwcChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluLCBib29sIGlucHV0LCB1OCAqbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jCmluZGV4IDZhNTg3NWJkOWM2YjEuLjRkYWVlMjUyZTJhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYwpAQCAtMjYxMiw3ICYjNDM7MjYxMiw2IEBAIGljZV9maWxsX3N3X3J1bGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfZmx0cl9pbmZvICpmX2luZm8sCiAJdTE2IHZsYW5faWQgPSBJQ0VfTUFYX1ZMQU5fSUQgJiM0MzsgMTsKIAl1MTYgdmxhbl90cGlkID0gRVRIX1BfODAyMVE7CiAJdm9pZCAqZGFkZHIgPSBOVUxMOwotCXUxNiBldGhfaGRyX3N6OwogCXU4ICpldGhfaGRyOwogCXUzMiBhY3QgPSAwOwogCV9fYmUxNiAqb2ZmOwpAQCAtMjYyNSwxMSAmIzQzOzI2MjQsMTAgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbywKIAkJcmV0dXJuOwogCX0KIAotCWV0aF9oZHJfc3ogPSBzaXplb2YoZHVtbXlfZXRoX2hlYWRlcik7CiAJZXRoX2hkciA9IHNfcnVsZS0mZ3Q7aGRyX2RhdGE7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBldGhlciBoZWFkZXIgd2l0aCBhIGR1bW15IGhlYWRlciAqLwotCW1lbWNweShldGhfaGRyLCBkdW1teV9ldGhfaGVhZGVyLCBldGhfaGRyX3N6KTsKJiM0MzsJaWNlX2ZpbGxfZXRoX2hkcihldGhfaGRyKTsKIAlpY2VfZmlsbF9zd19pbmZvKGh3LCBmX2luZm8pOwogCiAJc3dpdGNoIChmX2luZm8tJmd0O2ZsdHJfYWN0KSB7CkBAIC0yNzMwLDcgJiM0MzsyNzI4LDcgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbywKIAogCS8qIENyZWF0ZSB0aGUgc3dpdGNoIHJ1bGUgd2l0aCB0aGUgZmluYWwgZHVtbXkgRXRoZXJuZXQgaGVhZGVyICovCiAJaWYgKG9wYyAhPSBpY2VfYXFjX29wY191cGRhdGVfc3dfcnVsZXMpCi0JCXNfcnVsZS0mZ3Q7aGRyX2xlbiA9IGNwdV90b19sZTE2KGV0aF9oZHJfc3opOwomIzQzOwkJc19ydWxlLSZndDtoZHJfbGVuID0gY3B1X3RvX2xlMTYoRFVNTVlfRVRIX0hEUl9MRU4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jCmluZGV4IGQyMDM1N2MwNDEyNzMuLjQ1NjBlNTVjOGY5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYwpAQCAtMTc0LDYgJiM0MzsxNzQsNyBAQCBzdGF0aWMgdTE2IGljZV9jaGVja19zdXBwb3J0ZWRfdmxhbl90cGlkKHUxNiB2bGFuX3RwaWQpCiAJY2FzZSBFVEhfUF84MDIxUToKIAljYXNlIEVUSF9QXzgwMjFBRDoKIAljYXNlIEVUSF9QX1FJTlExOgomIzQzOwljYXNlIEVUSF9QXzgwMjFBSDoKIAkJcmV0dXJuIHZsYW5fdHBpZDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHJhY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHJhY2UuaAppbmRleCA0ZjM1ZWY4ZDZiMjk5Li4zY2I4YzZlYTAzY2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oCkBAIC0yNDEsNiAmIzQzOzI0MSwyNCBAQCBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfZndfcmVxKTsKIERFRklORV9UWF9UU1RBTVBfT1BfRVZFTlQoaWNlX3R4X3RzdGFtcF9md19kb25lKTsKIERFRklORV9UWF9UU1RBTVBfT1BfRVZFTlQoaWNlX3R4X3RzdGFtcF9jb21wbGV0ZSk7CiAKJiM0MzsvKiBUcmFjZSBldmVudCBmb3IgUnggdGltZXN0YW1wICovCiYjNDM7VFJBQ0VfRVZFTlQoaWNlX3J4X2h3dHN0YW1wLAomIzQzOwkgICAgVFBfUFJPVE8odTY0IGNhY2hlZF90aW1lLCB1MzIgdHNfaGlnaCwgdTY0IHRzX25zKSwKJiM0MzsKJiM0MzsJICAgIFRQX0FSR1MoY2FjaGVkX3RpbWUsIHRzX2hpZ2gsIHRzX25zKSwKJiM0MzsKJiM0MzsJICAgIFRQX1NUUlVDVF9fZW50cnkoX19maWVsZCh1NjQsIGNhY2hlZF90aW1lKQomIzQzOwkJCSAgICAgX19maWVsZCh1MzIsIHRzX2hpZ2gpCiYjNDM7CQkJICAgICBfX2ZpZWxkKHU2NCwgdHNfbnMpKSwKJiM0MzsKJiM0MzsJICAgIFRQX2Zhc3RfYXNzaWduKF9fZW50cnktJmd0O2NhY2hlZF90aW1lID0gY2FjaGVkX3RpbWU7CiYjNDM7CQkJICAgX19lbnRyeS0mZ3Q7dHNfaGlnaCA9IHRzX2hpZ2g7CiYjNDM7CQkJICAgX19lbnRyeS0mZ3Q7dHNfbnMgPSB0c19uczspLAomIzQzOwomIzQzOwkgICAgVFBfcHJpbnRrKCYjMzQ7Y2FjaGVkX3RpbWU9JWxsdSB0c19oaWdoPSV1IHRzX25zPSVsbHUmIzM0OywKJiM0MzsJCSAgICAgIF9fZW50cnktJmd0O2NhY2hlZF90aW1lLCBfX2VudHJ5LSZndDt0c19oaWdoLCBfX2VudHJ5LSZndDt0c19ucykKJiM0MzspOwomIzQzOwogREVDTEFSRV9FVkVOVF9DTEFTUyhpY2VfZXN3X2JyX2ZkYl90ZW1wbGF0ZSwKIAkJICAgIFRQX1BST1RPKHN0cnVjdCBpY2VfZXN3X2JyX2ZkYl9lbnRyeSAqZmRiKSwKIAkJICAgIFRQX0FSR1MoZmRiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKaW5kZXggMzEzMDNhYjViZTE3NS4uNDc3Yzg2ZDhjNTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKQEAgLTE3MzksNyAmIzQzOzE3MzksNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpCiAJbDNfbGVuID0gbDQuaGRyIC0gaXAuaGRyOwogCW9mZnNldCB8PSAobDNfbGVuIC8gNCkgJmx0OyZsdDsgSUNFX1RYX0RFU0NfTEVOX0lQTEVOX1M7CiAKLQlpZiAoKHR4X3JpbmctJmd0O25ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19DU1VNKSAmYW1wOyZhbXA7CiYjNDM7CWlmICh0ZXN0X2JpdChJQ0VfVFhfUklOR19GTEFHU19HQ1MsIHR4X3JpbmctJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiAJICAgICEoZmlyc3QtJmd0O3R4X2ZsYWdzICZhbXA7IElDRV9UWF9GTEFHU19UU08pICZhbXA7JmFtcDsKIAkgICAgIXNrYl9jc3VtX2lzX3NjdHAoc2tiKSkgewogCQkvKiBTZXQgR0NTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oCmluZGV4IDVlNTE3ZjIxOTM3OTguLjE1ZGJkNTEwMDkxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oCkBAIC0yMTcsNiAmIzQzOzIxNyw3IEBAIGVudW0gaWNlX3R4X3JpbmdfZmxhZ3MgewogCUlDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLAogCUlDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLAogCUlDRV9UWF9SSU5HX0ZMQUdTX1RYVElNRSwKJiM0MzsJSUNFX1RYX1JJTkdfRkxBR1NfR0NTLAogCUlDRV9UWF9SSU5HX0ZMQUdTX05CSVRTLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdnNpX3ZsYW5fbGliLmMKaW5kZXggNTQ5ODQ5NjY4NTFkNS4uYjY3MjcyZTJmNjAzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jCkBAIC0yNCw3ICYjNDM7MjQsOCBAQCBzdGF0aWMgdm9pZCBwcmludF9pbnZhbGlkX3RwaWQoc3RydWN0IGljZV92c2kgKnZzaSwgdTE2IHRwaWQpCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZV92bGFuKHN0cnVjdCBpY2VfdnNpICp2c2ksIHN0cnVjdCBpY2VfdmxhbiAqdmxhbikKIHsKIAlpZiAodmxhbi0mZ3Q7dHBpZCAhPSBFVEhfUF84MDIxUSAmYW1wOyZhbXA7IHZsYW4tJmd0O3RwaWQgIT0gRVRIX1BfODAyMUFEICZhbXA7JmFtcDsKLQkgICAgdmxhbi0mZ3Q7dHBpZCAhPSBFVEhfUF9RSU5RMSAmYW1wOyZhbXA7ICh2bGFuLSZndDt0cGlkIHx8IHZsYW4tJmd0O3ZpZCkpIHsKJiM0MzsJICAgIHZsYW4tJmd0O3RwaWQgIT0gRVRIX1BfUUlOUTEgJmFtcDsmYW1wOyB2bGFuLSZndDt0cGlkICE9IEVUSF9QXzgwMjFBSCAmYW1wOyZhbXA7CiYjNDM7CSAgICAodmxhbi0mZ3Q7dHBpZCB8fCB2bGFuLSZndDt2aWQpKSB7CiAJCXByaW50X2ludmFsaWRfdHBpZCh2c2ksIHZsYW4tJmd0O3RwaWQpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMKaW5kZXggY2E4MDE4ZTNkZDQyOC4uMDZkMmY5YmU5M2FlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jCkBAIC0xNzAyLDYgJiM0MzsxNzAyLDkgQEAgc3RhdGljIGJvb2wgaWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fdHBpZCh1MTYgZmlsdGVyaW5nX2NhcHMsIHUxNiB0cGlkKQogCWNhc2UgRVRIX1BfUUlOUTE6CiAJCXZsYW5fZXRoZXJ0eXBlID0gVklSVENITkxfVkxBTl9FVEhFUlRZUEVfOTEwMDsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgRVRIX1BfODAyMUFIOgomIzQzOwkJdmxhbl9ldGhlcnR5cGUgPSBWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEU3OwomIzQzOwkJYnJlYWs7CiAJfQogCiAJaWYgKCEoZmlsdGVyaW5nX2NhcHMgJmFtcDsgdmxhbl9ldGhlcnR5cGUpKQpAQCAtMjEzNiw2ICYjNDM7MjEzOSw5IEBAIHN0YXRpYyBpbnQgaWNlX3ZjX2dldF90cGlkKHUzMiBldGhlcnR5cGVfc2V0dGluZywgdTE2ICp0cGlkKQogCWNhc2UgVklSVENITkxfVkxBTl9FVEhFUlRZUEVfOTEwMDoKIAkJKnRwaWQgPSBFVEhfUF9RSU5RMTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgVklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhFNzoKJiM0MzsJCSp0cGlkID0gRVRIX1BfODAyMUFIOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJKnRwaWQgPSAwOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKaW5kZXggMjFkMmZlMzhhNDFhNi4uNDI0YzEyYzAzOTRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKQEAgLTExLDYgJiM0MzsxMSw4IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl90cmFjZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHBfc29ja19kcnYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAKQEAgLTcxMDUsNiAmIzQzOzcxMDcsNTcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlnY19xYnZfc2NoZWR1bGluZ190aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiAJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaWdjX2dldF9hY3BpX21hY19wYXNzdGhydSh1OCAqbWFjKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHN0cnVjdCB7CiYjNDM7CQljb25zdCBjaGFyICpuYW1lOwomIzQzOwkJYWNwaV9vYmplY3RfdHlwZSB0eXBlOwomIzQzOwkJdTMyIGxlbmd0aDsKJiM0MzsJfSBzb3VyY2VzW10gPSB7CiYjNDM7CQl7ICYjMzQ7XFxfU0IuQU1BQyYjMzQ7LCBBQ1BJX1RZUEVfQlVGRkVSLCAyMyB9LAomIzQzOwkJeyAmIzM0O1xcTUFDQSYjMzQ7LCAgICAgQUNQSV9UWVBFX1NUUklORywgMjIgfSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjsKJiM0MzsJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKJiM0MzsJYm9vbCBtYWNfZm91bmQgPSBmYWxzZTsKJiM0MzsJYWNwaV9zdGF0dXMgc3RhdHVzOwomIzQzOwl1OCBidWZbRVRIX0FMRU5dOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19BQ1BJKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoc291cmNlcykgJmFtcDsmYW1wOyAhbWFjX2ZvdW5kOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfQlVGRkVSOwomIzQzOwkJYnVmZmVyLnBvaW50ZXIgPSBOVUxMOwomIzQzOwomIzQzOwkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoTlVMTCwgKGNoYXIgKilzb3VyY2VzW2ldLm5hbWUsCiYjNDM7CQkJCQkgICAgICBOVUxMLCAmYW1wO2J1ZmZlcik7CiYjNDM7CQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvYmogPSBidWZmZXIucG9pbnRlcjsKJiM0MzsJCWlmICghb2JqIHx8IG9iai0mZ3Q7dHlwZSAhPSBzb3VyY2VzW2ldLnR5cGUgfHwKJiM0MzsJCSAgICBvYmotJmd0O3N0cmluZy5sZW5ndGggIT0gc291cmNlc1tpXS5sZW5ndGgpCiYjNDM7CQkJZ290byBmcmVlX29iajsKJiM0MzsKJiM0MzsJCWlmIChzdHJuY21wKG9iai0mZ3Q7c3RyaW5nLnBvaW50ZXIsICYjMzQ7X0FVWE1BQ18jJiMzNDssIDkpIHx8CiYjNDM7CQkgICAgb2JqLSZndDtzdHJpbmcucG9pbnRlclsyMV0gIT0gJiMzOTsjJiMzOTspCiYjNDM7CQkJZ290byBmcmVlX29iajsKJiM0MzsKJiM0MzsJCWlmIChoZXgyYmluKGJ1Ziwgb2JqLSZndDtzdHJpbmcucG9pbnRlciAmIzQzOyA5LCBFVEhfQUxFTikgfHwKJiM0MzsJCSAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihidWYpKQomIzQzOwkJCWdvdG8gZnJlZV9vYmo7CiYjNDM7CiYjNDM7CQlldGhlcl9hZGRyX2NvcHkobWFjLCBidWYpOwomIzQzOwkJbWFjX2ZvdW5kID0gdHJ1ZTsKJiM0MztmcmVlX29iajoKJiM0MzsJCWtmcmVlKG9iaik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG1hY19mb3VuZDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGlnY19wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCiAgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKQEAgLTcyNjgsOSAmIzQzOzczMjEsMTYgQEAgc3RhdGljIGludCBpZ2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJfQogCiAJaWYgKGV0aF9wbGF0Zm9ybV9nZXRfbWFjX2FkZHJlc3MoJmFtcDtwZGV2LSZndDtkZXYsIGh3LSZndDttYWMuYWRkcikpIHsKLQkJLyogY29weSB0aGUgTUFDIGFkZHJlc3Mgb3V0IG9mIHRoZSBOVk0gKi8KLQkJaWYgKGh3LSZndDttYWMub3BzLnJlYWRfbWFjX2FkZHIoaHcpKQomIzQzOwkJLyogTG9vayBmb3IgYSBzeXN0ZW0tcHJvdmlkZWQgTUFDIGluIHRoZSBBQ1BJIHRhYmxlIGJlZm9yZQomIzQzOwkJICogZmFsbGluZyBiYWNrIHRvIHJlYWRpbmcgdGhlIGFkZHJlc3MgZnJvbSB0aGUgTlZNLgomIzQzOwkJICovCiYjNDM7CQlpZiAoaWdjX2dldF9hY3BpX21hY19wYXNzdGhydShody0mZ3Q7bWFjLmFkZHIpKSB7CiYjNDM7CQkJbmV0ZGV2LSZndDthZGRyX2Fzc2lnbl90eXBlID0gTkVUX0FERFJfU1RPTEVOOwomIzQzOwkJCWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O1VzaW5nIEFDUEkgcGFzcy10aHJvdWdoIE1BQyBhZGRyICVwTVxuJiMzNDssCiYjNDM7CQkJCSBody0mZ3Q7bWFjLmFkZHIpOwomIzQzOwkJfSBlbHNlIGlmIChody0mZ3Q7bWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSkgewogCQkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtOVk0gUmVhZCBFcnJvclxuJiMzNDspOwomIzQzOwkJfQogCX0KIAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LSZndDttYWMuYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oIGIvaW5jbHVkZS9saW51eC9hdmYvdmlydGNobmwuaAppbmRleCAxMWJkYWI1NTIyZmQ1Li41MTFjODgyN2M2NDBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmgKQEAgLTYzNiw2ICYjNDM7NjM2LDcgQEAgZW51bSB2aXJ0Y2hubF92bGFuX3N1cHBvcnQgewogCVZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzgxMDAgPQkJQklUKDApLAogCVZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4QTggPQkJQklUKDEpLAogCVZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzkxMDAgPQkJQklUKDIpLAomIzQzOwlWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEU3ID0JCUJJVCgzKSwKIAlWSVJUQ0hOTF9WTEFOX1RBR19MT0NBVElPTl9MMlRBRzEgPQlCSVQoOCksCiAJVklSVENITkxfVkxBTl9UQUdfTE9DQVRJT05fTDJUQUcyID0JQklUKDkpLAogCVZJUlRDSE5MX1ZMQU5fVEFHX0xPQ0FUSU9OX0wyVEFHMl8yID0JQklUKDEwKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MzMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBTZXJpZXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgdG91Y2hlcyBzZXZlcmFsIEludGVsIEV0aGVybmV0IGRyaXZlcnM6IGBlMTAwMGVgLCBgaTQwZWAsIGBpY2VgLCBhbmQgYGlnY2AuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBob3cgdGhpcyB3aWxsIGltcGFjdCBmdXp6aW5nIGVmZm9ydHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGUgbWFpbiBkcml2ZXJzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgdGhvc2UgdGhhdCBhcmUgZW11bGF0ZWQuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgZTEwMDBlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgZW11bGF0ZWQsIHNvIGl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LiBgaTQwZWAgYW5kIGBpY2VgIGFyZSBub3QgbmF0aXZlbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gYGlnY2AgaXMgYWxzbyBub3QgZW11bGF0ZWQuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmFycm93cyB0byB0aGUgYGUxMDAwZWAgY2hhbmdlcy4KCkxvb2tpbmcgYXQgdGhlIGBlMTAwMGVgIGRpZmYgaW4gYG5ldGRldi5jYCwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgZTEwMDBfYWxsb2NfcnhfYnVmZmVyc2AgYW5kIGBlMTAwMF9jbGVhbl9yeF9pcnFgLiBUaGVzZSBhcmUgY29yZSBSWCBwYXRoIGZ1bmN0aW9ucyDigJMgdGhleSYjMzk7cmUgY3JpdGljYWwgZm9yIHJlY2VpdmluZyBwYWNrZXRzLCBzbywgYnkgZGVmaW5pdGlvbiwgdGhleSYjMzk7cmUgJiMzNDtob3QtcGF0aCYjMzQ7LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpUaGUgcHJvbXB0LCBob3dldmVyLCBpbnN0cnVjdHMgbWUgdG8gYXZvaWQgbGlzdGluZyAqZ2VuZXJpYyogaG90LXBhdGggZnVuY3Rpb25zLiBIb3dldmVyLCBhcmUgdGhlc2UgZnVuY3Rpb25zICpnZW5lcmljKiBvciBzcGVjaWZpYyB0byB0aGUgYGUxMDAwZWAgZHJpdmVyPyBCZWNhdXNlIHRoZXNlIGFyZSB0aGUgKm9ubHkqIG1vZGlmaWVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhlICpyZWFjaGFibGUqIGRyaXZlciwgbGlzdGluZyB0aGVtIGZlZWxzIGFwcHJvcHJpYXRlLiBXaGlsZSB0aGV5IGFyZSBpbmRlZWQgaG90LXBhdGgsIHRoZXkgYXJlICpzcGVjaWZpYyogdG8gdGhpcyBkcml2ZXIgYW5kIHRodXMgYXJlIGlkZWFsLgoKSSBzaG91bGQgYWxzbyBub3RlIHRoYXQgYGUxMDAwZWAgaXMgYmVpbmcgZnV6emVkIGFscmVhZHkuIFN5emthbGxlciBpbmNsdWRlcyBkZXNjcmlwdGlvbnMgZm9yIGUxMDAwZS4gSSB3aWxsIGFsc28gZG91YmxlIGNoZWNrIHRvIHNlZSBpZiBlMTAwMGUgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIG5lZWRzIGEgY29uZmlnLCBJIHdpbGwgbmVlZCB0byBsb29rIGF0IGl0cyBLY29uZmlnIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEUxMDAwRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgbmV0d29yayBkcml2ZXImIzM5O3MgS2NvbmZpZyBmaWxlIHJlc2lkZXMuIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gY2hlY2sgdGhlIHN0YW5kYXJkIGxvY2F0aW9uLiBJbnRlbCYjMzk7cyBldGhlcm5ldCBkcml2ZXJzIGFyZSB1c3VhbGx5IHByZXR0eSB3ZWxsLW9yZ2FuaXplZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IGd1ZXNzLCBiYXNlZCBvbiB5ZWFycyBvZiBleHBlcmllbmNlLCBpcyB0aGF0IGl0JiMzOTtsbCBiZSB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvYC4gVGhhdCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIHRoZSB0eXBpY2FsIGhvbWUgZm9yIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMsIGFuZCBLY29uZmlnIGZpbGVzIGFyZSBhbG1vc3QgYWx3YXlzIGxvY2F0ZWQgd2l0aGluIHRoZSBhcHByb3ByaWF0ZSBkcml2ZXImIzM5O3Mgc3ViZGlyZWN0b3J5LiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRTEwMDBFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTQ1PWNvbmZpZyBFMTAwMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzo4MTpjb25maWcgRTEwMDBFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctODItXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIFBDSCBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MDUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIEUxMDAwRToKCioqRGVsdmluZyBpbnRvIHRoZSBFMTAwMEUmIzM5O3MgUmVsYXRpb25zaGlwcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIEUxMDAwRS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCB0byBjb25zaWRlciB0aGlzIGZyb20gYSBmZXcgYW5nbGVzLiBGaXJzdGx5LCBJJiMzOTtsbCB0aGluayBhYm91dCB0aGUgc29mdHdhcmUgZGVwZW5kZW5jaWVzOiBXaGF0IGxpYnJhcmllcywgaGVhZGVycywgYW5kIGtlcm5lbCBtb2R1bGVzIGlzIGl0IHJlbHlpbmcgb24/IElzIGl0IGEgc3RhbmRhbG9uZSBkcml2ZXIsIG9yIGRvZXMgaXQgaG9vayBpbnRvIHNvbWUgbG93ZXItbGV2ZWwgbmV0d29ya2luZyBzdGFjayBjb21wb25lbnRzLCBtYXliZSBzcGVjaWZpYyBuZXR3b3JrIHByb3RvY29scyBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IFRoYXQgY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGFuZCB3aGVuIHdvcmtpbmcgb24gaXQgd2l0aCBvdGhlcnMsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBsZXQgdGhlbSBrbm93LgoKVGhlbiwgdGhlcmUmIzM5O3MgdGhlIGhhcmR3YXJlIHNpZGUuIEUxMDAwRSBpcyBhbiBJbnRlbCBHaWdhYml0IEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyLCBzbyBpdOKAmXMgbGlrZWx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4gSSB3b3VsZCB0aGluayBhYm91dCB3aGljaCBzcGVjaWZpYyBoYXJkd2FyZSB2ZXJzaW9ucyBpdCBzdXBwb3J0cywgYW55IHNwZWNpZmljIHNpbGljb24gcmV2aXNpb25zIHRoYXQgbWlnaHQgcmVxdWlyZSBjb25kaXRpb25hbCBjb2RlIHBhdGhzLCBhbmQgYW55IGZpcm13YXJlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIE5JQyBpdHNlbGYuIEEgZGVlcCBkaXZlIGludG8gdGhlIGRhdGFzaGVldCB3b3VsZCBsaWtlbHkgYmUgbmVjZXNzYXJ5IHRvIGNvbmZpcm0gdGhpcy4KCkZpbmFsbHksIEkgd291bGQgd2FudCB0byBsb29rIGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwuIFdoYXQgYnVpbGQgdG9vbHMgYXJlIHVzZWQ/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIGJ1aWxkIHN5c3RlbT8gSXMgaXQgYSBtb2R1bGUgdGhhdCBpcyBsb2FkZWQgYXQgcnVudGltZSwgb3IgaXMgaXQgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsPyBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBhIGZhY3RvciwgcGFydGljdWxhcmx5IHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIHRoYXQgRTEwMDBFIHJlcXVpcmVzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucyBvciBmZWF0dXJlcywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGFuIG9sZGVyIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0Y29uZmlnIEUxMDAwRVxuICA2MjpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgUFJPLzEwMDAgUENJLUV4cHJlc3MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgKCFTUEFSQzMyIHx8IEJST0tFTilcbiAgNjQ6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNjU6XHRcdHNlbGVjdCBDUkMzMlxuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUENJLUV4cHJlc3MgSW50ZWwoUikgUFJPLzEwMDAgZ2lnYWJpdFxuICA2ODpcdFx0ICBldGhlcm5ldCBmYW1pbHkgb2YgYWRhcHRlcnMuIEZvciBQQ0kgb3IgUENJLVggZTEwMDAgYWRhcHRlcnMsXG4gIDY5Olx0XHQgIHVzZSB0aGUgcmVndWxhciBlMTAwMCBkcml2ZXIgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvXG4gIDcwOlx0XHQgIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgXHUwMDI2IERyaXZlciBJRCBHdWlkZSB0aGF0XG4gIDcxOlx0XHQgIGNhbiBiZSBsb2NhdGVkIGF0OlxuICA3MjpcdFxuICA3MzpcdFx0ICBcdTAwM2NodHRwOi8vc3VwcG9ydC5pbnRlbC5jb21cdTAwM2VcbiAgNzQ6XHRcbiAgNzU6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDc2Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2UxMDAwZS5yc3RcdTAwM2UuXG4gIDc3Olx0XG4gIDc4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgNzk6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZTEwMDBlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTQzCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBQYXRjaCBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvbmZpZ3VyYXRpb24gYEUxMDAwRWAgaXMgZGVmaW5pdGVseSByZWxldmFudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNgLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBlMTAwMGUgbmV0d29yayBkcml2ZXIuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGRyaXZlciBlbXVsYXRlZCBpbiBRRU1VPyBZZXMsIGUxMDAwZSBpcyAqZGVmaW5pdGVseSogZW11bGF0ZWQsIHVubGlrZSBgaWdjYCwgYGk0MGVgLCBvciBgaWNlYCB3aGljaCB0aGUgcHJvbXB0IGluZGljYXRlcyAqYXJlbiYjMzk7dCouIFRodXMsIGBFMTAwMEVgIGlzIHRoZSBjb25maWd1cmF0aW9uIHRvIGZvY3VzIG9uLgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gYWRkcmVzcyBhbiBpc3N1ZSBpbiB0aGUgZTEwMDBlJiMzOTtzIHJlY2VpdmUgKFJYKSBwYXRoLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZTEwMDBfYWxsb2NfcnhfYnVmZmVyc2AgZnVuY3Rpb24uIFRoZSBjb2RlIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHByb2JsZW0gcmVsYXRlZCB0byBETUEgdW5tYXBwaW5nLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIGluIGEgc2ltdWxhdGVkIGVudmlyb25tZW50LgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZml4IGluIGEgcmVhbCBhbmQgZW11bGF0ZWQgZHJpdmVyLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpGb3IgdGhlIGZvY3VzIHN5bWJvbHMsIEkmIzM5O20gaW5pdGlhbGx5IGNvbnNpZGVyaW5nIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgYGUxMDAwX2NsZWFuX3J4X2lycWAsIGJlY2F1c2UgdGhleSBhcmUgY2xlYXJseSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gQnV0IGhvbGQgb24sIGFyZSB0aGVzZSBmdW5jdGlvbnMgYHN0YXRpY2A/IFllcywgdGhleSBhcmUuIEFuZCB0aGUgcHJvbXB0IHByZWZlcnMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBhcmUgYHN0YXRpY2AsIHRoZXkmIzM5O3JlIGxpa2VseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgbWF5IG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNvLCBJIHdpbGwgcHJvY2VlZCB3aXRoIGNhdXRpb24gaW4gdGhpcyBpbnN0YW5jZSwgYW5kIHJlLWNoZWNrIG15IHJhdGlvbmFsZS4KCkkmIzM5O2xsIHN0aWNrIHdpdGggYEUxMDAwRWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZywgYW5kIGtlZXAgaW4gbWluZCB0aGVzZSBgc3RhdGljYCBmdW5jdGlvbnMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2UxMDAwX2NsZWFuX3J4X2lycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9OTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBlMTAwMF9yeF9oYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fbGUzMiByc3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTkyMi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzo5MjM6ICogZTEwMDBfY2xlYW5fcnhfaXJxIC0gU2VuZCByZWNlaXZlZCBkYXRhIHVwIHRoZSBuZXR3b3JrIHN0YWNrXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtOTI0LSAqIEByeF9yaW5nOiBSeCBkZXNjcmlwdG9yIHJpbmdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtOTMwLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzo5MzE6c3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy05MzItXHRcdFx0ICAgICAgIGludCB3b3JrX3RvX2RvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYz0xMjM4PXN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3R4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqdHhfcmluZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMyNC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxMzI1OiAqIGUxMDAwX2NsZWFuX3J4X2lycV9wcyAtIFNlbmQgcmVjZWl2ZWQgZGF0YSB1cCB0aGUgbmV0d29yayBzdGFjazsgcGFja2V0IHNwbGl0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMyNi0gKiBAcnhfcmluZzogUnggZGVzY3JpcHRvciByaW5nXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTEzMzItICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjEzMzM6c3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxX3BzKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xMzM0LVx0XHRcdFx0ICBpbnQgd29ya190b19kbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTY5ND1zdGF0aWMgdm9pZCBlMTAwMF9jbGVhbl9yeF9yaW5nKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xNzA1LVx0XHRpZiAoYnVmZmVyX2luZm8tXHUwMDNlZG1hKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MTcwNjpcdFx0XHRpZiAoYWRhcHRlci1cdTAwM2VjbGVhbl9yeCA9PSBlMTAwMF9jbGVhbl9yeF9pcnEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcwNy1cdFx0XHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcxMi1cdFx0XHRcdFx0ICAgICAgIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxNzEzOlx0XHRcdGVsc2UgaWYgKGFkYXB0ZXItXHUwMDNlY2xlYW5fcnggPT0gZTEwMDBfY2xlYW5fcnhfaXJxX3BzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTE3MTQtXHRcdFx0XHRkbWFfdW5tYXBfc2luZ2xlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBidWZmZXJfaW5mby1cdTAwM2VkbWEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jPTMyMDM9c3RhdGljIHZvaWQgZTEwMDBfY29uZmlndXJlX3J4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0zMjEzLVx0XHQgICAgc2l6ZW9mKHVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzozMjE0Olx0XHRhZGFwdGVyLVx1MDAzZWNsZWFuX3J4ID0gZTEwMDBfY2xlYW5fcnhfaXJxX3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTMyMTUtXHRcdGFkYXB0ZXItXHUwMDNlYWxsb2NfcnhfYnVmID0gZTEwMDBfYWxsb2NfcnhfYnVmZmVyc19wcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIyMS1cdFx0cmRsZW4gPSByeF9yaW5nLVx1MDAzZWNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX3J4X2Rlc2NfZXh0ZW5kZWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjMyMjI6XHRcdGFkYXB0ZXItXHUwMDNlY2xlYW5fcnggPSBlMTAwMF9jbGVhbl9yeF9pcnE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIyMy1cdFx0YWRhcHRlci1cdTAwM2VhbGxvY19yeF9idWYgPSBlMTAwMF9hbGxvY19yeF9idWZmZXJzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk4NAoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFMTAwMEUgRHJpdmVyJiMzOTtzIFJ4IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTt2ZSBnb3QgdG8gdW5kZXJzdGFuZCBpcyB0aGUgaW50ZXJydXB0LWRyaXZlbiBSWCBwYXRoIGZvciB0aGUgZW11bGF0ZWQgRTEwMDBFIGRldmljZS4gVGhlc2UgZnVuY3Rpb25zLCBgYWRhcHRlci0mZ3Q7Y2xlYW5fcnggPSBlMTAwMF9jbGVhbl9yeF9pcnE7YCBhbmQgc28gb24sIGFyZSBhc3NpZ25lZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGtlZXBzIHRoaW5ncyBtYW5hZ2VhYmxlLgoKSSBzZWUgdGhlcmUmIzM5O3Mgc29tZSBicm9hZGVyIGFjdGl2aXR5IHdpdGggWERQIG1ldGFkYXRhIG9wZXJhdGlvbnM7IHRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBgaTQwZV94ZHBfcnhfaGFzaGAgYW5kIGBpNDBlX3hkcF9yeF92bGFuX3RhZ2AuIFBsdXMsIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIGZvciB0aGUgYGljZWAgYW5kIGBpZ2NgIGRyaXZlcnMgYXMgd2VsbC4gU2luY2UgdGhpcyBpcyBhbiBlbXVsYXRpb24gY29udGV4dCwgYW5kIHRoZSBvbmx5IGVtdWxhdGVkIGRldmljZSBpbiBwbGF5IGhlcmUgaXMgRTEwMDBFLCBteSBmb2N1cyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIG9uIHRoYXQgZHJpdmVyLgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgRTEwMDBFYCBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZsYWcgdG8gZW5hYmxlIHRoZSBFMTAwMEUgc3VwcG9ydC4gQWxyaWdodCwgeWVwLCBjb25maXJtZWQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LgoKTmV4dCBzdGVwOiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIGBlMTAwMGUvbmV0ZGV2LmNgIHJlZ2FyZGluZyB0aGUgUlggYnVmZmVyIGFsbG9jYXRpb24gYW5kIGNsZWFuaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgc3BlY2lmaWNhbGx5IGBlMTAwMF9jbGVhbl9yeF9pcnFgIHRvIGNvbmZpcm0gdGhlIGNvZGUgc3RydWN0dXJlLCBhbmQgbWFrZSBzdXJlIHRoYXQsIGFzIHN1c3BlY3RlZCwgdGhleSBhcmUgbm90IGlubGluZWQuCgpMb29rcyBsaWtlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGJleW9uZCBgRTEwMDBFYCB0aGF0IHdpbGwgaW1wYWN0IHRoaXMuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB1c2luZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sLCBhcyBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGUga2V5IGZ1bmN0aW9ucyByZXNpZGUgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RTEwMDBFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZTEwMDBfYWxsb2NfcnhfYnVmZmVycyYjMzQ7LAogICAgJiMzNDtlMTAwMF9jbGVhbl9yeF9pcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJYIHBhdGggb2YgdGhlIGUxMDAwZSBkcml2ZXIgKGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMgYW5kIGUxMDAwX2NsZWFuX3J4X2lycSksIHdoaWNoIGlzIGZ1bGx5IGVtdWxhdGVkIGluIFFFTVUgYW5kIHJlYWNoYWJsZS4gSXQgYWxzbyBtb2RpZmllcyBpNDBlLCBpY2UsIGFuZCBpZ2MgZHJpdmVycywgYnV0IHRob3NlIGFyZSBub3QgbmF0aXZlbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gV2UgZm9jdXMgb24gdGhlIGUxMDAwZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFMTAwMEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlMTAwMF9hbGxvY19yeF9idWZmZXJzJiMzNDssCiAgICAmIzM0O2UxMDAwX2NsZWFuX3J4X2lycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjo0NzoyNi4yODM3MTU1NzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkwNzUzODIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFMTAwMEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwMF9hbGxvY19yeF9idWZmZXJzXCIsXG4gICAgXCJlMTAwMF9jbGVhbl9yeF9pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjQ3OjI2LjI4MzcyMjcxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3MTMzNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjZmMGFmNWM5NDM3ZjQxNjRiMDJjNjExOGFhMGQ3ODQ0NTVkYWIxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjQ3OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcXG5pbmRleCAwYmNhMjkzY2Y5Y2I3Li44MmIzY2NjNzAyN2VhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcXG5AQCAtOTQxLDYgKzk0MSw4NiBAQCBUbyBzZWUgaW5wdXQgc2lnbmFsIG9uIHRob3NlIFBUUCBwaW5zLCB5b3UgbmVlZCB0byBjb25maWd1cmUgRFBMTCBwcm9wZXJseS5cXG4gT3V0cHV0IHNpZ25hbCBpcyBvbmx5IHZpc2libGUgb24gRFBMTCBhbmQgdG8gc2VuZCBpdCB0byB0aGUgYm9hcmQgU01BL1UuRkwgcGlucyxcXG4gRFBMTCBvdXRwdXQgcGlucyBoYXZlIHRvIGJlIG1hbnVhbGx5IGNvbmZpZ3VyZWQuXFxuIFxcbitVbm1hbmFnZWQgRFBMTCBTdXBwb3J0XFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rSGFyZHdhcmUgdmFyaWFudHMgb2YgRTgzMCBtYXkgc3VwcG9ydCBhbiB1bm1hbmFnZWQgRFBMTDpcXG4rXFxuKy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE4RiBmb3IgT0NQIDMuMCxcXG4rXFxuKy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE0Ri5cXG4rXFxuK0luIHRoZSBjYXNlIG9mIHRoZSB1bm1hbmFnZWQgRFBMTCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaGFyZGNvZGVkIHdpdGhpbiB0aGVcXG4raGFyZHdhcmUgYW5kIGZpcm13YXJlLCBtZWFuaW5nIHVzZXJzIGNhbm5vdCBtb2RpZnkgc2V0dGluZ3MuIEhvd2V2ZXIsXFxuK3VzZXJzIGNhbiBjaGVjayB0aGUgRFBMTCBsb2NrIHN0YXR1cyBhbmQgb2J0YWluIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cXG4rdGhyb3VnaCB0aGUgTGludXggRFBMTCBzdWJzeXN0ZW0uXFxuK1xcbitXaGVuIHByZXNlbnQsIHRoZSBEUExMIGRldmljZSBsb2NrcyB0byBhbiBleHRlcm5hbCBzaWduYWwgcHJvdmlkZWQgdGhyb3VnaCB0aGVcXG4rUENJZS9PQ1AgcGluLiBUaGUgZXhwZWN0ZWQgaW5wdXQgc2lnbmFsIGlzIDFQUFMgKDEgUHVsc2UgUGVyIFNlY29uZCkgZW1iZWRkZWRcXG4rb24gYSAxME1IeiByZWZlcmVuY2UgY2xvY2suXFxuK1RoZSBEUExMIHByb2R1Y2VzIG91dHB1dDpcXG4rXFxuKy0gZm9yIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2wpIFxcdTAwMjYgUEhZIChQaHlzaWNhbCBMYXllcikgY2xvY2tzLFxcbitcXG4rLSAxUFBTIGZvciBzeW5jaHJvbml6YXRpb24gb2Ygb25ib2FyZCBQSEMgKFByZWNpc2lvbiBIYXJkd2FyZSBDbG9jaykgdGltZXIuXFxuK1xcbitFeGFtcGxlIG91dHB1dCBvZiBxdWVyeWluZyB0aGUgTGludXggRFBMTCBzdWJzeXN0ZW0gY2FuIGJlIGZvdW5kIGJlbG93LlxcbitcXG4rLi4gY29kZS1ibG9jazo6IGNvbnNvbGVcXG4rICA6Y2FwdGlvbjogRHVtcGluZyB0aGUgRFBMTCBwaW5zXFxuK1xcbisgICQgXFx1MDAzY3lubFxcdTAwM2UgLS1zcGVjIERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcGxsLnlhbWwgLS1kdW1wIHBpbi1nZXRcXG4rICBbeydib2FyZC1sYWJlbCc6ICcxNTg4LVRJTUVfU1lOQycsXFxuKyAgICAnY2FwYWJpbGl0aWVzJzogc2V0KCksXFxuKyAgICAnY2xvY2staWQnOiAyODI1NzQ0NzE1NjEyMTYsXFxuKyAgICAnZXN5bmMtZnJlcXVlbmN5JzogMSxcXG4rICAgICdlc3luYy1mcmVxdWVuY3ktc3VwcG9ydGVkJzogW3snZnJlcXVlbmN5LW1heCc6IDEsICdmcmVxdWVuY3ktbWluJzogMX1dLFxcbisgICAgJ2VzeW5jLXB1bHNlJzogMjUsXFxuKyAgICAnZnJlcXVlbmN5JzogMTAwMDAwMDAsXFxuKyAgICAnaWQnOiAxMyxcXG4rICAgICdtb2R1bGUtbmFtZSc6ICdpY2UnLFxcbisgICAgJ3BhcmVudC1kZXZpY2UnOiBbeydkaXJlY3Rpb24nOiAnaW5wdXQnLFxcbisgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnQtaWQnOiA2LFxcbisgICAgICAgICAgICAgICAgICAgICAgICdzdGF0ZSc6ICdjb25uZWN0ZWQnfV0sXFxuKyAgICAncGhhc2UtYWRqdXN0LW1heCc6IDAsXFxuKyAgICAncGhhc2UtYWRqdXN0LW1pbic6IDAsXFxuKyAgICAndHlwZSc6ICdleHQnfSxcXG4rICAgIHsnYm9hcmQtbGFiZWwnOiAnTUFDLVBIWS1DTEsnLFxcbisgICAgICAnY2FwYWJpbGl0aWVzJzogc2V0KCksXFxuKyAgICAnY2xvY2staWQnOiAyODI1NzQ0NzE1NjEyMTYsXFxuKyAgICAnZnJlcXVlbmN5JzogMTU2MjUwMDAwLFxcbisgICAgJ2lkJzogMTQsXFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcXG4rICAgICdwYXJlbnQtZGV2aWNlJzogW3snZGlyZWN0aW9uJzogJ291dHB1dCcsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3BhcmVudC1pZCc6IDYsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlJzogJ2Nvbm5lY3RlZCd9XSxcXG4rICAgICdwaGFzZS1hZGp1c3QtbWF4JzogMCxcXG4rICAgICdwaGFzZS1hZGp1c3QtbWluJzogMCxcXG4rICAgICd0eXBlJzogJ3N5bmNlLWV0aC1wb3J0J30sXFxuKyAgeydib2FyZC1sYWJlbCc6ICcxNTg4LVRJTUVfUkVGJyxcXG4rICAgICdjYXBhYmlsaXRpZXMnOiBzZXQoKSxcXG4rICAgICdjbG9jay1pZCc6IDI4MjU3NDQ3MTU2MTIxNixcXG4rICAgICdmcmVxdWVuY3knOiAxLFxcbisgICAgJ2lkJzogMTUsXFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcXG4rICAgICdwYXJlbnQtZGV2aWNlJzogW3snZGlyZWN0aW9uJzogJ291dHB1dCcsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3BhcmVudC1pZCc6IDYsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlJzogJ2Nvbm5lY3RlZCd9XSxcXG4rICAgICdwaGFzZS1hZGp1c3QtbWF4JzogMCxcXG4rICAgICdwaGFzZS1hZGp1c3QtbWluJzogMCxcXG4rICAgICd0eXBlJzogJ2ludC1vc2NpbGxhdG9yJ31dXFxuK1xcbisuLiBjb2RlLWJsb2NrOjogY29uc29sZVxcbisgIDpjYXB0aW9uOiBEdW1waW5nIHRoZSBEUExMIGRldmljZXNcXG4rXFxuKyAgJCBcXHUwMDNjeW5sXFx1MDAzZSAtLXNwZWMgRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RwbGwueWFtbCAtLWR1bXAgZGV2aWNlLWdldFxcbisgIFt7J2Nsb2NrLWlkJzogMjgyNTc0NDcxNTYxMjE2LFxcbisgICAgJ2lkJzogNixcXG4rICAgICdsb2NrLXN0YXR1cyc6ICdsb2NrZWQnLFxcbisgICAgJ21vZGUnOiAnbWFudWFsJyxcXG4rICAgICdtb2RlLXN1cHBvcnRlZCc6IFsnbWFudWFsJ10sXFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcXG4rICAgICd0eXBlJzogJ3Bwcyd9XVxcbitcXG4gR05TUyBtb2R1bGVcXG4gLS0tLS0tLS0tLS1cXG4gUmVxdWlyZXMga2VybmVsIGNvbXBpbGVkIHdpdGggQ09ORklHX0dOU1M9eSBvciBDT05GSUdfR05TUz1tLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNcXG5pbmRleCA4NDRmMzFhYjM3YWQ0Li5iMDhiY2JkYjE5ZDk3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuY1xcbkBAIC02NzUsNiArNjc1LDggQEAgc3RhdGljIHZvaWQgZTEwMDBfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZyxcXG4gXFx0XFx0c2tiID0gYnVmZmVyX2luZm8tXFx1MDAzZXNrYjtcXG4gXFx0XFx0aWYgKHNrYikge1xcbiBcXHRcXHRcXHRza2JfdHJpbShza2IsIDApO1xcbitcXHRcXHRcXHRpZiAobGlrZWx5KGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEpKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2Rlc2M7XFxuIFxcdFxcdFxcdGdvdG8gbWFwX3NrYjtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtNjkyLDEwICs2OTQsMTIgQEAgc3RhdGljIHZvaWQgZTEwMDBfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xcbiBcXHRcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgYnVmZmVyX2luZm8tXFx1MDAzZWRtYSkpIHtcXG4gXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiUnggRE1BIG1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlZG1hID0gMDtcXG4gXFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlcnhfZG1hX2ZhaWxlZCsrO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4rd3JpdGVfZGVzYzpcXG4gXFx0XFx0cnhfZGVzYyA9IEUxMDAwX1JYX0RFU0NfRVhUKCpyeF9yaW5nLCBpKTtcXG4gXFx0XFx0cnhfZGVzYy1cXHUwMDNlcmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEpO1xcbiBcXG5AQCAtOTUzLDcgKzk1Nyw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXFxuIFxcdFxcdGRtYV9ybWIoKTtcXHQvKiByZWFkIGRlc2NyaXB0b3IgYW5kIHJ4X2J1ZmZlcl9pbmZvIGFmdGVyIHN0YXR1cyBERCAqL1xcbiBcXG4gXFx0XFx0c2tiID0gYnVmZmVyX2luZm8tXFx1MDAzZXNrYjtcXG4tXFx0XFx0YnVmZmVyX2luZm8tXFx1MDAzZXNrYiA9IE5VTEw7XFxuIFxcbiBcXHRcXHRwcmVmZXRjaChza2ItXFx1MDAzZWRhdGEgLSBORVRfSVBfQUxJR04pO1xcbiBcXG5AQCAtOTY3LDkgKzk3MCw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXFxuIFxcbiBcXHRcXHRjbGVhbmVkID0gdHJ1ZTtcXG4gXFx0XFx0Y2xlYW5lZF9jb3VudCsrO1xcbi1cXHRcXHRkbWFfdW5tYXBfc2luZ2xlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEsXFxuLVxcdFxcdFxcdFxcdCBhZGFwdGVyLVxcdTAwM2VyeF9idWZmZXJfbGVuLCBETUFfRlJPTV9ERVZJQ0UpO1xcbi1cXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlZG1hID0gMDtcXG4gXFxuIFxcdFxcdGxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtXFx1MDAzZXdiLnVwcGVyLmxlbmd0aCk7XFxuIFxcbkBAIC05ODUsOCArOTg1LDYgQEAgc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcXG4gXFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWZsYWdzMiBcXHUwMDI2IEZMQUcyX0lTX0RJU0NBUkRJTkcpIHtcXG4gXFx0XFx0XFx0LyogQWxsIHJlY2VpdmVzIG11c3QgZml0IGludG8gYSBzaW5nbGUgYnVmZmVyICovXFxuIFxcdFxcdFxcdGVfZGJnKFxcXCJSZWNlaXZlIHBhY2tldCBjb25zdW1lZCBtdWx0aXBsZSBidWZmZXJzXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0LyogcmVjeWNsZSAqL1xcbi1cXHRcXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlc2tiID0gc2tiO1xcbiBcXHRcXHRcXHRpZiAoc3RhdGVyciBcXHUwMDI2IEUxMDAwX1JYRF9TVEFUX0VPUClcXG4gXFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZmxhZ3MyIFxcdTAwMjY9IH5GTEFHMl9JU19ESVNDQVJESU5HO1xcbiBcXHRcXHRcXHRnb3RvIG5leHRfZGVzYztcXG5AQCAtOTk0LDggKzk5Miw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoKHN0YXRlcnIgXFx1MDAyNiBFMTAwMF9SWERFWFRfRVJSX0ZSQU1FX0VSUl9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICEobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfUlhBTEwpKSkge1xcbi1cXHRcXHRcXHQvKiByZWN5Y2xlICovXFxuLVxcdFxcdFxcdGJ1ZmZlcl9pbmZvLVxcdTAwM2Vza2IgPSBza2I7XFxuIFxcdFxcdFxcdGdvdG8gbmV4dF9kZXNjO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMDIyLDE5ICsxMDE4LDMzIEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXFxuIFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpuZXdfc2tiID1cXG4gXFx0XFx0XFx0XFx0bmFwaV9hbGxvY19za2IoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGksIGxlbmd0aCk7XFxuIFxcdFxcdFxcdGlmIChuZXdfc2tiKSB7XFxuK1xcdFxcdFxcdFxcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXJ4X2J1ZmZlcl9sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdERNQV9GUk9NX0RFVklDRSk7XFxuIFxcdFxcdFxcdFxcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChuZXdfc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgLU5FVF9JUF9BTElHTixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIChza2ItXFx1MDAzZWRhdGEgLVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRORVRfSVBfQUxJR04pLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgKGxlbmd0aCArXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdE5FVF9JUF9BTElHTikpO1xcbi1cXHRcXHRcXHRcXHQvKiBzYXZlIHRoZSBza2IgaW4gYnVmZmVyX2luZm8gYXMgZ29vZCAqL1xcbi1cXHRcXHRcXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlc2tiID0gc2tiO1xcbitcXHRcXHRcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBidWZmZXJfaW5mby1cXHUwMDNlZG1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBhZGFwdGVyLVxcdTAwM2VyeF9idWZmZXJfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBETUFfRlJPTV9ERVZJQ0UpO1xcbiBcXHRcXHRcXHRcXHRza2IgPSBuZXdfc2tiO1xcbitcXHRcXHRcXHRcXHRnb3RvIGNvcHlicmVha19kb25lO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdC8qIGVsc2UganVzdCBjb250aW51ZSB3aXRoIHRoZSBvbGQgb25lICovXFxuIFxcdFxcdH1cXG4tXFx0XFx0LyogZW5kIGNvcHlicmVhayBjb2RlICovXFxuK1xcbitcXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlc2tiID0gTlVMTDtcXG4rXFx0XFx0ZG1hX3VubWFwX3NpbmdsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBidWZmZXJfaW5mby1cXHUwMDNlZG1hLFxcbitcXHRcXHRcXHRcXHQgYWRhcHRlci1cXHUwMDNlcnhfYnVmZmVyX2xlbixcXG4rXFx0XFx0XFx0XFx0IERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdFxcdGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEgPSAwO1xcbitcXG4rY29weWJyZWFrX2RvbmU6XFxuIFxcdFxcdHNrYl9wdXQoc2tiLCBsZW5ndGgpO1xcbiBcXG4gXFx0XFx0LyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXFxuaW5kZXggMGNkMGU1NTk3YzkwOS4uYWJiYzcxZTgxNWFlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbkBAIC00LDYgKzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZ2VuZXJhdGVkL3V0c3JlbGVhc2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9wY3R5cGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9tYWN2bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG5AQCAtMjQxMSwxMCArMjQxMiwxMiBAQCB2b2lkIGk0MGVfYXFjX2FkZF9maWx0ZXJzKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcXG4gXFxuIFxcdGlmIChmY250ICE9IG51bV9hZGQpIHtcXG4gXFx0XFx0aWYgKHZzaS1cXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9NQUlOKSB7XFxuLVxcdFxcdFxcdHNldF9iaXQoX19JNDBFX1ZTSV9PVkVSRkxPV19QUk9NSVNDLCB2c2ktXFx1MDAzZXN0YXRlKTtcXG4tXFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnZzaS1cXHUwMDNlYmFjay1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHQgXFxcIkVycm9yICVzIGFkZGluZyBSWCBmaWx0ZXJzIG9uICVzLCBwcm9taXNjdW91cyBtb2RlIGZvcmNlZCBvblxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IGxpYmllX2FxX3N0cihhcV9zdGF0dXMpLCB2c2lfbmFtZSk7XFxuK1xcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHZzaS1cXHUwMDNlc3RhdGUpKSB7XFxuK1xcdFxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJFcnJvciAlcyBhZGRpbmcgUlggZmlsdGVycyBvbiAlcywgcHJvbWlzY3VvdXMgbW9kZSBmb3JjZWQgb25cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCBsaWJpZV9hcV9zdHIoYXFfc3RhdHVzKSwgdnNpX25hbWUpO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSBpZiAodnNpLVxcdTAwM2V0eXBlID09IEk0MEVfVlNJX1NSSU9WIHx8XFxuIFxcdFxcdFxcdCAgIHZzaS1cXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9WTURRMSB8fFxcbiBcXHRcXHRcXHQgICB2c2ktXFx1MDAzZXR5cGUgPT0gSTQwRV9WU0lfVk1EUTIpIHtcXG5AQCAtMjQ2NCwxMCArMjQ2NywxMSBAQCBpNDBlX2FxY19icm9hZGNhc3RfZmlsdGVyKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGFxX3JldCkge1xcbi1cXHRcXHRzZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVxcdTAwM2VzdGF0ZSk7XFxuLVxcdFxcdGRldl93YXJuKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0IFxcXCJFcnJvciAlcywgZm9yY2luZyBvdmVyZmxvdyBwcm9taXNjdW91cyBvbiAlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGxpYmllX2FxX3N0cihody1cXHUwMDNlYXEuYXNxX2xhc3Rfc3RhdHVzKSwgdnNpX25hbWUpO1xcbitcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoX19JNDBFX1ZTSV9PVkVSRkxPV19QUk9NSVNDLCB2c2ktXFx1MDAzZXN0YXRlKSkge1xcbitcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRXJyb3IgJXMsIGZvcmNpbmcgb3ZlcmZsb3cgcHJvbWlzY3VvdXMgb24gJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBsaWJpZV9hcV9zdHIoaHctXFx1MDAzZWFxLmFzcV9sYXN0X3N0YXR1cyksIHZzaV9uYW1lKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gYXFfcmV0O1xcbkBAIC0zNjIyLDcgKzM2MjYsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGk0MGVfcmluZyAqcmluZylcXG4gXFx0fVxcbiBcXG4gc2tpcDpcXG4tXFx0eGRwX2luaXRfYnVmZihcXHUwMDI2cmluZy1cXHUwMDNleGRwLCB4ZHBfZnJhbWVfc3osIFxcdTAwMjZyaW5nLVxcdTAwM2V4ZHBfcnhxKTtcXG4rXFx0eGRwX2luaXRfYnVmZihcXHUwMDI2cmluZy1cXHUwMDNleGRwX2N0eC54ZHAsIHhkcF9mcmFtZV9zeiwgXFx1MDAyNnJpbmctXFx1MDAzZXhkcF9yeHEpO1xcbiBcXG4gXFx0cnhfY3R4LmRidWZmID0gRElWX1JPVU5EX1VQKHJpbmctXFx1MDAzZXJ4X2J1Zl9sZW4sXFxuIFxcdFxcdFxcdFxcdCAgICBCSVRfVUxMKEk0MEVfUlhRX0NUWF9EQlVGRl9TSElGVCkpO1xcbkBAIC0xMzU4Miw2ICsxMzU4Niw1MyBAQCBzdGF0aWMgaW50IGk0MGVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGludCBpNDBlX3hkcF9yeF9oYXNoKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIHUzMiAqaGFzaCxcXG4rXFx0XFx0XFx0ICAgIGVudW0geGRwX3Jzc19oYXNoX3R5cGUgKnJzc190eXBlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpNDBlX3hkcF9idWZmICpjdHggPSAoY29uc3Qgdm9pZCAqKV9jdHg7XFxuK1xcdGNvbnN0IHVuaW9uIGk0MGVfcnhfZGVzYyAqZGVzYyA9IGN0eC1cXHUwMDNlZGVzYztcXG4rXFx0c3RydWN0IGxpYmV0aF9yeF9wdCByeF9wdHlwZTtcXG4rXFx0dTggcmF3X3J4X3B0eXBlO1xcbitcXHR1NjQgc3RhdHVzO1xcbitcXG4rXFx0c3RhdHVzID0gbGU2NF90b19jcHUoZGVzYy1cXHUwMDNld2IucXdvcmQxLnN0YXR1c19lcnJvcl9sZW4pO1xcbitcXHRyYXdfcnhfcHR5cGUgPSBGSUVMRF9HRVQoSTQwRV9SWERfUVcxX1BUWVBFX01BU0ssIHN0YXR1cyk7XFxuK1xcdHJ4X3B0eXBlID0gbGliaWVfcnhfcHRfcGFyc2UocmF3X3J4X3B0eXBlKTtcXG4rXFxuK1xcdGlmICghbGliZXRoX3J4X3B0X2hhc19oYXNoKGN0eC1cXHUwMDNleGRwLnJ4cS1cXHUwMDNlZGV2LCByeF9wdHlwZSkgfHxcXG4rXFx0ICAgIEZJRUxEX0dFVChJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfTUFTSywgc3RhdHVzKSAhPVxcbitcXHRcXHQgICAgSTQwRV9SWF9ERVNDX0ZMVFNUQVRfUlNTX0hBU0gpXFxuK1xcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFxuK1xcdCpoYXNoID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNld2IucXdvcmQwLmhpX2R3b3JkLnJzcyk7XFxuK1xcdCpyc3NfdHlwZSA9IHJ4X3B0eXBlLmhhc2hfdHlwZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGk0MGVfeGRwX3J4X3ZsYW5fdGFnKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIF9fYmUxNiAqdmxhbl9wcm90byxcXG4rXFx0XFx0XFx0XFx0dTE2ICp2bGFuX3RjaSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqY3R4ID0gKGNvbnN0IHZvaWQgKilfY3R4O1xcbitcXHRjb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2MgPSBjdHgtXFx1MDAzZWRlc2M7XFxuK1xcdHU2NCBzdGF0dXM7XFxuK1xcbitcXHRzdGF0dXMgPSBsZTY0X3RvX2NwdShkZXNjLVxcdTAwM2V3Yi5xd29yZDEuc3RhdHVzX2Vycm9yX2xlbik7XFxuK1xcbitcXHRpZiAoIShzdGF0dXMgXFx1MDAyNiBCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MMlRBRzFQX1NISUZUKSkpXFxuK1xcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFxuK1xcdCp2bGFuX3Byb3RvID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpO1xcbitcXHQqdmxhbl90Y2kgPSBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2V3Yi5xd29yZDAubG9fZHdvcmQubDJ0YWcxKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHhkcF9tZXRhZGF0YV9vcHMgaTQwZV94ZHBfbWV0YWRhdGFfb3BzID0ge1xcbitcXHQueG1vX3J4X2hhc2hcXHRcXHQ9IGk0MGVfeGRwX3J4X2hhc2gsXFxuK1xcdC54bW9fcnhfdmxhbl90YWdcXHQ9IGk0MGVfeGRwX3J4X3ZsYW5fdGFnLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNDBlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fb3BlblxcdFxcdD0gaTQwZV9vcGVuLFxcbiBcXHQubmRvX3N0b3BcXHRcXHQ9IGk0MGVfY2xvc2UsXFxuQEAgLTEzNzg0LDYgKzEzODM1LDcgQEAgc3RhdGljIGludCBpNDBlX2NvbmZpZ19uZXRkZXYoc3RydWN0IGk0MGVfdnNpICp2c2kpXFxuIFxcdGk0MGVfdnNpX2NvbmZpZ19uZXRkZXZfdGModnNpLCB2c2ktXFx1MDAzZXRjX2NvbmZpZy5lbmFibGVkX3RjKTtcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZpNDBlX25ldGRldl9vcHM7XFxuK1xcdG5ldGRldi1cXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFxcdTAwMjZpNDBlX3hkcF9tZXRhZGF0YV9vcHM7XFxuIFxcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XFxuIFxcdGk0MGVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xcbmluZGV4IGVmNWU2NTc4MTZmMDAuLjdmNjhhZGI1MTA5YjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcXG5AQCAtMjQzOCwxMCArMjQzOCwxMSBAQCBzdGF0aWMgaW50IGk0MGVfY2xlYW5fcnhfaXJxKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIGludCBidWRnZXQsXFxuIFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50ICpyeF9jbGVhbmVkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlcyA9IDAsIHRvdGFsX3J4X3BhY2tldHMgPSAwO1xcbitcXHRzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqeGRwX2N0eCA9IFxcdTAwMjZyeF9yaW5nLVxcdTAwM2V4ZHBfY3R4O1xcbiBcXHR1MTYgY2xlYW5lZF9jb3VudCA9IEk0MEVfREVTQ19VTlVTRUQocnhfcmluZyk7XFxuIFxcdHUxNiBjbGVhbl90aHJlc2hvbGQgPSByeF9yaW5nLVxcdTAwM2Vjb3VudCAvIDI7XFxuIFxcdHVuc2lnbmVkIGludCBvZmZzZXQgPSByeF9yaW5nLVxcdTAwM2VyeF9vZmZzZXQ7XFxuLVxcdHN0cnVjdCB4ZHBfYnVmZiAqeGRwID0gXFx1MDAyNnJ4X3JpbmctXFx1MDAzZXhkcDtcXG4rXFx0c3RydWN0IHhkcF9idWZmICp4ZHAgPSBcXHUwMDI2eGRwX2N0eC1cXHUwMDNleGRwO1xcbiBcXHR1bnNpZ25lZCBpbnQgeGRwX3htaXQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xcbiBcXHRib29sIGZhaWx1cmUgPSBmYWxzZTtcXG5AQCAtMjUzMCw2ICsyNTMxLDggQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LFxcbiBcXHRcXHRpZiAobmVvcClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHR4ZHBfY3R4LVxcdTAwM2VkZXNjID0gcnhfZGVzYztcXG4rXFxuIFxcdFxcdHhkcF9yZXMgPSBpNDBlX3J1bl94ZHAocnhfcmluZywgeGRwLCB4ZHBfcHJvZyk7XFxuIFxcbiBcXHRcXHRpZiAoeGRwX3Jlcykge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaFxcbmluZGV4IDFlNWZkNjNkNDdmNDcuLmJiNzQxZmYzZTVmMmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcXG5AQCAtMjgzLDYgKzI4MywxMSBAQCBzdHJ1Y3QgaTQwZV9yeF9idWZmZXIge1xcbiBcXHRfX3UzMiBwYWdlX2NvdW50O1xcbiB9O1xcbiBcXG4rc3RydWN0IGk0MGVfeGRwX2J1ZmYge1xcbitcXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xcbitcXHRjb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2M7XFxuK307XFxuK1xcbiBzdHJ1Y3QgaTQwZV9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCBwYWNrZXRzO1xcbiBcXHR1NjQgYnl0ZXM7XFxuQEAgLTM0NSw3ICszNTAsNyBAQCBzdHJ1Y3QgaTQwZV9yaW5nIHtcXG4gXFx0ICogYW5kIHRvIHJlc3VtZSBwYWNrZXQgYnVpbGRpbmcgZm9yIHRoaXMgcmluZyBpbiB0aGUgbmV4dCBjYWxsIHRvXFxuIFxcdCAqIGk0MGVfY2xlYW5fcnhfcmluZ19pcnEoKS5cXG4gXFx0ICovXFxuLVxcdHN0cnVjdCB4ZHBfYnVmZiB4ZHA7XFxuK1xcdHN0cnVjdCBpNDBlX3hkcF9idWZmIHhkcF9jdHg7XFxuIFxcbiBcXHQvKiBOZXh0IGRlc2NyaXB0b3IgdG8gYmUgcHJvY2Vzc2VkOyBuZXh0X3RvX2NsZWFuIGlzIHVwZGF0ZWQgb25seSBvblxcbiBcXHQgKiBwcm9jZXNzaW5nIEVPUCBkZXNjcmlwdG9yXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oXFxuaW5kZXggZWQ4YmJkYjU4NmRhOS4uMTZhNjVjNmU1MTUzNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R5cGUuaFxcbkBAIC00LDYgKzQsNyBAQFxcbiAjaWZuZGVmIF9JNDBFX1RZUEVfSF9cXG4gI2RlZmluZSBfSTQwRV9UWVBFX0hfXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaTQwZV9hZG1pbnEuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImk0MGVfaG1jLmhcXFwiXFxuQEAgLTY5OSw2ICs3MDAsMTAgQEAgZW51bSBpNDBlX3J4X2Rlc2Nfc3RhdHVzX2JpdHMge1xcbiBcXHRJNDBFX1JYX0RFU0NfU1RBVFVTX0xBU1QgLyogdGhpcyBlbnRyeSBtdXN0IGJlIGxhc3QhISEgKi9cXG4gfTtcXG4gXFxuKyNkZWZpbmUgSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX01BU0sgICAgICAgICAgICAgICAgICAgXFxcXFxcbitcXHRHRU5NQVNLX1VMTChJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfU0hJRlQgKyAxLCBcXFxcXFxuK1xcdFxcdCAgICBJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfU0hJRlQpXFxuK1xcbiAjZGVmaW5lIEk0MEVfUlhEX1FXMV9TVEFUVVNfU0hJRlRcXHQwXFxuICNkZWZpbmUgSTQwRV9SWERfUVcxX1NUQVRVU19NQVNLXFx0KChCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MQVNUKSAtIDEpIFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IFxcdTAwM2NcXHUwMDNjIEk0MEVfUlhEX1FXMV9TVEFUVVNfU0hJRlQpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xcbmluZGV4IDlmNDczODhlYWJhNTMuLjUxYTA1Y2U0YzdjZTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXFxuQEAgLTI0Niw2ICsyNDYsOCBAQCBib29sIGk0MGVfYWxsb2NfcnhfYnVmZmVyc196YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCB1MTYgY291bnQpXFxuIFxcdHUzMiBuYl9idWZmcywgaTtcXG4gXFx0ZG1hX2FkZHJfdCBkbWE7XFxuIFxcbitcXHRYU0tfQ0hFQ0tfUFJJVl9UWVBFKHN0cnVjdCBpNDBlX3hkcF9idWZmKTtcXG4rXFxuIFxcdHJ4X2Rlc2MgPSBJNDBFX1JYX0RFU0MocnhfcmluZywgbnR1KTtcXG4gXFx0eGRwID0gaTQwZV9yeF9iaShyeF9yaW5nLCBudHUpO1xcbiBcXG5AQCAtMzk2LDYgKzM5OCwxNCBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsXFxuIFxcdFdBUk5fT05fT05DRSgxKTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBpNDBlX3hkcF9idWZmICp4c2tfYnVmZl90b19pNDBlX2N0eChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4re1xcbitcXHQvKiB4ZHBfYnVmZiBwb2ludGVyIHVzZWQgYnkgWkMgY29kZSBwYXRoIGlzIGFsbG9jYXRlZCBhcyB4ZHBfYnVmZl94c2suXFxuK1xcdCAqIGk0MGVfeGRwX2J1ZmYgcHJpdmF0ZSBmaWVsZHMgb3ZlcmxhcCB3aXRoIHhkcF9idWZmX3hzay1cXHUwMDNlY2IuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gKHN0cnVjdCBpNDBlX3hkcF9idWZmICopeGRwO1xcbit9XFxuK1xcbiAvKipcXG4gICogaTQwZV9jbGVhbl9yeF9pcnFfemMgLSBDb25zdW1lcyBSeCBwYWNrZXRzIGZyb20gdGhlIGhhcmR3YXJlIHJpbmdcXG4gICogQHJ4X3Jpbmc6IFJ4IHJpbmdcXG5AQCAtNDcyLDYgKzQ4Miw4IEBAIGludCBpNDBlX2NsZWFuX3J4X2lycV96YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0KVxcbiBcXHRcXHRpZiAoaTQwZV9pc19ub25fZW9wKHJ4X3JpbmcsIHJ4X2Rlc2MpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdHhza19idWZmX3RvX2k0MGVfY3R4KGZpcnN0KS1cXHUwMDNlZGVzYyA9IHJ4X2Rlc2M7XFxuK1xcbiBcXHRcXHR4ZHBfcmVzID0gaTQwZV9ydW5feGRwX3pjKHJ4X3JpbmcsIGZpcnN0LCB4ZHBfcHJvZyk7XFxuIFxcdFxcdGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMocnhfcmluZywgZmlyc3QsIHJ4X2Rlc2MsIFxcdTAwMjZyeF9wYWNrZXRzLFxcbiBcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZyeF9ieXRlcywgeGRwX3JlcywgXFx1MDAyNmZhaWx1cmUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9oZWFsdGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jXFxuaW5kZXggOGU5YThhODE3OGQ0OC4uYTgzZWI5ZjEwNGM4MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9oZWFsdGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jXFxuQEAgLTEwMSw2ICsxMDEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9oZWFsdGhfc3RhdHVzIGljZV9oZWFsdGhfc3RhdHVzX2xvb2t1cFtdID0ge1xcbiBcXHRcXHRcXFwiU3VwcGxpZWQgTUlCIGZpbGUgaXMgaW52YWxpZC4gRENCIHJldmVydGVkIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cXFwiLFxcbiBcXHRcXHRcXFwiRGlzYWJsZSBGVy1MTERQIGFuZCBjaGVjayBEQ0J4IHN5c3RlbSBjb25maWd1cmF0aW9uLlxcXCIsXFxuIFxcdFxcdHtpY2VfcG9ydF9udW1iZXJfbGFiZWwsIFxcXCJNSUIgSURcXFwifX0sXFxuK1xcdHtJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0ssIFxcXCJMb2NhbCBEUExMIGxvY2sgc3RhdHVzXFxcIixcXG4rXFx0XFx0TlVMTCx9LFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBpY2VfaGVhbHRoX3N0YXR1c19sb29rdXBfY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbkBAIC0yNDIsNiArMjQ0LDEwIEBAIHZvaWQgaWNlX3Byb2Nlc3NfaGVhbHRoX3N0YXR1c19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9ycV9ldmVudF9pbmZvXFxuIFxcdFxcdFxcdFxcdHBmLVxcdTAwM2VoZWFsdGhfcmVwb3J0ZXJzLmZ3X3N0YXR1cyA9ICpoZWFsdGhfaW5mbztcXG4gXFx0XFx0XFx0XFx0ZGV2bGlua19oZWFsdGhfcmVwb3J0KHBmLVxcdTAwM2VoZWFsdGhfcmVwb3J0ZXJzLmZ3LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiRlcgc3luZHJvbWUgcmVwb3J0ZWRcXFwiLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHN0YXR1c19jb2RlID09IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgdGVzdF9iaXQoSUNFX0ZMQUdfRFBMTCwgcGYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgcGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZClcXG4rXFx0XFx0XFx0XFx0XFx0aWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHBmLCBoZWFsdGhfaW5mbywgdHJ1ZSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIElDRV9BUUNfSEVBTFRIX1NUQVRVU19QRjpcXG4gXFx0XFx0XFx0Y2FzZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfUE9SVDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZG1pbnFfY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaFxcbmluZGV4IDQyODc4YWJhYzllYjEuLjg0OGFjNTgzNDI5NzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZG1pbnFfY21kLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaFxcbkBAIC0xNTAwLDYgKzE1MDAsNyBAQCBzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua190b3BvIHtcXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9QQ0E5NTc1XFx0XFx0MHgyMVxcbiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMMzA2MzJfODAwMzJcXHQweDI0XFxuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfU0k1MzgzXzUzODRcXHQweDI1XFxuKyNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfWkw4MDY0MFxcdFxcdDB4MjdcXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9FODIyX1BIWVxcdFxcdDB4MzBcXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9DODI3XFx0XFx0MHgzMVxcbiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX0dFTl9DTEtfTVVYXFx0MHg0N1xcbkBAIC0yNDgzLDExICsyNDg0LDE0IEBAIGVudW0gaWNlX2FxY19oZWFsdGhfc3RhdHVzIHtcXG4gXFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9CTUNfUkVTRVRcXHRcXHRcXHQ9IDB4NTBCLFxcbiBcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfTU5HX0ZBSUxcXHRcXHRcXHQ9IDB4NTBDLFxcbiBcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX1JFU09VUkNFX0FMTE9DX0ZBSUxcXHRcXHQ9IDB4NTBELFxcbitcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0tcXHRcXHRcXHQ9IDB4NjAxLFxcbiBcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0ZXX0xPT1BcXHRcXHRcXHQ9IDB4MTAwMCxcXG4gXFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9GV19QRlJfRkFJTFxcdFxcdFxcdD0gMHgxMDAxLFxcbiBcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfRkFJTF9BUVxcdFxcdFxcdD0gMHgxMDAyLFxcbiB9O1xcbiBcXG4rI2RlZmluZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfQ09ERV9OVU1cXHRcXHRcXHRcXHQ2NFxcbitcXG4gLyogR2V0IEhlYWx0aCBTdGF0dXMgKGluZGlyZWN0IDB4RkYyMikgKi9cXG4gc3RydWN0IGljZV9hcWNfZ2V0X2hlYWx0aF9zdGF0dXMge1xcbiBcXHRfX2xlMTYgaGVhbHRoX3N0YXR1c19jb3VudDtcXG5AQCAtMjUxNCw2ICsyNTE4LDEzIEBAIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSB7XFxuIFxcdF9fbGUzMiBpbnRlcm5hbF9kYXRhMjtcXG4gfTtcXG4gXFxuKy8qIEdldCBIZWFsdGggU3RhdHVzIHJlc3BvbnNlIGJ1ZmZlciBlbnRyeSwgKDB4RkYyMSlcXG4rICogcmVwZWF0ZWQgcGVyIHJlcG9ydGVkIGhlYWx0aCBzdGF0dXNcXG4rICovXFxuK3N0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtIHtcXG4rXFx0X19sZTE2IGhlYWx0aF9zdGF0dXNfY29kZTtcXG4rfTtcXG4rXFxuIC8qIEFkbWluIFF1ZXVlIGNvbW1hbmQgb3Bjb2RlcyAqL1xcbiBlbnVtIGljZV9hZG1pbnFfb3BjIHtcXG4gXFx0LyogQVEgY29tbWFuZHMgKi9cXG5AQCAtMjY3Nyw2ICsyNjg4LDcgQEAgZW51bSBpY2VfYWRtaW5xX29wYyB7XFxuIFxcbiBcXHQvKiBTeXN0ZW0gRGlhZ25vc3RpYyBjb21tYW5kcyAqL1xcbiBcXHRpY2VfYXFjX29wY19zZXRfaGVhbHRoX3N0YXR1c19jZmdcXHRcXHQ9IDB4RkYyMCxcXG4rXFx0aWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzXFx0PSAweEZGMjEsXFxuIFxcdGljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzXFx0XFx0XFx0PSAweEZGMjIsXFxuIFxcbiBcXHQvKiBGVyBMb2dnaW5nIENvbW1hbmRzICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXFxuaW5kZXggZWYxY2UxMDZmODFiNS4uMmM3MmVkMTg2OTVjNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xcbkBAIC0zMDQ4LDYgKzMwNDgsMjkgQEAgYm9vbCBpY2VfaXNfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3QgLSBjaGVjayBmb3IgdW5tYW5hZ2VkIENHVSBwcmVzZW5jZVxcbisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxcbisgKlxcbisgKiBDaGVjayBpZiB0aGUgdW5tYW5hZ2VkIENsb2NrIEdlbmVyYXRpb24gVW5pdCAoQ0dVKSBkZXZpY2UgaXMgcHJlc2VudCBpbiB0aGUgbmV0bGlzdC5cXG4rICogU2F2ZSB0aGUgQ0dVIHBhcnQgbnVtYmVyIGluIHRoZSBodyBzdHJ1Y3R1cmUgZm9yIGxhdGVyIHVzZS5cXG4rICogUmV0dXJuOlxcbisgKiAqIHRydWUgLSB1bm1hbmFnZWQgY2d1IGlzIHByZXNlbnRcXG4rICogKiBmYWxzZSAtIHVubWFuYWdlZCBjZ3UgaXMgbm90IHByZXNlbnRcXG4rICovXFxuK2Jvb2wgaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodylcXG4re1xcbitcXHRpZiAoIWljZV9maW5kX25ldGxpc3Rfbm9kZShodywgSUNFX0FRQ19MSU5LX1RPUE9fTk9ERV9UWVBFX0NMS19DVFJMLFxcbitcXHRcXHRcXHRcXHQgICBJQ0VfQVFDX0xJTktfVE9QT19OT0RFX0NUWF9HTE9CQUwsXFxuK1xcdFxcdFxcdFxcdCAgIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDAsXFxuK1xcdFxcdFxcdFxcdCAgIE5VTEwpKSB7XFxuK1xcdFxcdGh3LVxcdTAwM2VjZ3VfcGFydF9udW1iZXIgPSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2lzX2dwc19pbl9uZXRsaXN0XFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XFxuQEAgLTYzMTIsNiArNjMzNSwxMTkgQEAgYm9vbCBpY2VfaXNfZndfaGVhbHRoX3JlcG9ydF9zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcdFxcdFxcdFxcdCAgICAgSUNFX0ZXX0FQSV9IRUFMVEhfUkVQT1JUX1BBVENIKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQgLSBnZXQgc3VwcG9ydGVkIGhlYWx0aCBzdGF0dXMgY29kZXNcXG4rICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcXG4rICogQGJ1ZmY6IHBvaW50ZXIgdG8gYnVmZmVyIHdoZXJlIGhlYWx0aCBzdGF0dXMgZWxlbWVudHMgd2lsbCBiZSBzdG9yZWRcXG4rICogQG51bTogbnVtYmVyIG9mIGhlYWx0aCBzdGF0dXMgZWxlbWVudHMgYnVmZmVyIGNhbiBob2xkXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAwIC0gc3VjY2VzcyxcXG4rICogKiBuZWdhdGl2ZSAtIEFRIGVycm9yIGNvZGUuXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK2ljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtICpidWZmLFxcbitcXHRcXHRcXHRcXHQgICBpbnQgbnVtKVxcbit7XFxuK1xcdHUxNiBjb2RlID0gaWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzO1xcbitcXHRzdHJ1Y3QgbGliaWVfYXFfZGVzYyBkZXNjO1xcbitcXG4rXFx0aWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoXFx1MDAyNmRlc2MsIGNvZGUpO1xcbitcXG4rXFx0cmV0dXJuIGljZV9hcV9zZW5kX2NtZChodywgXFx1MDAyNmRlc2MsIGJ1ZmYsIG51bSAqIHNpemVvZigqYnVmZiksIE5VTEwpO1xcbit9XFxuK1xcbisvKipcXG4rICogaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzIC0gZ2V0IGN1cnJlbnQgaGVhbHRoIHN0YXR1cyBhcnJheSBmcm9tIHRoZSBmaXJtd2FyZVxcbisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbisgKiBAYnVmZjogcG9pbnRlciB0byBidWZmZXIgd2hlcmUgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyB3aWxsIGJlIHN0b3JlZFxcbisgKiBAbnVtOiBudW1iZXIgb2YgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyBidWZmZXIgY2FuIGhvbGRcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgLSBzdWNjZXNzLFxcbisgKiAqIG5lZ2F0aXZlIC0gQVEgZXJyb3IgY29kZS5cXG4rICovXFxuK2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBsaWJpZV9hcV9kZXNjIGRlc2M7XFxuK1xcbitcXHRpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYyhcXHUwMDI2ZGVzYyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgaWNlX2FxY19vcGNfZ2V0X2hlYWx0aF9zdGF0dXMpO1xcbitcXG4rXFx0cmV0dXJuIGljZV9hcV9zZW5kX2NtZChodywgXFx1MDAyNmRlc2MsIGJ1ZmYsIG51bSAqIHNpemVvZigqYnVmZiksIE5VTEwpO1xcbit9XFxuK1xcbisvKipcXG4rICogaWNlX2lzX2hlYWx0aF9zdGF0dXNfY29kZV9zdXBwb3J0ZWQgLSBjaGVjayBpZiBoZWFsdGggc3RhdHVzIGNvZGUgaXMgc3VwcG9ydGVkXFxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuKyAqIEBjb2RlOiBoZWFsdGggc3RhdHVzIGNvZGUgdG8gY2hlY2tcXG4rICogQHN1cHBvcnRlZDogcG9pbnRlciB0byBib29sZWFuIHJlc3VsdFxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2VcXG4rICovXFxuK2ludCBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IGNvZGUsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgKnN1cHBvcnRlZClcXG4re1xcbitcXHRjb25zdCBpbnQgQlVGRl9TSVpFID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNO1xcbitcXHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSAqYnVmZjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdCpzdXBwb3J0ZWQgPSBmYWxzZTtcXG4rXFx0YnVmZiA9IGt6YWxsb2Nfb2JqcygqYnVmZiwgQlVGRl9TSVpFKTtcXG4rXFx0aWYgKCFidWZmKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmV0ID0gaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzX3N1cHBvcnRlZChodywgYnVmZiwgQlVGRl9TSVpFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBmcmVlX2J1ZmY7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgQlVGRl9TSVpFIFxcdTAwMjZcXHUwMDI2IGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlOyBpKyspXFxuK1xcdFxcdGlmIChsZTE2X3RvX2NwdShidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZSkgPT0gY29kZSkge1xcbitcXHRcXHRcXHQqc3VwcG9ydGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK2ZyZWVfYnVmZjpcXG4rXFx0a2ZyZWUoYnVmZik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlIC0gZ2V0IGxhc3QgaGVhbHRoIHN0YXR1cyBmb3IgZ2l2ZW4gY29kZVxcbisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbisgKiBAb3V0OiBwb2ludGVyIHRvIHRoZSBoZWFsdGggc3RhdHVzIHN0cnVjdCB0byBiZSBmaWxsZWRcXG4rICogQGNvZGU6IGhlYWx0aCBzdGF0dXMgY29kZSB0byBjaGVja1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2VcXG4rICovXFxuK2ludCBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKHN0cnVjdCBpY2VfaHcgKmh3LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpvdXQsXFxuK1xcdFxcdFxcdFxcdCAgICB1MTYgY29kZSlcXG4re1xcbitcXHRjb25zdCBpbnQgQlVGRl9TSVpFID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNO1xcbitcXHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmY7XFxuK1xcdGludCByZXQsIGxhc3Rfc3RhdHVzID0gLTE7XFxuK1xcbitcXHRidWZmID0ga3phbGxvY19vYmpzKCpidWZmLCBCVUZGX1NJWkUpO1xcbitcXHRpZiAoIWJ1ZmYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRyZXQgPSBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoaHcsIGJ1ZmYsIEJVRkZfU0laRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZnJlZV9idWZmO1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIEJVRkZfU0laRSBcXHUwMDI2XFx1MDAyNiBidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZTsgaSsrKVxcbitcXHRcXHRpZiAobGUxNl90b19jcHUoYnVmZltpXS5oZWFsdGhfc3RhdHVzX2NvZGUpID09IGNvZGUpXFxuK1xcdFxcdFxcdGxhc3Rfc3RhdHVzID0gaTtcXG4rXFxuK1xcdGlmIChsYXN0X3N0YXR1cyBcXHUwMDNlPSAwKVxcbitcXHRcXHRtZW1jcHkob3V0LCBcXHUwMDI2YnVmZltsYXN0X3N0YXR1c10sIHNpemVvZigqb3V0KSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWVtc2V0KG91dCwgMCwgc2l6ZW9mKCpvdXQpKTtcXG4rXFxuK2ZyZWVfYnVmZjpcXG4rXFx0a2ZyZWUoYnVmZik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfYXFfc2V0X2hlYWx0aF9zdGF0dXNfY2ZnIC0gQ29uZmlndXJlIEZXIGhlYWx0aCBldmVudHNcXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcXG5pbmRleCA5ZjUzNDQyMTIxOTU1Li41MTAzNjE4OGNkMzk2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oXFxuQEAgLTE2Miw2ICsxNjIsNyBAQCBpY2VfYXFfZ2V0X3BoeV9jYXBzKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBxdWFsX21vZHMsIHU4IHJlcG9ydF9tb2RlLFxcbiBib29sIGljZV9pc19waHlfcmNsa19pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4gYm9vbCBpY2VfaXNfY2xvY2tfbXV4X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xcbiBib29sIGljZV9pc19jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuK2Jvb2wgaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuIGJvb2wgaWNlX2lzX2dwc19pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4gaW50XFxuIGljZV9hcV9nZXRfbmV0bGlzdF9ub2RlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua190b3BvICpjbWQsXFxuQEAgLTE4OCw2ICsxODksMTMgQEAgaWNlX2dldF9saW5rX2RlZmF1bHRfb3ZlcnJpZGUoc3RydWN0IGljZV9saW5rX2RlZmF1bHRfb3ZlcnJpZGVfdGx2ICpsZG8sXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSk7XFxuIGJvb2wgaWNlX2lzX3BoeV9jYXBzX2FuX2VuYWJsZWQoc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHMpO1xcbiBib29sIGljZV9pc19md19oZWFsdGhfcmVwb3J0X3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuK2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKTtcXG4raW50IGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgY29kZSxcXG4rXFx0XFx0XFx0XFx0XFx0Ym9vbCAqc3VwcG9ydGVkKTtcXG4raW50IGljZV9nZXRfbGFzdF9oZWFsdGhfc3RhdHVzX2NvZGUoc3RydWN0IGljZV9odyAqaHcsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKm91dCxcXG4rXFx0XFx0XFx0XFx0ICAgIHUxNiBjb2RlKTtcXG4gaW50IGljZV9hcV9zZXRfaGVhbHRoX3N0YXR1c19jZmcoc3RydWN0IGljZV9odyAqaHcsIHU4IGV2ZW50X3NvdXJjZSk7XFxuIGludCBpY2VfYXFfZ2V0X3BoeV9lcXVhbGl6YXRpb24oc3RydWN0IGljZV9odyAqaHcsIHUxNiBkYXRhX2luLCB1MTYgb3BfY29kZSxcXG4gXFx0XFx0XFx0XFx0dTggc2VyZGVzX251bSwgaW50ICpvdXRwdXQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuY1xcbmluZGV4IGExMGMxYzhkODY5NzcuLmJiNWNjMGEyYmE2OWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmNcXG5AQCAtODcyLDcgKzg3Miw3IEBAIHN0YXRpYyBpbnQgaWNlX2RjYm5sX2RlbGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGlmIChwZi1cXHUwMDNlZGNieF9jYXAgXFx1MDAyNiBEQ0JfQ0FQX0RDQlhfTExEX01BTkFHRUQpIHtcXG4tXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJjYW4ndCBkZWxldGUgRFNDUCBuZXRsaW5rIGFwcCB3aGVuIEZXIERDQiBhZ2VudCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcImNhbid0IGRlbGV0ZSBEU0NQIG5ldGxpbmsgYXBwIHdoZW4gRlcgRENCIGFnZW50IGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuaW5kZXggODVhNzRjZDZlYTFmMy4uMWNhMTM3ZjY3ZGQ0OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuQEAgLTE5LDYgKzE5LDggQEBcXG4gI2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9TRlBcXHRcXHQ0XFxuICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfUVNGUFxcdFxcdDZcXG4gI2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fT1VUUFVUX0JBU0VcXHRcXHQwXFxuKyNkZWZpbmUgSUNFX0RQTExfSEVBTFRIX1NUQVRVU19MT0NLRURcXHRcXHQxXFxuKyNkZWZpbmUgSUNFX0RQTExfSEVBTFRIX1NUQVRVU19VTkxPQ0tFRFxcdFxcdDBcXG4gXFxuICNkZWZpbmUgRTgyNV9SQ0xLX1BBUkVOVF8wX1BJTl9JRFhcXHRcXHQwXFxuICNkZWZpbmUgRTgyNV9SQ0xLX1BBUkVOVF8xX1BJTl9JRFhcXHRcXHQxXFxuQEAgLTg5LDYgKzkxLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xcbiBcXHREUExMX1BJTl9GUkVRVUVOQ1lfUkFOR0UoMCwgRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFopLFxcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZFtdID0ge1xcbitcXHREUExMX1BJTl9GUkVRVUVOQ1lfMVBQUyxcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9pc19zd19waW4gLSBjaGVjayBpZiBnaXZlbiBwaW4gc2hhbGwgYmUgY29udHJvbGxlZCBieSBTV1xcbiAgKiBAcGY6IHByaXZhdGUgYm9hcmQgc3RydWN0dXJlXFxuQEAgLTEwOTgsOSArMTEwNCwxMSBAQCBpY2VfZHBsbF9waW5fc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4tXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRpZiAoIXBmLVxcdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuIFxcdGlmIChwaW5fdHlwZSA9PSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCB8fFxcbiBcXHQgICAgcGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUKVxcbiBcXHRcXHQqc3RhdGUgPSBwLVxcdTAwM2VzdGF0ZVtkLVxcdTAwM2VkcGxsX2lkeF07XFxuQEAgLTIyNDMsOSArMjI1MSwxNCBAQCBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuLVxcdGVzeW5jLVxcdTAwM2VyYW5nZSA9IGljZV9lc3luY19yYW5nZTtcXG4tXFx0ZXN5bmMtXFx1MDAzZXJhbmdlX251bSA9IEFSUkFZX1NJWkUoaWNlX2VzeW5jX3JhbmdlKTtcXG4tXFx0aWYgKHAtXFx1MDAzZWZsYWdzWzBdIFxcdTAwMjYgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOKSB7XFxuK1xcdGlmIChwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XFxuK1xcdFxcdGVzeW5jLVxcdTAwM2VyYW5nZSA9IGljZV9lc3luY19yYW5nZV91bm1hbmFnZWQ7XFxuK1xcdFxcdGVzeW5jLVxcdTAwM2VyYW5nZV9udW0gPSBBUlJBWV9TSVpFKGljZV9lc3luY19yYW5nZV91bm1hbmFnZWQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlc3luYy1cXHUwMDNlcmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2U7XFxuK1xcdFxcdGVzeW5jLVxcdTAwM2VyYW5nZV9udW0gPSBBUlJBWV9TSVpFKGljZV9lc3luY19yYW5nZSk7XFxuK1xcdH1cXG4rXFx0aWYgKHAtXFx1MDAzZWZsYWdzWzBdIFxcdTAwMjYgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRCkge1xcbiBcXHRcXHRlc3luYy1cXHUwMDNlZnJlcSA9IERQTExfUElOX0ZSRVFVRU5DWV8xX0haO1xcbiBcXHRcXHRlc3luYy1cXHUwMDNlcHVsc2UgPSBJQ0VfRFBMTF9QSU5fRVNZTkNfUFVMU0VfSElHSF9QRVJDRU5UO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0yODc2LDYgKzI4ODksMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgaWNlX2RwbGxfb3V0cHV0X29wcyA9IHtcXG4gXFx0LmVzeW5jX2dldCA9IGljZV9kcGxsX291dHB1dF9lc3luY19nZXQsXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzID0ge1xcbitcXHQuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX2lucHV0X2ZyZXF1ZW5jeV9nZXQsXFxuK1xcdC5kaXJlY3Rpb25fZ2V0ID0gaWNlX2RwbGxfaW5wdXRfZGlyZWN0aW9uLFxcbitcXHQuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQsXFxuK1xcdC5lc3luY19nZXQgPSBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyA9IHtcXG4rXFx0LmZyZXF1ZW5jeV9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfZnJlcXVlbmN5X2dldCxcXG4rXFx0LmRpcmVjdGlvbl9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfZGlyZWN0aW9uLFxcbitcXHQuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfc3RhdGVfZ2V0LFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgaWNlX2RwbGxfb3BzID0ge1xcbiBcXHQubG9ja19zdGF0dXNfZ2V0ID0gaWNlX2RwbGxfbG9ja19zdGF0dXNfZ2V0LFxcbiBcXHQubW9kZV9nZXQgPSBpY2VfZHBsbF9tb2RlX2dldCxcXG5AQCAtMzQzOSw4ICszNDY1LDEwIEBAIGljZV9kcGxsX2RlaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZHBsbF9kZXZpY2UgKnNlY29uZClcXG4ge1xcbiBcXHRpZiAoY2d1KSB7XFxuLVxcdFxcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XFxuLVxcdFxcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpO1xcbitcXHRcXHRpZiAoZmlyc3QpXFxuK1xcdFxcdFxcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XFxuK1xcdFxcdGlmIChzZWNvbmQpXFxuK1xcdFxcdFxcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpO1xcbiBcXHR9XFxuIFxcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhwaW5zLCBjb3VudCk7XFxuIH1cXG5AQCAtMzQ3MiwxMiArMzUwMCwxNSBAQCBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSxcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IGljZV9kcGxsX2dldF9waW5zKHBmLCBwaW5zLCBzdGFydF9pZHgsIGNvdW50LCBwZi1cXHUwMDNlZHBsbHMuY2xvY2tfaWQpO1xcbi1cXHRpZiAocmV0KVxcbitcXHRpZiAoIWNndSB8fCByZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdGlmIChjZ3UpIHtcXG4rXFxuK1xcdGlmIChmaXJzdCkge1xcbiBcXHRcXHRyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byByZWxlYXNlX3BpbnM7XFxuK1xcdH1cXG4rXFx0aWYgKHNlY29uZCkge1xcbiBcXHRcXHRyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKHNlY29uZCwgcGlucywgb3BzLCBjb3VudCk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gdW5yZWdpc3Rlcl9maXJzdDtcXG5AQCAtMzQ4Niw3ICszNTE3LDggQEAgaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gdW5yZWdpc3Rlcl9maXJzdDpcXG4tXFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcXG4rXFx0aWYgKGZpcnN0KVxcbitcXHRcXHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZmlyc3QsIHBpbnMsIG9wcywgY291bnQpO1xcbiByZWxlYXNlX3BpbnM6XFxuIFxcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhwaW5zLCBjb3VudCk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTM4MjQsNiArMzg1NiwxOCBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXFxuIFxcdHN0cnVjdCBpY2VfZHBsbCAqZGUgPSBcXHUwMDI2ZC1cXHUwMDNlZWVjO1xcbiBcXHRzdHJ1Y3QgaWNlX2RwbGwgKmRwID0gXFx1MDAyNmQtXFx1MDAzZXBwcztcXG4gXFxuK1xcdGlmIChkLVxcdTAwM2V1bm1hbmFnZWQpIHtcXG4rXFx0XFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGRwLVxcdTAwM2VkcGxsLCBpbnB1dHMsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aWNlX2RwbGxfaW5wdXRfdW5tYW5hZ2VkX29wcyxcXG4rXFx0XFx0XFx0XFx0XFx0IG51bV9pbnB1dHMpO1xcbitcXHRcXHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtXFx1MDAzZWRwbGwsIG91dHB1dHMsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aWNlX2RwbGxfb3V0cHV0X3VubWFuYWdlZF9vcHMsXFxuK1xcdFxcdFxcdFxcdFxcdCBudW1fb3V0cHV0cyk7XFxuK1xcdFxcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhpbnB1dHMsIG51bV9pbnB1dHMpO1xcbitcXHRcXHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMob3V0cHV0cywgbnVtX291dHB1dHMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGljZV9kcGxsX2RlaW5pdF9yY2xrX3BpbihwZik7XFxuIFxcdGlmIChwZi1cXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcXG4gXFx0XFx0aWNlX2RwbGxfZGVpbml0X3R4Y2xrX3BpbnMocGYpO1xcbkBAIC00MDgyLDIzICs0MTI2LDI5IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcXG4gXFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqaW5wdXRfb3BzO1xcbiBcXHRpbnQgcmV0LCBjb3VudDtcXG4gXFxuLVxcdGlucHV0X29wcyA9IFxcdTAwMjZpY2VfZHBsbF9pbnB1dF9vcHM7XFxuLVxcdG91dHB1dF9vcHMgPSBcXHUwMDI2aWNlX2RwbGxfb3V0cHV0X29wcztcXG4rXFx0aWYgKCFwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XFxuK1xcdFxcdGlucHV0X29wcyA9IFxcdTAwMjZpY2VfZHBsbF9pbnB1dF9vcHM7XFxuK1xcdFxcdG91dHB1dF9vcHMgPSBcXHUwMDI2aWNlX2RwbGxfb3V0cHV0X29wcztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aW5wdXRfb3BzID0gXFx1MDAyNmljZV9kcGxsX2lucHV0X3VubWFuYWdlZF9vcHM7XFxuK1xcdFxcdG91dHB1dF9vcHMgPSBcXHUwMDI2aWNlX2RwbGxfb3V0cHV0X3VubWFuYWdlZF9vcHM7XFxuK1xcdH1cXG4gXFxuIFxcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXFx1MDAzZWRwbGxzLmlucHV0cywgMCxcXG4gXFx0XFx0XFx0XFx0XFx0cGYtXFx1MDAzZWRwbGxzLm51bV9pbnB1dHMsIGlucHV0X29wcyxcXG4tXFx0XFx0XFx0XFx0XFx0cGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsLFxcbi1cXHRcXHRcXHRcXHRcXHRwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGwpO1xcbitcXHRcXHRcXHRcXHRcXHRwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGwsIHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdGNvdW50ID0gcGYtXFx1MDAzZWRwbGxzLm51bV9pbnB1dHM7XFxuLVxcdGlmIChjZ3UpIHtcXG4rXFx0aWYgKGNndSB8fCBwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXFx1MDAzZWRwbGxzLm91dHB1dHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNvdW50LCBwZi1cXHUwMDNlZHBsbHMubnVtX291dHB1dHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdG91dHB1dF9vcHMsIHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0cGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBkZWluaXRfaW5wdXRzO1xcbitcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZClcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGNvdW50ICs9IHBmLVxcdTAwM2VkcGxscy5udW1fb3V0cHV0cztcXG4gXFx0XFx0aWYgKCFwZi1cXHUwMDNlZHBsbHMuZ2VuZXJpYykge1xcbiBcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVxcdTAwM2VkcGxscy5zbWEsXFxuQEAgLTQyMDYsMTIgKzQyNTYsMTMgQEAgaWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcdGQtXFx1MDAzZXBmID0gcGY7XFxuLVxcdGlmIChjZ3UgfHwgcGYtXFx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XFxuK1xcdGlmIChjZ3UgfHwgcGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZCB8fFxcbitcXHQgICAgcGYtXFx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcyA9IFxcdTAwMjZpY2VfZHBsbF9vcHM7XFxuIFxcbiBcXHRcXHRpZiAodHlwZSA9PSBEUExMX1RZUEVfUFBTIFxcdTAwMjZcXHUwMDI2IGljZV9kcGxsX2lzX3Bwc19waGFzZV9tb25pdG9yKHBmKSlcXG4gXFx0XFx0XFx0b3BzID0gIFxcdTAwMjZpY2VfZHBsbF9wb21fb3BzO1xcbi1cXHRcXHRpZiAoY2d1KVxcbitcXHRcXHRpZiAoY2d1IFxcdTAwMjZcXHUwMDI2ICFwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKVxcbiBcXHRcXHRcXHRpY2VfZHBsbF91cGRhdGVfc3RhdGUocGYsIGQsIHRydWUpO1xcbiBcXHRcXHRyZXQgPSBkcGxsX2RldmljZV9yZWdpc3RlcihkLVxcdTAwM2VkcGxsLCB0eXBlLCBvcHMsIGQpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuQEAgLTQyMzksNiArNDI5MCwzMyBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfd29ya2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRrdGhyZWFkX2Rlc3Ryb3lfd29ya2VyKGQtXFx1MDAzZWt3b3JrZXIpO1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyAtIGZpbmQgcGluIGZyZXF1ZW5jeSBmcm9tIHN1cHBvcnRlZCBvbmVzXFxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuKyAqIEBwaW5faWR4OiBwaW4gaW5kZXhcXG4rICogQGlucHV0OiBpZiBpbnB1dCBwaW5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyB0aHJvdWdoIHRoZSBhcnJheSBvZiBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMgZm9yIGFcXG4rICogRFBMTCBwaW4gYW5kIHJldHVybnMgc2luZ2xlIGZyZXF1ZW5jeSBwaW4gaXMgY2FwYWJsZSwgaWYgcGluIHN1cHBvcnQgb25seVxcbisgKiBvbmUgZnJlcXVlbmN5LiBTaGFsbCBiZSB1c2VkIG9ubHkgZm9yIGRwbGwgd2l0aCBkcml2ZXIgaGFyZGNvZGVkIGZyZXF1ZW5jeS5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgLSBmYWlsdXJlLCBwaW4gdXNlcyBtdWx0aXBsZSBmcmVxdWVuY2llcyxcXG4rICogKiBmcmVxdWVuY3kgLSBzdWNjZXNzLlxcbisgKi9cXG4rc3RhdGljIHU2NCBpY2VfZHBsbF9waW5fZnJlcV9pbmZvKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwaW5faWR4LCBib29sIGlucHV0KVxcbit7XFxuK1xcdHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKmZyZXFzO1xcbitcXHR1OCBmcmVxX251bTtcXG4rXFxuK1xcdC8qIEdldCBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMgZm9yIHRoaXMgcGluICovXFxuK1xcdGZyZXFzID0gaWNlX2NndV9nZXRfcGluX2ZyZXFfc3VwcChodywgcGluX2lkeCwgaW5wdXQsIFxcdTAwMjZmcmVxX251bSk7XFxuK1xcdGlmICghZnJlcXMgfHwgZnJlcV9udW0gIT0gMSB8fCBmcmVxc1swXS5taW4gIT0gZnJlcXNbMF0ubWF4KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBmcmVxc1swXS5taW47XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyXFxuICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG5AQCAtNDM5OCw2ICs0NDc2LDE5IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcXG4gXFx0XFx0cGluc1tpXS5wcm9wLmJvYXJkX2xhYmVsID0gaWNlX2NndV9nZXRfcGluX25hbWUoaHcsIGksIGlucHV0KTtcXG4gXFx0XFx0cGluc1tpXS5wcm9wLnR5cGUgPSBpY2VfY2d1X2dldF9waW5fdHlwZShodywgaSwgaW5wdXQpO1xcbiBcXHRcXHRpZiAoaW5wdXQpIHtcXG4rXFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcXG4rXFx0XFx0XFx0XFx0cGluc1tpXS5mcmVxID0gaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhodywgaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5wdXQpO1xcbitcXHRcXHRcXHRcXHRwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xcbitcXHRcXHRcXHRcXHRwaW5zW2ldLnN0YXR1cyA9XFxuK1xcdFxcdFxcdFxcdFxcdElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfU1RBVFVTX0VTWU5DX0NBUDtcXG4rXFx0XFx0XFx0XFx0cGluc1tpXS5mbGFnc1swXSA9IElDRV9EUExMX0lOX0VTWU5DX0VOQUJMRUQ7XFxuK1xcdFxcdFxcdFxcdC8qIHNraXAgcHJpb3JpdHksIGNhcGFiaWxpdGllcywgcGhhc2UgcmFuZ2UsXFxuK1xcdFxcdFxcdFxcdCAqIHBpbiBzdGF0ZSBBUSBxdWVyeSBhbmQgZnJlcV9zdXBwb3J0ZWQgLVxcbitcXHRcXHRcXHRcXHQgKiBub3QgYXZhaWxhYmxlIGZvciB1bm1hbmFnZWQgRFBMTFxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmV0ID0gaWNlX2FxX2dldF9jZ3VfcmVmX3ByaW8oaHcsIGRlLVxcdTAwM2VkcGxsX2lkeCwgaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmRlLVxcdTAwM2VpbnB1dF9wcmlvW2ldKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG5AQCAtNDQxMSw2ICs0NTAyLDE2IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcXG4gXFx0XFx0XFx0aWYgKGljZV9kcGxsX2lzX3N3X3BpbihwZiwgaSwgdHJ1ZSkpXFxuIFxcdFxcdFxcdFxcdHBpbnNbaV0uaGlkZGVuID0gdHJ1ZTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcXG4rXFx0XFx0XFx0XFx0cGluc1tpXS5mcmVxID0gaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhodywgaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5wdXQpO1xcbitcXHRcXHRcXHRcXHRwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xcbitcXHRcXHRcXHRcXHQvKiBza2lwIG91dHB1dCBzdGF0ZSBjYXBzLCBwaGFzZSByYW5nZSxcXG4rXFx0XFx0XFx0XFx0ICogcGluIHN0YXRlIEFRIHF1ZXJ5IGFuZCBmcmVxX3N1cHBvcnRlZCAtXFxuK1xcdFxcdFxcdFxcdCAqIG5vdCBhdmFpbGFibGUgZm9yIHVubWFuYWdlZCBEUExMXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRyZXQgPSBpY2VfY2d1X2dldF9vdXRwdXRfcGluX3N0YXRlX2NhcHMoaHcsIGksIFxcdTAwMjZjYXBzKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG5AQCAtNDQyOCwxMCArNDUyOSwxMyBAQCBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsXFxuIFxcdFxcdHBpbnNbaV0ucHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xcbiBcXHRcXHRwaW5zW2ldLnBmID0gcGY7XFxuIFxcdH1cXG4tXFx0aWYgKGlucHV0KVxcbitcXHRpZiAoaW5wdXQgXFx1MDAyNlxcdTAwMjYgIXBmLVxcdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9yZWZfc3luY19pbnB1dHMocGYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQ3MTIsNiArNDgxNiw4MiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19lODI1YyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9kcGxsX2xvY2tfc3RhdGVfaW5pdF91bm1hbmFnZWQgLSBpbml0aWFsaXplIGxvY2sgc3RhdGUgZm9yIHVubWFuYWdlZCBkcGxsXFxuKyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogSW5pdGlhbGl6ZSB0aGUgbG9jayBzdGF0ZSBmb3IgdW5tYW5hZ2VkIERQTEwgYnkgY2hlY2tpbmcgaGVhbHRoIHN0YXR1cy5cXG4rICogRm9yIHVubWFuYWdlZCBEUExMLCB3ZSByZWx5IG9uIGhhcmR3YXJlIGF1dG9ub21vdXMgb3BlcmF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAtIHN1Y2Nlc3NcXG4rICogKiBuZWdhdGl2ZSAtIGluaXQgZmFpbHVyZSByZWFzb25cXG4rICovXFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZilcXG4re1xcbitcXHR1MTYgY29kZSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSztcXG4rXFx0c3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtIGJ1ZmY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIFxcdTAwMjZidWZmLCBjb2RlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHBmLCBcXHUwMDI2YnVmZiwgZmFsc2UpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQgLSBpbml0IGRwbGwgaW5mb3JtYXRpb24gZm9yIHVubWFuYWdlZCBkcGxsXFxuKyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogQWNxdWlyZSAoZnJvbSBIVykgYW5kIHNldCBiYXNpYyBkcGxsIGluZm9ybWF0aW9uIChvbiBwZi1cXHUwMDNlZHBsbHMgc3RydWN0KS5cXG4rICogRm9yIHVubWFuYWdlZCBkcGxsIG1vZGUuXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAwIC0gc3VjY2Vzc1xcbisgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvblxcbisgKi9cXG4rc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmKVxcbit7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcXHUwMDI2cGYtXFx1MDAzZWRwbGxzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZC1cXHUwMDNlY2xvY2tfaWQgPSBpY2VfZ2VuZXJhdGVfY2xvY2tfaWQocGYpO1xcbitcXHRkLVxcdTAwM2VudW1faW5wdXRzID0gaWNlX2NndV9nZXRfcGluX251bShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0cnVlKTtcXG4rXFx0ZC1cXHUwMDNlbnVtX291dHB1dHMgPSBpY2VfY2d1X2dldF9waW5fbnVtKFxcdTAwMjZwZi1cXHUwMDNlaHcsIGZhbHNlKTtcXG4rXFx0cmV0ID0gaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChwZik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGQtXFx1MDAzZWlucHV0cyA9IGt6YWxsb2Nfb2JqcygqZC1cXHUwMDNlaW5wdXRzLCBkLVxcdTAwM2VudW1faW5wdXRzKTtcXG4rXFx0aWYgKCFkLVxcdTAwM2VpbnB1dHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBkZWluaXRfaW5mbztcXG4rXFxuK1xcdGQtXFx1MDAzZW91dHB1dHMgPSBremFsbG9jX29ianMoKmQtXFx1MDAzZW91dHB1dHMsIGQtXFx1MDAzZW51bV9vdXRwdXRzKTtcXG4rXFx0aWYgKCFkLVxcdTAwM2VvdXRwdXRzKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZGVpbml0X2luZm87XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGRlaW5pdF9pbmZvO1xcbitcXG4rXFx0ZC1cXHUwMDNlcHBzLm1vZGUgPSBEUExMX01PREVfTUFOVUFMO1xcbitcXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcXFwiJXMgLSBzdWNjZXNzLCBpbnB1dHM6JXUsIG91dHB1dHM6JXVcXFxcblxcXCIsXFxuK1xcdFxcdF9fZnVuY19fLCBkLVxcdTAwM2VudW1faW5wdXRzLCBkLVxcdTAwM2VudW1fb3V0cHV0cyk7XFxuK1xcdHJldHVybiAwO1xcbitkZWluaXRfaW5mbzpcXG4rXFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIiVzIC0gZmFpbDogZC1cXHUwMDNlaW5wdXRzOiVwLCBkLVxcdTAwM2VvdXRwdXRzOiVwXFxcXG5cXFwiLFxcbitcXHRcXHRfX2Z1bmNfXywgZC1cXHUwMDNlaW5wdXRzLCBkLVxcdTAwM2VvdXRwdXRzKTtcXG4rXFx0aWNlX2RwbGxfZGVpbml0X2luZm8ocGYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfaW5pdF9pbmZvIC0gcHJlcGFyZSBwZidzIGRwbGwgaW5mb3JtYXRpb24gc3RydWN0dXJlXFxuICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG5AQCAtNDgxNSw2ICs0OTk1LDQyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZCAtIGRldGVybWluZSBsb2NrIHN0YXRlIGZyb20gaGVhbHRoIHN0YXR1c1xcbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuKyAqIEBidWZmOiBoZWFsdGggc3RhdHVzIGJ1ZmZlclxcbisgKiBAbm90aWZ5OiBpZiB0cnVlLCBub3RpZnkgZHBsbCBkZXZpY2VcXG4rICpcXG4rICogU2V0IHVubWFuYWdlZCBkcGxsIGxvY2sgc3RhdGUgYmFzZWQgb24gaGVhbHRoIHN0YXR1cyBjb2RlIGFuZCBpbnRlcm5hbCBkYXRhLlxcbisgKiBDb250ZXh0OiBBY3F1aXJlcyBhbmQgcmVsZWFzZXMgcGYtXFx1MDAzZWRwbGxzLmxvY2sgKG11c3QgcmVsZWFzZSBiZWZvcmUgbm90aWZ5XFxuKyAqIGlmIGNhbGxlZCkuXFxuKyAqL1xcbit2b2lkIGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgbm90aWZ5KVxcbit7XFxuK1xcdHUzMiBpbnRlcm5hbF9kYXRhID0gbGUzMl90b19jcHUoYnVmZi1cXHUwMDNlaW50ZXJuYWxfZGF0YTEpO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLnBwcztcXG4rXFxuK1xcdGlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMubG9jayk7XFxuK1xcdGlmIChidWZmLVxcdTAwM2VoZWFsdGhfc3RhdHVzX2NvZGUgPT0gMCB8fFxcbitcXHQgICAgaW50ZXJuYWxfZGF0YSA9PSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRClcXG4rXFx0XFx0ZC1cXHUwMDNlZHBsbF9zdGF0ZSA9IERQTExfTE9DS19TVEFUVVNfTE9DS0VEO1xcbitcXHRlbHNlXFxuK1xcdFxcdGQtXFx1MDAzZWRwbGxfc3RhdGUgPSBEUExMX0xPQ0tfU1RBVFVTX1VOTE9DS0VEO1xcbitcXG4rXFx0aWYgKGQtXFx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9PSBkLVxcdTAwM2VkcGxsX3N0YXRlKVxcbitcXHRcXHRub3RpZnkgPSBmYWxzZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRkLVxcdTAwM2VwcmV2X2RwbGxfc3RhdGUgPSBkLVxcdTAwM2VkcGxsX3N0YXRlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4rXFx0aWYgKG5vdGlmeSBcXHUwMDI2XFx1MDAyNiBkLVxcdTAwM2VkcGxsKVxcbitcXHRcXHRkcGxsX2RldmljZV9jaGFuZ2VfbnRmKGQtXFx1MDAzZWRwbGwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfZGVpbml0IC0gRGlzYWJsZSB0aGUgZHJpdmVyL0hXIHN1cHBvcnQgZm9yIGRwbGwgc3Vic3lzdGVtXFxuICAqIHRoZSBkcGxsIGRldmljZS5cXG5AQCAtNDg1NCw5ICs1MDcwLDEwIEBAIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRpZiAocGYtXFx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxcbiBcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMudHhjbGtfd29yayk7XFxuIFxcbi1cXHRpY2VfZHBsbF9kZWluaXRfcGlucyhwZiwgY2d1KTtcXG4rXFx0aWNlX2RwbGxfZGVpbml0X3BpbnMocGYsIGNndSB8fCBwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKTtcXG4gXFx0aWYgKCFJU19FUlJfT1JfTlVMTChwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGwpKVxcbi1cXHRcXHRpY2VfZHBsbF9kZWluaXRfZHBsbChwZiwgXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5wcHMsIGNndSk7XFxuK1xcdFxcdGljZV9kcGxsX2RlaW5pdF9kcGxsKHBmLCBcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLnBwcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBjZ3UgfHwgcGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XFxuIFxcdGlmICghSVNfRVJSX09SX05VTEwocGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsKSlcXG4gXFx0XFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMuZWVjLCBjZ3UpO1xcbiBcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLVxcdTAwM2VkcGxscy50eGMuZHBsbCkpXFxuQEAgLTQ4NjYsNiArNTA4Myw0NSBAQCB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX2RwbGxfaW5pdF91bm1hbmFnZWQgLSBpbml0aWFsaXplIHN1cHBvcnQgZm9yIHVubWFuYWdlZCBkcGxsIHN1YnN5c3RlbVxcbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuKyAqXFxuKyAqIFNldCB1cCB0aGUgZGV2aWNlIGRwbGxzIGZvciB1bm1hbmFnZWQgbW9kZSwgcmVnaXN0ZXIgdGhlbSBhbmQgcGlucyBjb25uZWN0ZWRcXG4rICogd2l0aGluIExpbnV4IGRwbGwgc3Vic3lzdGVtLiBBbGxvdyB1c2Vyc3BhY2UgdG8gb2J0YWluIHN0YXRlIG9mIERQTEwuXFxuKyAqXFxuKyAqIENvbnRleHQ6IEluaXRpYWxpemVzIHBmLVxcdTAwM2VkcGxscy5sb2NrIG11dGV4LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpXFxuK3tcXG4rXFx0c3RydWN0IGljZV9kcGxscyAqZCA9IFxcdTAwMjZwZi1cXHUwMDNlZHBsbHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWljZV9wZl9zcmNfdG1yX293bmVkKHBmKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZkLVxcdTAwM2Vsb2NrKTtcXG4rXFx0ZXJyID0gaWNlX2RwbGxfaW5pdF9pbmZvX3VubWFuYWdlZChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuK1xcdGVyciA9IGljZV9kcGxsX2luaXRfZHBsbChwZiwgXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5wcHMsIHRydWUsIERQTExfVFlQRV9QUFMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRlaW5pdF9pbmZvO1xcbitcXHRlcnIgPSBpY2VfZHBsbF9pbml0X3BpbnMocGYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRlaW5pdF9wcHM7XFxuK1xcdHNldF9iaXQoSUNFX0ZMQUdfRFBMTCwgcGYtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdHJldHVybjtcXG4rXFxuK2RlaW5pdF9wcHM6XFxuK1xcdGljZV9kcGxsX2RlaW5pdF9kcGxsKHBmLCBcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLnBwcywgdHJ1ZSk7XFxuK2RlaW5pdF9pbmZvOlxcbitcXHRpY2VfZHBsbF9kZWluaXRfaW5mbyhwZik7XFxuK2Vycl9leGl0OlxcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkLVxcdTAwM2Vsb2NrKTtcXG4rXFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksIFxcXCJEUExMcyBpbml0IGZhaWx1cmUgZXJyOiVkXFxcXG5cXFwiLCBlcnIpO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfaW5pdF9lODI1IC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciBkcGxsIHN1YnN5c3RlbVxcbiAgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuQEAgLTQ5NzUsOCArNTIzMSwyMyBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MTAoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcXFwiRFBMTHMgaW5pdCBmYWlsdXJlIGVycjolZFxcXFxuXFxcIiwgZXJyKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9kcGxsX2luaXQgLSBpbml0aWFsaXplIHN1cHBvcnQgZm9yIGRwbGwgc3Vic3lzdGVtXFxuKyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogU2V0IHVwIHRoZSBkZXZpY2UgZHBsbHMsIHJlZ2lzdGVyIHRoZW0gYW5kIHBpbnMgY29ubmVjdGVkIHdpdGhpbiBMaW51eCBkcGxsXFxuKyAqIHN1YnN5c3RlbS4gQWxsb3cgdXNlcnNwYWNlIHRvIG9idGFpbiBzdGF0ZSBvZiBEUExMIGFuZCBoYW5kbGluZyBvZiBEUExMXFxuKyAqIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuXFxuKyAqXFxuKyAqIENvbnRleHQ6IEluaXRpYWxpemVzIHBmLVxcdTAwM2VkcGxscy5sb2NrIG11dGV4LlxcbisgKi9cXG4gdm9pZCBpY2VfZHBsbF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuK1xcdGlmIChwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XFxuK1xcdFxcdGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHBmKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKHBmLVxcdTAwM2Vody5tYWNfdHlwZSkge1xcbiBcXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxcbiBcXHRcXHRpY2VfZHBsbF9pbml0X2U4MjUocGYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuaW5kZXggMTAzYmEzZTQ5MDY4Mi4uYzU5ZDc0NmE4NTY3MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuQEAgLTI2LDYgKzI2LDggQEBcXG4gI2RlZmluZSBJQ0VfQ0dVX1IxMV9TWU5DRV9TX0JZUF9DTEtcXHRHRU5NQVNLKDYsIDEpXFxuIFxcbiAjZGVmaW5lIElDRV9DR1VfQllQQVNTX01VWF9PRkZTRVRfRTgyNUNcXHQzXFxuKyNkZWZpbmUgSUNFX0RQTExfVU5NQU5BR0VEX1BJTl9OVU1cXHQ0XFxuKyNkZWZpbmUgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRFxcdElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9FU1lOQ19FTlxcbiBcXG4gLyoqXFxuICAqIGVudW0gaWNlX2RwbGxfcGluX3N3IC0gZW51bWVyYXRlIGljZSBzb2Z0d2FyZSBwaW4gaW5kaWNlczpcXG5AQCAtMTkzLDYgKzE5NSw3IEBAIHN0cnVjdCBpY2VfZHBsbHMge1xcbiBcXHRzMzIgb3V0cHV0X3BoYXNlX2Fkal9tYXg7XFxuIFxcdHUzMiBwZXJpb2RpY19jb3VudGVyO1xcbiBcXHRib29sIGdlbmVyaWM7XFxuK1xcdGJvb2wgdW5tYW5hZ2VkO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhjbGtfd29yaztcXG4gXFx0Ym9vbCB0eGNsa19zd2l0Y2hfcmVxdWVzdGVkO1xcbiBcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHR4Y2xrX25vdGlmeV9yd3NlbTtcXG5AQCAtMjAxLDkgKzIwNCwxNiBAQCBzdHJ1Y3QgaWNlX2RwbGxzIHtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF8xNTg4X0NMT0NLKVxcbiB2b2lkIGljZV9kcGxsX2luaXQoc3RydWN0IGljZV9wZiAqcGYpO1xcbiB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuK3ZvaWQgaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYm9vbCBub3RpZnkpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWRcXG4raWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZixcXG4rXFx0XFx0XFx0XFx0ICBib29sIG5vdGlmeSkgeyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXFxuaW5kZXggOGNkYzRmZGE4OWU5Ny4uZmM5ZDRlMGZhNzU1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbkBAIC0xNDE1LDYgKzE0MTUsMTAgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3JpbmdzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdFxcdFxcdHNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzIsIHJpbmctXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHRcXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpKVxcbitcXHRcXHRcXHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0XFx0V1JJVEVfT05DRSh2c2ktXFx1MDAzZXR4X3JpbmdzW2ldLCByaW5nKTtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbmluZGV4IGQ4ODgzNTQ4MmQzYWEuLmZlZmJjNTFjNzE5MDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbkBAIC0zNDI4LDcgKzM0MjgsNyBAQCBzdGF0aWMgaW50IGljZV9yZXFfaXJxX21zaXhfbWlzYyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0ICAgICAoKHBmLVxcdTAwM2VsbF90c19pcnEuaW5kZXggKyBwZl9pbnRyX3N0YXJ0X29mZnNldCkgXFx1MDAyNlxcbiBcXHRcXHQgICAgICBQRklOVF9TQl9DVExfTVNJWF9JTkRYX00pIHwgUEZJTlRfU0JfQ1RMX0NBVVNFX0VOQV9NKTtcXG4gXFx0d3IzMihodywgR0xJTlRfSVRSKElDRV9SWF9JVFIsIHBmLVxcdTAwM2VvaWNyX2lycS5pbmRleCksXFxuLVxcdCAgICAgSVRSX1JFR19BTElHTihJQ0VfSVRSXzhLKSBcXHUwMDNlXFx1MDAzZSBJQ0VfSVRSX0dSQU5fUyk7XFxuK1xcdCAgICAgSVRSX1JFR19BTElHTihJQ0VfSVRSXzIwSykgXFx1MDAzZVxcdTAwM2UgSUNFX0lUUl9HUkFOX1MpO1xcbiBcXG4gXFx0aWNlX2ZsdXNoKGh3KTtcXG4gXFx0aWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7XFxuQEAgLTM0OTEsOSArMzQ5MSw4IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0XFx0TkVUSUZfRl9SWEhBU0g7XFxuIFxcbiBcXHRjc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNXFx0ICB8XFxuLVxcdFxcdFxcdCBORVRJRl9GX0lQX0NTVU0gIHxcXG4gXFx0XFx0XFx0IE5FVElGX0ZfU0NUUF9DUkMgfFxcbi1cXHRcXHRcXHQgTkVUSUZfRl9JUFY2X0NTVU07XFxuK1xcdFxcdFxcdCBORVRJRl9GX0hXX0NTVU07XFxuIFxcbiBcXHR2bGFub19mZWF0dXJlcyA9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUiB8XFxuIFxcdFxcdFxcdCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCAgICAgfFxcbkBAIC0zNTU1LDEyICszNTU0LDYgQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHQvKiBBbGxvdyBjb3JlIHRvIG1hbmFnZSBJUlFzIGFmZmluaXR5ICovXFxuIFxcdG5ldGlmX3NldF9hZmZpbml0eV9hdXRvKG5ldGRldik7XFxuIFxcbi1cXHQvKiBNdXR1YWwgZXhjbHVzaXZpdHkgZm9yIFRTTyBhbmQgR0NTIGlzIGVuZm9yY2VkIGJ5IHRoZSBzZXQgZmVhdHVyZXNcXG4tXFx0ICogbmRvIGNhbGxiYWNrLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcXG4tXFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07XFxuLVxcbiBcXHRuZXRpZl9zZXRfdHNvX21heF9zaXplKG5ldGRldiwgSUNFX01BWF9UU09fU0laRSk7XFxuIH1cXG4gXFxuQEAgLTQ3MjAsNyArNDcxMyw5IEBAIHZvaWQgaWNlX2RlaW5pdF9kZXYoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcbiBzdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbitcXHR1MTYgY29kZSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSztcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoaWNlX2lzX3NhZmVfbW9kZShwZikpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtNDczMiw4ICs0NzI3LDE1IEBAIHN0YXRpYyB2b2lkIGljZV9pbml0X2ZlYXR1cmVzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HTlNTKSlcXG4gXFx0XFx0aWNlX2duc3NfaW5pdChwZik7XFxuIFxcbitcXHQvKiBJbml0aWFsaXplIHVubWFuYWdlZCBEUExMIGRldGVjdGlvbiAqL1xcbitcXHRlcnIgPSBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChcXHUwMDI2cGYtXFx1MDAzZWh3LCBjb2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKTtcXG4rXFx0aWYgKGVyciB8fCAhaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChcXHUwMDI2cGYtXFx1MDAzZWh3KSlcXG4rXFx0XFx0cGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZCA9IGZhbHNlO1xcbitcXG4gXFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfQ0dVKSB8fFxcbi1cXHQgICAgaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9QSFlfUkNMSykpXFxuK1xcdCAgICBpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX1BIWV9SQ0xLKSB8fFxcbitcXHQgICAgcGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZClcXG4gXFx0XFx0aWNlX2RwbGxfaW5pdChwZik7XFxuIFxcbiBcXHQvKiBOb3RlOiBGbG93IGRpcmVjdG9yIGluaXQgZmFpbHVyZSBpcyBub24tZmF0YWwgdG8gbG9hZCAqL1xcbkBAIC02NTEwLDE4ICs2NTEyLDYgQEAgaWNlX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxcbiBcXHRcXHRyZXQgPSBpY2Vfc2V0X2xvb3BiYWNrKHZzaSwgISEoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKSk7XFxuIFxcbi1cXHQvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTXFxuLVxcdCAqIChORVRJRl9GX0hXX0NTVU0pIGlzIG5vdCBzdXBwb3J0ZWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoKGZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcXHUwMDI2XFx1MDAyNiAoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0FMTF9UU08pKSkge1xcbi1cXHRcXHRpZiAobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSlcXG4tXFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlRvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcXFwiVG8gZW5hYmxlIEhXIGNoZWNrc3VtLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIFRTTy5cXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcXG5pbmRleCBlYWVjMzZhYjZhZTNmLi5lODM5MmVjNGYxMzQ4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuQEAgLTIzMjcsNiArMjMyNyw4IEBAIHU2NCBpY2VfcHRwX2dldF9yeF9od3RzKGNvbnN0IHVuaW9uIGljZV8zMmJfcnhfZmxleF9kZXNjICpyeF9kZXNjLFxcbiBcXHR0c19oaWdoID0gbGUzMl90b19jcHUocnhfZGVzYy1cXHUwMDNld2IuZmxleF90cy50c19oaWdoKTtcXG4gXFx0dHNfbnMgPSBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoY2FjaGVkX3RpbWUsIHRzX2hpZ2gpO1xcbiBcXG4rXFx0aWNlX3RyYWNlKHJ4X2h3dHN0YW1wLCBjYWNoZWRfdGltZSwgdHNfaGlnaCwgdHNfbnMpO1xcbitcXG4gXFx0cmV0dXJuIHRzX25zO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbmluZGV4IDhlNWY5NzgzNTk1NGMuLmY5MDUxMDRmOTVkODggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG5AQCAtMjAsNiArMjAsMTAgQEAgc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xMF9taHpbXSA9IHtcXG4gXFx0RFBMTF9QSU5fRlJFUVVFTkNZXzEwTUhaLFxcbiB9O1xcbiBcXG4rc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xNTZfMjVtaHpbXSA9IHtcXG4rXFx0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDE1NjI1MDAwMCwgMTU2MjUwMDAwKSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2NndV9waW5fZGVzYyBpY2VfZTgxMHRfc2ZwX2NndV9pbnB1dHNbXSA9IHtcXG4gXFx0eyBcXFwiQ1ZMLVNEUDIyXFxcIixcXHQgIFpMX1JFRjBQLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxcbiBcXHRcXHRBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfY29tbW9uKSwgaWNlX2NndV9waW5fZnJlcV9jb21tb24gfSxcXG5AQCAtMTMxLDYgKzEzNSwxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MjNfemxfY2d1X291dHB1dHNbXSA9IHtcXG4gXFx0eyBcXFwiTk9ORVxcXCIsXFx0ICAgWkxfT1VUNSwgMCwgMCB9LFxcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHNbXSA9IHtcXG4rXFx0eyBcXFwiMTU4OC1USU1FX1NZTkNcXFwiLCAwLCBEUExMX1BJTl9UWVBFX0VYVCxcXG4rXFx0ICBBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfMTBfbWh6KSwgaWNlX2NndV9waW5fZnJlcV8xMF9taHogfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2NndV9waW5fZGVzYyBpY2VfZTgzMF91bm1hbmFnZWRfb3V0cHV0c1tdID0ge1xcbitcXHR7IFxcXCJNQUMtUEhZLUNMS1xcXCIsIDAsIERQTExfUElOX1RZUEVfU1lOQ0VfRVRIX1BPUlQsXFxuK1xcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzE1Nl8yNW1oeiksIGljZV9jZ3VfcGluX2ZyZXFfMTU2XzI1bWh6IH0sXFxuK1xcdHsgXFxcIjE1ODgtVElNRV9SRUZcXFwiLCAxLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxcbitcXHQgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xX2h6KSwgaWNlX2NndV9waW5fZnJlcV8xX2h6fSxcXG4rfTtcXG4rXFxuIC8qIExvdyBsZXZlbCBmdW5jdGlvbnMgZm9yIGludGVyYWN0aW5nIHdpdGggYW5kIG1hbmFnaW5nIHRoZSBkZXZpY2UgY2xvY2sgdXNlZFxcbiAgKiBmb3IgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sLlxcbiAgKlxcbkBAIC01OTc5LDYgKzU5OTUsMjQgQEAgaWNlX2NndV9nZXRfcGluX2Rlc2Moc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQsIGludCAqc2l6ZSlcXG4gXFx0Y2FzZSBJQ0VfREVWX0lEX0U4MjNDX1NHTUlJOlxcbiBcXHRcXHR0ID0gaWNlX2NndV9nZXRfcGluX2Rlc2NfZTgyMyhodywgaW5wdXQsIHNpemUpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19CQUNLUExBTkU6XFxuK1xcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ0NfUVNGUDU2OlxcbitcXHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1NGUDpcXG4rXFx0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19TRlBfREQ6XFxuK1xcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ19CQUNLUExBTkU6XFxuK1xcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ19RU0ZQOlxcbitcXHRjYXNlIElDRV9ERVZfSURfRTgzMENfU0ZQOlxcbitcXHRjYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfQkFDS1BMQU5FOlxcbitcXHRjYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfUVNGUDpcXG4rXFx0Y2FzZSBJQ0VfREVWX0lEX0U4MzBfWFhWX1NGUDpcXG4rXFx0XFx0aWYgKGlucHV0KSB7XFxuK1xcdFxcdFxcdHQgPSBpY2VfZTgzMF91bm1hbmFnZWRfaW5wdXRzO1xcbitcXHRcXHRcXHQqc2l6ZSA9IEFSUkFZX1NJWkUoaWNlX2U4MzBfdW5tYW5hZ2VkX2lucHV0cyk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHQgPSBpY2VfZTgzMF91bm1hbmFnZWRfb3V0cHV0cztcXG4rXFx0XFx0XFx0KnNpemUgPSBBUlJBWV9TSVpFKGljZV9lODMwX3VubWFuYWdlZF9vdXRwdXRzKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtNjAwNSw2ICs2MDM5LDE4IEBAIGludCBpY2VfY2d1X2dldF9udW1fcGlucyhzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpY2VfY2d1X2dldF9waW5fbnVtIC0gZ2V0IHBpbiBkZXNjcmlwdGlvbiBhcnJheSBzaXplXFxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XFxuKyAqIEBpbnB1dDogaWYgcmVxdWVzdCBpcyBkb25lIGFnYWluc3QgaW5wdXQgb3Igb3V0cHV0IHBpbnNcXG4rICpcXG4rICogUmV0dXJuOiBzaXplIG9mIHBpbiBkZXNjcmlwdGlvbiBhcnJheSBmb3IgZ2l2ZW4gaHcuXFxuKyAqL1xcbitpbnQgaWNlX2NndV9nZXRfcGluX251bShzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dClcXG4re1xcbitcXHRyZXR1cm4gaWNlX2NndV9nZXRfbnVtX3BpbnMoaHcsIGlucHV0KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV9jZ3VfZ2V0X3Bpbl90eXBlIC0gZ2V0IHBpbidzIHR5cGVcXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmhcXG5pbmRleCAxNmIxOTg4ZTk5M2QyLi5mYTFlOTA4Y2ViYWM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXFxuQEAgLTM2NCw2ICszNjQsNyBAQCBpbnQgaWNlX3JlYWRfc21hX2N0cmwoc3RydWN0IGljZV9odyAqaHcsIHU4ICpkYXRhKTtcXG4gaW50IGljZV93cml0ZV9zbWFfY3RybChzdHJ1Y3QgaWNlX2h3ICpodywgdTggZGF0YSk7XFxuIGludCBpY2VfcHRwX3JlYWRfc2RwX2FjKHN0cnVjdCBpY2VfaHcgKmh3LCBfX2xlMTYgKmVudHJpZXMsIHVpbnQgKm51bV9lbnRyaWVzKTtcXG4gaW50IGljZV9jZ3VfZ2V0X251bV9waW5zKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KTtcXG4raW50IGljZV9jZ3VfZ2V0X3Bpbl9udW0oc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpO1xcbiBlbnVtIGRwbGxfcGluX3R5cGUgaWNlX2NndV9nZXRfcGluX3R5cGUoc3RydWN0IGljZV9odyAqaHcsIHU4IHBpbiwgYm9vbCBpbnB1dCk7XFxuIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKlxcbiBpY2VfY2d1X2dldF9waW5fZnJlcV9zdXBwKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwaW4sIGJvb2wgaW5wdXQsIHU4ICpudW0pO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xcbmluZGV4IDZhNTg3NWJkOWM2YjEuLjRkYWVlMjUyZTJhNjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmNcXG5AQCAtMjYxMiw3ICsyNjEyLDYgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbyxcXG4gXFx0dTE2IHZsYW5faWQgPSBJQ0VfTUFYX1ZMQU5fSUQgKyAxO1xcbiBcXHR1MTYgdmxhbl90cGlkID0gRVRIX1BfODAyMVE7XFxuIFxcdHZvaWQgKmRhZGRyID0gTlVMTDtcXG4tXFx0dTE2IGV0aF9oZHJfc3o7XFxuIFxcdHU4ICpldGhfaGRyO1xcbiBcXHR1MzIgYWN0ID0gMDtcXG4gXFx0X19iZTE2ICpvZmY7XFxuQEAgLTI2MjUsMTEgKzI2MjQsMTAgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbyxcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRldGhfaGRyX3N6ID0gc2l6ZW9mKGR1bW15X2V0aF9oZWFkZXIpO1xcbiBcXHRldGhfaGRyID0gc19ydWxlLVxcdTAwM2VoZHJfZGF0YTtcXG4gXFxuIFxcdC8qIGluaXRpYWxpemUgdGhlIGV0aGVyIGhlYWRlciB3aXRoIGEgZHVtbXkgaGVhZGVyICovXFxuLVxcdG1lbWNweShldGhfaGRyLCBkdW1teV9ldGhfaGVhZGVyLCBldGhfaGRyX3N6KTtcXG4rXFx0aWNlX2ZpbGxfZXRoX2hkcihldGhfaGRyKTtcXG4gXFx0aWNlX2ZpbGxfc3dfaW5mbyhodywgZl9pbmZvKTtcXG4gXFxuIFxcdHN3aXRjaCAoZl9pbmZvLVxcdTAwM2VmbHRyX2FjdCkge1xcbkBAIC0yNzMwLDcgKzI3MjgsNyBAQCBpY2VfZmlsbF9zd19ydWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2ZsdHJfaW5mbyAqZl9pbmZvLFxcbiBcXG4gXFx0LyogQ3JlYXRlIHRoZSBzd2l0Y2ggcnVsZSB3aXRoIHRoZSBmaW5hbCBkdW1teSBFdGhlcm5ldCBoZWFkZXIgKi9cXG4gXFx0aWYgKG9wYyAhPSBpY2VfYXFjX29wY191cGRhdGVfc3dfcnVsZXMpXFxuLVxcdFxcdHNfcnVsZS1cXHUwMDNlaGRyX2xlbiA9IGNwdV90b19sZTE2KGV0aF9oZHJfc3opO1xcbitcXHRcXHRzX3J1bGUtXFx1MDAzZWhkcl9sZW4gPSBjcHVfdG9fbGUxNihEVU1NWV9FVEhfSERSX0xFTik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xcbmluZGV4IGQyMDM1N2MwNDEyNzMuLjQ1NjBlNTVjOGY5YzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcXG5AQCAtMTc0LDYgKzE3NCw3IEBAIHN0YXRpYyB1MTYgaWNlX2NoZWNrX3N1cHBvcnRlZF92bGFuX3RwaWQodTE2IHZsYW5fdHBpZClcXG4gXFx0Y2FzZSBFVEhfUF84MDIxUTpcXG4gXFx0Y2FzZSBFVEhfUF84MDIxQUQ6XFxuIFxcdGNhc2UgRVRIX1BfUUlOUTE6XFxuK1xcdGNhc2UgRVRIX1BfODAyMUFIOlxcbiBcXHRcXHRyZXR1cm4gdmxhbl90cGlkO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oXFxuaW5kZXggNGYzNWVmOGQ2YjI5OS4uM2NiOGM2ZWEwM2NmNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcXG5AQCAtMjQxLDYgKzI0MSwyNCBAQCBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfZndfcmVxKTtcXG4gREVGSU5FX1RYX1RTVEFNUF9PUF9FVkVOVChpY2VfdHhfdHN0YW1wX2Z3X2RvbmUpO1xcbiBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfY29tcGxldGUpO1xcbiBcXG4rLyogVHJhY2UgZXZlbnQgZm9yIFJ4IHRpbWVzdGFtcCAqL1xcbitUUkFDRV9FVkVOVChpY2VfcnhfaHd0c3RhbXAsXFxuK1xcdCAgICBUUF9QUk9UTyh1NjQgY2FjaGVkX3RpbWUsIHUzMiB0c19oaWdoLCB1NjQgdHNfbnMpLFxcbitcXG4rXFx0ICAgIFRQX0FSR1MoY2FjaGVkX3RpbWUsIHRzX2hpZ2gsIHRzX25zKSxcXG4rXFxuK1xcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KF9fZmllbGQodTY0LCBjYWNoZWRfdGltZSlcXG4rXFx0XFx0XFx0ICAgICBfX2ZpZWxkKHUzMiwgdHNfaGlnaClcXG4rXFx0XFx0XFx0ICAgICBfX2ZpZWxkKHU2NCwgdHNfbnMpKSxcXG4rXFxuK1xcdCAgICBUUF9mYXN0X2Fzc2lnbihfX2VudHJ5LVxcdTAwM2VjYWNoZWRfdGltZSA9IGNhY2hlZF90aW1lO1xcbitcXHRcXHRcXHQgICBfX2VudHJ5LVxcdTAwM2V0c19oaWdoID0gdHNfaGlnaDtcXG4rXFx0XFx0XFx0ICAgX19lbnRyeS1cXHUwMDNldHNfbnMgPSB0c19uczspLFxcbitcXG4rXFx0ICAgIFRQX3ByaW50ayhcXFwiY2FjaGVkX3RpbWU9JWxsdSB0c19oaWdoPSV1IHRzX25zPSVsbHVcXFwiLFxcbitcXHRcXHQgICAgICBfX2VudHJ5LVxcdTAwM2VjYWNoZWRfdGltZSwgX19lbnRyeS1cXHUwMDNldHNfaGlnaCwgX19lbnRyeS1cXHUwMDNldHNfbnMpXFxuKyk7XFxuK1xcbiBERUNMQVJFX0VWRU5UX0NMQVNTKGljZV9lc3dfYnJfZmRiX3RlbXBsYXRlLFxcbiBcXHRcXHQgICAgVFBfUFJPVE8oc3RydWN0IGljZV9lc3dfYnJfZmRiX2VudHJ5ICpmZGIpLFxcbiBcXHRcXHQgICAgVFBfQVJHUyhmZGIpLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXFxuaW5kZXggMzEzMDNhYjViZTE3NS4uNDc3Yzg2ZDhjNTNiYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXFxuQEAgLTE3MzksNyArMTczOSw3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcXG4gXFx0bDNfbGVuID0gbDQuaGRyIC0gaXAuaGRyO1xcbiBcXHRvZmZzZXQgfD0gKGwzX2xlbiAvIDQpIFxcdTAwM2NcXHUwMDNjIElDRV9UWF9ERVNDX0xFTl9JUExFTl9TO1xcbiBcXG4tXFx0aWYgKCh0eF9yaW5nLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAodGVzdF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfR0NTLCB0eF9yaW5nLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICEoZmlyc3QtXFx1MDAzZXR4X2ZsYWdzIFxcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFza2JfY3N1bV9pc19zY3RwKHNrYikpIHtcXG4gXFx0XFx0LyogU2V0IEdDUyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXFxuaW5kZXggNWU1MTdmMjE5Mzc5OC4uMTVkYmQ1MTAwOTEyNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXFxuQEAgLTIxNyw2ICsyMTcsNyBAQCBlbnVtIGljZV90eF9yaW5nX2ZsYWdzIHtcXG4gXFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzEsXFxuIFxcdElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLFxcbiBcXHRJQ0VfVFhfUklOR19GTEFHU19UWFRJTUUsXFxuK1xcdElDRV9UWF9SSU5HX0ZMQUdTX0dDUyxcXG4gXFx0SUNFX1RYX1JJTkdfRkxBR1NfTkJJVFMsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuY1xcbmluZGV4IDU0OTg0OTY2ODUxZDUuLmI2NzI3MmUyZjYwM2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdnNpX3ZsYW5fbGliLmNcXG5AQCAtMjQsNyArMjQsOCBAQCBzdGF0aWMgdm9pZCBwcmludF9pbnZhbGlkX3RwaWQoc3RydWN0IGljZV92c2kgKnZzaSwgdTE2IHRwaWQpXFxuIHN0YXRpYyBib29sIHZhbGlkYXRlX3ZsYW4oc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGljZV92bGFuICp2bGFuKVxcbiB7XFxuIFxcdGlmICh2bGFuLVxcdTAwM2V0cGlkICE9IEVUSF9QXzgwMjFRIFxcdTAwMjZcXHUwMDI2IHZsYW4tXFx1MDAzZXRwaWQgIT0gRVRIX1BfODAyMUFEIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB2bGFuLVxcdTAwM2V0cGlkICE9IEVUSF9QX1FJTlExIFxcdTAwMjZcXHUwMDI2ICh2bGFuLVxcdTAwM2V0cGlkIHx8IHZsYW4tXFx1MDAzZXZpZCkpIHtcXG4rXFx0ICAgIHZsYW4tXFx1MDAzZXRwaWQgIT0gRVRIX1BfUUlOUTEgXFx1MDAyNlxcdTAwMjYgdmxhbi1cXHUwMDNldHBpZCAhPSBFVEhfUF84MDIxQUggXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICh2bGFuLVxcdTAwM2V0cGlkIHx8IHZsYW4tXFx1MDAzZXZpZCkpIHtcXG4gXFx0XFx0cHJpbnRfaW52YWxpZF90cGlkKHZzaSwgdmxhbi1cXHUwMDNldHBpZCk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuY1xcbmluZGV4IGNhODAxOGUzZGQ0MjguLjA2ZDJmOWJlOTNhZTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmNcXG5AQCAtMTcwMiw2ICsxNzAyLDkgQEAgc3RhdGljIGJvb2wgaWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fdHBpZCh1MTYgZmlsdGVyaW5nX2NhcHMsIHUxNiB0cGlkKVxcbiBcXHRjYXNlIEVUSF9QX1FJTlExOlxcbiBcXHRcXHR2bGFuX2V0aGVydHlwZSA9IFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzkxMDA7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEVUSF9QXzgwMjFBSDpcXG4rXFx0XFx0dmxhbl9ldGhlcnR5cGUgPSBWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEU3O1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCEoZmlsdGVyaW5nX2NhcHMgXFx1MDAyNiB2bGFuX2V0aGVydHlwZSkpXFxuQEAgLTIxMzYsNiArMjEzOSw5IEBAIHN0YXRpYyBpbnQgaWNlX3ZjX2dldF90cGlkKHUzMiBldGhlcnR5cGVfc2V0dGluZywgdTE2ICp0cGlkKVxcbiBcXHRjYXNlIFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzkxMDA6XFxuIFxcdFxcdCp0cGlkID0gRVRIX1BfUUlOUTE7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4RTc6XFxuK1xcdFxcdCp0cGlkID0gRVRIX1BfODAyMUFIO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0KnRwaWQgPSAwO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xcbmluZGV4IDIxZDJmZTM4YTQxYTYuLjQyNGMxMmMwMzk0YTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xcbkBAIC0xMSw2ICsxMSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuIFxcbkBAIC03MTA1LDYgKzcxMDcsNTcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlnY19xYnZfc2NoZWR1bGluZ190aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuIFxcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaWdjX2dldF9hY3BpX21hY19wYXNzdGhydSh1OCAqbWFjKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbitcXHRcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRcXHRhY3BpX29iamVjdF90eXBlIHR5cGU7XFxuK1xcdFxcdHUzMiBsZW5ndGg7XFxuK1xcdH0gc291cmNlc1tdID0ge1xcbitcXHRcXHR7IFxcXCJcXFxcXFxcXF9TQi5BTUFDXFxcIiwgQUNQSV9UWVBFX0JVRkZFUiwgMjMgfSxcXG4rXFx0XFx0eyBcXFwiXFxcXFxcXFxNQUNBXFxcIiwgICAgIEFDUElfVFlQRV9TVFJJTkcsIDIyIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXI7XFxuK1xcdHVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7XFxuK1xcdGJvb2wgbWFjX2ZvdW5kID0gZmFsc2U7XFxuK1xcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4rXFx0dTggYnVmW0VUSF9BTEVOXTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FDUEkpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzb3VyY2VzKSBcXHUwMDI2XFx1MDAyNiAhbWFjX2ZvdW5kOyBpKyspIHtcXG4rXFx0XFx0YnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfQlVGRkVSO1xcbitcXHRcXHRidWZmZXIucG9pbnRlciA9IE5VTEw7XFxuK1xcbitcXHRcXHRzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChOVUxMLCAoY2hhciAqKXNvdXJjZXNbaV0ubmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgTlVMTCwgXFx1MDAyNmJ1ZmZlcik7XFxuK1xcdFxcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRvYmogPSBidWZmZXIucG9pbnRlcjtcXG4rXFx0XFx0aWYgKCFvYmogfHwgb2JqLVxcdTAwM2V0eXBlICE9IHNvdXJjZXNbaV0udHlwZSB8fFxcbitcXHRcXHQgICAgb2JqLVxcdTAwM2VzdHJpbmcubGVuZ3RoICE9IHNvdXJjZXNbaV0ubGVuZ3RoKVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfb2JqO1xcbitcXG4rXFx0XFx0aWYgKHN0cm5jbXAob2JqLVxcdTAwM2VzdHJpbmcucG9pbnRlciwgXFxcIl9BVVhNQUNfI1xcXCIsIDkpIHx8XFxuK1xcdFxcdCAgICBvYmotXFx1MDAzZXN0cmluZy5wb2ludGVyWzIxXSAhPSAnIycpXFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9vYmo7XFxuK1xcbitcXHRcXHRpZiAoaGV4MmJpbihidWYsIG9iai1cXHUwMDNlc3RyaW5nLnBvaW50ZXIgKyA5LCBFVEhfQUxFTikgfHxcXG4rXFx0XFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKGJ1ZikpXFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9vYmo7XFxuK1xcbitcXHRcXHRldGhlcl9hZGRyX2NvcHkobWFjLCBidWYpO1xcbitcXHRcXHRtYWNfZm91bmQgPSB0cnVlO1xcbitmcmVlX29iajpcXG4rXFx0XFx0a2ZyZWUob2JqKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG1hY19mb3VuZDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGlnY19wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXFxuICAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbkBAIC03MjY4LDkgKzczMjEsMTYgQEAgc3RhdGljIGludCBpZ2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChldGhfcGxhdGZvcm1fZ2V0X21hY19hZGRyZXNzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGh3LVxcdTAwM2VtYWMuYWRkcikpIHtcXG4tXFx0XFx0LyogY29weSB0aGUgTUFDIGFkZHJlc3Mgb3V0IG9mIHRoZSBOVk0gKi9cXG4tXFx0XFx0aWYgKGh3LVxcdTAwM2VtYWMub3BzLnJlYWRfbWFjX2FkZHIoaHcpKVxcbitcXHRcXHQvKiBMb29rIGZvciBhIHN5c3RlbS1wcm92aWRlZCBNQUMgaW4gdGhlIEFDUEkgdGFibGUgYmVmb3JlXFxuK1xcdFxcdCAqIGZhbGxpbmcgYmFjayB0byByZWFkaW5nIHRoZSBhZGRyZXNzIGZyb20gdGhlIE5WTS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChpZ2NfZ2V0X2FjcGlfbWFjX3Bhc3N0aHJ1KGh3LVxcdTAwM2VtYWMuYWRkcikpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2LVxcdTAwM2VhZGRyX2Fzc2lnbl90eXBlID0gTkVUX0FERFJfU1RPTEVOO1xcbitcXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVXNpbmcgQUNQSSBwYXNzLXRocm91Z2ggTUFDIGFkZHIgJXBNXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgaHctXFx1MDAzZW1hYy5hZGRyKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChody1cXHUwMDNlbWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJOVk0gUmVhZCBFcnJvclxcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgaHctXFx1MDAzZW1hYy5hZGRyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdmYvdmlydGNobmwuaCBiL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcXG5pbmRleCAxMWJkYWI1NTIyZmQ1Li41MTFjODgyN2M2NDBmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oXFxuQEAgLTYzNiw2ICs2MzYsNyBAQCBlbnVtIHZpcnRjaG5sX3ZsYW5fc3VwcG9ydCB7XFxuIFxcdFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzgxMDAgPVxcdFxcdEJJVCgwKSxcXG4gXFx0VklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhBOCA9XFx0XFx0QklUKDEpLFxcbiBcXHRWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV85MTAwID1cXHRcXHRCSVQoMiksXFxuK1xcdFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4RTcgPVxcdFxcdEJJVCgzKSxcXG4gXFx0VklSVENITkxfVkxBTl9UQUdfTE9DQVRJT05fTDJUQUcxID1cXHRCSVQoOCksXFxuIFxcdFZJUlRDSE5MX1ZMQU5fVEFHX0xPQ0FUSU9OX0wyVEFHMiA9XFx0QklUKDkpLFxcbiBcXHRWSVJUQ0hOTF9WTEFOX1RBR19MT0NBVElPTl9MMlRBRzJfMiA9XFx0QklUKDEwKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6MjYuODgxNTkxNDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NjMwOTY1NDEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFMTAwMEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwMF9hbGxvY19yeF9idWZmZXJzXCIsXG4gICAgXCJlMTAwMF9jbGVhbl9yeF9pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI2ZjBhZjVjOTQzN2Y0MTY0YjAyYzYxMThhYTBkNzg0NDU1ZGFiMTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjQ3OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaWNlLnJzdFxuaW5kZXggMGJjYTI5M2NmOWNiNy4uODJiM2NjYzcwMjdlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaWNlLnJzdFxuQEAgLTk0MSw2ICs5NDEsODYgQEAgVG8gc2VlIGlucHV0IHNpZ25hbCBvbiB0aG9zZSBQVFAgcGlucywgeW91IG5lZWQgdG8gY29uZmlndXJlIERQTEwgcHJvcGVybHkuXG4gT3V0cHV0IHNpZ25hbCBpcyBvbmx5IHZpc2libGUgb24gRFBMTCBhbmQgdG8gc2VuZCBpdCB0byB0aGUgYm9hcmQgU01BL1UuRkwgcGlucyxcbiBEUExMIG91dHB1dCBwaW5zIGhhdmUgdG8gYmUgbWFudWFsbHkgY29uZmlndXJlZC5cbiBcbitVbm1hbmFnZWQgRFBMTCBTdXBwb3J0XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK0hhcmR3YXJlIHZhcmlhbnRzIG9mIEU4MzAgbWF5IHN1cHBvcnQgYW4gdW5tYW5hZ2VkIERQTEw6XG4rXG4rLSBJbnRlbChSKSBFdGhlcm5ldCBOZXR3b3JrIEFkYXB0ZXIgRTgzMC1YWFZEQThGIGZvciBPQ1AgMy4wLFxuK1xuKy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE0Ri5cbitcbitJbiB0aGUgY2FzZSBvZiB0aGUgdW5tYW5hZ2VkIERQTEwsIHRoZSBjb25maWd1cmF0aW9uIGlzIGhhcmRjb2RlZCB3aXRoaW4gdGhlXG4raGFyZHdhcmUgYW5kIGZpcm13YXJlLCBtZWFuaW5nIHVzZXJzIGNhbm5vdCBtb2RpZnkgc2V0dGluZ3MuIEhvd2V2ZXIsXG4rdXNlcnMgY2FuIGNoZWNrIHRoZSBEUExMIGxvY2sgc3RhdHVzIGFuZCBvYnRhaW4gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvblxuK3Rocm91Z2ggdGhlIExpbnV4IERQTEwgc3Vic3lzdGVtLlxuK1xuK1doZW4gcHJlc2VudCwgdGhlIERQTEwgZGV2aWNlIGxvY2tzIHRvIGFuIGV4dGVybmFsIHNpZ25hbCBwcm92aWRlZCB0aHJvdWdoIHRoZVxuK1BDSWUvT0NQIHBpbi4gVGhlIGV4cGVjdGVkIGlucHV0IHNpZ25hbCBpcyAxUFBTICgxIFB1bHNlIFBlciBTZWNvbmQpIGVtYmVkZGVkXG4rb24gYSAxME1IeiByZWZlcmVuY2UgY2xvY2suXG4rVGhlIERQTEwgcHJvZHVjZXMgb3V0cHV0OlxuK1xuKy0gZm9yIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2wpIFx1MDAyNiBQSFkgKFBoeXNpY2FsIExheWVyKSBjbG9ja3MsXG4rXG4rLSAxUFBTIGZvciBzeW5jaHJvbml6YXRpb24gb2Ygb25ib2FyZCBQSEMgKFByZWNpc2lvbiBIYXJkd2FyZSBDbG9jaykgdGltZXIuXG4rXG4rRXhhbXBsZSBvdXRwdXQgb2YgcXVlcnlpbmcgdGhlIExpbnV4IERQTEwgc3Vic3lzdGVtIGNhbiBiZSBmb3VuZCBiZWxvdy5cbitcbisuLiBjb2RlLWJsb2NrOjogY29uc29sZVxuKyAgOmNhcHRpb246IER1bXBpbmcgdGhlIERQTEwgcGluc1xuK1xuKyAgJCBcdTAwM2N5bmxcdTAwM2UgLS1zcGVjIERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcGxsLnlhbWwgLS1kdW1wIHBpbi1nZXRcbisgIFt7J2JvYXJkLWxhYmVsJzogJzE1ODgtVElNRV9TWU5DJyxcbisgICAgJ2NhcGFiaWxpdGllcyc6IHNldCgpLFxuKyAgICAnY2xvY2staWQnOiAyODI1NzQ0NzE1NjEyMTYsXG4rICAgICdlc3luYy1mcmVxdWVuY3knOiAxLFxuKyAgICAnZXN5bmMtZnJlcXVlbmN5LXN1cHBvcnRlZCc6IFt7J2ZyZXF1ZW5jeS1tYXgnOiAxLCAnZnJlcXVlbmN5LW1pbic6IDF9XSxcbisgICAgJ2VzeW5jLXB1bHNlJzogMjUsXG4rICAgICdmcmVxdWVuY3knOiAxMDAwMDAwMCxcbisgICAgJ2lkJzogMTMsXG4rICAgICdtb2R1bGUtbmFtZSc6ICdpY2UnLFxuKyAgICAncGFyZW50LWRldmljZSc6IFt7J2RpcmVjdGlvbic6ICdpbnB1dCcsXG4rICAgICAgICAgICAgICAgICAgICAgICAncGFyZW50LWlkJzogNixcbisgICAgICAgICAgICAgICAgICAgICAgICdzdGF0ZSc6ICdjb25uZWN0ZWQnfV0sXG4rICAgICdwaGFzZS1hZGp1c3QtbWF4JzogMCxcbisgICAgJ3BoYXNlLWFkanVzdC1taW4nOiAwLFxuKyAgICAndHlwZSc6ICdleHQnfSxcbisgICAgeydib2FyZC1sYWJlbCc6ICdNQUMtUEhZLUNMSycsXG4rICAgICAgJ2NhcGFiaWxpdGllcyc6IHNldCgpLFxuKyAgICAnY2xvY2staWQnOiAyODI1NzQ0NzE1NjEyMTYsXG4rICAgICdmcmVxdWVuY3knOiAxNTYyNTAwMDAsXG4rICAgICdpZCc6IDE0LFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcbisgICAgJ3BhcmVudC1kZXZpY2UnOiBbeydkaXJlY3Rpb24nOiAnb3V0cHV0JyxcbisgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnQtaWQnOiA2LFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlJzogJ2Nvbm5lY3RlZCd9XSxcbisgICAgJ3BoYXNlLWFkanVzdC1tYXgnOiAwLFxuKyAgICAncGhhc2UtYWRqdXN0LW1pbic6IDAsXG4rICAgICd0eXBlJzogJ3N5bmNlLWV0aC1wb3J0J30sXG4rICB7J2JvYXJkLWxhYmVsJzogJzE1ODgtVElNRV9SRUYnLFxuKyAgICAnY2FwYWJpbGl0aWVzJzogc2V0KCksXG4rICAgICdjbG9jay1pZCc6IDI4MjU3NDQ3MTU2MTIxNixcbisgICAgJ2ZyZXF1ZW5jeSc6IDEsXG4rICAgICdpZCc6IDE1LFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcbisgICAgJ3BhcmVudC1kZXZpY2UnOiBbeydkaXJlY3Rpb24nOiAnb3V0cHV0JyxcbisgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnQtaWQnOiA2LFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlJzogJ2Nvbm5lY3RlZCd9XSxcbisgICAgJ3BoYXNlLWFkanVzdC1tYXgnOiAwLFxuKyAgICAncGhhc2UtYWRqdXN0LW1pbic6IDAsXG4rICAgICd0eXBlJzogJ2ludC1vc2NpbGxhdG9yJ31dXG4rXG4rLi4gY29kZS1ibG9jazo6IGNvbnNvbGVcbisgIDpjYXB0aW9uOiBEdW1waW5nIHRoZSBEUExMIGRldmljZXNcbitcbisgICQgXHUwMDNjeW5sXHUwMDNlIC0tc3BlYyBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHBsbC55YW1sIC0tZHVtcCBkZXZpY2UtZ2V0XG4rICBbeydjbG9jay1pZCc6IDI4MjU3NDQ3MTU2MTIxNixcbisgICAgJ2lkJzogNixcbisgICAgJ2xvY2stc3RhdHVzJzogJ2xvY2tlZCcsXG4rICAgICdtb2RlJzogJ21hbnVhbCcsXG4rICAgICdtb2RlLXN1cHBvcnRlZCc6IFsnbWFudWFsJ10sXG4rICAgICdtb2R1bGUtbmFtZSc6ICdpY2UnLFxuKyAgICAndHlwZSc6ICdwcHMnfV1cbitcbiBHTlNTIG1vZHVsZVxuIC0tLS0tLS0tLS0tXG4gUmVxdWlyZXMga2VybmVsIGNvbXBpbGVkIHdpdGggQ09ORklHX0dOU1M9eSBvciBDT05GSUdfR05TUz1tLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuY1xuaW5kZXggODQ0ZjMxYWIzN2FkNC4uYjA4YmNiZGIxOWQ5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jXG5AQCAtNjc1LDYgKzY3NSw4IEBAIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdHNrYiA9IGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYjtcbiBcdFx0aWYgKHNrYikge1xuIFx0XHRcdHNrYl90cmltKHNrYiwgMCk7XG4rXHRcdFx0aWYgKGxpa2VseShidWZmZXJfaW5mby1cdTAwM2VkbWEpKVxuK1x0XHRcdFx0Z290byB3cml0ZV9kZXNjO1xuIFx0XHRcdGdvdG8gbWFwX3NrYjtcbiBcdFx0fVxuIFxuQEAgLTY5MiwxMCArNjk0LDEyIEBAIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdFx0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuIFx0XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSkpIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcIlJ4IERNQSBtYXAgZmFpbGVkXFxuXCIpO1xuK1x0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSA9IDA7XG4gXHRcdFx0YWRhcHRlci1cdTAwM2VyeF9kbWFfZmFpbGVkKys7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbit3cml0ZV9kZXNjOlxuIFx0XHRyeF9kZXNjID0gRTEwMDBfUlhfREVTQ19FWFQoKnJ4X3JpbmcsIGkpO1xuIFx0XHRyeF9kZXNjLVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby1cdTAwM2VkbWEpO1xuIFxuQEAgLTk1Myw3ICs5NTcsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFx0XHRkbWFfcm1iKCk7XHQvKiByZWFkIGRlc2NyaXB0b3IgYW5kIHJ4X2J1ZmZlcl9pbmZvIGFmdGVyIHN0YXR1cyBERCAqL1xuIFxuIFx0XHRza2IgPSBidWZmZXJfaW5mby1cdTAwM2Vza2I7XG4tXHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYiA9IE5VTEw7XG4gXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VkYXRhIC0gTkVUX0lQX0FMSUdOKTtcbiBcbkBAIC05NjcsOSArOTcwLDYgQEAgc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbiBcbiBcdFx0Y2xlYW5lZCA9IHRydWU7XG4gXHRcdGNsZWFuZWRfY291bnQrKztcbi1cdFx0ZG1hX3VubWFwX3NpbmdsZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgYnVmZmVyX2luZm8tXHUwMDNlZG1hLFxuLVx0XHRcdFx0IGFkYXB0ZXItXHUwMDNlcnhfYnVmZmVyX2xlbiwgRE1BX0ZST01fREVWSUNFKTtcbi1cdFx0YnVmZmVyX2luZm8tXHUwMDNlZG1hID0gMDtcbiBcbiBcdFx0bGVuZ3RoID0gbGUxNl90b19jcHUocnhfZGVzYy1cdTAwM2V3Yi51cHBlci5sZW5ndGgpO1xuIFxuQEAgLTk4NSw4ICs5ODUsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFx0XHRpZiAoYWRhcHRlci1cdTAwM2VmbGFnczIgXHUwMDI2IEZMQUcyX0lTX0RJU0NBUkRJTkcpIHtcbiBcdFx0XHQvKiBBbGwgcmVjZWl2ZXMgbXVzdCBmaXQgaW50byBhIHNpbmdsZSBidWZmZXIgKi9cbiBcdFx0XHRlX2RiZyhcIlJlY2VpdmUgcGFja2V0IGNvbnN1bWVkIG11bHRpcGxlIGJ1ZmZlcnNcXG5cIik7XG4tXHRcdFx0LyogcmVjeWNsZSAqL1xuLVx0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYiA9IHNrYjtcbiBcdFx0XHRpZiAoc3RhdGVyciBcdTAwMjYgRTEwMDBfUlhEX1NUQVRfRU9QKVxuIFx0XHRcdFx0YWRhcHRlci1cdTAwM2VmbGFnczIgXHUwMDI2PSB+RkxBRzJfSVNfRElTQ0FSRElORztcbiBcdFx0XHRnb3RvIG5leHRfZGVzYztcbkBAIC05OTQsOCArOTkyLDYgQEAgc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbiBcbiBcdFx0aWYgKHVubGlrZWx5KChzdGF0ZXJyIFx1MDAyNiBFMTAwMF9SWERFWFRfRVJSX0ZSQU1FX0VSUl9NQVNLKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICEobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQUxMKSkpIHtcbi1cdFx0XHQvKiByZWN5Y2xlICovXG4tXHRcdFx0YnVmZmVyX2luZm8tXHUwMDNlc2tiID0gc2tiO1xuIFx0XHRcdGdvdG8gbmV4dF9kZXNjO1xuIFx0XHR9XG4gXG5AQCAtMTAyMiwxOSArMTAxOCwzMyBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFx0XHRcdHN0cnVjdCBza19idWZmICpuZXdfc2tiID1cbiBcdFx0XHRcdG5hcGlfYWxsb2Nfc2tiKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSwgbGVuZ3RoKTtcbiBcdFx0XHRpZiAobmV3X3NrYikge1xuK1x0XHRcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0XHRidWZmZXJfaW5mby1cdTAwM2VkbWEsXG4rXHRcdFx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXJ4X2J1ZmZlcl9sZW4sXG4rXHRcdFx0XHRcdFx0XHRETUFfRlJPTV9ERVZJQ0UpO1xuIFx0XHRcdFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGFfb2Zmc2V0KG5ld19za2IsXG4gXHRcdFx0XHRcdFx0XHQgICAgICAgLU5FVF9JUF9BTElHTixcbiBcdFx0XHRcdFx0XHRcdCAgICAgICAoc2tiLVx1MDAzZWRhdGEgLVxuIFx0XHRcdFx0XHRcdFx0XHRORVRfSVBfQUxJR04pLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgIChsZW5ndGggK1xuIFx0XHRcdFx0XHRcdFx0XHRORVRfSVBfQUxJR04pKTtcbi1cdFx0XHRcdC8qIHNhdmUgdGhlIHNrYiBpbiBidWZmZXJfaW5mbyBhcyBnb29kICovXG4tXHRcdFx0XHRidWZmZXJfaW5mby1cdTAwM2Vza2IgPSBza2I7XG4rXHRcdFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHRcdCAgIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbitcdFx0XHRcdFx0XHRcdCAgIGFkYXB0ZXItXHUwMDNlcnhfYnVmZmVyX2xlbixcbitcdFx0XHRcdFx0XHRcdCAgIERNQV9GUk9NX0RFVklDRSk7XG4gXHRcdFx0XHRza2IgPSBuZXdfc2tiO1xuK1x0XHRcdFx0Z290byBjb3B5YnJlYWtfZG9uZTtcbiBcdFx0XHR9XG4gXHRcdFx0LyogZWxzZSBqdXN0IGNvbnRpbnVlIHdpdGggdGhlIG9sZCBvbmUgKi9cbiBcdFx0fVxuLVx0XHQvKiBlbmQgY29weWJyZWFrIGNvZGUgKi9cbitcbitcdFx0YnVmZmVyX2luZm8tXHUwMDNlc2tiID0gTlVMTDtcbitcdFx0ZG1hX3VubWFwX3NpbmdsZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgYnVmZmVyX2luZm8tXHUwMDNlZG1hLFxuK1x0XHRcdFx0IGFkYXB0ZXItXHUwMDNlcnhfYnVmZmVyX2xlbixcbitcdFx0XHRcdCBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0XHRidWZmZXJfaW5mby1cdTAwM2VkbWEgPSAwO1xuK1xuK2NvcHlicmVha19kb25lOlxuIFx0XHRza2JfcHV0KHNrYiwgbGVuZ3RoKTtcbiBcbiBcdFx0LyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbmluZGV4IDBjZDBlNTU5N2M5MDkuLmFiYmM3MWU4MTVhZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5AQCAtNCw2ICs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0L2ludGVsL2xpYmllL3BjdHlwZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0L2ludGVsL2xpYmllL3J4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX21hY3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG5AQCAtMjQxMSwxMCArMjQxMiwxMiBAQCB2b2lkIGk0MGVfYXFjX2FkZF9maWx0ZXJzKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcbiBcbiBcdGlmIChmY250ICE9IG51bV9hZGQpIHtcbiBcdFx0aWYgKHZzaS1cdTAwM2V0eXBlID09IEk0MEVfVlNJX01BSU4pIHtcbi1cdFx0XHRzZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVx1MDAzZXN0YXRlKTtcbi1cdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdCBcIkVycm9yICVzIGFkZGluZyBSWCBmaWx0ZXJzIG9uICVzLCBwcm9taXNjdW91cyBtb2RlIGZvcmNlZCBvblxcblwiLFxuLVx0XHRcdFx0IGxpYmllX2FxX3N0cihhcV9zdGF0dXMpLCB2c2lfbmFtZSk7XG4rXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQyxcbitcdFx0XHRcdFx0ICAgICAgdnNpLVx1MDAzZXN0YXRlKSkge1xuK1x0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIkVycm9yICVzIGFkZGluZyBSWCBmaWx0ZXJzIG9uICVzLCBwcm9taXNjdW91cyBtb2RlIGZvcmNlZCBvblxcblwiLFxuK1x0XHRcdFx0XHQgbGliaWVfYXFfc3RyKGFxX3N0YXR1cyksIHZzaV9uYW1lKTtcbitcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAodnNpLVx1MDAzZXR5cGUgPT0gSTQwRV9WU0lfU1JJT1YgfHxcbiBcdFx0XHQgICB2c2ktXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9WTURRMSB8fFxuIFx0XHRcdCAgIHZzaS1cdTAwM2V0eXBlID09IEk0MEVfVlNJX1ZNRFEyKSB7XG5AQCAtMjQ2NCwxMCArMjQ2NywxMSBAQCBpNDBlX2FxY19icm9hZGNhc3RfZmlsdGVyKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcbiBcdH1cbiBcbiBcdGlmIChhcV9yZXQpIHtcbi1cdFx0c2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsIHZzaS1cdTAwM2VzdGF0ZSk7XG4tXHRcdGRldl93YXJuKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCBcIkVycm9yICVzLCBmb3JjaW5nIG92ZXJmbG93IHByb21pc2N1b3VzIG9uICVzXFxuXCIsXG4tXHRcdFx0IGxpYmllX2FxX3N0cihody1cdTAwM2VhcS5hc3FfbGFzdF9zdGF0dXMpLCB2c2lfbmFtZSk7XG4rXHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsIHZzaS1cdTAwM2VzdGF0ZSkpIHtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcIkVycm9yICVzLCBmb3JjaW5nIG92ZXJmbG93IHByb21pc2N1b3VzIG9uICVzXFxuXCIsXG4rXHRcdFx0XHQgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFxLmFzcV9sYXN0X3N0YXR1cyksIHZzaV9uYW1lKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIGFxX3JldDtcbkBAIC0zNjIyLDcgKzM2MjYsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGk0MGVfcmluZyAqcmluZylcbiBcdH1cbiBcbiBza2lwOlxuLVx0eGRwX2luaXRfYnVmZihcdTAwMjZyaW5nLVx1MDAzZXhkcCwgeGRwX2ZyYW1lX3N6LCBcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuK1x0eGRwX2luaXRfYnVmZihcdTAwMjZyaW5nLVx1MDAzZXhkcF9jdHgueGRwLCB4ZHBfZnJhbWVfc3osIFx1MDAyNnJpbmctXHUwMDNleGRwX3J4cSk7XG4gXG4gXHRyeF9jdHguZGJ1ZmYgPSBESVZfUk9VTkRfVVAocmluZy1cdTAwM2VyeF9idWZfbGVuLFxuIFx0XHRcdFx0ICAgIEJJVF9VTEwoSTQwRV9SWFFfQ1RYX0RCVUZGX1NISUZUKSk7XG5AQCAtMTM1ODIsNiArMTM1ODYsNTMgQEAgc3RhdGljIGludCBpNDBlX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IGk0MGVfeGRwX3J4X2hhc2goY29uc3Qgc3RydWN0IHhkcF9tZCAqX2N0eCwgdTMyICpoYXNoLFxuK1x0XHRcdCAgICBlbnVtIHhkcF9yc3NfaGFzaF90eXBlICpyc3NfdHlwZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqY3R4ID0gKGNvbnN0IHZvaWQgKilfY3R4O1xuK1x0Y29uc3QgdW5pb24gaTQwZV9yeF9kZXNjICpkZXNjID0gY3R4LVx1MDAzZWRlc2M7XG4rXHRzdHJ1Y3QgbGliZXRoX3J4X3B0IHJ4X3B0eXBlO1xuK1x0dTggcmF3X3J4X3B0eXBlO1xuK1x0dTY0IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGxlNjRfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQxLnN0YXR1c19lcnJvcl9sZW4pO1xuK1x0cmF3X3J4X3B0eXBlID0gRklFTERfR0VUKEk0MEVfUlhEX1FXMV9QVFlQRV9NQVNLLCBzdGF0dXMpO1xuK1x0cnhfcHR5cGUgPSBsaWJpZV9yeF9wdF9wYXJzZShyYXdfcnhfcHR5cGUpO1xuK1xuK1x0aWYgKCFsaWJldGhfcnhfcHRfaGFzX2hhc2goY3R4LVx1MDAzZXhkcC5yeHEtXHUwMDNlZGV2LCByeF9wdHlwZSkgfHxcbitcdCAgICBGSUVMRF9HRVQoSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX01BU0ssIHN0YXR1cykgIT1cbitcdFx0ICAgIEk0MEVfUlhfREVTQ19GTFRTVEFUX1JTU19IQVNIKVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4rXG4rXHQqaGFzaCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQwLmhpX2R3b3JkLnJzcyk7XG4rXHQqcnNzX3R5cGUgPSByeF9wdHlwZS5oYXNoX3R5cGU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBpNDBlX3hkcF9yeF92bGFuX3RhZyhjb25zdCBzdHJ1Y3QgeGRwX21kICpfY3R4LCBfX2JlMTYgKnZsYW5fcHJvdG8sXG4rXHRcdFx0XHR1MTYgKnZsYW5fdGNpKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpNDBlX3hkcF9idWZmICpjdHggPSAoY29uc3Qgdm9pZCAqKV9jdHg7XG4rXHRjb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2MgPSBjdHgtXHUwMDNlZGVzYztcbitcdHU2NCBzdGF0dXM7XG4rXG4rXHRzdGF0dXMgPSBsZTY0X3RvX2NwdShkZXNjLVx1MDAzZXdiLnF3b3JkMS5zdGF0dXNfZXJyb3JfbGVuKTtcbitcbitcdGlmICghKHN0YXR1cyBcdTAwMjYgQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTDJUQUcxUF9TSElGVCkpKVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4rXG4rXHQqdmxhbl9wcm90byA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKTtcbitcdCp2bGFuX3RjaSA9IGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQwLmxvX2R3b3JkLmwydGFnMSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB4ZHBfbWV0YWRhdGFfb3BzIGk0MGVfeGRwX21ldGFkYXRhX29wcyA9IHtcbitcdC54bW9fcnhfaGFzaFx0XHQ9IGk0MGVfeGRwX3J4X2hhc2gsXG4rXHQueG1vX3J4X3ZsYW5fdGFnXHQ9IGk0MGVfeGRwX3J4X3ZsYW5fdGFnLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNDBlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW5cdFx0PSBpNDBlX29wZW4sXG4gXHQubmRvX3N0b3BcdFx0PSBpNDBlX2Nsb3NlLFxuQEAgLTEzNzg0LDYgKzEzODM1LDcgQEAgc3RhdGljIGludCBpNDBlX2NvbmZpZ19uZXRkZXYoc3RydWN0IGk0MGVfdnNpICp2c2kpXG4gXHRpNDBlX3ZzaV9jb25maWdfbmV0ZGV2X3RjKHZzaSwgdnNpLVx1MDAzZXRjX2NvbmZpZy5lbmFibGVkX3RjKTtcbiBcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2aTQwZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZpNDBlX3hkcF9tZXRhZGF0YV9vcHM7XG4gXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXHRpNDBlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXG5pbmRleCBlZjVlNjU3ODE2ZjAwLi43ZjY4YWRiNTEwOWIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuQEAgLTI0MzgsMTAgKzI0MzgsMTEgQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LFxuIFx0XHRcdCAgICAgdW5zaWduZWQgaW50ICpyeF9jbGVhbmVkKVxuIHtcbiBcdHVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlcyA9IDAsIHRvdGFsX3J4X3BhY2tldHMgPSAwO1xuK1x0c3RydWN0IGk0MGVfeGRwX2J1ZmYgKnhkcF9jdHggPSBcdTAwMjZyeF9yaW5nLVx1MDAzZXhkcF9jdHg7XG4gXHR1MTYgY2xlYW5lZF9jb3VudCA9IEk0MEVfREVTQ19VTlVTRUQocnhfcmluZyk7XG4gXHR1MTYgY2xlYW5fdGhyZXNob2xkID0gcnhfcmluZy1cdTAwM2Vjb3VudCAvIDI7XG4gXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcnhfcmluZy1cdTAwM2VyeF9vZmZzZXQ7XG4tXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCA9IFx1MDAyNnJ4X3JpbmctXHUwMDNleGRwO1xuK1x0c3RydWN0IHhkcF9idWZmICp4ZHAgPSBcdTAwMjZ4ZHBfY3R4LVx1MDAzZXhkcDtcbiBcdHVuc2lnbmVkIGludCB4ZHBfeG1pdCA9IDA7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFx0Ym9vbCBmYWlsdXJlID0gZmFsc2U7XG5AQCAtMjUzMCw2ICsyNTMxLDggQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LFxuIFx0XHRpZiAobmVvcClcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0eGRwX2N0eC1cdTAwM2VkZXNjID0gcnhfZGVzYztcbitcbiBcdFx0eGRwX3JlcyA9IGk0MGVfcnVuX3hkcChyeF9yaW5nLCB4ZHAsIHhkcF9wcm9nKTtcbiBcbiBcdFx0aWYgKHhkcF9yZXMpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaFxuaW5kZXggMWU1ZmQ2M2Q0N2Y0Ny4uYmI3NDFmZjNlNWYyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcbkBAIC0yODMsNiArMjgzLDExIEBAIHN0cnVjdCBpNDBlX3J4X2J1ZmZlciB7XG4gXHRfX3UzMiBwYWdlX2NvdW50O1xuIH07XG4gXG4rc3RydWN0IGk0MGVfeGRwX2J1ZmYge1xuK1x0c3RydWN0IHhkcF9idWZmIHhkcDtcbitcdGNvbnN0IHVuaW9uIGk0MGVfcnhfZGVzYyAqZGVzYztcbit9O1xuK1xuIHN0cnVjdCBpNDBlX3F1ZXVlX3N0YXRzIHtcbiBcdHU2NCBwYWNrZXRzO1xuIFx0dTY0IGJ5dGVzO1xuQEAgLTM0NSw3ICszNTAsNyBAQCBzdHJ1Y3QgaTQwZV9yaW5nIHtcbiBcdCAqIGFuZCB0byByZXN1bWUgcGFja2V0IGJ1aWxkaW5nIGZvciB0aGlzIHJpbmcgaW4gdGhlIG5leHQgY2FsbCB0b1xuIFx0ICogaTQwZV9jbGVhbl9yeF9yaW5nX2lycSgpLlxuIFx0ICovXG4tXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xuK1x0c3RydWN0IGk0MGVfeGRwX2J1ZmYgeGRwX2N0eDtcbiBcbiBcdC8qIE5leHQgZGVzY3JpcHRvciB0byBiZSBwcm9jZXNzZWQ7IG5leHRfdG9fY2xlYW4gaXMgdXBkYXRlZCBvbmx5IG9uXG4gXHQgKiBwcm9jZXNzaW5nIEVPUCBkZXNjcmlwdG9yXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmhcbmluZGV4IGVkOGJiZGI1ODZkYTkuLjE2YTY1YzZlNTE1MzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oXG5AQCAtNCw2ICs0LDcgQEBcbiAjaWZuZGVmIF9JNDBFX1RZUEVfSF9cbiAjZGVmaW5lIF9JNDBFX1RZUEVfSF9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcImk0MGVfYWRtaW5xLmhcIlxuICNpbmNsdWRlIFwiaTQwZV9obWMuaFwiXG5AQCAtNjk5LDYgKzcwMCwxMCBAQCBlbnVtIGk0MGVfcnhfZGVzY19zdGF0dXNfYml0cyB7XG4gXHRJNDBFX1JYX0RFU0NfU1RBVFVTX0xBU1QgLyogdGhpcyBlbnRyeSBtdXN0IGJlIGxhc3QhISEgKi9cbiB9O1xuIFxuKyNkZWZpbmUgSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX01BU0sgICAgICAgICAgICAgICAgICAgXFxcbitcdEdFTk1BU0tfVUxMKEk0MEVfUlhfREVTQ19TVEFUVVNfRkxUU1RBVF9TSElGVCArIDEsIFxcXG4rXHRcdCAgICBJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfU0hJRlQpXG4rXG4gI2RlZmluZSBJNDBFX1JYRF9RVzFfU1RBVFVTX1NISUZUXHQwXG4gI2RlZmluZSBJNDBFX1JYRF9RVzFfU1RBVFVTX01BU0tcdCgoQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTEFTVCkgLSAxKSBcXFxuIFx0XHRcdFx0XHQgXHUwMDNjXHUwMDNjIEk0MEVfUlhEX1FXMV9TVEFUVVNfU0hJRlQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXG5pbmRleCA5ZjQ3Mzg4ZWFiYTUzLi41MWEwNWNlNGM3Y2U4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbkBAIC0yNDYsNiArMjQ2LDggQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxuIFx0dTMyIG5iX2J1ZmZzLCBpO1xuIFx0ZG1hX2FkZHJfdCBkbWE7XG4gXG4rXHRYU0tfQ0hFQ0tfUFJJVl9UWVBFKHN0cnVjdCBpNDBlX3hkcF9idWZmKTtcbitcbiBcdHJ4X2Rlc2MgPSBJNDBFX1JYX0RFU0MocnhfcmluZywgbnR1KTtcbiBcdHhkcCA9IGk0MGVfcnhfYmkocnhfcmluZywgbnR1KTtcbiBcbkBAIC0zOTYsNiArMzk4LDE0IEBAIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFdBUk5fT05fT05DRSgxKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBpNDBlX3hkcF9idWZmICp4c2tfYnVmZl90b19pNDBlX2N0eChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbit7XG4rXHQvKiB4ZHBfYnVmZiBwb2ludGVyIHVzZWQgYnkgWkMgY29kZSBwYXRoIGlzIGFsbG9jYXRlZCBhcyB4ZHBfYnVmZl94c2suXG4rXHQgKiBpNDBlX3hkcF9idWZmIHByaXZhdGUgZmllbGRzIG92ZXJsYXAgd2l0aCB4ZHBfYnVmZl94c2stXHUwMDNlY2IuXG4rXHQgKi9cbitcdHJldHVybiAoc3RydWN0IGk0MGVfeGRwX2J1ZmYgKil4ZHA7XG4rfVxuK1xuIC8qKlxuICAqIGk0MGVfY2xlYW5fcnhfaXJxX3pjIC0gQ29uc3VtZXMgUnggcGFja2V0cyBmcm9tIHRoZSBoYXJkd2FyZSByaW5nXG4gICogQHJ4X3Jpbmc6IFJ4IHJpbmdcbkBAIC00NzIsNiArNDgyLDggQEAgaW50IGk0MGVfY2xlYW5fcnhfaXJxX3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIGludCBidWRnZXQpXG4gXHRcdGlmIChpNDBlX2lzX25vbl9lb3AocnhfcmluZywgcnhfZGVzYykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdHhza19idWZmX3RvX2k0MGVfY3R4KGZpcnN0KS1cdTAwM2VkZXNjID0gcnhfZGVzYztcbitcbiBcdFx0eGRwX3JlcyA9IGk0MGVfcnVuX3hkcF96YyhyeF9yaW5nLCBmaXJzdCwgeGRwX3Byb2cpO1xuIFx0XHRpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHJ4X3JpbmcsIGZpcnN0LCByeF9kZXNjLCBcdTAwMjZyeF9wYWNrZXRzLFxuIFx0XHRcdFx0XHQgIFx1MDAyNnJ4X2J5dGVzLCB4ZHBfcmVzLCBcdTAwMjZmYWlsdXJlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9oZWFsdGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jXG5pbmRleCA4ZTlhOGE4MTc4ZDQ4Li5hODNlYjlmMTA0YzgzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jXG5AQCAtMTAxLDYgKzEwMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2hlYWx0aF9zdGF0dXMgaWNlX2hlYWx0aF9zdGF0dXNfbG9va3VwW10gPSB7XG4gXHRcdFwiU3VwcGxpZWQgTUlCIGZpbGUgaXMgaW52YWxpZC4gRENCIHJldmVydGVkIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cIixcbiBcdFx0XCJEaXNhYmxlIEZXLUxMRFAgYW5kIGNoZWNrIERDQnggc3lzdGVtIGNvbmZpZ3VyYXRpb24uXCIsXG4gXHRcdHtpY2VfcG9ydF9udW1iZXJfbGFiZWwsIFwiTUlCIElEXCJ9fSxcbitcdHtJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0ssIFwiTG9jYWwgRFBMTCBsb2NrIHN0YXR1c1wiLFxuK1x0XHROVUxMLH0sXG4gfTtcbiBcbiBzdGF0aWMgaW50IGljZV9oZWFsdGhfc3RhdHVzX2xvb2t1cF9jb21wYXJlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG5AQCAtMjQyLDYgKzI0NCwxMCBAQCB2b2lkIGljZV9wcm9jZXNzX2hlYWx0aF9zdGF0dXNfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcnFfZXZlbnRfaW5mb1xuIFx0XHRcdFx0cGYtXHUwMDNlaGVhbHRoX3JlcG9ydGVycy5md19zdGF0dXMgPSAqaGVhbHRoX2luZm87XG4gXHRcdFx0XHRkZXZsaW5rX2hlYWx0aF9yZXBvcnQocGYtXHUwMDNlaGVhbHRoX3JlcG9ydGVycy5mdyxcbiBcdFx0XHRcdFx0XHQgICAgICBcIkZXIHN5bmRyb21lIHJlcG9ydGVkXCIsIE5VTEwpO1xuK1x0XHRcdFx0aWYgKHN0YXR1c19jb2RlID09IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSyBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgcGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKVxuK1x0XHRcdFx0XHRpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQocGYsIGhlYWx0aF9pbmZvLCB0cnVlKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX1BGOlxuIFx0XHRcdGNhc2UgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX1BPUlQ6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZG1pbnFfY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaFxuaW5kZXggNDI4NzhhYmFjOWViMS4uODQ4YWM1ODM0Mjk3OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaFxuQEAgLTE1MDAsNiArMTUwMCw3IEBAIHN0cnVjdCBpY2VfYXFjX2dldF9saW5rX3RvcG8ge1xuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfUENBOTU3NVx0XHQweDIxXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDMwNjMyXzgwMDMyXHQweDI0XG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9TSTUzODNfNTM4NFx0MHgyNVxuKyNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfWkw4MDY0MFx0XHQweDI3XG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9FODIyX1BIWVx0XHQweDMwXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9DODI3XHRcdDB4MzFcbiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX0dFTl9DTEtfTVVYXHQweDQ3XG5AQCAtMjQ4MywxMSArMjQ4NCwxNCBAQCBlbnVtIGljZV9hcWNfaGVhbHRoX3N0YXR1cyB7XG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0JNQ19SRVNFVFx0XHRcdD0gMHg1MEIsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfTU5HX0ZBSUxcdFx0XHQ9IDB4NTBDLFxuIFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9SRVNPVVJDRV9BTExPQ19GQUlMXHRcdD0gMHg1MEQsXG4rXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0tcdFx0XHQ9IDB4NjAxLFxuIFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9GV19MT09QXHRcdFx0PSAweDEwMDAsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0ZXX1BGUl9GQUlMXHRcdFx0PSAweDEwMDEsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfRkFJTF9BUVx0XHRcdD0gMHgxMDAyLFxuIH07XG4gXG4rI2RlZmluZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfQ09ERV9OVU1cdFx0XHRcdDY0XG4rXG4gLyogR2V0IEhlYWx0aCBTdGF0dXMgKGluZGlyZWN0IDB4RkYyMikgKi9cbiBzdHJ1Y3QgaWNlX2FxY19nZXRfaGVhbHRoX3N0YXR1cyB7XG4gXHRfX2xlMTYgaGVhbHRoX3N0YXR1c19jb3VudDtcbkBAIC0yNTE0LDYgKzI1MTgsMTMgQEAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtIHtcbiBcdF9fbGUzMiBpbnRlcm5hbF9kYXRhMjtcbiB9O1xuIFxuKy8qIEdldCBIZWFsdGggU3RhdHVzIHJlc3BvbnNlIGJ1ZmZlciBlbnRyeSwgKDB4RkYyMSlcbisgKiByZXBlYXRlZCBwZXIgcmVwb3J0ZWQgaGVhbHRoIHN0YXR1c1xuKyAqL1xuK3N0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtIHtcbitcdF9fbGUxNiBoZWFsdGhfc3RhdHVzX2NvZGU7XG4rfTtcbitcbiAvKiBBZG1pbiBRdWV1ZSBjb21tYW5kIG9wY29kZXMgKi9cbiBlbnVtIGljZV9hZG1pbnFfb3BjIHtcbiBcdC8qIEFRIGNvbW1hbmRzICovXG5AQCAtMjY3Nyw2ICsyNjg4LDcgQEAgZW51bSBpY2VfYWRtaW5xX29wYyB7XG4gXG4gXHQvKiBTeXN0ZW0gRGlhZ25vc3RpYyBjb21tYW5kcyAqL1xuIFx0aWNlX2FxY19vcGNfc2V0X2hlYWx0aF9zdGF0dXNfY2ZnXHRcdD0gMHhGRjIwLFxuK1x0aWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzXHQ9IDB4RkYyMSxcbiBcdGljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzXHRcdFx0PSAweEZGMjIsXG4gXG4gXHQvKiBGVyBMb2dnaW5nIENvbW1hbmRzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNcbmluZGV4IGVmMWNlMTA2ZjgxYjUuLjJjNzJlZDE4Njk1YzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG5AQCAtMzA0OCw2ICszMDQ4LDI5IEBAIGJvb2wgaWNlX2lzX2NndV9pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbisvKipcbisgKiBpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0IC0gY2hlY2sgZm9yIHVubWFuYWdlZCBDR1UgcHJlc2VuY2VcbisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxuKyAqXG4rICogQ2hlY2sgaWYgdGhlIHVubWFuYWdlZCBDbG9jayBHZW5lcmF0aW9uIFVuaXQgKENHVSkgZGV2aWNlIGlzIHByZXNlbnQgaW4gdGhlIG5ldGxpc3QuXG4rICogU2F2ZSB0aGUgQ0dVIHBhcnQgbnVtYmVyIGluIHRoZSBodyBzdHJ1Y3R1cmUgZm9yIGxhdGVyIHVzZS5cbisgKiBSZXR1cm46XG4rICogKiB0cnVlIC0gdW5tYW5hZ2VkIGNndSBpcyBwcmVzZW50XG4rICogKiBmYWxzZSAtIHVubWFuYWdlZCBjZ3UgaXMgbm90IHByZXNlbnRcbisgKi9cbitib29sIGljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpXG4re1xuK1x0aWYgKCFpY2VfZmluZF9uZXRsaXN0X25vZGUoaHcsIElDRV9BUUNfTElOS19UT1BPX05PREVfVFlQRV9DTEtfQ1RSTCxcbitcdFx0XHRcdCAgIElDRV9BUUNfTElOS19UT1BPX05PREVfQ1RYX0dMT0JBTCxcbitcdFx0XHRcdCAgIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDAsXG4rXHRcdFx0XHQgICBOVUxMKSkge1xuK1x0XHRody1cdTAwM2VjZ3VfcGFydF9udW1iZXIgPSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogaWNlX2lzX2dwc19pbl9uZXRsaXN0XG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcbkBAIC02MzEyLDYgKzYzMzUsMTE5IEBAIGJvb2wgaWNlX2lzX2Z3X2hlYWx0aF9yZXBvcnRfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRcdFx0ICAgICBJQ0VfRldfQVBJX0hFQUxUSF9SRVBPUlRfUEFUQ0gpO1xuIH1cbiBcbisvKipcbisgKiBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXNfc3VwcG9ydGVkIC0gZ2V0IHN1cHBvcnRlZCBoZWFsdGggc3RhdHVzIGNvZGVzXG4rICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbisgKiBAYnVmZjogcG9pbnRlciB0byBidWZmZXIgd2hlcmUgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyB3aWxsIGJlIHN0b3JlZFxuKyAqIEBudW06IG51bWJlciBvZiBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIGJ1ZmZlciBjYW4gaG9sZFxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAtIHN1Y2Nlc3MsXG4rICogKiBuZWdhdGl2ZSAtIEFRIGVycm9yIGNvZGUuXG4rICovXG4rc3RhdGljIGludFxuK2ljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSAqYnVmZixcbitcdFx0XHRcdCAgIGludCBudW0pXG4re1xuK1x0dTE2IGNvZGUgPSBpY2VfYXFjX29wY19nZXRfc3VwcG9ydGVkX2hlYWx0aF9zdGF0dXNfY29kZXM7XG4rXHRzdHJ1Y3QgbGliaWVfYXFfZGVzYyBkZXNjO1xuK1xuK1x0aWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoXHUwMDI2ZGVzYywgY29kZSk7XG4rXG4rXHRyZXR1cm4gaWNlX2FxX3NlbmRfY21kKGh3LCBcdTAwMjZkZXNjLCBidWZmLCBudW0gKiBzaXplb2YoKmJ1ZmYpLCBOVUxMKTtcbit9XG4rXG4rLyoqXG4rICogaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzIC0gZ2V0IGN1cnJlbnQgaGVhbHRoIHN0YXR1cyBhcnJheSBmcm9tIHRoZSBmaXJtd2FyZVxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4rICogQGJ1ZmY6IHBvaW50ZXIgdG8gYnVmZmVyIHdoZXJlIGhlYWx0aCBzdGF0dXMgZWxlbWVudHMgd2lsbCBiZSBzdG9yZWRcbisgKiBAbnVtOiBudW1iZXIgb2YgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyBidWZmZXIgY2FuIGhvbGRcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgLSBzdWNjZXNzLFxuKyAqICogbmVnYXRpdmUgLSBBUSBlcnJvciBjb2RlLlxuKyAqL1xuK2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsIGludCBudW0pXG4re1xuK1x0c3RydWN0IGxpYmllX2FxX2Rlc2MgZGVzYztcbitcbitcdGljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKFx1MDAyNmRlc2MsXG4rXHRcdFx0XHQgICAgICBpY2VfYXFjX29wY19nZXRfaGVhbHRoX3N0YXR1cyk7XG4rXG4rXHRyZXR1cm4gaWNlX2FxX3NlbmRfY21kKGh3LCBcdTAwMjZkZXNjLCBidWZmLCBudW0gKiBzaXplb2YoKmJ1ZmYpLCBOVUxMKTtcbit9XG4rXG4rLyoqXG4rICogaWNlX2lzX2hlYWx0aF9zdGF0dXNfY29kZV9zdXBwb3J0ZWQgLSBjaGVjayBpZiBoZWFsdGggc3RhdHVzIGNvZGUgaXMgc3VwcG9ydGVkXG4rICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbisgKiBAY29kZTogaGVhbHRoIHN0YXR1cyBjb2RlIHRvIGNoZWNrXG4rICogQHN1cHBvcnRlZDogcG9pbnRlciB0byBib29sZWFuIHJlc3VsdFxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4rICovXG4raW50IGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgY29kZSxcbitcdFx0XHRcdFx0Ym9vbCAqc3VwcG9ydGVkKVxuK3tcbitcdGNvbnN0IGludCBCVUZGX1NJWkUgPSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfQ09ERV9OVU07XG4rXHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSAqYnVmZjtcbitcdGludCByZXQ7XG4rXG4rXHQqc3VwcG9ydGVkID0gZmFsc2U7XG4rXHRidWZmID0ga3phbGxvY19vYmpzKCpidWZmLCBCVUZGX1NJWkUpO1xuK1x0aWYgKCFidWZmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJldCA9IGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQoaHcsIGJ1ZmYsIEJVRkZfU0laRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGZyZWVfYnVmZjtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBCVUZGX1NJWkUgXHUwMDI2XHUwMDI2IGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlOyBpKyspXG4rXHRcdGlmIChsZTE2X3RvX2NwdShidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZSkgPT0gY29kZSkge1xuK1x0XHRcdCpzdXBwb3J0ZWQgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rZnJlZV9idWZmOlxuK1x0a2ZyZWUoYnVmZik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlIC0gZ2V0IGxhc3QgaGVhbHRoIHN0YXR1cyBmb3IgZ2l2ZW4gY29kZVxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG4rICogQG91dDogcG9pbnRlciB0byB0aGUgaGVhbHRoIHN0YXR1cyBzdHJ1Y3QgdG8gYmUgZmlsbGVkXG4rICogQGNvZGU6IGhlYWx0aCBzdGF0dXMgY29kZSB0byBjaGVja1xuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4rICovXG4raW50IGljZV9nZXRfbGFzdF9oZWFsdGhfc3RhdHVzX2NvZGUoc3RydWN0IGljZV9odyAqaHcsXG4rXHRcdFx0XHQgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpvdXQsXG4rXHRcdFx0XHQgICAgdTE2IGNvZGUpXG4re1xuK1x0Y29uc3QgaW50IEJVRkZfU0laRSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19DT0RFX05VTTtcbitcdHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZjtcbitcdGludCByZXQsIGxhc3Rfc3RhdHVzID0gLTE7XG4rXG4rXHRidWZmID0ga3phbGxvY19vYmpzKCpidWZmLCBCVUZGX1NJWkUpO1xuK1x0aWYgKCFidWZmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJldCA9IGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1cyhodywgYnVmZiwgQlVGRl9TSVpFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZnJlZV9idWZmO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEJVRkZfU0laRSBcdTAwMjZcdTAwMjYgYnVmZltpXS5oZWFsdGhfc3RhdHVzX2NvZGU7IGkrKylcbitcdFx0aWYgKGxlMTZfdG9fY3B1KGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlKSA9PSBjb2RlKVxuK1x0XHRcdGxhc3Rfc3RhdHVzID0gaTtcbitcbitcdGlmIChsYXN0X3N0YXR1cyBcdTAwM2U9IDApXG4rXHRcdG1lbWNweShvdXQsIFx1MDAyNmJ1ZmZbbGFzdF9zdGF0dXNdLCBzaXplb2YoKm91dCkpO1xuK1x0ZWxzZVxuK1x0XHRtZW1zZXQob3V0LCAwLCBzaXplb2YoKm91dCkpO1xuK1xuK2ZyZWVfYnVmZjpcbitcdGtmcmVlKGJ1ZmYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogaWNlX2FxX3NldF9oZWFsdGhfc3RhdHVzX2NmZyAtIENvbmZpZ3VyZSBGVyBoZWFsdGggZXZlbnRzXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaFxuaW5kZXggOWY1MzQ0MjEyMTk1NS4uNTEwMzYxODhjZDM5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcbkBAIC0xNjIsNiArMTYyLDcgQEAgaWNlX2FxX2dldF9waHlfY2FwcyhzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgcXVhbF9tb2RzLCB1OCByZXBvcnRfbW9kZSxcbiBib29sIGljZV9pc19waHlfcmNsa19pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTtcbiBib29sIGljZV9pc19jbG9ja19tdXhfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4gYm9vbCBpY2VfaXNfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xuK2Jvb2wgaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4gYm9vbCBpY2VfaXNfZ3BzX2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xuIGludFxuIGljZV9hcV9nZXRfbmV0bGlzdF9ub2RlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua190b3BvICpjbWQsXG5AQCAtMTg4LDYgKzE4OSwxMyBAQCBpY2VfZ2V0X2xpbmtfZGVmYXVsdF9vdmVycmlkZShzdHJ1Y3QgaWNlX2xpbmtfZGVmYXVsdF9vdmVycmlkZV90bHYgKmxkbyxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGkpO1xuIGJvb2wgaWNlX2lzX3BoeV9jYXBzX2FuX2VuYWJsZWQoc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHMpO1xuIGJvb2wgaWNlX2lzX2Z3X2hlYWx0aF9yZXBvcnRfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3KTtcbitpbnQgaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzKHN0cnVjdCBpY2VfaHcgKmh3LFxuK1x0XHRcdCAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKTtcbitpbnQgaWNlX2lzX2hlYWx0aF9zdGF0dXNfY29kZV9zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBjb2RlLFxuK1x0XHRcdFx0XHRib29sICpzdXBwb3J0ZWQpO1xuK2ludCBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKHN0cnVjdCBpY2VfaHcgKmh3LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqb3V0LFxuK1x0XHRcdFx0ICAgIHUxNiBjb2RlKTtcbiBpbnQgaWNlX2FxX3NldF9oZWFsdGhfc3RhdHVzX2NmZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggZXZlbnRfc291cmNlKTtcbiBpbnQgaWNlX2FxX2dldF9waHlfZXF1YWxpemF0aW9uKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgZGF0YV9pbiwgdTE2IG9wX2NvZGUsXG4gXHRcdFx0XHR1OCBzZXJkZXNfbnVtLCBpbnQgKm91dHB1dCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmNcbmluZGV4IGExMGMxYzhkODY5NzcuLmJiNWNjMGEyYmE2OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jXG5AQCAtODcyLDcgKzg3Miw3IEBAIHN0YXRpYyBpbnQgaWNlX2RjYm5sX2RlbGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRpZiAocGYtXHUwMDNlZGNieF9jYXAgXHUwMDI2IERDQl9DQVBfRENCWF9MTERfTUFOQUdFRCkge1xuLVx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJjYW4ndCBkZWxldGUgRFNDUCBuZXRsaW5rIGFwcCB3aGVuIEZXIERDQiBhZ2VudCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcImNhbid0IGRlbGV0ZSBEU0NQIG5ldGxpbmsgYXBwIHdoZW4gRlcgRENCIGFnZW50IGlzIGFjdGl2ZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuaW5kZXggODVhNzRjZDZlYTFmMy4uMWNhMTM3ZjY3ZGQ0OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuQEAgLTE5LDYgKzE5LDggQEBcbiAjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9JTlBVVF9CQVNFX1NGUFx0XHQ0XG4gI2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9RU0ZQXHRcdDZcbiAjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9PVVRQVVRfQkFTRVx0XHQwXG4rI2RlZmluZSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRFx0XHQxXG4rI2RlZmluZSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX1VOTE9DS0VEXHRcdDBcbiBcbiAjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMF9QSU5fSURYXHRcdDBcbiAjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMV9QSU5fSURYXHRcdDFcbkBAIC04OSw2ICs5MSwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VbXSA9IHtcbiBcdERQTExfUElOX0ZSRVFVRU5DWV9SQU5HRSgwLCBEUExMX1BJTl9GUkVRVUVOQ1lfMV9IWiksXG4gfTtcbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkW10gPSB7XG4rXHREUExMX1BJTl9GUkVRVUVOQ1lfMVBQUyxcbit9O1xuK1xuIC8qKlxuICAqIGljZV9kcGxsX2lzX3N3X3BpbiAtIGNoZWNrIGlmIGdpdmVuIHBpbiBzaGFsbCBiZSBjb250cm9sbGVkIGJ5IFNXXG4gICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxuQEAgLTEwOTgsOSArMTEwNCwxMSBAQCBpY2VfZHBsbF9waW5fc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4tXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwLCBwaW5fdHlwZSwgZXh0YWNrKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0aWYgKCFwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbitcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXHRpZiAocGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQgfHxcbiBcdCAgICBwaW5fdHlwZSA9PSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpXG4gXHRcdCpzdGF0ZSA9IHAtXHUwMDNlc3RhdGVbZC1cdTAwM2VkcGxsX2lkeF07XG5AQCAtMjI0Myw5ICsyMjUxLDE0IEBAIGljZV9kcGxsX2lucHV0X2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuLVx0ZXN5bmMtXHUwMDNlcmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2U7XG4tXHRlc3luYy1cdTAwM2VyYW5nZV9udW0gPSBBUlJBWV9TSVpFKGljZV9lc3luY19yYW5nZSk7XG4tXHRpZiAocC1cdTAwM2VmbGFnc1swXSBcdTAwMjYgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOKSB7XG4rXHRpZiAocGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XG4rXHRcdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZDtcbitcdFx0ZXN5bmMtXHUwMDNlcmFuZ2VfbnVtID0gQVJSQVlfU0laRShpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkKTtcbitcdH0gZWxzZSB7XG4rXHRcdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlO1xuK1x0XHRlc3luYy1cdTAwM2VyYW5nZV9udW0gPSBBUlJBWV9TSVpFKGljZV9lc3luY19yYW5nZSk7XG4rXHR9XG4rXHRpZiAocC1cdTAwM2VmbGFnc1swXSBcdTAwMjYgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRCkge1xuIFx0XHRlc3luYy1cdTAwM2VmcmVxID0gRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFo7XG4gXHRcdGVzeW5jLVx1MDAzZXB1bHNlID0gSUNFX0RQTExfUElOX0VTWU5DX1BVTFNFX0hJR0hfUEVSQ0VOVDtcbiBcdH0gZWxzZSB7XG5AQCAtMjg3Niw2ICsyODg5LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzIGljZV9kcGxsX291dHB1dF9vcHMgPSB7XG4gXHQuZXN5bmNfZ2V0ID0gaWNlX2RwbGxfb3V0cHV0X2VzeW5jX2dldCxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzIGljZV9kcGxsX2lucHV0X3VubWFuYWdlZF9vcHMgPSB7XG4rXHQuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX2lucHV0X2ZyZXF1ZW5jeV9nZXQsXG4rXHQuZGlyZWN0aW9uX2dldCA9IGljZV9kcGxsX2lucHV0X2RpcmVjdGlvbixcbitcdC5zdGF0ZV9vbl9kcGxsX2dldCA9IGljZV9kcGxsX2lucHV0X3N0YXRlX2dldCxcbitcdC5lc3luY19nZXQgPSBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyA9IHtcbitcdC5mcmVxdWVuY3lfZ2V0ID0gaWNlX2RwbGxfb3V0cHV0X2ZyZXF1ZW5jeV9nZXQsXG4rXHQuZGlyZWN0aW9uX2dldCA9IGljZV9kcGxsX291dHB1dF9kaXJlY3Rpb24sXG4rXHQuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfc3RhdGVfZ2V0LFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgaWNlX2RwbGxfb3BzID0ge1xuIFx0LmxvY2tfc3RhdHVzX2dldCA9IGljZV9kcGxsX2xvY2tfc3RhdHVzX2dldCxcbiBcdC5tb2RlX2dldCA9IGljZV9kcGxsX21vZGVfZ2V0LFxuQEAgLTM0MzksOCArMzQ2NSwxMCBAQCBpY2VfZHBsbF9kZWluaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZHBsbF9kZXZpY2UgKnNlY29uZClcbiB7XG4gXHRpZiAoY2d1KSB7XG4tXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XG4tXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpO1xuK1x0XHRpZiAoZmlyc3QpXG4rXHRcdFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcbitcdFx0aWYgKHNlY29uZClcbitcdFx0XHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoc2Vjb25kLCBwaW5zLCBvcHMsIGNvdW50KTtcbiBcdH1cbiBcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhwaW5zLCBjb3VudCk7XG4gfVxuQEAgLTM0NzIsMTIgKzM1MDAsMTUgQEAgaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gaWNlX2RwbGxfZ2V0X3BpbnMocGYsIHBpbnMsIHN0YXJ0X2lkeCwgY291bnQsIHBmLVx1MDAzZWRwbGxzLmNsb2NrX2lkKTtcbi1cdGlmIChyZXQpXG4rXHRpZiAoIWNndSB8fCByZXQpXG4gXHRcdHJldHVybiByZXQ7XG4tXHRpZiAoY2d1KSB7XG4rXG4rXHRpZiAoZmlyc3QpIHtcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byByZWxlYXNlX3BpbnM7XG4rXHR9XG4rXHRpZiAoc2Vjb25kKSB7XG4gXHRcdHJldCA9IGljZV9kcGxsX3JlZ2lzdGVyX3BpbnMoc2Vjb25kLCBwaW5zLCBvcHMsIGNvdW50KTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIHVucmVnaXN0ZXJfZmlyc3Q7XG5AQCAtMzQ4Niw3ICszNTE3LDggQEAgaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXG4gXHRyZXR1cm4gMDtcbiBcbiB1bnJlZ2lzdGVyX2ZpcnN0OlxuLVx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcbitcdGlmIChmaXJzdClcbitcdFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcbiByZWxlYXNlX3BpbnM6XG4gXHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMocGlucywgY291bnQpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0zODI0LDYgKzM4NTYsMTggQEAgc3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KVxuIFx0c3RydWN0IGljZV9kcGxsICpkZSA9IFx1MDAyNmQtXHUwMDNlZWVjO1xuIFx0c3RydWN0IGljZV9kcGxsICpkcCA9IFx1MDAyNmQtXHUwMDNlcHBzO1xuIFxuK1x0aWYgKGQtXHUwMDNldW5tYW5hZ2VkKSB7XG4rXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhkcC1cdTAwM2VkcGxsLCBpbnB1dHMsXG4rXHRcdFx0XHRcdCBcdTAwMjZpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzLFxuK1x0XHRcdFx0XHQgbnVtX2lucHV0cyk7XG4rXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhkcC1cdTAwM2VkcGxsLCBvdXRwdXRzLFxuK1x0XHRcdFx0XHQgXHUwMDI2aWNlX2RwbGxfb3V0cHV0X3VubWFuYWdlZF9vcHMsXG4rXHRcdFx0XHRcdCBudW1fb3V0cHV0cyk7XG4rXHRcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhpbnB1dHMsIG51bV9pbnB1dHMpO1xuK1x0XHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMob3V0cHV0cywgbnVtX291dHB1dHMpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRpY2VfZHBsbF9kZWluaXRfcmNsa19waW4ocGYpO1xuIFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XG4gXHRcdGljZV9kcGxsX2RlaW5pdF90eGNsa19waW5zKHBmKTtcbkBAIC00MDgyLDIzICs0MTI2LDI5IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbiBcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKmlucHV0X29wcztcbiBcdGludCByZXQsIGNvdW50O1xuIFxuLVx0aW5wdXRfb3BzID0gXHUwMDI2aWNlX2RwbGxfaW5wdXRfb3BzO1xuLVx0b3V0cHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX291dHB1dF9vcHM7XG4rXHRpZiAoIXBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuK1x0XHRpbnB1dF9vcHMgPSBcdTAwMjZpY2VfZHBsbF9pbnB1dF9vcHM7XG4rXHRcdG91dHB1dF9vcHMgPSBcdTAwMjZpY2VfZHBsbF9vdXRwdXRfb3BzO1xuK1x0fSBlbHNlIHtcbitcdFx0aW5wdXRfb3BzID0gXHUwMDI2aWNlX2RwbGxfaW5wdXRfdW5tYW5hZ2VkX29wcztcbitcdFx0b3V0cHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX291dHB1dF91bm1hbmFnZWRfb3BzO1xuK1x0fVxuIFxuIFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cdTAwM2VkcGxscy5pbnB1dHMsIDAsXG4gXHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLm51bV9pbnB1dHMsIGlucHV0X29wcyxcbi1cdFx0XHRcdFx0cGYtXHUwMDNlZHBsbHMuZWVjLmRwbGwsXG4tXHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcbitcdFx0XHRcdFx0cGYtXHUwMDNlZHBsbHMuZWVjLmRwbGwsIHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXHRjb3VudCA9IHBmLVx1MDAzZWRwbGxzLm51bV9pbnB1dHM7XG4tXHRpZiAoY2d1KSB7XG4rXHRpZiAoY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLm91dHB1dHMsXG4gXHRcdFx0XHRcdFx0Y291bnQsIHBmLVx1MDAzZWRwbGxzLm51bV9vdXRwdXRzLFxuIFx0XHRcdFx0XHRcdG91dHB1dF9vcHMsIHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsLFxuIFx0XHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIGRlaW5pdF9pbnB1dHM7XG4rXHRcdGlmIChwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGNvdW50ICs9IHBmLVx1MDAzZWRwbGxzLm51bV9vdXRwdXRzO1xuIFx0XHRpZiAoIXBmLVx1MDAzZWRwbGxzLmdlbmVyaWMpIHtcbiBcdFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLnNtYSxcbkBAIC00MjA2LDEyICs0MjU2LDEzIEBAIGljZV9kcGxsX2luaXRfZHBsbChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsICpkLCBib29sIGNndSxcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcdGQtXHUwMDNlcGYgPSBwZjtcbi1cdGlmIChjZ3UgfHwgcGYtXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcbitcdGlmIChjZ3UgfHwgcGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkIHx8XG4rXHQgICAgcGYtXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzID0gXHUwMDI2aWNlX2RwbGxfb3BzO1xuIFxuIFx0XHRpZiAodHlwZSA9PSBEUExMX1RZUEVfUFBTIFx1MDAyNlx1MDAyNiBpY2VfZHBsbF9pc19wcHNfcGhhc2VfbW9uaXRvcihwZikpXG4gXHRcdFx0b3BzID0gIFx1MDAyNmljZV9kcGxsX3BvbV9vcHM7XG4tXHRcdGlmIChjZ3UpXG4rXHRcdGlmIChjZ3UgXHUwMDI2XHUwMDI2ICFwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpXG4gXHRcdFx0aWNlX2RwbGxfdXBkYXRlX3N0YXRlKHBmLCBkLCB0cnVlKTtcbiBcdFx0cmV0ID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoZC1cdTAwM2VkcGxsLCB0eXBlLCBvcHMsIGQpO1xuIFx0XHRpZiAocmV0KSB7XG5AQCAtNDIzOSw2ICs0MjkwLDMzIEBAIHN0YXRpYyB2b2lkIGljZV9kcGxsX2RlaW5pdF93b3JrZXIoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRrdGhyZWFkX2Rlc3Ryb3lfd29ya2VyKGQtXHUwMDNla3dvcmtlcik7XG4gfVxuIFxuKy8qKlxuKyAqIGljZV9kcGxsX3Bpbl9mcmVxX2luZm8gLSBmaW5kIHBpbiBmcmVxdWVuY3kgZnJvbSBzdXBwb3J0ZWQgb25lc1xuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG4rICogQHBpbl9pZHg6IHBpbiBpbmRleFxuKyAqIEBpbnB1dDogaWYgaW5wdXQgcGluXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRocm91Z2ggdGhlIGFycmF5IG9mIHN1cHBvcnRlZCBmcmVxdWVuY2llcyBmb3IgYVxuKyAqIERQTEwgcGluIGFuZCByZXR1cm5zIHNpbmdsZSBmcmVxdWVuY3kgcGluIGlzIGNhcGFibGUsIGlmIHBpbiBzdXBwb3J0IG9ubHlcbisgKiBvbmUgZnJlcXVlbmN5LiBTaGFsbCBiZSB1c2VkIG9ubHkgZm9yIGRwbGwgd2l0aCBkcml2ZXIgaGFyZGNvZGVkIGZyZXF1ZW5jeS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgLSBmYWlsdXJlLCBwaW4gdXNlcyBtdWx0aXBsZSBmcmVxdWVuY2llcyxcbisgKiAqIGZyZXF1ZW5jeSAtIHN1Y2Nlc3MuXG4rICovXG4rc3RhdGljIHU2NCBpY2VfZHBsbF9waW5fZnJlcV9pbmZvKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwaW5faWR4LCBib29sIGlucHV0KVxuK3tcbitcdHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKmZyZXFzO1xuK1x0dTggZnJlcV9udW07XG4rXG4rXHQvKiBHZXQgc3VwcG9ydGVkIGZyZXF1ZW5jaWVzIGZvciB0aGlzIHBpbiAqL1xuK1x0ZnJlcXMgPSBpY2VfY2d1X2dldF9waW5fZnJlcV9zdXBwKGh3LCBwaW5faWR4LCBpbnB1dCwgXHUwMDI2ZnJlcV9udW0pO1xuK1x0aWYgKCFmcmVxcyB8fCBmcmVxX251bSAhPSAxIHx8IGZyZXFzWzBdLm1pbiAhPSBmcmVxc1swXS5tYXgpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGZyZXFzWzBdLm1pbjtcbit9XG4rXG4gLyoqXG4gICogaWNlX2RwbGxfaW5pdF93b3JrZXIgLSBJbml0aWFsaXplIERQTExzIHBlcmlvZGljIHdvcmtlclxuICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC00Mzk4LDYgKzQ0NzYsMTkgQEAgaWNlX2RwbGxfaW5pdF9pbmZvX2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRwaW5zW2ldLnByb3AuYm9hcmRfbGFiZWwgPSBpY2VfY2d1X2dldF9waW5fbmFtZShodywgaSwgaW5wdXQpO1xuIFx0XHRwaW5zW2ldLnByb3AudHlwZSA9IGljZV9jZ3VfZ2V0X3Bpbl90eXBlKGh3LCBpLCBpbnB1dCk7XG4gXHRcdGlmIChpbnB1dCkge1xuK1x0XHRcdGlmIChwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbitcdFx0XHRcdHBpbnNbaV0uZnJlcSA9IGljZV9kcGxsX3Bpbl9mcmVxX2luZm8oaHcsIGksXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgIGlucHV0KTtcbitcdFx0XHRcdHBpbnNbaV0uc3RhdGVbMF0gPSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XG4rXHRcdFx0XHRwaW5zW2ldLnN0YXR1cyA9XG4rXHRcdFx0XHRcdElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfU1RBVFVTX0VTWU5DX0NBUDtcbitcdFx0XHRcdHBpbnNbaV0uZmxhZ3NbMF0gPSBJQ0VfRFBMTF9JTl9FU1lOQ19FTkFCTEVEO1xuK1x0XHRcdFx0Lyogc2tpcCBwcmlvcml0eSwgY2FwYWJpbGl0aWVzLCBwaGFzZSByYW5nZSxcbitcdFx0XHRcdCAqIHBpbiBzdGF0ZSBBUSBxdWVyeSBhbmQgZnJlcV9zdXBwb3J0ZWQgLVxuK1x0XHRcdFx0ICogbm90IGF2YWlsYWJsZSBmb3IgdW5tYW5hZ2VkIERQTExcbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHRcdHJldCA9IGljZV9hcV9nZXRfY2d1X3JlZl9wcmlvKGh3LCBkZS1cdTAwM2VkcGxsX2lkeCwgaSxcbiBcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZkZS1cdTAwM2VpbnB1dF9wcmlvW2ldKTtcbiBcdFx0XHRpZiAocmV0KVxuQEAgLTQ0MTEsNiArNDUwMiwxNiBAQCBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsXG4gXHRcdFx0aWYgKGljZV9kcGxsX2lzX3N3X3BpbihwZiwgaSwgdHJ1ZSkpXG4gXHRcdFx0XHRwaW5zW2ldLmhpZGRlbiA9IHRydWU7XG4gXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuK1x0XHRcdFx0cGluc1tpXS5mcmVxID0gaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhodywgaSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgaW5wdXQpO1xuK1x0XHRcdFx0cGluc1tpXS5zdGF0ZVswXSA9IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcbitcdFx0XHRcdC8qIHNraXAgb3V0cHV0IHN0YXRlIGNhcHMsIHBoYXNlIHJhbmdlLFxuK1x0XHRcdFx0ICogcGluIHN0YXRlIEFRIHF1ZXJ5IGFuZCBmcmVxX3N1cHBvcnRlZCAtXG4rXHRcdFx0XHQgKiBub3QgYXZhaWxhYmxlIGZvciB1bm1hbmFnZWQgRFBMTFxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4gXHRcdFx0cmV0ID0gaWNlX2NndV9nZXRfb3V0cHV0X3Bpbl9zdGF0ZV9jYXBzKGh3LCBpLCBcdTAwMjZjYXBzKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbkBAIC00NDI4LDEwICs0NTI5LDEzIEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcbiBcdFx0cGluc1tpXS5wcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07XG4gXHRcdHBpbnNbaV0ucGYgPSBwZjtcbiBcdH1cbi1cdGlmIChpbnB1dClcbitcdGlmIChpbnB1dCBcdTAwMjZcdTAwMjYgIXBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X3JlZl9zeW5jX2lucHV0cyhwZik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtNDcxMiw2ICs0ODE2LDgyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZCAtIGluaXRpYWxpemUgbG9jayBzdGF0ZSBmb3IgdW5tYW5hZ2VkIGRwbGxcbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4rICpcbisgKiBJbml0aWFsaXplIHRoZSBsb2NrIHN0YXRlIGZvciB1bm1hbmFnZWQgRFBMTCBieSBjaGVja2luZyBoZWFsdGggc3RhdHVzLlxuKyAqIEZvciB1bm1hbmFnZWQgRFBMTCwgd2UgcmVseSBvbiBoYXJkd2FyZSBhdXRvbm9tb3VzIG9wZXJhdGlvbi5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgLSBzdWNjZXNzXG4rICogKiBuZWdhdGl2ZSAtIGluaXQgZmFpbHVyZSByZWFzb25cbisgKi9cbitzdGF0aWMgaW50IGljZV9kcGxsX2xvY2tfc3RhdGVfaW5pdF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpXG4re1xuK1x0dTE2IGNvZGUgPSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0s7XG4rXHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gYnVmZjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKFx1MDAyNnBmLVx1MDAzZWh3LCBcdTAwMjZidWZmLCBjb2RlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQocGYsIFx1MDAyNmJ1ZmYsIGZhbHNlKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQgLSBpbml0IGRwbGwgaW5mb3JtYXRpb24gZm9yIHVubWFuYWdlZCBkcGxsXG4rICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuKyAqXG4rICogQWNxdWlyZSAoZnJvbSBIVykgYW5kIHNldCBiYXNpYyBkcGxsIGluZm9ybWF0aW9uIChvbiBwZi1cdTAwM2VkcGxscyBzdHJ1Y3QpLlxuKyAqIEZvciB1bm1hbmFnZWQgZHBsbCBtb2RlLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAtIHN1Y2Nlc3NcbisgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvblxuKyAqL1xuK3N0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZilcbit7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxzICpkID0gXHUwMDI2cGYtXHUwMDNlZHBsbHM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZC1cdTAwM2VjbG9ja19pZCA9IGljZV9nZW5lcmF0ZV9jbG9ja19pZChwZik7XG4rXHRkLVx1MDAzZW51bV9pbnB1dHMgPSBpY2VfY2d1X2dldF9waW5fbnVtKFx1MDAyNnBmLVx1MDAzZWh3LCB0cnVlKTtcbitcdGQtXHUwMDNlbnVtX291dHB1dHMgPSBpY2VfY2d1X2dldF9waW5fbnVtKFx1MDAyNnBmLVx1MDAzZWh3LCBmYWxzZSk7XG4rXHRyZXQgPSBpY2VfZHBsbF9sb2NrX3N0YXRlX2luaXRfdW5tYW5hZ2VkKHBmKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRkLVx1MDAzZWlucHV0cyA9IGt6YWxsb2Nfb2JqcygqZC1cdTAwM2VpbnB1dHMsIGQtXHUwMDNlbnVtX2lucHV0cyk7XG4rXHRpZiAoIWQtXHUwMDNlaW5wdXRzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGRlaW5pdF9pbmZvO1xuK1xuK1x0ZC1cdTAwM2VvdXRwdXRzID0ga3phbGxvY19vYmpzKCpkLVx1MDAzZW91dHB1dHMsIGQtXHUwMDNlbnVtX291dHB1dHMpO1xuK1x0aWYgKCFkLVx1MDAzZW91dHB1dHMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBkZWluaXRfaW5mbztcbitcdH1cbitcbitcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBkZWluaXRfaW5mbztcbitcbitcdGQtXHUwMDNlcHBzLm1vZGUgPSBEUExMX01PREVfTUFOVUFMO1xuK1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCIlcyAtIHN1Y2Nlc3MsIGlucHV0czoldSwgb3V0cHV0czoldVxcblwiLFxuK1x0XHRfX2Z1bmNfXywgZC1cdTAwM2VudW1faW5wdXRzLCBkLVx1MDAzZW51bV9vdXRwdXRzKTtcbitcdHJldHVybiAwO1xuK2RlaW5pdF9pbmZvOlxuK1x0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCIlcyAtIGZhaWw6IGQtXHUwMDNlaW5wdXRzOiVwLCBkLVx1MDAzZW91dHB1dHM6JXBcXG5cIixcbitcdFx0X19mdW5jX18sIGQtXHUwMDNlaW5wdXRzLCBkLVx1MDAzZW91dHB1dHMpO1xuK1x0aWNlX2RwbGxfZGVpbml0X2luZm8ocGYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogaWNlX2RwbGxfaW5pdF9pbmZvIC0gcHJlcGFyZSBwZidzIGRwbGwgaW5mb3JtYXRpb24gc3RydWN0dXJlXG4gICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuQEAgLTQ4MTUsNiArNDk5NSw0MiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQgLSBkZXRlcm1pbmUgbG9jayBzdGF0ZSBmcm9tIGhlYWx0aCBzdGF0dXNcbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4rICogQGJ1ZmY6IGhlYWx0aCBzdGF0dXMgYnVmZmVyXG4rICogQG5vdGlmeTogaWYgdHJ1ZSwgbm90aWZ5IGRwbGwgZGV2aWNlXG4rICpcbisgKiBTZXQgdW5tYW5hZ2VkIGRwbGwgbG9jayBzdGF0ZSBiYXNlZCBvbiBoZWFsdGggc3RhdHVzIGNvZGUgYW5kIGludGVybmFsIGRhdGEuXG4rICogQ29udGV4dDogQWNxdWlyZXMgYW5kIHJlbGVhc2VzIHBmLVx1MDAzZWRwbGxzLmxvY2sgKG11c3QgcmVsZWFzZSBiZWZvcmUgbm90aWZ5XG4rICogaWYgY2FsbGVkKS5cbisgKi9cbit2b2lkIGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZixcbitcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsXG4rXHRcdFx0XHQgICAgICAgYm9vbCBub3RpZnkpXG4re1xuK1x0dTMyIGludGVybmFsX2RhdGEgPSBsZTMyX3RvX2NwdShidWZmLVx1MDAzZWludGVybmFsX2RhdGExKTtcbitcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcztcbitcbitcdGlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuK1x0aWYgKGJ1ZmYtXHUwMDNlaGVhbHRoX3N0YXR1c19jb2RlID09IDAgfHxcbitcdCAgICBpbnRlcm5hbF9kYXRhID09IElDRV9EUExMX0hFQUxUSF9TVEFUVVNfTE9DS0VEKVxuK1x0XHRkLVx1MDAzZWRwbGxfc3RhdGUgPSBEUExMX0xPQ0tfU1RBVFVTX0xPQ0tFRDtcbitcdGVsc2VcbitcdFx0ZC1cdTAwM2VkcGxsX3N0YXRlID0gRFBMTF9MT0NLX1NUQVRVU19VTkxPQ0tFRDtcbitcbitcdGlmIChkLVx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9PSBkLVx1MDAzZWRwbGxfc3RhdGUpXG4rXHRcdG5vdGlmeSA9IGZhbHNlO1xuK1x0ZWxzZVxuK1x0XHRkLVx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9IGQtXHUwMDNlZHBsbF9zdGF0ZTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbitcdGlmIChub3RpZnkgXHUwMDI2XHUwMDI2IGQtXHUwMDNlZHBsbClcbitcdFx0ZHBsbF9kZXZpY2VfY2hhbmdlX250ZihkLVx1MDAzZWRwbGwpO1xuK31cbitcbiAvKipcbiAgKiBpY2VfZHBsbF9kZWluaXQgLSBEaXNhYmxlIHRoZSBkcml2ZXIvSFcgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbiAgKiB0aGUgZHBsbCBkZXZpY2UuXG5AQCAtNDg1NCw5ICs1MDcwLDEwIEBAIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxuIFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnBmLVx1MDAzZWRwbGxzLnR4Y2xrX3dvcmspO1xuIFxuLVx0aWNlX2RwbGxfZGVpbml0X3BpbnMocGYsIGNndSk7XG4rXHRpY2VfZHBsbF9kZWluaXRfcGlucyhwZiwgY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XG4gXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKSlcbi1cdFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcywgY2d1KTtcbitcdFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcyxcbitcdFx0XHRcdCAgICAgY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XG4gXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsKSlcbiBcdFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLmVlYywgY2d1KTtcbiBcdGlmICghSVNfRVJSX09SX05VTEwocGYtXHUwMDNlZHBsbHMudHhjLmRwbGwpKVxuQEAgLTQ4NjYsNiArNTA4Myw0NSBAQCB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gfVxuIFxuKy8qKlxuKyAqIGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkIC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciB1bm1hbmFnZWQgZHBsbCBzdWJzeXN0ZW1cbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4rICpcbisgKiBTZXQgdXAgdGhlIGRldmljZSBkcGxscyBmb3IgdW5tYW5hZ2VkIG1vZGUsIHJlZ2lzdGVyIHRoZW0gYW5kIHBpbnMgY29ubmVjdGVkXG4rICogd2l0aGluIExpbnV4IGRwbGwgc3Vic3lzdGVtLiBBbGxvdyB1c2Vyc3BhY2UgdG8gb2J0YWluIHN0YXRlIG9mIERQTEwuXG4rICpcbisgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi1cdTAwM2VkcGxscy5sb2NrIG11dGV4LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmKVxuK3tcbitcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcdTAwMjZwZi1cdTAwM2VkcGxscztcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWljZV9wZl9zcmNfdG1yX293bmVkKHBmKSlcbitcdFx0cmV0dXJuO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkLVx1MDAzZWxvY2spO1xuK1x0ZXJyID0gaWNlX2RwbGxfaW5pdF9pbmZvX3VubWFuYWdlZChwZik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9leGl0O1xuK1x0ZXJyID0gaWNlX2RwbGxfaW5pdF9kcGxsKHBmLCBcdTAwMjZwZi1cdTAwM2VkcGxscy5wcHMsIHRydWUsIERQTExfVFlQRV9QUFMpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBkZWluaXRfaW5mbztcbitcdGVyciA9IGljZV9kcGxsX2luaXRfcGlucyhwZiwgdHJ1ZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGRlaW5pdF9wcHM7XG4rXHRzZXRfYml0KElDRV9GTEFHX0RQTEwsIHBmLVx1MDAzZWZsYWdzKTtcbitcbitcdHJldHVybjtcbitcbitkZWluaXRfcHBzOlxuK1x0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcywgdHJ1ZSk7XG4rZGVpbml0X2luZm86XG4rXHRpY2VfZHBsbF9kZWluaXRfaW5mbyhwZik7XG4rZXJyX2V4aXQ6XG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNmQtXHUwMDNlbG9jayk7XG4rXHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXCJEUExMcyBpbml0IGZhaWx1cmUgZXJyOiVkXFxuXCIsIGVycik7XG4rfVxuK1xuIC8qKlxuICAqIGljZV9kcGxsX2luaXRfZTgyNSAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbiAgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG5AQCAtNDk3NSw4ICs1MjMxLDIzIEBAIHN0YXRpYyB2b2lkIGljZV9kcGxsX2luaXRfZTgxMChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcIkRQTExzIGluaXQgZmFpbHVyZSBlcnI6JWRcXG5cIiwgZXJyKTtcbiB9XG4gXG4rLyoqXG4rICogaWNlX2RwbGxfaW5pdCAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4rICpcbisgKiBTZXQgdXAgdGhlIGRldmljZSBkcGxscywgcmVnaXN0ZXIgdGhlbSBhbmQgcGlucyBjb25uZWN0ZWQgd2l0aGluIExpbnV4IGRwbGxcbisgKiBzdWJzeXN0ZW0uIEFsbG93IHVzZXJzcGFjZSB0byBvYnRhaW4gc3RhdGUgb2YgRFBMTCBhbmQgaGFuZGxpbmcgb2YgRFBMTFxuKyAqIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuXG4rICpcbisgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi1cdTAwM2VkcGxscy5sb2NrIG11dGV4LlxuKyAqL1xuIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4rXHRpZiAocGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XG4rXHRcdGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHBmKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChwZi1cdTAwM2Vody5tYWNfdHlwZSkge1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcbiBcdFx0aWNlX2RwbGxfaW5pdF9lODI1KHBmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5pbmRleCAxMDNiYTNlNDkwNjgyLi5jNTlkNzQ2YTg1NjcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5AQCAtMjYsNiArMjYsOCBAQFxuICNkZWZpbmUgSUNFX0NHVV9SMTFfU1lOQ0VfU19CWVBfQ0xLXHRHRU5NQVNLKDYsIDEpXG4gXG4gI2RlZmluZSBJQ0VfQ0dVX0JZUEFTU19NVVhfT0ZGU0VUX0U4MjVDXHQzXG4rI2RlZmluZSBJQ0VfRFBMTF9VTk1BTkFHRURfUElOX05VTVx0NFxuKyNkZWZpbmUgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRFx0SUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOXG4gXG4gLyoqXG4gICogZW51bSBpY2VfZHBsbF9waW5fc3cgLSBlbnVtZXJhdGUgaWNlIHNvZnR3YXJlIHBpbiBpbmRpY2VzOlxuQEAgLTE5Myw2ICsxOTUsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxzIHtcbiBcdHMzMiBvdXRwdXRfcGhhc2VfYWRqX21heDtcbiBcdHUzMiBwZXJpb2RpY19jb3VudGVyO1xuIFx0Ym9vbCBnZW5lcmljO1xuK1x0Ym9vbCB1bm1hbmFnZWQ7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhjbGtfd29yaztcbiBcdGJvb2wgdHhjbGtfc3dpdGNoX3JlcXVlc3RlZDtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmUgdHhjbGtfbm90aWZ5X3J3c2VtO1xuQEAgLTIwMSw5ICsyMDQsMTYgQEAgc3RydWN0IGljZV9kcGxscyB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF8xNTg4X0NMT0NLKVxuIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpO1xuK3ZvaWQgaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZixcbitcdFx0XHRcdCAgICAgICBib29sIG5vdGlmeSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkXG4raWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsXG4rXHRcdFx0XHQgIGJvb2wgbm90aWZ5KSB7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuaW5kZXggOGNkYzRmZGE4OWU5Ny4uZmM5ZDRlMGZhNzU1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbkBAIC0xNDE1LDYgKzE0MTUsMTAgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3JpbmdzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRcdFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwgcmluZy1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLVx1MDAzZWZsYWdzKTtcbitcbitcdFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcbitcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy1cdTAwM2VmbGFncyk7XG4rXG4gXHRcdFdSSVRFX09OQ0UodnNpLVx1MDAzZXR4X3JpbmdzW2ldLCByaW5nKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi5mZWZiYzUxYzcxOTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzQyOCw3ICszNDI4LDcgQEAgc3RhdGljIGludCBpY2VfcmVxX2lycV9tc2l4X21pc2Moc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdCAgICAgKChwZi1cdTAwM2VsbF90c19pcnEuaW5kZXggKyBwZl9pbnRyX3N0YXJ0X29mZnNldCkgXHUwMDI2XG4gXHRcdCAgICAgIFBGSU5UX1NCX0NUTF9NU0lYX0lORFhfTSkgfCBQRklOVF9TQl9DVExfQ0FVU0VfRU5BX00pO1xuIFx0d3IzMihodywgR0xJTlRfSVRSKElDRV9SWF9JVFIsIHBmLVx1MDAzZW9pY3JfaXJxLmluZGV4KSxcbi1cdCAgICAgSVRSX1JFR19BTElHTihJQ0VfSVRSXzhLKSBcdTAwM2VcdTAwM2UgSUNFX0lUUl9HUkFOX1MpO1xuK1x0ICAgICBJVFJfUkVHX0FMSUdOKElDRV9JVFJfMjBLKSBcdTAwM2VcdTAwM2UgSUNFX0lUUl9HUkFOX1MpO1xuIFxuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xuQEAgLTM0OTEsOSArMzQ5MSw4IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0XHRORVRJRl9GX1JYSEFTSDtcbiBcbiBcdGNzdW1vX2ZlYXR1cmVzID0gTkVUSUZfRl9SWENTVU1cdCAgfFxuLVx0XHRcdCBORVRJRl9GX0lQX0NTVU0gIHxcbiBcdFx0XHQgTkVUSUZfRl9TQ1RQX0NSQyB8XG4tXHRcdFx0IE5FVElGX0ZfSVBWNl9DU1VNO1xuK1x0XHRcdCBORVRJRl9GX0hXX0NTVU07XG4gXG4gXHR2bGFub19mZWF0dXJlcyA9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUiB8XG4gXHRcdFx0IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYICAgICB8XG5AQCAtMzU1NSwxMiArMzU1NCw2IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdC8qIEFsbG93IGNvcmUgdG8gbWFuYWdlIElSUXMgYWZmaW5pdHkgKi9cbiBcdG5ldGlmX3NldF9hZmZpbml0eV9hdXRvKG5ldGRldik7XG4gXG4tXHQvKiBNdXR1YWwgZXhjbHVzaXZpdHkgZm9yIFRTTyBhbmQgR0NTIGlzIGVuZm9yY2VkIGJ5IHRoZSBzZXQgZmVhdHVyZXNcbi1cdCAqIG5kbyBjYWxsYmFjay5cbi1cdCAqL1xuLVx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcbi1cdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTtcbi1cbiBcdG5ldGlmX3NldF90c29fbWF4X3NpemUobmV0ZGV2LCBJQ0VfTUFYX1RTT19TSVpFKTtcbiB9XG4gXG5AQCAtNDcyMCw3ICs0NzEzLDkgQEAgdm9pZCBpY2VfZGVpbml0X2RldihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBzdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4rXHR1MTYgY29kZSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpO1xuK1x0aW50IGVycjtcbiBcbiBcdGlmIChpY2VfaXNfc2FmZV9tb2RlKHBmKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ3MzIsOCArNDcyNywxNSBAQCBzdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dOU1MpKVxuIFx0XHRpY2VfZ25zc19pbml0KHBmKTtcbiBcbitcdC8qIEluaXRpYWxpemUgdW5tYW5hZ2VkIERQTEwgZGV0ZWN0aW9uICovXG4rXHRlcnIgPSBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChcdTAwMjZwZi1cdTAwM2VodywgY29kZSxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XG4rXHRpZiAoZXJyIHx8ICFpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0KFx1MDAyNnBmLVx1MDAzZWh3KSlcbitcdFx0cGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkID0gZmFsc2U7XG4rXG4gXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9DR1UpIHx8XG4tXHQgICAgaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9QSFlfUkNMSykpXG4rXHQgICAgaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9QSFlfUkNMSykgfHxcbitcdCAgICBwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpXG4gXHRcdGljZV9kcGxsX2luaXQocGYpO1xuIFxuIFx0LyogTm90ZTogRmxvdyBkaXJlY3RvciBpbml0IGZhaWx1cmUgaXMgbm9uLWZhdGFsIHRvIGxvYWQgKi9cbkBAIC02NTEwLDE4ICs2NTEyLDYgQEAgaWNlX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxuIFx0XHRyZXQgPSBpY2Vfc2V0X2xvb3BiYWNrKHZzaSwgISEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTE9PUEJBQ0spKTtcbiBcbi1cdC8qIER1ZSB0byBFODMwIGhhcmR3YXJlIGxpbWl0YXRpb25zLCBUU08gKE5FVElGX0ZfQUxMX1RTTykgd2l0aCBHQ1Ncbi1cdCAqIChORVRJRl9GX0hXX0NTVU0pIGlzIG5vdCBzdXBwb3J0ZWQuXG4tXHQgKi9cbi1cdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykgXHUwMDI2XHUwMDI2XG4tXHQgICAgKChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcdTAwMjZcdTAwMjYgKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0FMTF9UU08pKSkge1xuLVx0XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pXG4tXHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCJUbyBlbmFibGUgVFNPLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIEhXIGNoZWNrc3VtLlxcblwiKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwiVG8gZW5hYmxlIEhXIGNoZWNrc3VtLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIFRTTy5cXG5cIik7XG4tXHRcdHJldHVybiAtRUlPO1xuLVx0fVxuLVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbmluZGV4IGVhZWMzNmFiNmFlM2YuLmU4MzkyZWM0ZjEzNDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5AQCAtMjMyNyw2ICsyMzI3LDggQEAgdTY0IGljZV9wdHBfZ2V0X3J4X2h3dHMoY29uc3QgdW5pb24gaWNlXzMyYl9yeF9mbGV4X2Rlc2MgKnJ4X2Rlc2MsXG4gXHR0c19oaWdoID0gbGUzMl90b19jcHUocnhfZGVzYy1cdTAwM2V3Yi5mbGV4X3RzLnRzX2hpZ2gpO1xuIFx0dHNfbnMgPSBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoY2FjaGVkX3RpbWUsIHRzX2hpZ2gpO1xuIFxuK1x0aWNlX3RyYWNlKHJ4X2h3dHN0YW1wLCBjYWNoZWRfdGltZSwgdHNfaGlnaCwgdHNfbnMpO1xuK1xuIFx0cmV0dXJuIHRzX25zO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuaW5kZXggOGU1Zjk3ODM1OTU0Yy4uZjkwNTEwNGY5NWQ4OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbkBAIC0yMCw2ICsyMCwxMCBAQCBzdGF0aWMgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeltdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZXzEwTUhaLFxuIH07XG4gXG4rc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xNTZfMjVtaHpbXSA9IHtcbitcdERQTExfUElOX0ZSRVFVRU5DWV9SQU5HRSgxNTYyNTAwMDAsIDE1NjI1MDAwMCksXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MTB0X3NmcF9jZ3VfaW5wdXRzW10gPSB7XG4gXHR7IFwiQ1ZMLVNEUDIyXCIsXHQgIFpMX1JFRjBQLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxuIFx0XHRBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfY29tbW9uKSwgaWNlX2NndV9waW5fZnJlcV9jb21tb24gfSxcbkBAIC0xMzEsNiArMTM1LDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2NndV9waW5fZGVzYyBpY2VfZTgyM196bF9jZ3Vfb3V0cHV0c1tdID0ge1xuIFx0eyBcIk5PTkVcIixcdCAgIFpMX09VVDUsIDAsIDAgfSxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2NndV9waW5fZGVzYyBpY2VfZTgzMF91bm1hbmFnZWRfaW5wdXRzW10gPSB7XG4rXHR7IFwiMTU4OC1USU1FX1NZTkNcIiwgMCwgRFBMTF9QSU5fVFlQRV9FWFQsXG4rXHQgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xMF9taHopLCBpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeiB9LFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODMwX3VubWFuYWdlZF9vdXRwdXRzW10gPSB7XG4rXHR7IFwiTUFDLVBIWS1DTEtcIiwgMCwgRFBMTF9QSU5fVFlQRV9TWU5DRV9FVEhfUE9SVCxcbitcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzE1Nl8yNW1oeiksIGljZV9jZ3VfcGluX2ZyZXFfMTU2XzI1bWh6IH0sXG4rXHR7IFwiMTU4OC1USU1FX1JFRlwiLCAxLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxuK1x0ICBBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfMV9oeiksIGljZV9jZ3VfcGluX2ZyZXFfMV9oen0sXG4rfTtcbitcbiAvKiBMb3cgbGV2ZWwgZnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIGFuZCBtYW5hZ2luZyB0aGUgZGV2aWNlIGNsb2NrIHVzZWRcbiAgKiBmb3IgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sLlxuICAqXG5AQCAtNTk3OSw2ICs1OTk1LDI0IEBAIGljZV9jZ3VfZ2V0X3Bpbl9kZXNjKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0LCBpbnQgKnNpemUpXG4gXHRjYXNlIElDRV9ERVZfSURfRTgyM0NfU0dNSUk6XG4gXHRcdHQgPSBpY2VfY2d1X2dldF9waW5fZGVzY19lODIzKGh3LCBpbnB1dCwgc2l6ZSk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19CQUNLUExBTkU6XG4rXHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1FTRlA1NjpcbitcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ0NfU0ZQOlxuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19TRlBfREQ6XG4rXHRjYXNlIElDRV9ERVZfSURfRTgzMENfQkFDS1BMQU5FOlxuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDX1FTRlA6XG4rXHRjYXNlIElDRV9ERVZfSURfRTgzMENfU0ZQOlxuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBfWFhWX0JBQ0tQTEFORTpcbitcdGNhc2UgSUNFX0RFVl9JRF9FODMwX1hYVl9RU0ZQOlxuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBfWFhWX1NGUDpcbitcdFx0aWYgKGlucHV0KSB7XG4rXHRcdFx0dCA9IGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHM7XG4rXHRcdFx0KnNpemUgPSBBUlJBWV9TSVpFKGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHMpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHQgPSBpY2VfZTgzMF91bm1hbmFnZWRfb3V0cHV0cztcbitcdFx0XHQqc2l6ZSA9IEFSUkFZX1NJWkUoaWNlX2U4MzBfdW5tYW5hZ2VkX291dHB1dHMpO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNjAwNSw2ICs2MDM5LDE4IEBAIGludCBpY2VfY2d1X2dldF9udW1fcGlucyhzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiBpY2VfY2d1X2dldF9waW5fbnVtIC0gZ2V0IHBpbiBkZXNjcmlwdGlvbiBhcnJheSBzaXplXG4rICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcbisgKiBAaW5wdXQ6IGlmIHJlcXVlc3QgaXMgZG9uZSBhZ2FpbnN0IGlucHV0IG9yIG91dHB1dCBwaW5zXG4rICpcbisgKiBSZXR1cm46IHNpemUgb2YgcGluIGRlc2NyaXB0aW9uIGFycmF5IGZvciBnaXZlbiBody5cbisgKi9cbitpbnQgaWNlX2NndV9nZXRfcGluX251bShzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dClcbit7XG4rXHRyZXR1cm4gaWNlX2NndV9nZXRfbnVtX3BpbnMoaHcsIGlucHV0KTtcbit9XG4rXG4gLyoqXG4gICogaWNlX2NndV9nZXRfcGluX3R5cGUgLSBnZXQgcGluJ3MgdHlwZVxuICAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmhcbmluZGV4IDE2YjE5ODhlOTkzZDIuLmZhMWU5MDhjZWJhYzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXG5AQCAtMzY0LDYgKzM2NCw3IEBAIGludCBpY2VfcmVhZF9zbWFfY3RybChzdHJ1Y3QgaWNlX2h3ICpodywgdTggKmRhdGEpO1xuIGludCBpY2Vfd3JpdGVfc21hX2N0cmwoc3RydWN0IGljZV9odyAqaHcsIHU4IGRhdGEpO1xuIGludCBpY2VfcHRwX3JlYWRfc2RwX2FjKHN0cnVjdCBpY2VfaHcgKmh3LCBfX2xlMTYgKmVudHJpZXMsIHVpbnQgKm51bV9lbnRyaWVzKTtcbiBpbnQgaWNlX2NndV9nZXRfbnVtX3BpbnMoc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpO1xuK2ludCBpY2VfY2d1X2dldF9waW5fbnVtKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KTtcbiBlbnVtIGRwbGxfcGluX3R5cGUgaWNlX2NndV9nZXRfcGluX3R5cGUoc3RydWN0IGljZV9odyAqaHcsIHU4IHBpbiwgYm9vbCBpbnB1dCk7XG4gc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSAqXG4gaWNlX2NndV9nZXRfcGluX2ZyZXFfc3VwcChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluLCBib29sIGlucHV0LCB1OCAqbnVtKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xuaW5kZXggNmE1ODc1YmQ5YzZiMS4uNGRhZWUyNTJlMmE2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmNcbkBAIC0yNjEyLDcgKzI2MTIsNiBAQCBpY2VfZmlsbF9zd19ydWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2ZsdHJfaW5mbyAqZl9pbmZvLFxuIFx0dTE2IHZsYW5faWQgPSBJQ0VfTUFYX1ZMQU5fSUQgKyAxO1xuIFx0dTE2IHZsYW5fdHBpZCA9IEVUSF9QXzgwMjFRO1xuIFx0dm9pZCAqZGFkZHIgPSBOVUxMO1xuLVx0dTE2IGV0aF9oZHJfc3o7XG4gXHR1OCAqZXRoX2hkcjtcbiBcdHUzMiBhY3QgPSAwO1xuIFx0X19iZTE2ICpvZmY7XG5AQCAtMjYyNSwxMSArMjYyNCwxMCBAQCBpY2VfZmlsbF9zd19ydWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2ZsdHJfaW5mbyAqZl9pbmZvLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRldGhfaGRyX3N6ID0gc2l6ZW9mKGR1bW15X2V0aF9oZWFkZXIpO1xuIFx0ZXRoX2hkciA9IHNfcnVsZS1cdTAwM2VoZHJfZGF0YTtcbiBcbiBcdC8qIGluaXRpYWxpemUgdGhlIGV0aGVyIGhlYWRlciB3aXRoIGEgZHVtbXkgaGVhZGVyICovXG4tXHRtZW1jcHkoZXRoX2hkciwgZHVtbXlfZXRoX2hlYWRlciwgZXRoX2hkcl9zeik7XG4rXHRpY2VfZmlsbF9ldGhfaGRyKGV0aF9oZHIpO1xuIFx0aWNlX2ZpbGxfc3dfaW5mbyhodywgZl9pbmZvKTtcbiBcbiBcdHN3aXRjaCAoZl9pbmZvLVx1MDAzZWZsdHJfYWN0KSB7XG5AQCAtMjczMCw3ICsyNzI4LDcgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbyxcbiBcbiBcdC8qIENyZWF0ZSB0aGUgc3dpdGNoIHJ1bGUgd2l0aCB0aGUgZmluYWwgZHVtbXkgRXRoZXJuZXQgaGVhZGVyICovXG4gXHRpZiAob3BjICE9IGljZV9hcWNfb3BjX3VwZGF0ZV9zd19ydWxlcylcbi1cdFx0c19ydWxlLVx1MDAzZWhkcl9sZW4gPSBjcHVfdG9fbGUxNihldGhfaGRyX3N6KTtcbitcdFx0c19ydWxlLVx1MDAzZWhkcl9sZW4gPSBjcHVfdG9fbGUxNihEVU1NWV9FVEhfSERSX0xFTik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jXG5pbmRleCBkMjAzNTdjMDQxMjczLi40NTYwZTU1YzhmOWM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xuQEAgLTE3NCw2ICsxNzQsNyBAQCBzdGF0aWMgdTE2IGljZV9jaGVja19zdXBwb3J0ZWRfdmxhbl90cGlkKHUxNiB2bGFuX3RwaWQpXG4gXHRjYXNlIEVUSF9QXzgwMjFROlxuIFx0Y2FzZSBFVEhfUF84MDIxQUQ6XG4gXHRjYXNlIEVUSF9QX1FJTlExOlxuK1x0Y2FzZSBFVEhfUF84MDIxQUg6XG4gXHRcdHJldHVybiB2bGFuX3RwaWQ7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcbmluZGV4IDRmMzVlZjhkNmIyOTkuLjNjYjhjNmVhMDNjZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHJhY2UuaFxuQEAgLTI0MSw2ICsyNDEsMjQgQEAgREVGSU5FX1RYX1RTVEFNUF9PUF9FVkVOVChpY2VfdHhfdHN0YW1wX2Z3X3JlcSk7XG4gREVGSU5FX1RYX1RTVEFNUF9PUF9FVkVOVChpY2VfdHhfdHN0YW1wX2Z3X2RvbmUpO1xuIERFRklORV9UWF9UU1RBTVBfT1BfRVZFTlQoaWNlX3R4X3RzdGFtcF9jb21wbGV0ZSk7XG4gXG4rLyogVHJhY2UgZXZlbnQgZm9yIFJ4IHRpbWVzdGFtcCAqL1xuK1RSQUNFX0VWRU5UKGljZV9yeF9od3RzdGFtcCxcbitcdCAgICBUUF9QUk9UTyh1NjQgY2FjaGVkX3RpbWUsIHUzMiB0c19oaWdoLCB1NjQgdHNfbnMpLFxuK1xuK1x0ICAgIFRQX0FSR1MoY2FjaGVkX3RpbWUsIHRzX2hpZ2gsIHRzX25zKSxcbitcbitcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KF9fZmllbGQodTY0LCBjYWNoZWRfdGltZSlcbitcdFx0XHQgICAgIF9fZmllbGQodTMyLCB0c19oaWdoKVxuK1x0XHRcdCAgICAgX19maWVsZCh1NjQsIHRzX25zKSksXG4rXG4rXHQgICAgVFBfZmFzdF9hc3NpZ24oX19lbnRyeS1cdTAwM2VjYWNoZWRfdGltZSA9IGNhY2hlZF90aW1lO1xuK1x0XHRcdCAgIF9fZW50cnktXHUwMDNldHNfaGlnaCA9IHRzX2hpZ2g7XG4rXHRcdFx0ICAgX19lbnRyeS1cdTAwM2V0c19ucyA9IHRzX25zOyksXG4rXG4rXHQgICAgVFBfcHJpbnRrKFwiY2FjaGVkX3RpbWU9JWxsdSB0c19oaWdoPSV1IHRzX25zPSVsbHVcIixcbitcdFx0ICAgICAgX19lbnRyeS1cdTAwM2VjYWNoZWRfdGltZSwgX19lbnRyeS1cdTAwM2V0c19oaWdoLCBfX2VudHJ5LVx1MDAzZXRzX25zKVxuKyk7XG4rXG4gREVDTEFSRV9FVkVOVF9DTEFTUyhpY2VfZXN3X2JyX2ZkYl90ZW1wbGF0ZSxcbiBcdFx0ICAgIFRQX1BST1RPKHN0cnVjdCBpY2VfZXN3X2JyX2ZkYl9lbnRyeSAqZmRiKSxcbiBcdFx0ICAgIFRQX0FSR1MoZmRiKSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG5pbmRleCAzMTMwM2FiNWJlMTc1Li40NzdjODZkOGM1M2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG5AQCAtMTczOSw3ICsxNzM5LDcgQEAgaW50IGljZV90eF9jc3VtKHN0cnVjdCBpY2VfdHhfYnVmICpmaXJzdCwgc3RydWN0IGljZV90eF9vZmZsb2FkX3BhcmFtcyAqb2ZmKVxuIFx0bDNfbGVuID0gbDQuaGRyIC0gaXAuaGRyO1xuIFx0b2Zmc2V0IHw9IChsM19sZW4gLyA0KSBcdTAwM2NcdTAwM2MgSUNFX1RYX0RFU0NfTEVOX0lQTEVOX1M7XG4gXG4tXHRpZiAoKHR4X3JpbmctXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pIFx1MDAyNlx1MDAyNlxuK1x0aWYgKHRlc3RfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgdHhfcmluZy1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmaXJzdC1cdTAwM2V0eF9mbGFncyBcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNrYl9jc3VtX2lzX3NjdHAoc2tiKSkge1xuIFx0XHQvKiBTZXQgR0NTICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuaW5kZXggNWU1MTdmMjE5Mzc5OC4uMTVkYmQ1MTAwOTEyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuQEAgLTIxNyw2ICsyMTcsNyBAQCBlbnVtIGljZV90eF9yaW5nX2ZsYWdzIHtcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLFxuIFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzIsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19UWFRJTUUsXG4rXHRJQ0VfVFhfUklOR19GTEFHU19HQ1MsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19OQklUUyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdnNpX3ZsYW5fbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jXG5pbmRleCA1NDk4NDk2Njg1MWQ1Li5iNjcyNzJlMmY2MDNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuY1xuQEAgLTI0LDcgKzI0LDggQEAgc3RhdGljIHZvaWQgcHJpbnRfaW52YWxpZF90cGlkKHN0cnVjdCBpY2VfdnNpICp2c2ksIHUxNiB0cGlkKVxuIHN0YXRpYyBib29sIHZhbGlkYXRlX3ZsYW4oc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGljZV92bGFuICp2bGFuKVxuIHtcbiBcdGlmICh2bGFuLVx1MDAzZXRwaWQgIT0gRVRIX1BfODAyMVEgXHUwMDI2XHUwMDI2IHZsYW4tXHUwMDNldHBpZCAhPSBFVEhfUF84MDIxQUQgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmxhbi1cdTAwM2V0cGlkICE9IEVUSF9QX1FJTlExIFx1MDAyNlx1MDAyNiAodmxhbi1cdTAwM2V0cGlkIHx8IHZsYW4tXHUwMDNldmlkKSkge1xuK1x0ICAgIHZsYW4tXHUwMDNldHBpZCAhPSBFVEhfUF9RSU5RMSBcdTAwMjZcdTAwMjYgdmxhbi1cdTAwM2V0cGlkICE9IEVUSF9QXzgwMjFBSCBcdTAwMjZcdTAwMjZcbitcdCAgICAodmxhbi1cdTAwM2V0cGlkIHx8IHZsYW4tXHUwMDNldmlkKSkge1xuIFx0XHRwcmludF9pbnZhbGlkX3RwaWQodnNpLCB2bGFuLVx1MDAzZXRwaWQpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmNcbmluZGV4IGNhODAxOGUzZGQ0MjguLjA2ZDJmOWJlOTNhZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jXG5AQCAtMTcwMiw2ICsxNzAyLDkgQEAgc3RhdGljIGJvb2wgaWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fdHBpZCh1MTYgZmlsdGVyaW5nX2NhcHMsIHUxNiB0cGlkKVxuIFx0Y2FzZSBFVEhfUF9RSU5RMTpcbiBcdFx0dmxhbl9ldGhlcnR5cGUgPSBWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV85MTAwO1xuIFx0XHRicmVhaztcbitcdGNhc2UgRVRIX1BfODAyMUFIOlxuK1x0XHR2bGFuX2V0aGVydHlwZSA9IFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4RTc7XG4rXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKCEoZmlsdGVyaW5nX2NhcHMgXHUwMDI2IHZsYW5fZXRoZXJ0eXBlKSlcbkBAIC0yMTM2LDYgKzIxMzksOSBAQCBzdGF0aWMgaW50IGljZV92Y19nZXRfdHBpZCh1MzIgZXRoZXJ0eXBlX3NldHRpbmcsIHUxNiAqdHBpZClcbiBcdGNhc2UgVklSVENITkxfVkxBTl9FVEhFUlRZUEVfOTEwMDpcbiBcdFx0KnRwaWQgPSBFVEhfUF9RSU5RMTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4RTc6XG4rXHRcdCp0cGlkID0gRVRIX1BfODAyMUFIO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdCp0cGlkID0gMDtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xuaW5kZXggMjFkMmZlMzhhNDFhNi4uNDI0YzEyYzAzOTRhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xuQEAgLTExLDYgKzExLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiBcbkBAIC03MTA1LDYgKzcxMDcsNTcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlnY19xYnZfc2NoZWR1bGluZ190aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gXHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlnY19nZXRfYWNwaV9tYWNfcGFzc3RocnUodTggKm1hYylcbit7XG4rXHRzdGF0aWMgY29uc3Qgc3RydWN0IHtcbitcdFx0Y29uc3QgY2hhciAqbmFtZTtcbitcdFx0YWNwaV9vYmplY3RfdHlwZSB0eXBlO1xuK1x0XHR1MzIgbGVuZ3RoO1xuK1x0fSBzb3VyY2VzW10gPSB7XG4rXHRcdHsgXCJcXFxcX1NCLkFNQUNcIiwgQUNQSV9UWVBFX0JVRkZFUiwgMjMgfSxcbitcdFx0eyBcIlxcXFxNQUNBXCIsICAgICBBQ1BJX1RZUEVfU1RSSU5HLCAyMiB9LFxuK1x0fTtcbitcdHN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXI7XG4rXHR1bmlvbiBhY3BpX29iamVjdCAqb2JqO1xuK1x0Ym9vbCBtYWNfZm91bmQgPSBmYWxzZTtcbitcdGFjcGlfc3RhdHVzIHN0YXR1cztcbitcdHU4IGJ1ZltFVEhfQUxFTl07XG4rXHRpbnQgaTtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQUNQSSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc291cmNlcykgXHUwMDI2XHUwMDI2ICFtYWNfZm91bmQ7IGkrKykge1xuK1x0XHRidWZmZXIubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7XG4rXHRcdGJ1ZmZlci5wb2ludGVyID0gTlVMTDtcbitcbitcdFx0c3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoTlVMTCwgKGNoYXIgKilzb3VyY2VzW2ldLm5hbWUsXG4rXHRcdFx0XHRcdCAgICAgIE5VTEwsIFx1MDAyNmJ1ZmZlcik7XG4rXHRcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b2JqID0gYnVmZmVyLnBvaW50ZXI7XG4rXHRcdGlmICghb2JqIHx8IG9iai1cdTAwM2V0eXBlICE9IHNvdXJjZXNbaV0udHlwZSB8fFxuK1x0XHQgICAgb2JqLVx1MDAzZXN0cmluZy5sZW5ndGggIT0gc291cmNlc1tpXS5sZW5ndGgpXG4rXHRcdFx0Z290byBmcmVlX29iajtcbitcbitcdFx0aWYgKHN0cm5jbXAob2JqLVx1MDAzZXN0cmluZy5wb2ludGVyLCBcIl9BVVhNQUNfI1wiLCA5KSB8fFxuK1x0XHQgICAgb2JqLVx1MDAzZXN0cmluZy5wb2ludGVyWzIxXSAhPSAnIycpXG4rXHRcdFx0Z290byBmcmVlX29iajtcbitcbitcdFx0aWYgKGhleDJiaW4oYnVmLCBvYmotXHUwMDNlc3RyaW5nLnBvaW50ZXIgKyA5LCBFVEhfQUxFTikgfHxcbitcdFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKGJ1ZikpXG4rXHRcdFx0Z290byBmcmVlX29iajtcbitcbitcdFx0ZXRoZXJfYWRkcl9jb3B5KG1hYywgYnVmKTtcbitcdFx0bWFjX2ZvdW5kID0gdHJ1ZTtcbitmcmVlX29iajpcbitcdFx0a2ZyZWUob2JqKTtcbitcdH1cbitcbitcdHJldHVybiBtYWNfZm91bmQ7XG4rfVxuK1xuIC8qKlxuICAqIGlnY19wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXG4gICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG5AQCAtNzI2OCw5ICs3MzIxLDE2IEBAIHN0YXRpYyBpbnQgaWdjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGV0aF9wbGF0Zm9ybV9nZXRfbWFjX2FkZHJlc3MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGh3LVx1MDAzZW1hYy5hZGRyKSkge1xuLVx0XHQvKiBjb3B5IHRoZSBNQUMgYWRkcmVzcyBvdXQgb2YgdGhlIE5WTSAqL1xuLVx0XHRpZiAoaHctXHUwMDNlbWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSlcbitcdFx0LyogTG9vayBmb3IgYSBzeXN0ZW0tcHJvdmlkZWQgTUFDIGluIHRoZSBBQ1BJIHRhYmxlIGJlZm9yZVxuK1x0XHQgKiBmYWxsaW5nIGJhY2sgdG8gcmVhZGluZyB0aGUgYWRkcmVzcyBmcm9tIHRoZSBOVk0uXG4rXHRcdCAqL1xuK1x0XHRpZiAoaWdjX2dldF9hY3BpX21hY19wYXNzdGhydShody1cdTAwM2VtYWMuYWRkcikpIHtcbitcdFx0XHRuZXRkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1NUT0xFTjtcbitcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJVc2luZyBBQ1BJIHBhc3MtdGhyb3VnaCBNQUMgYWRkciAlcE1cXG5cIixcbitcdFx0XHRcdCBody1cdTAwM2VtYWMuYWRkcik7XG4rXHRcdH0gZWxzZSBpZiAoaHctXHUwMDNlbWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSkge1xuIFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTlZNIFJlYWQgRXJyb3JcXG5cIik7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LVx1MDAzZW1hYy5hZGRyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oIGIvaW5jbHVkZS9saW51eC9hdmYvdmlydGNobmwuaFxuaW5kZXggMTFiZGFiNTUyMmZkNS4uNTExYzg4MjdjNjQwZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcbkBAIC02MzYsNiArNjM2LDcgQEAgZW51bSB2aXJ0Y2hubF92bGFuX3N1cHBvcnQge1xuIFx0VklSVENITkxfVkxBTl9FVEhFUlRZUEVfODEwMCA9XHRcdEJJVCgwKSxcbiBcdFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4QTggPVx0XHRCSVQoMSksXG4gXHRWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV85MTAwID1cdFx0QklUKDIpLFxuK1x0VklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhFNyA9XHRcdEJJVCgzKSxcbiBcdFZJUlRDSE5MX1ZMQU5fVEFHX0xPQ0FUSU9OX0wyVEFHMSA9XHRCSVQoOCksXG4gXHRWSVJUQ0hOTF9WTEFOX1RBR19MT0NBVElPTl9MMlRBRzIgPVx0QklUKDkpLFxuIFx0VklSVENITkxfVkxBTl9UQUdfTE9DQVRJT05fTDJUQUcyXzIgPVx0QklUKDEwKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjQ3OjI2Ljg4MTU5Mjc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEzNDcxNjc2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIFNlcmllcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgdG91Y2hlcyBzZXZlcmFsIEludGVsIEV0aGVybmV0IGRyaXZlcnM6IGBlMTAwMGVgLCBgaTQwZWAsIGBpY2VgLCBhbmQgYGlnY2AuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBob3cgdGhpcyB3aWxsIGltcGFjdCBmdXp6aW5nIGVmZm9ydHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGUgbWFpbiBkcml2ZXJzIEknbSBpbnRlcmVzdGVkIGluIGFyZSB0aG9zZSB0aGF0IGFyZSBlbXVsYXRlZC5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGUxMDAwZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGVtdWxhdGVkLCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0LiBgaTQwZWAgYW5kIGBpY2VgIGFyZSBub3QgbmF0aXZlbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gYGlnY2AgaXMgYWxzbyBub3QgZW11bGF0ZWQuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmFycm93cyB0byB0aGUgYGUxMDAwZWAgY2hhbmdlcy5cblxuTG9va2luZyBhdCB0aGUgYGUxMDAwZWAgZGlmZiBpbiBgbmV0ZGV2LmNgLCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgYGUxMDAwX2NsZWFuX3J4X2lycWAuIFRoZXNlIGFyZSBjb3JlIFJYIHBhdGggZnVuY3Rpb25zIOKAkyB0aGV5J3JlIGNyaXRpY2FsIGZvciByZWNlaXZpbmcgcGFja2V0cywgc28sIGJ5IGRlZmluaXRpb24sIHRoZXkncmUgXCJob3QtcGF0aFwiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBwcm9tcHQsIGhvd2V2ZXIsIGluc3RydWN0cyBtZSB0byBhdm9pZCBsaXN0aW5nICpnZW5lcmljKiBob3QtcGF0aCBmdW5jdGlvbnMuIEhvd2V2ZXIsIGFyZSB0aGVzZSBmdW5jdGlvbnMgKmdlbmVyaWMqIG9yIHNwZWNpZmljIHRvIHRoZSBgZTEwMDBlYCBkcml2ZXI/IEJlY2F1c2UgdGhlc2UgYXJlIHRoZSAqb25seSogbW9kaWZpZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgKnJlYWNoYWJsZSogZHJpdmVyLCBsaXN0aW5nIHRoZW0gZmVlbHMgYXBwcm9wcmlhdGUuIFdoaWxlIHRoZXkgYXJlIGluZGVlZCBob3QtcGF0aCwgdGhleSBhcmUgKnNwZWNpZmljKiB0byB0aGlzIGRyaXZlciBhbmQgdGh1cyBhcmUgaWRlYWwuXG5cbkkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBlMTAwMGVgIGlzIGJlaW5nIGZ1enplZCBhbHJlYWR5LiBTeXprYWxsZXIgaW5jbHVkZXMgZGVzY3JpcHRpb25zIGZvciBlMTAwMGUuIEkgd2lsbCBhbHNvIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgZTEwMDBlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBuZWVkcyBhIGNvbmZpZywgSSB3aWxsIG5lZWQgdG8gbG9vayBhdCBpdHMgS2NvbmZpZyBmb3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0MzMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6NDguMjI4NzYzNjM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDYxNjU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRTEwMDBFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjo0Nzo0OC4yNzkyMzQyNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU2NzA0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgbmV0d29yayBkcml2ZXIncyBLY29uZmlnIGZpbGUgcmVzaWRlcy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgbG9jYXRpb24uIEludGVsJ3MgZXRoZXJuZXQgZHJpdmVycyBhcmUgdXN1YWxseSBwcmV0dHkgd2VsbC1vcmdhbml6ZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBNeSBmaXJzdCBndWVzcywgYmFzZWQgb24geWVhcnMgb2YgZXhwZXJpZW5jZSwgaXMgdGhhdCBpdCdsbCBiZSB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvYC4gVGhhdCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIHRoZSB0eXBpY2FsIGhvbWUgZm9yIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMsIGFuZCBLY29uZmlnIGZpbGVzIGFyZSBhbG1vc3QgYWx3YXlzIGxvY2F0ZWQgd2l0aGluIHRoZSBhcHByb3ByaWF0ZSBkcml2ZXIncyBzdWJkaXJlY3RvcnkuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDIwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6NTEuODM1OTQxMzA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAyNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFMTAwMEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTQ1PWNvbmZpZyBFMTAwMFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTYyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6ODE6Y29uZmlnIEUxMDAwRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy04Mi1cXHRib29sIFxcXCJTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBQQ0ggZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6NTEuODgxNDUwNDU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMTg0MjY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgRTEwMDBFOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgRTEwMDBFJ3MgUmVsYXRpb25zaGlwcyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBFMTAwMEUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhpcyBmcm9tIGEgZmV3IGFuZ2xlcy4gRmlyc3RseSwgSSdsbCB0aGluayBhYm91dCB0aGUgc29mdHdhcmUgZGVwZW5kZW5jaWVzOiBXaGF0IGxpYnJhcmllcywgaGVhZGVycywgYW5kIGtlcm5lbCBtb2R1bGVzIGlzIGl0IHJlbHlpbmcgb24/IElzIGl0IGEgc3RhbmRhbG9uZSBkcml2ZXIsIG9yIGRvZXMgaXQgaG9vayBpbnRvIHNvbWUgbG93ZXItbGV2ZWwgbmV0d29ya2luZyBzdGFjayBjb21wb25lbnRzLCBtYXliZSBzcGVjaWZpYyBuZXR3b3JrIHByb3RvY29scyBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IFRoYXQgY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGFuZCB3aGVuIHdvcmtpbmcgb24gaXQgd2l0aCBvdGhlcnMsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBsZXQgdGhlbSBrbm93LlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBoYXJkd2FyZSBzaWRlLiBFMTAwMEUgaXMgYW4gSW50ZWwgR2lnYWJpdCBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciwgc28gaXTigJlzIGxpa2VseSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuIEkgd291bGQgdGhpbmsgYWJvdXQgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgaXQgc3VwcG9ydHMsIGFueSBzcGVjaWZpYyBzaWxpY29uIHJldmlzaW9ucyB0aGF0IG1pZ2h0IHJlcXVpcmUgY29uZGl0aW9uYWwgY29kZSBwYXRocywgYW5kIGFueSBmaXJtd2FyZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBOSUMgaXRzZWxmLiBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBkYXRhc2hlZXQgd291bGQgbGlrZWx5IGJlIG5lY2Vzc2FyeSB0byBjb25maXJtIHRoaXMuXG5cbkZpbmFsbHksIEkgd291bGQgd2FudCB0byBsb29rIGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbC4gV2hhdCBidWlsZCB0b29scyBhcmUgdXNlZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgYnVpbGQgc3lzdGVtPyBJcyBpdCBhIG1vZHVsZSB0aGF0IGlzIGxvYWRlZCBhdCBydW50aW1lLCBvciBpcyBpdCBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWw/IFRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyBhbHNvIGEgZmFjdG9yLCBwYXJ0aWN1bGFybHkgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgdGhhdCBFMTAwMEUgcmVxdWlyZXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMgb3IgZmVhdHVyZXMsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhbiBvbGRlciBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6NTcuMzkzMjk0OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcbiAgNjE6XFx0Y29uZmlnIEUxMDAwRVxcbiAgNjI6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIFBSTy8xMDAwIFBDSS1FeHByZXNzIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDYzOlxcdFxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2ICghU1BBUkMzMiB8fCBCUk9LRU4pXFxuICA2NDpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA2NTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDY2OlxcdFxcdGhlbHBcXG4gIDY3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFBDSS1FeHByZXNzIEludGVsKFIpIFBSTy8xMDAwIGdpZ2FiaXRcXG4gIDY4OlxcdFxcdCAgZXRoZXJuZXQgZmFtaWx5IG9mIGFkYXB0ZXJzLiBGb3IgUENJIG9yIFBDSS1YIGUxMDAwIGFkYXB0ZXJzLFxcbiAgNjk6XFx0XFx0ICB1c2UgdGhlIHJlZ3VsYXIgZTEwMDAgZHJpdmVyIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0b1xcbiAgNzA6XFx0XFx0ICBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyIFxcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXRcXG4gIDcxOlxcdFxcdCAgY2FuIGJlIGxvY2F0ZWQgYXQ6XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVxcdTAwM2VcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDc2OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2UxMDAwZS5yc3RcXHUwMDNlLlxcbiAgNzc6XFx0XFxuICA3ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDc5OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgZTEwMDBlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjo0Nzo1Ny4zOTMzNzU0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NDQ1MTE2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvbmZpZ3VyYXRpb24gYEUxMDAwRWAgaXMgZGVmaW5pdGVseSByZWxldmFudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNgLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGUxMDAwZSBuZXR3b3JrIGRyaXZlci4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZHJpdmVyIGVtdWxhdGVkIGluIFFFTVU/IFllcywgZTEwMDBlIGlzICpkZWZpbml0ZWx5KiBlbXVsYXRlZCwgdW5saWtlIGBpZ2NgLCBgaTQwZWAsIG9yIGBpY2VgIHdoaWNoIHRoZSBwcm9tcHQgaW5kaWNhdGVzICphcmVuJ3QqLiBUaHVzLCBgRTEwMDBFYCBpcyB0aGUgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi5cblxuVGhlIHBhdGNoJ3MgY29yZSBtb2RpZmljYXRpb24gYXBwZWFycyB0byBhZGRyZXNzIGFuIGlzc3VlIGluIHRoZSBlMTAwMGUncyByZWNlaXZlIChSWCkgcGF0aCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnNgIGZ1bmN0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyBhIHBvdGVudGlhbCBwcm9ibGVtIHJlbGF0ZWQgdG8gRE1BIHVubWFwcGluZy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSBpbiBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZml4IGluIGEgcmVhbCBhbmQgZW11bGF0ZWQgZHJpdmVyLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC5cblxuRm9yIHRoZSBmb2N1cyBzeW1ib2xzLCBJJ20gaW5pdGlhbGx5IGNvbnNpZGVyaW5nIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgYGUxMDAwX2NsZWFuX3J4X2lycWAsIGJlY2F1c2UgdGhleSBhcmUgY2xlYXJseSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gQnV0IGhvbGQgb24sIGFyZSB0aGVzZSBmdW5jdGlvbnMgYHN0YXRpY2A/IFllcywgdGhleSBhcmUuIEFuZCB0aGUgcHJvbXB0IHByZWZlcnMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBhcmUgYHN0YXRpY2AsIHRoZXkncmUgbGlrZWx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBtYXkgbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gU28sIEkgd2lsbCBwcm9jZWVkIHdpdGggY2F1dGlvbiBpbiB0aGlzIGluc3RhbmNlLCBhbmQgcmUtY2hlY2sgbXkgcmF0aW9uYWxlLlxuXG5JJ2xsIHN0aWNrIHdpdGggYEUxMDAwRWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZywgYW5kIGtlZXAgaW4gbWluZCB0aGVzZSBgc3RhdGljYCBmdW5jdGlvbnMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTQzLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDg6MDYuMzM3ODk2OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTYzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImUxMDAwX2NsZWFuX3J4X2lycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jPTkxNT1zdGF0aWMgaW5saW5lIHZvaWQgZTEwMDBfcnhfaGFzaChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2xlMzIgcnNzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTkyMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6OTIzOiAqIGUxMDAwX2NsZWFuX3J4X2lycSAtIFNlbmQgcmVjZWl2ZWQgZGF0YSB1cCB0aGUgbmV0d29yayBzdGFja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy05MjQtICogQHJ4X3Jpbmc6IFJ4IGRlc2NyaXB0b3IgcmluZ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTkzMC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjkzMTpzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy05MzItXFx0XFx0XFx0ICAgICAgIGludCB3b3JrX3RvX2RvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jPTEyMzg9c3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fdHhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICp0eF9yaW5nKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTEzMjQtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjEzMjU6ICogZTEwMDBfY2xlYW5fcnhfaXJxX3BzIC0gU2VuZCByZWNlaXZlZCBkYXRhIHVwIHRoZSBuZXR3b3JrIHN0YWNrOyBwYWNrZXQgc3BsaXRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMyNi0gKiBAcnhfcmluZzogUnggZGVzY3JpcHRvciByaW5nXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMzMi0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjEzMzM6c3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxX3BzKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMzNC1cXHRcXHRcXHRcXHQgIGludCB3b3JrX3RvX2RvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jPTE2OTQ9c3RhdGljIHZvaWQgZTEwMDBfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xNzA1LVxcdFxcdGlmIChidWZmZXJfaW5mby1cXHUwMDNlZG1hKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjE3MDY6XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWNsZWFuX3J4ID09IGUxMDAwX2NsZWFuX3J4X2lycSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcwNy1cXHRcXHRcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcxMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxNzEzOlxcdFxcdFxcdGVsc2UgaWYgKGFkYXB0ZXItXFx1MDAzZWNsZWFuX3J4ID09IGUxMDAwX2NsZWFuX3J4X2lycV9wcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcxNC1cXHRcXHRcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MzIwMz1zdGF0aWMgdm9pZCBlMTAwMF9jb25maWd1cmVfcngoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIxMy1cXHRcXHQgICAgc2l6ZW9mKHVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MzIxNDpcXHRcXHRhZGFwdGVyLVxcdTAwM2VjbGVhbl9yeCA9IGUxMDAwX2NsZWFuX3J4X2lycV9wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIxNS1cXHRcXHRhZGFwdGVyLVxcdTAwM2VhbGxvY19yeF9idWYgPSBlMTAwMF9hbGxvY19yeF9idWZmZXJzX3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTMyMjEtXFx0XFx0cmRsZW4gPSByeF9yaW5nLVxcdTAwM2Vjb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9yeF9kZXNjX2V4dGVuZGVkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MzIyMjpcXHRcXHRhZGFwdGVyLVxcdTAwM2VjbGVhbl9yeCA9IGUxMDAwX2NsZWFuX3J4X2lycTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIyMy1cXHRcXHRhZGFwdGVyLVxcdTAwM2VhbGxvY19yeF9idWYgPSBlMTAwMF9hbGxvY19yeF9idWZmZXJzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjo0ODowNi4zODcwNjY1OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyMTUxMzIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEUxMDAwRSBEcml2ZXIncyBSeCBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZS4gVGhlIGZpcnN0IHRoaW5nIEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaXMgdGhlIGludGVycnVwdC1kcml2ZW4gUlggcGF0aCBmb3IgdGhlIGVtdWxhdGVkIEUxMDAwRSBkZXZpY2UuIFRoZXNlIGZ1bmN0aW9ucywgYGFkYXB0ZXItXHUwMDNlY2xlYW5fcnggPSBlMTAwMF9jbGVhbl9yeF9pcnE7YCBhbmQgc28gb24sIGFyZSBhc3NpZ25lZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkgYXJlbid0IGlubGluZWQuIFRoYXQncyBnb29kOyBpdCBrZWVwcyB0aGluZ3MgbWFuYWdlYWJsZS5cblxuSSBzZWUgdGhlcmUncyBzb21lIGJyb2FkZXIgYWN0aXZpdHkgd2l0aCBYRFAgbWV0YWRhdGEgb3BlcmF0aW9uczsgdGhlIHBhdGNoIHNlZW1zIHRvIHRvdWNoIGBpNDBlX3hkcF9yeF9oYXNoYCBhbmQgYGk0MGVfeGRwX3J4X3ZsYW5fdGFnYC4gUGx1cywgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgZm9yIHRoZSBgaWNlYCBhbmQgYGlnY2AgZHJpdmVycyBhcyB3ZWxsLiBTaW5jZSB0aGlzIGlzIGFuIGVtdWxhdGlvbiBjb250ZXh0LCBhbmQgdGhlIG9ubHkgZW11bGF0ZWQgZGV2aWNlIGluIHBsYXkgaGVyZSBpcyBFMTAwMEUsIG15IGZvY3VzIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgb24gdGhhdCBkcml2ZXIuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgRTEwMDBFYCBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZsYWcgdG8gZW5hYmxlIHRoZSBFMTAwMEUgc3VwcG9ydC4gQWxyaWdodCwgeWVwLCBjb25maXJtZWQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LlxuXG5OZXh0IHN0ZXA6IEkgbmVlZCB0byB2ZXJpZnkgd2hhdCdzIGhhcHBlbmluZyBpbiBgZTEwMDBlL25ldGRldi5jYCByZWdhcmRpbmcgdGhlIFJYIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjbGVhbmluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgc3BlY2lmaWNhbGx5IGBlMTAwMF9jbGVhbl9yeF9pcnFgIHRvIGNvbmZpcm0gdGhlIGNvZGUgc3RydWN0dXJlLCBhbmQgbWFrZSBzdXJlIHRoYXQsIGFzIHN1c3BlY3RlZCwgdGhleSBhcmUgbm90IGlubGluZWQuXG5cbkxvb2tzIGxpa2UgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBiZXlvbmQgYEUxMDAwRWAgdGhhdCB3aWxsIGltcGFjdCB0aGlzLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wsIGFzIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhlIGtleSBmdW5jdGlvbnMgcmVzaWRlIGFuZCBob3cgdGhleSBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5ODQsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjQ4OjEzLjEwODU4MjU3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjYwMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFMTAwMEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwMF9hbGxvY19yeF9idWZmZXJzXCIsXG4gICAgXCJlMTAwMF9jbGVhbl9yeF9pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRTEwMDBFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZTEwMDBfYWxsb2NfcnhfYnVmZmVyc1wiLFxuICAgIFwiZTEwMDBfY2xlYW5fcnhfaXJxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJYIHBhdGggb2YgdGhlIGUxMDAwZSBkcml2ZXIgKGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMgYW5kIGUxMDAwX2NsZWFuX3J4X2lycSksIHdoaWNoIGlzIGZ1bGx5IGVtdWxhdGVkIGluIFFFTVUgYW5kIHJlYWNoYWJsZS4gSXQgYWxzbyBtb2RpZmllcyBpNDBlLCBpY2UsIGFuZCBpZ2MgZHJpdmVycywgYnV0IHRob3NlIGFyZSBub3QgbmF0aXZlbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gV2UgZm9jdXMgb24gdGhlIGUxMDAwZSBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2wqz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 22:31:12 +0000 UTC FinishedAt: 2026-08-05 22:48:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "E1000E" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a23b36233d4103def55dc8cf65698106d0bd1e62", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "E1000E" ], "series_id": "d42963ba-6c74-4265-8a5e-c438067013af" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "e1000_alloc_rx_buffers", "e1000_clean_rx_irq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0UxMDAwRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2UxMDAwX2FsbG9jX3J4X2J1ZmZlcnMmIzM0OywKICAgICYjMzQ7ZTEwMDBfY2xlYW5fcnhfaXJxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSWCBwYXRoIG9mIHRoZSBlMTAwMGUgZHJpdmVyIChlMTAwMF9hbGxvY19yeF9idWZmZXJzIGFuZCBlMTAwMF9jbGVhbl9yeF9pcnEpLCB3aGljaCBpcyBmdWxseSBlbXVsYXRlZCBpbiBRRU1VIGFuZCByZWFjaGFibGUuIEl0IGFsc28gbW9kaWZpZXMgaTQwZSwgaWNlLCBhbmQgaWdjIGRyaXZlcnMsIGJ1dCB0aG9zZSBhcmUgbm90IG5hdGl2ZWx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFdlIGZvY3VzIG9uIHRoZSBlMTAwMGUgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI2ZjBhZjVjOTQzN2Y0MTY0YjAyYzYxMThhYTBkNzg0NDU1ZGFiMTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjQ3OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcbmluZGV4IDBiY2EyOTNjZjljYjcuLjgyYjNjY2M3MDI3ZWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaWNlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcbkBAIC05NDEsNiAmIzQzOzk0MSw4NiBAQCBUbyBzZWUgaW5wdXQgc2lnbmFsIG9uIHRob3NlIFBUUCBwaW5zLCB5b3UgbmVlZCB0byBjb25maWd1cmUgRFBMTCBwcm9wZXJseS5cbiBPdXRwdXQgc2lnbmFsIGlzIG9ubHkgdmlzaWJsZSBvbiBEUExMIGFuZCB0byBzZW5kIGl0IHRvIHRoZSBib2FyZCBTTUEvVS5GTCBwaW5zLFxuIERQTEwgb3V0cHV0IHBpbnMgaGF2ZSB0byBiZSBtYW51YWxseSBjb25maWd1cmVkLlxuIFxuJiM0MztVbm1hbmFnZWQgRFBMTCBTdXBwb3J0XG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7SGFyZHdhcmUgdmFyaWFudHMgb2YgRTgzMCBtYXkgc3VwcG9ydCBhbiB1bm1hbmFnZWQgRFBMTDpcbiYjNDM7XG4mIzQzOy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE4RiBmb3IgT0NQIDMuMCxcbiYjNDM7XG4mIzQzOy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE0Ri5cbiYjNDM7XG4mIzQzO0luIHRoZSBjYXNlIG9mIHRoZSB1bm1hbmFnZWQgRFBMTCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaGFyZGNvZGVkIHdpdGhpbiB0aGVcbiYjNDM7aGFyZHdhcmUgYW5kIGZpcm13YXJlLCBtZWFuaW5nIHVzZXJzIGNhbm5vdCBtb2RpZnkgc2V0dGluZ3MuIEhvd2V2ZXIsXG4mIzQzO3VzZXJzIGNhbiBjaGVjayB0aGUgRFBMTCBsb2NrIHN0YXR1cyBhbmQgb2J0YWluIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cbiYjNDM7dGhyb3VnaCB0aGUgTGludXggRFBMTCBzdWJzeXN0ZW0uXG4mIzQzO1xuJiM0MztXaGVuIHByZXNlbnQsIHRoZSBEUExMIGRldmljZSBsb2NrcyB0byBhbiBleHRlcm5hbCBzaWduYWwgcHJvdmlkZWQgdGhyb3VnaCB0aGVcbiYjNDM7UENJZS9PQ1AgcGluLiBUaGUgZXhwZWN0ZWQgaW5wdXQgc2lnbmFsIGlzIDFQUFMgKDEgUHVsc2UgUGVyIFNlY29uZCkgZW1iZWRkZWRcbiYjNDM7b24gYSAxME1IeiByZWZlcmVuY2UgY2xvY2suXG4mIzQzO1RoZSBEUExMIHByb2R1Y2VzIG91dHB1dDpcbiYjNDM7XG4mIzQzOy0gZm9yIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2wpIFx1MDAyNiBQSFkgKFBoeXNpY2FsIExheWVyKSBjbG9ja3MsXG4mIzQzO1xuJiM0MzstIDFQUFMgZm9yIHN5bmNocm9uaXphdGlvbiBvZiBvbmJvYXJkIFBIQyAoUHJlY2lzaW9uIEhhcmR3YXJlIENsb2NrKSB0aW1lci5cbiYjNDM7XG4mIzQzO0V4YW1wbGUgb3V0cHV0IG9mIHF1ZXJ5aW5nIHRoZSBMaW51eCBEUExMIHN1YnN5c3RlbSBjYW4gYmUgZm91bmQgYmVsb3cuXG4mIzQzO1xuJiM0MzsuLiBjb2RlLWJsb2NrOjogY29uc29sZVxuJiM0MzsgIDpjYXB0aW9uOiBEdW1waW5nIHRoZSBEUExMIHBpbnNcbiYjNDM7XG4mIzQzOyAgJCBcdTAwM2N5bmxcdTAwM2UgLS1zcGVjIERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcGxsLnlhbWwgLS1kdW1wIHBpbi1nZXRcbiYjNDM7ICBbeyYjMzk7Ym9hcmQtbGFiZWwmIzM5OzogJiMzOTsxNTg4LVRJTUVfU1lOQyYjMzk7LFxuJiM0MzsgICAgJiMzOTtjYXBhYmlsaXRpZXMmIzM5Ozogc2V0KCksXG4mIzQzOyAgICAmIzM5O2Nsb2NrLWlkJiMzOTs6IDI4MjU3NDQ3MTU2MTIxNixcbiYjNDM7ICAgICYjMzk7ZXN5bmMtZnJlcXVlbmN5JiMzOTs6IDEsXG4mIzQzOyAgICAmIzM5O2VzeW5jLWZyZXF1ZW5jeS1zdXBwb3J0ZWQmIzM5OzogW3smIzM5O2ZyZXF1ZW5jeS1tYXgmIzM5OzogMSwgJiMzOTtmcmVxdWVuY3ktbWluJiMzOTs6IDF9XSxcbiYjNDM7ICAgICYjMzk7ZXN5bmMtcHVsc2UmIzM5OzogMjUsXG4mIzQzOyAgICAmIzM5O2ZyZXF1ZW5jeSYjMzk7OiAxMDAwMDAwMCxcbiYjNDM7ICAgICYjMzk7aWQmIzM5OzogMTMsXG4mIzQzOyAgICAmIzM5O21vZHVsZS1uYW1lJiMzOTs6ICYjMzk7aWNlJiMzOTssXG4mIzQzOyAgICAmIzM5O3BhcmVudC1kZXZpY2UmIzM5OzogW3smIzM5O2RpcmVjdGlvbiYjMzk7OiAmIzM5O2lucHV0JiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtwYXJlbnQtaWQmIzM5OzogNixcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3N0YXRlJiMzOTs6ICYjMzk7Y29ubmVjdGVkJiMzOTt9XSxcbiYjNDM7ICAgICYjMzk7cGhhc2UtYWRqdXN0LW1heCYjMzk7OiAwLFxuJiM0MzsgICAgJiMzOTtwaGFzZS1hZGp1c3QtbWluJiMzOTs6IDAsXG4mIzQzOyAgICAmIzM5O3R5cGUmIzM5OzogJiMzOTtleHQmIzM5O30sXG4mIzQzOyAgICB7JiMzOTtib2FyZC1sYWJlbCYjMzk7OiAmIzM5O01BQy1QSFktQ0xLJiMzOTssXG4mIzQzOyAgICAgICYjMzk7Y2FwYWJpbGl0aWVzJiMzOTs6IHNldCgpLFxuJiM0MzsgICAgJiMzOTtjbG9jay1pZCYjMzk7OiAyODI1NzQ0NzE1NjEyMTYsXG4mIzQzOyAgICAmIzM5O2ZyZXF1ZW5jeSYjMzk7OiAxNTYyNTAwMDAsXG4mIzQzOyAgICAmIzM5O2lkJiMzOTs6IDE0LFxuJiM0MzsgICAgJiMzOTttb2R1bGUtbmFtZSYjMzk7OiAmIzM5O2ljZSYjMzk7LFxuJiM0MzsgICAgJiMzOTtwYXJlbnQtZGV2aWNlJiMzOTs6IFt7JiMzOTtkaXJlY3Rpb24mIzM5OzogJiMzOTtvdXRwdXQmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3BhcmVudC1pZCYjMzk7OiA2LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICYjMzk7c3RhdGUmIzM5OzogJiMzOTtjb25uZWN0ZWQmIzM5O31dLFxuJiM0MzsgICAgJiMzOTtwaGFzZS1hZGp1c3QtbWF4JiMzOTs6IDAsXG4mIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1taW4mIzM5OzogMCxcbiYjNDM7ICAgICYjMzk7dHlwZSYjMzk7OiAmIzM5O3N5bmNlLWV0aC1wb3J0JiMzOTt9LFxuJiM0MzsgIHsmIzM5O2JvYXJkLWxhYmVsJiMzOTs6ICYjMzk7MTU4OC1USU1FX1JFRiYjMzk7LFxuJiM0MzsgICAgJiMzOTtjYXBhYmlsaXRpZXMmIzM5Ozogc2V0KCksXG4mIzQzOyAgICAmIzM5O2Nsb2NrLWlkJiMzOTs6IDI4MjU3NDQ3MTU2MTIxNixcbiYjNDM7ICAgICYjMzk7ZnJlcXVlbmN5JiMzOTs6IDEsXG4mIzQzOyAgICAmIzM5O2lkJiMzOTs6IDE1LFxuJiM0MzsgICAgJiMzOTttb2R1bGUtbmFtZSYjMzk7OiAmIzM5O2ljZSYjMzk7LFxuJiM0MzsgICAgJiMzOTtwYXJlbnQtZGV2aWNlJiMzOTs6IFt7JiMzOTtkaXJlY3Rpb24mIzM5OzogJiMzOTtvdXRwdXQmIzM5OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3BhcmVudC1pZCYjMzk7OiA2LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICYjMzk7c3RhdGUmIzM5OzogJiMzOTtjb25uZWN0ZWQmIzM5O31dLFxuJiM0MzsgICAgJiMzOTtwaGFzZS1hZGp1c3QtbWF4JiMzOTs6IDAsXG4mIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1taW4mIzM5OzogMCxcbiYjNDM7ICAgICYjMzk7dHlwZSYjMzk7OiAmIzM5O2ludC1vc2NpbGxhdG9yJiMzOTt9XVxuJiM0MztcbiYjNDM7Li4gY29kZS1ibG9jazo6IGNvbnNvbGVcbiYjNDM7ICA6Y2FwdGlvbjogRHVtcGluZyB0aGUgRFBMTCBkZXZpY2VzXG4mIzQzO1xuJiM0MzsgICQgXHUwMDNjeW5sXHUwMDNlIC0tc3BlYyBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHBsbC55YW1sIC0tZHVtcCBkZXZpY2UtZ2V0XG4mIzQzOyAgW3smIzM5O2Nsb2NrLWlkJiMzOTs6IDI4MjU3NDQ3MTU2MTIxNixcbiYjNDM7ICAgICYjMzk7aWQmIzM5OzogNixcbiYjNDM7ICAgICYjMzk7bG9jay1zdGF0dXMmIzM5OzogJiMzOTtsb2NrZWQmIzM5OyxcbiYjNDM7ICAgICYjMzk7bW9kZSYjMzk7OiAmIzM5O21hbnVhbCYjMzk7LFxuJiM0MzsgICAgJiMzOTttb2RlLXN1cHBvcnRlZCYjMzk7OiBbJiMzOTttYW51YWwmIzM5O10sXG4mIzQzOyAgICAmIzM5O21vZHVsZS1uYW1lJiMzOTs6ICYjMzk7aWNlJiMzOTssXG4mIzQzOyAgICAmIzM5O3R5cGUmIzM5OzogJiMzOTtwcHMmIzM5O31dXG4mIzQzO1xuIEdOU1MgbW9kdWxlXG4gLS0tLS0tLS0tLS1cbiBSZXF1aXJlcyBrZXJuZWwgY29tcGlsZWQgd2l0aCBDT05GSUdfR05TUz15IG9yIENPTkZJR19HTlNTPW0uXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jXG5pbmRleCA4NDRmMzFhYjM3YWQ0Li5iMDhiY2JkYjE5ZDk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNcbkBAIC02NzUsNiAmIzQzOzY3NSw4IEBAIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdHNrYiA9IGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYjtcbiBcdFx0aWYgKHNrYikge1xuIFx0XHRcdHNrYl90cmltKHNrYiwgMCk7XG4mIzQzO1x0XHRcdGlmIChsaWtlbHkoYnVmZmVyX2luZm8tXHUwMDNlZG1hKSlcbiYjNDM7XHRcdFx0XHRnb3RvIHdyaXRlX2Rlc2M7XG4gXHRcdFx0Z290byBtYXBfc2tiO1xuIFx0XHR9XG4gXG5AQCAtNjkyLDEwICYjNDM7Njk0LDEyIEBAIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdFx0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuIFx0XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSkpIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtSeCBETUEgbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSA9IDA7XG4gXHRcdFx0YWRhcHRlci1cdTAwM2VyeF9kbWFfZmFpbGVkJiM0MzsmIzQzOztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuJiM0Mzt3cml0ZV9kZXNjOlxuIFx0XHRyeF9kZXNjID0gRTEwMDBfUlhfREVTQ19FWFQoKnJ4X3JpbmcsIGkpO1xuIFx0XHRyeF9kZXNjLVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby1cdTAwM2VkbWEpO1xuIFxuQEAgLTk1Myw3ICYjNDM7OTU3LDYgQEAgc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbiBcdFx0ZG1hX3JtYigpO1x0LyogcmVhZCBkZXNjcmlwdG9yIGFuZCByeF9idWZmZXJfaW5mbyBhZnRlciBzdGF0dXMgREQgKi9cbiBcbiBcdFx0c2tiID0gYnVmZmVyX2luZm8tXHUwMDNlc2tiO1xuLVx0XHRidWZmZXJfaW5mby1cdTAwM2Vza2IgPSBOVUxMO1xuIFxuIFx0XHRwcmVmZXRjaChza2ItXHUwMDNlZGF0YSAtIE5FVF9JUF9BTElHTik7XG4gXG5AQCAtOTY3LDkgJiM0Mzs5NzAsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFxuIFx0XHRjbGVhbmVkID0gdHJ1ZTtcbiBcdFx0Y2xlYW5lZF9jb3VudCYjNDM7JiM0Mzs7XG4tXHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbi1cdFx0XHRcdCBhZGFwdGVyLVx1MDAzZXJ4X2J1ZmZlcl9sZW4sIERNQV9GUk9NX0RFVklDRSk7XG4tXHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSA9IDA7XG4gXG4gXHRcdGxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtXHUwMDNld2IudXBwZXIubGVuZ3RoKTtcbiBcbkBAIC05ODUsOCAmIzQzOzk4NSw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXG4gXHRcdGlmIChhZGFwdGVyLVx1MDAzZWZsYWdzMiBcdTAwMjYgRkxBRzJfSVNfRElTQ0FSRElORykge1xuIFx0XHRcdC8qIEFsbCByZWNlaXZlcyBtdXN0IGZpdCBpbnRvIGEgc2luZ2xlIGJ1ZmZlciAqL1xuIFx0XHRcdGVfZGJnKFwmIzM0O1JlY2VpdmUgcGFja2V0IGNvbnN1bWVkIG11bHRpcGxlIGJ1ZmZlcnNcXG5cJiMzNDspO1xuLVx0XHRcdC8qIHJlY3ljbGUgKi9cbi1cdFx0XHRidWZmZXJfaW5mby1cdTAwM2Vza2IgPSBza2I7XG4gXHRcdFx0aWYgKHN0YXRlcnIgXHUwMDI2IEUxMDAwX1JYRF9TVEFUX0VPUClcbiBcdFx0XHRcdGFkYXB0ZXItXHUwMDNlZmxhZ3MyIFx1MDAyNj0gfkZMQUcyX0lTX0RJU0NBUkRJTkc7XG4gXHRcdFx0Z290byBuZXh0X2Rlc2M7XG5AQCAtOTk0LDggJiM0Mzs5OTIsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFxuIFx0XHRpZiAodW5saWtlbHkoKHN0YXRlcnIgXHUwMDI2IEUxMDAwX1JYREVYVF9FUlJfRlJBTUVfRVJSX01BU0spIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgIShuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhBTEwpKSkge1xuLVx0XHRcdC8qIHJlY3ljbGUgKi9cbi1cdFx0XHRidWZmZXJfaW5mby1cdTAwM2Vza2IgPSBza2I7XG4gXHRcdFx0Z290byBuZXh0X2Rlc2M7XG4gXHRcdH1cbiBcbkBAIC0xMDIyLDE5ICYjNDM7MTAxOCwzMyBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFx0XHRcdHN0cnVjdCBza19idWZmICpuZXdfc2tiID1cbiBcdFx0XHRcdG5hcGlfYWxsb2Nfc2tiKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSwgbGVuZ3RoKTtcbiBcdFx0XHRpZiAobmV3X3NrYikge1xuJiM0MztcdFx0XHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXJ4X2J1ZmZlcl9sZW4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0RE1BX0ZST01fREVWSUNFKTtcbiBcdFx0XHRcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChuZXdfc2tiLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgIC1ORVRfSVBfQUxJR04sXG4gXHRcdFx0XHRcdFx0XHQgICAgICAgKHNrYi1cdTAwM2VkYXRhIC1cbiBcdFx0XHRcdFx0XHRcdFx0TkVUX0lQX0FMSUdOKSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgICAobGVuZ3RoICYjNDM7XG4gXHRcdFx0XHRcdFx0XHRcdE5FVF9JUF9BTElHTikpO1xuLVx0XHRcdFx0Lyogc2F2ZSB0aGUgc2tiIGluIGJ1ZmZlcl9pbmZvIGFzIGdvb2QgKi9cbi1cdFx0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYiA9IHNrYjtcbiYjNDM7XHRcdFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBidWZmZXJfaW5mby1cdTAwM2VkbWEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgYWRhcHRlci1cdTAwM2VyeF9idWZmZXJfbGVuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIERNQV9GUk9NX0RFVklDRSk7XG4gXHRcdFx0XHRza2IgPSBuZXdfc2tiO1xuJiM0MztcdFx0XHRcdGdvdG8gY29weWJyZWFrX2RvbmU7XG4gXHRcdFx0fVxuIFx0XHRcdC8qIGVsc2UganVzdCBjb250aW51ZSB3aXRoIHRoZSBvbGQgb25lICovXG4gXHRcdH1cbi1cdFx0LyogZW5kIGNvcHlicmVhayBjb2RlICovXG4mIzQzO1xuJiM0MztcdFx0YnVmZmVyX2luZm8tXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7XHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbiYjNDM7XHRcdFx0XHQgYWRhcHRlci1cdTAwM2VyeF9idWZmZXJfbGVuLFxuJiM0MztcdFx0XHRcdCBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcdFx0YnVmZmVyX2luZm8tXHUwMDNlZG1hID0gMDtcbiYjNDM7XG4mIzQzO2NvcHlicmVha19kb25lOlxuIFx0XHRza2JfcHV0KHNrYiwgbGVuZ3RoKTtcbiBcbiBcdFx0LyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbmluZGV4IDBjZDBlNTU5N2M5MDkuLmFiYmM3MWU4MTVhZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjZ2VuZXJhdGVkL3V0c3JlbGVhc2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9wY3R5cGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQvaW50ZWwvbGliaWUvcnguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfbWFjdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbkBAIC0yNDExLDEwICYjNDM7MjQxMiwxMiBAQCB2b2lkIGk0MGVfYXFjX2FkZF9maWx0ZXJzKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcbiBcbiBcdGlmIChmY250ICE9IG51bV9hZGQpIHtcbiBcdFx0aWYgKHZzaS1cdTAwM2V0eXBlID09IEk0MEVfVlNJX01BSU4pIHtcbi1cdFx0XHRzZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVx1MDAzZXN0YXRlKTtcbi1cdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdCBcJiMzNDtFcnJvciAlcyBhZGRpbmcgUlggZmlsdGVycyBvbiAlcywgcHJvbWlzY3VvdXMgbW9kZSBmb3JjZWQgb25cXG5cJiMzNDssXG4tXHRcdFx0XHQgbGliaWVfYXFfc3RyKGFxX3N0YXR1cyksIHZzaV9uYW1lKTtcbiYjNDM7XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHZzaS1cdTAwM2VzdGF0ZSkpIHtcbiYjNDM7XHRcdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtFcnJvciAlcyBhZGRpbmcgUlggZmlsdGVycyBvbiAlcywgcHJvbWlzY3VvdXMgbW9kZSBmb3JjZWQgb25cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgbGliaWVfYXFfc3RyKGFxX3N0YXR1cyksIHZzaV9uYW1lKTtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKHZzaS1cdTAwM2V0eXBlID09IEk0MEVfVlNJX1NSSU9WIHx8XG4gXHRcdFx0ICAgdnNpLVx1MDAzZXR5cGUgPT0gSTQwRV9WU0lfVk1EUTEgfHxcbiBcdFx0XHQgICB2c2ktXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9WTURRMikge1xuQEAgLTI0NjQsMTAgJiM0MzsyNDY3LDExIEBAIGk0MGVfYXFjX2Jyb2FkY2FzdF9maWx0ZXIoc3RydWN0IGk0MGVfdnNpICp2c2ksIGNvbnN0IGNoYXIgKnZzaV9uYW1lLFxuIFx0fVxuIFxuIFx0aWYgKGFxX3JldCkge1xuLVx0XHRzZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVx1MDAzZXN0YXRlKTtcbi1cdFx0ZGV2X3dhcm4oXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0IFwmIzM0O0Vycm9yICVzLCBmb3JjaW5nIG92ZXJmbG93IHByb21pc2N1b3VzIG9uICVzXFxuXCYjMzQ7LFxuLVx0XHRcdCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYXEuYXNxX2xhc3Rfc3RhdHVzKSwgdnNpX25hbWUpO1xuJiM0MztcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVx1MDAzZXN0YXRlKSkge1xuJiM0MztcdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RXJyb3IgJXMsIGZvcmNpbmcgb3ZlcmZsb3cgcHJvbWlzY3VvdXMgb24gJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGxpYmllX2FxX3N0cihody1cdTAwM2VhcS5hc3FfbGFzdF9zdGF0dXMpLCB2c2lfbmFtZSk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gYXFfcmV0O1xuQEAgLTM2MjIsNyAmIzQzOzM2MjYsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGk0MGVfcmluZyAqcmluZylcbiBcdH1cbiBcbiBza2lwOlxuLVx0eGRwX2luaXRfYnVmZihcdTAwMjZyaW5nLVx1MDAzZXhkcCwgeGRwX2ZyYW1lX3N6LCBcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuJiM0MztcdHhkcF9pbml0X2J1ZmYoXHUwMDI2cmluZy1cdTAwM2V4ZHBfY3R4LnhkcCwgeGRwX2ZyYW1lX3N6LCBcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuIFxuIFx0cnhfY3R4LmRidWZmID0gRElWX1JPVU5EX1VQKHJpbmctXHUwMDNlcnhfYnVmX2xlbixcbiBcdFx0XHRcdCAgICBCSVRfVUxMKEk0MEVfUlhRX0NUWF9EQlVGRl9TSElGVCkpO1xuQEAgLTEzNTgyLDYgJiM0MzsxMzU4Niw1MyBAQCBzdGF0aWMgaW50IGk0MGVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGk0MGVfeGRwX3J4X2hhc2goY29uc3Qgc3RydWN0IHhkcF9tZCAqX2N0eCwgdTMyICpoYXNoLFxuJiM0MztcdFx0XHQgICAgZW51bSB4ZHBfcnNzX2hhc2hfdHlwZSAqcnNzX3R5cGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqY3R4ID0gKGNvbnN0IHZvaWQgKilfY3R4O1xuJiM0MztcdGNvbnN0IHVuaW9uIGk0MGVfcnhfZGVzYyAqZGVzYyA9IGN0eC1cdTAwM2VkZXNjO1xuJiM0MztcdHN0cnVjdCBsaWJldGhfcnhfcHQgcnhfcHR5cGU7XG4mIzQzO1x0dTggcmF3X3J4X3B0eXBlO1xuJiM0MztcdHU2NCBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGxlNjRfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQxLnN0YXR1c19lcnJvcl9sZW4pO1xuJiM0MztcdHJhd19yeF9wdHlwZSA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfUFRZUEVfTUFTSywgc3RhdHVzKTtcbiYjNDM7XHRyeF9wdHlwZSA9IGxpYmllX3J4X3B0X3BhcnNlKHJhd19yeF9wdHlwZSk7XG4mIzQzO1xuJiM0MztcdGlmICghbGliZXRoX3J4X3B0X2hhc19oYXNoKGN0eC1cdTAwM2V4ZHAucnhxLVx1MDAzZWRldiwgcnhfcHR5cGUpIHx8XG4mIzQzO1x0ICAgIEZJRUxEX0dFVChJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfTUFTSywgc3RhdHVzKSAhPVxuJiM0MztcdFx0ICAgIEk0MEVfUlhfREVTQ19GTFRTVEFUX1JTU19IQVNIKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHQqaGFzaCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQwLmhpX2R3b3JkLnJzcyk7XG4mIzQzO1x0KnJzc190eXBlID0gcnhfcHR5cGUuaGFzaF90eXBlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpNDBlX3hkcF9yeF92bGFuX3RhZyhjb25zdCBzdHJ1Y3QgeGRwX21kICpfY3R4LCBfX2JlMTYgKnZsYW5fcHJvdG8sXG4mIzQzO1x0XHRcdFx0dTE2ICp2bGFuX3RjaSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpNDBlX3hkcF9idWZmICpjdHggPSAoY29uc3Qgdm9pZCAqKV9jdHg7XG4mIzQzO1x0Y29uc3QgdW5pb24gaTQwZV9yeF9kZXNjICpkZXNjID0gY3R4LVx1MDAzZWRlc2M7XG4mIzQzO1x0dTY0IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0c3RhdHVzID0gbGU2NF90b19jcHUoZGVzYy1cdTAwM2V3Yi5xd29yZDEuc3RhdHVzX2Vycm9yX2xlbik7XG4mIzQzO1xuJiM0MztcdGlmICghKHN0YXR1cyBcdTAwMjYgQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTDJUQUcxUF9TSElGVCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHQqdmxhbl9wcm90byA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKTtcbiYjNDM7XHQqdmxhbl90Y2kgPSBsZTE2X3RvX2NwdShkZXNjLVx1MDAzZXdiLnF3b3JkMC5sb19kd29yZC5sMnRhZzEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB4ZHBfbWV0YWRhdGFfb3BzIGk0MGVfeGRwX21ldGFkYXRhX29wcyA9IHtcbiYjNDM7XHQueG1vX3J4X2hhc2hcdFx0PSBpNDBlX3hkcF9yeF9oYXNoLFxuJiM0MztcdC54bW9fcnhfdmxhbl90YWdcdD0gaTQwZV94ZHBfcnhfdmxhbl90YWcsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaTQwZV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19vcGVuXHRcdD0gaTQwZV9vcGVuLFxuIFx0Lm5kb19zdG9wXHRcdD0gaTQwZV9jbG9zZSxcbkBAIC0xMzc4NCw2ICYjNDM7MTM4MzUsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlnX25ldGRldihzdHJ1Y3QgaTQwZV92c2kgKnZzaSlcbiBcdGk0MGVfdnNpX2NvbmZpZ19uZXRkZXZfdGModnNpLCB2c2ktXHUwMDNldGNfY29uZmlnLmVuYWJsZWRfdGMpO1xuIFxuIFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZpNDBlX25ldGRldl9vcHM7XG4mIzQzO1x0bmV0ZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZpNDBlX3hkcF9tZXRhZGF0YV9vcHM7XG4gXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXHRpNDBlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXG5pbmRleCBlZjVlNjU3ODE2ZjAwLi43ZjY4YWRiNTEwOWIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuQEAgLTI0MzgsMTAgJiM0MzsyNDM4LDExIEBAIHN0YXRpYyBpbnQgaTQwZV9jbGVhbl9yeF9pcnEoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgaW50IGJ1ZGdldCxcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGludCAqcnhfY2xlYW5lZClcbiB7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfcnhfYnl0ZXMgPSAwLCB0b3RhbF9yeF9wYWNrZXRzID0gMDtcbiYjNDM7XHRzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqeGRwX2N0eCA9IFx1MDAyNnJ4X3JpbmctXHUwMDNleGRwX2N0eDtcbiBcdHUxNiBjbGVhbmVkX2NvdW50ID0gSTQwRV9ERVNDX1VOVVNFRChyeF9yaW5nKTtcbiBcdHUxNiBjbGVhbl90aHJlc2hvbGQgPSByeF9yaW5nLVx1MDAzZWNvdW50IC8gMjtcbiBcdHVuc2lnbmVkIGludCBvZmZzZXQgPSByeF9yaW5nLVx1MDAzZXJ4X29mZnNldDtcbi1cdHN0cnVjdCB4ZHBfYnVmZiAqeGRwID0gXHUwMDI2cnhfcmluZy1cdTAwM2V4ZHA7XG4mIzQzO1x0c3RydWN0IHhkcF9idWZmICp4ZHAgPSBcdTAwMjZ4ZHBfY3R4LVx1MDAzZXhkcDtcbiBcdHVuc2lnbmVkIGludCB4ZHBfeG1pdCA9IDA7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFx0Ym9vbCBmYWlsdXJlID0gZmFsc2U7XG5AQCAtMjUzMCw2ICYjNDM7MjUzMSw4IEBAIHN0YXRpYyBpbnQgaTQwZV9jbGVhbl9yeF9pcnEoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgaW50IGJ1ZGdldCxcbiBcdFx0aWYgKG5lb3ApXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHR4ZHBfY3R4LVx1MDAzZWRlc2MgPSByeF9kZXNjO1xuJiM0MztcbiBcdFx0eGRwX3JlcyA9IGk0MGVfcnVuX3hkcChyeF9yaW5nLCB4ZHAsIHhkcF9wcm9nKTtcbiBcbiBcdFx0aWYgKHhkcF9yZXMpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaFxuaW5kZXggMWU1ZmQ2M2Q0N2Y0Ny4uYmI3NDFmZjNlNWYyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcbkBAIC0yODMsNiAmIzQzOzI4MywxMSBAQCBzdHJ1Y3QgaTQwZV9yeF9idWZmZXIge1xuIFx0X191MzIgcGFnZV9jb3VudDtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgaTQwZV94ZHBfYnVmZiB7XG4mIzQzO1x0c3RydWN0IHhkcF9idWZmIHhkcDtcbiYjNDM7XHRjb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2M7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBpNDBlX3F1ZXVlX3N0YXRzIHtcbiBcdHU2NCBwYWNrZXRzO1xuIFx0dTY0IGJ5dGVzO1xuQEAgLTM0NSw3ICYjNDM7MzUwLDcgQEAgc3RydWN0IGk0MGVfcmluZyB7XG4gXHQgKiBhbmQgdG8gcmVzdW1lIHBhY2tldCBidWlsZGluZyBmb3IgdGhpcyByaW5nIGluIHRoZSBuZXh0IGNhbGwgdG9cbiBcdCAqIGk0MGVfY2xlYW5fcnhfcmluZ19pcnEoKS5cbiBcdCAqL1xuLVx0c3RydWN0IHhkcF9idWZmIHhkcDtcbiYjNDM7XHRzdHJ1Y3QgaTQwZV94ZHBfYnVmZiB4ZHBfY3R4O1xuIFxuIFx0LyogTmV4dCBkZXNjcmlwdG9yIHRvIGJlIHByb2Nlc3NlZDsgbmV4dF90b19jbGVhbiBpcyB1cGRhdGVkIG9ubHkgb25cbiBcdCAqIHByb2Nlc3NpbmcgRU9QIGRlc2NyaXB0b3JcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R5cGUuaFxuaW5kZXggZWQ4YmJkYjU4NmRhOS4uMTZhNjVjNmU1MTUzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmhcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAjaWZuZGVmIF9JNDBFX1RZUEVfSF9cbiAjZGVmaW5lIF9JNDBFX1RZUEVfSF9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9pZl9ldGhlci5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aTQwZV9hZG1pbnEuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2k0MGVfaG1jLmhcJiMzNDtcbkBAIC02OTksNiAmIzQzOzcwMCwxMCBAQCBlbnVtIGk0MGVfcnhfZGVzY19zdGF0dXNfYml0cyB7XG4gXHRJNDBFX1JYX0RFU0NfU1RBVFVTX0xBU1QgLyogdGhpcyBlbnRyeSBtdXN0IGJlIGxhc3QhISEgKi9cbiB9O1xuIFxuJiM0MzsjZGVmaW5lIEk0MEVfUlhfREVTQ19TVEFUVVNfRkxUU1RBVF9NQVNLICAgICAgICAgICAgICAgICAgIFxcXG4mIzQzO1x0R0VOTUFTS19VTEwoSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX1NISUZUICYjNDM7IDEsIFxcXG4mIzQzO1x0XHQgICAgSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX1NISUZUKVxuJiM0MztcbiAjZGVmaW5lIEk0MEVfUlhEX1FXMV9TVEFUVVNfU0hJRlRcdDBcbiAjZGVmaW5lIEk0MEVfUlhEX1FXMV9TVEFUVVNfTUFTS1x0KChCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MQVNUKSAtIDEpIFxcXG4gXHRcdFx0XHRcdCBcdTAwM2NcdTAwM2MgSTQwRV9SWERfUVcxX1NUQVRVU19TSElGVClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbmluZGV4IDlmNDczODhlYWJhNTMuLjUxYTA1Y2U0YzdjZTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xuQEAgLTI0Niw2ICYjNDM7MjQ2LDggQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxuIFx0dTMyIG5iX2J1ZmZzLCBpO1xuIFx0ZG1hX2FkZHJfdCBkbWE7XG4gXG4mIzQzO1x0WFNLX0NIRUNLX1BSSVZfVFlQRShzdHJ1Y3QgaTQwZV94ZHBfYnVmZik7XG4mIzQzO1xuIFx0cnhfZGVzYyA9IEk0MEVfUlhfREVTQyhyeF9yaW5nLCBudHUpO1xuIFx0eGRwID0gaTQwZV9yeF9iaShyeF9yaW5nLCBudHUpO1xuIFxuQEAgLTM5Niw2ICYjNDM7Mzk4LDE0IEBAIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFdBUk5fT05fT05DRSgxKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqeHNrX2J1ZmZfdG9faTQwZV9jdHgoc3RydWN0IHhkcF9idWZmICp4ZHApXG4mIzQzO3tcbiYjNDM7XHQvKiB4ZHBfYnVmZiBwb2ludGVyIHVzZWQgYnkgWkMgY29kZSBwYXRoIGlzIGFsbG9jYXRlZCBhcyB4ZHBfYnVmZl94c2suXG4mIzQzO1x0ICogaTQwZV94ZHBfYnVmZiBwcml2YXRlIGZpZWxkcyBvdmVybGFwIHdpdGggeGRwX2J1ZmZfeHNrLVx1MDAzZWNiLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiAoc3RydWN0IGk0MGVfeGRwX2J1ZmYgKil4ZHA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaTQwZV9jbGVhbl9yeF9pcnFfemMgLSBDb25zdW1lcyBSeCBwYWNrZXRzIGZyb20gdGhlIGhhcmR3YXJlIHJpbmdcbiAgKiBAcnhfcmluZzogUnggcmluZ1xuQEAgLTQ3Miw2ICYjNDM7NDgyLDggQEAgaW50IGk0MGVfY2xlYW5fcnhfaXJxX3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIGludCBidWRnZXQpXG4gXHRcdGlmIChpNDBlX2lzX25vbl9lb3AocnhfcmluZywgcnhfZGVzYykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHR4c2tfYnVmZl90b19pNDBlX2N0eChmaXJzdCktXHUwMDNlZGVzYyA9IHJ4X2Rlc2M7XG4mIzQzO1xuIFx0XHR4ZHBfcmVzID0gaTQwZV9ydW5feGRwX3pjKHJ4X3JpbmcsIGZpcnN0LCB4ZHBfcHJvZyk7XG4gXHRcdGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMocnhfcmluZywgZmlyc3QsIHJ4X2Rlc2MsIFx1MDAyNnJ4X3BhY2tldHMsXG4gXHRcdFx0XHRcdCAgXHUwMDI2cnhfYnl0ZXMsIHhkcF9yZXMsIFx1MDAyNmZhaWx1cmUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmNcbmluZGV4IDhlOWE4YTgxNzhkNDguLmE4M2ViOWYxMDRjODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9oZWFsdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmNcbkBAIC0xMDEsNiAmIzQzOzEwMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2hlYWx0aF9zdGF0dXMgaWNlX2hlYWx0aF9zdGF0dXNfbG9va3VwW10gPSB7XG4gXHRcdFwmIzM0O1N1cHBsaWVkIE1JQiBmaWxlIGlzIGludmFsaWQuIERDQiByZXZlcnRlZCB0byBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXCYjMzQ7LFxuIFx0XHRcJiMzNDtEaXNhYmxlIEZXLUxMRFAgYW5kIGNoZWNrIERDQnggc3lzdGVtIGNvbmZpZ3VyYXRpb24uXCYjMzQ7LFxuIFx0XHR7aWNlX3BvcnRfbnVtYmVyX2xhYmVsLCBcJiMzNDtNSUIgSURcJiMzNDt9fSxcbiYjNDM7XHR7SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLLCBcJiMzNDtMb2NhbCBEUExMIGxvY2sgc3RhdHVzXCYjMzQ7LFxuJiM0MztcdFx0TlVMTCx9LFxuIH07XG4gXG4gc3RhdGljIGludCBpY2VfaGVhbHRoX3N0YXR1c19sb29rdXBfY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuQEAgLTI0Miw2ICYjNDM7MjQ0LDEwIEBAIHZvaWQgaWNlX3Byb2Nlc3NfaGVhbHRoX3N0YXR1c19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9ycV9ldmVudF9pbmZvXG4gXHRcdFx0XHRwZi1cdTAwM2VoZWFsdGhfcmVwb3J0ZXJzLmZ3X3N0YXR1cyA9ICpoZWFsdGhfaW5mbztcbiBcdFx0XHRcdGRldmxpbmtfaGVhbHRoX3JlcG9ydChwZi1cdTAwM2VoZWFsdGhfcmVwb3J0ZXJzLmZ3LFxuIFx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O0ZXIHN5bmRyb21lIHJlcG9ydGVkXCYjMzQ7LCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRpZiAoc3RhdHVzX2NvZGUgPT0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgIHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZClcbiYjNDM7XHRcdFx0XHRcdGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChwZiwgaGVhbHRoX2luZm8sIHRydWUpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfUEY6XG4gXHRcdFx0Y2FzZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfUE9SVDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oXG5pbmRleCA0Mjg3OGFiYWM5ZWIxLi44NDhhYzU4MzQyOTc5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZG1pbnFfY21kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oXG5AQCAtMTUwMCw2ICYjNDM7MTUwMCw3IEBAIHN0cnVjdCBpY2VfYXFjX2dldF9saW5rX3RvcG8ge1xuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfUENBOTU3NVx0XHQweDIxXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDMwNjMyXzgwMDMyXHQweDI0XG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9TSTUzODNfNTM4NFx0MHgyNVxuJiM0MzsjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDBcdFx0MHgyN1xuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfRTgyMl9QSFlcdFx0MHgzMFxuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfQzgyN1x0XHQweDMxXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9HRU5fQ0xLX01VWFx0MHg0N1xuQEAgLTI0ODMsMTEgJiM0MzsyNDg0LDE0IEBAIGVudW0gaWNlX2FxY19oZWFsdGhfc3RhdHVzIHtcbiBcdElDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfQk1DX1JFU0VUXHRcdFx0PSAweDUwQixcbiBcdElDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfTEFTVF9NTkdfRkFJTFx0XHRcdD0gMHg1MEMsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX1JFU09VUkNFX0FMTE9DX0ZBSUxcdFx0PSAweDUwRCxcbiYjNDM7XHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0tcdFx0XHQ9IDB4NjAxLFxuIFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9GV19MT09QXHRcdFx0PSAweDEwMDAsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0ZXX1BGUl9GQUlMXHRcdFx0PSAweDEwMDEsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfRkFJTF9BUVx0XHRcdD0gMHgxMDAyLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNXHRcdFx0XHQ2NFxuJiM0MztcbiAvKiBHZXQgSGVhbHRoIFN0YXR1cyAoaW5kaXJlY3QgMHhGRjIyKSAqL1xuIHN0cnVjdCBpY2VfYXFjX2dldF9oZWFsdGhfc3RhdHVzIHtcbiBcdF9fbGUxNiBoZWFsdGhfc3RhdHVzX2NvdW50O1xuQEAgLTI1MTQsNiAmIzQzOzI1MTgsMTMgQEAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtIHtcbiBcdF9fbGUzMiBpbnRlcm5hbF9kYXRhMjtcbiB9O1xuIFxuJiM0MzsvKiBHZXQgSGVhbHRoIFN0YXR1cyByZXNwb25zZSBidWZmZXIgZW50cnksICgweEZGMjEpXG4mIzQzOyAqIHJlcGVhdGVkIHBlciByZXBvcnRlZCBoZWFsdGggc3RhdHVzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSB7XG4mIzQzO1x0X19sZTE2IGhlYWx0aF9zdGF0dXNfY29kZTtcbiYjNDM7fTtcbiYjNDM7XG4gLyogQWRtaW4gUXVldWUgY29tbWFuZCBvcGNvZGVzICovXG4gZW51bSBpY2VfYWRtaW5xX29wYyB7XG4gXHQvKiBBUSBjb21tYW5kcyAqL1xuQEAgLTI2NzcsNiAmIzQzOzI2ODgsNyBAQCBlbnVtIGljZV9hZG1pbnFfb3BjIHtcbiBcbiBcdC8qIFN5c3RlbSBEaWFnbm9zdGljIGNvbW1hbmRzICovXG4gXHRpY2VfYXFjX29wY19zZXRfaGVhbHRoX3N0YXR1c19jZmdcdFx0PSAweEZGMjAsXG4mIzQzO1x0aWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzXHQ9IDB4RkYyMSxcbiBcdGljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzXHRcdFx0PSAweEZGMjIsXG4gXG4gXHQvKiBGVyBMb2dnaW5nIENvbW1hbmRzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNcbmluZGV4IGVmMWNlMTA2ZjgxYjUuLjJjNzJlZDE4Njk1YzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG5AQCAtMzA0OCw2ICYjNDM7MzA0OCwyOSBAQCBib29sIGljZV9pc19jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0IC0gY2hlY2sgZm9yIHVubWFuYWdlZCBDR1UgcHJlc2VuY2VcbiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2sgaWYgdGhlIHVubWFuYWdlZCBDbG9jayBHZW5lcmF0aW9uIFVuaXQgKENHVSkgZGV2aWNlIGlzIHByZXNlbnQgaW4gdGhlIG5ldGxpc3QuXG4mIzQzOyAqIFNhdmUgdGhlIENHVSBwYXJ0IG51bWJlciBpbiB0aGUgaHcgc3RydWN0dXJlIGZvciBsYXRlciB1c2UuXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiB0cnVlIC0gdW5tYW5hZ2VkIGNndSBpcyBwcmVzZW50XG4mIzQzOyAqICogZmFsc2UgLSB1bm1hbmFnZWQgY2d1IGlzIG5vdCBwcmVzZW50XG4mIzQzOyAqL1xuJiM0Mztib29sIGljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWljZV9maW5kX25ldGxpc3Rfbm9kZShodywgSUNFX0FRQ19MSU5LX1RPUE9fTk9ERV9UWVBFX0NMS19DVFJMLFxuJiM0MztcdFx0XHRcdCAgIElDRV9BUUNfTElOS19UT1BPX05PREVfQ1RYX0dMT0JBTCxcbiYjNDM7XHRcdFx0XHQgICBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwLFxuJiM0MztcdFx0XHRcdCAgIE5VTEwpKSB7XG4mIzQzO1x0XHRody1cdTAwM2VjZ3VfcGFydF9udW1iZXIgPSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2lzX2dwc19pbl9uZXRsaXN0XG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcbkBAIC02MzEyLDYgJiM0Mzs2MzM1LDExOSBAQCBib29sIGljZV9pc19md19oZWFsdGhfcmVwb3J0X3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdFx0XHRcdCAgICAgSUNFX0ZXX0FQSV9IRUFMVEhfUkVQT1JUX1BBVENIKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXNfc3VwcG9ydGVkIC0gZ2V0IHN1cHBvcnRlZCBoZWFsdGggc3RhdHVzIGNvZGVzXG4mIzQzOyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4mIzQzOyAqIEBidWZmOiBwb2ludGVyIHRvIGJ1ZmZlciB3aGVyZSBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIHdpbGwgYmUgc3RvcmVkXG4mIzQzOyAqIEBudW06IG51bWJlciBvZiBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIGJ1ZmZlciBjYW4gaG9sZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAtIHN1Y2Nlc3MsXG4mIzQzOyAqICogbmVnYXRpdmUgLSBBUSBlcnJvciBjb2RlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0MztpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXNfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtICpidWZmLFxuJiM0MztcdFx0XHRcdCAgIGludCBudW0pXG4mIzQzO3tcbiYjNDM7XHR1MTYgY29kZSA9IGljZV9hcWNfb3BjX2dldF9zdXBwb3J0ZWRfaGVhbHRoX3N0YXR1c19jb2RlcztcbiYjNDM7XHRzdHJ1Y3QgbGliaWVfYXFfZGVzYyBkZXNjO1xuJiM0MztcbiYjNDM7XHRpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYyhcdTAwMjZkZXNjLCBjb2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGljZV9hcV9zZW5kX2NtZChodywgXHUwMDI2ZGVzYywgYnVmZiwgbnVtICogc2l6ZW9mKCpidWZmKSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMgLSBnZXQgY3VycmVudCBoZWFsdGggc3RhdHVzIGFycmF5IGZyb20gdGhlIGZpcm13YXJlXG4mIzQzOyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4mIzQzOyAqIEBidWZmOiBwb2ludGVyIHRvIGJ1ZmZlciB3aGVyZSBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIHdpbGwgYmUgc3RvcmVkXG4mIzQzOyAqIEBudW06IG51bWJlciBvZiBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIGJ1ZmZlciBjYW4gaG9sZFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAtIHN1Y2Nlc3MsXG4mIzQzOyAqICogbmVnYXRpdmUgLSBBUSBlcnJvciBjb2RlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1cyhzdHJ1Y3QgaWNlX2h3ICpodyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsIGludCBudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGliaWVfYXFfZGVzYyBkZXNjO1xuJiM0MztcbiYjNDM7XHRpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYyhcdTAwMjZkZXNjLFxuJiM0MztcdFx0XHRcdCAgICAgIGljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGljZV9hcV9zZW5kX2NtZChodywgXHUwMDI2ZGVzYywgYnVmZiwgbnVtICogc2l6ZW9mKCpidWZmKSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZCAtIGNoZWNrIGlmIGhlYWx0aCBzdGF0dXMgY29kZSBpcyBzdXBwb3J0ZWRcbiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNvZGU6IGhlYWx0aCBzdGF0dXMgY29kZSB0byBjaGVja1xuJiM0MzsgKiBAc3VwcG9ydGVkOiBwb2ludGVyIHRvIGJvb2xlYW4gcmVzdWx0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZVxuJiM0MzsgKi9cbiYjNDM7aW50IGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgY29kZSxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgKnN1cHBvcnRlZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGludCBCVUZGX1NJWkUgPSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfQ09ERV9OVU07XG4mIzQzO1x0c3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19zdXBwX2VsZW0gKmJ1ZmY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0KnN1cHBvcnRlZCA9IGZhbHNlO1xuJiM0MztcdGJ1ZmYgPSBremFsbG9jX29ianMoKmJ1ZmYsIEJVRkZfU0laRSk7XG4mIzQzO1x0aWYgKCFidWZmKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0cmV0ID0gaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzX3N1cHBvcnRlZChodywgYnVmZiwgQlVGRl9TSVpFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBmcmVlX2J1ZmY7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEJVRkZfU0laRSBcdTAwMjZcdTAwMjYgYnVmZltpXS5oZWFsdGhfc3RhdHVzX2NvZGU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGxlMTZfdG9fY3B1KGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlKSA9PSBjb2RlKSB7XG4mIzQzO1x0XHRcdCpzdXBwb3J0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO2ZyZWVfYnVmZjpcbiYjNDM7XHRrZnJlZShidWZmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZSAtIGdldCBsYXN0IGhlYWx0aCBzdGF0dXMgZm9yIGdpdmVuIGNvZGVcbiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQG91dDogcG9pbnRlciB0byB0aGUgaGVhbHRoIHN0YXR1cyBzdHJ1Y3QgdG8gYmUgZmlsbGVkXG4mIzQzOyAqIEBjb2RlOiBoZWFsdGggc3RhdHVzIGNvZGUgdG8gY2hlY2tcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZShzdHJ1Y3QgaWNlX2h3ICpodyxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpvdXQsXG4mIzQzO1x0XHRcdFx0ICAgIHUxNiBjb2RlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgaW50IEJVRkZfU0laRSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19DT0RFX05VTTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmY7XG4mIzQzO1x0aW50IHJldCwgbGFzdF9zdGF0dXMgPSAtMTtcbiYjNDM7XG4mIzQzO1x0YnVmZiA9IGt6YWxsb2Nfb2JqcygqYnVmZiwgQlVGRl9TSVpFKTtcbiYjNDM7XHRpZiAoIWJ1ZmYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZXQgPSBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoaHcsIGJ1ZmYsIEJVRkZfU0laRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZnJlZV9idWZmO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBCVUZGX1NJWkUgXHUwMDI2XHUwMDI2IGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChsZTE2X3RvX2NwdShidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZSkgPT0gY29kZSlcbiYjNDM7XHRcdFx0bGFzdF9zdGF0dXMgPSBpO1xuJiM0MztcbiYjNDM7XHRpZiAobGFzdF9zdGF0dXMgXHUwMDNlPSAwKVxuJiM0MztcdFx0bWVtY3B5KG91dCwgXHUwMDI2YnVmZltsYXN0X3N0YXR1c10sIHNpemVvZigqb3V0KSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bWVtc2V0KG91dCwgMCwgc2l6ZW9mKCpvdXQpKTtcbiYjNDM7XG4mIzQzO2ZyZWVfYnVmZjpcbiYjNDM7XHRrZnJlZShidWZmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9hcV9zZXRfaGVhbHRoX3N0YXR1c19jZmcgLSBDb25maWd1cmUgRlcgaGVhbHRoIGV2ZW50c1xuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcbmluZGV4IDlmNTM0NDIxMjE5NTUuLjUxMDM2MTg4Y2QzOTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oXG5AQCAtMTYyLDYgJiM0MzsxNjIsNyBAQCBpY2VfYXFfZ2V0X3BoeV9jYXBzKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBxdWFsX21vZHMsIHU4IHJlcG9ydF9tb2RlLFxuIGJvb2wgaWNlX2lzX3BoeV9yY2xrX2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xuIGJvb2wgaWNlX2lzX2Nsb2NrX211eF9pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTtcbiBib29sIGljZV9pc19jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4mIzQzO2Jvb2wgaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4gYm9vbCBpY2VfaXNfZ3BzX2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xuIGludFxuIGljZV9hcV9nZXRfbmV0bGlzdF9ub2RlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua190b3BvICpjbWQsXG5AQCAtMTg4LDYgJiM0MzsxODksMTMgQEAgaWNlX2dldF9saW5rX2RlZmF1bHRfb3ZlcnJpZGUoc3RydWN0IGljZV9saW5rX2RlZmF1bHRfb3ZlcnJpZGVfdGx2ICpsZG8sXG4gXHRcdFx0ICAgICAgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpKTtcbiBib29sIGljZV9pc19waHlfY2Fwc19hbl9lbmFibGVkKHN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICpjYXBzKTtcbiBib29sIGljZV9pc19md19oZWFsdGhfcmVwb3J0X3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4mIzQzO2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKTtcbiYjNDM7aW50IGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgY29kZSxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgKnN1cHBvcnRlZCk7XG4mIzQzO2ludCBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKHN0cnVjdCBpY2VfaHcgKmh3LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKm91dCxcbiYjNDM7XHRcdFx0XHQgICAgdTE2IGNvZGUpO1xuIGludCBpY2VfYXFfc2V0X2hlYWx0aF9zdGF0dXNfY2ZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBldmVudF9zb3VyY2UpO1xuIGludCBpY2VfYXFfZ2V0X3BoeV9lcXVhbGl6YXRpb24oc3RydWN0IGljZV9odyAqaHcsIHUxNiBkYXRhX2luLCB1MTYgb3BfY29kZSxcbiBcdFx0XHRcdHU4IHNlcmRlc19udW0sIGludCAqb3V0cHV0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuY1xuaW5kZXggYTEwYzFjOGQ4Njk3Ny4uYmI1Y2MwYTJiYTY5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmNcbkBAIC04NzIsNyAmIzQzOzg3Miw3IEBAIHN0YXRpYyBpbnQgaWNlX2RjYm5sX2RlbGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRpZiAocGYtXHUwMDNlZGNieF9jYXAgXHUwMDI2IERDQl9DQVBfRENCWF9MTERfTUFOQUdFRCkge1xuLVx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7Y2FuJiMzOTt0IGRlbGV0ZSBEU0NQIG5ldGxpbmsgYXBwIHdoZW4gRlcgRENCIGFnZW50IGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7Y2FuJiMzOTt0IGRlbGV0ZSBEU0NQIG5ldGxpbmsgYXBwIHdoZW4gRlcgRENCIGFnZW50IGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbmluZGV4IDg1YTc0Y2Q2ZWExZjMuLjFjYTEzN2Y2N2RkNDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbkBAIC0xOSw2ICYjNDM7MTksOCBAQFxuICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfU0ZQXHRcdDRcbiAjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9JTlBVVF9CQVNFX1FTRlBcdFx0NlxuICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX09VVFBVVF9CQVNFXHRcdDBcbiYjNDM7I2RlZmluZSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRFx0XHQxXG4mIzQzOyNkZWZpbmUgSUNFX0RQTExfSEVBTFRIX1NUQVRVU19VTkxPQ0tFRFx0XHQwXG4gXG4gI2RlZmluZSBFODI1X1JDTEtfUEFSRU5UXzBfUElOX0lEWFx0XHQwXG4gI2RlZmluZSBFODI1X1JDTEtfUEFSRU5UXzFfUElOX0lEWFx0XHQxXG5AQCAtODksNiAmIzQzOzkxLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkW10gPSB7XG4mIzQzO1x0RFBMTF9QSU5fRlJFUVVFTkNZXzFQUFMsXG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIGljZV9kcGxsX2lzX3N3X3BpbiAtIGNoZWNrIGlmIGdpdmVuIHBpbiBzaGFsbCBiZSBjb250cm9sbGVkIGJ5IFNXXG4gICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxuQEAgLTEwOTgsOSAmIzQzOzExMDQsMTEgQEAgaWNlX2RwbGxfcGluX3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuLVx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRpZiAoIXBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4gXHRpZiAocGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQgfHxcbiBcdCAgICBwaW5fdHlwZSA9PSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpXG4gXHRcdCpzdGF0ZSA9IHAtXHUwMDNlc3RhdGVbZC1cdTAwM2VkcGxsX2lkeF07XG5AQCAtMjI0Myw5ICYjNDM7MjI1MSwxNCBAQCBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbi1cdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlO1xuLVx0ZXN5bmMtXHUwMDNlcmFuZ2VfbnVtID0gQVJSQVlfU0laRShpY2VfZXN5bmNfcmFuZ2UpO1xuLVx0aWYgKHAtXHUwMDNlZmxhZ3NbMF0gXHUwMDI2IElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9FU1lOQ19FTikge1xuJiM0MztcdGlmIChwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbiYjNDM7XHRcdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZDtcbiYjNDM7XHRcdGVzeW5jLVx1MDAzZXJhbmdlX251bSA9IEFSUkFZX1NJWkUoaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlO1xuJiM0MztcdFx0ZXN5bmMtXHUwMDNlcmFuZ2VfbnVtID0gQVJSQVlfU0laRShpY2VfZXN5bmNfcmFuZ2UpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocC1cdTAwM2VmbGFnc1swXSBcdTAwMjYgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRCkge1xuIFx0XHRlc3luYy1cdTAwM2VmcmVxID0gRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFo7XG4gXHRcdGVzeW5jLVx1MDAzZXB1bHNlID0gSUNFX0RQTExfUElOX0VTWU5DX1BVTFNFX0hJR0hfUEVSQ0VOVDtcbiBcdH0gZWxzZSB7XG5AQCAtMjg3Niw2ICYjNDM7Mjg4OSwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfb3BzID0ge1xuIFx0LmVzeW5jX2dldCA9IGljZV9kcGxsX291dHB1dF9lc3luY19nZXQsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgaWNlX2RwbGxfaW5wdXRfdW5tYW5hZ2VkX29wcyA9IHtcbiYjNDM7XHQuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX2lucHV0X2ZyZXF1ZW5jeV9nZXQsXG4mIzQzO1x0LmRpcmVjdGlvbl9nZXQgPSBpY2VfZHBsbF9pbnB1dF9kaXJlY3Rpb24sXG4mIzQzO1x0LnN0YXRlX29uX2RwbGxfZ2V0ID0gaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0LFxuJiM0MztcdC5lc3luY19nZXQgPSBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyA9IHtcbiYjNDM7XHQuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX291dHB1dF9mcmVxdWVuY3lfZ2V0LFxuJiM0MztcdC5kaXJlY3Rpb25fZ2V0ID0gaWNlX2RwbGxfb3V0cHV0X2RpcmVjdGlvbixcbiYjNDM7XHQuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfc3RhdGVfZ2V0LFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyBpY2VfZHBsbF9vcHMgPSB7XG4gXHQubG9ja19zdGF0dXNfZ2V0ID0gaWNlX2RwbGxfbG9ja19zdGF0dXNfZ2V0LFxuIFx0Lm1vZGVfZ2V0ID0gaWNlX2RwbGxfbW9kZV9nZXQsXG5AQCAtMzQzOSw4ICYjNDM7MzQ2NSwxMCBAQCBpY2VfZHBsbF9kZWluaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZHBsbF9kZXZpY2UgKnNlY29uZClcbiB7XG4gXHRpZiAoY2d1KSB7XG4tXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XG4tXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpO1xuJiM0MztcdFx0aWYgKGZpcnN0KVxuJiM0MztcdFx0XHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZmlyc3QsIHBpbnMsIG9wcywgY291bnQpO1xuJiM0MztcdFx0aWYgKHNlY29uZClcbiYjNDM7XHRcdFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKHNlY29uZCwgcGlucywgb3BzLCBjb3VudCk7XG4gXHR9XG4gXHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMocGlucywgY291bnQpO1xuIH1cbkBAIC0zNDcyLDEyICYjNDM7MzUwMCwxNSBAQCBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSxcbiBcdGludCByZXQ7XG4gXG4gXHRyZXQgPSBpY2VfZHBsbF9nZXRfcGlucyhwZiwgcGlucywgc3RhcnRfaWR4LCBjb3VudCwgcGYtXHUwMDNlZHBsbHMuY2xvY2tfaWQpO1xuLVx0aWYgKHJldClcbiYjNDM7XHRpZiAoIWNndSB8fCByZXQpXG4gXHRcdHJldHVybiByZXQ7XG4tXHRpZiAoY2d1KSB7XG4mIzQzO1xuJiM0MztcdGlmIChmaXJzdCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIHJlbGVhc2VfcGlucztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNlY29uZCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKHNlY29uZCwgcGlucywgb3BzLCBjb3VudCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byB1bnJlZ2lzdGVyX2ZpcnN0O1xuQEAgLTM0ODYsNyAmIzQzOzM1MTcsOCBAQCBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSxcbiBcdHJldHVybiAwO1xuIFxuIHVucmVnaXN0ZXJfZmlyc3Q6XG4tXHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZmlyc3QsIHBpbnMsIG9wcywgY291bnQpO1xuJiM0MztcdGlmIChmaXJzdClcbiYjNDM7XHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XG4gcmVsZWFzZV9waW5zOlxuIFx0aWNlX2RwbGxfcmVsZWFzZV9waW5zKHBpbnMsIGNvdW50KTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMzgyNCw2ICYjNDM7Mzg1NiwxOCBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmRlID0gXHUwMDI2ZC1cdTAwM2VlZWM7XG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmRwID0gXHUwMDI2ZC1cdTAwM2VwcHM7XG4gXG4mIzQzO1x0aWYgKGQtXHUwMDNldW5tYW5hZ2VkKSB7XG4mIzQzO1x0XHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtXHUwMDNlZHBsbCwgaW5wdXRzLFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNmljZV9kcGxsX2lucHV0X3VubWFuYWdlZF9vcHMsXG4mIzQzO1x0XHRcdFx0XHQgbnVtX2lucHV0cyk7XG4mIzQzO1x0XHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtXHUwMDNlZHBsbCwgb3V0cHV0cyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyxcbiYjNDM7XHRcdFx0XHRcdCBudW1fb3V0cHV0cyk7XG4mIzQzO1x0XHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMoaW5wdXRzLCBudW1faW5wdXRzKTtcbiYjNDM7XHRcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhvdXRwdXRzLCBudW1fb3V0cHV0cyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGljZV9kcGxsX2RlaW5pdF9yY2xrX3BpbihwZik7XG4gXHRpZiAocGYtXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcbiBcdFx0aWNlX2RwbGxfZGVpbml0X3R4Y2xrX3BpbnMocGYpO1xuQEAgLTQwODIsMjMgJiM0Mzs0MTI2LDI5IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbiBcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKmlucHV0X29wcztcbiBcdGludCByZXQsIGNvdW50O1xuIFxuLVx0aW5wdXRfb3BzID0gXHUwMDI2aWNlX2RwbGxfaW5wdXRfb3BzO1xuLVx0b3V0cHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX291dHB1dF9vcHM7XG4mIzQzO1x0aWYgKCFwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbiYjNDM7XHRcdGlucHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX2lucHV0X29wcztcbiYjNDM7XHRcdG91dHB1dF9vcHMgPSBcdTAwMjZpY2VfZHBsbF9vdXRwdXRfb3BzO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpbnB1dF9vcHMgPSBcdTAwMjZpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzO1xuJiM0MztcdFx0b3V0cHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX291dHB1dF91bm1hbmFnZWRfb3BzO1xuJiM0MztcdH1cbiBcbiBcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXHUwMDNlZHBsbHMuaW5wdXRzLCAwLFxuIFx0XHRcdFx0XHRwZi1cdTAwM2VkcGxscy5udW1faW5wdXRzLCBpbnB1dF9vcHMsXG4tXHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsLFxuLVx0XHRcdFx0XHRwZi1cdTAwM2VkcGxscy5wcHMuZHBsbCk7XG4mIzQzO1x0XHRcdFx0XHRwZi1cdTAwM2VkcGxscy5lZWMuZHBsbCwgcGYtXHUwMDNlZHBsbHMucHBzLmRwbGwpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdGNvdW50ID0gcGYtXHUwMDNlZHBsbHMubnVtX2lucHV0cztcbi1cdGlmIChjZ3UpIHtcbiYjNDM7XHRpZiAoY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLm91dHB1dHMsXG4gXHRcdFx0XHRcdFx0Y291bnQsIHBmLVx1MDAzZWRwbGxzLm51bV9vdXRwdXRzLFxuIFx0XHRcdFx0XHRcdG91dHB1dF9vcHMsIHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsLFxuIFx0XHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIGRlaW5pdF9pbnB1dHM7XG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdFx0Y291bnQgJiM0Mzs9IHBmLVx1MDAzZWRwbGxzLm51bV9vdXRwdXRzO1xuIFx0XHRpZiAoIXBmLVx1MDAzZWRwbGxzLmdlbmVyaWMpIHtcbiBcdFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLnNtYSxcbkBAIC00MjA2LDEyICYjNDM7NDI1NiwxMyBAQCBpY2VfZHBsbF9pbml0X2RwbGwoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbCAqZCwgYm9vbCBjZ3UsXG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRkLVx1MDAzZXBmID0gcGY7XG4tXHRpZiAoY2d1IHx8IHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XG4mIzQzO1x0aWYgKGNndSB8fCBwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQgfHxcbiYjNDM7XHQgICAgcGYtXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzID0gXHUwMDI2aWNlX2RwbGxfb3BzO1xuIFxuIFx0XHRpZiAodHlwZSA9PSBEUExMX1RZUEVfUFBTIFx1MDAyNlx1MDAyNiBpY2VfZHBsbF9pc19wcHNfcGhhc2VfbW9uaXRvcihwZikpXG4gXHRcdFx0b3BzID0gIFx1MDAyNmljZV9kcGxsX3BvbV9vcHM7XG4tXHRcdGlmIChjZ3UpXG4mIzQzO1x0XHRpZiAoY2d1IFx1MDAyNlx1MDAyNiAhcGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKVxuIFx0XHRcdGljZV9kcGxsX3VwZGF0ZV9zdGF0ZShwZiwgZCwgdHJ1ZSk7XG4gXHRcdHJldCA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGQtXHUwMDNlZHBsbCwgdHlwZSwgb3BzLCBkKTtcbiBcdFx0aWYgKHJldCkge1xuQEAgLTQyMzksNiAmIzQzOzQyOTAsMzMgQEAgc3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X3dvcmtlcihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGt0aHJlYWRfZGVzdHJveV93b3JrZXIoZC1cdTAwM2Vrd29ya2VyKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9waW5fZnJlcV9pbmZvIC0gZmluZCBwaW4gZnJlcXVlbmN5IGZyb20gc3VwcG9ydGVkIG9uZXNcbiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHBpbl9pZHg6IHBpbiBpbmRleFxuJiM0MzsgKiBAaW5wdXQ6IGlmIGlucHV0IHBpblxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRocm91Z2ggdGhlIGFycmF5IG9mIHN1cHBvcnRlZCBmcmVxdWVuY2llcyBmb3IgYVxuJiM0MzsgKiBEUExMIHBpbiBhbmQgcmV0dXJucyBzaW5nbGUgZnJlcXVlbmN5IHBpbiBpcyBjYXBhYmxlLCBpZiBwaW4gc3VwcG9ydCBvbmx5XG4mIzQzOyAqIG9uZSBmcmVxdWVuY3kuIFNoYWxsIGJlIHVzZWQgb25seSBmb3IgZHBsbCB3aXRoIGRyaXZlciBoYXJkY29kZWQgZnJlcXVlbmN5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAtIGZhaWx1cmUsIHBpbiB1c2VzIG11bHRpcGxlIGZyZXF1ZW5jaWVzLFxuJiM0MzsgKiAqIGZyZXF1ZW5jeSAtIHN1Y2Nlc3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdTY0IGljZV9kcGxsX3Bpbl9mcmVxX2luZm8oc3RydWN0IGljZV9odyAqaHcsIHU4IHBpbl9pZHgsIGJvb2wgaW5wdXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5ICpmcmVxcztcbiYjNDM7XHR1OCBmcmVxX251bTtcbiYjNDM7XG4mIzQzO1x0LyogR2V0IHN1cHBvcnRlZCBmcmVxdWVuY2llcyBmb3IgdGhpcyBwaW4gKi9cbiYjNDM7XHRmcmVxcyA9IGljZV9jZ3VfZ2V0X3Bpbl9mcmVxX3N1cHAoaHcsIHBpbl9pZHgsIGlucHV0LCBcdTAwMjZmcmVxX251bSk7XG4mIzQzO1x0aWYgKCFmcmVxcyB8fCBmcmVxX251bSAhPSAxIHx8IGZyZXFzWzBdLm1pbiAhPSBmcmVxc1swXS5tYXgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZyZXFzWzBdLm1pbjtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyXG4gICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuQEAgLTQzOTgsNiAmIzQzOzQ0NzYsMTkgQEAgaWNlX2RwbGxfaW5pdF9pbmZvX2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRwaW5zW2ldLnByb3AuYm9hcmRfbGFiZWwgPSBpY2VfY2d1X2dldF9waW5fbmFtZShodywgaSwgaW5wdXQpO1xuIFx0XHRwaW5zW2ldLnByb3AudHlwZSA9IGljZV9jZ3VfZ2V0X3Bpbl90eXBlKGh3LCBpLCBpbnB1dCk7XG4gXHRcdGlmIChpbnB1dCkge1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XG4mIzQzO1x0XHRcdFx0cGluc1tpXS5mcmVxID0gaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhodywgaSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgIGlucHV0KTtcbiYjNDM7XHRcdFx0XHRwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRcdHBpbnNbaV0uc3RhdHVzID1cbiYjNDM7XHRcdFx0XHRcdElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfU1RBVFVTX0VTWU5DX0NBUDtcbiYjNDM7XHRcdFx0XHRwaW5zW2ldLmZsYWdzWzBdID0gSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRDtcbiYjNDM7XHRcdFx0XHQvKiBza2lwIHByaW9yaXR5LCBjYXBhYmlsaXRpZXMsIHBoYXNlIHJhbmdlLFxuJiM0MztcdFx0XHRcdCAqIHBpbiBzdGF0ZSBBUSBxdWVyeSBhbmQgZnJlcV9zdXBwb3J0ZWQgLVxuJiM0MztcdFx0XHRcdCAqIG5vdCBhdmFpbGFibGUgZm9yIHVubWFuYWdlZCBEUExMXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRyZXQgPSBpY2VfYXFfZ2V0X2NndV9yZWZfcHJpbyhodywgZGUtXHUwMDNlZHBsbF9pZHgsIGksXG4gXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2ZGUtXHUwMDNlaW5wdXRfcHJpb1tpXSk7XG4gXHRcdFx0aWYgKHJldClcbkBAIC00NDExLDYgJiM0Mzs0NTAyLDE2IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcbiBcdFx0XHRpZiAoaWNlX2RwbGxfaXNfc3dfcGluKHBmLCBpLCB0cnVlKSlcbiBcdFx0XHRcdHBpbnNbaV0uaGlkZGVuID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuJiM0MztcdFx0XHRcdHBpbnNbaV0uZnJlcSA9IGljZV9kcGxsX3Bpbl9mcmVxX2luZm8oaHcsIGksXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgICBpbnB1dCk7XG4mIzQzO1x0XHRcdFx0cGluc1tpXS5zdGF0ZVswXSA9IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcbiYjNDM7XHRcdFx0XHQvKiBza2lwIG91dHB1dCBzdGF0ZSBjYXBzLCBwaGFzZSByYW5nZSxcbiYjNDM7XHRcdFx0XHQgKiBwaW4gc3RhdGUgQVEgcXVlcnkgYW5kIGZyZXFfc3VwcG9ydGVkIC1cbiYjNDM7XHRcdFx0XHQgKiBub3QgYXZhaWxhYmxlIGZvciB1bm1hbmFnZWQgRFBMTFxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0cmV0ID0gaWNlX2NndV9nZXRfb3V0cHV0X3Bpbl9zdGF0ZV9jYXBzKGh3LCBpLCBcdTAwMjZjYXBzKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbkBAIC00NDI4LDEwICYjNDM7NDUyOSwxMyBAQCBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsXG4gXHRcdHBpbnNbaV0ucHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xuIFx0XHRwaW5zW2ldLnBmID0gcGY7XG4gXHR9XG4tXHRpZiAoaW5wdXQpXG4mIzQzO1x0aWYgKGlucHV0IFx1MDAyNlx1MDAyNiAhcGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XG4gXHRcdHJldCA9IGljZV9kcGxsX2luaXRfcmVmX3N5bmNfaW5wdXRzKHBmKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtNDcxMiw2ICYjNDM7NDgxNiw4MiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19lODI1YyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZCAtIGluaXRpYWxpemUgbG9jayBzdGF0ZSBmb3IgdW5tYW5hZ2VkIGRwbGxcbiYjNDM7ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBJbml0aWFsaXplIHRoZSBsb2NrIHN0YXRlIGZvciB1bm1hbmFnZWQgRFBMTCBieSBjaGVja2luZyBoZWFsdGggc3RhdHVzLlxuJiM0MzsgKiBGb3IgdW5tYW5hZ2VkIERQTEwsIHdlIHJlbHkgb24gaGFyZHdhcmUgYXV0b25vbW91cyBvcGVyYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwIC0gc3VjY2Vzc1xuJiM0MzsgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvblxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9sb2NrX3N0YXRlX2luaXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IGNvZGUgPSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0s7XG4mIzQzO1x0c3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtIGJ1ZmY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZShcdTAwMjZwZi1cdTAwM2VodywgXHUwMDI2YnVmZiwgY29kZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHBmLCBcdTAwMjZidWZmLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9pbml0X2luZm9fdW5tYW5hZ2VkIC0gaW5pdCBkcGxsIGluZm9ybWF0aW9uIGZvciB1bm1hbmFnZWQgZHBsbFxuJiM0MzsgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIEFjcXVpcmUgKGZyb20gSFcpIGFuZCBzZXQgYmFzaWMgZHBsbCBpbmZvcm1hdGlvbiAob24gcGYtXHUwMDNlZHBsbHMgc3RydWN0KS5cbiYjNDM7ICogRm9yIHVubWFuYWdlZCBkcGxsIG1vZGUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogKiAwIC0gc3VjY2Vzc1xuJiM0MzsgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvblxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxscyAqZCA9IFx1MDAyNnBmLVx1MDAzZWRwbGxzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGQtXHUwMDNlY2xvY2tfaWQgPSBpY2VfZ2VuZXJhdGVfY2xvY2tfaWQocGYpO1xuJiM0MztcdGQtXHUwMDNlbnVtX2lucHV0cyA9IGljZV9jZ3VfZ2V0X3Bpbl9udW0oXHUwMDI2cGYtXHUwMDNlaHcsIHRydWUpO1xuJiM0MztcdGQtXHUwMDNlbnVtX291dHB1dHMgPSBpY2VfY2d1X2dldF9waW5fbnVtKFx1MDAyNnBmLVx1MDAzZWh3LCBmYWxzZSk7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChwZik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0ZC1cdTAwM2VpbnB1dHMgPSBremFsbG9jX29ianMoKmQtXHUwMDNlaW5wdXRzLCBkLVx1MDAzZW51bV9pbnB1dHMpO1xuJiM0MztcdGlmICghZC1cdTAwM2VpbnB1dHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBkZWluaXRfaW5mbztcbiYjNDM7XG4mIzQzO1x0ZC1cdTAwM2VvdXRwdXRzID0ga3phbGxvY19vYmpzKCpkLVx1MDAzZW91dHB1dHMsIGQtXHUwMDNlbnVtX291dHB1dHMpO1xuJiM0MztcdGlmICghZC1cdTAwM2VvdXRwdXRzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBkZWluaXRfaW5mbztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGRlaW5pdF9pbmZvO1xuJiM0MztcbiYjNDM7XHRkLVx1MDAzZXBwcy5tb2RlID0gRFBMTF9NT0RFX01BTlVBTDtcbiYjNDM7XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDslcyAtIHN1Y2Nlc3MsIGlucHV0czoldSwgb3V0cHV0czoldVxcblwmIzM0OyxcbiYjNDM7XHRcdF9fZnVuY19fLCBkLVx1MDAzZW51bV9pbnB1dHMsIGQtXHUwMDNlbnVtX291dHB1dHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztkZWluaXRfaW5mbzpcbiYjNDM7XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDslcyAtIGZhaWw6IGQtXHUwMDNlaW5wdXRzOiVwLCBkLVx1MDAzZW91dHB1dHM6JXBcXG5cJiMzNDssXG4mIzQzO1x0XHRfX2Z1bmNfXywgZC1cdTAwM2VpbnB1dHMsIGQtXHUwMDNlb3V0cHV0cyk7XG4mIzQzO1x0aWNlX2RwbGxfZGVpbml0X2luZm8ocGYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfaW5pdF9pbmZvIC0gcHJlcGFyZSBwZiYjMzk7cyBkcGxsIGluZm9ybWF0aW9uIHN0cnVjdHVyZVxuICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC00ODE1LDYgJiM0Mzs0OTk1LDQyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkIC0gZGV0ZXJtaW5lIGxvY2sgc3RhdGUgZnJvbSBoZWFsdGggc3RhdHVzXG4mIzQzOyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGJ1ZmY6IGhlYWx0aCBzdGF0dXMgYnVmZmVyXG4mIzQzOyAqIEBub3RpZnk6IGlmIHRydWUsIG5vdGlmeSBkcGxsIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBTZXQgdW5tYW5hZ2VkIGRwbGwgbG9jayBzdGF0ZSBiYXNlZCBvbiBoZWFsdGggc3RhdHVzIGNvZGUgYW5kIGludGVybmFsIGRhdGEuXG4mIzQzOyAqIENvbnRleHQ6IEFjcXVpcmVzIGFuZCByZWxlYXNlcyBwZi1cdTAwM2VkcGxscy5sb2NrIChtdXN0IHJlbGVhc2UgYmVmb3JlIG5vdGlmeVxuJiM0MzsgKiBpZiBjYWxsZWQpLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZixcbiYjNDM7XHRcdFx0XHQgICAgICAgYm9vbCBub3RpZnkpXG4mIzQzO3tcbiYjNDM7XHR1MzIgaW50ZXJuYWxfZGF0YSA9IGxlMzJfdG9fY3B1KGJ1ZmYtXHUwMDNlaW50ZXJuYWxfZGF0YTEpO1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4mIzQzO1x0aWYgKGJ1ZmYtXHUwMDNlaGVhbHRoX3N0YXR1c19jb2RlID09IDAgfHxcbiYjNDM7XHQgICAgaW50ZXJuYWxfZGF0YSA9PSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRClcbiYjNDM7XHRcdGQtXHUwMDNlZHBsbF9zdGF0ZSA9IERQTExfTE9DS19TVEFUVVNfTE9DS0VEO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGQtXHUwMDNlZHBsbF9zdGF0ZSA9IERQTExfTE9DS19TVEFUVVNfVU5MT0NLRUQ7XG4mIzQzO1xuJiM0MztcdGlmIChkLVx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9PSBkLVx1MDAzZWRwbGxfc3RhdGUpXG4mIzQzO1x0XHRub3RpZnkgPSBmYWxzZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkLVx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9IGQtXHUwMDNlZHBsbF9zdGF0ZTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4mIzQzO1x0aWYgKG5vdGlmeSBcdTAwMjZcdTAwMjYgZC1cdTAwM2VkcGxsKVxuJiM0MztcdFx0ZHBsbF9kZXZpY2VfY2hhbmdlX250ZihkLVx1MDAzZWRwbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9kcGxsX2RlaW5pdCAtIERpc2FibGUgdGhlIGRyaXZlci9IVyBzdXBwb3J0IGZvciBkcGxsIHN1YnN5c3RlbVxuICAqIHRoZSBkcGxsIGRldmljZS5cbkBAIC00ODU0LDkgJiM0Mzs1MDcwLDEwIEBAIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxuIFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnBmLVx1MDAzZWRwbGxzLnR4Y2xrX3dvcmspO1xuIFxuLVx0aWNlX2RwbGxfZGVpbml0X3BpbnMocGYsIGNndSk7XG4mIzQzO1x0aWNlX2RwbGxfZGVpbml0X3BpbnMocGYsIGNndSB8fCBwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpO1xuIFx0aWYgKCFJU19FUlJfT1JfTlVMTChwZi1cdTAwM2VkcGxscy5wcHMuZHBsbCkpXG4tXHRcdGljZV9kcGxsX2RlaW5pdF9kcGxsKHBmLCBcdTAwMjZwZi1cdTAwM2VkcGxscy5wcHMsIGNndSk7XG4mIzQzO1x0XHRpY2VfZHBsbF9kZWluaXRfZHBsbChwZiwgXHUwMDI2cGYtXHUwMDNlZHBsbHMucHBzLFxuJiM0MztcdFx0XHRcdCAgICAgY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XG4gXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsKSlcbiBcdFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLmVlYywgY2d1KTtcbiBcdGlmICghSVNfRVJSX09SX05VTEwocGYtXHUwMDNlZHBsbHMudHhjLmRwbGwpKVxuQEAgLTQ4NjYsNiAmIzQzOzUwODMsNDUgQEAgdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkIC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciB1bm1hbmFnZWQgZHBsbCBzdWJzeXN0ZW1cbiYjNDM7ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBTZXQgdXAgdGhlIGRldmljZSBkcGxscyBmb3IgdW5tYW5hZ2VkIG1vZGUsIHJlZ2lzdGVyIHRoZW0gYW5kIHBpbnMgY29ubmVjdGVkXG4mIzQzOyAqIHdpdGhpbiBMaW51eCBkcGxsIHN1YnN5c3RlbS4gQWxsb3cgdXNlcnNwYWNlIHRvIG9idGFpbiBzdGF0ZSBvZiBEUExMLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi1cdTAwM2VkcGxscy5sb2NrIG11dGV4LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxzICpkID0gXHUwMDI2cGYtXHUwMDNlZHBsbHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZkLVx1MDAzZWxvY2spO1xuJiM0MztcdGVyciA9IGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQocGYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9leGl0O1xuJiM0MztcdGVyciA9IGljZV9kcGxsX2luaXRfZHBsbChwZiwgXHUwMDI2cGYtXHUwMDNlZHBsbHMucHBzLCB0cnVlLCBEUExMX1RZUEVfUFBTKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBkZWluaXRfaW5mbztcbiYjNDM7XHRlcnIgPSBpY2VfZHBsbF9pbml0X3BpbnMocGYsIHRydWUpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRlaW5pdF9wcHM7XG4mIzQzO1x0c2V0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO2RlaW5pdF9wcHM6XG4mIzQzO1x0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcywgdHJ1ZSk7XG4mIzQzO2RlaW5pdF9pbmZvOlxuJiM0MztcdGljZV9kcGxsX2RlaW5pdF9pbmZvKHBmKTtcbiYjNDM7ZXJyX2V4aXQ6XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZkLVx1MDAzZWxvY2spO1xuJiM0MztcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtEUExMcyBpbml0IGZhaWx1cmUgZXJyOiVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9kcGxsX2luaXRfZTgyNSAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbiAgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG5AQCAtNDk3NSw4ICYjNDM7NTIzMSwyMyBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MTAoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7RFBMTHMgaW5pdCBmYWlsdXJlIGVycjolZFxcblwmIzM0OywgZXJyKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9pbml0IC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciBkcGxsIHN1YnN5c3RlbVxuJiM0MzsgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIFNldCB1cCB0aGUgZGV2aWNlIGRwbGxzLCByZWdpc3RlciB0aGVtIGFuZCBwaW5zIGNvbm5lY3RlZCB3aXRoaW4gTGludXggZHBsbFxuJiM0MzsgKiBzdWJzeXN0ZW0uIEFsbG93IHVzZXJzcGFjZSB0byBvYnRhaW4gc3RhdGUgb2YgRFBMTCBhbmQgaGFuZGxpbmcgb2YgRFBMTFxuJiM0MzsgKiBjb25maWd1cmF0aW9uIHJlcXVlc3RzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi1cdTAwM2VkcGxscy5sb2NrIG11dGV4LlxuJiM0MzsgKi9cbiB2b2lkIGljZV9kcGxsX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuJiM0MztcdGlmIChwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbiYjNDM7XHRcdGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHBmKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChwZi1cdTAwM2Vody5tYWNfdHlwZSkge1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcbiBcdFx0aWNlX2RwbGxfaW5pdF9lODI1KHBmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5pbmRleCAxMDNiYTNlNDkwNjgyLi5jNTlkNzQ2YTg1NjcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5AQCAtMjYsNiAmIzQzOzI2LDggQEBcbiAjZGVmaW5lIElDRV9DR1VfUjExX1NZTkNFX1NfQllQX0NMS1x0R0VOTUFTSyg2LCAxKVxuIFxuICNkZWZpbmUgSUNFX0NHVV9CWVBBU1NfTVVYX09GRlNFVF9FODI1Q1x0M1xuJiM0MzsjZGVmaW5lIElDRV9EUExMX1VOTUFOQUdFRF9QSU5fTlVNXHQ0XG4mIzQzOyNkZWZpbmUgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRFx0SUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOXG4gXG4gLyoqXG4gICogZW51bSBpY2VfZHBsbF9waW5fc3cgLSBlbnVtZXJhdGUgaWNlIHNvZnR3YXJlIHBpbiBpbmRpY2VzOlxuQEAgLTE5Myw2ICYjNDM7MTk1LDcgQEAgc3RydWN0IGljZV9kcGxscyB7XG4gXHRzMzIgb3V0cHV0X3BoYXNlX2Fkal9tYXg7XG4gXHR1MzIgcGVyaW9kaWNfY291bnRlcjtcbiBcdGJvb2wgZ2VuZXJpYztcbiYjNDM7XHRib29sIHVubWFuYWdlZDtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCB0eGNsa193b3JrO1xuIFx0Ym9vbCB0eGNsa19zd2l0Y2hfcmVxdWVzdGVkO1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB0eGNsa19ub3RpZnlfcndzZW07XG5AQCAtMjAxLDkgJiM0MzsyMDQsMTYgQEAgc3RydWN0IGljZV9kcGxscyB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF8xNTg4X0NMT0NLKVxuIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpO1xuJiM0Mzt2b2lkIGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZixcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIG5vdGlmeSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZFxuJiM0MztpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsXG4mIzQzO1x0XHRcdFx0ICBib29sIG5vdGlmeSkgeyB9XG4gI2VuZGlmXG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbmluZGV4IDhjZGM0ZmRhODllOTcuLmZjOWQ0ZTBmYTc1NTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5AQCAtMTQxNSw2ICYjNDM7MTQxNSwxMCBAQCBzdGF0aWMgaW50IGljZV92c2lfYWxsb2NfcmluZ3Moc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLCByaW5nLVx1MDAzZWZsYWdzKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzEsIHJpbmctXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpXG4mIzQzO1x0XHRcdHNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfR0NTLCByaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7XG4gXHRcdFdSSVRFX09OQ0UodnNpLVx1MDAzZXR4X3JpbmdzW2ldLCByaW5nKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi5mZWZiYzUxYzcxOTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzQyOCw3ICYjNDM7MzQyOCw3IEBAIHN0YXRpYyBpbnQgaWNlX3JlcV9pcnFfbXNpeF9taXNjKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHQgICAgICgocGYtXHUwMDNlbGxfdHNfaXJxLmluZGV4ICYjNDM7IHBmX2ludHJfc3RhcnRfb2Zmc2V0KSBcdTAwMjZcbiBcdFx0ICAgICAgUEZJTlRfU0JfQ1RMX01TSVhfSU5EWF9NKSB8IFBGSU5UX1NCX0NUTF9DQVVTRV9FTkFfTSk7XG4gXHR3cjMyKGh3LCBHTElOVF9JVFIoSUNFX1JYX0lUUiwgcGYtXHUwMDNlb2ljcl9pcnEuaW5kZXgpLFxuLVx0ICAgICBJVFJfUkVHX0FMSUdOKElDRV9JVFJfOEspIFx1MDAzZVx1MDAzZSBJQ0VfSVRSX0dSQU5fUyk7XG4mIzQzO1x0ICAgICBJVFJfUkVHX0FMSUdOKElDRV9JVFJfMjBLKSBcdTAwM2VcdTAwM2UgSUNFX0lUUl9HUkFOX1MpO1xuIFxuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xuQEAgLTM0OTEsOSAmIzQzOzM0OTEsOCBAQCB2b2lkIGljZV9zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdFx0TkVUSUZfRl9SWEhBU0g7XG4gXG4gXHRjc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNXHQgIHxcbi1cdFx0XHQgTkVUSUZfRl9JUF9DU1VNICB8XG4gXHRcdFx0IE5FVElGX0ZfU0NUUF9DUkMgfFxuLVx0XHRcdCBORVRJRl9GX0lQVjZfQ1NVTTtcbiYjNDM7XHRcdFx0IE5FVElGX0ZfSFdfQ1NVTTtcbiBcbiBcdHZsYW5vX2ZlYXR1cmVzID0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSIHxcbiBcdFx0XHQgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggICAgIHxcbkBAIC0zNTU1LDEyICYjNDM7MzU1NCw2IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdC8qIEFsbG93IGNvcmUgdG8gbWFuYWdlIElSUXMgYWZmaW5pdHkgKi9cbiBcdG5ldGlmX3NldF9hZmZpbml0eV9hdXRvKG5ldGRldik7XG4gXG4tXHQvKiBNdXR1YWwgZXhjbHVzaXZpdHkgZm9yIFRTTyBhbmQgR0NTIGlzIGVuZm9yY2VkIGJ5IHRoZSBzZXQgZmVhdHVyZXNcbi1cdCAqIG5kbyBjYWxsYmFjay5cbi1cdCAqL1xuLVx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcbi1cdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTtcbi1cbiBcdG5ldGlmX3NldF90c29fbWF4X3NpemUobmV0ZGV2LCBJQ0VfTUFYX1RTT19TSVpFKTtcbiB9XG4gXG5AQCAtNDcyMCw3ICYjNDM7NDcxMyw5IEBAIHZvaWQgaWNlX2RlaW5pdF9kZXYoc3RydWN0IGljZV9wZiAqcGYpXG4gXG4gc3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuJiM0MztcdHUxNiBjb2RlID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLO1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGlmIChpY2VfaXNfc2FmZV9tb2RlKHBmKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ3MzIsOCAmIzQzOzQ3MjcsMTUgQEAgc3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HTlNTKSlcbiBcdFx0aWNlX2duc3NfaW5pdChwZik7XG4gXG4mIzQzO1x0LyogSW5pdGlhbGl6ZSB1bm1hbmFnZWQgRFBMTCBkZXRlY3Rpb24gKi9cbiYjNDM7XHRlcnIgPSBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChcdTAwMjZwZi1cdTAwM2VodywgY29kZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBcdTAwMjZwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpO1xuJiM0MztcdGlmIChlcnIgfHwgIWljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3QoXHUwMDI2cGYtXHUwMDNlaHcpKVxuJiM0MztcdFx0cGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkID0gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfQ0dVKSB8fFxuLVx0ICAgIGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfUEhZX1JDTEspKVxuJiM0MztcdCAgICBpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX1BIWV9SQ0xLKSB8fFxuJiM0MztcdCAgICBwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpXG4gXHRcdGljZV9kcGxsX2luaXQocGYpO1xuIFxuIFx0LyogTm90ZTogRmxvdyBkaXJlY3RvciBpbml0IGZhaWx1cmUgaXMgbm9uLWZhdGFsIHRvIGxvYWQgKi9cbkBAIC02NTEwLDE4ICYjNDM7NjUxMiw2IEBAIGljZV9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcbiBcdFx0cmV0ID0gaWNlX3NldF9sb29wYmFjayh2c2ksICEhKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKSk7XG4gXG4tXHQvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTXG4tXHQgKiAoTkVUSUZfRl9IV19DU1VNKSBpcyBub3Qgc3VwcG9ydGVkLlxuLVx0ICovXG4tXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSkgXHUwMDI2XHUwMDI2IChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9BTExfVFNPKSkpIHtcbi1cdFx0aWYgKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxuXCYjMzQ7KTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RvIGVuYWJsZSBIVyBjaGVja3N1bSwgeW91IG11c3QgZmlyc3QgZGlzYWJsZSBUU08uXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uZTgzOTJlYzRmMTM0OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0yMzI3LDYgJiM0MzsyMzI3LDggQEAgdTY0IGljZV9wdHBfZ2V0X3J4X2h3dHMoY29uc3QgdW5pb24gaWNlXzMyYl9yeF9mbGV4X2Rlc2MgKnJ4X2Rlc2MsXG4gXHR0c19oaWdoID0gbGUzMl90b19jcHUocnhfZGVzYy1cdTAwM2V3Yi5mbGV4X3RzLnRzX2hpZ2gpO1xuIFx0dHNfbnMgPSBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoY2FjaGVkX3RpbWUsIHRzX2hpZ2gpO1xuIFxuJiM0MztcdGljZV90cmFjZShyeF9od3RzdGFtcCwgY2FjaGVkX3RpbWUsIHRzX2hpZ2gsIHRzX25zKTtcbiYjNDM7XG4gXHRyZXR1cm4gdHNfbnM7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCA4ZTVmOTc4MzU5NTRjLi5mOTA1MTA0Zjk1ZDg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTIwLDYgJiM0MzsyMCwxMCBAQCBzdGF0aWMgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeltdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZXzEwTUhaLFxuIH07XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9jZ3VfcGluX2ZyZXFfMTU2XzI1bWh6W10gPSB7XG4mIzQzO1x0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDE1NjI1MDAwMCwgMTU2MjUwMDAwKSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODEwdF9zZnBfY2d1X2lucHV0c1tdID0ge1xuIFx0eyBcJiMzNDtDVkwtU0RQMjJcJiMzNDssXHQgIFpMX1JFRjBQLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxuIFx0XHRBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfY29tbW9uKSwgaWNlX2NndV9waW5fZnJlcV9jb21tb24gfSxcbkBAIC0xMzEsNiAmIzQzOzEzNSwxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MjNfemxfY2d1X291dHB1dHNbXSA9IHtcbiBcdHsgXCYjMzQ7Tk9ORVwmIzM0OyxcdCAgIFpMX09VVDUsIDAsIDAgfSxcbiB9O1xuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MzBfdW5tYW5hZ2VkX2lucHV0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7MTU4OC1USU1FX1NZTkNcJiMzNDssIDAsIERQTExfUElOX1RZUEVfRVhULFxuJiM0MztcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeiksIGljZV9jZ3VfcGluX2ZyZXFfMTBfbWh6IH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MzBfdW5tYW5hZ2VkX291dHB1dHNbXSA9IHtcbiYjNDM7XHR7IFwmIzM0O01BQy1QSFktQ0xLXCYjMzQ7LCAwLCBEUExMX1BJTl9UWVBFX1NZTkNFX0VUSF9QT1JULFxuJiM0MztcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzE1Nl8yNW1oeiksIGljZV9jZ3VfcGluX2ZyZXFfMTU2XzI1bWh6IH0sXG4mIzQzO1x0eyBcJiMzNDsxNTg4LVRJTUVfUkVGXCYjMzQ7LCAxLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxuJiM0MztcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzFfaHopLCBpY2VfY2d1X3Bpbl9mcmVxXzFfaHp9LFxuJiM0Mzt9O1xuJiM0MztcbiAvKiBMb3cgbGV2ZWwgZnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIGFuZCBtYW5hZ2luZyB0aGUgZGV2aWNlIGNsb2NrIHVzZWRcbiAgKiBmb3IgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sLlxuICAqXG5AQCAtNTk3OSw2ICYjNDM7NTk5NSwyNCBAQCBpY2VfY2d1X2dldF9waW5fZGVzYyhzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dCwgaW50ICpzaXplKVxuIFx0Y2FzZSBJQ0VfREVWX0lEX0U4MjNDX1NHTUlJOlxuIFx0XHR0ID0gaWNlX2NndV9nZXRfcGluX2Rlc2NfZTgyMyhodywgaW5wdXQsIHNpemUpO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENDX0JBQ0tQTEFORTpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1FTRlA1NjpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1NGUDpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1NGUF9ERDpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMENfQkFDS1BMQU5FOlxuJiM0MztcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ19RU0ZQOlxuJiM0MztcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ19TRlA6XG4mIzQzO1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBfWFhWX0JBQ0tQTEFORTpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfUVNGUDpcbiYjNDM7XHRjYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfU0ZQOlxuJiM0MztcdFx0aWYgKGlucHV0KSB7XG4mIzQzO1x0XHRcdHQgPSBpY2VfZTgzMF91bm1hbmFnZWRfaW5wdXRzO1xuJiM0MztcdFx0XHQqc2l6ZSA9IEFSUkFZX1NJWkUoaWNlX2U4MzBfdW5tYW5hZ2VkX2lucHV0cyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR0ID0gaWNlX2U4MzBfdW5tYW5hZ2VkX291dHB1dHM7XG4mIzQzO1x0XHRcdCpzaXplID0gQVJSQVlfU0laRShpY2VfZTgzMF91bm1hbmFnZWRfb3V0cHV0cyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTYwMDUsNiAmIzQzOzYwMzksMTggQEAgaW50IGljZV9jZ3VfZ2V0X251bV9waW5zKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX2NndV9nZXRfcGluX251bSAtIGdldCBwaW4gZGVzY3JpcHRpb24gYXJyYXkgc2l6ZVxuJiM0MzsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxuJiM0MzsgKiBAaW5wdXQ6IGlmIHJlcXVlc3QgaXMgZG9uZSBhZ2FpbnN0IGlucHV0IG9yIG91dHB1dCBwaW5zXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogc2l6ZSBvZiBwaW4gZGVzY3JpcHRpb24gYXJyYXkgZm9yIGdpdmVuIGh3LlxuJiM0MzsgKi9cbiYjNDM7aW50IGljZV9jZ3VfZ2V0X3Bpbl9udW0oc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaWNlX2NndV9nZXRfbnVtX3BpbnMoaHcsIGlucHV0KTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfY2d1X2dldF9waW5fdHlwZSAtIGdldCBwaW4mIzM5O3MgdHlwZVxuICAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmhcbmluZGV4IDE2YjE5ODhlOTkzZDIuLmZhMWU5MDhjZWJhYzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXG5AQCAtMzY0LDYgJiM0MzszNjQsNyBAQCBpbnQgaWNlX3JlYWRfc21hX2N0cmwoc3RydWN0IGljZV9odyAqaHcsIHU4ICpkYXRhKTtcbiBpbnQgaWNlX3dyaXRlX3NtYV9jdHJsKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBkYXRhKTtcbiBpbnQgaWNlX3B0cF9yZWFkX3NkcF9hYyhzdHJ1Y3QgaWNlX2h3ICpodywgX19sZTE2ICplbnRyaWVzLCB1aW50ICpudW1fZW50cmllcyk7XG4gaW50IGljZV9jZ3VfZ2V0X251bV9waW5zKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KTtcbiYjNDM7aW50IGljZV9jZ3VfZ2V0X3Bpbl9udW0oc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpO1xuIGVudW0gZHBsbF9waW5fdHlwZSBpY2VfY2d1X2dldF9waW5fdHlwZShzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluLCBib29sIGlucHV0KTtcbiBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5ICpcbiBpY2VfY2d1X2dldF9waW5fZnJlcV9zdXBwKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwaW4sIGJvb2wgaW5wdXQsIHU4ICpudW0pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jXG5pbmRleCA2YTU4NzViZDljNmIxLi40ZGFlZTI1MmUyYTYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xuQEAgLTI2MTIsNyAmIzQzOzI2MTIsNiBAQCBpY2VfZmlsbF9zd19ydWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2ZsdHJfaW5mbyAqZl9pbmZvLFxuIFx0dTE2IHZsYW5faWQgPSBJQ0VfTUFYX1ZMQU5fSUQgJiM0MzsgMTtcbiBcdHUxNiB2bGFuX3RwaWQgPSBFVEhfUF84MDIxUTtcbiBcdHZvaWQgKmRhZGRyID0gTlVMTDtcbi1cdHUxNiBldGhfaGRyX3N6O1xuIFx0dTggKmV0aF9oZHI7XG4gXHR1MzIgYWN0ID0gMDtcbiBcdF9fYmUxNiAqb2ZmO1xuQEAgLTI2MjUsMTEgJiM0MzsyNjI0LDEwIEBAIGljZV9maWxsX3N3X3J1bGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfZmx0cl9pbmZvICpmX2luZm8sXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGV0aF9oZHJfc3ogPSBzaXplb2YoZHVtbXlfZXRoX2hlYWRlcik7XG4gXHRldGhfaGRyID0gc19ydWxlLVx1MDAzZWhkcl9kYXRhO1xuIFxuIFx0LyogaW5pdGlhbGl6ZSB0aGUgZXRoZXIgaGVhZGVyIHdpdGggYSBkdW1teSBoZWFkZXIgKi9cbi1cdG1lbWNweShldGhfaGRyLCBkdW1teV9ldGhfaGVhZGVyLCBldGhfaGRyX3N6KTtcbiYjNDM7XHRpY2VfZmlsbF9ldGhfaGRyKGV0aF9oZHIpO1xuIFx0aWNlX2ZpbGxfc3dfaW5mbyhodywgZl9pbmZvKTtcbiBcbiBcdHN3aXRjaCAoZl9pbmZvLVx1MDAzZWZsdHJfYWN0KSB7XG5AQCAtMjczMCw3ICYjNDM7MjcyOCw3IEBAIGljZV9maWxsX3N3X3J1bGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfZmx0cl9pbmZvICpmX2luZm8sXG4gXG4gXHQvKiBDcmVhdGUgdGhlIHN3aXRjaCBydWxlIHdpdGggdGhlIGZpbmFsIGR1bW15IEV0aGVybmV0IGhlYWRlciAqL1xuIFx0aWYgKG9wYyAhPSBpY2VfYXFjX29wY191cGRhdGVfc3dfcnVsZXMpXG4tXHRcdHNfcnVsZS1cdTAwM2VoZHJfbGVuID0gY3B1X3RvX2xlMTYoZXRoX2hkcl9zeik7XG4mIzQzO1x0XHRzX3J1bGUtXHUwMDNlaGRyX2xlbiA9IGNwdV90b19sZTE2KERVTU1ZX0VUSF9IRFJfTEVOKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcbmluZGV4IGQyMDM1N2MwNDEyNzMuLjQ1NjBlNTVjOGY5YzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jXG5AQCAtMTc0LDYgJiM0MzsxNzQsNyBAQCBzdGF0aWMgdTE2IGljZV9jaGVja19zdXBwb3J0ZWRfdmxhbl90cGlkKHUxNiB2bGFuX3RwaWQpXG4gXHRjYXNlIEVUSF9QXzgwMjFROlxuIFx0Y2FzZSBFVEhfUF84MDIxQUQ6XG4gXHRjYXNlIEVUSF9QX1FJTlExOlxuJiM0MztcdGNhc2UgRVRIX1BfODAyMUFIOlxuIFx0XHRyZXR1cm4gdmxhbl90cGlkO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oXG5pbmRleCA0ZjM1ZWY4ZDZiMjk5Li4zY2I4YzZlYTAzY2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcbkBAIC0yNDEsNiAmIzQzOzI0MSwyNCBAQCBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfZndfcmVxKTtcbiBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfZndfZG9uZSk7XG4gREVGSU5FX1RYX1RTVEFNUF9PUF9FVkVOVChpY2VfdHhfdHN0YW1wX2NvbXBsZXRlKTtcbiBcbiYjNDM7LyogVHJhY2UgZXZlbnQgZm9yIFJ4IHRpbWVzdGFtcCAqL1xuJiM0MztUUkFDRV9FVkVOVChpY2VfcnhfaHd0c3RhbXAsXG4mIzQzO1x0ICAgIFRQX1BST1RPKHU2NCBjYWNoZWRfdGltZSwgdTMyIHRzX2hpZ2gsIHU2NCB0c19ucyksXG4mIzQzO1xuJiM0MztcdCAgICBUUF9BUkdTKGNhY2hlZF90aW1lLCB0c19oaWdoLCB0c19ucyksXG4mIzQzO1xuJiM0MztcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KF9fZmllbGQodTY0LCBjYWNoZWRfdGltZSlcbiYjNDM7XHRcdFx0ICAgICBfX2ZpZWxkKHUzMiwgdHNfaGlnaClcbiYjNDM7XHRcdFx0ICAgICBfX2ZpZWxkKHU2NCwgdHNfbnMpKSxcbiYjNDM7XG4mIzQzO1x0ICAgIFRQX2Zhc3RfYXNzaWduKF9fZW50cnktXHUwMDNlY2FjaGVkX3RpbWUgPSBjYWNoZWRfdGltZTtcbiYjNDM7XHRcdFx0ICAgX19lbnRyeS1cdTAwM2V0c19oaWdoID0gdHNfaGlnaDtcbiYjNDM7XHRcdFx0ICAgX19lbnRyeS1cdTAwM2V0c19ucyA9IHRzX25zOyksXG4mIzQzO1xuJiM0MztcdCAgICBUUF9wcmludGsoXCYjMzQ7Y2FjaGVkX3RpbWU9JWxsdSB0c19oaWdoPSV1IHRzX25zPSVsbHVcJiMzNDssXG4mIzQzO1x0XHQgICAgICBfX2VudHJ5LVx1MDAzZWNhY2hlZF90aW1lLCBfX2VudHJ5LVx1MDAzZXRzX2hpZ2gsIF9fZW50cnktXHUwMDNldHNfbnMpXG4mIzQzOyk7XG4mIzQzO1xuIERFQ0xBUkVfRVZFTlRfQ0xBU1MoaWNlX2Vzd19icl9mZGJfdGVtcGxhdGUsXG4gXHRcdCAgICBUUF9QUk9UTyhzdHJ1Y3QgaWNlX2Vzd19icl9mZGJfZW50cnkgKmZkYiksXG4gXHRcdCAgICBUUF9BUkdTKGZkYiksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xuaW5kZXggMzEzMDNhYjViZTE3NS4uNDc3Yzg2ZDhjNTNiYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xuQEAgLTE3MzksNyAmIzQzOzE3MzksNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXG4gXHRsM19sZW4gPSBsNC5oZHIgLSBpcC5oZHI7XG4gXHRvZmZzZXQgfD0gKGwzX2xlbiAvIDQpIFx1MDAzY1x1MDAzYyBJQ0VfVFhfREVTQ19MRU5fSVBMRU5fUztcbiBcbi1cdGlmICgodHhfcmluZy1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKHRlc3RfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgdHhfcmluZy1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmaXJzdC1cdTAwM2V0eF9mbGFncyBcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNrYl9jc3VtX2lzX3NjdHAoc2tiKSkge1xuIFx0XHQvKiBTZXQgR0NTICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuaW5kZXggNWU1MTdmMjE5Mzc5OC4uMTVkYmQ1MTAwOTEyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuQEAgLTIxNyw2ICYjNDM7MjE3LDcgQEAgZW51bSBpY2VfdHhfcmluZ19mbGFncyB7XG4gXHRJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMSxcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLFxuIFx0SUNFX1RYX1JJTkdfRkxBR1NfVFhUSU1FLFxuJiM0MztcdElDRV9UWF9SSU5HX0ZMQUdTX0dDUyxcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX05CSVRTLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdnNpX3ZsYW5fbGliLmNcbmluZGV4IDU0OTg0OTY2ODUxZDUuLmI2NzI3MmUyZjYwM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jXG5AQCAtMjQsNyAmIzQzOzI0LDggQEAgc3RhdGljIHZvaWQgcHJpbnRfaW52YWxpZF90cGlkKHN0cnVjdCBpY2VfdnNpICp2c2ksIHUxNiB0cGlkKVxuIHN0YXRpYyBib29sIHZhbGlkYXRlX3ZsYW4oc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGljZV92bGFuICp2bGFuKVxuIHtcbiBcdGlmICh2bGFuLVx1MDAzZXRwaWQgIT0gRVRIX1BfODAyMVEgXHUwMDI2XHUwMDI2IHZsYW4tXHUwMDNldHBpZCAhPSBFVEhfUF84MDIxQUQgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmxhbi1cdTAwM2V0cGlkICE9IEVUSF9QX1FJTlExIFx1MDAyNlx1MDAyNiAodmxhbi1cdTAwM2V0cGlkIHx8IHZsYW4tXHUwMDNldmlkKSkge1xuJiM0MztcdCAgICB2bGFuLVx1MDAzZXRwaWQgIT0gRVRIX1BfUUlOUTEgXHUwMDI2XHUwMDI2IHZsYW4tXHUwMDNldHBpZCAhPSBFVEhfUF84MDIxQUggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICh2bGFuLVx1MDAzZXRwaWQgfHwgdmxhbi1cdTAwM2V2aWQpKSB7XG4gXHRcdHByaW50X2ludmFsaWRfdHBpZCh2c2ksIHZsYW4tXHUwMDNldHBpZCk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuY1xuaW5kZXggY2E4MDE4ZTNkZDQyOC4uMDZkMmY5YmU5M2FlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmNcbkBAIC0xNzAyLDYgJiM0MzsxNzAyLDkgQEAgc3RhdGljIGJvb2wgaWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fdHBpZCh1MTYgZmlsdGVyaW5nX2NhcHMsIHUxNiB0cGlkKVxuIFx0Y2FzZSBFVEhfUF9RSU5RMTpcbiBcdFx0dmxhbl9ldGhlcnR5cGUgPSBWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV85MTAwO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIEVUSF9QXzgwMjFBSDpcbiYjNDM7XHRcdHZsYW5fZXRoZXJ0eXBlID0gVklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhFNztcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKCEoZmlsdGVyaW5nX2NhcHMgXHUwMDI2IHZsYW5fZXRoZXJ0eXBlKSlcbkBAIC0yMTM2LDYgJiM0MzsyMTM5LDkgQEAgc3RhdGljIGludCBpY2VfdmNfZ2V0X3RwaWQodTMyIGV0aGVydHlwZV9zZXR0aW5nLCB1MTYgKnRwaWQpXG4gXHRjYXNlIFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzkxMDA6XG4gXHRcdCp0cGlkID0gRVRIX1BfUUlOUTE7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhFNzpcbiYjNDM7XHRcdCp0cGlkID0gRVRIX1BfODAyMUFIO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHQqdHBpZCA9IDA7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcbmluZGV4IDIxZDJmZTM4YTQxYTYuLjQyNGMxMmMwMzk0YTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcbkBAIC0xMSw2ICYjNDM7MTEsOCBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl90cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9oZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gXG5AQCAtNzEwNSw2ICYjNDM7NzEwNyw1NyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaWdjX3Fidl9zY2hlZHVsaW5nX3RpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbiBcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGlnY19nZXRfYWNwaV9tYWNfcGFzc3RocnUodTggKm1hYylcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRcdGFjcGlfb2JqZWN0X3R5cGUgdHlwZTtcbiYjNDM7XHRcdHUzMiBsZW5ndGg7XG4mIzQzO1x0fSBzb3VyY2VzW10gPSB7XG4mIzQzO1x0XHR7IFwmIzM0O1xcXFxfU0IuQU1BQ1wmIzM0OywgQUNQSV9UWVBFX0JVRkZFUiwgMjMgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7XFxcXE1BQ0FcJiMzNDssICAgICBBQ1BJX1RZUEVfU1RSSU5HLCAyMiB9LFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjtcbiYjNDM7XHR1bmlvbiBhY3BpX29iamVjdCAqb2JqO1xuJiM0MztcdGJvb2wgbWFjX2ZvdW5kID0gZmFsc2U7XG4mIzQzO1x0YWNwaV9zdGF0dXMgc3RhdHVzO1xuJiM0MztcdHU4IGJ1ZltFVEhfQUxFTl07XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQUNQSSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc291cmNlcykgXHUwMDI2XHUwMDI2ICFtYWNfZm91bmQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRidWZmZXIubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7XG4mIzQzO1x0XHRidWZmZXIucG9pbnRlciA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0c3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoTlVMTCwgKGNoYXIgKilzb3VyY2VzW2ldLm5hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBOVUxMLCBcdTAwMjZidWZmZXIpO1xuJiM0MztcdFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRvYmogPSBidWZmZXIucG9pbnRlcjtcbiYjNDM7XHRcdGlmICghb2JqIHx8IG9iai1cdTAwM2V0eXBlICE9IHNvdXJjZXNbaV0udHlwZSB8fFxuJiM0MztcdFx0ICAgIG9iai1cdTAwM2VzdHJpbmcubGVuZ3RoICE9IHNvdXJjZXNbaV0ubGVuZ3RoKVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfb2JqO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdHJuY21wKG9iai1cdTAwM2VzdHJpbmcucG9pbnRlciwgXCYjMzQ7X0FVWE1BQ18jXCYjMzQ7LCA5KSB8fFxuJiM0MztcdFx0ICAgIG9iai1cdTAwM2VzdHJpbmcucG9pbnRlclsyMV0gIT0gJiMzOTsjJiMzOTspXG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9vYmo7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGhleDJiaW4oYnVmLCBvYmotXHUwMDNlc3RyaW5nLnBvaW50ZXIgJiM0MzsgOSwgRVRIX0FMRU4pIHx8XG4mIzQzO1x0XHQgICAgIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYnVmKSlcbiYjNDM7XHRcdFx0Z290byBmcmVlX29iajtcbiYjNDM7XG4mIzQzO1x0XHRldGhlcl9hZGRyX2NvcHkobWFjLCBidWYpO1xuJiM0MztcdFx0bWFjX2ZvdW5kID0gdHJ1ZTtcbiYjNDM7ZnJlZV9vYmo6XG4mIzQzO1x0XHRrZnJlZShvYmopO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hY19mb3VuZDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpZ2NfcHJvYmUgLSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUm91dGluZVxuICAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuQEAgLTcyNjgsOSAmIzQzOzczMjEsMTYgQEAgc3RhdGljIGludCBpZ2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHR9XG4gXG4gXHRpZiAoZXRoX3BsYXRmb3JtX2dldF9tYWNfYWRkcmVzcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgaHctXHUwMDNlbWFjLmFkZHIpKSB7XG4tXHRcdC8qIGNvcHkgdGhlIE1BQyBhZGRyZXNzIG91dCBvZiB0aGUgTlZNICovXG4tXHRcdGlmIChody1cdTAwM2VtYWMub3BzLnJlYWRfbWFjX2FkZHIoaHcpKVxuJiM0MztcdFx0LyogTG9vayBmb3IgYSBzeXN0ZW0tcHJvdmlkZWQgTUFDIGluIHRoZSBBQ1BJIHRhYmxlIGJlZm9yZVxuJiM0MztcdFx0ICogZmFsbGluZyBiYWNrIHRvIHJlYWRpbmcgdGhlIGFkZHJlc3MgZnJvbSB0aGUgTlZNLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoaWdjX2dldF9hY3BpX21hY19wYXNzdGhydShody1cdTAwM2VtYWMuYWRkcikpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2LVx1MDAzZWFkZHJfYXNzaWduX3R5cGUgPSBORVRfQUREUl9TVE9MRU47XG4mIzQzO1x0XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtVc2luZyBBQ1BJIHBhc3MtdGhyb3VnaCBNQUMgYWRkciAlcE1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IGh3LVx1MDAzZW1hYy5hZGRyKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoaHctXHUwMDNlbWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSkge1xuIFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O05WTSBSZWFkIEVycm9yXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LVx1MDAzZW1hYy5hZGRyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oIGIvaW5jbHVkZS9saW51eC9hdmYvdmlydGNobmwuaFxuaW5kZXggMTFiZGFiNTUyMmZkNS4uNTExYzg4MjdjNjQwZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcbkBAIC02MzYsNiAmIzQzOzYzNiw3IEBAIGVudW0gdmlydGNobmxfdmxhbl9zdXBwb3J0IHtcbiBcdFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzgxMDAgPVx0XHRCSVQoMCksXG4gXHRWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEE4ID1cdFx0QklUKDEpLFxuIFx0VklSVENITkxfVkxBTl9FVEhFUlRZUEVfOTEwMCA9XHRcdEJJVCgyKSxcbiYjNDM7XHRWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEU3ID1cdFx0QklUKDMpLFxuIFx0VklSVENITkxfVkxBTl9UQUdfTE9DQVRJT05fTDJUQUcxID1cdEJJVCg4KSxcbiBcdFZJUlRDSE5MX1ZMQU5fVEFHX0xPQ0FUSU9OX0wyVEFHMiA9XHRCSVQoOSksXG4gXHRWSVJUQ0hOTF9WTEFOX1RBR19MT0NBVElPTl9MMlRBRzJfMiA9XHRCSVQoMTApLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFMTAwMEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlMTAwMF9hbGxvY19yeF9idWZmZXJzJiMzNDssCiAgICAmIzM0O2UxMDAwX2NsZWFuX3J4X2lycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNmYwYWY1Yzk0MzdmNDE2NGIwMmM2MTE4YWEwZDc4NDQ1NWRhYjEyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAyMjo0NzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3QKaW5kZXggMGJjYTI5M2NmOWNiNy4uODJiM2NjYzcwMjdlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3QKQEAgLTk0MSw2ICYjNDM7OTQxLDg2IEBAIFRvIHNlZSBpbnB1dCBzaWduYWwgb24gdGhvc2UgUFRQIHBpbnMsIHlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBEUExMIHByb3Blcmx5LgogT3V0cHV0IHNpZ25hbCBpcyBvbmx5IHZpc2libGUgb24gRFBMTCBhbmQgdG8gc2VuZCBpdCB0byB0aGUgYm9hcmQgU01BL1UuRkwgcGlucywKIERQTEwgb3V0cHV0IHBpbnMgaGF2ZSB0byBiZSBtYW51YWxseSBjb25maWd1cmVkLgogCiYjNDM7VW5tYW5hZ2VkIERQTEwgU3VwcG9ydAomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MztIYXJkd2FyZSB2YXJpYW50cyBvZiBFODMwIG1heSBzdXBwb3J0IGFuIHVubWFuYWdlZCBEUExMOgomIzQzOwomIzQzOy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE4RiBmb3IgT0NQIDMuMCwKJiM0MzsKJiM0MzstIEludGVsKFIpIEV0aGVybmV0IE5ldHdvcmsgQWRhcHRlciBFODMwLVhYVkRBNEYuCiYjNDM7CiYjNDM7SW4gdGhlIGNhc2Ugb2YgdGhlIHVubWFuYWdlZCBEUExMLCB0aGUgY29uZmlndXJhdGlvbiBpcyBoYXJkY29kZWQgd2l0aGluIHRoZQomIzQzO2hhcmR3YXJlIGFuZCBmaXJtd2FyZSwgbWVhbmluZyB1c2VycyBjYW5ub3QgbW9kaWZ5IHNldHRpbmdzLiBIb3dldmVyLAomIzQzO3VzZXJzIGNhbiBjaGVjayB0aGUgRFBMTCBsb2NrIHN0YXR1cyBhbmQgb2J0YWluIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KJiM0Mzt0aHJvdWdoIHRoZSBMaW51eCBEUExMIHN1YnN5c3RlbS4KJiM0MzsKJiM0MztXaGVuIHByZXNlbnQsIHRoZSBEUExMIGRldmljZSBsb2NrcyB0byBhbiBleHRlcm5hbCBzaWduYWwgcHJvdmlkZWQgdGhyb3VnaCB0aGUKJiM0MztQQ0llL09DUCBwaW4uIFRoZSBleHBlY3RlZCBpbnB1dCBzaWduYWwgaXMgMVBQUyAoMSBQdWxzZSBQZXIgU2Vjb25kKSBlbWJlZGRlZAomIzQzO29uIGEgMTBNSHogcmVmZXJlbmNlIGNsb2NrLgomIzQzO1RoZSBEUExMIHByb2R1Y2VzIG91dHB1dDoKJiM0MzsKJiM0MzstIGZvciBNQUMgKE1lZGlhIEFjY2VzcyBDb250cm9sKSAmYW1wOyBQSFkgKFBoeXNpY2FsIExheWVyKSBjbG9ja3MsCiYjNDM7CiYjNDM7LSAxUFBTIGZvciBzeW5jaHJvbml6YXRpb24gb2Ygb25ib2FyZCBQSEMgKFByZWNpc2lvbiBIYXJkd2FyZSBDbG9jaykgdGltZXIuCiYjNDM7CiYjNDM7RXhhbXBsZSBvdXRwdXQgb2YgcXVlcnlpbmcgdGhlIExpbnV4IERQTEwgc3Vic3lzdGVtIGNhbiBiZSBmb3VuZCBiZWxvdy4KJiM0MzsKJiM0MzsuLiBjb2RlLWJsb2NrOjogY29uc29sZQomIzQzOyAgOmNhcHRpb246IER1bXBpbmcgdGhlIERQTEwgcGlucwomIzQzOwomIzQzOyAgJCAmbHQ7eW5sJmd0OyAtLXNwZWMgRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RwbGwueWFtbCAtLWR1bXAgcGluLWdldAomIzQzOyAgW3smIzM5O2JvYXJkLWxhYmVsJiMzOTs6ICYjMzk7MTU4OC1USU1FX1NZTkMmIzM5OywKJiM0MzsgICAgJiMzOTtjYXBhYmlsaXRpZXMmIzM5Ozogc2V0KCksCiYjNDM7ICAgICYjMzk7Y2xvY2staWQmIzM5OzogMjgyNTc0NDcxNTYxMjE2LAomIzQzOyAgICAmIzM5O2VzeW5jLWZyZXF1ZW5jeSYjMzk7OiAxLAomIzQzOyAgICAmIzM5O2VzeW5jLWZyZXF1ZW5jeS1zdXBwb3J0ZWQmIzM5OzogW3smIzM5O2ZyZXF1ZW5jeS1tYXgmIzM5OzogMSwgJiMzOTtmcmVxdWVuY3ktbWluJiMzOTs6IDF9XSwKJiM0MzsgICAgJiMzOTtlc3luYy1wdWxzZSYjMzk7OiAyNSwKJiM0MzsgICAgJiMzOTtmcmVxdWVuY3kmIzM5OzogMTAwMDAwMDAsCiYjNDM7ICAgICYjMzk7aWQmIzM5OzogMTMsCiYjNDM7ICAgICYjMzk7bW9kdWxlLW5hbWUmIzM5OzogJiMzOTtpY2UmIzM5OywKJiM0MzsgICAgJiMzOTtwYXJlbnQtZGV2aWNlJiMzOTs6IFt7JiMzOTtkaXJlY3Rpb24mIzM5OzogJiMzOTtpbnB1dCYjMzk7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtwYXJlbnQtaWQmIzM5OzogNiwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICYjMzk7c3RhdGUmIzM5OzogJiMzOTtjb25uZWN0ZWQmIzM5O31dLAomIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1tYXgmIzM5OzogMCwKJiM0MzsgICAgJiMzOTtwaGFzZS1hZGp1c3QtbWluJiMzOTs6IDAsCiYjNDM7ICAgICYjMzk7dHlwZSYjMzk7OiAmIzM5O2V4dCYjMzk7fSwKJiM0MzsgICAgeyYjMzk7Ym9hcmQtbGFiZWwmIzM5OzogJiMzOTtNQUMtUEhZLUNMSyYjMzk7LAomIzQzOyAgICAgICYjMzk7Y2FwYWJpbGl0aWVzJiMzOTs6IHNldCgpLAomIzQzOyAgICAmIzM5O2Nsb2NrLWlkJiMzOTs6IDI4MjU3NDQ3MTU2MTIxNiwKJiM0MzsgICAgJiMzOTtmcmVxdWVuY3kmIzM5OzogMTU2MjUwMDAwLAomIzQzOyAgICAmIzM5O2lkJiMzOTs6IDE0LAomIzQzOyAgICAmIzM5O21vZHVsZS1uYW1lJiMzOTs6ICYjMzk7aWNlJiMzOTssCiYjNDM7ICAgICYjMzk7cGFyZW50LWRldmljZSYjMzk7OiBbeyYjMzk7ZGlyZWN0aW9uJiMzOTs6ICYjMzk7b3V0cHV0JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3BhcmVudC1pZCYjMzk7OiA2LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtzdGF0ZSYjMzk7OiAmIzM5O2Nvbm5lY3RlZCYjMzk7fV0sCiYjNDM7ICAgICYjMzk7cGhhc2UtYWRqdXN0LW1heCYjMzk7OiAwLAomIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1taW4mIzM5OzogMCwKJiM0MzsgICAgJiMzOTt0eXBlJiMzOTs6ICYjMzk7c3luY2UtZXRoLXBvcnQmIzM5O30sCiYjNDM7ICB7JiMzOTtib2FyZC1sYWJlbCYjMzk7OiAmIzM5OzE1ODgtVElNRV9SRUYmIzM5OywKJiM0MzsgICAgJiMzOTtjYXBhYmlsaXRpZXMmIzM5Ozogc2V0KCksCiYjNDM7ICAgICYjMzk7Y2xvY2staWQmIzM5OzogMjgyNTc0NDcxNTYxMjE2LAomIzQzOyAgICAmIzM5O2ZyZXF1ZW5jeSYjMzk7OiAxLAomIzQzOyAgICAmIzM5O2lkJiMzOTs6IDE1LAomIzQzOyAgICAmIzM5O21vZHVsZS1uYW1lJiMzOTs6ICYjMzk7aWNlJiMzOTssCiYjNDM7ICAgICYjMzk7cGFyZW50LWRldmljZSYjMzk7OiBbeyYjMzk7ZGlyZWN0aW9uJiMzOTs6ICYjMzk7b3V0cHV0JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3BhcmVudC1pZCYjMzk7OiA2LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtzdGF0ZSYjMzk7OiAmIzM5O2Nvbm5lY3RlZCYjMzk7fV0sCiYjNDM7ICAgICYjMzk7cGhhc2UtYWRqdXN0LW1heCYjMzk7OiAwLAomIzQzOyAgICAmIzM5O3BoYXNlLWFkanVzdC1taW4mIzM5OzogMCwKJiM0MzsgICAgJiMzOTt0eXBlJiMzOTs6ICYjMzk7aW50LW9zY2lsbGF0b3ImIzM5O31dCiYjNDM7CiYjNDM7Li4gY29kZS1ibG9jazo6IGNvbnNvbGUKJiM0MzsgIDpjYXB0aW9uOiBEdW1waW5nIHRoZSBEUExMIGRldmljZXMKJiM0MzsKJiM0MzsgICQgJmx0O3lubCZndDsgLS1zcGVjIERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcGxsLnlhbWwgLS1kdW1wIGRldmljZS1nZXQKJiM0MzsgIFt7JiMzOTtjbG9jay1pZCYjMzk7OiAyODI1NzQ0NzE1NjEyMTYsCiYjNDM7ICAgICYjMzk7aWQmIzM5OzogNiwKJiM0MzsgICAgJiMzOTtsb2NrLXN0YXR1cyYjMzk7OiAmIzM5O2xvY2tlZCYjMzk7LAomIzQzOyAgICAmIzM5O21vZGUmIzM5OzogJiMzOTttYW51YWwmIzM5OywKJiM0MzsgICAgJiMzOTttb2RlLXN1cHBvcnRlZCYjMzk7OiBbJiMzOTttYW51YWwmIzM5O10sCiYjNDM7ICAgICYjMzk7bW9kdWxlLW5hbWUmIzM5OzogJiMzOTtpY2UmIzM5OywKJiM0MzsgICAgJiMzOTt0eXBlJiMzOTs6ICYjMzk7cHBzJiMzOTt9XQomIzQzOwogR05TUyBtb2R1bGUKIC0tLS0tLS0tLS0tCiBSZXF1aXJlcyBrZXJuZWwgY29tcGlsZWQgd2l0aCBDT05GSUdfR05TUz15IG9yIENPTkZJR19HTlNTPW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMKaW5kZXggODQ0ZjMxYWIzN2FkNC4uYjA4YmNiZGIxOWQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYwpAQCAtNjc1LDYgJiM0Mzs2NzUsOCBAQCBzdGF0aWMgdm9pZCBlMTAwMF9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLAogCQlza2IgPSBidWZmZXJfaW5mby0mZ3Q7c2tiOwogCQlpZiAoc2tiKSB7CiAJCQlza2JfdHJpbShza2IsIDApOwomIzQzOwkJCWlmIChsaWtlbHkoYnVmZmVyX2luZm8tJmd0O2RtYSkpCiYjNDM7CQkJCWdvdG8gd3JpdGVfZGVzYzsKIAkJCWdvdG8gbWFwX3NrYjsKIAkJfQogCkBAIC02OTIsMTAgJiM0Mzs2OTQsMTIgQEAgc3RhdGljIHZvaWQgZTEwMDBfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywKIAkJCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKIAkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZhbXA7cGRldi0mZ3Q7ZGV2LCBidWZmZXJfaW5mby0mZ3Q7ZG1hKSkgewogCQkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtSeCBETUEgbWFwIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJCWJ1ZmZlcl9pbmZvLSZndDtkbWEgPSAwOwogCQkJYWRhcHRlci0mZ3Q7cnhfZG1hX2ZhaWxlZCYjNDM7JiM0Mzs7CiAJCQlicmVhazsKIAkJfQogCiYjNDM7d3JpdGVfZGVzYzoKIAkJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0NfRVhUKCpyeF9yaW5nLCBpKTsKIAkJcnhfZGVzYy0mZ3Q7cmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLSZndDtkbWEpOwogCkBAIC05NTMsNyAmIzQzOzk1Nyw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsCiAJCWRtYV9ybWIoKTsJLyogcmVhZCBkZXNjcmlwdG9yIGFuZCByeF9idWZmZXJfaW5mbyBhZnRlciBzdGF0dXMgREQgKi8KIAogCQlza2IgPSBidWZmZXJfaW5mby0mZ3Q7c2tiOwotCQlidWZmZXJfaW5mby0mZ3Q7c2tiID0gTlVMTDsKIAogCQlwcmVmZXRjaChza2ItJmd0O2RhdGEgLSBORVRfSVBfQUxJR04pOwogCkBAIC05NjcsOSAmIzQzOzk3MCw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsCiAKIAkJY2xlYW5lZCA9IHRydWU7CiAJCWNsZWFuZWRfY291bnQmIzQzOyYjNDM7OwotCQlkbWFfdW5tYXBfc2luZ2xlKCZhbXA7cGRldi0mZ3Q7ZGV2LCBidWZmZXJfaW5mby0mZ3Q7ZG1hLAotCQkJCSBhZGFwdGVyLSZndDtyeF9idWZmZXJfbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlidWZmZXJfaW5mby0mZ3Q7ZG1hID0gMDsKIAogCQlsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9kZXNjLSZndDt3Yi51cHBlci5sZW5ndGgpOwogCkBAIC05ODUsOCAmIzQzOzk4NSw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsCiAJCWlmIChhZGFwdGVyLSZndDtmbGFnczIgJmFtcDsgRkxBRzJfSVNfRElTQ0FSRElORykgewogCQkJLyogQWxsIHJlY2VpdmVzIG11c3QgZml0IGludG8gYSBzaW5nbGUgYnVmZmVyICovCiAJCQllX2RiZygmIzM0O1JlY2VpdmUgcGFja2V0IGNvbnN1bWVkIG11bHRpcGxlIGJ1ZmZlcnNcbiYjMzQ7KTsKLQkJCS8qIHJlY3ljbGUgKi8KLQkJCWJ1ZmZlcl9pbmZvLSZndDtza2IgPSBza2I7CiAJCQlpZiAoc3RhdGVyciAmYW1wOyBFMTAwMF9SWERfU1RBVF9FT1ApCiAJCQkJYWRhcHRlci0mZ3Q7ZmxhZ3MyICZhbXA7PSB+RkxBRzJfSVNfRElTQ0FSRElORzsKIAkJCWdvdG8gbmV4dF9kZXNjOwpAQCAtOTk0LDggJiM0Mzs5OTIsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLAogCiAJCWlmICh1bmxpa2VseSgoc3RhdGVyciAmYW1wOyBFMTAwMF9SWERFWFRfRVJSX0ZSQU1FX0VSUl9NQVNLKSAmYW1wOyZhbXA7CiAJCQkgICAgICEobmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX1JYQUxMKSkpIHsKLQkJCS8qIHJlY3ljbGUgKi8KLQkJCWJ1ZmZlcl9pbmZvLSZndDtza2IgPSBza2I7CiAJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQogCkBAIC0xMDIyLDE5ICYjNDM7MTAxOCwzMyBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLAogCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPQogCQkJCW5hcGlfYWxsb2Nfc2tiKCZhbXA7YWRhcHRlci0mZ3Q7bmFwaSwgbGVuZ3RoKTsKIAkJCWlmIChuZXdfc2tiKSB7CiYjNDM7CQkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCQlidWZmZXJfaW5mby0mZ3Q7ZG1hLAomIzQzOwkJCQkJCQlhZGFwdGVyLSZndDtyeF9idWZmZXJfbGVuLAomIzQzOwkJCQkJCQlETUFfRlJPTV9ERVZJQ0UpOwogCQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChuZXdfc2tiLAogCQkJCQkJCSAgICAgICAtTkVUX0lQX0FMSUdOLAogCQkJCQkJCSAgICAgICAoc2tiLSZndDtkYXRhIC0KIAkJCQkJCQkJTkVUX0lQX0FMSUdOKSwKIAkJCQkJCQkgICAgICAgKGxlbmd0aCAmIzQzOwogCQkJCQkJCQlORVRfSVBfQUxJR04pKTsKLQkJCQkvKiBzYXZlIHRoZSBza2IgaW4gYnVmZmVyX2luZm8gYXMgZ29vZCAqLwotCQkJCWJ1ZmZlcl9pbmZvLSZndDtza2IgPSBza2I7CiYjNDM7CQkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCQkgICBidWZmZXJfaW5mby0mZ3Q7ZG1hLAomIzQzOwkJCQkJCQkgICBhZGFwdGVyLSZndDtyeF9idWZmZXJfbGVuLAomIzQzOwkJCQkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOwogCQkJCXNrYiA9IG5ld19za2I7CiYjNDM7CQkJCWdvdG8gY29weWJyZWFrX2RvbmU7CiAJCQl9CiAJCQkvKiBlbHNlIGp1c3QgY29udGludWUgd2l0aCB0aGUgb2xkIG9uZSAqLwogCQl9Ci0JCS8qIGVuZCBjb3B5YnJlYWsgY29kZSAqLwomIzQzOwomIzQzOwkJYnVmZmVyX2luZm8tJmd0O3NrYiA9IE5VTEw7CiYjNDM7CQlkbWFfdW5tYXBfc2luZ2xlKCZhbXA7cGRldi0mZ3Q7ZGV2LCBidWZmZXJfaW5mby0mZ3Q7ZG1hLAomIzQzOwkJCQkgYWRhcHRlci0mZ3Q7cnhfYnVmZmVyX2xlbiwKJiM0MzsJCQkJIERNQV9GUk9NX0RFVklDRSk7CiYjNDM7CQlidWZmZXJfaW5mby0mZ3Q7ZG1hID0gMDsKJiM0MzsKJiM0Mztjb3B5YnJlYWtfZG9uZToKIAkJc2tiX3B1dChza2IsIGxlbmd0aCk7CiAKIAkJLyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwppbmRleCAwY2QwZTU1OTdjOTA5Li5hYmJjNzFlODE1YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKQEAgLTQsNiAmIzQzOzQsNyBAQAogI2luY2x1ZGUgJmx0O2dlbmVyYXRlZC91dHNyZWxlYXNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3Jhc2hfZHVtcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25ldC9pbnRlbC9saWJpZS9wY3R5cGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0L2ludGVsL2xpYmllL3J4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYnJpZGdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfbWFjdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwpAQCAtMjQxMSwxMCAmIzQzOzI0MTIsMTIgQEAgdm9pZCBpNDBlX2FxY19hZGRfZmlsdGVycyhzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgY29uc3QgY2hhciAqdnNpX25hbWUsCiAKIAlpZiAoZmNudCAhPSBudW1fYWRkKSB7CiAJCWlmICh2c2ktJmd0O3R5cGUgPT0gSTQwRV9WU0lfTUFJTikgewotCQkJc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsIHZzaS0mZ3Q7c3RhdGUpOwotCQkJZGV2X3dhcm4oJmFtcDt2c2ktJmd0O2JhY2stJmd0O3BkZXYtJmd0O2RldiwKLQkJCQkgJiMzNDtFcnJvciAlcyBhZGRpbmcgUlggZmlsdGVycyBvbiAlcywgcHJvbWlzY3VvdXMgbW9kZSBmb3JjZWQgb25cbiYjMzQ7LAotCQkJCSBsaWJpZV9hcV9zdHIoYXFfc3RhdHVzKSwgdnNpX25hbWUpOwomIzQzOwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsCiYjNDM7CQkJCQkgICAgICB2c2ktJmd0O3N0YXRlKSkgewomIzQzOwkJCQlkZXZfd2FybigmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7RXJyb3IgJXMgYWRkaW5nIFJYIGZpbHRlcnMgb24gJXMsIHByb21pc2N1b3VzIG1vZGUgZm9yY2VkIG9uXG4mIzM0OywKJiM0MzsJCQkJCSBsaWJpZV9hcV9zdHIoYXFfc3RhdHVzKSwgdnNpX25hbWUpOwomIzQzOwkJCX0KIAkJfSBlbHNlIGlmICh2c2ktJmd0O3R5cGUgPT0gSTQwRV9WU0lfU1JJT1YgfHwKIAkJCSAgIHZzaS0mZ3Q7dHlwZSA9PSBJNDBFX1ZTSV9WTURRMSB8fAogCQkJICAgdnNpLSZndDt0eXBlID09IEk0MEVfVlNJX1ZNRFEyKSB7CkBAIC0yNDY0LDEwICYjNDM7MjQ2NywxMSBAQCBpNDBlX2FxY19icm9hZGNhc3RfZmlsdGVyKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSwKIAl9CiAKIAlpZiAoYXFfcmV0KSB7Ci0JCXNldF9iaXQoX19JNDBFX1ZTSV9PVkVSRkxPV19QUk9NSVNDLCB2c2ktJmd0O3N0YXRlKTsKLQkJZGV2X3dhcm4oJmFtcDt2c2ktJmd0O2JhY2stJmd0O3BkZXYtJmd0O2RldiwKLQkJCSAmIzM0O0Vycm9yICVzLCBmb3JjaW5nIG92ZXJmbG93IHByb21pc2N1b3VzIG9uICVzXG4mIzM0OywKLQkJCSBsaWJpZV9hcV9zdHIoaHctJmd0O2FxLmFzcV9sYXN0X3N0YXR1cyksIHZzaV9uYW1lKTsKJiM0MzsJCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsIHZzaS0mZ3Q7c3RhdGUpKSB7CiYjNDM7CQkJZGV2X3dhcm4oJmFtcDt2c2ktJmd0O2JhY2stJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7RXJyb3IgJXMsIGZvcmNpbmcgb3ZlcmZsb3cgcHJvbWlzY3VvdXMgb24gJXNcbiYjMzQ7LAomIzQzOwkJCQkgbGliaWVfYXFfc3RyKGh3LSZndDthcS5hc3FfbGFzdF9zdGF0dXMpLCB2c2lfbmFtZSk7CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIGFxX3JldDsKQEAgLTM2MjIsNyAmIzQzOzM2MjYsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGk0MGVfcmluZyAqcmluZykKIAl9CiAKIHNraXA6Ci0JeGRwX2luaXRfYnVmZigmYW1wO3JpbmctJmd0O3hkcCwgeGRwX2ZyYW1lX3N6LCAmYW1wO3JpbmctJmd0O3hkcF9yeHEpOwomIzQzOwl4ZHBfaW5pdF9idWZmKCZhbXA7cmluZy0mZ3Q7eGRwX2N0eC54ZHAsIHhkcF9mcmFtZV9zeiwgJmFtcDtyaW5nLSZndDt4ZHBfcnhxKTsKIAogCXJ4X2N0eC5kYnVmZiA9IERJVl9ST1VORF9VUChyaW5nLSZndDtyeF9idWZfbGVuLAogCQkJCSAgICBCSVRfVUxMKEk0MEVfUlhRX0NUWF9EQlVGRl9TSElGVCkpOwpAQCAtMTM1ODIsNiAmIzQzOzEzNTg2LDUzIEBAIHN0YXRpYyBpbnQgaTQwZV94ZHAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW50IGk0MGVfeGRwX3J4X2hhc2goY29uc3Qgc3RydWN0IHhkcF9tZCAqX2N0eCwgdTMyICpoYXNoLAomIzQzOwkJCSAgICBlbnVtIHhkcF9yc3NfaGFzaF90eXBlICpyc3NfdHlwZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpNDBlX3hkcF9idWZmICpjdHggPSAoY29uc3Qgdm9pZCAqKV9jdHg7CiYjNDM7CWNvbnN0IHVuaW9uIGk0MGVfcnhfZGVzYyAqZGVzYyA9IGN0eC0mZ3Q7ZGVzYzsKJiM0MzsJc3RydWN0IGxpYmV0aF9yeF9wdCByeF9wdHlwZTsKJiM0MzsJdTggcmF3X3J4X3B0eXBlOwomIzQzOwl1NjQgc3RhdHVzOwomIzQzOwomIzQzOwlzdGF0dXMgPSBsZTY0X3RvX2NwdShkZXNjLSZndDt3Yi5xd29yZDEuc3RhdHVzX2Vycm9yX2xlbik7CiYjNDM7CXJhd19yeF9wdHlwZSA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfUFRZUEVfTUFTSywgc3RhdHVzKTsKJiM0MzsJcnhfcHR5cGUgPSBsaWJpZV9yeF9wdF9wYXJzZShyYXdfcnhfcHR5cGUpOwomIzQzOwomIzQzOwlpZiAoIWxpYmV0aF9yeF9wdF9oYXNfaGFzaChjdHgtJmd0O3hkcC5yeHEtJmd0O2RldiwgcnhfcHR5cGUpIHx8CiYjNDM7CSAgICBGSUVMRF9HRVQoSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX01BU0ssIHN0YXR1cykgIT0KJiM0MzsJCSAgICBJNDBFX1JYX0RFU0NfRkxUU1RBVF9SU1NfSEFTSCkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKJiM0MzsKJiM0MzsJKmhhc2ggPSBsZTMyX3RvX2NwdShkZXNjLSZndDt3Yi5xd29yZDAuaGlfZHdvcmQucnNzKTsKJiM0MzsJKnJzc190eXBlID0gcnhfcHR5cGUuaGFzaF90eXBlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpNDBlX3hkcF9yeF92bGFuX3RhZyhjb25zdCBzdHJ1Y3QgeGRwX21kICpfY3R4LCBfX2JlMTYgKnZsYW5fcHJvdG8sCiYjNDM7CQkJCXUxNiAqdmxhbl90Y2kpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqY3R4ID0gKGNvbnN0IHZvaWQgKilfY3R4OwomIzQzOwljb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2MgPSBjdHgtJmd0O2Rlc2M7CiYjNDM7CXU2NCBzdGF0dXM7CiYjNDM7CiYjNDM7CXN0YXR1cyA9IGxlNjRfdG9fY3B1KGRlc2MtJmd0O3diLnF3b3JkMS5zdGF0dXNfZXJyb3JfbGVuKTsKJiM0MzsKJiM0MzsJaWYgKCEoc3RhdHVzICZhbXA7IEJJVChJNDBFX1JYX0RFU0NfU1RBVFVTX0wyVEFHMVBfU0hJRlQpKSkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKJiM0MzsKJiM0MzsJKnZsYW5fcHJvdG8gPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSk7CiYjNDM7CSp2bGFuX3RjaSA9IGxlMTZfdG9fY3B1KGRlc2MtJmd0O3diLnF3b3JkMC5sb19kd29yZC5sMnRhZzEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB4ZHBfbWV0YWRhdGFfb3BzIGk0MGVfeGRwX21ldGFkYXRhX29wcyA9IHsKJiM0MzsJLnhtb19yeF9oYXNoCQk9IGk0MGVfeGRwX3J4X2hhc2gsCiYjNDM7CS54bW9fcnhfdmxhbl90YWcJPSBpNDBlX3hkcF9yeF92bGFuX3RhZywKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNDBlX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IGk0MGVfb3BlbiwKIAkubmRvX3N0b3AJCT0gaTQwZV9jbG9zZSwKQEAgLTEzNzg0LDYgJiM0MzsxMzgzNSw3IEBAIHN0YXRpYyBpbnQgaTQwZV9jb25maWdfbmV0ZGV2KHN0cnVjdCBpNDBlX3ZzaSAqdnNpKQogCWk0MGVfdnNpX2NvbmZpZ19uZXRkZXZfdGModnNpLCB2c2ktJmd0O3RjX2NvbmZpZy5lbmFibGVkX3RjKTsKIAogCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7aTQwZV9uZXRkZXZfb3BzOwomIzQzOwluZXRkZXYtJmd0O3hkcF9tZXRhZGF0YV9vcHMgPSAmYW1wO2k0MGVfeGRwX21ldGFkYXRhX29wczsKIAluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCWk0MGVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jCmluZGV4IGVmNWU2NTc4MTZmMDAuLjdmNjhhZGI1MTA5YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYwpAQCAtMjQzOCwxMCAmIzQzOzI0MzgsMTEgQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LAogCQkJICAgICB1bnNpZ25lZCBpbnQgKnJ4X2NsZWFuZWQpCiB7CiAJdW5zaWduZWQgaW50IHRvdGFsX3J4X2J5dGVzID0gMCwgdG90YWxfcnhfcGFja2V0cyA9IDA7CiYjNDM7CXN0cnVjdCBpNDBlX3hkcF9idWZmICp4ZHBfY3R4ID0gJmFtcDtyeF9yaW5nLSZndDt4ZHBfY3R4OwogCXUxNiBjbGVhbmVkX2NvdW50ID0gSTQwRV9ERVNDX1VOVVNFRChyeF9yaW5nKTsKIAl1MTYgY2xlYW5fdGhyZXNob2xkID0gcnhfcmluZy0mZ3Q7Y291bnQgLyAyOwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSByeF9yaW5nLSZndDtyeF9vZmZzZXQ7Ci0Jc3RydWN0IHhkcF9idWZmICp4ZHAgPSAmYW1wO3J4X3JpbmctJmd0O3hkcDsKJiM0MzsJc3RydWN0IHhkcF9idWZmICp4ZHAgPSAmYW1wO3hkcF9jdHgtJmd0O3hkcDsKIAl1bnNpZ25lZCBpbnQgeGRwX3htaXQgPSAwOwogCXN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2c7CiAJYm9vbCBmYWlsdXJlID0gZmFsc2U7CkBAIC0yNTMwLDYgJiM0MzsyNTMxLDggQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LAogCQlpZiAobmVvcCkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQl4ZHBfY3R4LSZndDtkZXNjID0gcnhfZGVzYzsKJiM0MzsKIAkJeGRwX3JlcyA9IGk0MGVfcnVuX3hkcChyeF9yaW5nLCB4ZHAsIHhkcF9wcm9nKTsKIAogCQlpZiAoeGRwX3JlcykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmgKaW5kZXggMWU1ZmQ2M2Q0N2Y0Ny4uYmI3NDFmZjNlNWYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oCkBAIC0yODMsNiAmIzQzOzI4MywxMSBAQCBzdHJ1Y3QgaTQwZV9yeF9idWZmZXIgewogCV9fdTMyIHBhZ2VfY291bnQ7CiB9OwogCiYjNDM7c3RydWN0IGk0MGVfeGRwX2J1ZmYgewomIzQzOwlzdHJ1Y3QgeGRwX2J1ZmYgeGRwOwomIzQzOwljb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2M7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBpNDBlX3F1ZXVlX3N0YXRzIHsKIAl1NjQgcGFja2V0czsKIAl1NjQgYnl0ZXM7CkBAIC0zNDUsNyAmIzQzOzM1MCw3IEBAIHN0cnVjdCBpNDBlX3JpbmcgewogCSAqIGFuZCB0byByZXN1bWUgcGFja2V0IGJ1aWxkaW5nIGZvciB0aGlzIHJpbmcgaW4gdGhlIG5leHQgY2FsbCB0bwogCSAqIGk0MGVfY2xlYW5fcnhfcmluZ19pcnEoKS4KIAkgKi8KLQlzdHJ1Y3QgeGRwX2J1ZmYgeGRwOwomIzQzOwlzdHJ1Y3QgaTQwZV94ZHBfYnVmZiB4ZHBfY3R4OwogCiAJLyogTmV4dCBkZXNjcmlwdG9yIHRvIGJlIHByb2Nlc3NlZDsgbmV4dF90b19jbGVhbiBpcyB1cGRhdGVkIG9ubHkgb24KIAkgKiBwcm9jZXNzaW5nIEVPUCBkZXNjcmlwdG9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R5cGUuaAppbmRleCBlZDhiYmRiNTg2ZGE5Li4xNmE2NWM2ZTUxNTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmgKQEAgLTQsNiAmIzQzOzQsNyBAQAogI2lmbmRlZiBfSTQwRV9UWVBFX0hfCiAjZGVmaW5lIF9JNDBFX1RZUEVfSF8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9pZl9ldGhlci5oJmd0OwogI2luY2x1ZGUgJiMzNDtpNDBlX2FkbWlucS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aTQwZV9obWMuaCYjMzQ7CkBAIC02OTksNiAmIzQzOzcwMCwxMCBAQCBlbnVtIGk0MGVfcnhfZGVzY19zdGF0dXNfYml0cyB7CiAJSTQwRV9SWF9ERVNDX1NUQVRVU19MQVNUIC8qIHRoaXMgZW50cnkgbXVzdCBiZSBsYXN0ISEhICovCiB9OwogCiYjNDM7I2RlZmluZSBJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfTUFTSyAgICAgICAgICAgICAgICAgICBcCiYjNDM7CUdFTk1BU0tfVUxMKEk0MEVfUlhfREVTQ19TVEFUVVNfRkxUU1RBVF9TSElGVCAmIzQzOyAxLCBcCiYjNDM7CQkgICAgSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX1NISUZUKQomIzQzOwogI2RlZmluZSBJNDBFX1JYRF9RVzFfU1RBVFVTX1NISUZUCTAKICNkZWZpbmUgSTQwRV9SWERfUVcxX1NUQVRVU19NQVNLCSgoQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTEFTVCkgLSAxKSBcCiAJCQkJCSAmbHQ7Jmx0OyBJNDBFX1JYRF9RVzFfU1RBVFVTX1NISUZUKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jCmluZGV4IDlmNDczODhlYWJhNTMuLjUxYTA1Y2U0YzdjZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMKQEAgLTI0Niw2ICYjNDM7MjQ2LDggQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KQogCXUzMiBuYl9idWZmcywgaTsKIAlkbWFfYWRkcl90IGRtYTsKIAomIzQzOwlYU0tfQ0hFQ0tfUFJJVl9UWVBFKHN0cnVjdCBpNDBlX3hkcF9idWZmKTsKJiM0MzsKIAlyeF9kZXNjID0gSTQwRV9SWF9ERVNDKHJ4X3JpbmcsIG50dSk7CiAJeGRwID0gaTQwZV9yeF9iaShyeF9yaW5nLCBudHUpOwogCkBAIC0zOTYsNiAmIzQzOzM5OCwxNCBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsCiAJV0FSTl9PTl9PTkNFKDEpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBpNDBlX3hkcF9idWZmICp4c2tfYnVmZl90b19pNDBlX2N0eChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkKJiM0Mzt7CiYjNDM7CS8qIHhkcF9idWZmIHBvaW50ZXIgdXNlZCBieSBaQyBjb2RlIHBhdGggaXMgYWxsb2NhdGVkIGFzIHhkcF9idWZmX3hzay4KJiM0MzsJICogaTQwZV94ZHBfYnVmZiBwcml2YXRlIGZpZWxkcyBvdmVybGFwIHdpdGggeGRwX2J1ZmZfeHNrLSZndDtjYi4KJiM0MzsJICovCiYjNDM7CXJldHVybiAoc3RydWN0IGk0MGVfeGRwX2J1ZmYgKil4ZHA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpNDBlX2NsZWFuX3J4X2lycV96YyAtIENvbnN1bWVzIFJ4IHBhY2tldHMgZnJvbSB0aGUgaGFyZHdhcmUgcmluZwogICogQHJ4X3Jpbmc6IFJ4IHJpbmcKQEAgLTQ3Miw2ICYjNDM7NDgyLDggQEAgaW50IGk0MGVfY2xlYW5fcnhfaXJxX3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIGludCBidWRnZXQpCiAJCWlmIChpNDBlX2lzX25vbl9lb3AocnhfcmluZywgcnhfZGVzYykpCiAJCQljb250aW51ZTsKIAomIzQzOwkJeHNrX2J1ZmZfdG9faTQwZV9jdHgoZmlyc3QpLSZndDtkZXNjID0gcnhfZGVzYzsKJiM0MzsKIAkJeGRwX3JlcyA9IGk0MGVfcnVuX3hkcF96YyhyeF9yaW5nLCBmaXJzdCwgeGRwX3Byb2cpOwogCQlpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHJ4X3JpbmcsIGZpcnN0LCByeF9kZXNjLCAmYW1wO3J4X3BhY2tldHMsCiAJCQkJCSAgJmFtcDtyeF9ieXRlcywgeGRwX3JlcywgJmFtcDtmYWlsdXJlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmMKaW5kZXggOGU5YThhODE3OGQ0OC4uYTgzZWI5ZjEwNGM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmMKQEAgLTEwMSw2ICYjNDM7MTAxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfaGVhbHRoX3N0YXR1cyBpY2VfaGVhbHRoX3N0YXR1c19sb29rdXBbXSA9IHsKIAkJJiMzNDtTdXBwbGllZCBNSUIgZmlsZSBpcyBpbnZhbGlkLiBEQ0IgcmV2ZXJ0ZWQgdG8gZGVmYXVsdCBjb25maWd1cmF0aW9uLiYjMzQ7LAogCQkmIzM0O0Rpc2FibGUgRlctTExEUCBhbmQgY2hlY2sgRENCeCBzeXN0ZW0gY29uZmlndXJhdGlvbi4mIzM0OywKIAkJe2ljZV9wb3J0X251bWJlcl9sYWJlbCwgJiMzNDtNSUIgSUQmIzM0O319LAomIzQzOwl7SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLLCAmIzM0O0xvY2FsIERQTEwgbG9jayBzdGF0dXMmIzM0OywKJiM0MzsJCU5VTEwsfSwKIH07CiAKIHN0YXRpYyBpbnQgaWNlX2hlYWx0aF9zdGF0dXNfbG9va3VwX2NvbXBhcmUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKQEAgLTI0Miw2ICYjNDM7MjQ0LDEwIEBAIHZvaWQgaWNlX3Byb2Nlc3NfaGVhbHRoX3N0YXR1c19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9ycV9ldmVudF9pbmZvCiAJCQkJcGYtJmd0O2hlYWx0aF9yZXBvcnRlcnMuZndfc3RhdHVzID0gKmhlYWx0aF9pbmZvOwogCQkJCWRldmxpbmtfaGVhbHRoX3JlcG9ydChwZi0mZ3Q7aGVhbHRoX3JlcG9ydGVycy5mdywKIAkJCQkJCSAgICAgICYjMzQ7Rlcgc3luZHJvbWUgcmVwb3J0ZWQmIzM0OywgTlVMTCk7CiYjNDM7CQkJCWlmIChzdGF0dXNfY29kZSA9PSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0sgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgdGVzdF9iaXQoSUNFX0ZMQUdfRFBMTCwgcGYtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICBwZi0mZ3Q7ZHBsbHMudW5tYW5hZ2VkKQomIzQzOwkJCQkJaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHBmLCBoZWFsdGhfaW5mbywgdHJ1ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElDRV9BUUNfSEVBTFRIX1NUQVRVU19QRjoKIAkJCWNhc2UgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX1BPUlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oCmluZGV4IDQyODc4YWJhYzllYjEuLjg0OGFjNTgzNDI5NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oCkBAIC0xNTAwLDYgJiM0MzsxNTAwLDcgQEAgc3RydWN0IGljZV9hcWNfZ2V0X2xpbmtfdG9wbyB7CiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1BDQTk1NzUJCTB4MjEKICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfWkwzMDYzMl84MDAzMgkweDI0CiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1NJNTM4M181Mzg0CTB4MjUKJiM0MzsjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDAJCTB4MjcKICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfRTgyMl9QSFkJCTB4MzAKICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfQzgyNwkJMHgzMQogI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9HRU5fQ0xLX01VWAkweDQ3CkBAIC0yNDgzLDExICYjNDM7MjQ4NCwxNCBAQCBlbnVtIGljZV9hcWNfaGVhbHRoX3N0YXR1cyB7CiAJSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9CTUNfUkVTRVQJCQk9IDB4NTBCLAogCUlDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfTEFTVF9NTkdfRkFJTAkJCT0gMHg1MEMsCiAJSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9SRVNPVVJDRV9BTExPQ19GQUlMCQk9IDB4NTBELAomIzQzOwlJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0sJCQk9IDB4NjAxLAogCUlDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfRldfTE9PUAkJCT0gMHgxMDAwLAogCUlDRV9BUUNfSEVBTFRIX1NUQVRVU19FUlJfRldfUEZSX0ZBSUwJCQk9IDB4MTAwMSwKIAlJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfRkFJTF9BUQkJCT0gMHgxMDAyLAogfTsKIAomIzQzOyNkZWZpbmUgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNCQkJCTY0CiYjNDM7CiAvKiBHZXQgSGVhbHRoIFN0YXR1cyAoaW5kaXJlY3QgMHhGRjIyKSAqLwogc3RydWN0IGljZV9hcWNfZ2V0X2hlYWx0aF9zdGF0dXMgewogCV9fbGUxNiBoZWFsdGhfc3RhdHVzX2NvdW50OwpAQCAtMjUxNCw2ICYjNDM7MjUxOCwxMyBAQCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gewogCV9fbGUzMiBpbnRlcm5hbF9kYXRhMjsKIH07CiAKJiM0MzsvKiBHZXQgSGVhbHRoIFN0YXR1cyByZXNwb25zZSBidWZmZXIgZW50cnksICgweEZGMjEpCiYjNDM7ICogcmVwZWF0ZWQgcGVyIHJlcG9ydGVkIGhlYWx0aCBzdGF0dXMKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSB7CiYjNDM7CV9fbGUxNiBoZWFsdGhfc3RhdHVzX2NvZGU7CiYjNDM7fTsKJiM0MzsKIC8qIEFkbWluIFF1ZXVlIGNvbW1hbmQgb3Bjb2RlcyAqLwogZW51bSBpY2VfYWRtaW5xX29wYyB7CiAJLyogQVEgY29tbWFuZHMgKi8KQEAgLTI2NzcsNiAmIzQzOzI2ODgsNyBAQCBlbnVtIGljZV9hZG1pbnFfb3BjIHsKIAogCS8qIFN5c3RlbSBEaWFnbm9zdGljIGNvbW1hbmRzICovCiAJaWNlX2FxY19vcGNfc2V0X2hlYWx0aF9zdGF0dXNfY2ZnCQk9IDB4RkYyMCwKJiM0MzsJaWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzCT0gMHhGRjIxLAogCWljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzCQkJPSAweEZGMjIsCiAKIAkvKiBGVyBMb2dnaW5nIENvbW1hbmRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYwppbmRleCBlZjFjZTEwNmY4MWI1Li4yYzcyZWQxODY5NWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMKQEAgLTMwNDgsNiAmIzQzOzMwNDgsMjkgQEAgYm9vbCBpY2VfaXNfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdCAtIGNoZWNrIGZvciB1bm1hbmFnZWQgQ0dVIHByZXNlbmNlCiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIENoZWNrIGlmIHRoZSB1bm1hbmFnZWQgQ2xvY2sgR2VuZXJhdGlvbiBVbml0IChDR1UpIGRldmljZSBpcyBwcmVzZW50IGluIHRoZSBuZXRsaXN0LgomIzQzOyAqIFNhdmUgdGhlIENHVSBwYXJ0IG51bWJlciBpbiB0aGUgaHcgc3RydWN0dXJlIGZvciBsYXRlciB1c2UuCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogdHJ1ZSAtIHVubWFuYWdlZCBjZ3UgaXMgcHJlc2VudAomIzQzOyAqICogZmFsc2UgLSB1bm1hbmFnZWQgY2d1IGlzIG5vdCBwcmVzZW50CiYjNDM7ICovCiYjNDM7Ym9vbCBpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KQomIzQzO3sKJiM0MzsJaWYgKCFpY2VfZmluZF9uZXRsaXN0X25vZGUoaHcsIElDRV9BUUNfTElOS19UT1BPX05PREVfVFlQRV9DTEtfQ1RSTCwKJiM0MzsJCQkJICAgSUNFX0FRQ19MSU5LX1RPUE9fTk9ERV9DVFhfR0xPQkFMLAomIzQzOwkJCQkgICBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwLAomIzQzOwkJCQkgICBOVUxMKSkgewomIzQzOwkJaHctJmd0O2NndV9wYXJ0X251bWJlciA9IElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDA7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfaXNfZ3BzX2luX25ldGxpc3QKICAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0CkBAIC02MzEyLDYgJiM0Mzs2MzM1LDExOSBAQCBib29sIGljZV9pc19md19oZWFsdGhfcmVwb3J0X3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodykKIAkJCQkgICAgIElDRV9GV19BUElfSEVBTFRIX1JFUE9SVF9QQVRDSCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXNfc3VwcG9ydGVkIC0gZ2V0IHN1cHBvcnRlZCBoZWFsdGggc3RhdHVzIGNvZGVzCiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3QKJiM0MzsgKiBAYnVmZjogcG9pbnRlciB0byBidWZmZXIgd2hlcmUgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyB3aWxsIGJlIHN0b3JlZAomIzQzOyAqIEBudW06IG51bWJlciBvZiBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIGJ1ZmZlciBjYW4gaG9sZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAtIHN1Y2Nlc3MsCiYjNDM7ICogKiBuZWdhdGl2ZSAtIEFRIGVycm9yIGNvZGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO2ljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcsCiYjNDM7CQkJCSAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtICpidWZmLAomIzQzOwkJCQkgICBpbnQgbnVtKQomIzQzO3sKJiM0MzsJdTE2IGNvZGUgPSBpY2VfYXFjX29wY19nZXRfc3VwcG9ydGVkX2hlYWx0aF9zdGF0dXNfY29kZXM7CiYjNDM7CXN0cnVjdCBsaWJpZV9hcV9kZXNjIGRlc2M7CiYjNDM7CiYjNDM7CWljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKCZhbXA7ZGVzYywgY29kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBpY2VfYXFfc2VuZF9jbWQoaHcsICZhbXA7ZGVzYywgYnVmZiwgbnVtICogc2l6ZW9mKCpidWZmKSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1cyAtIGdldCBjdXJyZW50IGhlYWx0aCBzdGF0dXMgYXJyYXkgZnJvbSB0aGUgZmlybXdhcmUKJiM0MzsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdAomIzQzOyAqIEBidWZmOiBwb2ludGVyIHRvIGJ1ZmZlciB3aGVyZSBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIHdpbGwgYmUgc3RvcmVkCiYjNDM7ICogQG51bTogbnVtYmVyIG9mIGhlYWx0aCBzdGF0dXMgZWxlbWVudHMgYnVmZmVyIGNhbiBob2xkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwIC0gc3VjY2VzcywKJiM0MzsgKiAqIG5lZ2F0aXZlIC0gQVEgZXJyb3IgY29kZS4KJiM0MzsgKi8KJiM0MztpbnQgaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzKHN0cnVjdCBpY2VfaHcgKmh3LAomIzQzOwkJCSAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpYmllX2FxX2Rlc2MgZGVzYzsKJiM0MzsKJiM0MzsJaWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoJmFtcDtkZXNjLAomIzQzOwkJCQkgICAgICBpY2VfYXFjX29wY19nZXRfaGVhbHRoX3N0YXR1cyk7CiYjNDM7CiYjNDM7CXJldHVybiBpY2VfYXFfc2VuZF9jbWQoaHcsICZhbXA7ZGVzYywgYnVmZiwgbnVtICogc2l6ZW9mKCpidWZmKSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkIC0gY2hlY2sgaWYgaGVhbHRoIHN0YXR1cyBjb2RlIGlzIHN1cHBvcnRlZAomIzQzOyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlCiYjNDM7ICogQGNvZGU6IGhlYWx0aCBzdGF0dXMgY29kZSB0byBjaGVjawomIzQzOyAqIEBzdXBwb3J0ZWQ6IHBvaW50ZXIgdG8gYm9vbGVhbiByZXN1bHQKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO2ludCBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IGNvZGUsCiYjNDM7CQkJCQlib29sICpzdXBwb3J0ZWQpCiYjNDM7ewomIzQzOwljb25zdCBpbnQgQlVGRl9TSVpFID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNOwomIzQzOwlzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSAqYnVmZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJKnN1cHBvcnRlZCA9IGZhbHNlOwomIzQzOwlidWZmID0ga3phbGxvY19vYmpzKCpidWZmLCBCVUZGX1NJWkUpOwomIzQzOwlpZiAoIWJ1ZmYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcmV0ID0gaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzX3N1cHBvcnRlZChodywgYnVmZiwgQlVGRl9TSVpFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZnJlZV9idWZmOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IEJVRkZfU0laRSAmYW1wOyZhbXA7IGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlOyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChsZTE2X3RvX2NwdShidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZSkgPT0gY29kZSkgewomIzQzOwkJCSpzdXBwb3J0ZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzO2ZyZWVfYnVmZjoKJiM0MzsJa2ZyZWUoYnVmZik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV9nZXRfbGFzdF9oZWFsdGhfc3RhdHVzX2NvZGUgLSBnZXQgbGFzdCBoZWFsdGggc3RhdHVzIGZvciBnaXZlbiBjb2RlCiYjNDM7ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAb3V0OiBwb2ludGVyIHRvIHRoZSBoZWFsdGggc3RhdHVzIHN0cnVjdCB0byBiZSBmaWxsZWQKJiM0MzsgKiBAY29kZTogaGVhbHRoIHN0YXR1cyBjb2RlIHRvIGNoZWNrCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztpbnQgaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZShzdHJ1Y3QgaWNlX2h3ICpodywKJiM0MzsJCQkJICAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqb3V0LAomIzQzOwkJCQkgICAgdTE2IGNvZGUpCiYjNDM7ewomIzQzOwljb25zdCBpbnQgQlVGRl9TSVpFID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNOwomIzQzOwlzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmY7CiYjNDM7CWludCByZXQsIGxhc3Rfc3RhdHVzID0gLTE7CiYjNDM7CiYjNDM7CWJ1ZmYgPSBremFsbG9jX29ianMoKmJ1ZmYsIEJVRkZfU0laRSk7CiYjNDM7CWlmICghYnVmZikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlyZXQgPSBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoaHcsIGJ1ZmYsIEJVRkZfU0laRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGZyZWVfYnVmZjsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBCVUZGX1NJWkUgJmFtcDsmYW1wOyBidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpZiAobGUxNl90b19jcHUoYnVmZltpXS5oZWFsdGhfc3RhdHVzX2NvZGUpID09IGNvZGUpCiYjNDM7CQkJbGFzdF9zdGF0dXMgPSBpOwomIzQzOwomIzQzOwlpZiAobGFzdF9zdGF0dXMgJmd0Oz0gMCkKJiM0MzsJCW1lbWNweShvdXQsICZhbXA7YnVmZltsYXN0X3N0YXR1c10sIHNpemVvZigqb3V0KSk7CiYjNDM7CWVsc2UKJiM0MzsJCW1lbXNldChvdXQsIDAsIHNpemVvZigqb3V0KSk7CiYjNDM7CiYjNDM7ZnJlZV9idWZmOgomIzQzOwlrZnJlZShidWZmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9hcV9zZXRfaGVhbHRoX3N0YXR1c19jZmcgLSBDb25maWd1cmUgRlcgaGVhbHRoIGV2ZW50cwogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oCmluZGV4IDlmNTM0NDIxMjE5NTUuLjUxMDM2MTg4Y2QzOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaApAQCAtMTYyLDYgJiM0MzsxNjIsNyBAQCBpY2VfYXFfZ2V0X3BoeV9jYXBzKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBxdWFsX21vZHMsIHU4IHJlcG9ydF9tb2RlLAogYm9vbCBpY2VfaXNfcGh5X3JjbGtfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7CiBib29sIGljZV9pc19jbG9ja19tdXhfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7CiBib29sIGljZV9pc19jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7CiYjNDM7Ym9vbCBpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTsKIGJvb2wgaWNlX2lzX2dwc19pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTsKIGludAogaWNlX2FxX2dldF9uZXRsaXN0X25vZGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfYXFjX2dldF9saW5rX3RvcG8gKmNtZCwKQEAgLTE4OCw2ICYjNDM7MTg5LDEzIEBAIGljZV9nZXRfbGlua19kZWZhdWx0X292ZXJyaWRlKHN0cnVjdCBpY2VfbGlua19kZWZhdWx0X292ZXJyaWRlX3RsdiAqbGRvLAogCQkJICAgICAgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpKTsKIGJvb2wgaWNlX2lzX3BoeV9jYXBzX2FuX2VuYWJsZWQoc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHMpOwogYm9vbCBpY2VfaXNfZndfaGVhbHRoX3JlcG9ydF9zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcpOwomIzQzO2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsCiYjNDM7CQkJICAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsIGludCBudW0pOwomIzQzO2ludCBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IGNvZGUsCiYjNDM7CQkJCQlib29sICpzdXBwb3J0ZWQpOwomIzQzO2ludCBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKHN0cnVjdCBpY2VfaHcgKmh3LAomIzQzOwkJCQkgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpvdXQsCiYjNDM7CQkJCSAgICB1MTYgY29kZSk7CiBpbnQgaWNlX2FxX3NldF9oZWFsdGhfc3RhdHVzX2NmZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggZXZlbnRfc291cmNlKTsKIGludCBpY2VfYXFfZ2V0X3BoeV9lcXVhbGl6YXRpb24oc3RydWN0IGljZV9odyAqaHcsIHUxNiBkYXRhX2luLCB1MTYgb3BfY29kZSwKIAkJCQl1OCBzZXJkZXNfbnVtLCBpbnQgKm91dHB1dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuYwppbmRleCBhMTBjMWM4ZDg2OTc3Li5iYjVjYzBhMmJhNjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmMKQEAgLTg3Miw3ICYjNDM7ODcyLDcgQEAgc3RhdGljIGludCBpY2VfZGNibmxfZGVsYXBwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBkY2JfYXBwICphcHApCiAJaW50IHJldCA9IDA7CiAKIAlpZiAocGYtJmd0O2RjYnhfY2FwICZhbXA7IERDQl9DQVBfRENCWF9MTERfTUFOQUdFRCkgewotCQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtjYW4mIzM5O3QgZGVsZXRlIERTQ1AgbmV0bGluayBhcHAgd2hlbiBGVyBEQ0IgYWdlbnQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtjYW4mIzM5O3QgZGVsZXRlIERTQ1AgbmV0bGluayBhcHAgd2hlbiBGVyBEQ0IgYWdlbnQgaXMgYWN0aXZlXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYwppbmRleCA4NWE3NGNkNmVhMWYzLi4xY2ExMzdmNjdkZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYwpAQCAtMTksNiAmIzQzOzE5LDggQEAKICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfU0ZQCQk0CiAjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9JTlBVVF9CQVNFX1FTRlAJCTYKICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX09VVFBVVF9CQVNFCQkwCiYjNDM7I2RlZmluZSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRAkJMQomIzQzOyNkZWZpbmUgSUNFX0RQTExfSEVBTFRIX1NUQVRVU19VTkxPQ0tFRAkJMAogCiAjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMF9QSU5fSURYCQkwCiAjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMV9QSU5fSURYCQkxCkBAIC04OSw2ICYjNDM7OTEsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2VzeW5jX3JhbmdlW10gPSB7CiAJRFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkW10gPSB7CiYjNDM7CURQTExfUElOX0ZSRVFVRU5DWV8xUFBTLAomIzQzO307CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX2lzX3N3X3BpbiAtIGNoZWNrIGlmIGdpdmVuIHBpbiBzaGFsbCBiZSBjb250cm9sbGVkIGJ5IFNXCiAgKiBAcGY6IHByaXZhdGUgYm9hcmQgc3RydWN0dXJlCkBAIC0xMDk4LDkgJiM0MzsxMTA0LDExIEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LAogCQlyZXR1cm4gLUVCVVNZOwogCiAJbXV0ZXhfbG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKLQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwLCBwaW5fdHlwZSwgZXh0YWNrKTsKLQlpZiAocmV0KQotCQlnb3RvIHVubG9jazsKJiM0MzsJaWYgKCFwZi0mZ3Q7ZHBsbHMudW5tYW5hZ2VkKSB7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwLCBwaW5fdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CX0KIAlpZiAocGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQgfHwKIAkgICAgcGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUKQogCQkqc3RhdGUgPSBwLSZndDtzdGF0ZVtkLSZndDtkcGxsX2lkeF07CkBAIC0yMjQzLDkgJiM0MzsyMjUxLDE0IEBAIGljZV9kcGxsX2lucHV0X2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLQllc3luYy0mZ3Q7cmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2U7Ci0JZXN5bmMtJmd0O3JhbmdlX251bSA9IEFSUkFZX1NJWkUoaWNlX2VzeW5jX3JhbmdlKTsKLQlpZiAocC0mZ3Q7ZmxhZ3NbMF0gJmFtcDsgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOKSB7CiYjNDM7CWlmIChwZi0mZ3Q7ZHBsbHMudW5tYW5hZ2VkKSB7CiYjNDM7CQllc3luYy0mZ3Q7cmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkOwomIzQzOwkJZXN5bmMtJmd0O3JhbmdlX251bSA9IEFSUkFZX1NJWkUoaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllc3luYy0mZ3Q7cmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2U7CiYjNDM7CQllc3luYy0mZ3Q7cmFuZ2VfbnVtID0gQVJSQVlfU0laRShpY2VfZXN5bmNfcmFuZ2UpOwomIzQzOwl9CiYjNDM7CWlmIChwLSZndDtmbGFnc1swXSAmYW1wOyBJQ0VfRFBMTF9JTl9FU1lOQ19FTkFCTEVEKSB7CiAJCWVzeW5jLSZndDtmcmVxID0gRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFo7CiAJCWVzeW5jLSZndDtwdWxzZSA9IElDRV9EUExMX1BJTl9FU1lOQ19QVUxTRV9ISUdIX1BFUkNFTlQ7CiAJfSBlbHNlIHsKQEAgLTI4NzYsNiAmIzQzOzI4ODksMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgaWNlX2RwbGxfb3V0cHV0X29wcyA9IHsKIAkuZXN5bmNfZ2V0ID0gaWNlX2RwbGxfb3V0cHV0X2VzeW5jX2dldCwKIH07CiAKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzID0gewomIzQzOwkuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX2lucHV0X2ZyZXF1ZW5jeV9nZXQsCiYjNDM7CS5kaXJlY3Rpb25fZ2V0ID0gaWNlX2RwbGxfaW5wdXRfZGlyZWN0aW9uLAomIzQzOwkuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQsCiYjNDM7CS5lc3luY19nZXQgPSBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyA9IHsKJiM0MzsJLmZyZXF1ZW5jeV9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfZnJlcXVlbmN5X2dldCwKJiM0MzsJLmRpcmVjdGlvbl9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfZGlyZWN0aW9uLAomIzQzOwkuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfc3RhdGVfZ2V0LAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyBpY2VfZHBsbF9vcHMgPSB7CiAJLmxvY2tfc3RhdHVzX2dldCA9IGljZV9kcGxsX2xvY2tfc3RhdHVzX2dldCwKIAkubW9kZV9nZXQgPSBpY2VfZHBsbF9tb2RlX2dldCwKQEAgLTM0MzksOCAmIzQzOzM0NjUsMTAgQEAgaWNlX2RwbGxfZGVpbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSwKIAkJCSAgICBzdHJ1Y3QgZHBsbF9kZXZpY2UgKnNlY29uZCkKIHsKIAlpZiAoY2d1KSB7Ci0JCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7Ci0JCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpOwomIzQzOwkJaWYgKGZpcnN0KQomIzQzOwkJCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7CiYjNDM7CQlpZiAoc2Vjb25kKQomIzQzOwkJCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpOwogCX0KIAlpY2VfZHBsbF9yZWxlYXNlX3BpbnMocGlucywgY291bnQpOwogfQpAQCAtMzQ3MiwxMiAmIzQzOzM1MDAsMTUgQEAgaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsCiAJaW50IHJldDsKIAogCXJldCA9IGljZV9kcGxsX2dldF9waW5zKHBmLCBwaW5zLCBzdGFydF9pZHgsIGNvdW50LCBwZi0mZ3Q7ZHBsbHMuY2xvY2tfaWQpOwotCWlmIChyZXQpCiYjNDM7CWlmICghY2d1IHx8IHJldCkKIAkJcmV0dXJuIHJldDsKLQlpZiAoY2d1KSB7CiYjNDM7CiYjNDM7CWlmIChmaXJzdCkgewogCQlyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gcmVsZWFzZV9waW5zOwomIzQzOwl9CiYjNDM7CWlmIChzZWNvbmQpIHsKIAkJcmV0ID0gaWNlX2RwbGxfcmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpOwogCQlpZiAocmV0KQogCQkJZ290byB1bnJlZ2lzdGVyX2ZpcnN0OwpAQCAtMzQ4Niw3ICYjNDM7MzUxNyw4IEBAIGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LAogCXJldHVybiAwOwogCiB1bnJlZ2lzdGVyX2ZpcnN0OgotCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7CiYjNDM7CWlmIChmaXJzdCkKJiM0MzsJCWljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7CiByZWxlYXNlX3BpbnM6CiAJaWNlX2RwbGxfcmVsZWFzZV9waW5zKHBpbnMsIGNvdW50KTsKIAlyZXR1cm4gcmV0OwpAQCAtMzgyNCw2ICYjNDM7Mzg1NiwxOCBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpCiAJc3RydWN0IGljZV9kcGxsICpkZSA9ICZhbXA7ZC0mZ3Q7ZWVjOwogCXN0cnVjdCBpY2VfZHBsbCAqZHAgPSAmYW1wO2QtJmd0O3BwczsKIAomIzQzOwlpZiAoZC0mZ3Q7dW5tYW5hZ2VkKSB7CiYjNDM7CQlpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtJmd0O2RwbGwsIGlucHV0cywKJiM0MzsJCQkJCSAmYW1wO2ljZV9kcGxsX2lucHV0X3VubWFuYWdlZF9vcHMsCiYjNDM7CQkJCQkgbnVtX2lucHV0cyk7CiYjNDM7CQlpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtJmd0O2RwbGwsIG91dHB1dHMsCiYjNDM7CQkJCQkgJmFtcDtpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcywKJiM0MzsJCQkJCSBudW1fb3V0cHV0cyk7CiYjNDM7CQlpY2VfZHBsbF9yZWxlYXNlX3BpbnMoaW5wdXRzLCBudW1faW5wdXRzKTsKJiM0MzsJCWljZV9kcGxsX3JlbGVhc2VfcGlucyhvdXRwdXRzLCBudW1fb3V0cHV0cyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlpY2VfZHBsbF9kZWluaXRfcmNsa19waW4ocGYpOwogCWlmIChwZi0mZ3Q7aHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHsKIAkJaWNlX2RwbGxfZGVpbml0X3R4Y2xrX3BpbnMocGYpOwpAQCAtNDA4MiwyMyAmIzQzOzQxMjYsMjkgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KQogCWNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKmlucHV0X29wczsKIAlpbnQgcmV0LCBjb3VudDsKIAotCWlucHV0X29wcyA9ICZhbXA7aWNlX2RwbGxfaW5wdXRfb3BzOwotCW91dHB1dF9vcHMgPSAmYW1wO2ljZV9kcGxsX291dHB1dF9vcHM7CiYjNDM7CWlmICghcGYtJmd0O2RwbGxzLnVubWFuYWdlZCkgewomIzQzOwkJaW5wdXRfb3BzID0gJmFtcDtpY2VfZHBsbF9pbnB1dF9vcHM7CiYjNDM7CQlvdXRwdXRfb3BzID0gJmFtcDtpY2VfZHBsbF9vdXRwdXRfb3BzOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaW5wdXRfb3BzID0gJmFtcDtpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzOwomIzQzOwkJb3V0cHV0X29wcyA9ICZhbXA7aWNlX2RwbGxfb3V0cHV0X3VubWFuYWdlZF9vcHM7CiYjNDM7CX0KIAogCXJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtJmd0O2RwbGxzLmlucHV0cywgMCwKIAkJCQkJcGYtJmd0O2RwbGxzLm51bV9pbnB1dHMsIGlucHV0X29wcywKLQkJCQkJcGYtJmd0O2RwbGxzLmVlYy5kcGxsLAotCQkJCQlwZi0mZ3Q7ZHBsbHMucHBzLmRwbGwpOwomIzQzOwkJCQkJcGYtJmd0O2RwbGxzLmVlYy5kcGxsLCBwZi0mZ3Q7ZHBsbHMucHBzLmRwbGwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJY291bnQgPSBwZi0mZ3Q7ZHBsbHMubnVtX2lucHV0czsKLQlpZiAoY2d1KSB7CiYjNDM7CWlmIChjZ3UgfHwgcGYtJmd0O2RwbGxzLnVubWFuYWdlZCkgewogCQlyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLSZndDtkcGxscy5vdXRwdXRzLAogCQkJCQkJY291bnQsIHBmLSZndDtkcGxscy5udW1fb3V0cHV0cywKIAkJCQkJCW91dHB1dF9vcHMsIHBmLSZndDtkcGxscy5lZWMuZHBsbCwKIAkJCQkJCXBmLSZndDtkcGxscy5wcHMuZHBsbCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGRlaW5pdF9pbnB1dHM7CiYjNDM7CQlpZiAocGYtJmd0O2RwbGxzLnVubWFuYWdlZCkKJiM0MzsJCQlyZXR1cm4gMDsKIAkJY291bnQgJiM0Mzs9IHBmLSZndDtkcGxscy5udW1fb3V0cHV0czsKIAkJaWYgKCFwZi0mZ3Q7ZHBsbHMuZ2VuZXJpYykgewogCQkJcmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi0mZ3Q7ZHBsbHMuc21hLApAQCAtNDIwNiwxMiAmIzQzOzQyNTYsMTMgQEAgaWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LAogCQlyZXR1cm4gcmV0OwogCX0KIAlkLSZndDtwZiA9IHBmOwotCWlmIChjZ3UgfHwgcGYtJmd0O2h3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7CiYjNDM7CWlmIChjZ3UgfHwgcGYtJmd0O2RwbGxzLnVubWFuYWdlZCB8fAomIzQzOwkgICAgcGYtJmd0O2h3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7CiAJCWNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcyA9ICZhbXA7aWNlX2RwbGxfb3BzOwogCiAJCWlmICh0eXBlID09IERQTExfVFlQRV9QUFMgJmFtcDsmYW1wOyBpY2VfZHBsbF9pc19wcHNfcGhhc2VfbW9uaXRvcihwZikpCiAJCQlvcHMgPSAgJmFtcDtpY2VfZHBsbF9wb21fb3BzOwotCQlpZiAoY2d1KQomIzQzOwkJaWYgKGNndSAmYW1wOyZhbXA7ICFwZi0mZ3Q7ZHBsbHMudW5tYW5hZ2VkKQogCQkJaWNlX2RwbGxfdXBkYXRlX3N0YXRlKHBmLCBkLCB0cnVlKTsKIAkJcmV0ID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoZC0mZ3Q7ZHBsbCwgdHlwZSwgb3BzLCBkKTsKIAkJaWYgKHJldCkgewpAQCAtNDIzOSw2ICYjNDM7NDI5MCwzMyBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfd29ya2VyKHN0cnVjdCBpY2VfcGYgKnBmKQogCWt0aHJlYWRfZGVzdHJveV93b3JrZXIoZC0mZ3Q7a3dvcmtlcik7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9waW5fZnJlcV9pbmZvIC0gZmluZCBwaW4gZnJlcXVlbmN5IGZyb20gc3VwcG9ydGVkIG9uZXMKJiM0MzsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZQomIzQzOyAqIEBwaW5faWR4OiBwaW4gaW5kZXgKJiM0MzsgKiBAaW5wdXQ6IGlmIGlucHV0IHBpbgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyB0aHJvdWdoIHRoZSBhcnJheSBvZiBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMgZm9yIGEKJiM0MzsgKiBEUExMIHBpbiBhbmQgcmV0dXJucyBzaW5nbGUgZnJlcXVlbmN5IHBpbiBpcyBjYXBhYmxlLCBpZiBwaW4gc3VwcG9ydCBvbmx5CiYjNDM7ICogb25lIGZyZXF1ZW5jeS4gU2hhbGwgYmUgdXNlZCBvbmx5IGZvciBkcGxsIHdpdGggZHJpdmVyIGhhcmRjb2RlZCBmcmVxdWVuY3kuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwIC0gZmFpbHVyZSwgcGluIHVzZXMgbXVsdGlwbGUgZnJlcXVlbmNpZXMsCiYjNDM7ICogKiBmcmVxdWVuY3kgLSBzdWNjZXNzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1NjQgaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluX2lkeCwgYm9vbCBpbnB1dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKmZyZXFzOwomIzQzOwl1OCBmcmVxX251bTsKJiM0MzsKJiM0MzsJLyogR2V0IHN1cHBvcnRlZCBmcmVxdWVuY2llcyBmb3IgdGhpcyBwaW4gKi8KJiM0MzsJZnJlcXMgPSBpY2VfY2d1X2dldF9waW5fZnJlcV9zdXBwKGh3LCBwaW5faWR4LCBpbnB1dCwgJmFtcDtmcmVxX251bSk7CiYjNDM7CWlmICghZnJlcXMgfHwgZnJlcV9udW0gIT0gMSB8fCBmcmVxc1swXS5taW4gIT0gZnJlcXNbMF0ubWF4KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBmcmVxc1swXS5taW47CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyCiAgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC00Mzk4LDYgJiM0Mzs0NDc2LDE5IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwKIAkJcGluc1tpXS5wcm9wLmJvYXJkX2xhYmVsID0gaWNlX2NndV9nZXRfcGluX25hbWUoaHcsIGksIGlucHV0KTsKIAkJcGluc1tpXS5wcm9wLnR5cGUgPSBpY2VfY2d1X2dldF9waW5fdHlwZShodywgaSwgaW5wdXQpOwogCQlpZiAoaW5wdXQpIHsKJiM0MzsJCQlpZiAocGYtJmd0O2RwbGxzLnVubWFuYWdlZCkgewomIzQzOwkJCQlwaW5zW2ldLmZyZXEgPSBpY2VfZHBsbF9waW5fZnJlcV9pbmZvKGh3LCBpLAomIzQzOwkJCQkJCQkJICAgICAgaW5wdXQpOwomIzQzOwkJCQlwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOwomIzQzOwkJCQlwaW5zW2ldLnN0YXR1cyA9CiYjNDM7CQkJCQlJQ0VfQVFDX0dFVF9DR1VfSU5fQ0ZHX1NUQVRVU19FU1lOQ19DQVA7CiYjNDM7CQkJCXBpbnNbaV0uZmxhZ3NbMF0gPSBJQ0VfRFBMTF9JTl9FU1lOQ19FTkFCTEVEOwomIzQzOwkJCQkvKiBza2lwIHByaW9yaXR5LCBjYXBhYmlsaXRpZXMsIHBoYXNlIHJhbmdlLAomIzQzOwkJCQkgKiBwaW4gc3RhdGUgQVEgcXVlcnkgYW5kIGZyZXFfc3VwcG9ydGVkIC0KJiM0MzsJCQkJICogbm90IGF2YWlsYWJsZSBmb3IgdW5tYW5hZ2VkIERQTEwKJiM0MzsJCQkJICovCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJCXJldCA9IGljZV9hcV9nZXRfY2d1X3JlZl9wcmlvKGh3LCBkZS0mZ3Q7ZHBsbF9pZHgsIGksCiAJCQkJCQkgICAgICAmYW1wO2RlLSZndDtpbnB1dF9wcmlvW2ldKTsKIAkJCWlmIChyZXQpCkBAIC00NDExLDYgJiM0Mzs0NTAyLDE2IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwKIAkJCWlmIChpY2VfZHBsbF9pc19zd19waW4ocGYsIGksIHRydWUpKQogCQkJCXBpbnNbaV0uaGlkZGVuID0gdHJ1ZTsKIAkJfSBlbHNlIHsKJiM0MzsJCQlpZiAocGYtJmd0O2RwbGxzLnVubWFuYWdlZCkgewomIzQzOwkJCQlwaW5zW2ldLmZyZXEgPSBpY2VfZHBsbF9waW5fZnJlcV9pbmZvKGh3LCBpLAomIzQzOwkJCQkJCQkJICAgICAgaW5wdXQpOwomIzQzOwkJCQlwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOwomIzQzOwkJCQkvKiBza2lwIG91dHB1dCBzdGF0ZSBjYXBzLCBwaGFzZSByYW5nZSwKJiM0MzsJCQkJICogcGluIHN0YXRlIEFRIHF1ZXJ5IGFuZCBmcmVxX3N1cHBvcnRlZCAtCiYjNDM7CQkJCSAqIG5vdCBhdmFpbGFibGUgZm9yIHVubWFuYWdlZCBEUExMCiYjNDM7CQkJCSAqLwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiAJCQlyZXQgPSBpY2VfY2d1X2dldF9vdXRwdXRfcGluX3N0YXRlX2NhcHMoaHcsIGksICZhbXA7Y2Fwcyk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CkBAIC00NDI4LDEwICYjNDM7NDUyOSwxMyBAQCBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsCiAJCXBpbnNbaV0ucHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtOwogCQlwaW5zW2ldLnBmID0gcGY7CiAJfQotCWlmIChpbnB1dCkKJiM0MzsJaWYgKGlucHV0ICZhbXA7JmFtcDsgIXBmLSZndDtkcGxscy51bm1hbmFnZWQpIHsKIAkJcmV0ID0gaWNlX2RwbGxfaW5pdF9yZWZfc3luY19pbnB1dHMocGYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC00NzEyLDYgJiM0Mzs0ODE2LDgyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjKHN0cnVjdCBpY2VfcGYgKnBmKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9sb2NrX3N0YXRlX2luaXRfdW5tYW5hZ2VkIC0gaW5pdGlhbGl6ZSBsb2NrIHN0YXRlIGZvciB1bm1hbmFnZWQgZHBsbAomIzQzOyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIEluaXRpYWxpemUgdGhlIGxvY2sgc3RhdGUgZm9yIHVubWFuYWdlZCBEUExMIGJ5IGNoZWNraW5nIGhlYWx0aCBzdGF0dXMuCiYjNDM7ICogRm9yIHVubWFuYWdlZCBEUExMLCB3ZSByZWx5IG9uIGhhcmR3YXJlIGF1dG9ub21vdXMgb3BlcmF0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAtIHN1Y2Nlc3MKJiM0MzsgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvbgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZikKJiM0Mzt7CiYjNDM7CXUxNiBjb2RlID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLOwomIzQzOwlzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gYnVmZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gaWNlX2dldF9sYXN0X2hlYWx0aF9zdGF0dXNfY29kZSgmYW1wO3BmLSZndDtodywgJmFtcDtidWZmLCBjb2RlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChwZiwgJmFtcDtidWZmLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQgLSBpbml0IGRwbGwgaW5mb3JtYXRpb24gZm9yIHVubWFuYWdlZCBkcGxsCiYjNDM7ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogQWNxdWlyZSAoZnJvbSBIVykgYW5kIHNldCBiYXNpYyBkcGxsIGluZm9ybWF0aW9uIChvbiBwZi0mZ3Q7ZHBsbHMgc3RydWN0KS4KJiM0MzsgKiBGb3IgdW5tYW5hZ2VkIGRwbGwgbW9kZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgLSBzdWNjZXNzCiYjNDM7ICogKiBuZWdhdGl2ZSAtIGluaXQgZmFpbHVyZSByZWFzb24KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNlX2RwbGxzICpkID0gJmFtcDtwZi0mZ3Q7ZHBsbHM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWQtJmd0O2Nsb2NrX2lkID0gaWNlX2dlbmVyYXRlX2Nsb2NrX2lkKHBmKTsKJiM0MzsJZC0mZ3Q7bnVtX2lucHV0cyA9IGljZV9jZ3VfZ2V0X3Bpbl9udW0oJmFtcDtwZi0mZ3Q7aHcsIHRydWUpOwomIzQzOwlkLSZndDtudW1fb3V0cHV0cyA9IGljZV9jZ3VfZ2V0X3Bpbl9udW0oJmFtcDtwZi0mZ3Q7aHcsIGZhbHNlKTsKJiM0MzsJcmV0ID0gaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChwZik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlkLSZndDtpbnB1dHMgPSBremFsbG9jX29ianMoKmQtJmd0O2lucHV0cywgZC0mZ3Q7bnVtX2lucHV0cyk7CiYjNDM7CWlmICghZC0mZ3Q7aW5wdXRzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGRlaW5pdF9pbmZvOwomIzQzOwomIzQzOwlkLSZndDtvdXRwdXRzID0ga3phbGxvY19vYmpzKCpkLSZndDtvdXRwdXRzLCBkLSZndDtudW1fb3V0cHV0cyk7CiYjNDM7CWlmICghZC0mZ3Q7b3V0cHV0cykgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZGVpbml0X2luZm87CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGRlaW5pdF9pbmZvOwomIzQzOwomIzQzOwlkLSZndDtwcHMubW9kZSA9IERQTExfTU9ERV9NQU5VQUw7CiYjNDM7CWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7JXMgLSBzdWNjZXNzLCBpbnB1dHM6JXUsIG91dHB1dHM6JXVcbiYjMzQ7LAomIzQzOwkJX19mdW5jX18sIGQtJmd0O251bV9pbnB1dHMsIGQtJmd0O251bV9vdXRwdXRzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7ZGVpbml0X2luZm86CiYjNDM7CWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7JXMgLSBmYWlsOiBkLSZndDtpbnB1dHM6JXAsIGQtJmd0O291dHB1dHM6JXBcbiYjMzQ7LAomIzQzOwkJX19mdW5jX18sIGQtJmd0O2lucHV0cywgZC0mZ3Q7b3V0cHV0cyk7CiYjNDM7CWljZV9kcGxsX2RlaW5pdF9pbmZvKHBmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX2luaXRfaW5mbyAtIHByZXBhcmUgcGYmIzM5O3MgZHBsbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTQ4MTUsNiAmIzQzOzQ5OTUsNDIgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm8oc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQgLSBkZXRlcm1pbmUgbG9jayBzdGF0ZSBmcm9tIGhlYWx0aCBzdGF0dXMKJiM0MzsgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICogQGJ1ZmY6IGhlYWx0aCBzdGF0dXMgYnVmZmVyCiYjNDM7ICogQG5vdGlmeTogaWYgdHJ1ZSwgbm90aWZ5IGRwbGwgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBTZXQgdW5tYW5hZ2VkIGRwbGwgbG9jayBzdGF0ZSBiYXNlZCBvbiBoZWFsdGggc3RhdHVzIGNvZGUgYW5kIGludGVybmFsIGRhdGEuCiYjNDM7ICogQ29udGV4dDogQWNxdWlyZXMgYW5kIHJlbGVhc2VzIHBmLSZndDtkcGxscy5sb2NrIChtdXN0IHJlbGVhc2UgYmVmb3JlIG5vdGlmeQomIzQzOyAqIGlmIGNhbGxlZCkuCiYjNDM7ICovCiYjNDM7dm9pZCBpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsCiYjNDM7CQkJCSAgICAgICBib29sIG5vdGlmeSkKJiM0Mzt7CiYjNDM7CXUzMiBpbnRlcm5hbF9kYXRhID0gbGUzMl90b19jcHUoYnVmZi0mZ3Q7aW50ZXJuYWxfZGF0YTEpOwomIzQzOwlzdHJ1Y3QgaWNlX2RwbGwgKmQgPSAmYW1wO3BmLSZndDtkcGxscy5wcHM7CiYjNDM7CiYjNDM7CWlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwomIzQzOwlpZiAoYnVmZi0mZ3Q7aGVhbHRoX3N0YXR1c19jb2RlID09IDAgfHwKJiM0MzsJICAgIGludGVybmFsX2RhdGEgPT0gSUNFX0RQTExfSEVBTFRIX1NUQVRVU19MT0NLRUQpCiYjNDM7CQlkLSZndDtkcGxsX3N0YXRlID0gRFBMTF9MT0NLX1NUQVRVU19MT0NLRUQ7CiYjNDM7CWVsc2UKJiM0MzsJCWQtJmd0O2RwbGxfc3RhdGUgPSBEUExMX0xPQ0tfU1RBVFVTX1VOTE9DS0VEOwomIzQzOwomIzQzOwlpZiAoZC0mZ3Q7cHJldl9kcGxsX3N0YXRlID09IGQtJmd0O2RwbGxfc3RhdGUpCiYjNDM7CQlub3RpZnkgPSBmYWxzZTsKJiM0MzsJZWxzZQomIzQzOwkJZC0mZ3Q7cHJldl9kcGxsX3N0YXRlID0gZC0mZ3Q7ZHBsbF9zdGF0ZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwomIzQzOwlpZiAobm90aWZ5ICZhbXA7JmFtcDsgZC0mZ3Q7ZHBsbCkKJiM0MzsJCWRwbGxfZGV2aWNlX2NoYW5nZV9udGYoZC0mZ3Q7ZHBsbCk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfZHBsbF9kZWluaXQgLSBEaXNhYmxlIHRoZSBkcml2ZXIvSFcgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW0KICAqIHRoZSBkcGxsIGRldmljZS4KQEAgLTQ4NTQsOSAmIzQzOzUwNzAsMTAgQEAgdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpCiAJaWYgKHBmLSZndDtody5tYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSkKIAkJY2FuY2VsX3dvcmtfc3luYygmYW1wO3BmLSZndDtkcGxscy50eGNsa193b3JrKTsKIAotCWljZV9kcGxsX2RlaW5pdF9waW5zKHBmLCBjZ3UpOwomIzQzOwlpY2VfZHBsbF9kZWluaXRfcGlucyhwZiwgY2d1IHx8IHBmLSZndDtkcGxscy51bm1hbmFnZWQpOwogCWlmICghSVNfRVJSX09SX05VTEwocGYtJmd0O2RwbGxzLnBwcy5kcGxsKSkKLQkJaWNlX2RwbGxfZGVpbml0X2RwbGwocGYsICZhbXA7cGYtJmd0O2RwbGxzLnBwcywgY2d1KTsKJiM0MzsJCWljZV9kcGxsX2RlaW5pdF9kcGxsKHBmLCAmYW1wO3BmLSZndDtkcGxscy5wcHMsCiYjNDM7CQkJCSAgICAgY2d1IHx8IHBmLSZndDtkcGxscy51bm1hbmFnZWQpOwogCWlmICghSVNfRVJSX09SX05VTEwocGYtJmd0O2RwbGxzLmVlYy5kcGxsKSkKIAkJaWNlX2RwbGxfZGVpbml0X2RwbGwocGYsICZhbXA7cGYtJmd0O2RwbGxzLmVlYywgY2d1KTsKIAlpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLSZndDtkcGxscy50eGMuZHBsbCkpCkBAIC00ODY2LDYgJiM0Mzs1MDgzLDQ1IEBAIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKQogCW11dGV4X2Rlc3Ryb3koJmFtcDtwZi0mZ3Q7ZHBsbHMubG9jayk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9pbml0X3VubWFuYWdlZCAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgdW5tYW5hZ2VkIGRwbGwgc3Vic3lzdGVtCiYjNDM7ICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogU2V0IHVwIHRoZSBkZXZpY2UgZHBsbHMgZm9yIHVubWFuYWdlZCBtb2RlLCByZWdpc3RlciB0aGVtIGFuZCBwaW5zIGNvbm5lY3RlZAomIzQzOyAqIHdpdGhpbiBMaW51eCBkcGxsIHN1YnN5c3RlbS4gQWxsb3cgdXNlcnNwYWNlIHRvIG9idGFpbiBzdGF0ZSBvZiBEUExMLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogSW5pdGlhbGl6ZXMgcGYtJmd0O2RwbGxzLmxvY2sgbXV0ZXguCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWNlX2RwbGxzICpkID0gJmFtcDtwZi0mZ3Q7ZHBsbHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZC0mZ3Q7bG9jayk7CiYjNDM7CWVyciA9IGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQocGYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZXhpdDsKJiM0MzsJZXJyID0gaWNlX2RwbGxfaW5pdF9kcGxsKHBmLCAmYW1wO3BmLSZndDtkcGxscy5wcHMsIHRydWUsIERQTExfVFlQRV9QUFMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBkZWluaXRfaW5mbzsKJiM0MzsJZXJyID0gaWNlX2RwbGxfaW5pdF9waW5zKHBmLCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVpbml0X3BwczsKJiM0MzsJc2V0X2JpdChJQ0VfRkxBR19EUExMLCBwZi0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7ZGVpbml0X3BwczoKJiM0MzsJaWNlX2RwbGxfZGVpbml0X2RwbGwocGYsICZhbXA7cGYtJmd0O2RwbGxzLnBwcywgdHJ1ZSk7CiYjNDM7ZGVpbml0X2luZm86CiYjNDM7CWljZV9kcGxsX2RlaW5pdF9pbmZvKHBmKTsKJiM0MztlcnJfZXhpdDoKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2QtJmd0O2xvY2spOwomIzQzOwlkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtEUExMcyBpbml0IGZhaWx1cmUgZXJyOiVkXG4mIzM0OywgZXJyKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX2luaXRfZTgyNSAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW0KICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTQ5NzUsOCAmIzQzOzUyMzEsMjMgQEAgc3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF9lODEwKHN0cnVjdCBpY2VfcGYgKnBmKQogCWRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCAmIzM0O0RQTExzIGluaXQgZmFpbHVyZSBlcnI6JWRcbiYjMzQ7LCBlcnIpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWNlX2RwbGxfaW5pdCAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW0KJiM0MzsgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBTZXQgdXAgdGhlIGRldmljZSBkcGxscywgcmVnaXN0ZXIgdGhlbSBhbmQgcGlucyBjb25uZWN0ZWQgd2l0aGluIExpbnV4IGRwbGwKJiM0MzsgKiBzdWJzeXN0ZW0uIEFsbG93IHVzZXJzcGFjZSB0byBvYnRhaW4gc3RhdGUgb2YgRFBMTCBhbmQgaGFuZGxpbmcgb2YgRFBMTAomIzQzOyAqIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi0mZ3Q7ZHBsbHMubG9jayBtdXRleC4KJiM0MzsgKi8KIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikKIHsKJiM0MzsJaWYgKHBmLSZndDtkcGxscy51bm1hbmFnZWQpIHsKJiM0MzsJCWljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHBmKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAocGYtJmd0O2h3Lm1hY190eXBlKSB7CiAJY2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNToKIAkJaWNlX2RwbGxfaW5pdF9lODI1KHBmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgKaW5kZXggMTAzYmEzZTQ5MDY4Mi4uYzU5ZDc0NmE4NTY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgKQEAgLTI2LDYgJiM0MzsyNiw4IEBACiAjZGVmaW5lIElDRV9DR1VfUjExX1NZTkNFX1NfQllQX0NMSwlHRU5NQVNLKDYsIDEpCiAKICNkZWZpbmUgSUNFX0NHVV9CWVBBU1NfTVVYX09GRlNFVF9FODI1QwkzCiYjNDM7I2RlZmluZSBJQ0VfRFBMTF9VTk1BTkFHRURfUElOX05VTQk0CiYjNDM7I2RlZmluZSBJQ0VfRFBMTF9JTl9FU1lOQ19FTkFCTEVECUlDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9FU1lOQ19FTgogCiAvKioKICAqIGVudW0gaWNlX2RwbGxfcGluX3N3IC0gZW51bWVyYXRlIGljZSBzb2Z0d2FyZSBwaW4gaW5kaWNlczoKQEAgLTE5Myw2ICYjNDM7MTk1LDcgQEAgc3RydWN0IGljZV9kcGxscyB7CiAJczMyIG91dHB1dF9waGFzZV9hZGpfbWF4OwogCXUzMiBwZXJpb2RpY19jb3VudGVyOwogCWJvb2wgZ2VuZXJpYzsKJiM0MzsJYm9vbCB1bm1hbmFnZWQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4Y2xrX3dvcms7CiAJYm9vbCB0eGNsa19zd2l0Y2hfcmVxdWVzdGVkOwogCXN0cnVjdCByd19zZW1hcGhvcmUgdHhjbGtfbm90aWZ5X3J3c2VtOwpAQCAtMjAxLDkgJiM0MzsyMDQsMTYgQEAgc3RydWN0IGljZV9kcGxscyB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUFRQXzE1ODhfQ0xPQ0spCiB2b2lkIGljZV9kcGxsX2luaXQoc3RydWN0IGljZV9wZiAqcGYpOwogdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpOwomIzQzO3ZvaWQgaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLAomIzQzOwkJCQkgICAgICAgYm9vbCBub3RpZnkpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfZHBsbF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZAomIzQzO2ljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZiwKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsCiYjNDM7CQkJCSAgYm9vbCBub3RpZnkpIHsgfQogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKaW5kZXggOGNkYzRmZGE4OWU5Ny4uZmM5ZDRlMGZhNzU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jCkBAIC0xNDE1LDYgJiM0MzsxNDE1LDEwIEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9hbGxvY19yaW5ncyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQkJc2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwgcmluZy0mZ3Q7ZmxhZ3MpOwogCQllbHNlCiAJCQlzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLSZndDtmbGFncyk7CiYjNDM7CiYjNDM7CQlpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpKQomIzQzOwkJCXNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfR0NTLCByaW5nLSZndDtmbGFncyk7CiYjNDM7CiAJCVdSSVRFX09OQ0UodnNpLSZndDt0eF9yaW5nc1tpXSwgcmluZyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCmluZGV4IGQ4ODgzNTQ4MmQzYWEuLmZlZmJjNTFjNzE5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jCkBAIC0zNDI4LDcgJiM0MzszNDI4LDcgQEAgc3RhdGljIGludCBpY2VfcmVxX2lycV9tc2l4X21pc2Moc3RydWN0IGljZV9wZiAqcGYpCiAJCSAgICAgKChwZi0mZ3Q7bGxfdHNfaXJxLmluZGV4ICYjNDM7IHBmX2ludHJfc3RhcnRfb2Zmc2V0KSAmYW1wOwogCQkgICAgICBQRklOVF9TQl9DVExfTVNJWF9JTkRYX00pIHwgUEZJTlRfU0JfQ1RMX0NBVVNFX0VOQV9NKTsKIAl3cjMyKGh3LCBHTElOVF9JVFIoSUNFX1JYX0lUUiwgcGYtJmd0O29pY3JfaXJxLmluZGV4KSwKLQkgICAgIElUUl9SRUdfQUxJR04oSUNFX0lUUl84SykgJmd0OyZndDsgSUNFX0lUUl9HUkFOX1MpOwomIzQzOwkgICAgIElUUl9SRUdfQUxJR04oSUNFX0lUUl8yMEspICZndDsmZ3Q7IElDRV9JVFJfR1JBTl9TKTsKIAogCWljZV9mbHVzaChodyk7CiAJaWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7CkBAIC0zNDkxLDkgJiM0MzszNDkxLDggQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQkJTkVUSUZfRl9SWEhBU0g7CiAKIAljc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNCSAgfAotCQkJIE5FVElGX0ZfSVBfQ1NVTSAgfAogCQkJIE5FVElGX0ZfU0NUUF9DUkMgfAotCQkJIE5FVElGX0ZfSVBWNl9DU1VNOwomIzQzOwkJCSBORVRJRl9GX0hXX0NTVU07CiAKIAl2bGFub19mZWF0dXJlcyA9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUiB8CiAJCQkgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggICAgIHwKQEAgLTM1NTUsMTIgJiM0MzszNTU0LDYgQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCS8qIEFsbG93IGNvcmUgdG8gbWFuYWdlIElSUXMgYWZmaW5pdHkgKi8KIAluZXRpZl9zZXRfYWZmaW5pdHlfYXV0byhuZXRkZXYpOwogCi0JLyogTXV0dWFsIGV4Y2x1c2l2aXR5IGZvciBUU08gYW5kIEdDUyBpcyBlbmZvcmNlZCBieSB0aGUgc2V0IGZlYXR1cmVzCi0JICogbmRvIGNhbGxiYWNrLgotCSAqLwotCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykpCi0JCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCiAJbmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShuZXRkZXYsIElDRV9NQVhfVFNPX1NJWkUpOwogfQogCkBAIC00NzIwLDcgJiM0Mzs0NzEzLDkgQEAgdm9pZCBpY2VfZGVpbml0X2RldihzdHJ1Y3QgaWNlX3BmICpwZikKIAogc3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpCiB7CiYjNDM7CXUxNiBjb2RlID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0lORk9fTE9TU19PRl9MT0NLOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpOwomIzQzOwlpbnQgZXJyOwogCiAJaWYgKGljZV9pc19zYWZlX21vZGUocGYpKQogCQlyZXR1cm47CkBAIC00NzMyLDggJiM0Mzs0NzI3LDE1IEBAIHN0YXRpYyB2b2lkIGljZV9pbml0X2ZlYXR1cmVzKHN0cnVjdCBpY2VfcGYgKnBmKQogCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dOU1MpKQogCQlpY2VfZ25zc19pbml0KHBmKTsKIAomIzQzOwkvKiBJbml0aWFsaXplIHVubWFuYWdlZCBEUExMIGRldGVjdGlvbiAqLwomIzQzOwllcnIgPSBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZCgmYW1wO3BmLSZndDtodywgY29kZSwKJiM0MzsJCQkJCQkgICZhbXA7cGYtJmd0O2RwbGxzLnVubWFuYWdlZCk7CiYjNDM7CWlmIChlcnIgfHwgIWljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3QoJmFtcDtwZi0mZ3Q7aHcpKQomIzQzOwkJcGYtJmd0O2RwbGxzLnVubWFuYWdlZCA9IGZhbHNlOwomIzQzOwogCWlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0NHVSkgfHwKLQkgICAgaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9QSFlfUkNMSykpCiYjNDM7CSAgICBpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX1BIWV9SQ0xLKSB8fAomIzQzOwkgICAgcGYtJmd0O2RwbGxzLnVubWFuYWdlZCkKIAkJaWNlX2RwbGxfaW5pdChwZik7CiAKIAkvKiBOb3RlOiBGbG93IGRpcmVjdG9yIGluaXQgZmFpbHVyZSBpcyBub24tZmF0YWwgdG8gbG9hZCAqLwpAQCAtNjUxMCwxOCAmIzQzOzY1MTIsNiBAQCBpY2Vfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfTE9PUEJBQ0spCiAJCXJldCA9IGljZV9zZXRfbG9vcGJhY2sodnNpLCAhIShmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0xPT1BCQUNLKSk7CiAKLQkvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTCi0JICogKE5FVElGX0ZfSFdfQ1NVTSkgaXMgbm90IHN1cHBvcnRlZC4KLQkgKi8KLQlpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpICZhbXA7JmFtcDsKLQkgICAgKChmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX0NTVU0pICZhbXA7JmFtcDsgKGZlYXR1cmVzICZhbXA7IE5FVElGX0ZfQUxMX1RTTykpKSB7Ci0JCWlmIChuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfQ1NVTSkKLQkJCWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VG8gZW5hYmxlIFRTTywgeW91IG11c3QgZmlyc3QgZGlzYWJsZSBIVyBjaGVja3N1bS5cbiYjMzQ7KTsKLQkJZWxzZQotCQkJZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtUbyBlbmFibGUgSFcgY2hlY2tzdW0sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgVFNPLlxuJiMzNDspOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwppbmRleCBlYWVjMzZhYjZhZTNmLi5lODM5MmVjNGYxMzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMKQEAgLTIzMjcsNiAmIzQzOzIzMjcsOCBAQCB1NjQgaWNlX3B0cF9nZXRfcnhfaHd0cyhjb25zdCB1bmlvbiBpY2VfMzJiX3J4X2ZsZXhfZGVzYyAqcnhfZGVzYywKIAl0c19oaWdoID0gbGUzMl90b19jcHUocnhfZGVzYy0mZ3Q7d2IuZmxleF90cy50c19oaWdoKTsKIAl0c19ucyA9IGljZV9wdHBfZXh0ZW5kXzMyYl90cyhjYWNoZWRfdGltZSwgdHNfaGlnaCk7CiAKJiM0MzsJaWNlX3RyYWNlKHJ4X2h3dHN0YW1wLCBjYWNoZWRfdGltZSwgdHNfaGlnaCwgdHNfbnMpOwomIzQzOwogCXJldHVybiB0c19uczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKaW5kZXggOGU1Zjk3ODM1OTU0Yy4uZjkwNTEwNGY5NWQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCkBAIC0yMCw2ICYjNDM7MjAsMTAgQEAgc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xMF9taHpbXSA9IHsKIAlEUExMX1BJTl9GUkVRVUVOQ1lfMTBNSFosCiB9OwogCiYjNDM7c3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xNTZfMjVtaHpbXSA9IHsKJiM0MzsJRFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDE1NjI1MDAwMCwgMTU2MjUwMDAwKSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODEwdF9zZnBfY2d1X2lucHV0c1tdID0gewogCXsgJiMzNDtDVkwtU0RQMjImIzM0OywJICBaTF9SRUYwUCwgRFBMTF9QSU5fVFlQRV9JTlRfT1NDSUxMQVRPUiwKIAkJQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxX2NvbW1vbiksIGljZV9jZ3VfcGluX2ZyZXFfY29tbW9uIH0sCkBAIC0xMzEsNiAmIzQzOzEzNSwxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MjNfemxfY2d1X291dHB1dHNbXSA9IHsKIAl7ICYjMzQ7Tk9ORSYjMzQ7LAkgICBaTF9PVVQ1LCAwLCAwIH0sCiB9OwogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHNbXSA9IHsKJiM0MzsJeyAmIzM0OzE1ODgtVElNRV9TWU5DJiMzNDssIDAsIERQTExfUElOX1RZUEVfRVhULAomIzQzOwkgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xMF9taHopLCBpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODMwX3VubWFuYWdlZF9vdXRwdXRzW10gPSB7CiYjNDM7CXsgJiMzNDtNQUMtUEhZLUNMSyYjMzQ7LCAwLCBEUExMX1BJTl9UWVBFX1NZTkNFX0VUSF9QT1JULAomIzQzOwkgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xNTZfMjVtaHopLCBpY2VfY2d1X3Bpbl9mcmVxXzE1Nl8yNW1oeiB9LAomIzQzOwl7ICYjMzQ7MTU4OC1USU1FX1JFRiYjMzQ7LCAxLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLAomIzQzOwkgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xX2h6KSwgaWNlX2NndV9waW5fZnJlcV8xX2h6fSwKJiM0Mzt9OwomIzQzOwogLyogTG93IGxldmVsIGZ1bmN0aW9ucyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhbmQgbWFuYWdpbmcgdGhlIGRldmljZSBjbG9jayB1c2VkCiAgKiBmb3IgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sLgogICoKQEAgLTU5NzksNiAmIzQzOzU5OTUsMjQgQEAgaWNlX2NndV9nZXRfcGluX2Rlc2Moc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQsIGludCAqc2l6ZSkKIAljYXNlIElDRV9ERVZfSURfRTgyM0NfU0dNSUk6CiAJCXQgPSBpY2VfY2d1X2dldF9waW5fZGVzY19lODIzKGh3LCBpbnB1dCwgc2l6ZSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIElDRV9ERVZfSURfRTgzMENDX0JBQ0tQTEFORToKJiM0MzsJY2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19RU0ZQNTY6CiYjNDM7CWNhc2UgSUNFX0RFVl9JRF9FODMwQ0NfU0ZQOgomIzQzOwljYXNlIElDRV9ERVZfSURfRTgzMENDX1NGUF9ERDoKJiM0MzsJY2FzZSBJQ0VfREVWX0lEX0U4MzBDX0JBQ0tQTEFORToKJiM0MzsJY2FzZSBJQ0VfREVWX0lEX0U4MzBDX1FTRlA6CiYjNDM7CWNhc2UgSUNFX0RFVl9JRF9FODMwQ19TRlA6CiYjNDM7CWNhc2UgSUNFX0RFVl9JRF9FODMwX1hYVl9CQUNLUExBTkU6CiYjNDM7CWNhc2UgSUNFX0RFVl9JRF9FODMwX1hYVl9RU0ZQOgomIzQzOwljYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfU0ZQOgomIzQzOwkJaWYgKGlucHV0KSB7CiYjNDM7CQkJdCA9IGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHM7CiYjNDM7CQkJKnNpemUgPSBBUlJBWV9TSVpFKGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHMpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQl0ID0gaWNlX2U4MzBfdW5tYW5hZ2VkX291dHB1dHM7CiYjNDM7CQkJKnNpemUgPSBBUlJBWV9TSVpFKGljZV9lODMwX3VubWFuYWdlZF9vdXRwdXRzKTsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTYwMDUsNiAmIzQzOzYwMzksMTggQEAgaW50IGljZV9jZ3VfZ2V0X251bV9waW5zKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWNlX2NndV9nZXRfcGluX251bSAtIGdldCBwaW4gZGVzY3JpcHRpb24gYXJyYXkgc2l6ZQomIzQzOyAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0CiYjNDM7ICogQGlucHV0OiBpZiByZXF1ZXN0IGlzIGRvbmUgYWdhaW5zdCBpbnB1dCBvciBvdXRwdXQgcGlucwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBzaXplIG9mIHBpbiBkZXNjcmlwdGlvbiBhcnJheSBmb3IgZ2l2ZW4gaHcuCiYjNDM7ICovCiYjNDM7aW50IGljZV9jZ3VfZ2V0X3Bpbl9udW0oc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gaWNlX2NndV9nZXRfbnVtX3BpbnMoaHcsIGlucHV0KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9jZ3VfZ2V0X3Bpbl90eXBlIC0gZ2V0IHBpbiYjMzk7cyB0eXBlCiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmgKaW5kZXggMTZiMTk4OGU5OTNkMi4uZmExZTkwOGNlYmFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oCkBAIC0zNjQsNiAmIzQzOzM2NCw3IEBAIGludCBpY2VfcmVhZF9zbWFfY3RybChzdHJ1Y3QgaWNlX2h3ICpodywgdTggKmRhdGEpOwogaW50IGljZV93cml0ZV9zbWFfY3RybChzdHJ1Y3QgaWNlX2h3ICpodywgdTggZGF0YSk7CiBpbnQgaWNlX3B0cF9yZWFkX3NkcF9hYyhzdHJ1Y3QgaWNlX2h3ICpodywgX19sZTE2ICplbnRyaWVzLCB1aW50ICpudW1fZW50cmllcyk7CiBpbnQgaWNlX2NndV9nZXRfbnVtX3BpbnMoc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpOwomIzQzO2ludCBpY2VfY2d1X2dldF9waW5fbnVtKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KTsKIGVudW0gZHBsbF9waW5fdHlwZSBpY2VfY2d1X2dldF9waW5fdHlwZShzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluLCBib29sIGlucHV0KTsKIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKgogaWNlX2NndV9nZXRfcGluX2ZyZXFfc3VwcChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluLCBib29sIGlucHV0LCB1OCAqbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jCmluZGV4IDZhNTg3NWJkOWM2YjEuLjRkYWVlMjUyZTJhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYwpAQCAtMjYxMiw3ICYjNDM7MjYxMiw2IEBAIGljZV9maWxsX3N3X3J1bGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfZmx0cl9pbmZvICpmX2luZm8sCiAJdTE2IHZsYW5faWQgPSBJQ0VfTUFYX1ZMQU5fSUQgJiM0MzsgMTsKIAl1MTYgdmxhbl90cGlkID0gRVRIX1BfODAyMVE7CiAJdm9pZCAqZGFkZHIgPSBOVUxMOwotCXUxNiBldGhfaGRyX3N6OwogCXU4ICpldGhfaGRyOwogCXUzMiBhY3QgPSAwOwogCV9fYmUxNiAqb2ZmOwpAQCAtMjYyNSwxMSAmIzQzOzI2MjQsMTAgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbywKIAkJcmV0dXJuOwogCX0KIAotCWV0aF9oZHJfc3ogPSBzaXplb2YoZHVtbXlfZXRoX2hlYWRlcik7CiAJZXRoX2hkciA9IHNfcnVsZS0mZ3Q7aGRyX2RhdGE7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBldGhlciBoZWFkZXIgd2l0aCBhIGR1bW15IGhlYWRlciAqLwotCW1lbWNweShldGhfaGRyLCBkdW1teV9ldGhfaGVhZGVyLCBldGhfaGRyX3N6KTsKJiM0MzsJaWNlX2ZpbGxfZXRoX2hkcihldGhfaGRyKTsKIAlpY2VfZmlsbF9zd19pbmZvKGh3LCBmX2luZm8pOwogCiAJc3dpdGNoIChmX2luZm8tJmd0O2ZsdHJfYWN0KSB7CkBAIC0yNzMwLDcgJiM0MzsyNzI4LDcgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbywKIAogCS8qIENyZWF0ZSB0aGUgc3dpdGNoIHJ1bGUgd2l0aCB0aGUgZmluYWwgZHVtbXkgRXRoZXJuZXQgaGVhZGVyICovCiAJaWYgKG9wYyAhPSBpY2VfYXFjX29wY191cGRhdGVfc3dfcnVsZXMpCi0JCXNfcnVsZS0mZ3Q7aGRyX2xlbiA9IGNwdV90b19sZTE2KGV0aF9oZHJfc3opOwomIzQzOwkJc19ydWxlLSZndDtoZHJfbGVuID0gY3B1X3RvX2xlMTYoRFVNTVlfRVRIX0hEUl9MRU4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jCmluZGV4IGQyMDM1N2MwNDEyNzMuLjQ1NjBlNTVjOGY5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuYwpAQCAtMTc0LDYgJiM0MzsxNzQsNyBAQCBzdGF0aWMgdTE2IGljZV9jaGVja19zdXBwb3J0ZWRfdmxhbl90cGlkKHUxNiB2bGFuX3RwaWQpCiAJY2FzZSBFVEhfUF84MDIxUToKIAljYXNlIEVUSF9QXzgwMjFBRDoKIAljYXNlIEVUSF9QX1FJTlExOgomIzQzOwljYXNlIEVUSF9QXzgwMjFBSDoKIAkJcmV0dXJuIHZsYW5fdHBpZDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHJhY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHJhY2UuaAppbmRleCA0ZjM1ZWY4ZDZiMjk5Li4zY2I4YzZlYTAzY2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oCkBAIC0yNDEsNiAmIzQzOzI0MSwyNCBAQCBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfZndfcmVxKTsKIERFRklORV9UWF9UU1RBTVBfT1BfRVZFTlQoaWNlX3R4X3RzdGFtcF9md19kb25lKTsKIERFRklORV9UWF9UU1RBTVBfT1BfRVZFTlQoaWNlX3R4X3RzdGFtcF9jb21wbGV0ZSk7CiAKJiM0MzsvKiBUcmFjZSBldmVudCBmb3IgUnggdGltZXN0YW1wICovCiYjNDM7VFJBQ0VfRVZFTlQoaWNlX3J4X2h3dHN0YW1wLAomIzQzOwkgICAgVFBfUFJPVE8odTY0IGNhY2hlZF90aW1lLCB1MzIgdHNfaGlnaCwgdTY0IHRzX25zKSwKJiM0MzsKJiM0MzsJICAgIFRQX0FSR1MoY2FjaGVkX3RpbWUsIHRzX2hpZ2gsIHRzX25zKSwKJiM0MzsKJiM0MzsJICAgIFRQX1NUUlVDVF9fZW50cnkoX19maWVsZCh1NjQsIGNhY2hlZF90aW1lKQomIzQzOwkJCSAgICAgX19maWVsZCh1MzIsIHRzX2hpZ2gpCiYjNDM7CQkJICAgICBfX2ZpZWxkKHU2NCwgdHNfbnMpKSwKJiM0MzsKJiM0MzsJICAgIFRQX2Zhc3RfYXNzaWduKF9fZW50cnktJmd0O2NhY2hlZF90aW1lID0gY2FjaGVkX3RpbWU7CiYjNDM7CQkJICAgX19lbnRyeS0mZ3Q7dHNfaGlnaCA9IHRzX2hpZ2g7CiYjNDM7CQkJICAgX19lbnRyeS0mZ3Q7dHNfbnMgPSB0c19uczspLAomIzQzOwomIzQzOwkgICAgVFBfcHJpbnRrKCYjMzQ7Y2FjaGVkX3RpbWU9JWxsdSB0c19oaWdoPSV1IHRzX25zPSVsbHUmIzM0OywKJiM0MzsJCSAgICAgIF9fZW50cnktJmd0O2NhY2hlZF90aW1lLCBfX2VudHJ5LSZndDt0c19oaWdoLCBfX2VudHJ5LSZndDt0c19ucykKJiM0MzspOwomIzQzOwogREVDTEFSRV9FVkVOVF9DTEFTUyhpY2VfZXN3X2JyX2ZkYl90ZW1wbGF0ZSwKIAkJICAgIFRQX1BST1RPKHN0cnVjdCBpY2VfZXN3X2JyX2ZkYl9lbnRyeSAqZmRiKSwKIAkJICAgIFRQX0FSR1MoZmRiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKaW5kZXggMzEzMDNhYjViZTE3NS4uNDc3Yzg2ZDhjNTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmMKQEAgLTE3MzksNyAmIzQzOzE3MzksNyBAQCBpbnQgaWNlX3R4X2NzdW0oc3RydWN0IGljZV90eF9idWYgKmZpcnN0LCBzdHJ1Y3QgaWNlX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpCiAJbDNfbGVuID0gbDQuaGRyIC0gaXAuaGRyOwogCW9mZnNldCB8PSAobDNfbGVuIC8gNCkgJmx0OyZsdDsgSUNFX1RYX0RFU0NfTEVOX0lQTEVOX1M7CiAKLQlpZiAoKHR4X3JpbmctJmd0O25ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9IV19DU1VNKSAmYW1wOyZhbXA7CiYjNDM7CWlmICh0ZXN0X2JpdChJQ0VfVFhfUklOR19GTEFHU19HQ1MsIHR4X3JpbmctJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiAJICAgICEoZmlyc3QtJmd0O3R4X2ZsYWdzICZhbXA7IElDRV9UWF9GTEFHU19UU08pICZhbXA7JmFtcDsKIAkgICAgIXNrYl9jc3VtX2lzX3NjdHAoc2tiKSkgewogCQkvKiBTZXQgR0NTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oCmluZGV4IDVlNTE3ZjIxOTM3OTguLjE1ZGJkNTEwMDkxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oCkBAIC0yMTcsNiAmIzQzOzIxNyw3IEBAIGVudW0gaWNlX3R4X3JpbmdfZmxhZ3MgewogCUlDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLAogCUlDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLAogCUlDRV9UWF9SSU5HX0ZMQUdTX1RYVElNRSwKJiM0MzsJSUNFX1RYX1JJTkdfRkxBR1NfR0NTLAogCUlDRV9UWF9SSU5HX0ZMQUdTX05CSVRTLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdnNpX3ZsYW5fbGliLmMKaW5kZXggNTQ5ODQ5NjY4NTFkNS4uYjY3MjcyZTJmNjAzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jCkBAIC0yNCw3ICYjNDM7MjQsOCBAQCBzdGF0aWMgdm9pZCBwcmludF9pbnZhbGlkX3RwaWQoc3RydWN0IGljZV92c2kgKnZzaSwgdTE2IHRwaWQpCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZV92bGFuKHN0cnVjdCBpY2VfdnNpICp2c2ksIHN0cnVjdCBpY2VfdmxhbiAqdmxhbikKIHsKIAlpZiAodmxhbi0mZ3Q7dHBpZCAhPSBFVEhfUF84MDIxUSAmYW1wOyZhbXA7IHZsYW4tJmd0O3RwaWQgIT0gRVRIX1BfODAyMUFEICZhbXA7JmFtcDsKLQkgICAgdmxhbi0mZ3Q7dHBpZCAhPSBFVEhfUF9RSU5RMSAmYW1wOyZhbXA7ICh2bGFuLSZndDt0cGlkIHx8IHZsYW4tJmd0O3ZpZCkpIHsKJiM0MzsJICAgIHZsYW4tJmd0O3RwaWQgIT0gRVRIX1BfUUlOUTEgJmFtcDsmYW1wOyB2bGFuLSZndDt0cGlkICE9IEVUSF9QXzgwMjFBSCAmYW1wOyZhbXA7CiYjNDM7CSAgICAodmxhbi0mZ3Q7dHBpZCB8fCB2bGFuLSZndDt2aWQpKSB7CiAJCXByaW50X2ludmFsaWRfdHBpZCh2c2ksIHZsYW4tJmd0O3RwaWQpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmMKaW5kZXggY2E4MDE4ZTNkZDQyOC4uMDZkMmY5YmU5M2FlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jCkBAIC0xNzAyLDYgJiM0MzsxNzAyLDkgQEAgc3RhdGljIGJvb2wgaWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fdHBpZCh1MTYgZmlsdGVyaW5nX2NhcHMsIHUxNiB0cGlkKQogCWNhc2UgRVRIX1BfUUlOUTE6CiAJCXZsYW5fZXRoZXJ0eXBlID0gVklSVENITkxfVkxBTl9FVEhFUlRZUEVfOTEwMDsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgRVRIX1BfODAyMUFIOgomIzQzOwkJdmxhbl9ldGhlcnR5cGUgPSBWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEU3OwomIzQzOwkJYnJlYWs7CiAJfQogCiAJaWYgKCEoZmlsdGVyaW5nX2NhcHMgJmFtcDsgdmxhbl9ldGhlcnR5cGUpKQpAQCAtMjEzNiw2ICYjNDM7MjEzOSw5IEBAIHN0YXRpYyBpbnQgaWNlX3ZjX2dldF90cGlkKHUzMiBldGhlcnR5cGVfc2V0dGluZywgdTE2ICp0cGlkKQogCWNhc2UgVklSVENITkxfVkxBTl9FVEhFUlRZUEVfOTEwMDoKIAkJKnRwaWQgPSBFVEhfUF9RSU5RMTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgVklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhFNzoKJiM0MzsJCSp0cGlkID0gRVRIX1BfODAyMUFIOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJKnRwaWQgPSAwOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKaW5kZXggMjFkMmZlMzhhNDFhNi4uNDI0YzEyYzAzOTRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKQEAgLTExLDYgJiM0MzsxMSw4IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl90cmFjZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC94ZHBfc29ja19kcnYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAKQEAgLTcxMDUsNiAmIzQzOzcxMDcsNTcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlnY19xYnZfc2NoZWR1bGluZ190aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiAJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaWdjX2dldF9hY3BpX21hY19wYXNzdGhydSh1OCAqbWFjKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHN0cnVjdCB7CiYjNDM7CQljb25zdCBjaGFyICpuYW1lOwomIzQzOwkJYWNwaV9vYmplY3RfdHlwZSB0eXBlOwomIzQzOwkJdTMyIGxlbmd0aDsKJiM0MzsJfSBzb3VyY2VzW10gPSB7CiYjNDM7CQl7ICYjMzQ7XFxfU0IuQU1BQyYjMzQ7LCBBQ1BJX1RZUEVfQlVGRkVSLCAyMyB9LAomIzQzOwkJeyAmIzM0O1xcTUFDQSYjMzQ7LCAgICAgQUNQSV9UWVBFX1NUUklORywgMjIgfSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlcjsKJiM0MzsJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKJiM0MzsJYm9vbCBtYWNfZm91bmQgPSBmYWxzZTsKJiM0MzsJYWNwaV9zdGF0dXMgc3RhdHVzOwomIzQzOwl1OCBidWZbRVRIX0FMRU5dOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19BQ1BJKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoc291cmNlcykgJmFtcDsmYW1wOyAhbWFjX2ZvdW5kOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfQlVGRkVSOwomIzQzOwkJYnVmZmVyLnBvaW50ZXIgPSBOVUxMOwomIzQzOwomIzQzOwkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoTlVMTCwgKGNoYXIgKilzb3VyY2VzW2ldLm5hbWUsCiYjNDM7CQkJCQkgICAgICBOVUxMLCAmYW1wO2J1ZmZlcik7CiYjNDM7CQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlvYmogPSBidWZmZXIucG9pbnRlcjsKJiM0MzsJCWlmICghb2JqIHx8IG9iai0mZ3Q7dHlwZSAhPSBzb3VyY2VzW2ldLnR5cGUgfHwKJiM0MzsJCSAgICBvYmotJmd0O3N0cmluZy5sZW5ndGggIT0gc291cmNlc1tpXS5sZW5ndGgpCiYjNDM7CQkJZ290byBmcmVlX29iajsKJiM0MzsKJiM0MzsJCWlmIChzdHJuY21wKG9iai0mZ3Q7c3RyaW5nLnBvaW50ZXIsICYjMzQ7X0FVWE1BQ18jJiMzNDssIDkpIHx8CiYjNDM7CQkgICAgb2JqLSZndDtzdHJpbmcucG9pbnRlclsyMV0gIT0gJiMzOTsjJiMzOTspCiYjNDM7CQkJZ290byBmcmVlX29iajsKJiM0MzsKJiM0MzsJCWlmIChoZXgyYmluKGJ1Ziwgb2JqLSZndDtzdHJpbmcucG9pbnRlciAmIzQzOyA5LCBFVEhfQUxFTikgfHwKJiM0MzsJCSAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihidWYpKQomIzQzOwkJCWdvdG8gZnJlZV9vYmo7CiYjNDM7CiYjNDM7CQlldGhlcl9hZGRyX2NvcHkobWFjLCBidWYpOwomIzQzOwkJbWFjX2ZvdW5kID0gdHJ1ZTsKJiM0MztmcmVlX29iajoKJiM0MzsJCWtmcmVlKG9iaik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG1hY19mb3VuZDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGlnY19wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lCiAgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKQEAgLTcyNjgsOSAmIzQzOzczMjEsMTYgQEAgc3RhdGljIGludCBpZ2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJfQogCiAJaWYgKGV0aF9wbGF0Zm9ybV9nZXRfbWFjX2FkZHJlc3MoJmFtcDtwZGV2LSZndDtkZXYsIGh3LSZndDttYWMuYWRkcikpIHsKLQkJLyogY29weSB0aGUgTUFDIGFkZHJlc3Mgb3V0IG9mIHRoZSBOVk0gKi8KLQkJaWYgKGh3LSZndDttYWMub3BzLnJlYWRfbWFjX2FkZHIoaHcpKQomIzQzOwkJLyogTG9vayBmb3IgYSBzeXN0ZW0tcHJvdmlkZWQgTUFDIGluIHRoZSBBQ1BJIHRhYmxlIGJlZm9yZQomIzQzOwkJICogZmFsbGluZyBiYWNrIHRvIHJlYWRpbmcgdGhlIGFkZHJlc3MgZnJvbSB0aGUgTlZNLgomIzQzOwkJICovCiYjNDM7CQlpZiAoaWdjX2dldF9hY3BpX21hY19wYXNzdGhydShody0mZ3Q7bWFjLmFkZHIpKSB7CiYjNDM7CQkJbmV0ZGV2LSZndDthZGRyX2Fzc2lnbl90eXBlID0gTkVUX0FERFJfU1RPTEVOOwomIzQzOwkJCWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O1VzaW5nIEFDUEkgcGFzcy10aHJvdWdoIE1BQyBhZGRyICVwTVxuJiMzNDssCiYjNDM7CQkJCSBody0mZ3Q7bWFjLmFkZHIpOwomIzQzOwkJfSBlbHNlIGlmIChody0mZ3Q7bWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSkgewogCQkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtOVk0gUmVhZCBFcnJvclxuJiMzNDspOwomIzQzOwkJfQogCX0KIAogCWV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LSZndDttYWMuYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oIGIvaW5jbHVkZS9saW51eC9hdmYvdmlydGNobmwuaAppbmRleCAxMWJkYWI1NTIyZmQ1Li41MTFjODgyN2M2NDBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmgKQEAgLTYzNiw2ICYjNDM7NjM2LDcgQEAgZW51bSB2aXJ0Y2hubF92bGFuX3N1cHBvcnQgewogCVZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzgxMDAgPQkJQklUKDApLAogCVZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4QTggPQkJQklUKDEpLAogCVZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzkxMDAgPQkJQklUKDIpLAomIzQzOwlWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEU3ID0JCUJJVCgzKSwKIAlWSVJUQ0hOTF9WTEFOX1RBR19MT0NBVElPTl9MMlRBRzEgPQlCSVQoOCksCiAJVklSVENITkxfVkxBTl9UQUdfTE9DQVRJT05fTDJUQUcyID0JQklUKDkpLAogCVZJUlRDSE5MX1ZMQU5fVEFHX0xPQ0FUSU9OX0wyVEFHMl8yID0JQklUKDEwKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MzMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBTZXJpZXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgdG91Y2hlcyBzZXZlcmFsIEludGVsIEV0aGVybmV0IGRyaXZlcnM6IGBlMTAwMGVgLCBgaTQwZWAsIGBpY2VgLCBhbmQgYGlnY2AuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBob3cgdGhpcyB3aWxsIGltcGFjdCBmdXp6aW5nIGVmZm9ydHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGUgbWFpbiBkcml2ZXJzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhcmUgdGhvc2UgdGhhdCBhcmUgZW11bGF0ZWQuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgZTEwMDBlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgZW11bGF0ZWQsIHNvIGl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0LiBgaTQwZWAgYW5kIGBpY2VgIGFyZSBub3QgbmF0aXZlbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gYGlnY2AgaXMgYWxzbyBub3QgZW11bGF0ZWQuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmFycm93cyB0byB0aGUgYGUxMDAwZWAgY2hhbmdlcy4KCkxvb2tpbmcgYXQgdGhlIGBlMTAwMGVgIGRpZmYgaW4gYG5ldGRldi5jYCwgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgZTEwMDBfYWxsb2NfcnhfYnVmZmVyc2AgYW5kIGBlMTAwMF9jbGVhbl9yeF9pcnFgLiBUaGVzZSBhcmUgY29yZSBSWCBwYXRoIGZ1bmN0aW9ucyDigJMgdGhleSYjMzk7cmUgY3JpdGljYWwgZm9yIHJlY2VpdmluZyBwYWNrZXRzLCBzbywgYnkgZGVmaW5pdGlvbiwgdGhleSYjMzk7cmUgJiMzNDtob3QtcGF0aCYjMzQ7LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpUaGUgcHJvbXB0LCBob3dldmVyLCBpbnN0cnVjdHMgbWUgdG8gYXZvaWQgbGlzdGluZyAqZ2VuZXJpYyogaG90LXBhdGggZnVuY3Rpb25zLiBIb3dldmVyLCBhcmUgdGhlc2UgZnVuY3Rpb25zICpnZW5lcmljKiBvciBzcGVjaWZpYyB0byB0aGUgYGUxMDAwZWAgZHJpdmVyPyBCZWNhdXNlIHRoZXNlIGFyZSB0aGUgKm9ubHkqIG1vZGlmaWVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhlICpyZWFjaGFibGUqIGRyaXZlciwgbGlzdGluZyB0aGVtIGZlZWxzIGFwcHJvcHJpYXRlLiBXaGlsZSB0aGV5IGFyZSBpbmRlZWQgaG90LXBhdGgsIHRoZXkgYXJlICpzcGVjaWZpYyogdG8gdGhpcyBkcml2ZXIgYW5kIHRodXMgYXJlIGlkZWFsLgoKSSBzaG91bGQgYWxzbyBub3RlIHRoYXQgYGUxMDAwZWAgaXMgYmVpbmcgZnV6emVkIGFscmVhZHkuIFN5emthbGxlciBpbmNsdWRlcyBkZXNjcmlwdGlvbnMgZm9yIGUxMDAwZS4gSSB3aWxsIGFsc28gZG91YmxlIGNoZWNrIHRvIHNlZSBpZiBlMTAwMGUgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIG5lZWRzIGEgY29uZmlnLCBJIHdpbGwgbmVlZCB0byBsb29rIGF0IGl0cyBLY29uZmlnIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEUxMDAwRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmcqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgbmV0d29yayBkcml2ZXImIzM5O3MgS2NvbmZpZyBmaWxlIHJlc2lkZXMuIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gY2hlY2sgdGhlIHN0YW5kYXJkIGxvY2F0aW9uLiBJbnRlbCYjMzk7cyBldGhlcm5ldCBkcml2ZXJzIGFyZSB1c3VhbGx5IHByZXR0eSB3ZWxsLW9yZ2FuaXplZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IGd1ZXNzLCBiYXNlZCBvbiB5ZWFycyBvZiBleHBlcmllbmNlLCBpcyB0aGF0IGl0JiMzOTtsbCBiZSB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvYC4gVGhhdCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIHRoZSB0eXBpY2FsIGhvbWUgZm9yIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMsIGFuZCBLY29uZmlnIGZpbGVzIGFyZSBhbG1vc3QgYWx3YXlzIGxvY2F0ZWQgd2l0aGluIHRoZSBhcHByb3ByaWF0ZSBkcml2ZXImIzM5O3Mgc3ViZGlyZWN0b3J5LiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRTEwMDBFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTQ1PWNvbmZpZyBFMTAwMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzo4MTpjb25maWcgRTEwMDBFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctODItXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIFBDSCBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MDUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIEUxMDAwRToKCioqRGVsdmluZyBpbnRvIHRoZSBFMTAwMEUmIzM5O3MgUmVsYXRpb25zaGlwcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIG9mIEUxMDAwRS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCB0byBjb25zaWRlciB0aGlzIGZyb20gYSBmZXcgYW5nbGVzLiBGaXJzdGx5LCBJJiMzOTtsbCB0aGluayBhYm91dCB0aGUgc29mdHdhcmUgZGVwZW5kZW5jaWVzOiBXaGF0IGxpYnJhcmllcywgaGVhZGVycywgYW5kIGtlcm5lbCBtb2R1bGVzIGlzIGl0IHJlbHlpbmcgb24/IElzIGl0IGEgc3RhbmRhbG9uZSBkcml2ZXIsIG9yIGRvZXMgaXQgaG9vayBpbnRvIHNvbWUgbG93ZXItbGV2ZWwgbmV0d29ya2luZyBzdGFjayBjb21wb25lbnRzLCBtYXliZSBzcGVjaWZpYyBuZXR3b3JrIHByb3RvY29scyBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IFRoYXQgY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGFuZCB3aGVuIHdvcmtpbmcgb24gaXQgd2l0aCBvdGhlcnMsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBsZXQgdGhlbSBrbm93LgoKVGhlbiwgdGhlcmUmIzM5O3MgdGhlIGhhcmR3YXJlIHNpZGUuIEUxMDAwRSBpcyBhbiBJbnRlbCBHaWdhYml0IEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyLCBzbyBpdOKAmXMgbGlrZWx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZC4gSSB3b3VsZCB0aGluayBhYm91dCB3aGljaCBzcGVjaWZpYyBoYXJkd2FyZSB2ZXJzaW9ucyBpdCBzdXBwb3J0cywgYW55IHNwZWNpZmljIHNpbGljb24gcmV2aXNpb25zIHRoYXQgbWlnaHQgcmVxdWlyZSBjb25kaXRpb25hbCBjb2RlIHBhdGhzLCBhbmQgYW55IGZpcm13YXJlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIE5JQyBpdHNlbGYuIEEgZGVlcCBkaXZlIGludG8gdGhlIGRhdGFzaGVldCB3b3VsZCBsaWtlbHkgYmUgbmVjZXNzYXJ5IHRvIGNvbmZpcm0gdGhpcy4KCkZpbmFsbHksIEkgd291bGQgd2FudCB0byBsb29rIGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwuIFdoYXQgYnVpbGQgdG9vbHMgYXJlIHVzZWQ/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIGJ1aWxkIHN5c3RlbT8gSXMgaXQgYSBtb2R1bGUgdGhhdCBpcyBsb2FkZWQgYXQgcnVudGltZSwgb3IgaXMgaXQgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsPyBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBhIGZhY3RvciwgcGFydGljdWxhcmx5IHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIHRoYXQgRTEwMDBFIHJlcXVpcmVzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucyBvciBmZWF0dXJlcywgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGFuIG9sZGVyIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XG4gIDYxOlx0Y29uZmlnIEUxMDAwRVxuICA2MjpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgUFJPLzEwMDAgUENJLUV4cHJlc3MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgKCFTUEFSQzMyIHx8IEJST0tFTilcbiAgNjQ6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgNjU6XHRcdHNlbGVjdCBDUkMzMlxuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUENJLUV4cHJlc3MgSW50ZWwoUikgUFJPLzEwMDAgZ2lnYWJpdFxuICA2ODpcdFx0ICBldGhlcm5ldCBmYW1pbHkgb2YgYWRhcHRlcnMuIEZvciBQQ0kgb3IgUENJLVggZTEwMDAgYWRhcHRlcnMsXG4gIDY5Olx0XHQgIHVzZSB0aGUgcmVndWxhciBlMTAwMCBkcml2ZXIgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvXG4gIDcwOlx0XHQgIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgXHUwMDI2IERyaXZlciBJRCBHdWlkZSB0aGF0XG4gIDcxOlx0XHQgIGNhbiBiZSBsb2NhdGVkIGF0OlxuICA3MjpcdFxuICA3MzpcdFx0ICBcdTAwM2NodHRwOi8vc3VwcG9ydC5pbnRlbC5jb21cdTAwM2VcbiAgNzQ6XHRcbiAgNzU6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gIDc2Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2UxMDAwZS5yc3RcdTAwM2UuXG4gIDc3Olx0XG4gIDc4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgNzk6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZTEwMDBlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTQzCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBQYXRjaCBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvbmZpZ3VyYXRpb24gYEUxMDAwRWAgaXMgZGVmaW5pdGVseSByZWxldmFudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNgLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBlMTAwMGUgbmV0d29yayBkcml2ZXIuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGRyaXZlciBlbXVsYXRlZCBpbiBRRU1VPyBZZXMsIGUxMDAwZSBpcyAqZGVmaW5pdGVseSogZW11bGF0ZWQsIHVubGlrZSBgaWdjYCwgYGk0MGVgLCBvciBgaWNlYCB3aGljaCB0aGUgcHJvbXB0IGluZGljYXRlcyAqYXJlbiYjMzk7dCouIFRodXMsIGBFMTAwMEVgIGlzIHRoZSBjb25maWd1cmF0aW9uIHRvIGZvY3VzIG9uLgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gYWRkcmVzcyBhbiBpc3N1ZSBpbiB0aGUgZTEwMDBlJiMzOTtzIHJlY2VpdmUgKFJYKSBwYXRoLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZTEwMDBfYWxsb2NfcnhfYnVmZmVyc2AgZnVuY3Rpb24uIFRoZSBjb2RlIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHByb2JsZW0gcmVsYXRlZCB0byBETUEgdW5tYXBwaW5nLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIGluIGEgc2ltdWxhdGVkIGVudmlyb25tZW50LgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZml4IGluIGEgcmVhbCBhbmQgZW11bGF0ZWQgZHJpdmVyLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpGb3IgdGhlIGZvY3VzIHN5bWJvbHMsIEkmIzM5O20gaW5pdGlhbGx5IGNvbnNpZGVyaW5nIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgYGUxMDAwX2NsZWFuX3J4X2lycWAsIGJlY2F1c2UgdGhleSBhcmUgY2xlYXJseSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gQnV0IGhvbGQgb24sIGFyZSB0aGVzZSBmdW5jdGlvbnMgYHN0YXRpY2A/IFllcywgdGhleSBhcmUuIEFuZCB0aGUgcHJvbXB0IHByZWZlcnMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBhcmUgYHN0YXRpY2AsIHRoZXkmIzM5O3JlIGxpa2VseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgbWF5IG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFNvLCBJIHdpbGwgcHJvY2VlZCB3aXRoIGNhdXRpb24gaW4gdGhpcyBpbnN0YW5jZSwgYW5kIHJlLWNoZWNrIG15IHJhdGlvbmFsZS4KCkkmIzM5O2xsIHN0aWNrIHdpdGggYEUxMDAwRWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZywgYW5kIGtlZXAgaW4gbWluZCB0aGVzZSBgc3RhdGljYCBmdW5jdGlvbnMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2UxMDAwX2NsZWFuX3J4X2lycSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9OTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBlMTAwMF9yeF9oYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIF9fbGUzMiByc3MsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTkyMi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzo5MjM6ICogZTEwMDBfY2xlYW5fcnhfaXJxIC0gU2VuZCByZWNlaXZlZCBkYXRhIHVwIHRoZSBuZXR3b3JrIHN0YWNrXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtOTI0LSAqIEByeF9yaW5nOiBSeCBkZXNjcmlwdG9yIHJpbmdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtOTMwLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzo5MzE6c3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy05MzItXHRcdFx0ICAgICAgIGludCB3b3JrX3RvX2RvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYz0xMjM4PXN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3R4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqdHhfcmluZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMyNC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxMzI1OiAqIGUxMDAwX2NsZWFuX3J4X2lycV9wcyAtIFNlbmQgcmVjZWl2ZWQgZGF0YSB1cCB0aGUgbmV0d29yayBzdGFjazsgcGFja2V0IHNwbGl0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMyNi0gKiBAcnhfcmluZzogUnggZGVzY3JpcHRvciByaW5nXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTEzMzItICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjEzMzM6c3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxX3BzKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xMzM0LVx0XHRcdFx0ICBpbnQgd29ya190b19kbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTY5ND1zdGF0aWMgdm9pZCBlMTAwMF9jbGVhbl9yeF9yaW5nKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xNzA1LVx0XHRpZiAoYnVmZmVyX2luZm8tXHUwMDNlZG1hKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MTcwNjpcdFx0XHRpZiAoYWRhcHRlci1cdTAwM2VjbGVhbl9yeCA9PSBlMTAwMF9jbGVhbl9yeF9pcnEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcwNy1cdFx0XHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcxMi1cdFx0XHRcdFx0ICAgICAgIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxNzEzOlx0XHRcdGVsc2UgaWYgKGFkYXB0ZXItXHUwMDNlY2xlYW5fcnggPT0gZTEwMDBfY2xlYW5fcnhfaXJxX3BzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTE3MTQtXHRcdFx0XHRkbWFfdW5tYXBfc2luZ2xlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBidWZmZXJfaW5mby1cdTAwM2VkbWEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jPTMyMDM9c3RhdGljIHZvaWQgZTEwMDBfY29uZmlndXJlX3J4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0zMjEzLVx0XHQgICAgc2l6ZW9mKHVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzozMjE0Olx0XHRhZGFwdGVyLVx1MDAzZWNsZWFuX3J4ID0gZTEwMDBfY2xlYW5fcnhfaXJxX3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTMyMTUtXHRcdGFkYXB0ZXItXHUwMDNlYWxsb2NfcnhfYnVmID0gZTEwMDBfYWxsb2NfcnhfYnVmZmVyc19wcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIyMS1cdFx0cmRsZW4gPSByeF9yaW5nLVx1MDAzZWNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX3J4X2Rlc2NfZXh0ZW5kZWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjMyMjI6XHRcdGFkYXB0ZXItXHUwMDNlY2xlYW5fcnggPSBlMTAwMF9jbGVhbl9yeF9pcnE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIyMy1cdFx0YWRhcHRlci1cdTAwM2VhbGxvY19yeF9idWYgPSBlMTAwMF9hbGxvY19yeF9idWZmZXJzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk4NAoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFMTAwMEUgRHJpdmVyJiMzOTtzIFJ4IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTt2ZSBnb3QgdG8gdW5kZXJzdGFuZCBpcyB0aGUgaW50ZXJydXB0LWRyaXZlbiBSWCBwYXRoIGZvciB0aGUgZW11bGF0ZWQgRTEwMDBFIGRldmljZS4gVGhlc2UgZnVuY3Rpb25zLCBgYWRhcHRlci0mZ3Q7Y2xlYW5fcnggPSBlMTAwMF9jbGVhbl9yeF9pcnE7YCBhbmQgc28gb24sIGFyZSBhc3NpZ25lZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGtlZXBzIHRoaW5ncyBtYW5hZ2VhYmxlLgoKSSBzZWUgdGhlcmUmIzM5O3Mgc29tZSBicm9hZGVyIGFjdGl2aXR5IHdpdGggWERQIG1ldGFkYXRhIG9wZXJhdGlvbnM7IHRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBgaTQwZV94ZHBfcnhfaGFzaGAgYW5kIGBpNDBlX3hkcF9yeF92bGFuX3RhZ2AuIFBsdXMsIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIGZvciB0aGUgYGljZWAgYW5kIGBpZ2NgIGRyaXZlcnMgYXMgd2VsbC4gU2luY2UgdGhpcyBpcyBhbiBlbXVsYXRpb24gY29udGV4dCwgYW5kIHRoZSBvbmx5IGVtdWxhdGVkIGRldmljZSBpbiBwbGF5IGhlcmUgaXMgRTEwMDBFLCBteSBmb2N1cyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIG9uIHRoYXQgZHJpdmVyLgoKTm93LCBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgRTEwMDBFYCBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZsYWcgdG8gZW5hYmxlIHRoZSBFMTAwMEUgc3VwcG9ydC4gQWxyaWdodCwgeWVwLCBjb25maXJtZWQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LgoKTmV4dCBzdGVwOiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIGBlMTAwMGUvbmV0ZGV2LmNgIHJlZ2FyZGluZyB0aGUgUlggYnVmZmVyIGFsbG9jYXRpb24gYW5kIGNsZWFuaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgc3BlY2lmaWNhbGx5IGBlMTAwMF9jbGVhbl9yeF9pcnFgIHRvIGNvbmZpcm0gdGhlIGNvZGUgc3RydWN0dXJlLCBhbmQgbWFrZSBzdXJlIHRoYXQsIGFzIHN1c3BlY3RlZCwgdGhleSBhcmUgbm90IGlubGluZWQuCgpMb29rcyBsaWtlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGJleW9uZCBgRTEwMDBFYCB0aGF0IHdpbGwgaW1wYWN0IHRoaXMuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB1c2luZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sLCBhcyBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGUga2V5IGZ1bmN0aW9ucyByZXNpZGUgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RTEwMDBFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZTEwMDBfYWxsb2NfcnhfYnVmZmVycyYjMzQ7LAogICAgJiMzNDtlMTAwMF9jbGVhbl9yeF9pcnEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJYIHBhdGggb2YgdGhlIGUxMDAwZSBkcml2ZXIgKGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMgYW5kIGUxMDAwX2NsZWFuX3J4X2lycSksIHdoaWNoIGlzIGZ1bGx5IGVtdWxhdGVkIGluIFFFTVUgYW5kIHJlYWNoYWJsZS4gSXQgYWxzbyBtb2RpZmllcyBpNDBlLCBpY2UsIGFuZCBpZ2MgZHJpdmVycywgYnV0IHRob3NlIGFyZSBub3QgbmF0aXZlbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gV2UgZm9jdXMgb24gdGhlIGUxMDAwZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFMTAwMEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlMTAwMF9hbGxvY19yeF9idWZmZXJzJiMzNDssCiAgICAmIzM0O2UxMDAwX2NsZWFuX3J4X2lycSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjo0NzoyNi4yODM3MTU1NzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkwNzUzODIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFMTAwMEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwMF9hbGxvY19yeF9idWZmZXJzXCIsXG4gICAgXCJlMTAwMF9jbGVhbl9yeF9pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjQ3OjI2LjI4MzcyMjcxOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3MTMzNjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjZmMGFmNWM5NDM3ZjQxNjRiMDJjNjExOGFhMGQ3ODQ0NTVkYWIxMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjQ3OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcXG5pbmRleCAwYmNhMjkzY2Y5Y2I3Li44MmIzY2NjNzAyN2VhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcXG5AQCAtOTQxLDYgKzk0MSw4NiBAQCBUbyBzZWUgaW5wdXQgc2lnbmFsIG9uIHRob3NlIFBUUCBwaW5zLCB5b3UgbmVlZCB0byBjb25maWd1cmUgRFBMTCBwcm9wZXJseS5cXG4gT3V0cHV0IHNpZ25hbCBpcyBvbmx5IHZpc2libGUgb24gRFBMTCBhbmQgdG8gc2VuZCBpdCB0byB0aGUgYm9hcmQgU01BL1UuRkwgcGlucyxcXG4gRFBMTCBvdXRwdXQgcGlucyBoYXZlIHRvIGJlIG1hbnVhbGx5IGNvbmZpZ3VyZWQuXFxuIFxcbitVbm1hbmFnZWQgRFBMTCBTdXBwb3J0XFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rSGFyZHdhcmUgdmFyaWFudHMgb2YgRTgzMCBtYXkgc3VwcG9ydCBhbiB1bm1hbmFnZWQgRFBMTDpcXG4rXFxuKy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE4RiBmb3IgT0NQIDMuMCxcXG4rXFxuKy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE0Ri5cXG4rXFxuK0luIHRoZSBjYXNlIG9mIHRoZSB1bm1hbmFnZWQgRFBMTCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaGFyZGNvZGVkIHdpdGhpbiB0aGVcXG4raGFyZHdhcmUgYW5kIGZpcm13YXJlLCBtZWFuaW5nIHVzZXJzIGNhbm5vdCBtb2RpZnkgc2V0dGluZ3MuIEhvd2V2ZXIsXFxuK3VzZXJzIGNhbiBjaGVjayB0aGUgRFBMTCBsb2NrIHN0YXR1cyBhbmQgb2J0YWluIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cXG4rdGhyb3VnaCB0aGUgTGludXggRFBMTCBzdWJzeXN0ZW0uXFxuK1xcbitXaGVuIHByZXNlbnQsIHRoZSBEUExMIGRldmljZSBsb2NrcyB0byBhbiBleHRlcm5hbCBzaWduYWwgcHJvdmlkZWQgdGhyb3VnaCB0aGVcXG4rUENJZS9PQ1AgcGluLiBUaGUgZXhwZWN0ZWQgaW5wdXQgc2lnbmFsIGlzIDFQUFMgKDEgUHVsc2UgUGVyIFNlY29uZCkgZW1iZWRkZWRcXG4rb24gYSAxME1IeiByZWZlcmVuY2UgY2xvY2suXFxuK1RoZSBEUExMIHByb2R1Y2VzIG91dHB1dDpcXG4rXFxuKy0gZm9yIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2wpIFxcdTAwMjYgUEhZIChQaHlzaWNhbCBMYXllcikgY2xvY2tzLFxcbitcXG4rLSAxUFBTIGZvciBzeW5jaHJvbml6YXRpb24gb2Ygb25ib2FyZCBQSEMgKFByZWNpc2lvbiBIYXJkd2FyZSBDbG9jaykgdGltZXIuXFxuK1xcbitFeGFtcGxlIG91dHB1dCBvZiBxdWVyeWluZyB0aGUgTGludXggRFBMTCBzdWJzeXN0ZW0gY2FuIGJlIGZvdW5kIGJlbG93LlxcbitcXG4rLi4gY29kZS1ibG9jazo6IGNvbnNvbGVcXG4rICA6Y2FwdGlvbjogRHVtcGluZyB0aGUgRFBMTCBwaW5zXFxuK1xcbisgICQgXFx1MDAzY3lubFxcdTAwM2UgLS1zcGVjIERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcGxsLnlhbWwgLS1kdW1wIHBpbi1nZXRcXG4rICBbeydib2FyZC1sYWJlbCc6ICcxNTg4LVRJTUVfU1lOQycsXFxuKyAgICAnY2FwYWJpbGl0aWVzJzogc2V0KCksXFxuKyAgICAnY2xvY2staWQnOiAyODI1NzQ0NzE1NjEyMTYsXFxuKyAgICAnZXN5bmMtZnJlcXVlbmN5JzogMSxcXG4rICAgICdlc3luYy1mcmVxdWVuY3ktc3VwcG9ydGVkJzogW3snZnJlcXVlbmN5LW1heCc6IDEsICdmcmVxdWVuY3ktbWluJzogMX1dLFxcbisgICAgJ2VzeW5jLXB1bHNlJzogMjUsXFxuKyAgICAnZnJlcXVlbmN5JzogMTAwMDAwMDAsXFxuKyAgICAnaWQnOiAxMyxcXG4rICAgICdtb2R1bGUtbmFtZSc6ICdpY2UnLFxcbisgICAgJ3BhcmVudC1kZXZpY2UnOiBbeydkaXJlY3Rpb24nOiAnaW5wdXQnLFxcbisgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnQtaWQnOiA2LFxcbisgICAgICAgICAgICAgICAgICAgICAgICdzdGF0ZSc6ICdjb25uZWN0ZWQnfV0sXFxuKyAgICAncGhhc2UtYWRqdXN0LW1heCc6IDAsXFxuKyAgICAncGhhc2UtYWRqdXN0LW1pbic6IDAsXFxuKyAgICAndHlwZSc6ICdleHQnfSxcXG4rICAgIHsnYm9hcmQtbGFiZWwnOiAnTUFDLVBIWS1DTEsnLFxcbisgICAgICAnY2FwYWJpbGl0aWVzJzogc2V0KCksXFxuKyAgICAnY2xvY2staWQnOiAyODI1NzQ0NzE1NjEyMTYsXFxuKyAgICAnZnJlcXVlbmN5JzogMTU2MjUwMDAwLFxcbisgICAgJ2lkJzogMTQsXFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcXG4rICAgICdwYXJlbnQtZGV2aWNlJzogW3snZGlyZWN0aW9uJzogJ291dHB1dCcsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3BhcmVudC1pZCc6IDYsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlJzogJ2Nvbm5lY3RlZCd9XSxcXG4rICAgICdwaGFzZS1hZGp1c3QtbWF4JzogMCxcXG4rICAgICdwaGFzZS1hZGp1c3QtbWluJzogMCxcXG4rICAgICd0eXBlJzogJ3N5bmNlLWV0aC1wb3J0J30sXFxuKyAgeydib2FyZC1sYWJlbCc6ICcxNTg4LVRJTUVfUkVGJyxcXG4rICAgICdjYXBhYmlsaXRpZXMnOiBzZXQoKSxcXG4rICAgICdjbG9jay1pZCc6IDI4MjU3NDQ3MTU2MTIxNixcXG4rICAgICdmcmVxdWVuY3knOiAxLFxcbisgICAgJ2lkJzogMTUsXFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcXG4rICAgICdwYXJlbnQtZGV2aWNlJzogW3snZGlyZWN0aW9uJzogJ291dHB1dCcsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3BhcmVudC1pZCc6IDYsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlJzogJ2Nvbm5lY3RlZCd9XSxcXG4rICAgICdwaGFzZS1hZGp1c3QtbWF4JzogMCxcXG4rICAgICdwaGFzZS1hZGp1c3QtbWluJzogMCxcXG4rICAgICd0eXBlJzogJ2ludC1vc2NpbGxhdG9yJ31dXFxuK1xcbisuLiBjb2RlLWJsb2NrOjogY29uc29sZVxcbisgIDpjYXB0aW9uOiBEdW1waW5nIHRoZSBEUExMIGRldmljZXNcXG4rXFxuKyAgJCBcXHUwMDNjeW5sXFx1MDAzZSAtLXNwZWMgRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2RwbGwueWFtbCAtLWR1bXAgZGV2aWNlLWdldFxcbisgIFt7J2Nsb2NrLWlkJzogMjgyNTc0NDcxNTYxMjE2LFxcbisgICAgJ2lkJzogNixcXG4rICAgICdsb2NrLXN0YXR1cyc6ICdsb2NrZWQnLFxcbisgICAgJ21vZGUnOiAnbWFudWFsJyxcXG4rICAgICdtb2RlLXN1cHBvcnRlZCc6IFsnbWFudWFsJ10sXFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcXG4rICAgICd0eXBlJzogJ3Bwcyd9XVxcbitcXG4gR05TUyBtb2R1bGVcXG4gLS0tLS0tLS0tLS1cXG4gUmVxdWlyZXMga2VybmVsIGNvbXBpbGVkIHdpdGggQ09ORklHX0dOU1M9eSBvciBDT05GSUdfR05TUz1tLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNcXG5pbmRleCA4NDRmMzFhYjM3YWQ0Li5iMDhiY2JkYjE5ZDk3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuY1xcbkBAIC02NzUsNiArNjc1LDggQEAgc3RhdGljIHZvaWQgZTEwMDBfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZyxcXG4gXFx0XFx0c2tiID0gYnVmZmVyX2luZm8tXFx1MDAzZXNrYjtcXG4gXFx0XFx0aWYgKHNrYikge1xcbiBcXHRcXHRcXHRza2JfdHJpbShza2IsIDApO1xcbitcXHRcXHRcXHRpZiAobGlrZWx5KGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEpKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2Rlc2M7XFxuIFxcdFxcdFxcdGdvdG8gbWFwX3NrYjtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtNjkyLDEwICs2OTQsMTIgQEAgc3RhdGljIHZvaWQgZTEwMDBfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xcbiBcXHRcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgYnVmZmVyX2luZm8tXFx1MDAzZWRtYSkpIHtcXG4gXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiUnggRE1BIG1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlZG1hID0gMDtcXG4gXFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlcnhfZG1hX2ZhaWxlZCsrO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4rd3JpdGVfZGVzYzpcXG4gXFx0XFx0cnhfZGVzYyA9IEUxMDAwX1JYX0RFU0NfRVhUKCpyeF9yaW5nLCBpKTtcXG4gXFx0XFx0cnhfZGVzYy1cXHUwMDNlcmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEpO1xcbiBcXG5AQCAtOTUzLDcgKzk1Nyw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXFxuIFxcdFxcdGRtYV9ybWIoKTtcXHQvKiByZWFkIGRlc2NyaXB0b3IgYW5kIHJ4X2J1ZmZlcl9pbmZvIGFmdGVyIHN0YXR1cyBERCAqL1xcbiBcXG4gXFx0XFx0c2tiID0gYnVmZmVyX2luZm8tXFx1MDAzZXNrYjtcXG4tXFx0XFx0YnVmZmVyX2luZm8tXFx1MDAzZXNrYiA9IE5VTEw7XFxuIFxcbiBcXHRcXHRwcmVmZXRjaChza2ItXFx1MDAzZWRhdGEgLSBORVRfSVBfQUxJR04pO1xcbiBcXG5AQCAtOTY3LDkgKzk3MCw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXFxuIFxcbiBcXHRcXHRjbGVhbmVkID0gdHJ1ZTtcXG4gXFx0XFx0Y2xlYW5lZF9jb3VudCsrO1xcbi1cXHRcXHRkbWFfdW5tYXBfc2luZ2xlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEsXFxuLVxcdFxcdFxcdFxcdCBhZGFwdGVyLVxcdTAwM2VyeF9idWZmZXJfbGVuLCBETUFfRlJPTV9ERVZJQ0UpO1xcbi1cXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlZG1hID0gMDtcXG4gXFxuIFxcdFxcdGxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtXFx1MDAzZXdiLnVwcGVyLmxlbmd0aCk7XFxuIFxcbkBAIC05ODUsOCArOTg1LDYgQEAgc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcXG4gXFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWZsYWdzMiBcXHUwMDI2IEZMQUcyX0lTX0RJU0NBUkRJTkcpIHtcXG4gXFx0XFx0XFx0LyogQWxsIHJlY2VpdmVzIG11c3QgZml0IGludG8gYSBzaW5nbGUgYnVmZmVyICovXFxuIFxcdFxcdFxcdGVfZGJnKFxcXCJSZWNlaXZlIHBhY2tldCBjb25zdW1lZCBtdWx0aXBsZSBidWZmZXJzXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0LyogcmVjeWNsZSAqL1xcbi1cXHRcXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlc2tiID0gc2tiO1xcbiBcXHRcXHRcXHRpZiAoc3RhdGVyciBcXHUwMDI2IEUxMDAwX1JYRF9TVEFUX0VPUClcXG4gXFx0XFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlZmxhZ3MyIFxcdTAwMjY9IH5GTEFHMl9JU19ESVNDQVJESU5HO1xcbiBcXHRcXHRcXHRnb3RvIG5leHRfZGVzYztcXG5AQCAtOTk0LDggKzk5Miw2IEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoKHN0YXRlcnIgXFx1MDAyNiBFMTAwMF9SWERFWFRfRVJSX0ZSQU1FX0VSUl9NQVNLKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICEobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfUlhBTEwpKSkge1xcbi1cXHRcXHRcXHQvKiByZWN5Y2xlICovXFxuLVxcdFxcdFxcdGJ1ZmZlcl9pbmZvLVxcdTAwM2Vza2IgPSBza2I7XFxuIFxcdFxcdFxcdGdvdG8gbmV4dF9kZXNjO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMDIyLDE5ICsxMDE4LDMzIEBAIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZywgaW50ICp3b3JrX2RvbmUsXFxuIFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpuZXdfc2tiID1cXG4gXFx0XFx0XFx0XFx0bmFwaV9hbGxvY19za2IoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGksIGxlbmd0aCk7XFxuIFxcdFxcdFxcdGlmIChuZXdfc2tiKSB7XFxuK1xcdFxcdFxcdFxcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXJ4X2J1ZmZlcl9sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdERNQV9GUk9NX0RFVklDRSk7XFxuIFxcdFxcdFxcdFxcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChuZXdfc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgLU5FVF9JUF9BTElHTixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIChza2ItXFx1MDAzZWRhdGEgLVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRORVRfSVBfQUxJR04pLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgKGxlbmd0aCArXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdE5FVF9JUF9BTElHTikpO1xcbi1cXHRcXHRcXHRcXHQvKiBzYXZlIHRoZSBza2IgaW4gYnVmZmVyX2luZm8gYXMgZ29vZCAqL1xcbi1cXHRcXHRcXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlc2tiID0gc2tiO1xcbitcXHRcXHRcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBidWZmZXJfaW5mby1cXHUwMDNlZG1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBhZGFwdGVyLVxcdTAwM2VyeF9idWZmZXJfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBETUFfRlJPTV9ERVZJQ0UpO1xcbiBcXHRcXHRcXHRcXHRza2IgPSBuZXdfc2tiO1xcbitcXHRcXHRcXHRcXHRnb3RvIGNvcHlicmVha19kb25lO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdC8qIGVsc2UganVzdCBjb250aW51ZSB3aXRoIHRoZSBvbGQgb25lICovXFxuIFxcdFxcdH1cXG4tXFx0XFx0LyogZW5kIGNvcHlicmVhayBjb2RlICovXFxuK1xcbitcXHRcXHRidWZmZXJfaW5mby1cXHUwMDNlc2tiID0gTlVMTDtcXG4rXFx0XFx0ZG1hX3VubWFwX3NpbmdsZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBidWZmZXJfaW5mby1cXHUwMDNlZG1hLFxcbitcXHRcXHRcXHRcXHQgYWRhcHRlci1cXHUwMDNlcnhfYnVmZmVyX2xlbixcXG4rXFx0XFx0XFx0XFx0IERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdFxcdGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEgPSAwO1xcbitcXG4rY29weWJyZWFrX2RvbmU6XFxuIFxcdFxcdHNrYl9wdXQoc2tiLCBsZW5ndGgpO1xcbiBcXG4gXFx0XFx0LyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXFxuaW5kZXggMGNkMGU1NTk3YzkwOS4uYWJiYzcxZTgxNWFlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbkBAIC00LDYgKzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjZ2VuZXJhdGVkL3V0c3JlbGVhc2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYXNoX2R1bXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9wY3R5cGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9tYWN2bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG5AQCAtMjQxMSwxMCArMjQxMiwxMiBAQCB2b2lkIGk0MGVfYXFjX2FkZF9maWx0ZXJzKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcXG4gXFxuIFxcdGlmIChmY250ICE9IG51bV9hZGQpIHtcXG4gXFx0XFx0aWYgKHZzaS1cXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9NQUlOKSB7XFxuLVxcdFxcdFxcdHNldF9iaXQoX19JNDBFX1ZTSV9PVkVSRkxPV19QUk9NSVNDLCB2c2ktXFx1MDAzZXN0YXRlKTtcXG4tXFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnZzaS1cXHUwMDNlYmFjay1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHRcXHQgXFxcIkVycm9yICVzIGFkZGluZyBSWCBmaWx0ZXJzIG9uICVzLCBwcm9taXNjdW91cyBtb2RlIGZvcmNlZCBvblxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IGxpYmllX2FxX3N0cihhcV9zdGF0dXMpLCB2c2lfbmFtZSk7XFxuK1xcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHZzaS1cXHUwMDNlc3RhdGUpKSB7XFxuK1xcdFxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJFcnJvciAlcyBhZGRpbmcgUlggZmlsdGVycyBvbiAlcywgcHJvbWlzY3VvdXMgbW9kZSBmb3JjZWQgb25cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCBsaWJpZV9hcV9zdHIoYXFfc3RhdHVzKSwgdnNpX25hbWUpO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH0gZWxzZSBpZiAodnNpLVxcdTAwM2V0eXBlID09IEk0MEVfVlNJX1NSSU9WIHx8XFxuIFxcdFxcdFxcdCAgIHZzaS1cXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9WTURRMSB8fFxcbiBcXHRcXHRcXHQgICB2c2ktXFx1MDAzZXR5cGUgPT0gSTQwRV9WU0lfVk1EUTIpIHtcXG5AQCAtMjQ2NCwxMCArMjQ2NywxMSBAQCBpNDBlX2FxY19icm9hZGNhc3RfZmlsdGVyKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGFxX3JldCkge1xcbi1cXHRcXHRzZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVxcdTAwM2VzdGF0ZSk7XFxuLVxcdFxcdGRldl93YXJuKFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0IFxcXCJFcnJvciAlcywgZm9yY2luZyBvdmVyZmxvdyBwcm9taXNjdW91cyBvbiAlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGxpYmllX2FxX3N0cihody1cXHUwMDNlYXEuYXNxX2xhc3Rfc3RhdHVzKSwgdnNpX25hbWUpO1xcbitcXHRcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoX19JNDBFX1ZTSV9PVkVSRkxPV19QUk9NSVNDLCB2c2ktXFx1MDAzZXN0YXRlKSkge1xcbitcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRXJyb3IgJXMsIGZvcmNpbmcgb3ZlcmZsb3cgcHJvbWlzY3VvdXMgb24gJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBsaWJpZV9hcV9zdHIoaHctXFx1MDAzZWFxLmFzcV9sYXN0X3N0YXR1cyksIHZzaV9uYW1lKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gYXFfcmV0O1xcbkBAIC0zNjIyLDcgKzM2MjYsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGk0MGVfcmluZyAqcmluZylcXG4gXFx0fVxcbiBcXG4gc2tpcDpcXG4tXFx0eGRwX2luaXRfYnVmZihcXHUwMDI2cmluZy1cXHUwMDNleGRwLCB4ZHBfZnJhbWVfc3osIFxcdTAwMjZyaW5nLVxcdTAwM2V4ZHBfcnhxKTtcXG4rXFx0eGRwX2luaXRfYnVmZihcXHUwMDI2cmluZy1cXHUwMDNleGRwX2N0eC54ZHAsIHhkcF9mcmFtZV9zeiwgXFx1MDAyNnJpbmctXFx1MDAzZXhkcF9yeHEpO1xcbiBcXG4gXFx0cnhfY3R4LmRidWZmID0gRElWX1JPVU5EX1VQKHJpbmctXFx1MDAzZXJ4X2J1Zl9sZW4sXFxuIFxcdFxcdFxcdFxcdCAgICBCSVRfVUxMKEk0MEVfUlhRX0NUWF9EQlVGRl9TSElGVCkpO1xcbkBAIC0xMzU4Miw2ICsxMzU4Niw1MyBAQCBzdGF0aWMgaW50IGk0MGVfeGRwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGludCBpNDBlX3hkcF9yeF9oYXNoKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIHUzMiAqaGFzaCxcXG4rXFx0XFx0XFx0ICAgIGVudW0geGRwX3Jzc19oYXNoX3R5cGUgKnJzc190eXBlKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpNDBlX3hkcF9idWZmICpjdHggPSAoY29uc3Qgdm9pZCAqKV9jdHg7XFxuK1xcdGNvbnN0IHVuaW9uIGk0MGVfcnhfZGVzYyAqZGVzYyA9IGN0eC1cXHUwMDNlZGVzYztcXG4rXFx0c3RydWN0IGxpYmV0aF9yeF9wdCByeF9wdHlwZTtcXG4rXFx0dTggcmF3X3J4X3B0eXBlO1xcbitcXHR1NjQgc3RhdHVzO1xcbitcXG4rXFx0c3RhdHVzID0gbGU2NF90b19jcHUoZGVzYy1cXHUwMDNld2IucXdvcmQxLnN0YXR1c19lcnJvcl9sZW4pO1xcbitcXHRyYXdfcnhfcHR5cGUgPSBGSUVMRF9HRVQoSTQwRV9SWERfUVcxX1BUWVBFX01BU0ssIHN0YXR1cyk7XFxuK1xcdHJ4X3B0eXBlID0gbGliaWVfcnhfcHRfcGFyc2UocmF3X3J4X3B0eXBlKTtcXG4rXFxuK1xcdGlmICghbGliZXRoX3J4X3B0X2hhc19oYXNoKGN0eC1cXHUwMDNleGRwLnJ4cS1cXHUwMDNlZGV2LCByeF9wdHlwZSkgfHxcXG4rXFx0ICAgIEZJRUxEX0dFVChJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfTUFTSywgc3RhdHVzKSAhPVxcbitcXHRcXHQgICAgSTQwRV9SWF9ERVNDX0ZMVFNUQVRfUlNTX0hBU0gpXFxuK1xcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFxuK1xcdCpoYXNoID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNld2IucXdvcmQwLmhpX2R3b3JkLnJzcyk7XFxuK1xcdCpyc3NfdHlwZSA9IHJ4X3B0eXBlLmhhc2hfdHlwZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGk0MGVfeGRwX3J4X3ZsYW5fdGFnKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKl9jdHgsIF9fYmUxNiAqdmxhbl9wcm90byxcXG4rXFx0XFx0XFx0XFx0dTE2ICp2bGFuX3RjaSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqY3R4ID0gKGNvbnN0IHZvaWQgKilfY3R4O1xcbitcXHRjb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2MgPSBjdHgtXFx1MDAzZWRlc2M7XFxuK1xcdHU2NCBzdGF0dXM7XFxuK1xcbitcXHRzdGF0dXMgPSBsZTY0X3RvX2NwdShkZXNjLVxcdTAwM2V3Yi5xd29yZDEuc3RhdHVzX2Vycm9yX2xlbik7XFxuK1xcbitcXHRpZiAoIShzdGF0dXMgXFx1MDAyNiBCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MMlRBRzFQX1NISUZUKSkpXFxuK1xcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFxuK1xcdCp2bGFuX3Byb3RvID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpO1xcbitcXHQqdmxhbl90Y2kgPSBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2V3Yi5xd29yZDAubG9fZHdvcmQubDJ0YWcxKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHhkcF9tZXRhZGF0YV9vcHMgaTQwZV94ZHBfbWV0YWRhdGFfb3BzID0ge1xcbitcXHQueG1vX3J4X2hhc2hcXHRcXHQ9IGk0MGVfeGRwX3J4X2hhc2gsXFxuK1xcdC54bW9fcnhfdmxhbl90YWdcXHQ9IGk0MGVfeGRwX3J4X3ZsYW5fdGFnLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNDBlX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fb3BlblxcdFxcdD0gaTQwZV9vcGVuLFxcbiBcXHQubmRvX3N0b3BcXHRcXHQ9IGk0MGVfY2xvc2UsXFxuQEAgLTEzNzg0LDYgKzEzODM1LDcgQEAgc3RhdGljIGludCBpNDBlX2NvbmZpZ19uZXRkZXYoc3RydWN0IGk0MGVfdnNpICp2c2kpXFxuIFxcdGk0MGVfdnNpX2NvbmZpZ19uZXRkZXZfdGModnNpLCB2c2ktXFx1MDAzZXRjX2NvbmZpZy5lbmFibGVkX3RjKTtcXG4gXFxuIFxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZpNDBlX25ldGRldl9vcHM7XFxuK1xcdG5ldGRldi1cXHUwMDNleGRwX21ldGFkYXRhX29wcyA9IFxcdTAwMjZpNDBlX3hkcF9tZXRhZGF0YV9vcHM7XFxuIFxcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XFxuIFxcdGk0MGVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xcbmluZGV4IGVmNWU2NTc4MTZmMDAuLjdmNjhhZGI1MTA5YjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcXG5AQCAtMjQzOCwxMCArMjQzOCwxMSBAQCBzdGF0aWMgaW50IGk0MGVfY2xlYW5fcnhfaXJxKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIGludCBidWRnZXQsXFxuIFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50ICpyeF9jbGVhbmVkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlcyA9IDAsIHRvdGFsX3J4X3BhY2tldHMgPSAwO1xcbitcXHRzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqeGRwX2N0eCA9IFxcdTAwMjZyeF9yaW5nLVxcdTAwM2V4ZHBfY3R4O1xcbiBcXHR1MTYgY2xlYW5lZF9jb3VudCA9IEk0MEVfREVTQ19VTlVTRUQocnhfcmluZyk7XFxuIFxcdHUxNiBjbGVhbl90aHJlc2hvbGQgPSByeF9yaW5nLVxcdTAwM2Vjb3VudCAvIDI7XFxuIFxcdHVuc2lnbmVkIGludCBvZmZzZXQgPSByeF9yaW5nLVxcdTAwM2VyeF9vZmZzZXQ7XFxuLVxcdHN0cnVjdCB4ZHBfYnVmZiAqeGRwID0gXFx1MDAyNnJ4X3JpbmctXFx1MDAzZXhkcDtcXG4rXFx0c3RydWN0IHhkcF9idWZmICp4ZHAgPSBcXHUwMDI2eGRwX2N0eC1cXHUwMDNleGRwO1xcbiBcXHR1bnNpZ25lZCBpbnQgeGRwX3htaXQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xcbiBcXHRib29sIGZhaWx1cmUgPSBmYWxzZTtcXG5AQCAtMjUzMCw2ICsyNTMxLDggQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LFxcbiBcXHRcXHRpZiAobmVvcClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHR4ZHBfY3R4LVxcdTAwM2VkZXNjID0gcnhfZGVzYztcXG4rXFxuIFxcdFxcdHhkcF9yZXMgPSBpNDBlX3J1bl94ZHAocnhfcmluZywgeGRwLCB4ZHBfcHJvZyk7XFxuIFxcbiBcXHRcXHRpZiAoeGRwX3Jlcykge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaFxcbmluZGV4IDFlNWZkNjNkNDdmNDcuLmJiNzQxZmYzZTVmMmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcXG5AQCAtMjgzLDYgKzI4MywxMSBAQCBzdHJ1Y3QgaTQwZV9yeF9idWZmZXIge1xcbiBcXHRfX3UzMiBwYWdlX2NvdW50O1xcbiB9O1xcbiBcXG4rc3RydWN0IGk0MGVfeGRwX2J1ZmYge1xcbitcXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xcbitcXHRjb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2M7XFxuK307XFxuK1xcbiBzdHJ1Y3QgaTQwZV9xdWV1ZV9zdGF0cyB7XFxuIFxcdHU2NCBwYWNrZXRzO1xcbiBcXHR1NjQgYnl0ZXM7XFxuQEAgLTM0NSw3ICszNTAsNyBAQCBzdHJ1Y3QgaTQwZV9yaW5nIHtcXG4gXFx0ICogYW5kIHRvIHJlc3VtZSBwYWNrZXQgYnVpbGRpbmcgZm9yIHRoaXMgcmluZyBpbiB0aGUgbmV4dCBjYWxsIHRvXFxuIFxcdCAqIGk0MGVfY2xlYW5fcnhfcmluZ19pcnEoKS5cXG4gXFx0ICovXFxuLVxcdHN0cnVjdCB4ZHBfYnVmZiB4ZHA7XFxuK1xcdHN0cnVjdCBpNDBlX3hkcF9idWZmIHhkcF9jdHg7XFxuIFxcbiBcXHQvKiBOZXh0IGRlc2NyaXB0b3IgdG8gYmUgcHJvY2Vzc2VkOyBuZXh0X3RvX2NsZWFuIGlzIHVwZGF0ZWQgb25seSBvblxcbiBcXHQgKiBwcm9jZXNzaW5nIEVPUCBkZXNjcmlwdG9yXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oXFxuaW5kZXggZWQ4YmJkYjU4NmRhOS4uMTZhNjVjNmU1MTUzNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R5cGUuaFxcbkBAIC00LDYgKzQsNyBAQFxcbiAjaWZuZGVmIF9JNDBFX1RZUEVfSF9cXG4gI2RlZmluZSBfSTQwRV9UWVBFX0hfXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaTQwZV9hZG1pbnEuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImk0MGVfaG1jLmhcXFwiXFxuQEAgLTY5OSw2ICs3MDAsMTAgQEAgZW51bSBpNDBlX3J4X2Rlc2Nfc3RhdHVzX2JpdHMge1xcbiBcXHRJNDBFX1JYX0RFU0NfU1RBVFVTX0xBU1QgLyogdGhpcyBlbnRyeSBtdXN0IGJlIGxhc3QhISEgKi9cXG4gfTtcXG4gXFxuKyNkZWZpbmUgSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX01BU0sgICAgICAgICAgICAgICAgICAgXFxcXFxcbitcXHRHRU5NQVNLX1VMTChJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfU0hJRlQgKyAxLCBcXFxcXFxuK1xcdFxcdCAgICBJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfU0hJRlQpXFxuK1xcbiAjZGVmaW5lIEk0MEVfUlhEX1FXMV9TVEFUVVNfU0hJRlRcXHQwXFxuICNkZWZpbmUgSTQwRV9SWERfUVcxX1NUQVRVU19NQVNLXFx0KChCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MQVNUKSAtIDEpIFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0IFxcdTAwM2NcXHUwMDNjIEk0MEVfUlhEX1FXMV9TVEFUVVNfU0hJRlQpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xcbmluZGV4IDlmNDczODhlYWJhNTMuLjUxYTA1Y2U0YzdjZTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXFxuQEAgLTI0Niw2ICsyNDYsOCBAQCBib29sIGk0MGVfYWxsb2NfcnhfYnVmZmVyc196YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCB1MTYgY291bnQpXFxuIFxcdHUzMiBuYl9idWZmcywgaTtcXG4gXFx0ZG1hX2FkZHJfdCBkbWE7XFxuIFxcbitcXHRYU0tfQ0hFQ0tfUFJJVl9UWVBFKHN0cnVjdCBpNDBlX3hkcF9idWZmKTtcXG4rXFxuIFxcdHJ4X2Rlc2MgPSBJNDBFX1JYX0RFU0MocnhfcmluZywgbnR1KTtcXG4gXFx0eGRwID0gaTQwZV9yeF9iaShyeF9yaW5nLCBudHUpO1xcbiBcXG5AQCAtMzk2LDYgKzM5OCwxNCBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsXFxuIFxcdFdBUk5fT05fT05DRSgxKTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBpNDBlX3hkcF9idWZmICp4c2tfYnVmZl90b19pNDBlX2N0eChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4re1xcbitcXHQvKiB4ZHBfYnVmZiBwb2ludGVyIHVzZWQgYnkgWkMgY29kZSBwYXRoIGlzIGFsbG9jYXRlZCBhcyB4ZHBfYnVmZl94c2suXFxuK1xcdCAqIGk0MGVfeGRwX2J1ZmYgcHJpdmF0ZSBmaWVsZHMgb3ZlcmxhcCB3aXRoIHhkcF9idWZmX3hzay1cXHUwMDNlY2IuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gKHN0cnVjdCBpNDBlX3hkcF9idWZmICopeGRwO1xcbit9XFxuK1xcbiAvKipcXG4gICogaTQwZV9jbGVhbl9yeF9pcnFfemMgLSBDb25zdW1lcyBSeCBwYWNrZXRzIGZyb20gdGhlIGhhcmR3YXJlIHJpbmdcXG4gICogQHJ4X3Jpbmc6IFJ4IHJpbmdcXG5AQCAtNDcyLDYgKzQ4Miw4IEBAIGludCBpNDBlX2NsZWFuX3J4X2lycV96YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0KVxcbiBcXHRcXHRpZiAoaTQwZV9pc19ub25fZW9wKHJ4X3JpbmcsIHJ4X2Rlc2MpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdHhza19idWZmX3RvX2k0MGVfY3R4KGZpcnN0KS1cXHUwMDNlZGVzYyA9IHJ4X2Rlc2M7XFxuK1xcbiBcXHRcXHR4ZHBfcmVzID0gaTQwZV9ydW5feGRwX3pjKHJ4X3JpbmcsIGZpcnN0LCB4ZHBfcHJvZyk7XFxuIFxcdFxcdGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMocnhfcmluZywgZmlyc3QsIHJ4X2Rlc2MsIFxcdTAwMjZyeF9wYWNrZXRzLFxcbiBcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZyeF9ieXRlcywgeGRwX3JlcywgXFx1MDAyNmZhaWx1cmUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9oZWFsdGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jXFxuaW5kZXggOGU5YThhODE3OGQ0OC4uYTgzZWI5ZjEwNGM4MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9oZWFsdGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jXFxuQEAgLTEwMSw2ICsxMDEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9oZWFsdGhfc3RhdHVzIGljZV9oZWFsdGhfc3RhdHVzX2xvb2t1cFtdID0ge1xcbiBcXHRcXHRcXFwiU3VwcGxpZWQgTUlCIGZpbGUgaXMgaW52YWxpZC4gRENCIHJldmVydGVkIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cXFwiLFxcbiBcXHRcXHRcXFwiRGlzYWJsZSBGVy1MTERQIGFuZCBjaGVjayBEQ0J4IHN5c3RlbSBjb25maWd1cmF0aW9uLlxcXCIsXFxuIFxcdFxcdHtpY2VfcG9ydF9udW1iZXJfbGFiZWwsIFxcXCJNSUIgSURcXFwifX0sXFxuK1xcdHtJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0ssIFxcXCJMb2NhbCBEUExMIGxvY2sgc3RhdHVzXFxcIixcXG4rXFx0XFx0TlVMTCx9LFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBpY2VfaGVhbHRoX3N0YXR1c19sb29rdXBfY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbkBAIC0yNDIsNiArMjQ0LDEwIEBAIHZvaWQgaWNlX3Byb2Nlc3NfaGVhbHRoX3N0YXR1c19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9ycV9ldmVudF9pbmZvXFxuIFxcdFxcdFxcdFxcdHBmLVxcdTAwM2VoZWFsdGhfcmVwb3J0ZXJzLmZ3X3N0YXR1cyA9ICpoZWFsdGhfaW5mbztcXG4gXFx0XFx0XFx0XFx0ZGV2bGlua19oZWFsdGhfcmVwb3J0KHBmLVxcdTAwM2VoZWFsdGhfcmVwb3J0ZXJzLmZ3LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiRlcgc3luZHJvbWUgcmVwb3J0ZWRcXFwiLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHN0YXR1c19jb2RlID09IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgdGVzdF9iaXQoSUNFX0ZMQUdfRFBMTCwgcGYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgcGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZClcXG4rXFx0XFx0XFx0XFx0XFx0aWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHBmLCBoZWFsdGhfaW5mbywgdHJ1ZSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIElDRV9BUUNfSEVBTFRIX1NUQVRVU19QRjpcXG4gXFx0XFx0XFx0Y2FzZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfUE9SVDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZG1pbnFfY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaFxcbmluZGV4IDQyODc4YWJhYzllYjEuLjg0OGFjNTgzNDI5NzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZG1pbnFfY21kLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaFxcbkBAIC0xNTAwLDYgKzE1MDAsNyBAQCBzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua190b3BvIHtcXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9QQ0E5NTc1XFx0XFx0MHgyMVxcbiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMMzA2MzJfODAwMzJcXHQweDI0XFxuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfU0k1MzgzXzUzODRcXHQweDI1XFxuKyNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfWkw4MDY0MFxcdFxcdDB4MjdcXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9FODIyX1BIWVxcdFxcdDB4MzBcXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9DODI3XFx0XFx0MHgzMVxcbiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX0dFTl9DTEtfTVVYXFx0MHg0N1xcbkBAIC0yNDgzLDExICsyNDg0LDE0IEBAIGVudW0gaWNlX2FxY19oZWFsdGhfc3RhdHVzIHtcXG4gXFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9CTUNfUkVTRVRcXHRcXHRcXHQ9IDB4NTBCLFxcbiBcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfTU5HX0ZBSUxcXHRcXHRcXHQ9IDB4NTBDLFxcbiBcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX1JFU09VUkNFX0FMTE9DX0ZBSUxcXHRcXHQ9IDB4NTBELFxcbitcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0tcXHRcXHRcXHQ9IDB4NjAxLFxcbiBcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0ZXX0xPT1BcXHRcXHRcXHQ9IDB4MTAwMCxcXG4gXFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9GV19QRlJfRkFJTFxcdFxcdFxcdD0gMHgxMDAxLFxcbiBcXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfRkFJTF9BUVxcdFxcdFxcdD0gMHgxMDAyLFxcbiB9O1xcbiBcXG4rI2RlZmluZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfQ09ERV9OVU1cXHRcXHRcXHRcXHQ2NFxcbitcXG4gLyogR2V0IEhlYWx0aCBTdGF0dXMgKGluZGlyZWN0IDB4RkYyMikgKi9cXG4gc3RydWN0IGljZV9hcWNfZ2V0X2hlYWx0aF9zdGF0dXMge1xcbiBcXHRfX2xlMTYgaGVhbHRoX3N0YXR1c19jb3VudDtcXG5AQCAtMjUxNCw2ICsyNTE4LDEzIEBAIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSB7XFxuIFxcdF9fbGUzMiBpbnRlcm5hbF9kYXRhMjtcXG4gfTtcXG4gXFxuKy8qIEdldCBIZWFsdGggU3RhdHVzIHJlc3BvbnNlIGJ1ZmZlciBlbnRyeSwgKDB4RkYyMSlcXG4rICogcmVwZWF0ZWQgcGVyIHJlcG9ydGVkIGhlYWx0aCBzdGF0dXNcXG4rICovXFxuK3N0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtIHtcXG4rXFx0X19sZTE2IGhlYWx0aF9zdGF0dXNfY29kZTtcXG4rfTtcXG4rXFxuIC8qIEFkbWluIFF1ZXVlIGNvbW1hbmQgb3Bjb2RlcyAqL1xcbiBlbnVtIGljZV9hZG1pbnFfb3BjIHtcXG4gXFx0LyogQVEgY29tbWFuZHMgKi9cXG5AQCAtMjY3Nyw2ICsyNjg4LDcgQEAgZW51bSBpY2VfYWRtaW5xX29wYyB7XFxuIFxcbiBcXHQvKiBTeXN0ZW0gRGlhZ25vc3RpYyBjb21tYW5kcyAqL1xcbiBcXHRpY2VfYXFjX29wY19zZXRfaGVhbHRoX3N0YXR1c19jZmdcXHRcXHQ9IDB4RkYyMCxcXG4rXFx0aWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzXFx0PSAweEZGMjEsXFxuIFxcdGljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzXFx0XFx0XFx0PSAweEZGMjIsXFxuIFxcbiBcXHQvKiBGVyBMb2dnaW5nIENvbW1hbmRzICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXFxuaW5kZXggZWYxY2UxMDZmODFiNS4uMmM3MmVkMTg2OTVjNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1xcbkBAIC0zMDQ4LDYgKzMwNDgsMjkgQEAgYm9vbCBpY2VfaXNfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3QgLSBjaGVjayBmb3IgdW5tYW5hZ2VkIENHVSBwcmVzZW5jZVxcbisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxcbisgKlxcbisgKiBDaGVjayBpZiB0aGUgdW5tYW5hZ2VkIENsb2NrIEdlbmVyYXRpb24gVW5pdCAoQ0dVKSBkZXZpY2UgaXMgcHJlc2VudCBpbiB0aGUgbmV0bGlzdC5cXG4rICogU2F2ZSB0aGUgQ0dVIHBhcnQgbnVtYmVyIGluIHRoZSBodyBzdHJ1Y3R1cmUgZm9yIGxhdGVyIHVzZS5cXG4rICogUmV0dXJuOlxcbisgKiAqIHRydWUgLSB1bm1hbmFnZWQgY2d1IGlzIHByZXNlbnRcXG4rICogKiBmYWxzZSAtIHVubWFuYWdlZCBjZ3UgaXMgbm90IHByZXNlbnRcXG4rICovXFxuK2Jvb2wgaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodylcXG4re1xcbitcXHRpZiAoIWljZV9maW5kX25ldGxpc3Rfbm9kZShodywgSUNFX0FRQ19MSU5LX1RPUE9fTk9ERV9UWVBFX0NMS19DVFJMLFxcbitcXHRcXHRcXHRcXHQgICBJQ0VfQVFDX0xJTktfVE9QT19OT0RFX0NUWF9HTE9CQUwsXFxuK1xcdFxcdFxcdFxcdCAgIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDAsXFxuK1xcdFxcdFxcdFxcdCAgIE5VTEwpKSB7XFxuK1xcdFxcdGh3LVxcdTAwM2VjZ3VfcGFydF9udW1iZXIgPSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2lzX2dwc19pbl9uZXRsaXN0XFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XFxuQEAgLTYzMTIsNiArNjMzNSwxMTkgQEAgYm9vbCBpY2VfaXNfZndfaGVhbHRoX3JlcG9ydF9zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcdFxcdFxcdFxcdCAgICAgSUNFX0ZXX0FQSV9IRUFMVEhfUkVQT1JUX1BBVENIKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQgLSBnZXQgc3VwcG9ydGVkIGhlYWx0aCBzdGF0dXMgY29kZXNcXG4rICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcXG4rICogQGJ1ZmY6IHBvaW50ZXIgdG8gYnVmZmVyIHdoZXJlIGhlYWx0aCBzdGF0dXMgZWxlbWVudHMgd2lsbCBiZSBzdG9yZWRcXG4rICogQG51bTogbnVtYmVyIG9mIGhlYWx0aCBzdGF0dXMgZWxlbWVudHMgYnVmZmVyIGNhbiBob2xkXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAwIC0gc3VjY2VzcyxcXG4rICogKiBuZWdhdGl2ZSAtIEFRIGVycm9yIGNvZGUuXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK2ljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtICpidWZmLFxcbitcXHRcXHRcXHRcXHQgICBpbnQgbnVtKVxcbit7XFxuK1xcdHUxNiBjb2RlID0gaWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzO1xcbitcXHRzdHJ1Y3QgbGliaWVfYXFfZGVzYyBkZXNjO1xcbitcXG4rXFx0aWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoXFx1MDAyNmRlc2MsIGNvZGUpO1xcbitcXG4rXFx0cmV0dXJuIGljZV9hcV9zZW5kX2NtZChodywgXFx1MDAyNmRlc2MsIGJ1ZmYsIG51bSAqIHNpemVvZigqYnVmZiksIE5VTEwpO1xcbit9XFxuK1xcbisvKipcXG4rICogaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzIC0gZ2V0IGN1cnJlbnQgaGVhbHRoIHN0YXR1cyBhcnJheSBmcm9tIHRoZSBmaXJtd2FyZVxcbisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbisgKiBAYnVmZjogcG9pbnRlciB0byBidWZmZXIgd2hlcmUgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyB3aWxsIGJlIHN0b3JlZFxcbisgKiBAbnVtOiBudW1iZXIgb2YgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyBidWZmZXIgY2FuIGhvbGRcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgLSBzdWNjZXNzLFxcbisgKiAqIG5lZ2F0aXZlIC0gQVEgZXJyb3IgY29kZS5cXG4rICovXFxuK2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBsaWJpZV9hcV9kZXNjIGRlc2M7XFxuK1xcbitcXHRpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYyhcXHUwMDI2ZGVzYyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgaWNlX2FxY19vcGNfZ2V0X2hlYWx0aF9zdGF0dXMpO1xcbitcXG4rXFx0cmV0dXJuIGljZV9hcV9zZW5kX2NtZChodywgXFx1MDAyNmRlc2MsIGJ1ZmYsIG51bSAqIHNpemVvZigqYnVmZiksIE5VTEwpO1xcbit9XFxuK1xcbisvKipcXG4rICogaWNlX2lzX2hlYWx0aF9zdGF0dXNfY29kZV9zdXBwb3J0ZWQgLSBjaGVjayBpZiBoZWFsdGggc3RhdHVzIGNvZGUgaXMgc3VwcG9ydGVkXFxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuKyAqIEBjb2RlOiBoZWFsdGggc3RhdHVzIGNvZGUgdG8gY2hlY2tcXG4rICogQHN1cHBvcnRlZDogcG9pbnRlciB0byBib29sZWFuIHJlc3VsdFxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2VcXG4rICovXFxuK2ludCBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IGNvZGUsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgKnN1cHBvcnRlZClcXG4re1xcbitcXHRjb25zdCBpbnQgQlVGRl9TSVpFID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNO1xcbitcXHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSAqYnVmZjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdCpzdXBwb3J0ZWQgPSBmYWxzZTtcXG4rXFx0YnVmZiA9IGt6YWxsb2Nfb2JqcygqYnVmZiwgQlVGRl9TSVpFKTtcXG4rXFx0aWYgKCFidWZmKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmV0ID0gaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzX3N1cHBvcnRlZChodywgYnVmZiwgQlVGRl9TSVpFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBmcmVlX2J1ZmY7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgQlVGRl9TSVpFIFxcdTAwMjZcXHUwMDI2IGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlOyBpKyspXFxuK1xcdFxcdGlmIChsZTE2X3RvX2NwdShidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZSkgPT0gY29kZSkge1xcbitcXHRcXHRcXHQqc3VwcG9ydGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK2ZyZWVfYnVmZjpcXG4rXFx0a2ZyZWUoYnVmZik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlIC0gZ2V0IGxhc3QgaGVhbHRoIHN0YXR1cyBmb3IgZ2l2ZW4gY29kZVxcbisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbisgKiBAb3V0OiBwb2ludGVyIHRvIHRoZSBoZWFsdGggc3RhdHVzIHN0cnVjdCB0byBiZSBmaWxsZWRcXG4rICogQGNvZGU6IGhlYWx0aCBzdGF0dXMgY29kZSB0byBjaGVja1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2VcXG4rICovXFxuK2ludCBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKHN0cnVjdCBpY2VfaHcgKmh3LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpvdXQsXFxuK1xcdFxcdFxcdFxcdCAgICB1MTYgY29kZSlcXG4re1xcbitcXHRjb25zdCBpbnQgQlVGRl9TSVpFID0gSUNFX0FRQ19IRUFMVEhfU1RBVFVTX0NPREVfTlVNO1xcbitcXHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmY7XFxuK1xcdGludCByZXQsIGxhc3Rfc3RhdHVzID0gLTE7XFxuK1xcbitcXHRidWZmID0ga3phbGxvY19vYmpzKCpidWZmLCBCVUZGX1NJWkUpO1xcbitcXHRpZiAoIWJ1ZmYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRyZXQgPSBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoaHcsIGJ1ZmYsIEJVRkZfU0laRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZnJlZV9idWZmO1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIEJVRkZfU0laRSBcXHUwMDI2XFx1MDAyNiBidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZTsgaSsrKVxcbitcXHRcXHRpZiAobGUxNl90b19jcHUoYnVmZltpXS5oZWFsdGhfc3RhdHVzX2NvZGUpID09IGNvZGUpXFxuK1xcdFxcdFxcdGxhc3Rfc3RhdHVzID0gaTtcXG4rXFxuK1xcdGlmIChsYXN0X3N0YXR1cyBcXHUwMDNlPSAwKVxcbitcXHRcXHRtZW1jcHkob3V0LCBcXHUwMDI2YnVmZltsYXN0X3N0YXR1c10sIHNpemVvZigqb3V0KSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bWVtc2V0KG91dCwgMCwgc2l6ZW9mKCpvdXQpKTtcXG4rXFxuK2ZyZWVfYnVmZjpcXG4rXFx0a2ZyZWUoYnVmZik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfYXFfc2V0X2hlYWx0aF9zdGF0dXNfY2ZnIC0gQ29uZmlndXJlIEZXIGhlYWx0aCBldmVudHNcXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcXG5pbmRleCA5ZjUzNDQyMTIxOTU1Li41MTAzNjE4OGNkMzk2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oXFxuQEAgLTE2Miw2ICsxNjIsNyBAQCBpY2VfYXFfZ2V0X3BoeV9jYXBzKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBxdWFsX21vZHMsIHU4IHJlcG9ydF9tb2RlLFxcbiBib29sIGljZV9pc19waHlfcmNsa19pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4gYm9vbCBpY2VfaXNfY2xvY2tfbXV4X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xcbiBib29sIGljZV9pc19jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuK2Jvb2wgaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuIGJvb2wgaWNlX2lzX2dwc19pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4gaW50XFxuIGljZV9hcV9nZXRfbmV0bGlzdF9ub2RlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua190b3BvICpjbWQsXFxuQEAgLTE4OCw2ICsxODksMTMgQEAgaWNlX2dldF9saW5rX2RlZmF1bHRfb3ZlcnJpZGUoc3RydWN0IGljZV9saW5rX2RlZmF1bHRfb3ZlcnJpZGVfdGx2ICpsZG8sXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSk7XFxuIGJvb2wgaWNlX2lzX3BoeV9jYXBzX2FuX2VuYWJsZWQoc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHMpO1xcbiBib29sIGljZV9pc19md19oZWFsdGhfcmVwb3J0X3N1cHBvcnRlZChzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuK2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKTtcXG4raW50IGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgY29kZSxcXG4rXFx0XFx0XFx0XFx0XFx0Ym9vbCAqc3VwcG9ydGVkKTtcXG4raW50IGljZV9nZXRfbGFzdF9oZWFsdGhfc3RhdHVzX2NvZGUoc3RydWN0IGljZV9odyAqaHcsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKm91dCxcXG4rXFx0XFx0XFx0XFx0ICAgIHUxNiBjb2RlKTtcXG4gaW50IGljZV9hcV9zZXRfaGVhbHRoX3N0YXR1c19jZmcoc3RydWN0IGljZV9odyAqaHcsIHU4IGV2ZW50X3NvdXJjZSk7XFxuIGludCBpY2VfYXFfZ2V0X3BoeV9lcXVhbGl6YXRpb24oc3RydWN0IGljZV9odyAqaHcsIHUxNiBkYXRhX2luLCB1MTYgb3BfY29kZSxcXG4gXFx0XFx0XFx0XFx0dTggc2VyZGVzX251bSwgaW50ICpvdXRwdXQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuY1xcbmluZGV4IGExMGMxYzhkODY5NzcuLmJiNWNjMGEyYmE2OWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmNcXG5AQCAtODcyLDcgKzg3Miw3IEBAIHN0YXRpYyBpbnQgaWNlX2RjYm5sX2RlbGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGlmIChwZi1cXHUwMDNlZGNieF9jYXAgXFx1MDAyNiBEQ0JfQ0FQX0RDQlhfTExEX01BTkFHRUQpIHtcXG4tXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJjYW4ndCBkZWxldGUgRFNDUCBuZXRsaW5rIGFwcCB3aGVuIEZXIERDQiBhZ2VudCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcImNhbid0IGRlbGV0ZSBEU0NQIG5ldGxpbmsgYXBwIHdoZW4gRlcgRENCIGFnZW50IGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuaW5kZXggODVhNzRjZDZlYTFmMy4uMWNhMTM3ZjY3ZGQ0OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuQEAgLTE5LDYgKzE5LDggQEBcXG4gI2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9TRlBcXHRcXHQ0XFxuICNkZWZpbmUgSUNFX0RQTExfU1dfUElOX0lOUFVUX0JBU0VfUVNGUFxcdFxcdDZcXG4gI2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fT1VUUFVUX0JBU0VcXHRcXHQwXFxuKyNkZWZpbmUgSUNFX0RQTExfSEVBTFRIX1NUQVRVU19MT0NLRURcXHRcXHQxXFxuKyNkZWZpbmUgSUNFX0RQTExfSEVBTFRIX1NUQVRVU19VTkxPQ0tFRFxcdFxcdDBcXG4gXFxuICNkZWZpbmUgRTgyNV9SQ0xLX1BBUkVOVF8wX1BJTl9JRFhcXHRcXHQwXFxuICNkZWZpbmUgRTgyNV9SQ0xLX1BBUkVOVF8xX1BJTl9JRFhcXHRcXHQxXFxuQEAgLTg5LDYgKzkxLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xcbiBcXHREUExMX1BJTl9GUkVRVUVOQ1lfUkFOR0UoMCwgRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFopLFxcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZFtdID0ge1xcbitcXHREUExMX1BJTl9GUkVRVUVOQ1lfMVBQUyxcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9pc19zd19waW4gLSBjaGVjayBpZiBnaXZlbiBwaW4gc2hhbGwgYmUgY29udHJvbGxlZCBieSBTV1xcbiAgKiBAcGY6IHByaXZhdGUgYm9hcmQgc3RydWN0dXJlXFxuQEAgLTEwOTgsOSArMTEwNCwxMSBAQCBpY2VfZHBsbF9waW5fc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4tXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRpZiAoIXBmLVxcdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuIFxcdGlmIChwaW5fdHlwZSA9PSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCB8fFxcbiBcXHQgICAgcGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUKVxcbiBcXHRcXHQqc3RhdGUgPSBwLVxcdTAwM2VzdGF0ZVtkLVxcdTAwM2VkcGxsX2lkeF07XFxuQEAgLTIyNDMsOSArMjI1MSwxNCBAQCBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuLVxcdGVzeW5jLVxcdTAwM2VyYW5nZSA9IGljZV9lc3luY19yYW5nZTtcXG4tXFx0ZXN5bmMtXFx1MDAzZXJhbmdlX251bSA9IEFSUkFZX1NJWkUoaWNlX2VzeW5jX3JhbmdlKTtcXG4tXFx0aWYgKHAtXFx1MDAzZWZsYWdzWzBdIFxcdTAwMjYgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOKSB7XFxuK1xcdGlmIChwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XFxuK1xcdFxcdGVzeW5jLVxcdTAwM2VyYW5nZSA9IGljZV9lc3luY19yYW5nZV91bm1hbmFnZWQ7XFxuK1xcdFxcdGVzeW5jLVxcdTAwM2VyYW5nZV9udW0gPSBBUlJBWV9TSVpFKGljZV9lc3luY19yYW5nZV91bm1hbmFnZWQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlc3luYy1cXHUwMDNlcmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2U7XFxuK1xcdFxcdGVzeW5jLVxcdTAwM2VyYW5nZV9udW0gPSBBUlJBWV9TSVpFKGljZV9lc3luY19yYW5nZSk7XFxuK1xcdH1cXG4rXFx0aWYgKHAtXFx1MDAzZWZsYWdzWzBdIFxcdTAwMjYgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRCkge1xcbiBcXHRcXHRlc3luYy1cXHUwMDNlZnJlcSA9IERQTExfUElOX0ZSRVFVRU5DWV8xX0haO1xcbiBcXHRcXHRlc3luYy1cXHUwMDNlcHVsc2UgPSBJQ0VfRFBMTF9QSU5fRVNZTkNfUFVMU0VfSElHSF9QRVJDRU5UO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0yODc2LDYgKzI4ODksMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgaWNlX2RwbGxfb3V0cHV0X29wcyA9IHtcXG4gXFx0LmVzeW5jX2dldCA9IGljZV9kcGxsX291dHB1dF9lc3luY19nZXQsXFxuIH07XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzID0ge1xcbitcXHQuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX2lucHV0X2ZyZXF1ZW5jeV9nZXQsXFxuK1xcdC5kaXJlY3Rpb25fZ2V0ID0gaWNlX2RwbGxfaW5wdXRfZGlyZWN0aW9uLFxcbitcXHQuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQsXFxuK1xcdC5lc3luY19nZXQgPSBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyA9IHtcXG4rXFx0LmZyZXF1ZW5jeV9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfZnJlcXVlbmN5X2dldCxcXG4rXFx0LmRpcmVjdGlvbl9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfZGlyZWN0aW9uLFxcbitcXHQuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfc3RhdGVfZ2V0LFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgaWNlX2RwbGxfb3BzID0ge1xcbiBcXHQubG9ja19zdGF0dXNfZ2V0ID0gaWNlX2RwbGxfbG9ja19zdGF0dXNfZ2V0LFxcbiBcXHQubW9kZV9nZXQgPSBpY2VfZHBsbF9tb2RlX2dldCxcXG5AQCAtMzQzOSw4ICszNDY1LDEwIEBAIGljZV9kcGxsX2RlaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZHBsbF9kZXZpY2UgKnNlY29uZClcXG4ge1xcbiBcXHRpZiAoY2d1KSB7XFxuLVxcdFxcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XFxuLVxcdFxcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpO1xcbitcXHRcXHRpZiAoZmlyc3QpXFxuK1xcdFxcdFxcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XFxuK1xcdFxcdGlmIChzZWNvbmQpXFxuK1xcdFxcdFxcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpO1xcbiBcXHR9XFxuIFxcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhwaW5zLCBjb3VudCk7XFxuIH1cXG5AQCAtMzQ3MiwxMiArMzUwMCwxNSBAQCBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSxcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IGljZV9kcGxsX2dldF9waW5zKHBmLCBwaW5zLCBzdGFydF9pZHgsIGNvdW50LCBwZi1cXHUwMDNlZHBsbHMuY2xvY2tfaWQpO1xcbi1cXHRpZiAocmV0KVxcbitcXHRpZiAoIWNndSB8fCByZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdGlmIChjZ3UpIHtcXG4rXFxuK1xcdGlmIChmaXJzdCkge1xcbiBcXHRcXHRyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byByZWxlYXNlX3BpbnM7XFxuK1xcdH1cXG4rXFx0aWYgKHNlY29uZCkge1xcbiBcXHRcXHRyZXQgPSBpY2VfZHBsbF9yZWdpc3Rlcl9waW5zKHNlY29uZCwgcGlucywgb3BzLCBjb3VudCk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gdW5yZWdpc3Rlcl9maXJzdDtcXG5AQCAtMzQ4Niw3ICszNTE3LDggQEAgaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gdW5yZWdpc3Rlcl9maXJzdDpcXG4tXFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcXG4rXFx0aWYgKGZpcnN0KVxcbitcXHRcXHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZmlyc3QsIHBpbnMsIG9wcywgY291bnQpO1xcbiByZWxlYXNlX3BpbnM6XFxuIFxcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhwaW5zLCBjb3VudCk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTM4MjQsNiArMzg1NiwxOCBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXFxuIFxcdHN0cnVjdCBpY2VfZHBsbCAqZGUgPSBcXHUwMDI2ZC1cXHUwMDNlZWVjO1xcbiBcXHRzdHJ1Y3QgaWNlX2RwbGwgKmRwID0gXFx1MDAyNmQtXFx1MDAzZXBwcztcXG4gXFxuK1xcdGlmIChkLVxcdTAwM2V1bm1hbmFnZWQpIHtcXG4rXFx0XFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGRwLVxcdTAwM2VkcGxsLCBpbnB1dHMsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aWNlX2RwbGxfaW5wdXRfdW5tYW5hZ2VkX29wcyxcXG4rXFx0XFx0XFx0XFx0XFx0IG51bV9pbnB1dHMpO1xcbitcXHRcXHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoZHAtXFx1MDAzZWRwbGwsIG91dHB1dHMsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2aWNlX2RwbGxfb3V0cHV0X3VubWFuYWdlZF9vcHMsXFxuK1xcdFxcdFxcdFxcdFxcdCBudW1fb3V0cHV0cyk7XFxuK1xcdFxcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhpbnB1dHMsIG51bV9pbnB1dHMpO1xcbitcXHRcXHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMob3V0cHV0cywgbnVtX291dHB1dHMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGljZV9kcGxsX2RlaW5pdF9yY2xrX3BpbihwZik7XFxuIFxcdGlmIChwZi1cXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcXG4gXFx0XFx0aWNlX2RwbGxfZGVpbml0X3R4Y2xrX3BpbnMocGYpO1xcbkBAIC00MDgyLDIzICs0MTI2LDI5IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcXG4gXFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqaW5wdXRfb3BzO1xcbiBcXHRpbnQgcmV0LCBjb3VudDtcXG4gXFxuLVxcdGlucHV0X29wcyA9IFxcdTAwMjZpY2VfZHBsbF9pbnB1dF9vcHM7XFxuLVxcdG91dHB1dF9vcHMgPSBcXHUwMDI2aWNlX2RwbGxfb3V0cHV0X29wcztcXG4rXFx0aWYgKCFwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XFxuK1xcdFxcdGlucHV0X29wcyA9IFxcdTAwMjZpY2VfZHBsbF9pbnB1dF9vcHM7XFxuK1xcdFxcdG91dHB1dF9vcHMgPSBcXHUwMDI2aWNlX2RwbGxfb3V0cHV0X29wcztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aW5wdXRfb3BzID0gXFx1MDAyNmljZV9kcGxsX2lucHV0X3VubWFuYWdlZF9vcHM7XFxuK1xcdFxcdG91dHB1dF9vcHMgPSBcXHUwMDI2aWNlX2RwbGxfb3V0cHV0X3VubWFuYWdlZF9vcHM7XFxuK1xcdH1cXG4gXFxuIFxcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXFx1MDAzZWRwbGxzLmlucHV0cywgMCxcXG4gXFx0XFx0XFx0XFx0XFx0cGYtXFx1MDAzZWRwbGxzLm51bV9pbnB1dHMsIGlucHV0X29wcyxcXG4tXFx0XFx0XFx0XFx0XFx0cGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsLFxcbi1cXHRcXHRcXHRcXHRcXHRwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGwpO1xcbitcXHRcXHRcXHRcXHRcXHRwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGwsIHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdGNvdW50ID0gcGYtXFx1MDAzZWRwbGxzLm51bV9pbnB1dHM7XFxuLVxcdGlmIChjZ3UpIHtcXG4rXFx0aWYgKGNndSB8fCBwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXFx1MDAzZWRwbGxzLm91dHB1dHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNvdW50LCBwZi1cXHUwMDNlZHBsbHMubnVtX291dHB1dHMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdG91dHB1dF9vcHMsIHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0cGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBkZWluaXRfaW5wdXRzO1xcbitcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZClcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGNvdW50ICs9IHBmLVxcdTAwM2VkcGxscy5udW1fb3V0cHV0cztcXG4gXFx0XFx0aWYgKCFwZi1cXHUwMDNlZHBsbHMuZ2VuZXJpYykge1xcbiBcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVxcdTAwM2VkcGxscy5zbWEsXFxuQEAgLTQyMDYsMTIgKzQyNTYsMTMgQEAgaWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LFxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcdGQtXFx1MDAzZXBmID0gcGY7XFxuLVxcdGlmIChjZ3UgfHwgcGYtXFx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XFxuK1xcdGlmIChjZ3UgfHwgcGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZCB8fFxcbitcXHQgICAgcGYtXFx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcyA9IFxcdTAwMjZpY2VfZHBsbF9vcHM7XFxuIFxcbiBcXHRcXHRpZiAodHlwZSA9PSBEUExMX1RZUEVfUFBTIFxcdTAwMjZcXHUwMDI2IGljZV9kcGxsX2lzX3Bwc19waGFzZV9tb25pdG9yKHBmKSlcXG4gXFx0XFx0XFx0b3BzID0gIFxcdTAwMjZpY2VfZHBsbF9wb21fb3BzO1xcbi1cXHRcXHRpZiAoY2d1KVxcbitcXHRcXHRpZiAoY2d1IFxcdTAwMjZcXHUwMDI2ICFwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKVxcbiBcXHRcXHRcXHRpY2VfZHBsbF91cGRhdGVfc3RhdGUocGYsIGQsIHRydWUpO1xcbiBcXHRcXHRyZXQgPSBkcGxsX2RldmljZV9yZWdpc3RlcihkLVxcdTAwM2VkcGxsLCB0eXBlLCBvcHMsIGQpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuQEAgLTQyMzksNiArNDI5MCwzMyBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9kZWluaXRfd29ya2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRrdGhyZWFkX2Rlc3Ryb3lfd29ya2VyKGQtXFx1MDAzZWt3b3JrZXIpO1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyAtIGZpbmQgcGluIGZyZXF1ZW5jeSBmcm9tIHN1cHBvcnRlZCBvbmVzXFxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuKyAqIEBwaW5faWR4OiBwaW4gaW5kZXhcXG4rICogQGlucHV0OiBpZiBpbnB1dCBwaW5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyB0aHJvdWdoIHRoZSBhcnJheSBvZiBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMgZm9yIGFcXG4rICogRFBMTCBwaW4gYW5kIHJldHVybnMgc2luZ2xlIGZyZXF1ZW5jeSBwaW4gaXMgY2FwYWJsZSwgaWYgcGluIHN1cHBvcnQgb25seVxcbisgKiBvbmUgZnJlcXVlbmN5LiBTaGFsbCBiZSB1c2VkIG9ubHkgZm9yIGRwbGwgd2l0aCBkcml2ZXIgaGFyZGNvZGVkIGZyZXF1ZW5jeS5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgLSBmYWlsdXJlLCBwaW4gdXNlcyBtdWx0aXBsZSBmcmVxdWVuY2llcyxcXG4rICogKiBmcmVxdWVuY3kgLSBzdWNjZXNzLlxcbisgKi9cXG4rc3RhdGljIHU2NCBpY2VfZHBsbF9waW5fZnJlcV9pbmZvKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwaW5faWR4LCBib29sIGlucHV0KVxcbit7XFxuK1xcdHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKmZyZXFzO1xcbitcXHR1OCBmcmVxX251bTtcXG4rXFxuK1xcdC8qIEdldCBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMgZm9yIHRoaXMgcGluICovXFxuK1xcdGZyZXFzID0gaWNlX2NndV9nZXRfcGluX2ZyZXFfc3VwcChodywgcGluX2lkeCwgaW5wdXQsIFxcdTAwMjZmcmVxX251bSk7XFxuK1xcdGlmICghZnJlcXMgfHwgZnJlcV9udW0gIT0gMSB8fCBmcmVxc1swXS5taW4gIT0gZnJlcXNbMF0ubWF4KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBmcmVxc1swXS5taW47XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyXFxuICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG5AQCAtNDM5OCw2ICs0NDc2LDE5IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcXG4gXFx0XFx0cGluc1tpXS5wcm9wLmJvYXJkX2xhYmVsID0gaWNlX2NndV9nZXRfcGluX25hbWUoaHcsIGksIGlucHV0KTtcXG4gXFx0XFx0cGluc1tpXS5wcm9wLnR5cGUgPSBpY2VfY2d1X2dldF9waW5fdHlwZShodywgaSwgaW5wdXQpO1xcbiBcXHRcXHRpZiAoaW5wdXQpIHtcXG4rXFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcXG4rXFx0XFx0XFx0XFx0cGluc1tpXS5mcmVxID0gaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhodywgaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5wdXQpO1xcbitcXHRcXHRcXHRcXHRwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xcbitcXHRcXHRcXHRcXHRwaW5zW2ldLnN0YXR1cyA9XFxuK1xcdFxcdFxcdFxcdFxcdElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfU1RBVFVTX0VTWU5DX0NBUDtcXG4rXFx0XFx0XFx0XFx0cGluc1tpXS5mbGFnc1swXSA9IElDRV9EUExMX0lOX0VTWU5DX0VOQUJMRUQ7XFxuK1xcdFxcdFxcdFxcdC8qIHNraXAgcHJpb3JpdHksIGNhcGFiaWxpdGllcywgcGhhc2UgcmFuZ2UsXFxuK1xcdFxcdFxcdFxcdCAqIHBpbiBzdGF0ZSBBUSBxdWVyeSBhbmQgZnJlcV9zdXBwb3J0ZWQgLVxcbitcXHRcXHRcXHRcXHQgKiBub3QgYXZhaWxhYmxlIGZvciB1bm1hbmFnZWQgRFBMTFxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0cmV0ID0gaWNlX2FxX2dldF9jZ3VfcmVmX3ByaW8oaHcsIGRlLVxcdTAwM2VkcGxsX2lkeCwgaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmRlLVxcdTAwM2VpbnB1dF9wcmlvW2ldKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG5AQCAtNDQxMSw2ICs0NTAyLDE2IEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcXG4gXFx0XFx0XFx0aWYgKGljZV9kcGxsX2lzX3N3X3BpbihwZiwgaSwgdHJ1ZSkpXFxuIFxcdFxcdFxcdFxcdHBpbnNbaV0uaGlkZGVuID0gdHJ1ZTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcXG4rXFx0XFx0XFx0XFx0cGluc1tpXS5mcmVxID0gaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhodywgaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW5wdXQpO1xcbitcXHRcXHRcXHRcXHRwaW5zW2ldLnN0YXRlWzBdID0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xcbitcXHRcXHRcXHRcXHQvKiBza2lwIG91dHB1dCBzdGF0ZSBjYXBzLCBwaGFzZSByYW5nZSxcXG4rXFx0XFx0XFx0XFx0ICogcGluIHN0YXRlIEFRIHF1ZXJ5IGFuZCBmcmVxX3N1cHBvcnRlZCAtXFxuK1xcdFxcdFxcdFxcdCAqIG5vdCBhdmFpbGFibGUgZm9yIHVubWFuYWdlZCBEUExMXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRyZXQgPSBpY2VfY2d1X2dldF9vdXRwdXRfcGluX3N0YXRlX2NhcHMoaHcsIGksIFxcdTAwMjZjYXBzKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG5AQCAtNDQyOCwxMCArNDUyOSwxMyBAQCBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsXFxuIFxcdFxcdHBpbnNbaV0ucHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xcbiBcXHRcXHRwaW5zW2ldLnBmID0gcGY7XFxuIFxcdH1cXG4tXFx0aWYgKGlucHV0KVxcbitcXHRpZiAoaW5wdXQgXFx1MDAyNlxcdTAwMjYgIXBmLVxcdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9yZWZfc3luY19pbnB1dHMocGYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQ3MTIsNiArNDgxNiw4MiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19lODI1YyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9kcGxsX2xvY2tfc3RhdGVfaW5pdF91bm1hbmFnZWQgLSBpbml0aWFsaXplIGxvY2sgc3RhdGUgZm9yIHVubWFuYWdlZCBkcGxsXFxuKyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogSW5pdGlhbGl6ZSB0aGUgbG9jayBzdGF0ZSBmb3IgdW5tYW5hZ2VkIERQTEwgYnkgY2hlY2tpbmcgaGVhbHRoIHN0YXR1cy5cXG4rICogRm9yIHVubWFuYWdlZCBEUExMLCB3ZSByZWx5IG9uIGhhcmR3YXJlIGF1dG9ub21vdXMgb3BlcmF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqICogMCAtIHN1Y2Nlc3NcXG4rICogKiBuZWdhdGl2ZSAtIGluaXQgZmFpbHVyZSByZWFzb25cXG4rICovXFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZilcXG4re1xcbitcXHR1MTYgY29kZSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSztcXG4rXFx0c3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtIGJ1ZmY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIFxcdTAwMjZidWZmLCBjb2RlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHBmLCBcXHUwMDI2YnVmZiwgZmFsc2UpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQgLSBpbml0IGRwbGwgaW5mb3JtYXRpb24gZm9yIHVubWFuYWdlZCBkcGxsXFxuKyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogQWNxdWlyZSAoZnJvbSBIVykgYW5kIHNldCBiYXNpYyBkcGxsIGluZm9ybWF0aW9uIChvbiBwZi1cXHUwMDNlZHBsbHMgc3RydWN0KS5cXG4rICogRm9yIHVubWFuYWdlZCBkcGxsIG1vZGUuXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAwIC0gc3VjY2Vzc1xcbisgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvblxcbisgKi9cXG4rc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmKVxcbit7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcXHUwMDI2cGYtXFx1MDAzZWRwbGxzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZC1cXHUwMDNlY2xvY2tfaWQgPSBpY2VfZ2VuZXJhdGVfY2xvY2tfaWQocGYpO1xcbitcXHRkLVxcdTAwM2VudW1faW5wdXRzID0gaWNlX2NndV9nZXRfcGluX251bShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0cnVlKTtcXG4rXFx0ZC1cXHUwMDNlbnVtX291dHB1dHMgPSBpY2VfY2d1X2dldF9waW5fbnVtKFxcdTAwMjZwZi1cXHUwMDNlaHcsIGZhbHNlKTtcXG4rXFx0cmV0ID0gaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZChwZik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGQtXFx1MDAzZWlucHV0cyA9IGt6YWxsb2Nfb2JqcygqZC1cXHUwMDNlaW5wdXRzLCBkLVxcdTAwM2VudW1faW5wdXRzKTtcXG4rXFx0aWYgKCFkLVxcdTAwM2VpbnB1dHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBkZWluaXRfaW5mbztcXG4rXFxuK1xcdGQtXFx1MDAzZW91dHB1dHMgPSBremFsbG9jX29ianMoKmQtXFx1MDAzZW91dHB1dHMsIGQtXFx1MDAzZW51bV9vdXRwdXRzKTtcXG4rXFx0aWYgKCFkLVxcdTAwM2VvdXRwdXRzKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZGVpbml0X2luZm87XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGRlaW5pdF9pbmZvO1xcbitcXG4rXFx0ZC1cXHUwMDNlcHBzLm1vZGUgPSBEUExMX01PREVfTUFOVUFMO1xcbitcXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcXFwiJXMgLSBzdWNjZXNzLCBpbnB1dHM6JXUsIG91dHB1dHM6JXVcXFxcblxcXCIsXFxuK1xcdFxcdF9fZnVuY19fLCBkLVxcdTAwM2VudW1faW5wdXRzLCBkLVxcdTAwM2VudW1fb3V0cHV0cyk7XFxuK1xcdHJldHVybiAwO1xcbitkZWluaXRfaW5mbzpcXG4rXFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIiVzIC0gZmFpbDogZC1cXHUwMDNlaW5wdXRzOiVwLCBkLVxcdTAwM2VvdXRwdXRzOiVwXFxcXG5cXFwiLFxcbitcXHRcXHRfX2Z1bmNfXywgZC1cXHUwMDNlaW5wdXRzLCBkLVxcdTAwM2VvdXRwdXRzKTtcXG4rXFx0aWNlX2RwbGxfZGVpbml0X2luZm8ocGYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfaW5pdF9pbmZvIC0gcHJlcGFyZSBwZidzIGRwbGwgaW5mb3JtYXRpb24gc3RydWN0dXJlXFxuICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG5AQCAtNDgxNSw2ICs0OTk1LDQyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZCAtIGRldGVybWluZSBsb2NrIHN0YXRlIGZyb20gaGVhbHRoIHN0YXR1c1xcbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuKyAqIEBidWZmOiBoZWFsdGggc3RhdHVzIGJ1ZmZlclxcbisgKiBAbm90aWZ5OiBpZiB0cnVlLCBub3RpZnkgZHBsbCBkZXZpY2VcXG4rICpcXG4rICogU2V0IHVubWFuYWdlZCBkcGxsIGxvY2sgc3RhdGUgYmFzZWQgb24gaGVhbHRoIHN0YXR1cyBjb2RlIGFuZCBpbnRlcm5hbCBkYXRhLlxcbisgKiBDb250ZXh0OiBBY3F1aXJlcyBhbmQgcmVsZWFzZXMgcGYtXFx1MDAzZWRwbGxzLmxvY2sgKG11c3QgcmVsZWFzZSBiZWZvcmUgbm90aWZ5XFxuKyAqIGlmIGNhbGxlZCkuXFxuKyAqL1xcbit2b2lkIGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgbm90aWZ5KVxcbit7XFxuK1xcdHUzMiBpbnRlcm5hbF9kYXRhID0gbGUzMl90b19jcHUoYnVmZi1cXHUwMDNlaW50ZXJuYWxfZGF0YTEpO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLnBwcztcXG4rXFxuK1xcdGlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMubG9jayk7XFxuK1xcdGlmIChidWZmLVxcdTAwM2VoZWFsdGhfc3RhdHVzX2NvZGUgPT0gMCB8fFxcbitcXHQgICAgaW50ZXJuYWxfZGF0YSA9PSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRClcXG4rXFx0XFx0ZC1cXHUwMDNlZHBsbF9zdGF0ZSA9IERQTExfTE9DS19TVEFUVVNfTE9DS0VEO1xcbitcXHRlbHNlXFxuK1xcdFxcdGQtXFx1MDAzZWRwbGxfc3RhdGUgPSBEUExMX0xPQ0tfU1RBVFVTX1VOTE9DS0VEO1xcbitcXG4rXFx0aWYgKGQtXFx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9PSBkLVxcdTAwM2VkcGxsX3N0YXRlKVxcbitcXHRcXHRub3RpZnkgPSBmYWxzZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRkLVxcdTAwM2VwcmV2X2RwbGxfc3RhdGUgPSBkLVxcdTAwM2VkcGxsX3N0YXRlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4rXFx0aWYgKG5vdGlmeSBcXHUwMDI2XFx1MDAyNiBkLVxcdTAwM2VkcGxsKVxcbitcXHRcXHRkcGxsX2RldmljZV9jaGFuZ2VfbnRmKGQtXFx1MDAzZWRwbGwpO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfZGVpbml0IC0gRGlzYWJsZSB0aGUgZHJpdmVyL0hXIHN1cHBvcnQgZm9yIGRwbGwgc3Vic3lzdGVtXFxuICAqIHRoZSBkcGxsIGRldmljZS5cXG5AQCAtNDg1NCw5ICs1MDcwLDEwIEBAIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRpZiAocGYtXFx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxcbiBcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMudHhjbGtfd29yayk7XFxuIFxcbi1cXHRpY2VfZHBsbF9kZWluaXRfcGlucyhwZiwgY2d1KTtcXG4rXFx0aWNlX2RwbGxfZGVpbml0X3BpbnMocGYsIGNndSB8fCBwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKTtcXG4gXFx0aWYgKCFJU19FUlJfT1JfTlVMTChwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGwpKVxcbi1cXHRcXHRpY2VfZHBsbF9kZWluaXRfZHBsbChwZiwgXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5wcHMsIGNndSk7XFxuK1xcdFxcdGljZV9kcGxsX2RlaW5pdF9kcGxsKHBmLCBcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLnBwcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBjZ3UgfHwgcGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XFxuIFxcdGlmICghSVNfRVJSX09SX05VTEwocGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsKSlcXG4gXFx0XFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMuZWVjLCBjZ3UpO1xcbiBcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLVxcdTAwM2VkcGxscy50eGMuZHBsbCkpXFxuQEAgLTQ4NjYsNiArNTA4Myw0NSBAQCB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX2RwbGxfaW5pdF91bm1hbmFnZWQgLSBpbml0aWFsaXplIHN1cHBvcnQgZm9yIHVubWFuYWdlZCBkcGxsIHN1YnN5c3RlbVxcbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuKyAqXFxuKyAqIFNldCB1cCB0aGUgZGV2aWNlIGRwbGxzIGZvciB1bm1hbmFnZWQgbW9kZSwgcmVnaXN0ZXIgdGhlbSBhbmQgcGlucyBjb25uZWN0ZWRcXG4rICogd2l0aGluIExpbnV4IGRwbGwgc3Vic3lzdGVtLiBBbGxvdyB1c2Vyc3BhY2UgdG8gb2J0YWluIHN0YXRlIG9mIERQTEwuXFxuKyAqXFxuKyAqIENvbnRleHQ6IEluaXRpYWxpemVzIHBmLVxcdTAwM2VkcGxscy5sb2NrIG11dGV4LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpXFxuK3tcXG4rXFx0c3RydWN0IGljZV9kcGxscyAqZCA9IFxcdTAwMjZwZi1cXHUwMDNlZHBsbHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWljZV9wZl9zcmNfdG1yX293bmVkKHBmKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZkLVxcdTAwM2Vsb2NrKTtcXG4rXFx0ZXJyID0gaWNlX2RwbGxfaW5pdF9pbmZvX3VubWFuYWdlZChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuK1xcdGVyciA9IGljZV9kcGxsX2luaXRfZHBsbChwZiwgXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5wcHMsIHRydWUsIERQTExfVFlQRV9QUFMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRlaW5pdF9pbmZvO1xcbitcXHRlcnIgPSBpY2VfZHBsbF9pbml0X3BpbnMocGYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRlaW5pdF9wcHM7XFxuK1xcdHNldF9iaXQoSUNFX0ZMQUdfRFBMTCwgcGYtXFx1MDAzZWZsYWdzKTtcXG4rXFxuK1xcdHJldHVybjtcXG4rXFxuK2RlaW5pdF9wcHM6XFxuK1xcdGljZV9kcGxsX2RlaW5pdF9kcGxsKHBmLCBcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLnBwcywgdHJ1ZSk7XFxuK2RlaW5pdF9pbmZvOlxcbitcXHRpY2VfZHBsbF9kZWluaXRfaW5mbyhwZik7XFxuK2Vycl9leGl0OlxcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkLVxcdTAwM2Vsb2NrKTtcXG4rXFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksIFxcXCJEUExMcyBpbml0IGZhaWx1cmUgZXJyOiVkXFxcXG5cXFwiLCBlcnIpO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfaW5pdF9lODI1IC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciBkcGxsIHN1YnN5c3RlbVxcbiAgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuQEAgLTQ5NzUsOCArNTIzMSwyMyBAQCBzdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MTAoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcXFwiRFBMTHMgaW5pdCBmYWlsdXJlIGVycjolZFxcXFxuXFxcIiwgZXJyKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9kcGxsX2luaXQgLSBpbml0aWFsaXplIHN1cHBvcnQgZm9yIGRwbGwgc3Vic3lzdGVtXFxuKyAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogU2V0IHVwIHRoZSBkZXZpY2UgZHBsbHMsIHJlZ2lzdGVyIHRoZW0gYW5kIHBpbnMgY29ubmVjdGVkIHdpdGhpbiBMaW51eCBkcGxsXFxuKyAqIHN1YnN5c3RlbS4gQWxsb3cgdXNlcnNwYWNlIHRvIG9idGFpbiBzdGF0ZSBvZiBEUExMIGFuZCBoYW5kbGluZyBvZiBEUExMXFxuKyAqIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuXFxuKyAqXFxuKyAqIENvbnRleHQ6IEluaXRpYWxpemVzIHBmLVxcdTAwM2VkcGxscy5sb2NrIG11dGV4LlxcbisgKi9cXG4gdm9pZCBpY2VfZHBsbF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuK1xcdGlmIChwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XFxuK1xcdFxcdGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHBmKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKHBmLVxcdTAwM2Vody5tYWNfdHlwZSkge1xcbiBcXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxcbiBcXHRcXHRpY2VfZHBsbF9pbml0X2U4MjUocGYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuaW5kZXggMTAzYmEzZTQ5MDY4Mi4uYzU5ZDc0NmE4NTY3MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuQEAgLTI2LDYgKzI2LDggQEBcXG4gI2RlZmluZSBJQ0VfQ0dVX1IxMV9TWU5DRV9TX0JZUF9DTEtcXHRHRU5NQVNLKDYsIDEpXFxuIFxcbiAjZGVmaW5lIElDRV9DR1VfQllQQVNTX01VWF9PRkZTRVRfRTgyNUNcXHQzXFxuKyNkZWZpbmUgSUNFX0RQTExfVU5NQU5BR0VEX1BJTl9OVU1cXHQ0XFxuKyNkZWZpbmUgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRFxcdElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9FU1lOQ19FTlxcbiBcXG4gLyoqXFxuICAqIGVudW0gaWNlX2RwbGxfcGluX3N3IC0gZW51bWVyYXRlIGljZSBzb2Z0d2FyZSBwaW4gaW5kaWNlczpcXG5AQCAtMTkzLDYgKzE5NSw3IEBAIHN0cnVjdCBpY2VfZHBsbHMge1xcbiBcXHRzMzIgb3V0cHV0X3BoYXNlX2Fkal9tYXg7XFxuIFxcdHUzMiBwZXJpb2RpY19jb3VudGVyO1xcbiBcXHRib29sIGdlbmVyaWM7XFxuK1xcdGJvb2wgdW5tYW5hZ2VkO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhjbGtfd29yaztcXG4gXFx0Ym9vbCB0eGNsa19zd2l0Y2hfcmVxdWVzdGVkO1xcbiBcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHR4Y2xrX25vdGlmeV9yd3NlbTtcXG5AQCAtMjAxLDkgKzIwNCwxNiBAQCBzdHJ1Y3QgaWNlX2RwbGxzIHtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF8xNTg4X0NMT0NLKVxcbiB2b2lkIGljZV9kcGxsX2luaXQoc3RydWN0IGljZV9wZiAqcGYpO1xcbiB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuK3ZvaWQgaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYm9vbCBub3RpZnkpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWRcXG4raWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZixcXG4rXFx0XFx0XFx0XFx0ICBib29sIG5vdGlmeSkgeyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXFxuaW5kZXggOGNkYzRmZGE4OWU5Ny4uZmM5ZDRlMGZhNzU1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbkBAIC0xNDE1LDYgKzE0MTUsMTAgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3JpbmdzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdFxcdFxcdHNldF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzIsIHJpbmctXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHRcXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpKVxcbitcXHRcXHRcXHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy1cXHUwMDNlZmxhZ3MpO1xcbitcXG4gXFx0XFx0V1JJVEVfT05DRSh2c2ktXFx1MDAzZXR4X3JpbmdzW2ldLCByaW5nKTtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbmluZGV4IGQ4ODgzNTQ4MmQzYWEuLmZlZmJjNTFjNzE5MDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbkBAIC0zNDI4LDcgKzM0MjgsNyBAQCBzdGF0aWMgaW50IGljZV9yZXFfaXJxX21zaXhfbWlzYyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0ICAgICAoKHBmLVxcdTAwM2VsbF90c19pcnEuaW5kZXggKyBwZl9pbnRyX3N0YXJ0X29mZnNldCkgXFx1MDAyNlxcbiBcXHRcXHQgICAgICBQRklOVF9TQl9DVExfTVNJWF9JTkRYX00pIHwgUEZJTlRfU0JfQ1RMX0NBVVNFX0VOQV9NKTtcXG4gXFx0d3IzMihodywgR0xJTlRfSVRSKElDRV9SWF9JVFIsIHBmLVxcdTAwM2VvaWNyX2lycS5pbmRleCksXFxuLVxcdCAgICAgSVRSX1JFR19BTElHTihJQ0VfSVRSXzhLKSBcXHUwMDNlXFx1MDAzZSBJQ0VfSVRSX0dSQU5fUyk7XFxuK1xcdCAgICAgSVRSX1JFR19BTElHTihJQ0VfSVRSXzIwSykgXFx1MDAzZVxcdTAwM2UgSUNFX0lUUl9HUkFOX1MpO1xcbiBcXG4gXFx0aWNlX2ZsdXNoKGh3KTtcXG4gXFx0aWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7XFxuQEAgLTM0OTEsOSArMzQ5MSw4IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0XFx0TkVUSUZfRl9SWEhBU0g7XFxuIFxcbiBcXHRjc3Vtb19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNXFx0ICB8XFxuLVxcdFxcdFxcdCBORVRJRl9GX0lQX0NTVU0gIHxcXG4gXFx0XFx0XFx0IE5FVElGX0ZfU0NUUF9DUkMgfFxcbi1cXHRcXHRcXHQgTkVUSUZfRl9JUFY2X0NTVU07XFxuK1xcdFxcdFxcdCBORVRJRl9GX0hXX0NTVU07XFxuIFxcbiBcXHR2bGFub19mZWF0dXJlcyA9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUiB8XFxuIFxcdFxcdFxcdCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCAgICAgfFxcbkBAIC0zNTU1LDEyICszNTU0LDYgQEAgdm9pZCBpY2Vfc2V0X25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHQvKiBBbGxvdyBjb3JlIHRvIG1hbmFnZSBJUlFzIGFmZmluaXR5ICovXFxuIFxcdG5ldGlmX3NldF9hZmZpbml0eV9hdXRvKG5ldGRldik7XFxuIFxcbi1cXHQvKiBNdXR1YWwgZXhjbHVzaXZpdHkgZm9yIFRTTyBhbmQgR0NTIGlzIGVuZm9yY2VkIGJ5IHRoZSBzZXQgZmVhdHVyZXNcXG4tXFx0ICogbmRvIGNhbGxiYWNrLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcXG4tXFx0XFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07XFxuLVxcbiBcXHRuZXRpZl9zZXRfdHNvX21heF9zaXplKG5ldGRldiwgSUNFX01BWF9UU09fU0laRSk7XFxuIH1cXG4gXFxuQEAgLTQ3MjAsNyArNDcxMyw5IEBAIHZvaWQgaWNlX2RlaW5pdF9kZXYoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcbiBzdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbitcXHR1MTYgY29kZSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSztcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoaWNlX2lzX3NhZmVfbW9kZShwZikpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtNDczMiw4ICs0NzI3LDE1IEBAIHN0YXRpYyB2b2lkIGljZV9pbml0X2ZlYXR1cmVzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HTlNTKSlcXG4gXFx0XFx0aWNlX2duc3NfaW5pdChwZik7XFxuIFxcbitcXHQvKiBJbml0aWFsaXplIHVubWFuYWdlZCBEUExMIGRldGVjdGlvbiAqL1xcbitcXHRlcnIgPSBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChcXHUwMDI2cGYtXFx1MDAzZWh3LCBjb2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMudW5tYW5hZ2VkKTtcXG4rXFx0aWYgKGVyciB8fCAhaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChcXHUwMDI2cGYtXFx1MDAzZWh3KSlcXG4rXFx0XFx0cGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZCA9IGZhbHNlO1xcbitcXG4gXFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfQ0dVKSB8fFxcbi1cXHQgICAgaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9QSFlfUkNMSykpXFxuK1xcdCAgICBpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX1BIWV9SQ0xLKSB8fFxcbitcXHQgICAgcGYtXFx1MDAzZWRwbGxzLnVubWFuYWdlZClcXG4gXFx0XFx0aWNlX2RwbGxfaW5pdChwZik7XFxuIFxcbiBcXHQvKiBOb3RlOiBGbG93IGRpcmVjdG9yIGluaXQgZmFpbHVyZSBpcyBub24tZmF0YWwgdG8gbG9hZCAqL1xcbkBAIC02NTEwLDE4ICs2NTEyLDYgQEAgaWNlX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxcbiBcXHRcXHRyZXQgPSBpY2Vfc2V0X2xvb3BiYWNrKHZzaSwgISEoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKSk7XFxuIFxcbi1cXHQvKiBEdWUgdG8gRTgzMCBoYXJkd2FyZSBsaW1pdGF0aW9ucywgVFNPIChORVRJRl9GX0FMTF9UU08pIHdpdGggR0NTXFxuLVxcdCAqIChORVRJRl9GX0hXX0NTVU0pIGlzIG5vdCBzdXBwb3J0ZWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9HQ1MpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoKGZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcXHUwMDI2XFx1MDAyNiAoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0FMTF9UU08pKSkge1xcbi1cXHRcXHRpZiAobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfQ1NVTSlcXG4tXFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlRvIGVuYWJsZSBUU08sIHlvdSBtdXN0IGZpcnN0IGRpc2FibGUgSFcgY2hlY2tzdW0uXFxcXG5cXFwiKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcXFwiVG8gZW5hYmxlIEhXIGNoZWNrc3VtLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIFRTTy5cXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcXG5pbmRleCBlYWVjMzZhYjZhZTNmLi5lODM5MmVjNGYxMzQ4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuQEAgLTIzMjcsNiArMjMyNyw4IEBAIHU2NCBpY2VfcHRwX2dldF9yeF9od3RzKGNvbnN0IHVuaW9uIGljZV8zMmJfcnhfZmxleF9kZXNjICpyeF9kZXNjLFxcbiBcXHR0c19oaWdoID0gbGUzMl90b19jcHUocnhfZGVzYy1cXHUwMDNld2IuZmxleF90cy50c19oaWdoKTtcXG4gXFx0dHNfbnMgPSBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoY2FjaGVkX3RpbWUsIHRzX2hpZ2gpO1xcbiBcXG4rXFx0aWNlX3RyYWNlKHJ4X2h3dHN0YW1wLCBjYWNoZWRfdGltZSwgdHNfaGlnaCwgdHNfbnMpO1xcbitcXG4gXFx0cmV0dXJuIHRzX25zO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbmluZGV4IDhlNWY5NzgzNTk1NGMuLmY5MDUxMDRmOTVkODggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG5AQCAtMjAsNiArMjAsMTAgQEAgc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xMF9taHpbXSA9IHtcXG4gXFx0RFBMTF9QSU5fRlJFUVVFTkNZXzEwTUhaLFxcbiB9O1xcbiBcXG4rc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xNTZfMjVtaHpbXSA9IHtcXG4rXFx0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDE1NjI1MDAwMCwgMTU2MjUwMDAwKSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2NndV9waW5fZGVzYyBpY2VfZTgxMHRfc2ZwX2NndV9pbnB1dHNbXSA9IHtcXG4gXFx0eyBcXFwiQ1ZMLVNEUDIyXFxcIixcXHQgIFpMX1JFRjBQLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxcbiBcXHRcXHRBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfY29tbW9uKSwgaWNlX2NndV9waW5fZnJlcV9jb21tb24gfSxcXG5AQCAtMTMxLDYgKzEzNSwxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MjNfemxfY2d1X291dHB1dHNbXSA9IHtcXG4gXFx0eyBcXFwiTk9ORVxcXCIsXFx0ICAgWkxfT1VUNSwgMCwgMCB9LFxcbiB9O1xcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHNbXSA9IHtcXG4rXFx0eyBcXFwiMTU4OC1USU1FX1NZTkNcXFwiLCAwLCBEUExMX1BJTl9UWVBFX0VYVCxcXG4rXFx0ICBBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfMTBfbWh6KSwgaWNlX2NndV9waW5fZnJlcV8xMF9taHogfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2NndV9waW5fZGVzYyBpY2VfZTgzMF91bm1hbmFnZWRfb3V0cHV0c1tdID0ge1xcbitcXHR7IFxcXCJNQUMtUEhZLUNMS1xcXCIsIDAsIERQTExfUElOX1RZUEVfU1lOQ0VfRVRIX1BPUlQsXFxuK1xcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzE1Nl8yNW1oeiksIGljZV9jZ3VfcGluX2ZyZXFfMTU2XzI1bWh6IH0sXFxuK1xcdHsgXFxcIjE1ODgtVElNRV9SRUZcXFwiLCAxLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxcbitcXHQgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xX2h6KSwgaWNlX2NndV9waW5fZnJlcV8xX2h6fSxcXG4rfTtcXG4rXFxuIC8qIExvdyBsZXZlbCBmdW5jdGlvbnMgZm9yIGludGVyYWN0aW5nIHdpdGggYW5kIG1hbmFnaW5nIHRoZSBkZXZpY2UgY2xvY2sgdXNlZFxcbiAgKiBmb3IgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sLlxcbiAgKlxcbkBAIC01OTc5LDYgKzU5OTUsMjQgQEAgaWNlX2NndV9nZXRfcGluX2Rlc2Moc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQsIGludCAqc2l6ZSlcXG4gXFx0Y2FzZSBJQ0VfREVWX0lEX0U4MjNDX1NHTUlJOlxcbiBcXHRcXHR0ID0gaWNlX2NndV9nZXRfcGluX2Rlc2NfZTgyMyhodywgaW5wdXQsIHNpemUpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19CQUNLUExBTkU6XFxuK1xcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ0NfUVNGUDU2OlxcbitcXHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1NGUDpcXG4rXFx0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19TRlBfREQ6XFxuK1xcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ19CQUNLUExBTkU6XFxuK1xcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ19RU0ZQOlxcbitcXHRjYXNlIElDRV9ERVZfSURfRTgzMENfU0ZQOlxcbitcXHRjYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfQkFDS1BMQU5FOlxcbitcXHRjYXNlIElDRV9ERVZfSURfRTgzMF9YWFZfUVNGUDpcXG4rXFx0Y2FzZSBJQ0VfREVWX0lEX0U4MzBfWFhWX1NGUDpcXG4rXFx0XFx0aWYgKGlucHV0KSB7XFxuK1xcdFxcdFxcdHQgPSBpY2VfZTgzMF91bm1hbmFnZWRfaW5wdXRzO1xcbitcXHRcXHRcXHQqc2l6ZSA9IEFSUkFZX1NJWkUoaWNlX2U4MzBfdW5tYW5hZ2VkX2lucHV0cyk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHQgPSBpY2VfZTgzMF91bm1hbmFnZWRfb3V0cHV0cztcXG4rXFx0XFx0XFx0KnNpemUgPSBBUlJBWV9TSVpFKGljZV9lODMwX3VubWFuYWdlZF9vdXRwdXRzKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtNjAwNSw2ICs2MDM5LDE4IEBAIGludCBpY2VfY2d1X2dldF9udW1fcGlucyhzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpY2VfY2d1X2dldF9waW5fbnVtIC0gZ2V0IHBpbiBkZXNjcmlwdGlvbiBhcnJheSBzaXplXFxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XFxuKyAqIEBpbnB1dDogaWYgcmVxdWVzdCBpcyBkb25lIGFnYWluc3QgaW5wdXQgb3Igb3V0cHV0IHBpbnNcXG4rICpcXG4rICogUmV0dXJuOiBzaXplIG9mIHBpbiBkZXNjcmlwdGlvbiBhcnJheSBmb3IgZ2l2ZW4gaHcuXFxuKyAqL1xcbitpbnQgaWNlX2NndV9nZXRfcGluX251bShzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dClcXG4re1xcbitcXHRyZXR1cm4gaWNlX2NndV9nZXRfbnVtX3BpbnMoaHcsIGlucHV0KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV9jZ3VfZ2V0X3Bpbl90eXBlIC0gZ2V0IHBpbidzIHR5cGVcXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmhcXG5pbmRleCAxNmIxOTg4ZTk5M2QyLi5mYTFlOTA4Y2ViYWM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXFxuQEAgLTM2NCw2ICszNjQsNyBAQCBpbnQgaWNlX3JlYWRfc21hX2N0cmwoc3RydWN0IGljZV9odyAqaHcsIHU4ICpkYXRhKTtcXG4gaW50IGljZV93cml0ZV9zbWFfY3RybChzdHJ1Y3QgaWNlX2h3ICpodywgdTggZGF0YSk7XFxuIGludCBpY2VfcHRwX3JlYWRfc2RwX2FjKHN0cnVjdCBpY2VfaHcgKmh3LCBfX2xlMTYgKmVudHJpZXMsIHVpbnQgKm51bV9lbnRyaWVzKTtcXG4gaW50IGljZV9jZ3VfZ2V0X251bV9waW5zKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KTtcXG4raW50IGljZV9jZ3VfZ2V0X3Bpbl9udW0oc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpO1xcbiBlbnVtIGRwbGxfcGluX3R5cGUgaWNlX2NndV9nZXRfcGluX3R5cGUoc3RydWN0IGljZV9odyAqaHcsIHU4IHBpbiwgYm9vbCBpbnB1dCk7XFxuIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKlxcbiBpY2VfY2d1X2dldF9waW5fZnJlcV9zdXBwKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwaW4sIGJvb2wgaW5wdXQsIHU4ICpudW0pO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xcbmluZGV4IDZhNTg3NWJkOWM2YjEuLjRkYWVlMjUyZTJhNjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmNcXG5AQCAtMjYxMiw3ICsyNjEyLDYgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbyxcXG4gXFx0dTE2IHZsYW5faWQgPSBJQ0VfTUFYX1ZMQU5fSUQgKyAxO1xcbiBcXHR1MTYgdmxhbl90cGlkID0gRVRIX1BfODAyMVE7XFxuIFxcdHZvaWQgKmRhZGRyID0gTlVMTDtcXG4tXFx0dTE2IGV0aF9oZHJfc3o7XFxuIFxcdHU4ICpldGhfaGRyO1xcbiBcXHR1MzIgYWN0ID0gMDtcXG4gXFx0X19iZTE2ICpvZmY7XFxuQEAgLTI2MjUsMTEgKzI2MjQsMTAgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbyxcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRldGhfaGRyX3N6ID0gc2l6ZW9mKGR1bW15X2V0aF9oZWFkZXIpO1xcbiBcXHRldGhfaGRyID0gc19ydWxlLVxcdTAwM2VoZHJfZGF0YTtcXG4gXFxuIFxcdC8qIGluaXRpYWxpemUgdGhlIGV0aGVyIGhlYWRlciB3aXRoIGEgZHVtbXkgaGVhZGVyICovXFxuLVxcdG1lbWNweShldGhfaGRyLCBkdW1teV9ldGhfaGVhZGVyLCBldGhfaGRyX3N6KTtcXG4rXFx0aWNlX2ZpbGxfZXRoX2hkcihldGhfaGRyKTtcXG4gXFx0aWNlX2ZpbGxfc3dfaW5mbyhodywgZl9pbmZvKTtcXG4gXFxuIFxcdHN3aXRjaCAoZl9pbmZvLVxcdTAwM2VmbHRyX2FjdCkge1xcbkBAIC0yNzMwLDcgKzI3MjgsNyBAQCBpY2VfZmlsbF9zd19ydWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2ZsdHJfaW5mbyAqZl9pbmZvLFxcbiBcXG4gXFx0LyogQ3JlYXRlIHRoZSBzd2l0Y2ggcnVsZSB3aXRoIHRoZSBmaW5hbCBkdW1teSBFdGhlcm5ldCBoZWFkZXIgKi9cXG4gXFx0aWYgKG9wYyAhPSBpY2VfYXFjX29wY191cGRhdGVfc3dfcnVsZXMpXFxuLVxcdFxcdHNfcnVsZS1cXHUwMDNlaGRyX2xlbiA9IGNwdV90b19sZTE2KGV0aF9oZHJfc3opO1xcbitcXHRcXHRzX3J1bGUtXFx1MDAzZWhkcl9sZW4gPSBjcHVfdG9fbGUxNihEVU1NWV9FVEhfSERSX0xFTik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xcbmluZGV4IGQyMDM1N2MwNDEyNzMuLjQ1NjBlNTVjOGY5YzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmNcXG5AQCAtMTc0LDYgKzE3NCw3IEBAIHN0YXRpYyB1MTYgaWNlX2NoZWNrX3N1cHBvcnRlZF92bGFuX3RwaWQodTE2IHZsYW5fdHBpZClcXG4gXFx0Y2FzZSBFVEhfUF84MDIxUTpcXG4gXFx0Y2FzZSBFVEhfUF84MDIxQUQ6XFxuIFxcdGNhc2UgRVRIX1BfUUlOUTE6XFxuK1xcdGNhc2UgRVRIX1BfODAyMUFIOlxcbiBcXHRcXHRyZXR1cm4gdmxhbl90cGlkO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90cmFjZS5oXFxuaW5kZXggNGYzNWVmOGQ2YjI5OS4uM2NiOGM2ZWEwM2NmNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcXG5AQCAtMjQxLDYgKzI0MSwyNCBAQCBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfZndfcmVxKTtcXG4gREVGSU5FX1RYX1RTVEFNUF9PUF9FVkVOVChpY2VfdHhfdHN0YW1wX2Z3X2RvbmUpO1xcbiBERUZJTkVfVFhfVFNUQU1QX09QX0VWRU5UKGljZV90eF90c3RhbXBfY29tcGxldGUpO1xcbiBcXG4rLyogVHJhY2UgZXZlbnQgZm9yIFJ4IHRpbWVzdGFtcCAqL1xcbitUUkFDRV9FVkVOVChpY2VfcnhfaHd0c3RhbXAsXFxuK1xcdCAgICBUUF9QUk9UTyh1NjQgY2FjaGVkX3RpbWUsIHUzMiB0c19oaWdoLCB1NjQgdHNfbnMpLFxcbitcXG4rXFx0ICAgIFRQX0FSR1MoY2FjaGVkX3RpbWUsIHRzX2hpZ2gsIHRzX25zKSxcXG4rXFxuK1xcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KF9fZmllbGQodTY0LCBjYWNoZWRfdGltZSlcXG4rXFx0XFx0XFx0ICAgICBfX2ZpZWxkKHUzMiwgdHNfaGlnaClcXG4rXFx0XFx0XFx0ICAgICBfX2ZpZWxkKHU2NCwgdHNfbnMpKSxcXG4rXFxuK1xcdCAgICBUUF9mYXN0X2Fzc2lnbihfX2VudHJ5LVxcdTAwM2VjYWNoZWRfdGltZSA9IGNhY2hlZF90aW1lO1xcbitcXHRcXHRcXHQgICBfX2VudHJ5LVxcdTAwM2V0c19oaWdoID0gdHNfaGlnaDtcXG4rXFx0XFx0XFx0ICAgX19lbnRyeS1cXHUwMDNldHNfbnMgPSB0c19uczspLFxcbitcXG4rXFx0ICAgIFRQX3ByaW50ayhcXFwiY2FjaGVkX3RpbWU9JWxsdSB0c19oaWdoPSV1IHRzX25zPSVsbHVcXFwiLFxcbitcXHRcXHQgICAgICBfX2VudHJ5LVxcdTAwM2VjYWNoZWRfdGltZSwgX19lbnRyeS1cXHUwMDNldHNfaGlnaCwgX19lbnRyeS1cXHUwMDNldHNfbnMpXFxuKyk7XFxuK1xcbiBERUNMQVJFX0VWRU5UX0NMQVNTKGljZV9lc3dfYnJfZmRiX3RlbXBsYXRlLFxcbiBcXHRcXHQgICAgVFBfUFJPVE8oc3RydWN0IGljZV9lc3dfYnJfZmRiX2VudHJ5ICpmZGIpLFxcbiBcXHRcXHQgICAgVFBfQVJHUyhmZGIpLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXFxuaW5kZXggMzEzMDNhYjViZTE3NS4uNDc3Yzg2ZDhjNTNiYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXFxuQEAgLTE3MzksNyArMTczOSw3IEBAIGludCBpY2VfdHhfY3N1bShzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcXG4gXFx0bDNfbGVuID0gbDQuaGRyIC0gaXAuaGRyO1xcbiBcXHRvZmZzZXQgfD0gKGwzX2xlbiAvIDQpIFxcdTAwM2NcXHUwMDNjIElDRV9UWF9ERVNDX0xFTl9JUExFTl9TO1xcbiBcXG4tXFx0aWYgKCh0eF9yaW5nLVxcdTAwM2VuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAodGVzdF9iaXQoSUNFX1RYX1JJTkdfRkxBR1NfR0NTLCB0eF9yaW5nLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICEoZmlyc3QtXFx1MDAzZXR4X2ZsYWdzIFxcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFza2JfY3N1bV9pc19zY3RwKHNrYikpIHtcXG4gXFx0XFx0LyogU2V0IEdDUyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXFxuaW5kZXggNWU1MTdmMjE5Mzc5OC4uMTVkYmQ1MTAwOTEyNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXFxuQEAgLTIxNyw2ICsyMTcsNyBAQCBlbnVtIGljZV90eF9yaW5nX2ZsYWdzIHtcXG4gXFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzEsXFxuIFxcdElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcyLFxcbiBcXHRJQ0VfVFhfUklOR19GTEFHU19UWFRJTUUsXFxuK1xcdElDRV9UWF9SSU5HX0ZMQUdTX0dDUyxcXG4gXFx0SUNFX1RYX1JJTkdfRkxBR1NfTkJJVFMsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuY1xcbmluZGV4IDU0OTg0OTY2ODUxZDUuLmI2NzI3MmUyZjYwM2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdnNpX3ZsYW5fbGliLmNcXG5AQCAtMjQsNyArMjQsOCBAQCBzdGF0aWMgdm9pZCBwcmludF9pbnZhbGlkX3RwaWQoc3RydWN0IGljZV92c2kgKnZzaSwgdTE2IHRwaWQpXFxuIHN0YXRpYyBib29sIHZhbGlkYXRlX3ZsYW4oc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGljZV92bGFuICp2bGFuKVxcbiB7XFxuIFxcdGlmICh2bGFuLVxcdTAwM2V0cGlkICE9IEVUSF9QXzgwMjFRIFxcdTAwMjZcXHUwMDI2IHZsYW4tXFx1MDAzZXRwaWQgIT0gRVRIX1BfODAyMUFEIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB2bGFuLVxcdTAwM2V0cGlkICE9IEVUSF9QX1FJTlExIFxcdTAwMjZcXHUwMDI2ICh2bGFuLVxcdTAwM2V0cGlkIHx8IHZsYW4tXFx1MDAzZXZpZCkpIHtcXG4rXFx0ICAgIHZsYW4tXFx1MDAzZXRwaWQgIT0gRVRIX1BfUUlOUTEgXFx1MDAyNlxcdTAwMjYgdmxhbi1cXHUwMDNldHBpZCAhPSBFVEhfUF84MDIxQUggXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICh2bGFuLVxcdTAwM2V0cGlkIHx8IHZsYW4tXFx1MDAzZXZpZCkpIHtcXG4gXFx0XFx0cHJpbnRfaW52YWxpZF90cGlkKHZzaSwgdmxhbi1cXHUwMDNldHBpZCk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuY1xcbmluZGV4IGNhODAxOGUzZGQ0MjguLjA2ZDJmOWJlOTNhZTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmNcXG5AQCAtMTcwMiw2ICsxNzAyLDkgQEAgc3RhdGljIGJvb2wgaWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fdHBpZCh1MTYgZmlsdGVyaW5nX2NhcHMsIHUxNiB0cGlkKVxcbiBcXHRjYXNlIEVUSF9QX1FJTlExOlxcbiBcXHRcXHR2bGFuX2V0aGVydHlwZSA9IFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzkxMDA7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEVUSF9QXzgwMjFBSDpcXG4rXFx0XFx0dmxhbl9ldGhlcnR5cGUgPSBWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV84OEU3O1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCEoZmlsdGVyaW5nX2NhcHMgXFx1MDAyNiB2bGFuX2V0aGVydHlwZSkpXFxuQEAgLTIxMzYsNiArMjEzOSw5IEBAIHN0YXRpYyBpbnQgaWNlX3ZjX2dldF90cGlkKHUzMiBldGhlcnR5cGVfc2V0dGluZywgdTE2ICp0cGlkKVxcbiBcXHRjYXNlIFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzkxMDA6XFxuIFxcdFxcdCp0cGlkID0gRVRIX1BfUUlOUTE7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4RTc6XFxuK1xcdFxcdCp0cGlkID0gRVRIX1BfODAyMUFIO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0KnRwaWQgPSAwO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xcbmluZGV4IDIxZDJmZTM4YTQxYTYuLjQyNGMxMmMwMzk0YTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xcbkBAIC0xMSw2ICsxMSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfdHJhY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuIFxcbkBAIC03MTA1LDYgKzcxMDcsNTcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlnY19xYnZfc2NoZWR1bGluZ190aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuIFxcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaWdjX2dldF9hY3BpX21hY19wYXNzdGhydSh1OCAqbWFjKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbitcXHRcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRcXHRhY3BpX29iamVjdF90eXBlIHR5cGU7XFxuK1xcdFxcdHUzMiBsZW5ndGg7XFxuK1xcdH0gc291cmNlc1tdID0ge1xcbitcXHRcXHR7IFxcXCJcXFxcXFxcXF9TQi5BTUFDXFxcIiwgQUNQSV9UWVBFX0JVRkZFUiwgMjMgfSxcXG4rXFx0XFx0eyBcXFwiXFxcXFxcXFxNQUNBXFxcIiwgICAgIEFDUElfVFlQRV9TVFJJTkcsIDIyIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXI7XFxuK1xcdHVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7XFxuK1xcdGJvb2wgbWFjX2ZvdW5kID0gZmFsc2U7XFxuK1xcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4rXFx0dTggYnVmW0VUSF9BTEVOXTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FDUEkpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzb3VyY2VzKSBcXHUwMDI2XFx1MDAyNiAhbWFjX2ZvdW5kOyBpKyspIHtcXG4rXFx0XFx0YnVmZmVyLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfQlVGRkVSO1xcbitcXHRcXHRidWZmZXIucG9pbnRlciA9IE5VTEw7XFxuK1xcbitcXHRcXHRzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChOVUxMLCAoY2hhciAqKXNvdXJjZXNbaV0ubmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgTlVMTCwgXFx1MDAyNmJ1ZmZlcik7XFxuK1xcdFxcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRvYmogPSBidWZmZXIucG9pbnRlcjtcXG4rXFx0XFx0aWYgKCFvYmogfHwgb2JqLVxcdTAwM2V0eXBlICE9IHNvdXJjZXNbaV0udHlwZSB8fFxcbitcXHRcXHQgICAgb2JqLVxcdTAwM2VzdHJpbmcubGVuZ3RoICE9IHNvdXJjZXNbaV0ubGVuZ3RoKVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfb2JqO1xcbitcXG4rXFx0XFx0aWYgKHN0cm5jbXAob2JqLVxcdTAwM2VzdHJpbmcucG9pbnRlciwgXFxcIl9BVVhNQUNfI1xcXCIsIDkpIHx8XFxuK1xcdFxcdCAgICBvYmotXFx1MDAzZXN0cmluZy5wb2ludGVyWzIxXSAhPSAnIycpXFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9vYmo7XFxuK1xcbitcXHRcXHRpZiAoaGV4MmJpbihidWYsIG9iai1cXHUwMDNlc3RyaW5nLnBvaW50ZXIgKyA5LCBFVEhfQUxFTikgfHxcXG4rXFx0XFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKGJ1ZikpXFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9vYmo7XFxuK1xcbitcXHRcXHRldGhlcl9hZGRyX2NvcHkobWFjLCBidWYpO1xcbitcXHRcXHRtYWNfZm91bmQgPSB0cnVlO1xcbitmcmVlX29iajpcXG4rXFx0XFx0a2ZyZWUob2JqKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG1hY19mb3VuZDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGlnY19wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXFxuICAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbkBAIC03MjY4LDkgKzczMjEsMTYgQEAgc3RhdGljIGludCBpZ2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChldGhfcGxhdGZvcm1fZ2V0X21hY19hZGRyZXNzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGh3LVxcdTAwM2VtYWMuYWRkcikpIHtcXG4tXFx0XFx0LyogY29weSB0aGUgTUFDIGFkZHJlc3Mgb3V0IG9mIHRoZSBOVk0gKi9cXG4tXFx0XFx0aWYgKGh3LVxcdTAwM2VtYWMub3BzLnJlYWRfbWFjX2FkZHIoaHcpKVxcbitcXHRcXHQvKiBMb29rIGZvciBhIHN5c3RlbS1wcm92aWRlZCBNQUMgaW4gdGhlIEFDUEkgdGFibGUgYmVmb3JlXFxuK1xcdFxcdCAqIGZhbGxpbmcgYmFjayB0byByZWFkaW5nIHRoZSBhZGRyZXNzIGZyb20gdGhlIE5WTS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChpZ2NfZ2V0X2FjcGlfbWFjX3Bhc3N0aHJ1KGh3LVxcdTAwM2VtYWMuYWRkcikpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2LVxcdTAwM2VhZGRyX2Fzc2lnbl90eXBlID0gTkVUX0FERFJfU1RPTEVOO1xcbitcXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVXNpbmcgQUNQSSBwYXNzLXRocm91Z2ggTUFDIGFkZHIgJXBNXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgaHctXFx1MDAzZW1hYy5hZGRyKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChody1cXHUwMDNlbWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJOVk0gUmVhZCBFcnJvclxcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgaHctXFx1MDAzZW1hYy5hZGRyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdmYvdmlydGNobmwuaCBiL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcXG5pbmRleCAxMWJkYWI1NTIyZmQ1Li41MTFjODgyN2M2NDBmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oXFxuQEAgLTYzNiw2ICs2MzYsNyBAQCBlbnVtIHZpcnRjaG5sX3ZsYW5fc3VwcG9ydCB7XFxuIFxcdFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzgxMDAgPVxcdFxcdEJJVCgwKSxcXG4gXFx0VklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhBOCA9XFx0XFx0QklUKDEpLFxcbiBcXHRWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV85MTAwID1cXHRcXHRCSVQoMiksXFxuK1xcdFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4RTcgPVxcdFxcdEJJVCgzKSxcXG4gXFx0VklSVENITkxfVkxBTl9UQUdfTE9DQVRJT05fTDJUQUcxID1cXHRCSVQoOCksXFxuIFxcdFZJUlRDSE5MX1ZMQU5fVEFHX0xPQ0FUSU9OX0wyVEFHMiA9XFx0QklUKDkpLFxcbiBcXHRWSVJUQ0hOTF9WTEFOX1RBR19MT0NBVElPTl9MMlRBRzJfMiA9XFx0QklUKDEwKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6MjYuODgxNTkxNDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NjMwOTY1NDEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFMTAwMEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwMF9hbGxvY19yeF9idWZmZXJzXCIsXG4gICAgXCJlMTAwMF9jbGVhbl9yeF9pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI2ZjBhZjVjOTQzN2Y0MTY0YjAyYzYxMThhYTBkNzg0NDU1ZGFiMTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDIyOjQ3OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaWNlLnJzdFxuaW5kZXggMGJjYTI5M2NmOWNiNy4uODJiM2NjYzcwMjdlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbnRlbC9pY2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW50ZWwvaWNlLnJzdFxuQEAgLTk0MSw2ICs5NDEsODYgQEAgVG8gc2VlIGlucHV0IHNpZ25hbCBvbiB0aG9zZSBQVFAgcGlucywgeW91IG5lZWQgdG8gY29uZmlndXJlIERQTEwgcHJvcGVybHkuXG4gT3V0cHV0IHNpZ25hbCBpcyBvbmx5IHZpc2libGUgb24gRFBMTCBhbmQgdG8gc2VuZCBpdCB0byB0aGUgYm9hcmQgU01BL1UuRkwgcGlucyxcbiBEUExMIG91dHB1dCBwaW5zIGhhdmUgdG8gYmUgbWFudWFsbHkgY29uZmlndXJlZC5cbiBcbitVbm1hbmFnZWQgRFBMTCBTdXBwb3J0XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK0hhcmR3YXJlIHZhcmlhbnRzIG9mIEU4MzAgbWF5IHN1cHBvcnQgYW4gdW5tYW5hZ2VkIERQTEw6XG4rXG4rLSBJbnRlbChSKSBFdGhlcm5ldCBOZXR3b3JrIEFkYXB0ZXIgRTgzMC1YWFZEQThGIGZvciBPQ1AgMy4wLFxuK1xuKy0gSW50ZWwoUikgRXRoZXJuZXQgTmV0d29yayBBZGFwdGVyIEU4MzAtWFhWREE0Ri5cbitcbitJbiB0aGUgY2FzZSBvZiB0aGUgdW5tYW5hZ2VkIERQTEwsIHRoZSBjb25maWd1cmF0aW9uIGlzIGhhcmRjb2RlZCB3aXRoaW4gdGhlXG4raGFyZHdhcmUgYW5kIGZpcm13YXJlLCBtZWFuaW5nIHVzZXJzIGNhbm5vdCBtb2RpZnkgc2V0dGluZ3MuIEhvd2V2ZXIsXG4rdXNlcnMgY2FuIGNoZWNrIHRoZSBEUExMIGxvY2sgc3RhdHVzIGFuZCBvYnRhaW4gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvblxuK3Rocm91Z2ggdGhlIExpbnV4IERQTEwgc3Vic3lzdGVtLlxuK1xuK1doZW4gcHJlc2VudCwgdGhlIERQTEwgZGV2aWNlIGxvY2tzIHRvIGFuIGV4dGVybmFsIHNpZ25hbCBwcm92aWRlZCB0aHJvdWdoIHRoZVxuK1BDSWUvT0NQIHBpbi4gVGhlIGV4cGVjdGVkIGlucHV0IHNpZ25hbCBpcyAxUFBTICgxIFB1bHNlIFBlciBTZWNvbmQpIGVtYmVkZGVkXG4rb24gYSAxME1IeiByZWZlcmVuY2UgY2xvY2suXG4rVGhlIERQTEwgcHJvZHVjZXMgb3V0cHV0OlxuK1xuKy0gZm9yIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2wpIFx1MDAyNiBQSFkgKFBoeXNpY2FsIExheWVyKSBjbG9ja3MsXG4rXG4rLSAxUFBTIGZvciBzeW5jaHJvbml6YXRpb24gb2Ygb25ib2FyZCBQSEMgKFByZWNpc2lvbiBIYXJkd2FyZSBDbG9jaykgdGltZXIuXG4rXG4rRXhhbXBsZSBvdXRwdXQgb2YgcXVlcnlpbmcgdGhlIExpbnV4IERQTEwgc3Vic3lzdGVtIGNhbiBiZSBmb3VuZCBiZWxvdy5cbitcbisuLiBjb2RlLWJsb2NrOjogY29uc29sZVxuKyAgOmNhcHRpb246IER1bXBpbmcgdGhlIERQTEwgcGluc1xuK1xuKyAgJCBcdTAwM2N5bmxcdTAwM2UgLS1zcGVjIERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9kcGxsLnlhbWwgLS1kdW1wIHBpbi1nZXRcbisgIFt7J2JvYXJkLWxhYmVsJzogJzE1ODgtVElNRV9TWU5DJyxcbisgICAgJ2NhcGFiaWxpdGllcyc6IHNldCgpLFxuKyAgICAnY2xvY2staWQnOiAyODI1NzQ0NzE1NjEyMTYsXG4rICAgICdlc3luYy1mcmVxdWVuY3knOiAxLFxuKyAgICAnZXN5bmMtZnJlcXVlbmN5LXN1cHBvcnRlZCc6IFt7J2ZyZXF1ZW5jeS1tYXgnOiAxLCAnZnJlcXVlbmN5LW1pbic6IDF9XSxcbisgICAgJ2VzeW5jLXB1bHNlJzogMjUsXG4rICAgICdmcmVxdWVuY3knOiAxMDAwMDAwMCxcbisgICAgJ2lkJzogMTMsXG4rICAgICdtb2R1bGUtbmFtZSc6ICdpY2UnLFxuKyAgICAncGFyZW50LWRldmljZSc6IFt7J2RpcmVjdGlvbic6ICdpbnB1dCcsXG4rICAgICAgICAgICAgICAgICAgICAgICAncGFyZW50LWlkJzogNixcbisgICAgICAgICAgICAgICAgICAgICAgICdzdGF0ZSc6ICdjb25uZWN0ZWQnfV0sXG4rICAgICdwaGFzZS1hZGp1c3QtbWF4JzogMCxcbisgICAgJ3BoYXNlLWFkanVzdC1taW4nOiAwLFxuKyAgICAndHlwZSc6ICdleHQnfSxcbisgICAgeydib2FyZC1sYWJlbCc6ICdNQUMtUEhZLUNMSycsXG4rICAgICAgJ2NhcGFiaWxpdGllcyc6IHNldCgpLFxuKyAgICAnY2xvY2staWQnOiAyODI1NzQ0NzE1NjEyMTYsXG4rICAgICdmcmVxdWVuY3knOiAxNTYyNTAwMDAsXG4rICAgICdpZCc6IDE0LFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcbisgICAgJ3BhcmVudC1kZXZpY2UnOiBbeydkaXJlY3Rpb24nOiAnb3V0cHV0JyxcbisgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnQtaWQnOiA2LFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlJzogJ2Nvbm5lY3RlZCd9XSxcbisgICAgJ3BoYXNlLWFkanVzdC1tYXgnOiAwLFxuKyAgICAncGhhc2UtYWRqdXN0LW1pbic6IDAsXG4rICAgICd0eXBlJzogJ3N5bmNlLWV0aC1wb3J0J30sXG4rICB7J2JvYXJkLWxhYmVsJzogJzE1ODgtVElNRV9SRUYnLFxuKyAgICAnY2FwYWJpbGl0aWVzJzogc2V0KCksXG4rICAgICdjbG9jay1pZCc6IDI4MjU3NDQ3MTU2MTIxNixcbisgICAgJ2ZyZXF1ZW5jeSc6IDEsXG4rICAgICdpZCc6IDE1LFxuKyAgICAnbW9kdWxlLW5hbWUnOiAnaWNlJyxcbisgICAgJ3BhcmVudC1kZXZpY2UnOiBbeydkaXJlY3Rpb24nOiAnb3V0cHV0JyxcbisgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnQtaWQnOiA2LFxuKyAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlJzogJ2Nvbm5lY3RlZCd9XSxcbisgICAgJ3BoYXNlLWFkanVzdC1tYXgnOiAwLFxuKyAgICAncGhhc2UtYWRqdXN0LW1pbic6IDAsXG4rICAgICd0eXBlJzogJ2ludC1vc2NpbGxhdG9yJ31dXG4rXG4rLi4gY29kZS1ibG9jazo6IGNvbnNvbGVcbisgIDpjYXB0aW9uOiBEdW1waW5nIHRoZSBEUExMIGRldmljZXNcbitcbisgICQgXHUwMDNjeW5sXHUwMDNlIC0tc3BlYyBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZHBsbC55YW1sIC0tZHVtcCBkZXZpY2UtZ2V0XG4rICBbeydjbG9jay1pZCc6IDI4MjU3NDQ3MTU2MTIxNixcbisgICAgJ2lkJzogNixcbisgICAgJ2xvY2stc3RhdHVzJzogJ2xvY2tlZCcsXG4rICAgICdtb2RlJzogJ21hbnVhbCcsXG4rICAgICdtb2RlLXN1cHBvcnRlZCc6IFsnbWFudWFsJ10sXG4rICAgICdtb2R1bGUtbmFtZSc6ICdpY2UnLFxuKyAgICAndHlwZSc6ICdwcHMnfV1cbitcbiBHTlNTIG1vZHVsZVxuIC0tLS0tLS0tLS0tXG4gUmVxdWlyZXMga2VybmVsIGNvbXBpbGVkIHdpdGggQ09ORklHX0dOU1M9eSBvciBDT05GSUdfR05TUz1tLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuY1xuaW5kZXggODQ0ZjMxYWIzN2FkNC4uYjA4YmNiZGIxOWQ5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jXG5AQCAtNjc1LDYgKzY3NSw4IEBAIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdHNrYiA9IGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYjtcbiBcdFx0aWYgKHNrYikge1xuIFx0XHRcdHNrYl90cmltKHNrYiwgMCk7XG4rXHRcdFx0aWYgKGxpa2VseShidWZmZXJfaW5mby1cdTAwM2VkbWEpKVxuK1x0XHRcdFx0Z290byB3cml0ZV9kZXNjO1xuIFx0XHRcdGdvdG8gbWFwX3NrYjtcbiBcdFx0fVxuIFxuQEAgLTY5MiwxMCArNjk0LDEyIEBAIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdFx0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuIFx0XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSkpIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcIlJ4IERNQSBtYXAgZmFpbGVkXFxuXCIpO1xuK1x0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSA9IDA7XG4gXHRcdFx0YWRhcHRlci1cdTAwM2VyeF9kbWFfZmFpbGVkKys7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbit3cml0ZV9kZXNjOlxuIFx0XHRyeF9kZXNjID0gRTEwMDBfUlhfREVTQ19FWFQoKnJ4X3JpbmcsIGkpO1xuIFx0XHRyeF9kZXNjLVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby1cdTAwM2VkbWEpO1xuIFxuQEAgLTk1Myw3ICs5NTcsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFx0XHRkbWFfcm1iKCk7XHQvKiByZWFkIGRlc2NyaXB0b3IgYW5kIHJ4X2J1ZmZlcl9pbmZvIGFmdGVyIHN0YXR1cyBERCAqL1xuIFxuIFx0XHRza2IgPSBidWZmZXJfaW5mby1cdTAwM2Vza2I7XG4tXHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYiA9IE5VTEw7XG4gXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VkYXRhIC0gTkVUX0lQX0FMSUdOKTtcbiBcbkBAIC05NjcsOSArOTcwLDYgQEAgc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbiBcbiBcdFx0Y2xlYW5lZCA9IHRydWU7XG4gXHRcdGNsZWFuZWRfY291bnQrKztcbi1cdFx0ZG1hX3VubWFwX3NpbmdsZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgYnVmZmVyX2luZm8tXHUwMDNlZG1hLFxuLVx0XHRcdFx0IGFkYXB0ZXItXHUwMDNlcnhfYnVmZmVyX2xlbiwgRE1BX0ZST01fREVWSUNFKTtcbi1cdFx0YnVmZmVyX2luZm8tXHUwMDNlZG1hID0gMDtcbiBcbiBcdFx0bGVuZ3RoID0gbGUxNl90b19jcHUocnhfZGVzYy1cdTAwM2V3Yi51cHBlci5sZW5ndGgpO1xuIFxuQEAgLTk4NSw4ICs5ODUsNiBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFx0XHRpZiAoYWRhcHRlci1cdTAwM2VmbGFnczIgXHUwMDI2IEZMQUcyX0lTX0RJU0NBUkRJTkcpIHtcbiBcdFx0XHQvKiBBbGwgcmVjZWl2ZXMgbXVzdCBmaXQgaW50byBhIHNpbmdsZSBidWZmZXIgKi9cbiBcdFx0XHRlX2RiZyhcIlJlY2VpdmUgcGFja2V0IGNvbnN1bWVkIG11bHRpcGxlIGJ1ZmZlcnNcXG5cIik7XG4tXHRcdFx0LyogcmVjeWNsZSAqL1xuLVx0XHRcdGJ1ZmZlcl9pbmZvLVx1MDAzZXNrYiA9IHNrYjtcbiBcdFx0XHRpZiAoc3RhdGVyciBcdTAwMjYgRTEwMDBfUlhEX1NUQVRfRU9QKVxuIFx0XHRcdFx0YWRhcHRlci1cdTAwM2VmbGFnczIgXHUwMDI2PSB+RkxBRzJfSVNfRElTQ0FSRElORztcbiBcdFx0XHRnb3RvIG5leHRfZGVzYztcbkBAIC05OTQsOCArOTkyLDYgQEAgc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcbiBcbiBcdFx0aWYgKHVubGlrZWx5KChzdGF0ZXJyIFx1MDAyNiBFMTAwMF9SWERFWFRfRVJSX0ZSQU1FX0VSUl9NQVNLKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICEobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQUxMKSkpIHtcbi1cdFx0XHQvKiByZWN5Y2xlICovXG4tXHRcdFx0YnVmZmVyX2luZm8tXHUwMDNlc2tiID0gc2tiO1xuIFx0XHRcdGdvdG8gbmV4dF9kZXNjO1xuIFx0XHR9XG4gXG5AQCAtMTAyMiwxOSArMTAxOCwzMyBAQCBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxuIFx0XHRcdHN0cnVjdCBza19idWZmICpuZXdfc2tiID1cbiBcdFx0XHRcdG5hcGlfYWxsb2Nfc2tiKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSwgbGVuZ3RoKTtcbiBcdFx0XHRpZiAobmV3X3NrYikge1xuK1x0XHRcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0XHRidWZmZXJfaW5mby1cdTAwM2VkbWEsXG4rXHRcdFx0XHRcdFx0XHRhZGFwdGVyLVx1MDAzZXJ4X2J1ZmZlcl9sZW4sXG4rXHRcdFx0XHRcdFx0XHRETUFfRlJPTV9ERVZJQ0UpO1xuIFx0XHRcdFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGFfb2Zmc2V0KG5ld19za2IsXG4gXHRcdFx0XHRcdFx0XHQgICAgICAgLU5FVF9JUF9BTElHTixcbiBcdFx0XHRcdFx0XHRcdCAgICAgICAoc2tiLVx1MDAzZWRhdGEgLVxuIFx0XHRcdFx0XHRcdFx0XHRORVRfSVBfQUxJR04pLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgIChsZW5ndGggK1xuIFx0XHRcdFx0XHRcdFx0XHRORVRfSVBfQUxJR04pKTtcbi1cdFx0XHRcdC8qIHNhdmUgdGhlIHNrYiBpbiBidWZmZXJfaW5mbyBhcyBnb29kICovXG4tXHRcdFx0XHRidWZmZXJfaW5mby1cdTAwM2Vza2IgPSBza2I7XG4rXHRcdFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHRcdCAgIGJ1ZmZlcl9pbmZvLVx1MDAzZWRtYSxcbitcdFx0XHRcdFx0XHRcdCAgIGFkYXB0ZXItXHUwMDNlcnhfYnVmZmVyX2xlbixcbitcdFx0XHRcdFx0XHRcdCAgIERNQV9GUk9NX0RFVklDRSk7XG4gXHRcdFx0XHRza2IgPSBuZXdfc2tiO1xuK1x0XHRcdFx0Z290byBjb3B5YnJlYWtfZG9uZTtcbiBcdFx0XHR9XG4gXHRcdFx0LyogZWxzZSBqdXN0IGNvbnRpbnVlIHdpdGggdGhlIG9sZCBvbmUgKi9cbiBcdFx0fVxuLVx0XHQvKiBlbmQgY29weWJyZWFrIGNvZGUgKi9cbitcbitcdFx0YnVmZmVyX2luZm8tXHUwMDNlc2tiID0gTlVMTDtcbitcdFx0ZG1hX3VubWFwX3NpbmdsZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgYnVmZmVyX2luZm8tXHUwMDNlZG1hLFxuK1x0XHRcdFx0IGFkYXB0ZXItXHUwMDNlcnhfYnVmZmVyX2xlbixcbitcdFx0XHRcdCBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0XHRidWZmZXJfaW5mby1cdTAwM2VkbWEgPSAwO1xuK1xuK2NvcHlicmVha19kb25lOlxuIFx0XHRza2JfcHV0KHNrYiwgbGVuZ3RoKTtcbiBcbiBcdFx0LyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbmluZGV4IDBjZDBlNTU5N2M5MDkuLmFiYmM3MWU4MTVhZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5AQCAtNCw2ICs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0L2ludGVsL2xpYmllL3BjdHlwZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0L2ludGVsL2xpYmllL3J4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX21hY3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG5AQCAtMjQxMSwxMCArMjQxMiwxMiBAQCB2b2lkIGk0MGVfYXFjX2FkZF9maWx0ZXJzKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcbiBcbiBcdGlmIChmY250ICE9IG51bV9hZGQpIHtcbiBcdFx0aWYgKHZzaS1cdTAwM2V0eXBlID09IEk0MEVfVlNJX01BSU4pIHtcbi1cdFx0XHRzZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQywgdnNpLVx1MDAzZXN0YXRlKTtcbi1cdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdCBcIkVycm9yICVzIGFkZGluZyBSWCBmaWx0ZXJzIG9uICVzLCBwcm9taXNjdW91cyBtb2RlIGZvcmNlZCBvblxcblwiLFxuLVx0XHRcdFx0IGxpYmllX2FxX3N0cihhcV9zdGF0dXMpLCB2c2lfbmFtZSk7XG4rXHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9WU0lfT1ZFUkZMT1dfUFJPTUlTQyxcbitcdFx0XHRcdFx0ICAgICAgdnNpLVx1MDAzZXN0YXRlKSkge1xuK1x0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCBcIkVycm9yICVzIGFkZGluZyBSWCBmaWx0ZXJzIG9uICVzLCBwcm9taXNjdW91cyBtb2RlIGZvcmNlZCBvblxcblwiLFxuK1x0XHRcdFx0XHQgbGliaWVfYXFfc3RyKGFxX3N0YXR1cyksIHZzaV9uYW1lKTtcbitcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAodnNpLVx1MDAzZXR5cGUgPT0gSTQwRV9WU0lfU1JJT1YgfHxcbiBcdFx0XHQgICB2c2ktXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9WTURRMSB8fFxuIFx0XHRcdCAgIHZzaS1cdTAwM2V0eXBlID09IEk0MEVfVlNJX1ZNRFEyKSB7XG5AQCAtMjQ2NCwxMCArMjQ2NywxMSBAQCBpNDBlX2FxY19icm9hZGNhc3RfZmlsdGVyKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBjb25zdCBjaGFyICp2c2lfbmFtZSxcbiBcdH1cbiBcbiBcdGlmIChhcV9yZXQpIHtcbi1cdFx0c2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsIHZzaS1cdTAwM2VzdGF0ZSk7XG4tXHRcdGRldl93YXJuKFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCBcIkVycm9yICVzLCBmb3JjaW5nIG92ZXJmbG93IHByb21pc2N1b3VzIG9uICVzXFxuXCIsXG4tXHRcdFx0IGxpYmllX2FxX3N0cihody1cdTAwM2VhcS5hc3FfbGFzdF9zdGF0dXMpLCB2c2lfbmFtZSk7XG4rXHRcdGlmICghdGVzdF9hbmRfc2V0X2JpdChfX0k0MEVfVlNJX09WRVJGTE9XX1BST01JU0MsIHZzaS1cdTAwM2VzdGF0ZSkpIHtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcIkVycm9yICVzLCBmb3JjaW5nIG92ZXJmbG93IHByb21pc2N1b3VzIG9uICVzXFxuXCIsXG4rXHRcdFx0XHQgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFxLmFzcV9sYXN0X3N0YXR1cyksIHZzaV9uYW1lKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIGFxX3JldDtcbkBAIC0zNjIyLDcgKzM2MjYsNyBAQCBzdGF0aWMgaW50IGk0MGVfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGk0MGVfcmluZyAqcmluZylcbiBcdH1cbiBcbiBza2lwOlxuLVx0eGRwX2luaXRfYnVmZihcdTAwMjZyaW5nLVx1MDAzZXhkcCwgeGRwX2ZyYW1lX3N6LCBcdTAwMjZyaW5nLVx1MDAzZXhkcF9yeHEpO1xuK1x0eGRwX2luaXRfYnVmZihcdTAwMjZyaW5nLVx1MDAzZXhkcF9jdHgueGRwLCB4ZHBfZnJhbWVfc3osIFx1MDAyNnJpbmctXHUwMDNleGRwX3J4cSk7XG4gXG4gXHRyeF9jdHguZGJ1ZmYgPSBESVZfUk9VTkRfVVAocmluZy1cdTAwM2VyeF9idWZfbGVuLFxuIFx0XHRcdFx0ICAgIEJJVF9VTEwoSTQwRV9SWFFfQ1RYX0RCVUZGX1NISUZUKSk7XG5AQCAtMTM1ODIsNiArMTM1ODYsNTMgQEAgc3RhdGljIGludCBpNDBlX3hkcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IGk0MGVfeGRwX3J4X2hhc2goY29uc3Qgc3RydWN0IHhkcF9tZCAqX2N0eCwgdTMyICpoYXNoLFxuK1x0XHRcdCAgICBlbnVtIHhkcF9yc3NfaGFzaF90eXBlICpyc3NfdHlwZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgaTQwZV94ZHBfYnVmZiAqY3R4ID0gKGNvbnN0IHZvaWQgKilfY3R4O1xuK1x0Y29uc3QgdW5pb24gaTQwZV9yeF9kZXNjICpkZXNjID0gY3R4LVx1MDAzZWRlc2M7XG4rXHRzdHJ1Y3QgbGliZXRoX3J4X3B0IHJ4X3B0eXBlO1xuK1x0dTggcmF3X3J4X3B0eXBlO1xuK1x0dTY0IHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGxlNjRfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQxLnN0YXR1c19lcnJvcl9sZW4pO1xuK1x0cmF3X3J4X3B0eXBlID0gRklFTERfR0VUKEk0MEVfUlhEX1FXMV9QVFlQRV9NQVNLLCBzdGF0dXMpO1xuK1x0cnhfcHR5cGUgPSBsaWJpZV9yeF9wdF9wYXJzZShyYXdfcnhfcHR5cGUpO1xuK1xuK1x0aWYgKCFsaWJldGhfcnhfcHRfaGFzX2hhc2goY3R4LVx1MDAzZXhkcC5yeHEtXHUwMDNlZGV2LCByeF9wdHlwZSkgfHxcbitcdCAgICBGSUVMRF9HRVQoSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX01BU0ssIHN0YXR1cykgIT1cbitcdFx0ICAgIEk0MEVfUlhfREVTQ19GTFRTVEFUX1JTU19IQVNIKVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4rXG4rXHQqaGFzaCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQwLmhpX2R3b3JkLnJzcyk7XG4rXHQqcnNzX3R5cGUgPSByeF9wdHlwZS5oYXNoX3R5cGU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBpNDBlX3hkcF9yeF92bGFuX3RhZyhjb25zdCBzdHJ1Y3QgeGRwX21kICpfY3R4LCBfX2JlMTYgKnZsYW5fcHJvdG8sXG4rXHRcdFx0XHR1MTYgKnZsYW5fdGNpKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpNDBlX3hkcF9idWZmICpjdHggPSAoY29uc3Qgdm9pZCAqKV9jdHg7XG4rXHRjb25zdCB1bmlvbiBpNDBlX3J4X2Rlc2MgKmRlc2MgPSBjdHgtXHUwMDNlZGVzYztcbitcdHU2NCBzdGF0dXM7XG4rXG4rXHRzdGF0dXMgPSBsZTY0X3RvX2NwdShkZXNjLVx1MDAzZXdiLnF3b3JkMS5zdGF0dXNfZXJyb3JfbGVuKTtcbitcbitcdGlmICghKHN0YXR1cyBcdTAwMjYgQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTDJUQUcxUF9TSElGVCkpKVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4rXG4rXHQqdmxhbl9wcm90byA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKTtcbitcdCp2bGFuX3RjaSA9IGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNld2IucXdvcmQwLmxvX2R3b3JkLmwydGFnMSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB4ZHBfbWV0YWRhdGFfb3BzIGk0MGVfeGRwX21ldGFkYXRhX29wcyA9IHtcbitcdC54bW9fcnhfaGFzaFx0XHQ9IGk0MGVfeGRwX3J4X2hhc2gsXG4rXHQueG1vX3J4X3ZsYW5fdGFnXHQ9IGk0MGVfeGRwX3J4X3ZsYW5fdGFnLFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNDBlX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW5cdFx0PSBpNDBlX29wZW4sXG4gXHQubmRvX3N0b3BcdFx0PSBpNDBlX2Nsb3NlLFxuQEAgLTEzNzg0LDYgKzEzODM1LDcgQEAgc3RhdGljIGludCBpNDBlX2NvbmZpZ19uZXRkZXYoc3RydWN0IGk0MGVfdnNpICp2c2kpXG4gXHRpNDBlX3ZzaV9jb25maWdfbmV0ZGV2X3RjKHZzaSwgdnNpLVx1MDAzZXRjX2NvbmZpZy5lbmFibGVkX3RjKTtcbiBcbiBcdG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2aTQwZV9uZXRkZXZfb3BzO1xuK1x0bmV0ZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZpNDBlX3hkcF9tZXRhZGF0YV9vcHM7XG4gXHRuZXRkZXYtXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XG4gXHRpNDBlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXG5pbmRleCBlZjVlNjU3ODE2ZjAwLi43ZjY4YWRiNTEwOWIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuQEAgLTI0MzgsMTAgKzI0MzgsMTEgQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LFxuIFx0XHRcdCAgICAgdW5zaWduZWQgaW50ICpyeF9jbGVhbmVkKVxuIHtcbiBcdHVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlcyA9IDAsIHRvdGFsX3J4X3BhY2tldHMgPSAwO1xuK1x0c3RydWN0IGk0MGVfeGRwX2J1ZmYgKnhkcF9jdHggPSBcdTAwMjZyeF9yaW5nLVx1MDAzZXhkcF9jdHg7XG4gXHR1MTYgY2xlYW5lZF9jb3VudCA9IEk0MEVfREVTQ19VTlVTRUQocnhfcmluZyk7XG4gXHR1MTYgY2xlYW5fdGhyZXNob2xkID0gcnhfcmluZy1cdTAwM2Vjb3VudCAvIDI7XG4gXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcnhfcmluZy1cdTAwM2VyeF9vZmZzZXQ7XG4tXHRzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCA9IFx1MDAyNnJ4X3JpbmctXHUwMDNleGRwO1xuK1x0c3RydWN0IHhkcF9idWZmICp4ZHAgPSBcdTAwMjZ4ZHBfY3R4LVx1MDAzZXhkcDtcbiBcdHVuc2lnbmVkIGludCB4ZHBfeG1pdCA9IDA7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFx0Ym9vbCBmYWlsdXJlID0gZmFsc2U7XG5AQCAtMjUzMCw2ICsyNTMxLDggQEAgc3RhdGljIGludCBpNDBlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0LFxuIFx0XHRpZiAobmVvcClcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0eGRwX2N0eC1cdTAwM2VkZXNjID0gcnhfZGVzYztcbitcbiBcdFx0eGRwX3JlcyA9IGk0MGVfcnVuX3hkcChyeF9yaW5nLCB4ZHAsIHhkcF9wcm9nKTtcbiBcbiBcdFx0aWYgKHhkcF9yZXMpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguaFxuaW5kZXggMWU1ZmQ2M2Q0N2Y0Ny4uYmI3NDFmZjNlNWYyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmhcbkBAIC0yODMsNiArMjgzLDExIEBAIHN0cnVjdCBpNDBlX3J4X2J1ZmZlciB7XG4gXHRfX3UzMiBwYWdlX2NvdW50O1xuIH07XG4gXG4rc3RydWN0IGk0MGVfeGRwX2J1ZmYge1xuK1x0c3RydWN0IHhkcF9idWZmIHhkcDtcbitcdGNvbnN0IHVuaW9uIGk0MGVfcnhfZGVzYyAqZGVzYztcbit9O1xuK1xuIHN0cnVjdCBpNDBlX3F1ZXVlX3N0YXRzIHtcbiBcdHU2NCBwYWNrZXRzO1xuIFx0dTY0IGJ5dGVzO1xuQEAgLTM0NSw3ICszNTAsNyBAQCBzdHJ1Y3QgaTQwZV9yaW5nIHtcbiBcdCAqIGFuZCB0byByZXN1bWUgcGFja2V0IGJ1aWxkaW5nIGZvciB0aGlzIHJpbmcgaW4gdGhlIG5leHQgY2FsbCB0b1xuIFx0ICogaTQwZV9jbGVhbl9yeF9yaW5nX2lycSgpLlxuIFx0ICovXG4tXHRzdHJ1Y3QgeGRwX2J1ZmYgeGRwO1xuK1x0c3RydWN0IGk0MGVfeGRwX2J1ZmYgeGRwX2N0eDtcbiBcbiBcdC8qIE5leHQgZGVzY3JpcHRvciB0byBiZSBwcm9jZXNzZWQ7IG5leHRfdG9fY2xlYW4gaXMgdXBkYXRlZCBvbmx5IG9uXG4gXHQgKiBwcm9jZXNzaW5nIEVPUCBkZXNjcmlwdG9yXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmhcbmluZGV4IGVkOGJiZGI1ODZkYTkuLjE2YTY1YzZlNTE1MzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oXG5AQCAtNCw2ICs0LDcgQEBcbiAjaWZuZGVmIF9JNDBFX1RZUEVfSF9cbiAjZGVmaW5lIF9JNDBFX1RZUEVfSF9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcImk0MGVfYWRtaW5xLmhcIlxuICNpbmNsdWRlIFwiaTQwZV9obWMuaFwiXG5AQCAtNjk5LDYgKzcwMCwxMCBAQCBlbnVtIGk0MGVfcnhfZGVzY19zdGF0dXNfYml0cyB7XG4gXHRJNDBFX1JYX0RFU0NfU1RBVFVTX0xBU1QgLyogdGhpcyBlbnRyeSBtdXN0IGJlIGxhc3QhISEgKi9cbiB9O1xuIFxuKyNkZWZpbmUgSTQwRV9SWF9ERVNDX1NUQVRVU19GTFRTVEFUX01BU0sgICAgICAgICAgICAgICAgICAgXFxcbitcdEdFTk1BU0tfVUxMKEk0MEVfUlhfREVTQ19TVEFUVVNfRkxUU1RBVF9TSElGVCArIDEsIFxcXG4rXHRcdCAgICBJNDBFX1JYX0RFU0NfU1RBVFVTX0ZMVFNUQVRfU0hJRlQpXG4rXG4gI2RlZmluZSBJNDBFX1JYRF9RVzFfU1RBVFVTX1NISUZUXHQwXG4gI2RlZmluZSBJNDBFX1JYRF9RVzFfU1RBVFVTX01BU0tcdCgoQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTEFTVCkgLSAxKSBcXFxuIFx0XHRcdFx0XHQgXHUwMDNjXHUwMDNjIEk0MEVfUlhEX1FXMV9TVEFUVVNfU0hJRlQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXG5pbmRleCA5ZjQ3Mzg4ZWFiYTUzLi41MWEwNWNlNGM3Y2U4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbkBAIC0yNDYsNiArMjQ2LDggQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxuIFx0dTMyIG5iX2J1ZmZzLCBpO1xuIFx0ZG1hX2FkZHJfdCBkbWE7XG4gXG4rXHRYU0tfQ0hFQ0tfUFJJVl9UWVBFKHN0cnVjdCBpNDBlX3hkcF9idWZmKTtcbitcbiBcdHJ4X2Rlc2MgPSBJNDBFX1JYX0RFU0MocnhfcmluZywgbnR1KTtcbiBcdHhkcCA9IGk0MGVfcnhfYmkocnhfcmluZywgbnR1KTtcbiBcbkBAIC0zOTYsNiArMzk4LDE0IEBAIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFdBUk5fT05fT05DRSgxKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBpNDBlX3hkcF9idWZmICp4c2tfYnVmZl90b19pNDBlX2N0eChzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbit7XG4rXHQvKiB4ZHBfYnVmZiBwb2ludGVyIHVzZWQgYnkgWkMgY29kZSBwYXRoIGlzIGFsbG9jYXRlZCBhcyB4ZHBfYnVmZl94c2suXG4rXHQgKiBpNDBlX3hkcF9idWZmIHByaXZhdGUgZmllbGRzIG92ZXJsYXAgd2l0aCB4ZHBfYnVmZl94c2stXHUwMDNlY2IuXG4rXHQgKi9cbitcdHJldHVybiAoc3RydWN0IGk0MGVfeGRwX2J1ZmYgKil4ZHA7XG4rfVxuK1xuIC8qKlxuICAqIGk0MGVfY2xlYW5fcnhfaXJxX3pjIC0gQ29uc3VtZXMgUnggcGFja2V0cyBmcm9tIHRoZSBoYXJkd2FyZSByaW5nXG4gICogQHJ4X3Jpbmc6IFJ4IHJpbmdcbkBAIC00NzIsNiArNDgyLDggQEAgaW50IGk0MGVfY2xlYW5fcnhfaXJxX3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIGludCBidWRnZXQpXG4gXHRcdGlmIChpNDBlX2lzX25vbl9lb3AocnhfcmluZywgcnhfZGVzYykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdHhza19idWZmX3RvX2k0MGVfY3R4KGZpcnN0KS1cdTAwM2VkZXNjID0gcnhfZGVzYztcbitcbiBcdFx0eGRwX3JlcyA9IGk0MGVfcnVuX3hkcF96YyhyeF9yaW5nLCBmaXJzdCwgeGRwX3Byb2cpO1xuIFx0XHRpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHJ4X3JpbmcsIGZpcnN0LCByeF9kZXNjLCBcdTAwMjZyeF9wYWNrZXRzLFxuIFx0XHRcdFx0XHQgIFx1MDAyNnJ4X2J5dGVzLCB4ZHBfcmVzLCBcdTAwMjZmYWlsdXJlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9oZWFsdGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jXG5pbmRleCA4ZTlhOGE4MTc4ZDQ4Li5hODNlYjlmMTA0YzgzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvaGVhbHRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2hlYWx0aC5jXG5AQCAtMTAxLDYgKzEwMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2hlYWx0aF9zdGF0dXMgaWNlX2hlYWx0aF9zdGF0dXNfbG9va3VwW10gPSB7XG4gXHRcdFwiU3VwcGxpZWQgTUlCIGZpbGUgaXMgaW52YWxpZC4gRENCIHJldmVydGVkIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cIixcbiBcdFx0XCJEaXNhYmxlIEZXLUxMRFAgYW5kIGNoZWNrIERDQnggc3lzdGVtIGNvbmZpZ3VyYXRpb24uXCIsXG4gXHRcdHtpY2VfcG9ydF9udW1iZXJfbGFiZWwsIFwiTUlCIElEXCJ9fSxcbitcdHtJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0ssIFwiTG9jYWwgRFBMTCBsb2NrIHN0YXR1c1wiLFxuK1x0XHROVUxMLH0sXG4gfTtcbiBcbiBzdGF0aWMgaW50IGljZV9oZWFsdGhfc3RhdHVzX2xvb2t1cF9jb21wYXJlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpXG5AQCAtMjQyLDYgKzI0NCwxMCBAQCB2b2lkIGljZV9wcm9jZXNzX2hlYWx0aF9zdGF0dXNfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcnFfZXZlbnRfaW5mb1xuIFx0XHRcdFx0cGYtXHUwMDNlaGVhbHRoX3JlcG9ydGVycy5md19zdGF0dXMgPSAqaGVhbHRoX2luZm87XG4gXHRcdFx0XHRkZXZsaW5rX2hlYWx0aF9yZXBvcnQocGYtXHUwMDNlaGVhbHRoX3JlcG9ydGVycy5mdyxcbiBcdFx0XHRcdFx0XHQgICAgICBcIkZXIHN5bmRyb21lIHJlcG9ydGVkXCIsIE5VTEwpO1xuK1x0XHRcdFx0aWYgKHN0YXR1c19jb2RlID09IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSyBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgcGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKVxuK1x0XHRcdFx0XHRpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQocGYsIGhlYWx0aF9pbmZvLCB0cnVlKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX1BGOlxuIFx0XHRcdGNhc2UgSUNFX0FRQ19IRUFMVEhfU1RBVFVTX1BPUlQ6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZG1pbnFfY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaFxuaW5kZXggNDI4NzhhYmFjOWViMS4uODQ4YWM1ODM0Mjk3OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRtaW5xX2NtZC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkbWlucV9jbWQuaFxuQEAgLTE1MDAsNiArMTUwMCw3IEBAIHN0cnVjdCBpY2VfYXFjX2dldF9saW5rX3RvcG8ge1xuICNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfUENBOTU3NVx0XHQweDIxXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDMwNjMyXzgwMDMyXHQweDI0XG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9TSTUzODNfNTM4NFx0MHgyNVxuKyNkZWZpbmUgSUNFX0FRQ19HRVRfTElOS19UT1BPX05PREVfTlJfWkw4MDY0MFx0XHQweDI3XG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9FODIyX1BIWVx0XHQweDMwXG4gI2RlZmluZSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9DODI3XHRcdDB4MzFcbiAjZGVmaW5lIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX0dFTl9DTEtfTVVYXHQweDQ3XG5AQCAtMjQ4MywxMSArMjQ4NCwxNCBAQCBlbnVtIGljZV9hcWNfaGVhbHRoX3N0YXR1cyB7XG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0JNQ19SRVNFVFx0XHRcdD0gMHg1MEIsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfTU5HX0ZBSUxcdFx0XHQ9IDB4NTBDLFxuIFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9SRVNPVVJDRV9BTExPQ19GQUlMXHRcdD0gMHg1MEQsXG4rXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0tcdFx0XHQ9IDB4NjAxLFxuIFx0SUNFX0FRQ19IRUFMVEhfU1RBVFVTX0VSUl9GV19MT09QXHRcdFx0PSAweDEwMDAsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0ZXX1BGUl9GQUlMXHRcdFx0PSAweDEwMDEsXG4gXHRJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfRVJSX0xBU1RfRkFJTF9BUVx0XHRcdD0gMHgxMDAyLFxuIH07XG4gXG4rI2RlZmluZSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfQ09ERV9OVU1cdFx0XHRcdDY0XG4rXG4gLyogR2V0IEhlYWx0aCBTdGF0dXMgKGluZGlyZWN0IDB4RkYyMikgKi9cbiBzdHJ1Y3QgaWNlX2FxY19nZXRfaGVhbHRoX3N0YXR1cyB7XG4gXHRfX2xlMTYgaGVhbHRoX3N0YXR1c19jb3VudDtcbkBAIC0yNTE0LDYgKzI1MTgsMTMgQEAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtIHtcbiBcdF9fbGUzMiBpbnRlcm5hbF9kYXRhMjtcbiB9O1xuIFxuKy8qIEdldCBIZWFsdGggU3RhdHVzIHJlc3BvbnNlIGJ1ZmZlciBlbnRyeSwgKDB4RkYyMSlcbisgKiByZXBlYXRlZCBwZXIgcmVwb3J0ZWQgaGVhbHRoIHN0YXR1c1xuKyAqL1xuK3N0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfc3VwcF9lbGVtIHtcbitcdF9fbGUxNiBoZWFsdGhfc3RhdHVzX2NvZGU7XG4rfTtcbitcbiAvKiBBZG1pbiBRdWV1ZSBjb21tYW5kIG9wY29kZXMgKi9cbiBlbnVtIGljZV9hZG1pbnFfb3BjIHtcbiBcdC8qIEFRIGNvbW1hbmRzICovXG5AQCAtMjY3Nyw2ICsyNjg4LDcgQEAgZW51bSBpY2VfYWRtaW5xX29wYyB7XG4gXG4gXHQvKiBTeXN0ZW0gRGlhZ25vc3RpYyBjb21tYW5kcyAqL1xuIFx0aWNlX2FxY19vcGNfc2V0X2hlYWx0aF9zdGF0dXNfY2ZnXHRcdD0gMHhGRjIwLFxuK1x0aWNlX2FxY19vcGNfZ2V0X3N1cHBvcnRlZF9oZWFsdGhfc3RhdHVzX2NvZGVzXHQ9IDB4RkYyMSxcbiBcdGljZV9hcWNfb3BjX2dldF9oZWFsdGhfc3RhdHVzXHRcdFx0PSAweEZGMjIsXG4gXG4gXHQvKiBGVyBMb2dnaW5nIENvbW1hbmRzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNcbmluZGV4IGVmMWNlMTA2ZjgxYjUuLjJjNzJlZDE4Njk1YzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXG5AQCAtMzA0OCw2ICszMDQ4LDI5IEBAIGJvb2wgaWNlX2lzX2NndV9pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbisvKipcbisgKiBpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0IC0gY2hlY2sgZm9yIHVubWFuYWdlZCBDR1UgcHJlc2VuY2VcbisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxuKyAqXG4rICogQ2hlY2sgaWYgdGhlIHVubWFuYWdlZCBDbG9jayBHZW5lcmF0aW9uIFVuaXQgKENHVSkgZGV2aWNlIGlzIHByZXNlbnQgaW4gdGhlIG5ldGxpc3QuXG4rICogU2F2ZSB0aGUgQ0dVIHBhcnQgbnVtYmVyIGluIHRoZSBodyBzdHJ1Y3R1cmUgZm9yIGxhdGVyIHVzZS5cbisgKiBSZXR1cm46XG4rICogKiB0cnVlIC0gdW5tYW5hZ2VkIGNndSBpcyBwcmVzZW50XG4rICogKiBmYWxzZSAtIHVubWFuYWdlZCBjZ3UgaXMgbm90IHByZXNlbnRcbisgKi9cbitib29sIGljZV9pc191bm1hbmFnZWRfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpXG4re1xuK1x0aWYgKCFpY2VfZmluZF9uZXRsaXN0X25vZGUoaHcsIElDRV9BUUNfTElOS19UT1BPX05PREVfVFlQRV9DTEtfQ1RSTCxcbitcdFx0XHRcdCAgIElDRV9BUUNfTElOS19UT1BPX05PREVfQ1RYX0dMT0JBTCxcbitcdFx0XHRcdCAgIElDRV9BUUNfR0VUX0xJTktfVE9QT19OT0RFX05SX1pMODA2NDAsXG4rXHRcdFx0XHQgICBOVUxMKSkge1xuK1x0XHRody1cdTAwM2VjZ3VfcGFydF9udW1iZXIgPSBJQ0VfQVFDX0dFVF9MSU5LX1RPUE9fTk9ERV9OUl9aTDgwNjQwO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLyoqXG4gICogaWNlX2lzX2dwc19pbl9uZXRsaXN0XG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcbkBAIC02MzEyLDYgKzYzMzUsMTE5IEBAIGJvb2wgaWNlX2lzX2Z3X2hlYWx0aF9yZXBvcnRfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRcdFx0ICAgICBJQ0VfRldfQVBJX0hFQUxUSF9SRVBPUlRfUEFUQ0gpO1xuIH1cbiBcbisvKipcbisgKiBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXNfc3VwcG9ydGVkIC0gZ2V0IHN1cHBvcnRlZCBoZWFsdGggc3RhdHVzIGNvZGVzXG4rICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbisgKiBAYnVmZjogcG9pbnRlciB0byBidWZmZXIgd2hlcmUgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyB3aWxsIGJlIHN0b3JlZFxuKyAqIEBudW06IG51bWJlciBvZiBoZWFsdGggc3RhdHVzIGVsZW1lbnRzIGJ1ZmZlciBjYW4gaG9sZFxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAtIHN1Y2Nlc3MsXG4rICogKiBuZWdhdGl2ZSAtIEFRIGVycm9yIGNvZGUuXG4rICovXG4rc3RhdGljIGludFxuK2ljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSAqYnVmZixcbitcdFx0XHRcdCAgIGludCBudW0pXG4re1xuK1x0dTE2IGNvZGUgPSBpY2VfYXFjX29wY19nZXRfc3VwcG9ydGVkX2hlYWx0aF9zdGF0dXNfY29kZXM7XG4rXHRzdHJ1Y3QgbGliaWVfYXFfZGVzYyBkZXNjO1xuK1xuK1x0aWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoXHUwMDI2ZGVzYywgY29kZSk7XG4rXG4rXHRyZXR1cm4gaWNlX2FxX3NlbmRfY21kKGh3LCBcdTAwMjZkZXNjLCBidWZmLCBudW0gKiBzaXplb2YoKmJ1ZmYpLCBOVUxMKTtcbit9XG4rXG4rLyoqXG4rICogaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzIC0gZ2V0IGN1cnJlbnQgaGVhbHRoIHN0YXR1cyBhcnJheSBmcm9tIHRoZSBmaXJtd2FyZVxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4rICogQGJ1ZmY6IHBvaW50ZXIgdG8gYnVmZmVyIHdoZXJlIGhlYWx0aCBzdGF0dXMgZWxlbWVudHMgd2lsbCBiZSBzdG9yZWRcbisgKiBAbnVtOiBudW1iZXIgb2YgaGVhbHRoIHN0YXR1cyBlbGVtZW50cyBidWZmZXIgY2FuIGhvbGRcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgLSBzdWNjZXNzLFxuKyAqICogbmVnYXRpdmUgLSBBUSBlcnJvciBjb2RlLlxuKyAqL1xuK2ludCBpY2VfYXFfZ2V0X2hlYWx0aF9zdGF0dXMoc3RydWN0IGljZV9odyAqaHcsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsIGludCBudW0pXG4re1xuK1x0c3RydWN0IGxpYmllX2FxX2Rlc2MgZGVzYztcbitcbitcdGljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKFx1MDAyNmRlc2MsXG4rXHRcdFx0XHQgICAgICBpY2VfYXFjX29wY19nZXRfaGVhbHRoX3N0YXR1cyk7XG4rXG4rXHRyZXR1cm4gaWNlX2FxX3NlbmRfY21kKGh3LCBcdTAwMjZkZXNjLCBidWZmLCBudW0gKiBzaXplb2YoKmJ1ZmYpLCBOVUxMKTtcbit9XG4rXG4rLyoqXG4rICogaWNlX2lzX2hlYWx0aF9zdGF0dXNfY29kZV9zdXBwb3J0ZWQgLSBjaGVjayBpZiBoZWFsdGggc3RhdHVzIGNvZGUgaXMgc3VwcG9ydGVkXG4rICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbisgKiBAY29kZTogaGVhbHRoIHN0YXR1cyBjb2RlIHRvIGNoZWNrXG4rICogQHN1cHBvcnRlZDogcG9pbnRlciB0byBib29sZWFuIHJlc3VsdFxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4rICovXG4raW50IGljZV9pc19oZWFsdGhfc3RhdHVzX2NvZGVfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgY29kZSxcbitcdFx0XHRcdFx0Ym9vbCAqc3VwcG9ydGVkKVxuK3tcbitcdGNvbnN0IGludCBCVUZGX1NJWkUgPSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfQ09ERV9OVU07XG4rXHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX3N1cHBfZWxlbSAqYnVmZjtcbitcdGludCByZXQ7XG4rXG4rXHQqc3VwcG9ydGVkID0gZmFsc2U7XG4rXHRidWZmID0ga3phbGxvY19vYmpzKCpidWZmLCBCVUZGX1NJWkUpO1xuK1x0aWYgKCFidWZmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJldCA9IGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1c19zdXBwb3J0ZWQoaHcsIGJ1ZmYsIEJVRkZfU0laRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGZyZWVfYnVmZjtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBCVUZGX1NJWkUgXHUwMDI2XHUwMDI2IGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlOyBpKyspXG4rXHRcdGlmIChsZTE2X3RvX2NwdShidWZmW2ldLmhlYWx0aF9zdGF0dXNfY29kZSkgPT0gY29kZSkge1xuK1x0XHRcdCpzdXBwb3J0ZWQgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rZnJlZV9idWZmOlxuK1x0a2ZyZWUoYnVmZik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlIC0gZ2V0IGxhc3QgaGVhbHRoIHN0YXR1cyBmb3IgZ2l2ZW4gY29kZVxuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG4rICogQG91dDogcG9pbnRlciB0byB0aGUgaGVhbHRoIHN0YXR1cyBzdHJ1Y3QgdG8gYmUgZmlsbGVkXG4rICogQGNvZGU6IGhlYWx0aCBzdGF0dXMgY29kZSB0byBjaGVja1xuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4rICovXG4raW50IGljZV9nZXRfbGFzdF9oZWFsdGhfc3RhdHVzX2NvZGUoc3RydWN0IGljZV9odyAqaHcsXG4rXHRcdFx0XHQgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpvdXQsXG4rXHRcdFx0XHQgICAgdTE2IGNvZGUpXG4re1xuK1x0Y29uc3QgaW50IEJVRkZfU0laRSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19DT0RFX05VTTtcbitcdHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZjtcbitcdGludCByZXQsIGxhc3Rfc3RhdHVzID0gLTE7XG4rXG4rXHRidWZmID0ga3phbGxvY19vYmpzKCpidWZmLCBCVUZGX1NJWkUpO1xuK1x0aWYgKCFidWZmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJldCA9IGljZV9hcV9nZXRfaGVhbHRoX3N0YXR1cyhodywgYnVmZiwgQlVGRl9TSVpFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZnJlZV9idWZmO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEJVRkZfU0laRSBcdTAwMjZcdTAwMjYgYnVmZltpXS5oZWFsdGhfc3RhdHVzX2NvZGU7IGkrKylcbitcdFx0aWYgKGxlMTZfdG9fY3B1KGJ1ZmZbaV0uaGVhbHRoX3N0YXR1c19jb2RlKSA9PSBjb2RlKVxuK1x0XHRcdGxhc3Rfc3RhdHVzID0gaTtcbitcbitcdGlmIChsYXN0X3N0YXR1cyBcdTAwM2U9IDApXG4rXHRcdG1lbWNweShvdXQsIFx1MDAyNmJ1ZmZbbGFzdF9zdGF0dXNdLCBzaXplb2YoKm91dCkpO1xuK1x0ZWxzZVxuK1x0XHRtZW1zZXQob3V0LCAwLCBzaXplb2YoKm91dCkpO1xuK1xuK2ZyZWVfYnVmZjpcbitcdGtmcmVlKGJ1ZmYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogaWNlX2FxX3NldF9oZWFsdGhfc3RhdHVzX2NmZyAtIENvbmZpZ3VyZSBGVyBoZWFsdGggZXZlbnRzXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaFxuaW5kZXggOWY1MzQ0MjEyMTk1NS4uNTEwMzYxODhjZDM5NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmhcbkBAIC0xNjIsNiArMTYyLDcgQEAgaWNlX2FxX2dldF9waHlfY2FwcyhzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgcXVhbF9tb2RzLCB1OCByZXBvcnRfbW9kZSxcbiBib29sIGljZV9pc19waHlfcmNsa19pbl9uZXRsaXN0KHN0cnVjdCBpY2VfaHcgKmh3KTtcbiBib29sIGljZV9pc19jbG9ja19tdXhfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4gYm9vbCBpY2VfaXNfY2d1X2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xuK2Jvb2wgaWNlX2lzX3VubWFuYWdlZF9jZ3VfaW5fbmV0bGlzdChzdHJ1Y3QgaWNlX2h3ICpodyk7XG4gYm9vbCBpY2VfaXNfZ3BzX2luX25ldGxpc3Qoc3RydWN0IGljZV9odyAqaHcpO1xuIGludFxuIGljZV9hcV9nZXRfbmV0bGlzdF9ub2RlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua190b3BvICpjbWQsXG5AQCAtMTg4LDYgKzE4OSwxMyBAQCBpY2VfZ2V0X2xpbmtfZGVmYXVsdF9vdmVycmlkZShzdHJ1Y3QgaWNlX2xpbmtfZGVmYXVsdF9vdmVycmlkZV90bHYgKmxkbyxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGkpO1xuIGJvb2wgaWNlX2lzX3BoeV9jYXBzX2FuX2VuYWJsZWQoc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKmNhcHMpO1xuIGJvb2wgaWNlX2lzX2Z3X2hlYWx0aF9yZXBvcnRfc3VwcG9ydGVkKHN0cnVjdCBpY2VfaHcgKmh3KTtcbitpbnQgaWNlX2FxX2dldF9oZWFsdGhfc3RhdHVzKHN0cnVjdCBpY2VfaHcgKmh3LFxuK1x0XHRcdCAgICAgc3RydWN0IGljZV9hcWNfaGVhbHRoX3N0YXR1c19lbGVtICpidWZmLCBpbnQgbnVtKTtcbitpbnQgaWNlX2lzX2hlYWx0aF9zdGF0dXNfY29kZV9zdXBwb3J0ZWQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBjb2RlLFxuK1x0XHRcdFx0XHRib29sICpzdXBwb3J0ZWQpO1xuK2ludCBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKHN0cnVjdCBpY2VfaHcgKmh3LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqb3V0LFxuK1x0XHRcdFx0ICAgIHUxNiBjb2RlKTtcbiBpbnQgaWNlX2FxX3NldF9oZWFsdGhfc3RhdHVzX2NmZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggZXZlbnRfc291cmNlKTtcbiBpbnQgaWNlX2FxX2dldF9waHlfZXF1YWxpemF0aW9uKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgZGF0YV9pbiwgdTE2IG9wX2NvZGUsXG4gXHRcdFx0XHR1OCBzZXJkZXNfbnVtLCBpbnQgKm91dHB1dCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kY2JfbmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGNiX25sLmNcbmluZGV4IGExMGMxYzhkODY5NzcuLmJiNWNjMGEyYmE2OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RjYl9ubC5jXG5AQCAtODcyLDcgKzg3Miw3IEBAIHN0YXRpYyBpbnQgaWNlX2RjYm5sX2RlbGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKVxuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRpZiAocGYtXHUwMDNlZGNieF9jYXAgXHUwMDI2IERDQl9DQVBfRENCWF9MTERfTUFOQUdFRCkge1xuLVx0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJjYW4ndCBkZWxldGUgRFNDUCBuZXRsaW5rIGFwcCB3aGVuIEZXIERDQiBhZ2VudCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcImNhbid0IGRlbGV0ZSBEU0NQIG5ldGxpbmsgYXBwIHdoZW4gRlcgRENCIGFnZW50IGlzIGFjdGl2ZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuaW5kZXggODVhNzRjZDZlYTFmMy4uMWNhMTM3ZjY3ZGQ0OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuQEAgLTE5LDYgKzE5LDggQEBcbiAjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9JTlBVVF9CQVNFX1NGUFx0XHQ0XG4gI2RlZmluZSBJQ0VfRFBMTF9TV19QSU5fSU5QVVRfQkFTRV9RU0ZQXHRcdDZcbiAjZGVmaW5lIElDRV9EUExMX1NXX1BJTl9PVVRQVVRfQkFTRVx0XHQwXG4rI2RlZmluZSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX0xPQ0tFRFx0XHQxXG4rI2RlZmluZSBJQ0VfRFBMTF9IRUFMVEhfU1RBVFVTX1VOTE9DS0VEXHRcdDBcbiBcbiAjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMF9QSU5fSURYXHRcdDBcbiAjZGVmaW5lIEU4MjVfUkNMS19QQVJFTlRfMV9QSU5fSURYXHRcdDFcbkBAIC04OSw2ICs5MSwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VbXSA9IHtcbiBcdERQTExfUElOX0ZSRVFVRU5DWV9SQU5HRSgwLCBEUExMX1BJTl9GUkVRVUVOQ1lfMV9IWiksXG4gfTtcbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkW10gPSB7XG4rXHREUExMX1BJTl9GUkVRVUVOQ1lfMVBQUyxcbit9O1xuK1xuIC8qKlxuICAqIGljZV9kcGxsX2lzX3N3X3BpbiAtIGNoZWNrIGlmIGdpdmVuIHBpbiBzaGFsbCBiZSBjb250cm9sbGVkIGJ5IFNXXG4gICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxuQEAgLTEwOTgsOSArMTEwNCwxMSBAQCBpY2VfZHBsbF9waW5fc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4tXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwLCBwaW5fdHlwZSwgZXh0YWNrKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0aWYgKCFwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbitcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgcGluX3R5cGUsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXHRpZiAocGluX3R5cGUgPT0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQgfHxcbiBcdCAgICBwaW5fdHlwZSA9PSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpXG4gXHRcdCpzdGF0ZSA9IHAtXHUwMDNlc3RhdGVbZC1cdTAwM2VkcGxsX2lkeF07XG5AQCAtMjI0Myw5ICsyMjUxLDE0IEBAIGljZV9kcGxsX2lucHV0X2VzeW5jX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuLVx0ZXN5bmMtXHUwMDNlcmFuZ2UgPSBpY2VfZXN5bmNfcmFuZ2U7XG4tXHRlc3luYy1cdTAwM2VyYW5nZV9udW0gPSBBUlJBWV9TSVpFKGljZV9lc3luY19yYW5nZSk7XG4tXHRpZiAocC1cdTAwM2VmbGFnc1swXSBcdTAwMjYgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOKSB7XG4rXHRpZiAocGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XG4rXHRcdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlX3VubWFuYWdlZDtcbitcdFx0ZXN5bmMtXHUwMDNlcmFuZ2VfbnVtID0gQVJSQVlfU0laRShpY2VfZXN5bmNfcmFuZ2VfdW5tYW5hZ2VkKTtcbitcdH0gZWxzZSB7XG4rXHRcdGVzeW5jLVx1MDAzZXJhbmdlID0gaWNlX2VzeW5jX3JhbmdlO1xuK1x0XHRlc3luYy1cdTAwM2VyYW5nZV9udW0gPSBBUlJBWV9TSVpFKGljZV9lc3luY19yYW5nZSk7XG4rXHR9XG4rXHRpZiAocC1cdTAwM2VmbGFnc1swXSBcdTAwMjYgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRCkge1xuIFx0XHRlc3luYy1cdTAwM2VmcmVxID0gRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFo7XG4gXHRcdGVzeW5jLVx1MDAzZXB1bHNlID0gSUNFX0RQTExfUElOX0VTWU5DX1BVTFNFX0hJR0hfUEVSQ0VOVDtcbiBcdH0gZWxzZSB7XG5AQCAtMjg3Niw2ICsyODg5LDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzIGljZV9kcGxsX291dHB1dF9vcHMgPSB7XG4gXHQuZXN5bmNfZ2V0ID0gaWNlX2RwbGxfb3V0cHV0X2VzeW5jX2dldCxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzIGljZV9kcGxsX2lucHV0X3VubWFuYWdlZF9vcHMgPSB7XG4rXHQuZnJlcXVlbmN5X2dldCA9IGljZV9kcGxsX2lucHV0X2ZyZXF1ZW5jeV9nZXQsXG4rXHQuZGlyZWN0aW9uX2dldCA9IGljZV9kcGxsX2lucHV0X2RpcmVjdGlvbixcbitcdC5zdGF0ZV9vbl9kcGxsX2dldCA9IGljZV9kcGxsX2lucHV0X3N0YXRlX2dldCxcbitcdC5lc3luY19nZXQgPSBpY2VfZHBsbF9pbnB1dF9lc3luY19nZXQsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyBpY2VfZHBsbF9vdXRwdXRfdW5tYW5hZ2VkX29wcyA9IHtcbitcdC5mcmVxdWVuY3lfZ2V0ID0gaWNlX2RwbGxfb3V0cHV0X2ZyZXF1ZW5jeV9nZXQsXG4rXHQuZGlyZWN0aW9uX2dldCA9IGljZV9kcGxsX291dHB1dF9kaXJlY3Rpb24sXG4rXHQuc3RhdGVfb25fZHBsbF9nZXQgPSBpY2VfZHBsbF9vdXRwdXRfc3RhdGVfZ2V0LFxuK307XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgaWNlX2RwbGxfb3BzID0ge1xuIFx0LmxvY2tfc3RhdHVzX2dldCA9IGljZV9kcGxsX2xvY2tfc3RhdHVzX2dldCxcbiBcdC5tb2RlX2dldCA9IGljZV9kcGxsX21vZGVfZ2V0LFxuQEAgLTM0MzksOCArMzQ2NSwxMCBAQCBpY2VfZHBsbF9kZWluaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZHBsbF9kZXZpY2UgKnNlY29uZClcbiB7XG4gXHRpZiAoY2d1KSB7XG4tXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XG4tXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhzZWNvbmQsIHBpbnMsIG9wcywgY291bnQpO1xuK1x0XHRpZiAoZmlyc3QpXG4rXHRcdFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcbitcdFx0aWYgKHNlY29uZClcbitcdFx0XHRpY2VfZHBsbF91bnJlZ2lzdGVyX3BpbnMoc2Vjb25kLCBwaW5zLCBvcHMsIGNvdW50KTtcbiBcdH1cbiBcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhwaW5zLCBjb3VudCk7XG4gfVxuQEAgLTM0NzIsMTIgKzM1MDAsMTUgQEAgaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gaWNlX2RwbGxfZ2V0X3BpbnMocGYsIHBpbnMsIHN0YXJ0X2lkeCwgY291bnQsIHBmLVx1MDAzZWRwbGxzLmNsb2NrX2lkKTtcbi1cdGlmIChyZXQpXG4rXHRpZiAoIWNndSB8fCByZXQpXG4gXHRcdHJldHVybiByZXQ7XG4tXHRpZiAoY2d1KSB7XG4rXG4rXHRpZiAoZmlyc3QpIHtcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcmVnaXN0ZXJfcGlucyhmaXJzdCwgcGlucywgb3BzLCBjb3VudCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byByZWxlYXNlX3BpbnM7XG4rXHR9XG4rXHRpZiAoc2Vjb25kKSB7XG4gXHRcdHJldCA9IGljZV9kcGxsX3JlZ2lzdGVyX3BpbnMoc2Vjb25kLCBwaW5zLCBvcHMsIGNvdW50KTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIHVucmVnaXN0ZXJfZmlyc3Q7XG5AQCAtMzQ4Niw3ICszNTE3LDggQEAgaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXG4gXHRyZXR1cm4gMDtcbiBcbiB1bnJlZ2lzdGVyX2ZpcnN0OlxuLVx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcbitcdGlmIChmaXJzdClcbitcdFx0aWNlX2RwbGxfdW5yZWdpc3Rlcl9waW5zKGZpcnN0LCBwaW5zLCBvcHMsIGNvdW50KTtcbiByZWxlYXNlX3BpbnM6XG4gXHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMocGlucywgY291bnQpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0zODI0LDYgKzM4NTYsMTggQEAgc3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KVxuIFx0c3RydWN0IGljZV9kcGxsICpkZSA9IFx1MDAyNmQtXHUwMDNlZWVjO1xuIFx0c3RydWN0IGljZV9kcGxsICpkcCA9IFx1MDAyNmQtXHUwMDNlcHBzO1xuIFxuK1x0aWYgKGQtXHUwMDNldW5tYW5hZ2VkKSB7XG4rXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhkcC1cdTAwM2VkcGxsLCBpbnB1dHMsXG4rXHRcdFx0XHRcdCBcdTAwMjZpY2VfZHBsbF9pbnB1dF91bm1hbmFnZWRfb3BzLFxuK1x0XHRcdFx0XHQgbnVtX2lucHV0cyk7XG4rXHRcdGljZV9kcGxsX3VucmVnaXN0ZXJfcGlucyhkcC1cdTAwM2VkcGxsLCBvdXRwdXRzLFxuK1x0XHRcdFx0XHQgXHUwMDI2aWNlX2RwbGxfb3V0cHV0X3VubWFuYWdlZF9vcHMsXG4rXHRcdFx0XHRcdCBudW1fb3V0cHV0cyk7XG4rXHRcdGljZV9kcGxsX3JlbGVhc2VfcGlucyhpbnB1dHMsIG51bV9pbnB1dHMpO1xuK1x0XHRpY2VfZHBsbF9yZWxlYXNlX3BpbnMob3V0cHV0cywgbnVtX291dHB1dHMpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRpY2VfZHBsbF9kZWluaXRfcmNsa19waW4ocGYpO1xuIFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KSB7XG4gXHRcdGljZV9kcGxsX2RlaW5pdF90eGNsa19waW5zKHBmKTtcbkBAIC00MDgyLDIzICs0MTI2LDI5IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbiBcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKmlucHV0X29wcztcbiBcdGludCByZXQsIGNvdW50O1xuIFxuLVx0aW5wdXRfb3BzID0gXHUwMDI2aWNlX2RwbGxfaW5wdXRfb3BzO1xuLVx0b3V0cHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX291dHB1dF9vcHM7XG4rXHRpZiAoIXBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuK1x0XHRpbnB1dF9vcHMgPSBcdTAwMjZpY2VfZHBsbF9pbnB1dF9vcHM7XG4rXHRcdG91dHB1dF9vcHMgPSBcdTAwMjZpY2VfZHBsbF9vdXRwdXRfb3BzO1xuK1x0fSBlbHNlIHtcbitcdFx0aW5wdXRfb3BzID0gXHUwMDI2aWNlX2RwbGxfaW5wdXRfdW5tYW5hZ2VkX29wcztcbitcdFx0b3V0cHV0X29wcyA9IFx1MDAyNmljZV9kcGxsX291dHB1dF91bm1hbmFnZWRfb3BzO1xuK1x0fVxuIFxuIFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cdTAwM2VkcGxscy5pbnB1dHMsIDAsXG4gXHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLm51bV9pbnB1dHMsIGlucHV0X29wcyxcbi1cdFx0XHRcdFx0cGYtXHUwMDNlZHBsbHMuZWVjLmRwbGwsXG4tXHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcbitcdFx0XHRcdFx0cGYtXHUwMDNlZHBsbHMuZWVjLmRwbGwsIHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXHRjb3VudCA9IHBmLVx1MDAzZWRwbGxzLm51bV9pbnB1dHM7XG4tXHRpZiAoY2d1KSB7XG4rXHRpZiAoY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLm91dHB1dHMsXG4gXHRcdFx0XHRcdFx0Y291bnQsIHBmLVx1MDAzZWRwbGxzLm51bV9vdXRwdXRzLFxuIFx0XHRcdFx0XHRcdG91dHB1dF9vcHMsIHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsLFxuIFx0XHRcdFx0XHRcdHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIGRlaW5pdF9pbnB1dHM7XG4rXHRcdGlmIChwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGNvdW50ICs9IHBmLVx1MDAzZWRwbGxzLm51bV9vdXRwdXRzO1xuIFx0XHRpZiAoIXBmLVx1MDAzZWRwbGxzLmdlbmVyaWMpIHtcbiBcdFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLnNtYSxcbkBAIC00MjA2LDEyICs0MjU2LDEzIEBAIGljZV9kcGxsX2luaXRfZHBsbChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsICpkLCBib29sIGNndSxcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcdGQtXHUwMDNlcGYgPSBwZjtcbi1cdGlmIChjZ3UgfHwgcGYtXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcbitcdGlmIChjZ3UgfHwgcGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkIHx8XG4rXHQgICAgcGYtXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzID0gXHUwMDI2aWNlX2RwbGxfb3BzO1xuIFxuIFx0XHRpZiAodHlwZSA9PSBEUExMX1RZUEVfUFBTIFx1MDAyNlx1MDAyNiBpY2VfZHBsbF9pc19wcHNfcGhhc2VfbW9uaXRvcihwZikpXG4gXHRcdFx0b3BzID0gIFx1MDAyNmljZV9kcGxsX3BvbV9vcHM7XG4tXHRcdGlmIChjZ3UpXG4rXHRcdGlmIChjZ3UgXHUwMDI2XHUwMDI2ICFwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpXG4gXHRcdFx0aWNlX2RwbGxfdXBkYXRlX3N0YXRlKHBmLCBkLCB0cnVlKTtcbiBcdFx0cmV0ID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoZC1cdTAwM2VkcGxsLCB0eXBlLCBvcHMsIGQpO1xuIFx0XHRpZiAocmV0KSB7XG5AQCAtNDIzOSw2ICs0MjkwLDMzIEBAIHN0YXRpYyB2b2lkIGljZV9kcGxsX2RlaW5pdF93b3JrZXIoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRrdGhyZWFkX2Rlc3Ryb3lfd29ya2VyKGQtXHUwMDNla3dvcmtlcik7XG4gfVxuIFxuKy8qKlxuKyAqIGljZV9kcGxsX3Bpbl9mcmVxX2luZm8gLSBmaW5kIHBpbiBmcmVxdWVuY3kgZnJvbSBzdXBwb3J0ZWQgb25lc1xuKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG4rICogQHBpbl9pZHg6IHBpbiBpbmRleFxuKyAqIEBpbnB1dDogaWYgaW5wdXQgcGluXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRocm91Z2ggdGhlIGFycmF5IG9mIHN1cHBvcnRlZCBmcmVxdWVuY2llcyBmb3IgYVxuKyAqIERQTEwgcGluIGFuZCByZXR1cm5zIHNpbmdsZSBmcmVxdWVuY3kgcGluIGlzIGNhcGFibGUsIGlmIHBpbiBzdXBwb3J0IG9ubHlcbisgKiBvbmUgZnJlcXVlbmN5LiBTaGFsbCBiZSB1c2VkIG9ubHkgZm9yIGRwbGwgd2l0aCBkcml2ZXIgaGFyZGNvZGVkIGZyZXF1ZW5jeS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgLSBmYWlsdXJlLCBwaW4gdXNlcyBtdWx0aXBsZSBmcmVxdWVuY2llcyxcbisgKiAqIGZyZXF1ZW5jeSAtIHN1Y2Nlc3MuXG4rICovXG4rc3RhdGljIHU2NCBpY2VfZHBsbF9waW5fZnJlcV9pbmZvKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwaW5faWR4LCBib29sIGlucHV0KVxuK3tcbitcdHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgKmZyZXFzO1xuK1x0dTggZnJlcV9udW07XG4rXG4rXHQvKiBHZXQgc3VwcG9ydGVkIGZyZXF1ZW5jaWVzIGZvciB0aGlzIHBpbiAqL1xuK1x0ZnJlcXMgPSBpY2VfY2d1X2dldF9waW5fZnJlcV9zdXBwKGh3LCBwaW5faWR4LCBpbnB1dCwgXHUwMDI2ZnJlcV9udW0pO1xuK1x0aWYgKCFmcmVxcyB8fCBmcmVxX251bSAhPSAxIHx8IGZyZXFzWzBdLm1pbiAhPSBmcmVxc1swXS5tYXgpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGZyZXFzWzBdLm1pbjtcbit9XG4rXG4gLyoqXG4gICogaWNlX2RwbGxfaW5pdF93b3JrZXIgLSBJbml0aWFsaXplIERQTExzIHBlcmlvZGljIHdvcmtlclxuICAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC00Mzk4LDYgKzQ0NzYsMTkgQEAgaWNlX2RwbGxfaW5pdF9pbmZvX2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRwaW5zW2ldLnByb3AuYm9hcmRfbGFiZWwgPSBpY2VfY2d1X2dldF9waW5fbmFtZShodywgaSwgaW5wdXQpO1xuIFx0XHRwaW5zW2ldLnByb3AudHlwZSA9IGljZV9jZ3VfZ2V0X3Bpbl90eXBlKGh3LCBpLCBpbnB1dCk7XG4gXHRcdGlmIChpbnB1dCkge1xuK1x0XHRcdGlmIChwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpIHtcbitcdFx0XHRcdHBpbnNbaV0uZnJlcSA9IGljZV9kcGxsX3Bpbl9mcmVxX2luZm8oaHcsIGksXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgIGlucHV0KTtcbitcdFx0XHRcdHBpbnNbaV0uc3RhdGVbMF0gPSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XG4rXHRcdFx0XHRwaW5zW2ldLnN0YXR1cyA9XG4rXHRcdFx0XHRcdElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfU1RBVFVTX0VTWU5DX0NBUDtcbitcdFx0XHRcdHBpbnNbaV0uZmxhZ3NbMF0gPSBJQ0VfRFBMTF9JTl9FU1lOQ19FTkFCTEVEO1xuK1x0XHRcdFx0Lyogc2tpcCBwcmlvcml0eSwgY2FwYWJpbGl0aWVzLCBwaGFzZSByYW5nZSxcbitcdFx0XHRcdCAqIHBpbiBzdGF0ZSBBUSBxdWVyeSBhbmQgZnJlcV9zdXBwb3J0ZWQgLVxuK1x0XHRcdFx0ICogbm90IGF2YWlsYWJsZSBmb3IgdW5tYW5hZ2VkIERQTExcbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0fVxuIFx0XHRcdHJldCA9IGljZV9hcV9nZXRfY2d1X3JlZl9wcmlvKGh3LCBkZS1cdTAwM2VkcGxsX2lkeCwgaSxcbiBcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZkZS1cdTAwM2VpbnB1dF9wcmlvW2ldKTtcbiBcdFx0XHRpZiAocmV0KVxuQEAgLTQ0MTEsNiArNDUwMiwxNiBAQCBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsXG4gXHRcdFx0aWYgKGljZV9kcGxsX2lzX3N3X3BpbihwZiwgaSwgdHJ1ZSkpXG4gXHRcdFx0XHRwaW5zW2ldLmhpZGRlbiA9IHRydWU7XG4gXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuK1x0XHRcdFx0cGluc1tpXS5mcmVxID0gaWNlX2RwbGxfcGluX2ZyZXFfaW5mbyhodywgaSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgaW5wdXQpO1xuK1x0XHRcdFx0cGluc1tpXS5zdGF0ZVswXSA9IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcbitcdFx0XHRcdC8qIHNraXAgb3V0cHV0IHN0YXRlIGNhcHMsIHBoYXNlIHJhbmdlLFxuK1x0XHRcdFx0ICogcGluIHN0YXRlIEFRIHF1ZXJ5IGFuZCBmcmVxX3N1cHBvcnRlZCAtXG4rXHRcdFx0XHQgKiBub3QgYXZhaWxhYmxlIGZvciB1bm1hbmFnZWQgRFBMTFxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4gXHRcdFx0cmV0ID0gaWNlX2NndV9nZXRfb3V0cHV0X3Bpbl9zdGF0ZV9jYXBzKGh3LCBpLCBcdTAwMjZjYXBzKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbkBAIC00NDI4LDEwICs0NTI5LDEzIEBAIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcbiBcdFx0cGluc1tpXS5wcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07XG4gXHRcdHBpbnNbaV0ucGYgPSBwZjtcbiBcdH1cbi1cdGlmIChpbnB1dClcbitcdGlmIChpbnB1dCBcdTAwMjZcdTAwMjYgIXBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X3JlZl9zeW5jX2lucHV0cyhwZik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtNDcxMiw2ICs0ODE2LDgyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogaWNlX2RwbGxfbG9ja19zdGF0ZV9pbml0X3VubWFuYWdlZCAtIGluaXRpYWxpemUgbG9jayBzdGF0ZSBmb3IgdW5tYW5hZ2VkIGRwbGxcbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4rICpcbisgKiBJbml0aWFsaXplIHRoZSBsb2NrIHN0YXRlIGZvciB1bm1hbmFnZWQgRFBMTCBieSBjaGVja2luZyBoZWFsdGggc3RhdHVzLlxuKyAqIEZvciB1bm1hbmFnZWQgRFBMTCwgd2UgcmVseSBvbiBoYXJkd2FyZSBhdXRvbm9tb3VzIG9wZXJhdGlvbi5cbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgLSBzdWNjZXNzXG4rICogKiBuZWdhdGl2ZSAtIGluaXQgZmFpbHVyZSByZWFzb25cbisgKi9cbitzdGF0aWMgaW50IGljZV9kcGxsX2xvY2tfc3RhdGVfaW5pdF91bm1hbmFnZWQoc3RydWN0IGljZV9wZiAqcGYpXG4re1xuK1x0dTE2IGNvZGUgPSBJQ0VfQVFDX0hFQUxUSF9TVEFUVVNfSU5GT19MT1NTX09GX0xPQ0s7XG4rXHRzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gYnVmZjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBpY2VfZ2V0X2xhc3RfaGVhbHRoX3N0YXR1c19jb2RlKFx1MDAyNnBmLVx1MDAzZWh3LCBcdTAwMjZidWZmLCBjb2RlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQocGYsIFx1MDAyNmJ1ZmYsIGZhbHNlKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIGljZV9kcGxsX2luaXRfaW5mb191bm1hbmFnZWQgLSBpbml0IGRwbGwgaW5mb3JtYXRpb24gZm9yIHVubWFuYWdlZCBkcGxsXG4rICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuKyAqXG4rICogQWNxdWlyZSAoZnJvbSBIVykgYW5kIHNldCBiYXNpYyBkcGxsIGluZm9ybWF0aW9uIChvbiBwZi1cdTAwM2VkcGxscyBzdHJ1Y3QpLlxuKyAqIEZvciB1bm1hbmFnZWQgZHBsbCBtb2RlLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAtIHN1Y2Nlc3NcbisgKiAqIG5lZ2F0aXZlIC0gaW5pdCBmYWlsdXJlIHJlYXNvblxuKyAqL1xuK3N0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZilcbit7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxzICpkID0gXHUwMDI2cGYtXHUwMDNlZHBsbHM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZC1cdTAwM2VjbG9ja19pZCA9IGljZV9nZW5lcmF0ZV9jbG9ja19pZChwZik7XG4rXHRkLVx1MDAzZW51bV9pbnB1dHMgPSBpY2VfY2d1X2dldF9waW5fbnVtKFx1MDAyNnBmLVx1MDAzZWh3LCB0cnVlKTtcbitcdGQtXHUwMDNlbnVtX291dHB1dHMgPSBpY2VfY2d1X2dldF9waW5fbnVtKFx1MDAyNnBmLVx1MDAzZWh3LCBmYWxzZSk7XG4rXHRyZXQgPSBpY2VfZHBsbF9sb2NrX3N0YXRlX2luaXRfdW5tYW5hZ2VkKHBmKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRkLVx1MDAzZWlucHV0cyA9IGt6YWxsb2Nfb2JqcygqZC1cdTAwM2VpbnB1dHMsIGQtXHUwMDNlbnVtX2lucHV0cyk7XG4rXHRpZiAoIWQtXHUwMDNlaW5wdXRzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGRlaW5pdF9pbmZvO1xuK1xuK1x0ZC1cdTAwM2VvdXRwdXRzID0ga3phbGxvY19vYmpzKCpkLVx1MDAzZW91dHB1dHMsIGQtXHUwMDNlbnVtX291dHB1dHMpO1xuK1x0aWYgKCFkLVx1MDAzZW91dHB1dHMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBkZWluaXRfaW5mbztcbitcdH1cbitcbitcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBkZWluaXRfaW5mbztcbitcbitcdGQtXHUwMDNlcHBzLm1vZGUgPSBEUExMX01PREVfTUFOVUFMO1xuK1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCIlcyAtIHN1Y2Nlc3MsIGlucHV0czoldSwgb3V0cHV0czoldVxcblwiLFxuK1x0XHRfX2Z1bmNfXywgZC1cdTAwM2VudW1faW5wdXRzLCBkLVx1MDAzZW51bV9vdXRwdXRzKTtcbitcdHJldHVybiAwO1xuK2RlaW5pdF9pbmZvOlxuK1x0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCIlcyAtIGZhaWw6IGQtXHUwMDNlaW5wdXRzOiVwLCBkLVx1MDAzZW91dHB1dHM6JXBcXG5cIixcbitcdFx0X19mdW5jX18sIGQtXHUwMDNlaW5wdXRzLCBkLVx1MDAzZW91dHB1dHMpO1xuK1x0aWNlX2RwbGxfZGVpbml0X2luZm8ocGYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogaWNlX2RwbGxfaW5pdF9pbmZvIC0gcHJlcGFyZSBwZidzIGRwbGwgaW5mb3JtYXRpb24gc3RydWN0dXJlXG4gICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuQEAgLTQ4MTUsNiArNDk5NSw0MiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBpY2VfZHBsbF9sb2NrX3N0YXRlX3NldF91bm1hbmFnZWQgLSBkZXRlcm1pbmUgbG9jayBzdGF0ZSBmcm9tIGhlYWx0aCBzdGF0dXNcbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4rICogQGJ1ZmY6IGhlYWx0aCBzdGF0dXMgYnVmZmVyXG4rICogQG5vdGlmeTogaWYgdHJ1ZSwgbm90aWZ5IGRwbGwgZGV2aWNlXG4rICpcbisgKiBTZXQgdW5tYW5hZ2VkIGRwbGwgbG9jayBzdGF0ZSBiYXNlZCBvbiBoZWFsdGggc3RhdHVzIGNvZGUgYW5kIGludGVybmFsIGRhdGEuXG4rICogQ29udGV4dDogQWNxdWlyZXMgYW5kIHJlbGVhc2VzIHBmLVx1MDAzZWRwbGxzLmxvY2sgKG11c3QgcmVsZWFzZSBiZWZvcmUgbm90aWZ5XG4rICogaWYgY2FsbGVkKS5cbisgKi9cbit2b2lkIGljZV9kcGxsX2xvY2tfc3RhdGVfc2V0X3VubWFuYWdlZChzdHJ1Y3QgaWNlX3BmICpwZixcbitcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsXG4rXHRcdFx0XHQgICAgICAgYm9vbCBub3RpZnkpXG4re1xuK1x0dTMyIGludGVybmFsX2RhdGEgPSBsZTMyX3RvX2NwdShidWZmLVx1MDAzZWludGVybmFsX2RhdGExKTtcbitcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcztcbitcbitcdGlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuK1x0aWYgKGJ1ZmYtXHUwMDNlaGVhbHRoX3N0YXR1c19jb2RlID09IDAgfHxcbitcdCAgICBpbnRlcm5hbF9kYXRhID09IElDRV9EUExMX0hFQUxUSF9TVEFUVVNfTE9DS0VEKVxuK1x0XHRkLVx1MDAzZWRwbGxfc3RhdGUgPSBEUExMX0xPQ0tfU1RBVFVTX0xPQ0tFRDtcbitcdGVsc2VcbitcdFx0ZC1cdTAwM2VkcGxsX3N0YXRlID0gRFBMTF9MT0NLX1NUQVRVU19VTkxPQ0tFRDtcbitcbitcdGlmIChkLVx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9PSBkLVx1MDAzZWRwbGxfc3RhdGUpXG4rXHRcdG5vdGlmeSA9IGZhbHNlO1xuK1x0ZWxzZVxuK1x0XHRkLVx1MDAzZXByZXZfZHBsbF9zdGF0ZSA9IGQtXHUwMDNlZHBsbF9zdGF0ZTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbitcdGlmIChub3RpZnkgXHUwMDI2XHUwMDI2IGQtXHUwMDNlZHBsbClcbitcdFx0ZHBsbF9kZXZpY2VfY2hhbmdlX250ZihkLVx1MDAzZWRwbGwpO1xuK31cbitcbiAvKipcbiAgKiBpY2VfZHBsbF9kZWluaXQgLSBEaXNhYmxlIHRoZSBkcml2ZXIvSFcgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbiAgKiB0aGUgZHBsbCBkZXZpY2UuXG5AQCAtNDg1NCw5ICs1MDcwLDEwIEBAIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxuIFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnBmLVx1MDAzZWRwbGxzLnR4Y2xrX3dvcmspO1xuIFxuLVx0aWNlX2RwbGxfZGVpbml0X3BpbnMocGYsIGNndSk7XG4rXHRpY2VfZHBsbF9kZWluaXRfcGlucyhwZiwgY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XG4gXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsKSlcbi1cdFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcywgY2d1KTtcbitcdFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcyxcbitcdFx0XHRcdCAgICAgY2d1IHx8IHBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XG4gXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsKSlcbiBcdFx0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLmVlYywgY2d1KTtcbiBcdGlmICghSVNfRVJSX09SX05VTEwocGYtXHUwMDNlZHBsbHMudHhjLmRwbGwpKVxuQEAgLTQ4NjYsNiArNTA4Myw0NSBAQCB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gfVxuIFxuKy8qKlxuKyAqIGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkIC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciB1bm1hbmFnZWQgZHBsbCBzdWJzeXN0ZW1cbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4rICpcbisgKiBTZXQgdXAgdGhlIGRldmljZSBkcGxscyBmb3IgdW5tYW5hZ2VkIG1vZGUsIHJlZ2lzdGVyIHRoZW0gYW5kIHBpbnMgY29ubmVjdGVkXG4rICogd2l0aGluIExpbnV4IGRwbGwgc3Vic3lzdGVtLiBBbGxvdyB1c2Vyc3BhY2UgdG8gb2J0YWluIHN0YXRlIG9mIERQTEwuXG4rICpcbisgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi1cdTAwM2VkcGxscy5sb2NrIG11dGV4LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmKVxuK3tcbitcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcdTAwMjZwZi1cdTAwM2VkcGxscztcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWljZV9wZl9zcmNfdG1yX293bmVkKHBmKSlcbitcdFx0cmV0dXJuO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkLVx1MDAzZWxvY2spO1xuK1x0ZXJyID0gaWNlX2RwbGxfaW5pdF9pbmZvX3VubWFuYWdlZChwZik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9leGl0O1xuK1x0ZXJyID0gaWNlX2RwbGxfaW5pdF9kcGxsKHBmLCBcdTAwMjZwZi1cdTAwM2VkcGxscy5wcHMsIHRydWUsIERQTExfVFlQRV9QUFMpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBkZWluaXRfaW5mbztcbitcdGVyciA9IGljZV9kcGxsX2luaXRfcGlucyhwZiwgdHJ1ZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGRlaW5pdF9wcHM7XG4rXHRzZXRfYml0KElDRV9GTEFHX0RQTEwsIHBmLVx1MDAzZWZsYWdzKTtcbitcbitcdHJldHVybjtcbitcbitkZWluaXRfcHBzOlxuK1x0aWNlX2RwbGxfZGVpbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcywgdHJ1ZSk7XG4rZGVpbml0X2luZm86XG4rXHRpY2VfZHBsbF9kZWluaXRfaW5mbyhwZik7XG4rZXJyX2V4aXQ6XG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNmQtXHUwMDNlbG9jayk7XG4rXHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXCJEUExMcyBpbml0IGZhaWx1cmUgZXJyOiVkXFxuXCIsIGVycik7XG4rfVxuK1xuIC8qKlxuICAqIGljZV9kcGxsX2luaXRfZTgyNSAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbiAgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG5AQCAtNDk3NSw4ICs1MjMxLDIzIEBAIHN0YXRpYyB2b2lkIGljZV9kcGxsX2luaXRfZTgxMChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcIkRQTExzIGluaXQgZmFpbHVyZSBlcnI6JWRcXG5cIiwgZXJyKTtcbiB9XG4gXG4rLyoqXG4rICogaWNlX2RwbGxfaW5pdCAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbisgKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4rICpcbisgKiBTZXQgdXAgdGhlIGRldmljZSBkcGxscywgcmVnaXN0ZXIgdGhlbSBhbmQgcGlucyBjb25uZWN0ZWQgd2l0aGluIExpbnV4IGRwbGxcbisgKiBzdWJzeXN0ZW0uIEFsbG93IHVzZXJzcGFjZSB0byBvYnRhaW4gc3RhdGUgb2YgRFBMTCBhbmQgaGFuZGxpbmcgb2YgRFBMTFxuKyAqIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuXG4rICpcbisgKiBDb250ZXh0OiBJbml0aWFsaXplcyBwZi1cdTAwM2VkcGxscy5sb2NrIG11dGV4LlxuKyAqL1xuIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4rXHRpZiAocGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkKSB7XG4rXHRcdGljZV9kcGxsX2luaXRfdW5tYW5hZ2VkKHBmKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChwZi1cdTAwM2Vody5tYWNfdHlwZSkge1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcbiBcdFx0aWNlX2RwbGxfaW5pdF9lODI1KHBmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5pbmRleCAxMDNiYTNlNDkwNjgyLi5jNTlkNzQ2YTg1NjcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5AQCAtMjYsNiArMjYsOCBAQFxuICNkZWZpbmUgSUNFX0NHVV9SMTFfU1lOQ0VfU19CWVBfQ0xLXHRHRU5NQVNLKDYsIDEpXG4gXG4gI2RlZmluZSBJQ0VfQ0dVX0JZUEFTU19NVVhfT0ZGU0VUX0U4MjVDXHQzXG4rI2RlZmluZSBJQ0VfRFBMTF9VTk1BTkFHRURfUElOX05VTVx0NFxuKyNkZWZpbmUgSUNFX0RQTExfSU5fRVNZTkNfRU5BQkxFRFx0SUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0VTWU5DX0VOXG4gXG4gLyoqXG4gICogZW51bSBpY2VfZHBsbF9waW5fc3cgLSBlbnVtZXJhdGUgaWNlIHNvZnR3YXJlIHBpbiBpbmRpY2VzOlxuQEAgLTE5Myw2ICsxOTUsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxzIHtcbiBcdHMzMiBvdXRwdXRfcGhhc2VfYWRqX21heDtcbiBcdHUzMiBwZXJpb2RpY19jb3VudGVyO1xuIFx0Ym9vbCBnZW5lcmljO1xuK1x0Ym9vbCB1bm1hbmFnZWQ7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhjbGtfd29yaztcbiBcdGJvb2wgdHhjbGtfc3dpdGNoX3JlcXVlc3RlZDtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmUgdHhjbGtfbm90aWZ5X3J3c2VtO1xuQEAgLTIwMSw5ICsyMDQsMTYgQEAgc3RydWN0IGljZV9kcGxscyB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BUUF8xNTg4X0NMT0NLKVxuIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpO1xuK3ZvaWQgaWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpY2VfYXFjX2hlYWx0aF9zdGF0dXNfZWxlbSAqYnVmZixcbitcdFx0XHRcdCAgICAgICBib29sIG5vdGlmeSk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkXG4raWNlX2RwbGxfbG9ja19zdGF0ZV9zZXRfdW5tYW5hZ2VkKHN0cnVjdCBpY2VfcGYgKnBmLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWNlX2FxY19oZWFsdGhfc3RhdHVzX2VsZW0gKmJ1ZmYsXG4rXHRcdFx0XHQgIGJvb2wgbm90aWZ5KSB7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuaW5kZXggOGNkYzRmZGE4OWU5Ny4uZmM5ZDRlMGZhNzU1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbkBAIC0xNDE1LDYgKzE0MTUsMTAgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3JpbmdzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRcdFx0c2V0X2JpdChJQ0VfVFhfUklOR19GTEFHU19WTEFOX0wyVEFHMiwgcmluZy1cdTAwM2VmbGFncyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLCByaW5nLVx1MDAzZWZsYWdzKTtcbitcbitcdFx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcbitcdFx0XHRzZXRfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgcmluZy1cdTAwM2VmbGFncyk7XG4rXG4gXHRcdFdSSVRFX09OQ0UodnNpLVx1MDAzZXR4X3JpbmdzW2ldLCByaW5nKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi5mZWZiYzUxYzcxOTAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzQyOCw3ICszNDI4LDcgQEAgc3RhdGljIGludCBpY2VfcmVxX2lycV9tc2l4X21pc2Moc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdCAgICAgKChwZi1cdTAwM2VsbF90c19pcnEuaW5kZXggKyBwZl9pbnRyX3N0YXJ0X29mZnNldCkgXHUwMDI2XG4gXHRcdCAgICAgIFBGSU5UX1NCX0NUTF9NU0lYX0lORFhfTSkgfCBQRklOVF9TQl9DVExfQ0FVU0VfRU5BX00pO1xuIFx0d3IzMihodywgR0xJTlRfSVRSKElDRV9SWF9JVFIsIHBmLVx1MDAzZW9pY3JfaXJxLmluZGV4KSxcbi1cdCAgICAgSVRSX1JFR19BTElHTihJQ0VfSVRSXzhLKSBcdTAwM2VcdTAwM2UgSUNFX0lUUl9HUkFOX1MpO1xuK1x0ICAgICBJVFJfUkVHX0FMSUdOKElDRV9JVFJfMjBLKSBcdTAwM2VcdTAwM2UgSUNFX0lUUl9HUkFOX1MpO1xuIFxuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xuQEAgLTM0OTEsOSArMzQ5MSw4IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0XHRORVRJRl9GX1JYSEFTSDtcbiBcbiBcdGNzdW1vX2ZlYXR1cmVzID0gTkVUSUZfRl9SWENTVU1cdCAgfFxuLVx0XHRcdCBORVRJRl9GX0lQX0NTVU0gIHxcbiBcdFx0XHQgTkVUSUZfRl9TQ1RQX0NSQyB8XG4tXHRcdFx0IE5FVElGX0ZfSVBWNl9DU1VNO1xuK1x0XHRcdCBORVRJRl9GX0hXX0NTVU07XG4gXG4gXHR2bGFub19mZWF0dXJlcyA9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUiB8XG4gXHRcdFx0IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYICAgICB8XG5AQCAtMzU1NSwxMiArMzU1NCw2IEBAIHZvaWQgaWNlX3NldF9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdC8qIEFsbG93IGNvcmUgdG8gbWFuYWdlIElSUXMgYWZmaW5pdHkgKi9cbiBcdG5ldGlmX3NldF9hZmZpbml0eV9hdXRvKG5ldGRldik7XG4gXG4tXHQvKiBNdXR1YWwgZXhjbHVzaXZpdHkgZm9yIFRTTyBhbmQgR0NTIGlzIGVuZm9yY2VkIGJ5IHRoZSBzZXQgZmVhdHVyZXNcbi1cdCAqIG5kbyBjYWxsYmFjay5cbi1cdCAqL1xuLVx0aWYgKGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfR0NTKSlcbi1cdFx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTtcbi1cbiBcdG5ldGlmX3NldF90c29fbWF4X3NpemUobmV0ZGV2LCBJQ0VfTUFYX1RTT19TSVpFKTtcbiB9XG4gXG5AQCAtNDcyMCw3ICs0NzEzLDkgQEAgdm9pZCBpY2VfZGVpbml0X2RldihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBzdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4rXHR1MTYgY29kZSA9IElDRV9BUUNfSEVBTFRIX1NUQVRVU19JTkZPX0xPU1NfT0ZfTE9DSztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpO1xuK1x0aW50IGVycjtcbiBcbiBcdGlmIChpY2VfaXNfc2FmZV9tb2RlKHBmKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ3MzIsOCArNDcyNywxNSBAQCBzdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dOU1MpKVxuIFx0XHRpY2VfZ25zc19pbml0KHBmKTtcbiBcbitcdC8qIEluaXRpYWxpemUgdW5tYW5hZ2VkIERQTEwgZGV0ZWN0aW9uICovXG4rXHRlcnIgPSBpY2VfaXNfaGVhbHRoX3N0YXR1c19jb2RlX3N1cHBvcnRlZChcdTAwMjZwZi1cdTAwM2VodywgY29kZSxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnVubWFuYWdlZCk7XG4rXHRpZiAoZXJyIHx8ICFpY2VfaXNfdW5tYW5hZ2VkX2NndV9pbl9uZXRsaXN0KFx1MDAyNnBmLVx1MDAzZWh3KSlcbitcdFx0cGYtXHUwMDNlZHBsbHMudW5tYW5hZ2VkID0gZmFsc2U7XG4rXG4gXHRpZiAoaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9DR1UpIHx8XG4tXHQgICAgaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9QSFlfUkNMSykpXG4rXHQgICAgaWNlX2lzX2ZlYXR1cmVfc3VwcG9ydGVkKHBmLCBJQ0VfRl9QSFlfUkNMSykgfHxcbitcdCAgICBwZi1cdTAwM2VkcGxscy51bm1hbmFnZWQpXG4gXHRcdGljZV9kcGxsX2luaXQocGYpO1xuIFxuIFx0LyogTm90ZTogRmxvdyBkaXJlY3RvciBpbml0IGZhaWx1cmUgaXMgbm9uLWZhdGFsIHRvIGxvYWQgKi9cbkBAIC02NTEwLDE4ICs2NTEyLDYgQEAgaWNlX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxuIFx0XHRyZXQgPSBpY2Vfc2V0X2xvb3BiYWNrKHZzaSwgISEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTE9PUEJBQ0spKTtcbiBcbi1cdC8qIER1ZSB0byBFODMwIGhhcmR3YXJlIGxpbWl0YXRpb25zLCBUU08gKE5FVElGX0ZfQUxMX1RTTykgd2l0aCBHQ1Ncbi1cdCAqIChORVRJRl9GX0hXX0NTVU0pIGlzIG5vdCBzdXBwb3J0ZWQuXG4tXHQgKi9cbi1cdGlmIChpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX0dDUykgXHUwMDI2XHUwMDI2XG4tXHQgICAgKChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19DU1VNKSBcdTAwMjZcdTAwMjYgKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0FMTF9UU08pKSkge1xuLVx0XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pXG4tXHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCJUbyBlbmFibGUgVFNPLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIEhXIGNoZWNrc3VtLlxcblwiKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwiVG8gZW5hYmxlIEhXIGNoZWNrc3VtLCB5b3UgbXVzdCBmaXJzdCBkaXNhYmxlIFRTTy5cXG5cIik7XG4tXHRcdHJldHVybiAtRUlPO1xuLVx0fVxuLVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbmluZGV4IGVhZWMzNmFiNmFlM2YuLmU4MzkyZWM0ZjEzNDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5AQCAtMjMyNyw2ICsyMzI3LDggQEAgdTY0IGljZV9wdHBfZ2V0X3J4X2h3dHMoY29uc3QgdW5pb24gaWNlXzMyYl9yeF9mbGV4X2Rlc2MgKnJ4X2Rlc2MsXG4gXHR0c19oaWdoID0gbGUzMl90b19jcHUocnhfZGVzYy1cdTAwM2V3Yi5mbGV4X3RzLnRzX2hpZ2gpO1xuIFx0dHNfbnMgPSBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoY2FjaGVkX3RpbWUsIHRzX2hpZ2gpO1xuIFxuK1x0aWNlX3RyYWNlKHJ4X2h3dHN0YW1wLCBjYWNoZWRfdGltZSwgdHNfaGlnaCwgdHNfbnMpO1xuK1xuIFx0cmV0dXJuIHRzX25zO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuaW5kZXggOGU1Zjk3ODM1OTU0Yy4uZjkwNTEwNGY5NWQ4OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbkBAIC0yMCw2ICsyMCwxMCBAQCBzdGF0aWMgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeltdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZXzEwTUhaLFxuIH07XG4gXG4rc3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2NndV9waW5fZnJlcV8xNTZfMjVtaHpbXSA9IHtcbitcdERQTExfUElOX0ZSRVFVRU5DWV9SQU5HRSgxNTYyNTAwMDAsIDE1NjI1MDAwMCksXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jZ3VfcGluX2Rlc2MgaWNlX2U4MTB0X3NmcF9jZ3VfaW5wdXRzW10gPSB7XG4gXHR7IFwiQ1ZMLVNEUDIyXCIsXHQgIFpMX1JFRjBQLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxuIFx0XHRBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfY29tbW9uKSwgaWNlX2NndV9waW5fZnJlcV9jb21tb24gfSxcbkBAIC0xMzEsNiArMTM1LDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2NndV9waW5fZGVzYyBpY2VfZTgyM196bF9jZ3Vfb3V0cHV0c1tdID0ge1xuIFx0eyBcIk5PTkVcIixcdCAgIFpMX09VVDUsIDAsIDAgfSxcbiB9O1xuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2NndV9waW5fZGVzYyBpY2VfZTgzMF91bm1hbmFnZWRfaW5wdXRzW10gPSB7XG4rXHR7IFwiMTU4OC1USU1FX1NZTkNcIiwgMCwgRFBMTF9QSU5fVFlQRV9FWFQsXG4rXHQgIEFSUkFZX1NJWkUoaWNlX2NndV9waW5fZnJlcV8xMF9taHopLCBpY2VfY2d1X3Bpbl9mcmVxXzEwX21oeiB9LFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfY2d1X3Bpbl9kZXNjIGljZV9lODMwX3VubWFuYWdlZF9vdXRwdXRzW10gPSB7XG4rXHR7IFwiTUFDLVBIWS1DTEtcIiwgMCwgRFBMTF9QSU5fVFlQRV9TWU5DRV9FVEhfUE9SVCxcbitcdCAgQVJSQVlfU0laRShpY2VfY2d1X3Bpbl9mcmVxXzE1Nl8yNW1oeiksIGljZV9jZ3VfcGluX2ZyZXFfMTU2XzI1bWh6IH0sXG4rXHR7IFwiMTU4OC1USU1FX1JFRlwiLCAxLCBEUExMX1BJTl9UWVBFX0lOVF9PU0NJTExBVE9SLFxuK1x0ICBBUlJBWV9TSVpFKGljZV9jZ3VfcGluX2ZyZXFfMV9oeiksIGljZV9jZ3VfcGluX2ZyZXFfMV9oen0sXG4rfTtcbitcbiAvKiBMb3cgbGV2ZWwgZnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIGFuZCBtYW5hZ2luZyB0aGUgZGV2aWNlIGNsb2NrIHVzZWRcbiAgKiBmb3IgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sLlxuICAqXG5AQCAtNTk3OSw2ICs1OTk1LDI0IEBAIGljZV9jZ3VfZ2V0X3Bpbl9kZXNjKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0LCBpbnQgKnNpemUpXG4gXHRjYXNlIElDRV9ERVZfSURfRTgyM0NfU0dNSUk6XG4gXHRcdHQgPSBpY2VfY2d1X2dldF9waW5fZGVzY19lODIzKGh3LCBpbnB1dCwgc2l6ZSk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19CQUNLUExBTkU6XG4rXHRjYXNlIElDRV9ERVZfSURfRTgzMENDX1FTRlA1NjpcbitcdGNhc2UgSUNFX0RFVl9JRF9FODMwQ0NfU0ZQOlxuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDQ19TRlBfREQ6XG4rXHRjYXNlIElDRV9ERVZfSURfRTgzMENfQkFDS1BMQU5FOlxuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBDX1FTRlA6XG4rXHRjYXNlIElDRV9ERVZfSURfRTgzMENfU0ZQOlxuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBfWFhWX0JBQ0tQTEFORTpcbitcdGNhc2UgSUNFX0RFVl9JRF9FODMwX1hYVl9RU0ZQOlxuK1x0Y2FzZSBJQ0VfREVWX0lEX0U4MzBfWFhWX1NGUDpcbitcdFx0aWYgKGlucHV0KSB7XG4rXHRcdFx0dCA9IGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHM7XG4rXHRcdFx0KnNpemUgPSBBUlJBWV9TSVpFKGljZV9lODMwX3VubWFuYWdlZF9pbnB1dHMpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHQgPSBpY2VfZTgzMF91bm1hbmFnZWRfb3V0cHV0cztcbitcdFx0XHQqc2l6ZSA9IEFSUkFZX1NJWkUoaWNlX2U4MzBfdW5tYW5hZ2VkX291dHB1dHMpO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNjAwNSw2ICs2MDM5LDE4IEBAIGludCBpY2VfY2d1X2dldF9udW1fcGlucyhzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiBpY2VfY2d1X2dldF9waW5fbnVtIC0gZ2V0IHBpbiBkZXNjcmlwdGlvbiBhcnJheSBzaXplXG4rICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcbisgKiBAaW5wdXQ6IGlmIHJlcXVlc3QgaXMgZG9uZSBhZ2FpbnN0IGlucHV0IG9yIG91dHB1dCBwaW5zXG4rICpcbisgKiBSZXR1cm46IHNpemUgb2YgcGluIGRlc2NyaXB0aW9uIGFycmF5IGZvciBnaXZlbiBody5cbisgKi9cbitpbnQgaWNlX2NndV9nZXRfcGluX251bShzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBpbnB1dClcbit7XG4rXHRyZXR1cm4gaWNlX2NndV9nZXRfbnVtX3BpbnMoaHcsIGlucHV0KTtcbit9XG4rXG4gLyoqXG4gICogaWNlX2NndV9nZXRfcGluX3R5cGUgLSBnZXQgcGluJ3MgdHlwZVxuICAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmhcbmluZGV4IDE2YjE5ODhlOTkzZDIuLmZhMWU5MDhjZWJhYzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5oXG5AQCAtMzY0LDYgKzM2NCw3IEBAIGludCBpY2VfcmVhZF9zbWFfY3RybChzdHJ1Y3QgaWNlX2h3ICpodywgdTggKmRhdGEpO1xuIGludCBpY2Vfd3JpdGVfc21hX2N0cmwoc3RydWN0IGljZV9odyAqaHcsIHU4IGRhdGEpO1xuIGludCBpY2VfcHRwX3JlYWRfc2RwX2FjKHN0cnVjdCBpY2VfaHcgKmh3LCBfX2xlMTYgKmVudHJpZXMsIHVpbnQgKm51bV9lbnRyaWVzKTtcbiBpbnQgaWNlX2NndV9nZXRfbnVtX3BpbnMoc3RydWN0IGljZV9odyAqaHcsIGJvb2wgaW5wdXQpO1xuK2ludCBpY2VfY2d1X2dldF9waW5fbnVtKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGlucHV0KTtcbiBlbnVtIGRwbGxfcGluX3R5cGUgaWNlX2NndV9nZXRfcGluX3R5cGUoc3RydWN0IGljZV9odyAqaHcsIHU4IHBpbiwgYm9vbCBpbnB1dCk7XG4gc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSAqXG4gaWNlX2NndV9nZXRfcGluX2ZyZXFfc3VwcChzdHJ1Y3QgaWNlX2h3ICpodywgdTggcGluLCBib29sIGlucHV0LCB1OCAqbnVtKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guY1xuaW5kZXggNmE1ODc1YmQ5YzZiMS4uNGRhZWUyNTJlMmE2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmNcbkBAIC0yNjEyLDcgKzI2MTIsNiBAQCBpY2VfZmlsbF9zd19ydWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2ZsdHJfaW5mbyAqZl9pbmZvLFxuIFx0dTE2IHZsYW5faWQgPSBJQ0VfTUFYX1ZMQU5fSUQgKyAxO1xuIFx0dTE2IHZsYW5fdHBpZCA9IEVUSF9QXzgwMjFRO1xuIFx0dm9pZCAqZGFkZHIgPSBOVUxMO1xuLVx0dTE2IGV0aF9oZHJfc3o7XG4gXHR1OCAqZXRoX2hkcjtcbiBcdHUzMiBhY3QgPSAwO1xuIFx0X19iZTE2ICpvZmY7XG5AQCAtMjYyNSwxMSArMjYyNCwxMCBAQCBpY2VfZmlsbF9zd19ydWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2ZsdHJfaW5mbyAqZl9pbmZvLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRldGhfaGRyX3N6ID0gc2l6ZW9mKGR1bW15X2V0aF9oZWFkZXIpO1xuIFx0ZXRoX2hkciA9IHNfcnVsZS1cdTAwM2VoZHJfZGF0YTtcbiBcbiBcdC8qIGluaXRpYWxpemUgdGhlIGV0aGVyIGhlYWRlciB3aXRoIGEgZHVtbXkgaGVhZGVyICovXG4tXHRtZW1jcHkoZXRoX2hkciwgZHVtbXlfZXRoX2hlYWRlciwgZXRoX2hkcl9zeik7XG4rXHRpY2VfZmlsbF9ldGhfaGRyKGV0aF9oZHIpO1xuIFx0aWNlX2ZpbGxfc3dfaW5mbyhodywgZl9pbmZvKTtcbiBcbiBcdHN3aXRjaCAoZl9pbmZvLVx1MDAzZWZsdHJfYWN0KSB7XG5AQCAtMjczMCw3ICsyNzI4LDcgQEAgaWNlX2ZpbGxfc3dfcnVsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9mbHRyX2luZm8gKmZfaW5mbyxcbiBcbiBcdC8qIENyZWF0ZSB0aGUgc3dpdGNoIHJ1bGUgd2l0aCB0aGUgZmluYWwgZHVtbXkgRXRoZXJuZXQgaGVhZGVyICovXG4gXHRpZiAob3BjICE9IGljZV9hcWNfb3BjX3VwZGF0ZV9zd19ydWxlcylcbi1cdFx0c19ydWxlLVx1MDAzZWhkcl9sZW4gPSBjcHVfdG9fbGUxNihldGhfaGRyX3N6KTtcbitcdFx0c19ydWxlLVx1MDAzZWhkcl9sZW4gPSBjcHVfdG9fbGUxNihEVU1NWV9FVEhfSERSX0xFTik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdGNfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RjX2xpYi5jXG5pbmRleCBkMjAzNTdjMDQxMjczLi40NTYwZTU1YzhmOWM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90Y19saWIuY1xuQEAgLTE3NCw2ICsxNzQsNyBAQCBzdGF0aWMgdTE2IGljZV9jaGVja19zdXBwb3J0ZWRfdmxhbl90cGlkKHUxNiB2bGFuX3RwaWQpXG4gXHRjYXNlIEVUSF9QXzgwMjFROlxuIFx0Y2FzZSBFVEhfUF84MDIxQUQ6XG4gXHRjYXNlIEVUSF9QX1FJTlExOlxuK1x0Y2FzZSBFVEhfUF84MDIxQUg6XG4gXHRcdHJldHVybiB2bGFuX3RwaWQ7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcbmluZGV4IDRmMzVlZjhkNmIyOTkuLjNjYjhjNmVhMDNjZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3RyYWNlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHJhY2UuaFxuQEAgLTI0MSw2ICsyNDEsMjQgQEAgREVGSU5FX1RYX1RTVEFNUF9PUF9FVkVOVChpY2VfdHhfdHN0YW1wX2Z3X3JlcSk7XG4gREVGSU5FX1RYX1RTVEFNUF9PUF9FVkVOVChpY2VfdHhfdHN0YW1wX2Z3X2RvbmUpO1xuIERFRklORV9UWF9UU1RBTVBfT1BfRVZFTlQoaWNlX3R4X3RzdGFtcF9jb21wbGV0ZSk7XG4gXG4rLyogVHJhY2UgZXZlbnQgZm9yIFJ4IHRpbWVzdGFtcCAqL1xuK1RSQUNFX0VWRU5UKGljZV9yeF9od3RzdGFtcCxcbitcdCAgICBUUF9QUk9UTyh1NjQgY2FjaGVkX3RpbWUsIHUzMiB0c19oaWdoLCB1NjQgdHNfbnMpLFxuK1xuK1x0ICAgIFRQX0FSR1MoY2FjaGVkX3RpbWUsIHRzX2hpZ2gsIHRzX25zKSxcbitcbitcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KF9fZmllbGQodTY0LCBjYWNoZWRfdGltZSlcbitcdFx0XHQgICAgIF9fZmllbGQodTMyLCB0c19oaWdoKVxuK1x0XHRcdCAgICAgX19maWVsZCh1NjQsIHRzX25zKSksXG4rXG4rXHQgICAgVFBfZmFzdF9hc3NpZ24oX19lbnRyeS1cdTAwM2VjYWNoZWRfdGltZSA9IGNhY2hlZF90aW1lO1xuK1x0XHRcdCAgIF9fZW50cnktXHUwMDNldHNfaGlnaCA9IHRzX2hpZ2g7XG4rXHRcdFx0ICAgX19lbnRyeS1cdTAwM2V0c19ucyA9IHRzX25zOyksXG4rXG4rXHQgICAgVFBfcHJpbnRrKFwiY2FjaGVkX3RpbWU9JWxsdSB0c19oaWdoPSV1IHRzX25zPSVsbHVcIixcbitcdFx0ICAgICAgX19lbnRyeS1cdTAwM2VjYWNoZWRfdGltZSwgX19lbnRyeS1cdTAwM2V0c19oaWdoLCBfX2VudHJ5LVx1MDAzZXRzX25zKVxuKyk7XG4rXG4gREVDTEFSRV9FVkVOVF9DTEFTUyhpY2VfZXN3X2JyX2ZkYl90ZW1wbGF0ZSxcbiBcdFx0ICAgIFRQX1BST1RPKHN0cnVjdCBpY2VfZXN3X2JyX2ZkYl9lbnRyeSAqZmRiKSxcbiBcdFx0ICAgIFRQX0FSR1MoZmRiKSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG5pbmRleCAzMTMwM2FiNWJlMTc1Li40NzdjODZkOGM1M2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jXG5AQCAtMTczOSw3ICsxNzM5LDcgQEAgaW50IGljZV90eF9jc3VtKHN0cnVjdCBpY2VfdHhfYnVmICpmaXJzdCwgc3RydWN0IGljZV90eF9vZmZsb2FkX3BhcmFtcyAqb2ZmKVxuIFx0bDNfbGVuID0gbDQuaGRyIC0gaXAuaGRyO1xuIFx0b2Zmc2V0IHw9IChsM19sZW4gLyA0KSBcdTAwM2NcdTAwM2MgSUNFX1RYX0RFU0NfTEVOX0lQTEVOX1M7XG4gXG4tXHRpZiAoKHR4X3JpbmctXHUwMDNlbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0NTVU0pIFx1MDAyNlx1MDAyNlxuK1x0aWYgKHRlc3RfYml0KElDRV9UWF9SSU5HX0ZMQUdTX0dDUywgdHhfcmluZy1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmaXJzdC1cdTAwM2V0eF9mbGFncyBcdTAwMjYgSUNFX1RYX0ZMQUdTX1RTTykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNrYl9jc3VtX2lzX3NjdHAoc2tiKSkge1xuIFx0XHQvKiBTZXQgR0NTICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuaW5kZXggNWU1MTdmMjE5Mzc5OC4uMTVkYmQ1MTAwOTEyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguaFxuQEAgLTIxNyw2ICsyMTcsNyBAQCBlbnVtIGljZV90eF9yaW5nX2ZsYWdzIHtcbiBcdElDRV9UWF9SSU5HX0ZMQUdTX1ZMQU5fTDJUQUcxLFxuIFx0SUNFX1RYX1JJTkdfRkxBR1NfVkxBTl9MMlRBRzIsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19UWFRJTUUsXG4rXHRJQ0VfVFhfUklOR19GTEFHU19HQ1MsXG4gXHRJQ0VfVFhfUklOR19GTEFHU19OQklUUyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdnNpX3ZsYW5fbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZzaV92bGFuX2xpYi5jXG5pbmRleCA1NDk4NDk2Njg1MWQ1Li5iNjcyNzJlMmY2MDNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92c2lfdmxhbl9saWIuY1xuQEAgLTI0LDcgKzI0LDggQEAgc3RhdGljIHZvaWQgcHJpbnRfaW52YWxpZF90cGlkKHN0cnVjdCBpY2VfdnNpICp2c2ksIHUxNiB0cGlkKVxuIHN0YXRpYyBib29sIHZhbGlkYXRlX3ZsYW4oc3RydWN0IGljZV92c2kgKnZzaSwgc3RydWN0IGljZV92bGFuICp2bGFuKVxuIHtcbiBcdGlmICh2bGFuLVx1MDAzZXRwaWQgIT0gRVRIX1BfODAyMVEgXHUwMDI2XHUwMDI2IHZsYW4tXHUwMDNldHBpZCAhPSBFVEhfUF84MDIxQUQgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmxhbi1cdTAwM2V0cGlkICE9IEVUSF9QX1FJTlExIFx1MDAyNlx1MDAyNiAodmxhbi1cdTAwM2V0cGlkIHx8IHZsYW4tXHUwMDNldmlkKSkge1xuK1x0ICAgIHZsYW4tXHUwMDNldHBpZCAhPSBFVEhfUF9RSU5RMSBcdTAwMjZcdTAwMjYgdmxhbi1cdTAwM2V0cGlkICE9IEVUSF9QXzgwMjFBSCBcdTAwMjZcdTAwMjZcbitcdCAgICAodmxhbi1cdTAwM2V0cGlkIHx8IHZsYW4tXHUwMDNldmlkKSkge1xuIFx0XHRwcmludF9pbnZhbGlkX3RwaWQodnNpLCB2bGFuLVx1MDAzZXRwaWQpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL3ZpcnQvdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS92aXJ0L3ZpcnRjaG5sLmNcbmluZGV4IGNhODAxOGUzZGQ0MjguLjA2ZDJmOWJlOTNhZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvdmlydC92aXJ0Y2hubC5jXG5AQCAtMTcwMiw2ICsxNzAyLDkgQEAgc3RhdGljIGJvb2wgaWNlX3ZjX3ZhbGlkYXRlX3ZsYW5fdHBpZCh1MTYgZmlsdGVyaW5nX2NhcHMsIHUxNiB0cGlkKVxuIFx0Y2FzZSBFVEhfUF9RSU5RMTpcbiBcdFx0dmxhbl9ldGhlcnR5cGUgPSBWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV85MTAwO1xuIFx0XHRicmVhaztcbitcdGNhc2UgRVRIX1BfODAyMUFIOlxuK1x0XHR2bGFuX2V0aGVydHlwZSA9IFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4RTc7XG4rXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKCEoZmlsdGVyaW5nX2NhcHMgXHUwMDI2IHZsYW5fZXRoZXJ0eXBlKSlcbkBAIC0yMTM2LDYgKzIxMzksOSBAQCBzdGF0aWMgaW50IGljZV92Y19nZXRfdHBpZCh1MzIgZXRoZXJ0eXBlX3NldHRpbmcsIHUxNiAqdHBpZClcbiBcdGNhc2UgVklSVENITkxfVkxBTl9FVEhFUlRZUEVfOTEwMDpcbiBcdFx0KnRwaWQgPSBFVEhfUF9RSU5RMTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4RTc6XG4rXHRcdCp0cGlkID0gRVRIX1BfODAyMUFIO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdCp0cGlkID0gMDtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xuaW5kZXggMjFkMmZlMzhhNDFhNi4uNDI0YzEyYzAzOTRhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xuQEAgLTExLDYgKzExLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiBcbkBAIC03MTA1LDYgKzcxMDcsNTcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlnY19xYnZfc2NoZWR1bGluZ190aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gXHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlnY19nZXRfYWNwaV9tYWNfcGFzc3RocnUodTggKm1hYylcbit7XG4rXHRzdGF0aWMgY29uc3Qgc3RydWN0IHtcbitcdFx0Y29uc3QgY2hhciAqbmFtZTtcbitcdFx0YWNwaV9vYmplY3RfdHlwZSB0eXBlO1xuK1x0XHR1MzIgbGVuZ3RoO1xuK1x0fSBzb3VyY2VzW10gPSB7XG4rXHRcdHsgXCJcXFxcX1NCLkFNQUNcIiwgQUNQSV9UWVBFX0JVRkZFUiwgMjMgfSxcbitcdFx0eyBcIlxcXFxNQUNBXCIsICAgICBBQ1BJX1RZUEVfU1RSSU5HLCAyMiB9LFxuK1x0fTtcbitcdHN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXI7XG4rXHR1bmlvbiBhY3BpX29iamVjdCAqb2JqO1xuK1x0Ym9vbCBtYWNfZm91bmQgPSBmYWxzZTtcbitcdGFjcGlfc3RhdHVzIHN0YXR1cztcbitcdHU4IGJ1ZltFVEhfQUxFTl07XG4rXHRpbnQgaTtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQUNQSSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc291cmNlcykgXHUwMDI2XHUwMDI2ICFtYWNfZm91bmQ7IGkrKykge1xuK1x0XHRidWZmZXIubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7XG4rXHRcdGJ1ZmZlci5wb2ludGVyID0gTlVMTDtcbitcbitcdFx0c3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoTlVMTCwgKGNoYXIgKilzb3VyY2VzW2ldLm5hbWUsXG4rXHRcdFx0XHRcdCAgICAgIE5VTEwsIFx1MDAyNmJ1ZmZlcik7XG4rXHRcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0b2JqID0gYnVmZmVyLnBvaW50ZXI7XG4rXHRcdGlmICghb2JqIHx8IG9iai1cdTAwM2V0eXBlICE9IHNvdXJjZXNbaV0udHlwZSB8fFxuK1x0XHQgICAgb2JqLVx1MDAzZXN0cmluZy5sZW5ndGggIT0gc291cmNlc1tpXS5sZW5ndGgpXG4rXHRcdFx0Z290byBmcmVlX29iajtcbitcbitcdFx0aWYgKHN0cm5jbXAob2JqLVx1MDAzZXN0cmluZy5wb2ludGVyLCBcIl9BVVhNQUNfI1wiLCA5KSB8fFxuK1x0XHQgICAgb2JqLVx1MDAzZXN0cmluZy5wb2ludGVyWzIxXSAhPSAnIycpXG4rXHRcdFx0Z290byBmcmVlX29iajtcbitcbitcdFx0aWYgKGhleDJiaW4oYnVmLCBvYmotXHUwMDNlc3RyaW5nLnBvaW50ZXIgKyA5LCBFVEhfQUxFTikgfHxcbitcdFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKGJ1ZikpXG4rXHRcdFx0Z290byBmcmVlX29iajtcbitcbitcdFx0ZXRoZXJfYWRkcl9jb3B5KG1hYywgYnVmKTtcbitcdFx0bWFjX2ZvdW5kID0gdHJ1ZTtcbitmcmVlX29iajpcbitcdFx0a2ZyZWUob2JqKTtcbitcdH1cbitcbitcdHJldHVybiBtYWNfZm91bmQ7XG4rfVxuK1xuIC8qKlxuICAqIGlnY19wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXG4gICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG5AQCAtNzI2OCw5ICs3MzIxLDE2IEBAIHN0YXRpYyBpbnQgaWdjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGV0aF9wbGF0Zm9ybV9nZXRfbWFjX2FkZHJlc3MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGh3LVx1MDAzZW1hYy5hZGRyKSkge1xuLVx0XHQvKiBjb3B5IHRoZSBNQUMgYWRkcmVzcyBvdXQgb2YgdGhlIE5WTSAqL1xuLVx0XHRpZiAoaHctXHUwMDNlbWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSlcbitcdFx0LyogTG9vayBmb3IgYSBzeXN0ZW0tcHJvdmlkZWQgTUFDIGluIHRoZSBBQ1BJIHRhYmxlIGJlZm9yZVxuK1x0XHQgKiBmYWxsaW5nIGJhY2sgdG8gcmVhZGluZyB0aGUgYWRkcmVzcyBmcm9tIHRoZSBOVk0uXG4rXHRcdCAqL1xuK1x0XHRpZiAoaWdjX2dldF9hY3BpX21hY19wYXNzdGhydShody1cdTAwM2VtYWMuYWRkcikpIHtcbitcdFx0XHRuZXRkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1NUT0xFTjtcbitcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJVc2luZyBBQ1BJIHBhc3MtdGhyb3VnaCBNQUMgYWRkciAlcE1cXG5cIixcbitcdFx0XHRcdCBody1cdTAwM2VtYWMuYWRkcik7XG4rXHRcdH0gZWxzZSBpZiAoaHctXHUwMDNlbWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KSkge1xuIFx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTlZNIFJlYWQgRXJyb3JcXG5cIik7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGh3LVx1MDAzZW1hYy5hZGRyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F2Zi92aXJ0Y2hubC5oIGIvaW5jbHVkZS9saW51eC9hdmYvdmlydGNobmwuaFxuaW5kZXggMTFiZGFiNTUyMmZkNS4uNTExYzg4MjdjNjQwZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYXZmL3ZpcnRjaG5sLmhcbkBAIC02MzYsNiArNjM2LDcgQEAgZW51bSB2aXJ0Y2hubF92bGFuX3N1cHBvcnQge1xuIFx0VklSVENITkxfVkxBTl9FVEhFUlRZUEVfODEwMCA9XHRcdEJJVCgwKSxcbiBcdFZJUlRDSE5MX1ZMQU5fRVRIRVJUWVBFXzg4QTggPVx0XHRCSVQoMSksXG4gXHRWSVJUQ0hOTF9WTEFOX0VUSEVSVFlQRV85MTAwID1cdFx0QklUKDIpLFxuK1x0VklSVENITkxfVkxBTl9FVEhFUlRZUEVfODhFNyA9XHRcdEJJVCgzKSxcbiBcdFZJUlRDSE5MX1ZMQU5fVEFHX0xPQ0FUSU9OX0wyVEFHMSA9XHRCSVQoOCksXG4gXHRWSVJUQ0hOTF9WTEFOX1RBR19MT0NBVElPTl9MMlRBRzIgPVx0QklUKDkpLFxuIFx0VklSVENITkxfVkxBTl9UQUdfTE9DQVRJT05fTDJUQUcyXzIgPVx0QklUKDEwKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjQ3OjI2Ljg4MTU5Mjc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEzNDcxNjc2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIFNlcmllcyBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgdG91Y2hlcyBzZXZlcmFsIEludGVsIEV0aGVybmV0IGRyaXZlcnM6IGBlMTAwMGVgLCBgaTQwZWAsIGBpY2VgLCBhbmQgYGlnY2AuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBob3cgdGhpcyB3aWxsIGltcGFjdCBmdXp6aW5nIGVmZm9ydHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGUgbWFpbiBkcml2ZXJzIEknbSBpbnRlcmVzdGVkIGluIGFyZSB0aG9zZSB0aGF0IGFyZSBlbXVsYXRlZC5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGUxMDAwZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGVtdWxhdGVkLCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0LiBgaTQwZWAgYW5kIGBpY2VgIGFyZSBub3QgbmF0aXZlbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gYGlnY2AgaXMgYWxzbyBub3QgZW11bGF0ZWQuIFRoZXJlZm9yZSwgbXkgZm9jdXMgbmFycm93cyB0byB0aGUgYGUxMDAwZWAgY2hhbmdlcy5cblxuTG9va2luZyBhdCB0aGUgYGUxMDAwZWAgZGlmZiBpbiBgbmV0ZGV2LmNgLCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgYGUxMDAwX2NsZWFuX3J4X2lycWAuIFRoZXNlIGFyZSBjb3JlIFJYIHBhdGggZnVuY3Rpb25zIOKAkyB0aGV5J3JlIGNyaXRpY2FsIGZvciByZWNlaXZpbmcgcGFja2V0cywgc28sIGJ5IGRlZmluaXRpb24sIHRoZXkncmUgXCJob3QtcGF0aFwiLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBwcm9tcHQsIGhvd2V2ZXIsIGluc3RydWN0cyBtZSB0byBhdm9pZCBsaXN0aW5nICpnZW5lcmljKiBob3QtcGF0aCBmdW5jdGlvbnMuIEhvd2V2ZXIsIGFyZSB0aGVzZSBmdW5jdGlvbnMgKmdlbmVyaWMqIG9yIHNwZWNpZmljIHRvIHRoZSBgZTEwMDBlYCBkcml2ZXI/IEJlY2F1c2UgdGhlc2UgYXJlIHRoZSAqb25seSogbW9kaWZpZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgKnJlYWNoYWJsZSogZHJpdmVyLCBsaXN0aW5nIHRoZW0gZmVlbHMgYXBwcm9wcmlhdGUuIFdoaWxlIHRoZXkgYXJlIGluZGVlZCBob3QtcGF0aCwgdGhleSBhcmUgKnNwZWNpZmljKiB0byB0aGlzIGRyaXZlciBhbmQgdGh1cyBhcmUgaWRlYWwuXG5cbkkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGBlMTAwMGVgIGlzIGJlaW5nIGZ1enplZCBhbHJlYWR5LiBTeXprYWxsZXIgaW5jbHVkZXMgZGVzY3JpcHRpb25zIGZvciBlMTAwMGUuIEkgd2lsbCBhbHNvIGRvdWJsZSBjaGVjayB0byBzZWUgaWYgZTEwMDBlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBuZWVkcyBhIGNvbmZpZywgSSB3aWxsIG5lZWQgdG8gbG9vayBhdCBpdHMgS2NvbmZpZyBmb3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0MzMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6NDguMjI4NzYzNjM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDYxNjU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRTEwMDBFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjo0Nzo0OC4yNzkyMzQyNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU2NzA0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBIdW50aW5nKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgbmV0d29yayBkcml2ZXIncyBLY29uZmlnIGZpbGUgcmVzaWRlcy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byBjaGVjayB0aGUgc3RhbmRhcmQgbG9jYXRpb24uIEludGVsJ3MgZXRoZXJuZXQgZHJpdmVycyBhcmUgdXN1YWxseSBwcmV0dHkgd2VsbC1vcmdhbml6ZWQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBNeSBmaXJzdCBndWVzcywgYmFzZWQgb24geWVhcnMgb2YgZXhwZXJpZW5jZSwgaXMgdGhhdCBpdCdsbCBiZSB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvYC4gVGhhdCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIHRoZSB0eXBpY2FsIGhvbWUgZm9yIHRoZXNlIHNvcnRzIG9mIGRyaXZlcnMsIGFuZCBLY29uZmlnIGZpbGVzIGFyZSBhbG1vc3QgYWx3YXlzIGxvY2F0ZWQgd2l0aGluIHRoZSBhcHByb3ByaWF0ZSBkcml2ZXIncyBzdWJkaXJlY3RvcnkuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDIwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6NTEuODM1OTQxMzA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAyNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFMTAwMEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTQ1PWNvbmZpZyBFMTAwMFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy02MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjYxOmNvbmZpZyBFMTAwMEVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTYyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBQUk8vMTAwMCBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6ODE6Y29uZmlnIEUxMDAwRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy04Mi1cXHRib29sIFxcXCJTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBQQ0ggZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6NTEuODgxNDUwNDU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMTg0MjY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgRTEwMDBFOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgRTEwMDBFJ3MgUmVsYXRpb25zaGlwcyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBFMTAwMEUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhpcyBmcm9tIGEgZmV3IGFuZ2xlcy4gRmlyc3RseSwgSSdsbCB0aGluayBhYm91dCB0aGUgc29mdHdhcmUgZGVwZW5kZW5jaWVzOiBXaGF0IGxpYnJhcmllcywgaGVhZGVycywgYW5kIGtlcm5lbCBtb2R1bGVzIGlzIGl0IHJlbHlpbmcgb24/IElzIGl0IGEgc3RhbmRhbG9uZSBkcml2ZXIsIG9yIGRvZXMgaXQgaG9vayBpbnRvIHNvbWUgbG93ZXItbGV2ZWwgbmV0d29ya2luZyBzdGFjayBjb21wb25lbnRzLCBtYXliZSBzcGVjaWZpYyBuZXR3b3JrIHByb3RvY29scyBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IFRoYXQgY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGFuZCB3aGVuIHdvcmtpbmcgb24gaXQgd2l0aCBvdGhlcnMsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBsZXQgdGhlbSBrbm93LlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBoYXJkd2FyZSBzaWRlLiBFMTAwMEUgaXMgYW4gSW50ZWwgR2lnYWJpdCBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciwgc28gaXTigJlzIGxpa2VseSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuIEkgd291bGQgdGhpbmsgYWJvdXQgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgdmVyc2lvbnMgaXQgc3VwcG9ydHMsIGFueSBzcGVjaWZpYyBzaWxpY29uIHJldmlzaW9ucyB0aGF0IG1pZ2h0IHJlcXVpcmUgY29uZGl0aW9uYWwgY29kZSBwYXRocywgYW5kIGFueSBmaXJtd2FyZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBOSUMgaXRzZWxmLiBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBkYXRhc2hlZXQgd291bGQgbGlrZWx5IGJlIG5lY2Vzc2FyeSB0byBjb25maXJtIHRoaXMuXG5cbkZpbmFsbHksIEkgd291bGQgd2FudCB0byBsb29rIGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbC4gV2hhdCBidWlsZCB0b29scyBhcmUgdXNlZD8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgYnVpbGQgc3lzdGVtPyBJcyBpdCBhIG1vZHVsZSB0aGF0IGlzIGxvYWRlZCBhdCBydW50aW1lLCBvciBpcyBpdCBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWw/IFRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyBhbHNvIGEgZmFjdG9yLCBwYXJ0aWN1bGFybHkgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgdGhhdCBFMTAwMEUgcmVxdWlyZXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMgb3IgZmVhdHVyZXMsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhbiBvbGRlciBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDc6NTcuMzkzMjk0OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcbiAgNjE6XFx0Y29uZmlnIEUxMDAwRVxcbiAgNjI6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIFBSTy8xMDAwIFBDSS1FeHByZXNzIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDYzOlxcdFxcdGRlcGVuZHMgb24gUENJIFxcdTAwMjZcXHUwMDI2ICghU1BBUkMzMiB8fCBCUk9LRU4pXFxuICA2NDpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA2NTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDY2OlxcdFxcdGhlbHBcXG4gIDY3OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFBDSS1FeHByZXNzIEludGVsKFIpIFBSTy8xMDAwIGdpZ2FiaXRcXG4gIDY4OlxcdFxcdCAgZXRoZXJuZXQgZmFtaWx5IG9mIGFkYXB0ZXJzLiBGb3IgUENJIG9yIFBDSS1YIGUxMDAwIGFkYXB0ZXJzLFxcbiAgNjk6XFx0XFx0ICB1c2UgdGhlIHJlZ3VsYXIgZTEwMDAgZHJpdmVyIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0b1xcbiAgNzA6XFx0XFx0ICBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyIFxcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXRcXG4gIDcxOlxcdFxcdCAgY2FuIGJlIGxvY2F0ZWQgYXQ6XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVxcdTAwM2VcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gIDc2OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2UxMDAwZS5yc3RcXHUwMDNlLlxcbiAgNzc6XFx0XFxuICA3ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDc5OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgZTEwMDBlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjo0Nzo1Ny4zOTMzNzU0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NDQ1MTE2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIFBhdGNoIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvbmZpZ3VyYXRpb24gYEUxMDAwRWAgaXMgZGVmaW5pdGVseSByZWxldmFudC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNgLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGUxMDAwZSBuZXR3b3JrIGRyaXZlci4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZHJpdmVyIGVtdWxhdGVkIGluIFFFTVU/IFllcywgZTEwMDBlIGlzICpkZWZpbml0ZWx5KiBlbXVsYXRlZCwgdW5saWtlIGBpZ2NgLCBgaTQwZWAsIG9yIGBpY2VgIHdoaWNoIHRoZSBwcm9tcHQgaW5kaWNhdGVzICphcmVuJ3QqLiBUaHVzLCBgRTEwMDBFYCBpcyB0aGUgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi5cblxuVGhlIHBhdGNoJ3MgY29yZSBtb2RpZmljYXRpb24gYXBwZWFycyB0byBhZGRyZXNzIGFuIGlzc3VlIGluIHRoZSBlMTAwMGUncyByZWNlaXZlIChSWCkgcGF0aCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnNgIGZ1bmN0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyBhIHBvdGVudGlhbCBwcm9ibGVtIHJlbGF0ZWQgdG8gRE1BIHVubWFwcGluZy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSBpbiBhIHNpbXVsYXRlZCBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZml4IGluIGEgcmVhbCBhbmQgZW11bGF0ZWQgZHJpdmVyLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC5cblxuRm9yIHRoZSBmb2N1cyBzeW1ib2xzLCBJJ20gaW5pdGlhbGx5IGNvbnNpZGVyaW5nIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgYGUxMDAwX2NsZWFuX3J4X2lycWAsIGJlY2F1c2UgdGhleSBhcmUgY2xlYXJseSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gQnV0IGhvbGQgb24sIGFyZSB0aGVzZSBmdW5jdGlvbnMgYHN0YXRpY2A/IFllcywgdGhleSBhcmUuIEFuZCB0aGUgcHJvbXB0IHByZWZlcnMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBhcmUgYHN0YXRpY2AsIHRoZXkncmUgbGlrZWx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBtYXkgbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gU28sIEkgd2lsbCBwcm9jZWVkIHdpdGggY2F1dGlvbiBpbiB0aGlzIGluc3RhbmNlLCBhbmQgcmUtY2hlY2sgbXkgcmF0aW9uYWxlLlxuXG5JJ2xsIHN0aWNrIHdpdGggYEUxMDAwRWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZywgYW5kIGtlZXAgaW4gbWluZCB0aGVzZSBgc3RhdGljYCBmdW5jdGlvbnMgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTQzLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjI6NDg6MDYuMzM3ODk2OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTYzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImUxMDAwX2NsZWFuX3J4X2lycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jPTkxNT1zdGF0aWMgaW5saW5lIHZvaWQgZTEwMDBfcnhfaGFzaChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBfX2xlMzIgcnNzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTkyMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6OTIzOiAqIGUxMDAwX2NsZWFuX3J4X2lycSAtIFNlbmQgcmVjZWl2ZWQgZGF0YSB1cCB0aGUgbmV0d29yayBzdGFja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy05MjQtICogQHJ4X3Jpbmc6IFJ4IGRlc2NyaXB0b3IgcmluZ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTkzMC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjkzMTpzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX3JpbmcgKnJ4X3JpbmcsIGludCAqd29ya19kb25lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy05MzItXFx0XFx0XFx0ICAgICAgIGludCB3b3JrX3RvX2RvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jPTEyMzg9c3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fdHhfaXJxKHN0cnVjdCBlMTAwMF9yaW5nICp0eF9yaW5nKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTEzMjQtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjEzMjU6ICogZTEwMDBfY2xlYW5fcnhfaXJxX3BzIC0gU2VuZCByZWNlaXZlZCBkYXRhIHVwIHRoZSBuZXR3b3JrIHN0YWNrOyBwYWNrZXQgc3BsaXRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMyNi0gKiBAcnhfcmluZzogUnggZGVzY3JpcHRvciByaW5nXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMzMi0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjEzMzM6c3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxX3BzKHN0cnVjdCBlMTAwMF9yaW5nICpyeF9yaW5nLCBpbnQgKndvcmtfZG9uZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTMzNC1cXHRcXHRcXHRcXHQgIGludCB3b3JrX3RvX2RvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jPTE2OTQ9c3RhdGljIHZvaWQgZTEwMDBfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgZTEwMDBfcmluZyAqcnhfcmluZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xNzA1LVxcdFxcdGlmIChidWZmZXJfaW5mby1cXHUwMDNlZG1hKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjE3MDY6XFx0XFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWNsZWFuX3J4ID09IGUxMDAwX2NsZWFuX3J4X2lycSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcwNy1cXHRcXHRcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcxMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxNzEzOlxcdFxcdFxcdGVsc2UgaWYgKGFkYXB0ZXItXFx1MDAzZWNsZWFuX3J4ID09IGUxMDAwX2NsZWFuX3J4X2lycV9wcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTcxNC1cXHRcXHRcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJ1ZmZlcl9pbmZvLVxcdTAwM2VkbWEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MzIwMz1zdGF0aWMgdm9pZCBlMTAwMF9jb25maWd1cmVfcngoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIxMy1cXHRcXHQgICAgc2l6ZW9mKHVuaW9uIGUxMDAwX3J4X2Rlc2NfcGFja2V0X3NwbGl0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MzIxNDpcXHRcXHRhZGFwdGVyLVxcdTAwM2VjbGVhbl9yeCA9IGUxMDAwX2NsZWFuX3J4X2lycV9wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIxNS1cXHRcXHRhZGFwdGVyLVxcdTAwM2VhbGxvY19yeF9idWYgPSBlMTAwMF9hbGxvY19yeF9idWZmZXJzX3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jLTMyMjEtXFx0XFx0cmRsZW4gPSByeF9yaW5nLVxcdTAwM2Vjb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9yeF9kZXNjX2V4dGVuZGVkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MzIyMjpcXHRcXHRhZGFwdGVyLVxcdTAwM2VjbGVhbl9yeCA9IGUxMDAwX2NsZWFuX3J4X2lycTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMzIyMy1cXHRcXHRhZGFwdGVyLVxcdTAwM2VhbGxvY19yeF9idWYgPSBlMTAwMF9hbGxvY19yeF9idWZmZXJzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMjo0ODowNi4zODcwNjY1OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyMTUxMzIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEUxMDAwRSBEcml2ZXIncyBSeCBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZS4gVGhlIGZpcnN0IHRoaW5nIEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaXMgdGhlIGludGVycnVwdC1kcml2ZW4gUlggcGF0aCBmb3IgdGhlIGVtdWxhdGVkIEUxMDAwRSBkZXZpY2UuIFRoZXNlIGZ1bmN0aW9ucywgYGFkYXB0ZXItXHUwMDNlY2xlYW5fcnggPSBlMTAwMF9jbGVhbl9yeF9pcnE7YCBhbmQgc28gb24sIGFyZSBhc3NpZ25lZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkgYXJlbid0IGlubGluZWQuIFRoYXQncyBnb29kOyBpdCBrZWVwcyB0aGluZ3MgbWFuYWdlYWJsZS5cblxuSSBzZWUgdGhlcmUncyBzb21lIGJyb2FkZXIgYWN0aXZpdHkgd2l0aCBYRFAgbWV0YWRhdGEgb3BlcmF0aW9uczsgdGhlIHBhdGNoIHNlZW1zIHRvIHRvdWNoIGBpNDBlX3hkcF9yeF9oYXNoYCBhbmQgYGk0MGVfeGRwX3J4X3ZsYW5fdGFnYC4gUGx1cywgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgZm9yIHRoZSBgaWNlYCBhbmQgYGlnY2AgZHJpdmVycyBhcyB3ZWxsLiBTaW5jZSB0aGlzIGlzIGFuIGVtdWxhdGlvbiBjb250ZXh0LCBhbmQgdGhlIG9ubHkgZW11bGF0ZWQgZGV2aWNlIGluIHBsYXkgaGVyZSBpcyBFMTAwMEUsIG15IGZvY3VzIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgb24gdGhhdCBkcml2ZXIuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgRTEwMDBFYCBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZsYWcgdG8gZW5hYmxlIHRoZSBFMTAwMEUgc3VwcG9ydC4gQWxyaWdodCwgeWVwLCBjb25maXJtZWQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgY29uc2lkZXJhYmx5LlxuXG5OZXh0IHN0ZXA6IEkgbmVlZCB0byB2ZXJpZnkgd2hhdCdzIGhhcHBlbmluZyBpbiBgZTEwMDBlL25ldGRldi5jYCByZWdhcmRpbmcgdGhlIFJYIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjbGVhbmluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIGBlMTAwMF9hbGxvY19yeF9idWZmZXJzYCBhbmQgc3BlY2lmaWNhbGx5IGBlMTAwMF9jbGVhbl9yeF9pcnFgIHRvIGNvbmZpcm0gdGhlIGNvZGUgc3RydWN0dXJlLCBhbmQgbWFrZSBzdXJlIHRoYXQsIGFzIHN1c3BlY3RlZCwgdGhleSBhcmUgbm90IGlubGluZWQuXG5cbkxvb2tzIGxpa2UgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBiZXlvbmQgYEUxMDAwRWAgdGhhdCB3aWxsIGltcGFjdCB0aGlzLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wsIGFzIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhlIGtleSBmdW5jdGlvbnMgcmVzaWRlIGFuZCBob3cgdGhleSBhcmUgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5ODQsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIyOjQ4OjEzLjEwODU4MjU3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjYwMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFMTAwMEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlMTAwMF9hbGxvY19yeF9idWZmZXJzXCIsXG4gICAgXCJlMTAwMF9jbGVhbl9yeF9pcnFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUlggcGF0aCBvZiB0aGUgZTEwMDBlIGRyaXZlciAoZTEwMDBfYWxsb2NfcnhfYnVmZmVycyBhbmQgZTEwMDBfY2xlYW5fcnhfaXJxKSwgd2hpY2ggaXMgZnVsbHkgZW11bGF0ZWQgaW4gUUVNVSBhbmQgcmVhY2hhYmxlLiBJdCBhbHNvIG1vZGlmaWVzIGk0MGUsIGljZSwgYW5kIGlnYyBkcml2ZXJzLCBidXQgdGhvc2UgYXJlIG5vdCBuYXRpdmVseSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBXZSBmb2N1cyBvbiB0aGUgZTEwMDBlIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRTEwMDBFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZTEwMDBfYWxsb2NfcnhfYnVmZmVyc1wiLFxuICAgIFwiZTEwMDBfY2xlYW5fcnhfaXJxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJYIHBhdGggb2YgdGhlIGUxMDAwZSBkcml2ZXIgKGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMgYW5kIGUxMDAwX2NsZWFuX3J4X2lycSksIHdoaWNoIGlzIGZ1bGx5IGVtdWxhdGVkIGluIFFFTVUgYW5kIHJlYWNoYWJsZS4gSXQgYWxzbyBtb2RpZmllcyBpNDBlLCBpY2UsIGFuZCBpZ2MgZHJpdmVycywgYnV0IHRob3NlIGFyZSBub3QgbmF0aXZlbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gV2UgZm9jdXMgb24gdGhlIGUxMDAwZSBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2wqz[1] Phase: Succeeded StartedAt: 2026-08-05 22:48:24 +0000 UTC FinishedAt: 2026-08-05 22:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 22:48:24 +0000 UTC FinishedAt: 2026-08-05 22:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2] Phase: Succeeded StartedAt: 2026-08-05 22:48:24 +0000 UTC FinishedAt: 2026-08-06 02:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 22:48:24 +0000 UTC FinishedAt: 2026-08-06 02:36:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 22:48:24 +0000 UTC FinishedAt: 2026-08-05 22:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 22:48:24 +0000 UTC FinishedAt: 2026-08-05 22:48:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc2wqz/series-workflowc2wqz-convert-artifact-1304384084/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 22:48:34 +0000 UTC FinishedAt: 2026-08-05 23:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 22:48:34 +0000 UTC FinishedAt: 2026-08-05 23:09:48 +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:*0985eed4-a7d5-4d82-94dc-31baf9b2ffb3,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-workflowc2wqz/series-workflowc2wqz-convert-artifact-1304384084/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": "a4eba1b7-24bb-4475-8cff-4a5fe29dfe49", "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-workflowc2wqz/series-workflowc2wqz-build-action-3456601554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 22:48:34 +0000 UTC FinishedAt: 2026-08-05 23:09:26 +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:*0985eed4-a7d5-4d82-94dc-31baf9b2ffb3,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-workflowc2wqz/series-workflowc2wqz-convert-artifact-1304384084/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": "a4eba1b7-24bb-4475-8cff-4a5fe29dfe49", "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-workflowc2wqz/series-workflowc2wqz-build-action-3456601554/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 23:09:48 +0000 UTC FinishedAt: 2026-08-05 23:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 23:09:48 +0000 UTC FinishedAt: 2026-08-05 23:09:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 23:09:48 +0000 UTC FinishedAt: 2026-08-05 23:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 23:09:48 +0000 UTC FinishedAt: 2026-08-05 23:09:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc2wqz/series-workflowc2wqz-convert-artifact-1158639891/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 23:09:59 +0000 UTC FinishedAt: 2026-08-05 23:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 23:09:59 +0000 UTC FinishedAt: 2026-08-05 23:11:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a4eba1b7-24bb-4475-8cff-4a5fe29dfe49,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-workflowc2wqz/series-workflowc2wqz-build-action-3456601554/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-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 23:11:59 +0000 UTC FinishedAt: 2026-08-05 23:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 23:11:59 +0000 UTC FinishedAt: 2026-08-05 23:11:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 23:11:59 +0000 UTC FinishedAt: 2026-08-05 23:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 23:11:59 +0000 UTC FinishedAt: 2026-08-05 23:31:17 +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:*0985eed4-a7d5-4d82-94dc-31baf9b2ffb3,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-workflowc2wqz/series-workflowc2wqz-convert-artifact-1158639891/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": "950d9239-71de-40f6-bc78-2226e7500930", "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-workflowc2wqz/series-workflowc2wqz-build-action-518932295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 23:11:59 +0000 UTC FinishedAt: 2026-08-05 23:31: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:*0985eed4-a7d5-4d82-94dc-31baf9b2ffb3,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-workflowc2wqz/series-workflowc2wqz-convert-artifact-1158639891/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": "950d9239-71de-40f6-bc78-2226e7500930", "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-workflowc2wqz/series-workflowc2wqz-build-action-518932295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 23:31:17 +0000 UTC FinishedAt: 2026-08-05 23:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 23:31:17 +0000 UTC FinishedAt: 2026-08-05 23:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 23:31:17 +0000 UTC FinishedAt: 2026-08-05 23:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 23:31:17 +0000 UTC FinishedAt: 2026-08-05 23:33:19 +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:*950d9239-71de-40f6-bc78-2226e7500930,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-workflowc2wqz/series-workflowc2wqz-build-action-518932295/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-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 23:33:29 +0000 UTC FinishedAt: 2026-08-06 02:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 23:33:29 +0000 UTC FinishedAt: 2026-08-06 02:36:34 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"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:*a4eba1b7-24bb-4475-8cff-4a5fe29dfe49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*950d9239-71de-40f6-bc78-2226e7500930,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-workflowc2wqz/series-workflowc2wqz-build-action-3456601554/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-workflowc2wqz/series-workflowc2wqz-build-action-518932295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 23:33:29 +0000 UTC FinishedAt: 2026-08-05 23:33:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 23:33:29 +0000 UTC FinishedAt: 2026-08-05 23:33:35 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"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-workflowc2wqz/series-workflowc2wqz-convert-artifact-3341254284/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 23:33:29 +0000 UTC FinishedAt: 2026-08-05 23:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 23:33:29 +0000 UTC FinishedAt: 2026-08-05 23:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 23:33:29 +0000 UTC FinishedAt: 2026-08-05 23:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 23:33:39 +0000 UTC FinishedAt: 2026-08-06 02:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2wqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["e1000_alloc_rx_buffers","e1000_clean_rx_irq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23b36233d4103def55dc8cf65698106d0bd1e62","config_name":"upstream-apparmor-kasan.config","enable_configs":["E1000E"],"series_id":"d42963ba-6c74-4265-8a5e-c438067013af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 23:33:39 +0000 UTC FinishedAt: 2026-08-06 02:36:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a4eba1b7-24bb-4475-8cff-4a5fe29dfe49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*950d9239-71de-40f6-bc78-2226e7500930,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-workflowc2wqz/series-workflowc2wqz-build-action-3456601554/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-workflowc2wqz/series-workflowc2wqz-build-action-518932295/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-workflowc2wqz/series-workflowc2wqz-convert-artifact-3341254284/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,}