Name: series-workflowskllj Phase: Succeeded StartedAt: 2026-08-01 20:07:21 +0000 UTC FinishedAt: 2026-08-02 00:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[0] Phase: Succeeded StartedAt: 2026-08-01 20:07:21 +0000 UTC FinishedAt: 2026-08-01 20:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 20:07:21 +0000 UTC FinishedAt: 2026-08-01 20:30:47 +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": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "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": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "1b617e37-20ba-4e89-a261-9b479dce08c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_sock_ac_join", "ipv6_sock_ac_drop", "ipv6_sock_mc_join", "ipv6_sock_mc_drop", "inet6_netconf_get_devconf", "addrconf_prefix_rcv", "ndisc_recv_ns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHY2X3NvY2tfYWNfam9pbiYjMzQ7LAogICAgJiMzNDtpcHY2X3NvY2tfYWNfZHJvcCYjMzQ7LAogICAgJiMzNDtpcHY2X3NvY2tfbWNfam9pbiYjMzQ7LAogICAgJiMzNDtpcHY2X3NvY2tfbWNfZHJvcCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mJiMzNDssCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7bmRpc2NfcmVjdl9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCB1bmRlcmZsb3cgaW4gdGhlIGNvcmUgSVB2NiBmdW5jdGlvbiBgaW42X2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gLiBTaW5jZSBgaW42X2Rldl9nZXRgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgd2UgZm9jdXMgZnV6emluZyBvbiBzZXZlcmFsIGtleSBJUHY2IGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQgYW5kIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgKHZpYSBzZXRzb2Nrb3B0IG9yIG5ldGxpbmspIG9yIG5ldHdvcmsgcGFja2V0cyAodmlhIG5laWdoYm9yIGRpc2NvdmVyeSBhbmQgcm91dGVyIGFkdmVydGlzZW1lbnRzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNiM2RkNTc0NmJiMWZjMGQ1Nzc5ZTNjNzBmYTZkMmU0MWZmOGI0MjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIwOjI4OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oXG5pbmRleCA4Y2VkMjdhODIyOWI2Li5lNjc2NDI0NTk5NWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxuQEAgLTQwNSw4ICYjNDM7NDA1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0aWRldiA9IHJjdV9kZXJlZmVyZW5jZShkZXYtXHUwMDNlaXA2X3B0cik7XG4tXHRpZiAoaWRldilcbi1cdFx0cmVmY291bnRfaW5jKFx1MDAyNmlkZXYtXHUwMDNlcmVmY250KTtcbiYjNDM7XHRpZiAoaWRldiBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZpZGV2LVx1MDAzZXJlZmNudCkpXG4mIzQzO1x0XHRpZGV2ID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGlkZXY7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zb2NrX2FjX2pvaW4mIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX2FjX2Ryb3AmIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX21jX2pvaW4mIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX21jX2Ryb3AmIzM0OywKICAgICYjMzQ7aW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JlY3ZfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgdW5kZXJmbG93IGluIHRoZSBjb3JlIElQdjYgZnVuY3Rpb24gYGluNl9kZXZfZ2V0YCBieSB1c2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gU2luY2UgYGluNl9kZXZfZ2V0YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdlIGZvY3VzIGZ1enppbmcgb24gc2V2ZXJhbCBrZXkgSVB2NiBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0IGFuZCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlICh2aWEgc2V0c29ja29wdCBvciBuZXRsaW5rKSBvciBuZXR3b3JrIHBhY2tldHMgKHZpYSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIHJvdXRlciBhZHZlcnRpc2VtZW50cykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYjNkZDU3NDZiYjFmYzBkNTc3OWUzYzcwZmE2ZDJlNDFmZjhiNDI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAyMDoyODo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCmluZGV4IDhjZWQyN2E4MjI5YjYuLmU2NzY0MjQ1OTk1ZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApAQCAtNDA1LDggJiM0Mzs0MDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaWRldiA9IHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O2lwNl9wdHIpOwotCWlmIChpZGV2KQotCQlyZWZjb3VudF9pbmMoJmFtcDtpZGV2LSZndDtyZWZjbnQpOwomIzQzOwlpZiAoaWRldiAmYW1wOyZhbXA7ICFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtpZGV2LSZndDtyZWZjbnQpKQomIzQzOwkJaWRldiA9IE5VTEw7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGlkZXY7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBpbjZfZGV2X2dldGAgaW4gYGluY2x1ZGUvbmV0L2FkZHJjb25mLmhgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIHJlcGxhY2luZyBhIHNpbXBsZSBgcmVmY291bnRfaW5jYCB3aXRoIGByZWZjb3VudF9pbmNfbm90X3plcm9gLiBTb3VuZHMgbGlrZSBhIHNvbGlkIGZpeCBmb3IgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgdW5kZXJmbG93IHNjZW5hcmlvIGlmIGBpZGV2LSZndDtyZWZjbnRgIGhhcHBlbnMgdG8gYmUgemVyby4gUHJldHR5IGltcG9ydGFudCB0byBjYXRjaCB0aGVzZSBraW5kcyBvZiByYWNlIGNvbmRpdGlvbnMgaW4gY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMuCgpOb3csIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/JiMzNDsgSXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBleHBhbmRlZCBpbiBwbGFjZS4gVGhhdCBtYWtlcyB0YXJnZXRlZCBmdXp6aW5nIGJ5IG5hbWUgYSBiaXQgdHJpY2t5LiBJIGNhbiYjMzk7dCBqdXN0IHRocm93IGEgZnV6emVyIGF0IGBpbjZfZGV2X2dldGAgZGlyZWN0bHkuIEkgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzIHRvIGlkZW50aWZ5IG1lYW5pbmdmdWwgZnV6emluZyB0YXJnZXRzLiBJIGNvdWxkIGxvb2sgZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQgZGlyZWN0bHksIG9yIHNpbmNlIGl0JiMzOTtzIGFuIGlubGluZSBuZXR3b3JraW5nIGZ1bmN0aW9uIEkgY291bGQganVzdCBpbmZlciBpdCYjMzk7cyB1c2VkIGluIGxvdHMgb2YgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBhbmQgSSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgLiBPciBtYXliZSBJIHNob3VsZCBkaWcgaW4gYW5kIHRyeSB0byBmaW5kIHNvbWUgc3BlY2lmaWMgY2FsbGVycyB0byBuYXJyb3cgZG93biB0aGUgZm9jdXMgb2YgdGhlIHRlc3RpbmcuCgpBaCwgcmlnaHQsIGl0JiMzOTtzIElQdjYgbmV0d29ya2luZy4gVGhhdCBoZWxwcyBuYXJyb3cgdGhlIHNjb3BlIGEgYml0LiBMZXQgbWUgcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW42X2Rldl9nZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5NSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0PTg4PXN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIGZpYl9uaF9oZWFkXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3Q6ODk6c3RydWN0IGluZXQ2X2RldiogICAgICAgICAgICAgICAgICAgaXA2X3B0ciAgICAgICAgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICBfX2luNl9kZXZfZ2V0XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QtOTAtc3RydWN0IHZsYW5faW5mbyogICAgICAgICAgICAgICAgICAgdmxhbl9pbmZvXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM3LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jOjM4Oi8qIEZvciBpbjZfZGV2X2dldC9pbjZfZGV2X3B1dCAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM5LSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jPTM3NT1zdGF0aWMgdm9pZCBlbnVtX25ldGRldl9pcHY2X2lwcyhzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM5MS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3JvY2VfZ2lkX21nbXQuYzozOTI6XHRpbjZfZGV2ID0gaW42X2Rldl9nZXQobmRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9yb2NlX2dpZF9tZ210LmMtMzkzLVx0aWYgKCFpbjZfZGV2KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyNjE9c3RhdGljIGludCBnZXRfbGxhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjY3LVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmM6MzI2ODpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjY5LVx0aWYgKGlkZXYgIT0gTlVMTCkge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE2NTY9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzYoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTY3Ni1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE2Nzc6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNjc4LVx0XHRpZiAoIWlkZXYpIHtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYz0zMzY9c3RhdGljIHZvaWQgaXJkbWFfYWRkX2lwdjZfYWRkcihzdHJ1Y3QgaXJkbWFfZGV2aWNlICppd2Rldilcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYy0zNDgtXHRcdCAgICAgIChSRUFEX09OQ0UoaXBfZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjYgSUZGX1VQKSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3V0aWxzLmM6MzQ5Olx0XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYy0zNTAtXHRcdFx0aWYgKCFpZGV2KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jPTE5Nj1zdGF0aWMgaW50IGN4Z2I0X3VwZGF0ZV9kZXZfY2xpcChzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYzoyMDM6XHRpZGV2ID0gX19pbjZfZGV2X2dldChyb290X2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmMtMjA0LVx0aWYgKCFpZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTgyMzQ9c3RhdGljIGJvb2wgX19tbHhzd19zcF9kZXZfYWRkcl9saXN0X2VtcHR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODI0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjgyNDM6XHRpbmV0Nl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04MjQ0LVx0aWYgKGluZXQ2X2RldiBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2aW5ldDZfZGV2LVx1MDAzZWFkZHJfbGlzdCkpXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjMzOT1zdGF0aWMgdm9pZCBnZW5ldmVfbGlua19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzY0LVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjM2NTpcdFx0aWYgKCFfX2luNl9kZXZfZ2V0KGRldikpXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzY2LVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zOTM9c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDA3Olx0aWRldiA9IF9faW42X2Rldl9nZXQobmRldik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDA4LVx0aWYgKGlkZXYpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYz0zMDk9c3RhdGljIHZvaWQgZG9fbmVpZ2hfc29saWNpdChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4ICpidWYsIHUxNiB0Y2kpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzM4LVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM6MzM5Olx0aW42X2RldiA9IGluNl9kZXZfZ2V0KG5ldGRldik7XG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYy0zNDAtXHRpZiAoIWluNl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTM3NDM9c3RhdGljIGludCB2eGxhbl9jb25maWdfdmFsaWRhdGUoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2NvbmZpZyAqY29uZixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg0NS1cdFx0aWYgKHVzZV9pcHY2KSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mzg0NjpcdFx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChsb3dlcmRldik7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg0Ny1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MzE9c3RhdGljIGludCB3Z19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTMzLVx0c3RydWN0IGluX2RldmljZSAqZGV2X3Y0ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzozNDpcdHN0cnVjdCBpbmV0Nl9kZXYgKmRldl92NiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNS1cdHN0cnVjdCB3Z19kZXZpY2UgKndnID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dvdy5jPTYzOT1zdGF0aWMgdm9pZCBhdGgxMmtfd293X3ByZXBhcmVfbnNfb2ZmbG9hZChzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dvdy5jLTY1MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd293LmM6NjUyOlx0aWRldiA9IGluNl9kZXZfZ2V0KG5kZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93b3cuYy02NTMtXHRpZiAoIWlkZXYpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYz0xMDUxPXN0YXRpYyBpbnQgcWV0aF9sM19hZGRfbWNhc3RfcnRubChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdmlkLCB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYy0xMDk2LVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYzoxMDk3Olx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMtMTA5OC1cdGlmICghaW42X2Rldilcbi0tXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYz04NTY5PXN0YXRpYyBpbnQgZnNjdGxfcXVlcnlfaWZhY2VfaW5mb19pb2N0bChzdHJ1Y3Qga3NtYmRfY29ubiAqY29ubixcbi0tXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYy04NjUzLVxuZnMvc21iL3NlcnZlci9zbWIycGR1LmM6ODY1NDpcdFx0XHRpZGV2NiA9IF9faW42X2Rldl9nZXQobmV0ZGV2KTtcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jLTg2NTUtXHRcdFx0aWYgKCFpZGV2Nilcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTMzNj12b2lkIGluZXQ2X25ldGNvbmZfbm90aWZ5X2RldmNvbmYoc3RydWN0IG5ldCAqbmV0LCBpbnQgZXZlbnQsIGludCB0eXBlLFxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzM5LS8qKlxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNDA6ICogX19pbjZfZGV2X2dldCAtIGdldCBpbmV0Nl9kZXYgcG9pbnRlciBmcm9tIG5ldGRldmljZVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNDEtICogQGRldjogbmV0d29yayBkZXZpY2Vcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM0NS0gKi9cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MzQ2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqX19pbjZfZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNDcte1xuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MzUxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqaW42X2Rldl9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM1NS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MzU2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqX19pbjZfZGV2X2dldF9ydG5sX25ldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNTcte1xuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MzY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqX19pbjZfZGV2X3N0YXRzX2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzc2LVx0fVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNzc6XHRyZXR1cm4gX19pbjZfZGV2X2dldChkZXYpO1xuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNzgtfVxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzgwLS8qKlxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozODE6ICogX19pbjZfZGV2X2dldF9zYWZlbHkgLSBnZXQgaW5ldDZfZGV2IHBvaW50ZXIgZnJvbSBuZXRkZXZpY2VcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzgyLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM4My0gKlxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozODQ6ICogVGhpcyBpcyBhIHNhZmVyIHZlcnNpb24gb2YgX19pbjZfZGV2X2dldFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zODUtICovXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjM4NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0Nl9kZXYgKl9faW42X2Rldl9nZXRfc2FmZWx5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM4Ny17XG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zOTQtLyoqXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjM5NTogKiBpbjZfZGV2X2dldCAtIGdldCBpbmV0Nl9kZXYgcG9pbnRlciBmcm9tIG5ldGRldmljZVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zOTYtICogQGRldjogbmV0d29yayBkZXZpY2Vcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQwMS0gKi9cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6NDAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqaW42X2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtNDAzLXtcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTQxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaF9wYXJtcyAqX19pbjZfZGV2X25kX3Bhcm1zX2dldF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtNDE1LXtcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6NDE2Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtNDE3LVxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9NDU1PXN0YXRpYyBpbmxpbmUgYm9vbCBpcDZfaWdub3JlX2xpbmtkb3duKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQ1Ni17XG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjQ1NzpcdGNvbnN0IHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQ1OC1cbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNjU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzc4LVx0cmN1X3JlYWRfbG9jaygpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6Mzc5Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldl9yY3UoZHN0KSk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zODAtXHRpZiAoaWRldilcbi0tXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaD02NT1pcDZmcmFnX2V4cGlyZV9mcmFnX3F1ZXVlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZyYWdfcXVldWUgKmZxKVxuLS1cbmluY2x1ZGUvbmV0L2lwdjZfZnJhZy5oLTg5LVxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmg6OTA6XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpO1xuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmg6OTE6XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNVElNRU9VVCk7XG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaC05Mi1cbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaD03NT1zdGF0aWMgaW5saW5lIGludCBuZnRfc2V0X3BrdGluZm9faXB2Nl9pbmdyZXNzKHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfaXB2Ni5oLTk0LVx0aWYgKHBrdF9sZW4gJiM0Mzsgc2l6ZW9mKCppcDZoKSBcdTAwM2UgcGt0LVx1MDAzZXNrYi1cdTAwM2VsZW4pIHtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfaXB2Ni5oOjk1Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChuZnRfaW4ocGt0KSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaC05Ni1cdFx0X19JUDZfSU5DX1NUQVRTKG5mdF9uZXQocGt0KSwgaWRldiwgSVBTVEFUU19NSUJfSU5UUlVOQ0FURURQS1RTKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaC0xMTMtaW5oZHJfZXJyb3I6XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaDoxMTQ6XHRpZGV2ID0gX19pbjZfZGV2X2dldChuZnRfaW4ocGt0KSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaC0xMTUtXHRfX0lQNl9JTkNfU1RBVFMobmZ0X25ldChwa3QpLCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4tLVxubmV0LzZsb3dwYW4vY29yZS5jPTEwOD1zdGF0aWMgaW50IGxvd3Bhbl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbi0tXG5uZXQvNmxvd3Bhbi9jb3JlLmMtMTE4LVxubmV0LzZsb3dwYW4vY29yZS5jOjExOTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvNmxvd3Bhbi9jb3JlLmMtMTIwLVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEzMj1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzMte1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTM0Olx0c3RydWN0IGluZXQ2X2RldiAqaW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz00MzM9YmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy00NDctXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo0NDg6XHRpbjZfZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNDQ5LVx0aWYgKCFpbjZfZGV2KSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jPTQ0PWludCBicl92YWxpZGF0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtNDYtXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjQ3Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtNDgtXHR1MzIgcGt0X2xlbjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MzYwPXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYzODEtXG5uZXQvY29yZS9maWx0ZXIuYzo2MzgyOlx0aWRldiA9IF9faW42X2Rldl9nZXRfc2FmZWx5KGRldik7XG5uZXQvY29yZS9maWx0ZXIuYy02MzgzLVx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuZm9yd2FyZGluZykpKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIxOTU9c3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMjU1LVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjIyNTY6XHRcdFx0aWRldiA9IF9faW42X2Rldl9nZXQocGt0X2Rldi1cdTAwM2VvZGV2KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTIyNTctXHRcdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2NC9pY21wLmM9MTI5MT1ib29sIGljbXBfYnVpbGRfcHJvYmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGljbXBoZHIgKmljbXBoZHIpXG4tLVxubmV0L2lwdjQvaWNtcC5jLTEzODUtXG5uZXQvaXB2NC9pY21wLmM6MTM4NjpcdGluNl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2NC9pY21wLmMtMTM4Ny1cdGlmIChpbjZfZGV2IFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZpbjZfZGV2LVx1MDAzZWFkZHJfbGlzdCkpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz00OTA9c3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwdjZfZmluZF9pZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy00OTUtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjQ5NjpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ5Ny1cdGlmICghaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjU3PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjg5LVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2OTA6XHRcdGluNl9kZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02OTEtXHRcdGlmICghaW42X2Rldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTczNT1zdGF0aWMgaW50IGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjQtXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzY1Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy03NjYtXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTg1Mz1zdGF0aWMgdm9pZCBhZGRyY29uZl9mb3J3YXJkX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy04NTgtXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6ODU5Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy04NjAtXHRcdGlmIChpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz05MTk9c3RhdGljIHZvaWQgYWRkcmNvbmZfbGlua2Rvd25fY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3Zilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTkyNC1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo5MjU6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTkyNi1cdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MDA9c3RhdGljIGludCBpcHY2X2dldF9zYWRkcl9tYXN0ZXIoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMTgwOC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MTgwOTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0xODEwLVx0aWYgKGlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODEzLVxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODE0Olx0aWRldiA9IF9faW42X2Rldl9nZXQobWFzdGVyKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTgxNS1cdGlmIChpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgyMj1pbnQgaXB2Nl9kZXZfZ2V0X3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRzdF9kZXYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODYzLVx0aWYgKGRzdF9kZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTg2NDpcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4NjUtXHRcdGlmICgoZHN0X3R5cGUgXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpIHx8XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTAxLVx0XHRcdFx0Y29udGludWU7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE5MDI6XHRcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTkwMy1cdFx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0xOTQwPWludCBpcHY2X2dldF9sbGFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMTk0Ni1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTk0NzpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5NDgtXHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjA0MD1ib29sIGlwdjZfY2hrX2N1c3RvbV9wcmVmaXgoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA0Ny1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjA0ODpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNDktXHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjA2Mj1pbnQgaXB2Nl9jaGtfcHJlZml4KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNjktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIwNzA6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDcxLVx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI3OTg9dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yODMzLVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyODM0Olx0aW42X2RldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4MzUtXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zMTA2PXN0YXRpYyBpbnQgaW5ldDZfYWRkcl9kZWwoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleCwgdTMyIGlmYV9mbGFncyxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMxMjQtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjMxMjU6XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTI2LVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNDgyPXN0YXRpYyB2b2lkIGFkZHJjb25mX2Rldl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM0OTktXHRcdC8qIEFsYXMsIHdlIHN1cHBvcnQgb25seSBFdGhlcm5ldCBhdXRvY29uZmlndXJhdGlvbi4gKi9cbm5ldC9pcHY2L2FkZHJjb25mLmM6MzUwMDpcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzUwMS1cdFx0aWYgKCFJU19FUlJfT1JfTlVMTChpZGV2KSBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVAgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNjM3PXN0YXRpYyB2b2lkIGFkZHJjb25mX3Blcm1hbmVudF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NDUtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM2NDY6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjQ3LVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MzY3MT1zdGF0aWMgaW50IGFkZHJjb25mX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjc2LVx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2V1cHBlcl9pbmZvICppbmZvO1xubmV0L2lwdjYvYWRkcmNvbmYuYzozNjc3Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY3OC1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NTY9c3RhdGljIHZvaWQgYWRkcmNvbmZfdHlwZV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4NjAtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM4NjE6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zODYyLVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Mzg3NT1zdGF0aWMgaW50IGFkZHJjb25mX2lmZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHVucmVnaXN0ZXIpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODg5LVxubmV0L2lwdjYvYWRkcmNvbmYuYzozODkwOlx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg5MS1cdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU0MzA9c3RhdGljIGludCBpbmV0Nl9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ2NC1cdFx0XHR9XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU0NjU6XHRcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ2Ni1cdFx0XHRpZiAoaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NzUtXHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU0NzY6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NzctXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU5MDA9c3RhdGljIHNpemVfdCBpbmV0Nl9nZXRfbGlua19hZl9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTAyLXtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTkwMzpcdGlmICghX19pbjZfZGV2X2dldChkZXYpKVxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTA0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU5MDk9c3RhdGljIGludCBpbmV0Nl9maWxsX2xpbmtfYWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MTEte1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1OTEyOlx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTkxMy1cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYwMzU9c3RhdGljIGludCBpbmV0Nl92YWxpZGF0ZV9saW5rX2FmKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDQzLVx0aWYgKGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2MDQ0Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02MDQ1LVx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02MDY5PXN0YXRpYyBpbnQgaW5ldDZfc2V0X2xpbmtfYWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjA3MS17XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYwNzI6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02MDczLVx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9JTkVUNl9NQVggJiM0MzsgMV07XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02MTcxPXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjE5My1cdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2MTk0Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02MTk1LVx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02NDE1PXN0YXRpYyB2b2lkIGFkZHJjb25mX2Rpc2FibGVfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3Zilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY0MjAtXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjQyMTpcdFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjQyMi1cdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1MjQ9c3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfYWRkcl9nZW5fbW9kZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NjktXHRcdFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY1NzA6XHRcdFx0XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NTcxLVx0XHRcdFx0aWYgKGlkZXYgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02NTkxPXN0YXRpYyBpbnQgYWRkcmNvbmZfc3lzY3RsX3N0YWJsZV9zZWNyZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02NjM3LVx0XHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjYzODpcdFx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NjM5LVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjcyNj1pbnQgYWRkcmNvbmZfZGlzYWJsZV9wb2xpY3koY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgKnZhbHAsIGludCB2YWwpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02NzQ0LVx0XHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6Njc0NTpcdFx0XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NzQ2LVx0XHRcdGlmIChpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njc3OD1zdGF0aWMgdm9pZCBhZGRyY29uZl9mb3JjZV9mb3J3YXJkX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02NzgzLVx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY3ODQ6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3ODUtXHRcdGlmIChpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz03NjI1PXZvaWQgYWRkcmNvbmZfY2xlYW51cCh2b2lkKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNzYzOC1cdGZvcl9lYWNoX25ldGRldihcdTAwMjZpbml0X25ldCwgZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2Mzk6XHRcdGlmICghX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpKVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjQwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz02Nz1pbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYy0xMjYtXG5uZXQvaXB2Ni9hbnljYXN0LmM6MTI3Olx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hbnljYXN0LmMtMTI4LVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jPTQzMD1zdGF0aWMgaW50IGlwdjZfZGV2X2FjX2RlYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5uZXQvaXB2Ni9hbnljYXN0LmMtNDMxLXtcbm5ldC9pcHY2L2FueWNhc3QuYzo0MzI6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FueWNhc3QuYy00MzMtXHRpbnQgZXJyO1xuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz00NzA9c3RhdGljIGJvb2wgaXB2Nl9jaGtfYWNhc3RfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmMtNDc0LVxubmV0L2lwdjYvYW55Y2FzdC5jOjQ3NTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hbnljYXN0LmMtNDc2LVx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmM9NTM3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlmYWNhZGRyNiAqYWM2X2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmMtNTQ1LVxubmV0L2lwdjYvYW55Y2FzdC5jOjU0NjpcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoc3RhdGUtXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2FueWNhc3QuYy01NDctXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmM9NTU2PXN0YXRpYyBzdHJ1Y3QgaWZhY2FkZHI2ICphYzZfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBpZmFjYWRkcjYgKmltKVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYy01NjUtXHRcdFx0YnJlYWs7XG5uZXQvaXB2Ni9hbnljYXN0LmM6NTY2Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cdTAwM2VkZXYpO1xubmV0L2lwdjYvYW55Y2FzdC5jLTU2Ny1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz0yOTY9c3RhdGljIGludCBpcHY2X2Rlc3RvcHRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjk3LXtcbm5ldC9pcHY2L2V4dGhkcnMuYzoyOTg6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2V4dGhkcnMuYy0yOTktXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTM3MT1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zODEtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzgyOlx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtMzgzLVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTQ4OD1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTAxLVxubmV0L2lwdjYvZXh0aGRycy5jOjUwMjpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTUwMy1cbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2V4dGhkcnMuYy02NTYte1xubmV0L2lwdjYvZXh0aGRycy5jOjY1NzpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTY1OC1cdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9OTEyPXN0YXRpYyBib29sIGlwdjZfaG9wX2lvYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTI2LVx0LyogRG9lcyB0aGUgZGV2aWNlIHN0aWxsIGhhdmUgSVB2NiBjb25maWd1cmF0aW9uPyAqL1xubmV0L2lwdjYvZXh0aGRycy5jOjkyNzpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTkyOC1cdGlmICghaWRldikge1xuLS1cbm5ldC9pcHY2L2ljbXAuYz00Nzk9c3RhdGljIHN0cnVjdCBpbjZfYWRkciAqaWNtcDZfZXh0X2lpb19hZGRyNl9maW5kKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaWNtcC5jLTQ4My1cbm5ldC9pcHY2L2ljbXAuYzo0ODQ6XHRpbjZfZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvaWNtcC5jLTQ4NS1cdGlmICghaW42X2Rldilcbi0tXG5uZXQvaXB2Ni9pY21wLmM9NjM2PXZvaWQgaWNtcDZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLCB1OCBjb2RlLCBfX3UzMiBpbmZvLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy04MTUtXG5uZXQvaXB2Ni9pY21wLmM6ODE2Olx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9pY21wLmMtODE3LVxuLS1cbm5ldC9pcHY2L2ljbXAuYz05MjE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIGljbXB2Nl9lY2hvX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWNtcC5jLTEwMDEtXG5uZXQvaXB2Ni9pY21wLmM6MTAwMjpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvaWNtcC5jLTEwMDMtXG4tLVxubmV0L2lwdjYvaWNtcC5jPTEwMzc9ZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0xMDkyLW91dDpcbm5ldC9pcHY2L2ljbXAuYzoxMDkzOlx0X19JQ01QNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpLCBJQ01QNl9NSUJfSU5FUlJPUlMpO1xubmV0L2lwdjYvaWNtcC5jLTEwOTQtXHRyZXR1cm4gcmVhc29uO1xuLS1cbm5ldC9pcHY2L2ljbXAuYz0xMTAxPXN0YXRpYyBpbnQgaWNtcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2ljbXAuYy0xMTA1LVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGljbXA2X2Rldihza2IpO1xubmV0L2lwdjYvaWNtcC5jOjExMDY6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvaWNtcC5jLTExMDctXHRzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcbi0tXG5uZXQvaXB2Ni9pb2FtNi5jPTcwNz1zdGF0aWMgdm9pZCBfX2lvYW02X2ZpbGxfdHJhY2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lvYW02LmMtNzI1LVxubmV0L2lwdjYvaW9hbTYuYzo3MjY6XHRpX3NrYl9kZXYgPSBza2ItXHUwMDNlZGV2ID8gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KSA6IE5VTEw7XG5uZXQvaXB2Ni9pb2FtNi5jOjcyNzpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9pb2FtNi5jLTcyOC1cbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz0xODg9c3RhdGljIHN0cnVjdCBza19idWZmICppcDZfcmN2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy0yMDMtXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzoyMDQ6XHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTIwNS1cbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz01NTQ9aW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU2MS1cdF9fSVA2X1VQRF9QT19TVEFUUyhza2JfZHN0X2Rldl9uZXRfcmN1KHNrYiksXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1NjI6XHRcdFx0ICAgX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KSwgSVBTVEFUU19NSUJfSU5NQ0FTVCxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU2My1cdFx0XHQgICBza2ItXHUwMDNlbGVuKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MjYyPWludCBpcDZfZHN0X2hvcGxpbWl0KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjcwLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQdjYgUmVmY291bnQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIGBpbjZfZGV2X2dldGAgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciwgbW9yZSBwcmVjaXNlbHksIGEgcmVmY291bnQgdW5kZXJmbG93IGlzc3VlLiAgVGhlIGNoYW5nZSBpcyBzdWJ0bGUgYnV0IHNpZ25pZmljYW50OyBpbnN0ZWFkIG9mIGEgc2ltcGxlIGluY3JlbWVudCwgdGhlIGNvZGUgbm93IGNoZWNrcyBpZiBgaWRldi0mZ3Q7cmVmY250YCBpcyBhbHJlYWR5IHplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGl0LiBUaGlzIG1ha2VzIHNlbnNlIOKAkyBhIHplcm8gcmVmY291bnQgaW5kaWNhdGVzIHRoZSBvYmplY3QgaXMgbGlrZWx5IGdvbmUsIHNvIGluY3JlbWVudGluZyBpdCB3b3VsZCBiZSBhIHByb2JsZW0uCgpUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhcjogYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgb2JqZWN0IGlzIGZyZWVkIGJlZm9yZSBgaW42X2Rldl9nZXRgIGNhbiBpbmNyZW1lbnQgaXRzIHJlZmNvdW50LiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBpc3N1ZSB0aGF0JiMzOTtzIHJpcGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwcmV2YWxlbmNlIG9mIGBpbjZfZGV2X2dldGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIG51bWVyb3VzIGxvY2F0aW9ucywgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEkmIzM5O3ZlIGdvdCB0byBmaW5kIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIHRvIHRyaWdnZXIgdGhpcy4KClRoZSBjYWxsIHNpdGVzIGFyZSBsaXN0ZWQsIGFuZCBhIHF1aWNrIGdsYW5jZSBzdWdnZXN0cyBmb2N1c2luZyBvbiBgbmV0L2lwdjYvYWRkcmNvbmYuY2AgYW5kIGBuZXQvaXB2Ni9hbnljYXN0LmNgLiBTcGVjaWZpY2FsbHksIGZ1bmN0aW9ucyBsaWtlIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHdpdGhpbiBgYWRkcmNvbmYuY2AsIGFuZCBmdW5jdGlvbnMgbGlrZSBgaXB2Nl9zb2NrX2FjX2pvaW5gIGFuZCBgaXB2Nl9kZXZfYWNfZGVjYCBpbiBgYW55Y2FzdC5jYC4gVGhlc2Ugc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIHNpbmNlIHRoZXkgZGVhbCBkaXJlY3RseSB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgYWRkcmVzcyBtYW5hZ2VtZW50IOKAkyBjb21wbGV4IGFyZWFzIHdoZXJlIHRpbWluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgYXJlIGNvbW1vbi4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aG9zZSBhbmQgY3JhZnQgc29tZSB0YXJnZXRlZCBmdXp6aW5nIGNhbXBhaWducy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbjZfZGV2X2dldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQ4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTQ5MD1zdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqaXB2Nl9maW5kX2lkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ5NS1cbm5ldC9pcHY2L2FkZHJjb25mLmM6NDk2Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDk3LVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02NTc9c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02ODktXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY5MDpcdFx0aW42X2RldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY5MS1cdFx0aWYgKCFpbjZfZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NzM1PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc2NC1cdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo3NjU6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc2Ni1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9ODUzPXN0YXRpYyB2b2lkIGFkZHJjb25mX2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3Zilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTg1OC1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo4NTk6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTg2MC1cdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTkxOT1zdGF0aWMgdm9pZCBhZGRyY29uZl9saW5rZG93bl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBfX3MzMiBuZXdmKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtOTI0LVx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjkyNTpcdFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtOTI2LVx0XHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgwMD1zdGF0aWMgaW50IGlwdjZfZ2V0X3NhZGRyX21hc3RlcihzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODA4LVxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODA5Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTAtXHRpZiAoaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTMtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE4MTQ6XHRpZGV2ID0gX19pbjZfZGV2X2dldChtYXN0ZXIpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0xODE1LVx0aWYgKGlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0xODIyPWludCBpcHY2X2Rldl9nZXRfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZHN0X2Rldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4NjMtXHRpZiAoZHN0X2Rldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzoxODY0Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTg2NS1cdFx0aWYgKChkc3RfdHlwZSBcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkgfHxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5MDEtXHRcdFx0XHRjb250aW51ZTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTkwMjpcdFx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTAzLVx0XHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE5NDA9aW50IGlwdjZfZ2V0X2xsYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTQ2LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzoxOTQ3Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTk0OC1cdGlmIChpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0yMDQwPWJvb2wgaXB2Nl9jaGtfY3VzdG9tX3ByZWZpeChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDQ3LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzoyMDQ4Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA0OS1cdGlmIChpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0yMDYyPWludCBpcHY2X2Noa19wcmVmaXgoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA2OS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjA3MDpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNzEtXHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5OD12b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4MzMtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI4MzQ6XHRpbjZfZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjgzNS1cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTMxMDY9c3RhdGljIGludCBpbmV0Nl9hZGRyX2RlbChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4LCB1MzIgaWZhX2ZsYWdzLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzEyNC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MzEyNTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMxMjYtXHRpZiAoIWlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM0ODI9c3RhdGljIHZvaWQgYWRkcmNvbmZfZGV2X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzQ5OS1cdFx0LyogQWxhcywgd2Ugc3VwcG9ydCBvbmx5IEV0aGVybmV0IGF1dG9jb25maWd1cmF0aW9uLiAqL1xubmV0L2lwdjYvYWRkcmNvbmYuYzozNTAwOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zNTAxLVx0XHRpZiAoIUlTX0VSUl9PUl9OVUxMKGlkZXYpIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM2Mzc9c3RhdGljIHZvaWQgYWRkcmNvbmZfcGVybWFuZW50X2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY0NS1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MzY0NjpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NDctXHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNjcxPXN0YXRpYyBpbnQgYWRkcmNvbmZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NzYtXHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm87XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM2Nzc6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjc4LVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Mzg1Nj1zdGF0aWMgdm9pZCBhZGRyY29uZl90eXBlX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg2MC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg2MTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4NjItXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zODc1PXN0YXRpYyBpbnQgYWRkcmNvbmZfaWZkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdW5yZWdpc3Rlcilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4ODktXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM4OTA6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zODkxLVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTQzMD1zdGF0aWMgaW50IGluZXQ2X2R1bXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NDY0LVx0XHRcdH1cbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ2NTpcdFx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy01NDY2LVx0XHRcdGlmIChpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ3NS1cdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ3NjpcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ3Ny1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTkwMD1zdGF0aWMgc2l6ZV90IGluZXQ2X2dldF9saW5rX2FmX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MDIte1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1OTAzOlx0aWYgKCFfX2luNl9kZXZfZ2V0KGRldikpXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MDQtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTkwOT1zdGF0aWMgaW50IGluZXQ2X2ZpbGxfbGlua19hZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTkxMS17XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU5MTI6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy01OTEzLVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjAzNT1zdGF0aWMgaW50IGluZXQ2X3ZhbGlkYXRlX2xpbmtfYWYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNDMtXHRpZiAoZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYwNDQ6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNDUtXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYwNjk9c3RhdGljIGludCBpbmV0Nl9zZXRfbGlua19hZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDcxLXtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjA3MjpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNzMtXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkxBX0lORVQ2X01BWCAmIzQzOyAxXTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYxNzE9c3RhdGljIGludCBpbmV0Nl9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02MTkzLVx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYxOTQ6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYxOTUtXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY0MTU9c3RhdGljIHZvaWQgYWRkcmNvbmZfZGlzYWJsZV9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBfX3MzMiBuZXdmKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjQyMC1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2NDIxOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NDIyLVx0XHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjUyND1zdGF0aWMgaW50IGFkZHJjb25mX3N5c2N0bF9hZGRyX2dlbl9tb2RlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU2OS1cdFx0XHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjU3MDpcdFx0XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NzEtXHRcdFx0XHRpZiAoaWRldiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1OTE9c3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfc3RhYmxlX3NlY3JldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY2MzctXHRcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2NjM4Olx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY2MzktXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02NzI2PWludCBhZGRyY29uZl9kaXNhYmxlX3BvbGljeShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCAqdmFscCwgaW50IHZhbClcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3NDQtXHRcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2NzQ1Olx0XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3NDYtXHRcdFx0aWYgKGlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02Nzc4PXN0YXRpYyB2b2lkIGFkZHJjb25mX2ZvcmNlX2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3Zilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3ODMtXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6Njc4NDpcdFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjc4NS1cdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTc2MjU9dm9pZCBhZGRyY29uZl9jbGVhbnVwKHZvaWQpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjM4LVx0Zm9yX2VhY2hfbmV0ZGV2KFx1MDAyNmluaXRfbmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzYzOTpcdFx0aWYgKCFfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldikpXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc2NDAtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jPTY3PWludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jLTEyNi1cbm5ldC9pcHY2L2FueWNhc3QuYzoxMjc6XHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FueWNhc3QuYy0xMjgtXHRpZiAoIWlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmM9NDMwPXN0YXRpYyBpbnQgaXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L2FueWNhc3QuYy00MzEte1xubmV0L2lwdjYvYW55Y2FzdC5jOjQzMjpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYW55Y2FzdC5jLTQzMy1cdGludCBlcnI7XG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jPTQ3MD1zdGF0aWMgYm9vbCBpcHY2X2Noa19hY2FzdF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYy00NzQtXG5uZXQvaXB2Ni9hbnljYXN0LmM6NDc1Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FueWNhc3QuYy00NzYtXHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz01Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWZhY2FkZHI2ICphYzZfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYy01NDUtXG5uZXQvaXB2Ni9hbnljYXN0LmM6NTQ2Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cdTAwM2VkZXYpO1xubmV0L2lwdjYvYW55Y2FzdC5jLTU0Ny1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz01NTY9c3RhdGljIHN0cnVjdCBpZmFjYWRkcjYgKmFjNl9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGlmYWNhZGRyNiAqaW0pXG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jLTU2NS1cdFx0XHRicmVhaztcbm5ldC9pcHY2L2FueWNhc3QuYzo1NjY6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9hbnljYXN0LmMtNTY3LVx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTI5Nj1zdGF0aWMgaW50IGlwdjZfZGVzdG9wdF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2V4dGhkcnMuYy0yOTcte1xubmV0L2lwdjYvZXh0aGRycy5jOjI5ODpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTI5OS1cdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTM4MS1cbm5ldC9pcHY2L2V4dGhkcnMuYzozODI6XHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODMtXHRpZiAoIWlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NDg4PXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy01MDEtXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTAyOlx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNTAzLVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz02NTU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvZXh0aGRycy5jLTY1Ni17XG5uZXQvaXB2Ni9leHRoZHJzLmM6NjU3Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNjU4LVx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz05MTI9c3RhdGljIGJvb2wgaXB2Nl9ob3BfaW9hbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy05MjYtXHQvKiBEb2VzIHRoZSBkZXZpY2Ugc3RpbGwgaGF2ZSBJUHY2IGNvbmZpZ3VyYXRpb24/ICovXG5uZXQvaXB2Ni9leHRoZHJzLmM6OTI3Olx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtOTI4LVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTQ3OT1zdGF0aWMgc3RydWN0IGluNl9hZGRyICppY21wNl9leHRfaWlvX2FkZHI2X2ZpbmQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pY21wLmMtNDgzLVxubmV0L2lwdjYvaWNtcC5jOjQ4NDpcdGluNl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9pY21wLmMtNDg1LVx0aWYgKCFpbjZfZGV2KVxuLS1cbm5ldC9pcHY2L2ljbXAuYz02MzY9dm9pZCBpY21wNl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8sXG4tLVxubmV0L2lwdjYvaWNtcC5jLTgxNS1cbm5ldC9pcHY2L2ljbXAuYzo4MTY6XHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2ljbXAuYy04MTctXG4tLVxubmV0L2lwdjYvaWNtcC5jPTkyMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X2VjaG9fcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pY21wLmMtMTAwMS1cbm5ldC9pcHY2L2ljbXAuYzoxMDAyOlx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9pY21wLmMtMTAwMy1cbi0tXG5uZXQvaXB2Ni9pY21wLmM9MTAzNz1lbnVtIHNrYl9kcm9wX3JlYXNvbiBpY21wdjZfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXG4tLVxubmV0L2lwdjYvaWNtcC5jLTEwOTItb3V0OlxubmV0L2lwdjYvaWNtcC5jOjEwOTM6XHRfX0lDTVA2X0lOQ19TVEFUUyhuZXQsIF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldiksIElDTVA2X01JQl9JTkVSUk9SUyk7XG5uZXQvaXB2Ni9pY21wLmMtMTA5NC1cdHJldHVybiByZWFzb247XG4tLVxubmV0L2lwdjYvaWNtcC5jPTExMDE9c3RhdGljIGludCBpY21wdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWNtcC5jLTExMDUtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWNtcDZfZGV2KHNrYik7XG5uZXQvaXB2Ni9pY21wLmM6MTEwNjpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9pY21wLmMtMTEwNy1cdHN0cnVjdCBpY21wNmhkciAqaGRyO1xuLS1cbm5ldC9pcHY2L2lvYW02LmM9NzA3PXN0YXRpYyB2b2lkIF9faW9hbTZfZmlsbF90cmFjZV9kYXRhKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaW9hbTYuYy03MjUtXG5uZXQvaXB2Ni9pb2FtNi5jOjcyNjpcdGlfc2tiX2RldiA9IHNrYi1cdTAwM2VkZXYgPyBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpIDogTlVMTDtcbm5ldC9pcHY2L2lvYW02LmM6NzI3Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2lvYW02LmMtNzI4LVxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTE4OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwNl9yY3ZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTIwMy1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjIwNDpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvaXA2X2lucHV0LmMtMjA1LVxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTU1ND1pbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTYxLVx0X19JUDZfVVBEX1BPX1NUQVRTKHNrYl9kc3RfZGV2X25ldF9yY3Uoc2tiKSxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjU2MjpcdFx0XHQgICBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpLCBJUFNUQVRTX01JQl9JTk1DQVNULFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTYzLVx0XHRcdCAgIHNrYi1cdTAwM2VsZW4pO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0yNjI9aW50IGlwNl9kc3RfaG9wbGltaXQoc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yNzAtXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MjcxOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTI3Mi1cdFx0aWYgKGlkZXYpXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTUxOT1pbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNTI5LVxubmV0L2lwdjYvaXA2X291dHB1dC5jOjUzMDpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIElQNkNCKHNrYiktXHUwMDNlaWlmKSk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNTMxLVx0aWYgKCFSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlZm9yd2FyZGluZykgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjYvaXA2bXIuYz03NDI9c3RhdGljIGludCBtaWY2X2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXG4tLVxubmV0L2lwdjYvaXA2bXIuYy03ODMtXG5uZXQvaXB2Ni9pcDZtci5jOjc4NDpcdGluNl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9pcDZtci5jLTc4NS1cdGlmIChpbjZfZGV2KSB7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz05MDY9c3RhdGljIGludCBtaWY2X2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtOTUyLVxubmV0L2lwdjYvaXA2bXIuYzo5NTM6XHRpbjZfZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvaXA2bXIuYy05NTQtXHRpZiAoaW42X2Rldikge1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9MjY0PXN0YXRpYyB2b2lkIF9faXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqbWNfbHN0KVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMjcwLVx0aWYgKGRldikge1xubmV0L2lwdjYvbWNhc3QuYzoyNzE6XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0yNzItXG4tLVxubmV0L2lwdjYvbWNhc3QuYz0zMTM9c3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwNl9tY19maW5kX2lkZXYoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMzIzLVxubmV0L2lwdjYvbWNhc3QuYzozMjQ6XHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L21jYXN0LmMtMzI1LVx0ZGV2X3B1dChkZXYpO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9OTMzPXN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTkzOS1cdC8qIHdlIG5lZWQgdG8gdGFrZSBhIHJlZmVyZW5jZSBvbiBpZGV2ICovXG5uZXQvaXB2Ni9tY2FzdC5jOjk0MDpcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy05NDEtXHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvbWNhc3QuYz0xMDIzPWludCBpcHY2X2Rldl9tY19kZWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMTAyNy1cbm5ldC9pcHY2L21jYXN0LmM6MTAyODpcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xMDI5LVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTA0Mj1ib29sIGlwdjZfY2hrX21jYXN0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cCxcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTEwNDktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9tY2FzdC5jOjEwNTA6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xMDUxLVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTQwMj12b2lkIGlnbXA2X2V2ZW50X3F1ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9tY2FzdC5jLTE0MDMte1xubmV0L2lwdjYvbWNhc3QuYzoxNDA0Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jLTE0MDUtXHRib29sIHB1dCA9IGZhbHNlO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTQyNj1zdGF0aWMgdm9pZCBfX21sZF9xdWVyeV93b3JrKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0xNDU3LVxubmV0L2lwdjYvbWNhc3QuYzoxNDU4Olx0aWRldiA9IGluNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xNDU5LVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTU4Mj12b2lkIGlnbXA2X2V2ZW50X3JlcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvbWNhc3QuYy0xNTgzLXtcbm5ldC9pcHY2L21jYXN0LmM6MTU4NDpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xNTg1LVx0Ym9vbCBwdXQgPSBmYWxzZTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTE2MDY9c3RhdGljIHZvaWQgX19tbGRfcmVwb3J0X3dvcmsoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTE2MzItXG5uZXQvaXB2Ni9tY2FzdC5jOjE2MzM6XHRpZGV2ID0gaW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jLTE2MzQtXHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvbWNhc3QuYz0xODMwPXN0YXRpYyB2b2lkIG1sZF9zZW5kcGFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMTg0Mi1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L21jYXN0LmM6MTg0MzpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xODQ0LVx0SVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTIxNzQ9c3RhdGljIHZvaWQgaWdtcDZfc2VuZChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMjIwNS1cdG5ldCA9IGRldl9uZXRfcmN1KGRldik7XG5uZXQvaXB2Ni9tY2FzdC5jOjIyMDY6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0yMjA3LVx0SVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTI4NDU9dm9pZCBpcHY2X21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yODU4LVx0LyogV2UgY2Fubm90IGNhbGwgaXB2Nl9kZXZfbWNfZGVjKCkgZGlyZWN0bHksIG91ciBjYWxsZXIgaW5cbm5ldC9pcHY2L21jYXN0LmM6Mjg1OTpcdCAqIGFkZHJjb25mLmMgaGFzIE5VTEwmIzM5O2Qgb3V0IGRldi1cdTAwM2VpcDZfcHRyIHNvIGluNl9kZXZfZ2V0KCkgd2lsbFxubmV0L2lwdjYvbWNhc3QuYy0yODYwLVx0ICogZmFpbC5cbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTI4OTE9c3RhdGljIGludCBpcHY2X21jX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yODk1LVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xubmV0L2lwdjYvbWNhc3QuYzoyODk2Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L21jYXN0LmMtMjg5Ny1cbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTI5MjM9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWZtY2FkZHI2ICppZ21wNl9tY19nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yOTMxLVx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xubmV0L2lwdjYvbWNhc3QuYzoyOTMyOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0yOTMzLVx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvbWNhc3QuYz0yOTQ1PXN0YXRpYyBzdHJ1Y3QgaWZtY2FkZHI2ICppZ21wNl9tY19nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGlmbWNhZGRyNiAqaW0pXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yOTU1LVx0XHR9XG5uZXQvaXB2Ni9tY2FzdC5jOjI5NTY6XHRcdHN0YXRlLVx1MDAzZWlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jLTI5NTctXHRcdGlmICghc3RhdGUtXHUwMDNlaWRldilcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTMwMzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaXA2X3NmX2xpc3QgKmlnbXA2X21jZl9nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0zMDQyLVx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xubmV0L2lwdjYvbWNhc3QuYzozMDQzOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0zMDQ0LVx0XHRpZiAodW5saWtlbHkoaWRldiA9PSBOVUxMKSlcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTMwNjA9c3RhdGljIHN0cnVjdCBpcDZfc2ZfbGlzdCAqaWdtcDZfbWNmX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaXA2X3NmX2xpc3QgKnBzZilcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTMwNzItXHRcdFx0fVxubmV0L2lwdjYvbWNhc3QuYzozMDczOlx0XHRcdHN0YXRlLVx1MDAzZWlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jLTMwNzQtXHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VpZGV2KVxuLS1cbm5ldC9pcHY2L25kaXNjLmM9MzI1PXN0YXRpYyBpbnQgbmRpc2NfY29uc3RydWN0b3Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0zMzItXG5uZXQvaXB2Ni9uZGlzYy5jOjMzMzpcdGluNl9kZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbmRpc2MuYy0zMzQtXHRpZiAoIWluNl9kZXYpIHtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTQwMD1zdGF0aWMgYm9vbCBuZGlzY19hbGxvd19hZGQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTQwMi17XG5uZXQvaXB2Ni9uZGlzYy5jOjQwMzpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTQwNC1cbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTQ0MD1zdGF0aWMgdm9pZCBpcDZfbmRfaGRyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvbmRpc2MuYy00NDktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9uZGlzYy5jOjQ1MDpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbmRpc2MuYy00NTEtXHR0Y2xhc3MgPSBpZGV2ID8gUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLm5kaXNjX3RjbGFzcykgOiAwO1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9NDY4PXZvaWQgbmRpc2Nfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTUwOC1cdGRldiA9IGRzdF9kZXZfcmN1KGRzdCk7XG5uZXQvaXB2Ni9uZGlzYy5jOjUwOTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTUxMC1cdElQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz01ODE9c3RhdGljIHZvaWQgbmRpc2Nfc2VuZF91bnNvbF9uYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtNTg1LVxubmV0L2lwdjYvbmRpc2MuYzo1ODY6XHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L25kaXNjLmMtNTg3LVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L25kaXNjLmM9Nzg4PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X25zKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy04OTUtXG5uZXQvaXB2Ni9uZGlzYy5jOjg5NjpcdFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTg5Ny1cdFx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz05ODc9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JlY3ZfbmEoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTk5Ni1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItXHUwMDNlZGV2O1xubmV0L2lwdjYvbmRpc2MuYzo5OTc6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbmRpc2MuYy05OTgtXHRzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xMTI2PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X3JzKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xMTM5LVxubmV0L2lwdjYvbmRpc2MuYzoxMTQwOlx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTExNDEtXHRpZiAoIWlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTEyNjctXG5uZXQvaXB2Ni9uZGlzYy5jOjEyNjg6XHRpbjZfZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L25kaXNjLmMtMTI2OS1cdGlmICghaW42X2Rldikge1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTc5MT1zdGF0aWMgYm9vbCBuZGlzY19zdXBwcmVzc19mcmFnX25kaXNjKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9uZGlzYy5jLTE3OTIte1xubmV0L2lwdjYvbmRpc2MuYzoxNzkzOlx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTE3OTQtXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xODU2PXN0YXRpYyBpbnQgbmRpc2NfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTg2OS1cdGNhc2UgTkVUREVWX1VQOlxubmV0L2lwdjYvbmRpc2MuYzoxODcwOlx0XHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L25kaXNjLmMtMTg3MS1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTg3OC1cdGNhc2UgTkVUREVWX0NIQU5HRTpcbm5ldC9pcHY2L25kaXNjLmM6MTg3OTpcdFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTE4ODAtXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTE5Mjk9aW50IG5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xOTUzLVxubmV0L2lwdjYvbmRpc2MuYzoxOTU0Olx0aWYgKHdyaXRlIFx1MDAyNlx1MDAyNiByZXQgPT0gMCBcdTAwMjZcdTAwMjYgZGV2IFx1MDAyNlx1MDAyNiAoaWRldiA9IGluNl9kZXZfZ2V0KGRldikpICE9IE5VTEwpIHtcbm5ldC9pcHY2L25kaXNjLmMtMTk1NS1cdFx0aWYgKGN0bC1cdTAwM2VkYXRhID09IE5FSUdIX1ZBUl9QVFIoaWRldi1cdTAwM2VuZF9wYXJtcywgQkFTRV9SRUFDSEFCTEVfVElNRSkpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY2LmM9MTA9bmZfdHByb3h5X2xhZGRyNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnVzZXJfbGFkZHIsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY2LmMtMjAtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfdHByb3h5X2lwdjYuYzoyMTpcdGluZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L25ldGZpbHRlci9uZl90cHJveHlfaXB2Ni5jLTIyLVx0aWYgKGluZGV2KSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0xNjA9c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0xNzctXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFJlZmNvdW50IEJ1ZyBGaXgqKgoKT2theSwgc28gdGhpcyBgaW42X2Rldl9nZXRgIGZ1bmN0aW9uIGlzIGFwcGFyZW50bHkgYSByZWFsIHdvcmtob3JzZSBpbiB0aGUgSVB2NiBuZXR3b3JraW5nIHN0YWNrLiBJIGtuZXcgaXQgd2FzIGhlYXZpbHkgdXNlZCwgYnV0IG5vdyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgcmVmY291bnQgYnVnIGZpeC4gVGhlIHRyaWNreSBwYXJ0LCBhcyB1c3VhbCwgaXMgdGhhdCBgaW42X2Rldl9nZXRgIGlzIGlubGluZWQg4oCTIGl0IGRvZXNuJiMzOTt0IGhhdmUgaXRzIG93biBzeW1ib2wuIFRoYXQgbWVhbnMgSSYjMzk7bGwgaGF2ZSB0byBsb29rIHVwc3RyZWFtIHRvIHRoZSBmdW5jdGlvbnMgdGhhdCAqY2FsbCogaXQuCgpTaW5jZSBteSBmb2N1cyBpcyBvbiB1c2VyLXNwYWNlIGltcGFjdCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjYWxsIHNpdGVzIHRoYXQgYXJlIGV4cG9zZWQgdmlhIHRoZSBzeXN0ZW0gY2FsbHMgYW5kIGlvY3RscyBhbmQgbmV0bGluaywgYW5kIHNvIG9uLiBMZXQmIzM5O3MgbWFrZSBhIGxpc3QuIGBpcHY2X3NvY2tfYWNfam9pbmAsIGBpcHY2X2Rldl9hY19kZWNgLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAsIGFuZCBhbGwgdGhlIE5ESVNDLXJlbGF0ZWQgY2FsbHMsIGxpa2UgYG5kaXNjX2NvbnN0cnVjdG9yYCwgYG5kaXNjX3NlbmRfdW5zb2xfbmFgLCBgbmRpc2NfcmVjdl9uc2AsIGBuZGlzY19uZXRkZXZfZXZlbnRgLCBhbmQgYG5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlYC4gSXQmIzM5O3MgYSBsb25nIGxpc3QsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gZmluZCB0aGUgcmlnaHQgY2FuZGlkYXRlcy4KCk5vdywgYmVjYXVzZSBgaW42X2Rldl9nZXRgIGlzIGNhbGxlZCAqZXZlcnl3aGVyZSogaW4gdGhlIElQdjYgc3RhY2ssIEkgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IGxvc3QgaW4gYSBmb3Jlc3Qgb2YgY29kZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgZnVuY3Rpb25zIHRoYXQgbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlczogYGlwdjZfc29ja19hY19qb2luYCBhbmQgYGlwdjZfc29ja19hY19kcm9wYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSB0aGUgc291cmNlIG9mIHRoZSByZWZjb3VudCBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zb2NrX2FjX2pvaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zMDQ9dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDktICovXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMxMDppbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzExLVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz01NT1zdGF0aWMgdTMyIGluZXQ2X2FjYWRkcl9oYXNoKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmMtNjYtXG5uZXQvaXB2Ni9hbnljYXN0LmM6Njc6aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L2FueWNhc3QuYy02OC17XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODkyLVx0XHRpZiAob3B0bmFtZSA9PSBJUFY2X0pPSU5fQU5ZQ0FTVClcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo4OTM6XHRcdFx0cmV0diA9IGlwdjZfc29ja19hY19qb2luKHNrLCBtcmVxLmlwdjZtcl9pZmluZGV4LCBcdTAwMjZtcmVxLmlwdjZtcl9hY2FkZHIpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg5NC1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODA4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRXhhbWluaW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkqKgoKQWxyaWdodCwgc28gYGlwdjZfc29ja19hY19qb2luYCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGBJUFY2X0pPSU5fQU5ZQ0FTVGAgb3B0aW9uIGlzIHVzZWQuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmcg4oCTIGRpcmVjdCB1c2Vyc3BhY2UgYWNjZXNzIGlzIGEgY2xhc3NpYyBlbnRyeSBwb2ludC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIGxvb2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgJiMzNDtkcm9wJiMzNDsgZnVuY3Rpb24sIGBpcHY2X3NvY2tfYWNfZHJvcGAuIFVuZGVyc3RhbmRpbmcgdGhlIGRyb3AgcGF0aCBpcyBqdXN0IGFzIGNydWNpYWwuIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIGhhbmRsaW5nIG9yIGNsZWFudXAgbG9naWMgbGl2ZXMg4oCTIGFuZCB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgdGVuZCB0byBoaWRlIGlmIG5vdCBwcm9wZXJseSBoYW5kbGVkLiBHb3R0YSBzZWUgaWYgdGhlIGRyb3AgcGF0aCBoYXMgc2ltaWxhciBmbGF3cywgb3IgaWYgb25lIHBhdGggaXMgbW9yZSBwcm9ibGVtYXRpYyB0aGFuIHRoZSBvdGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zb2NrX2FjX2Ryb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zMTA9aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMxMS1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MzEyOmludCBpcHY2X3NvY2tfYWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMTMtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jPTY3PWludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jLTE3Mi0gKi9cbm5ldC9pcHY2L2FueWNhc3QuYzoxNzM6aW50IGlwdjZfc29ja19hY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L2FueWNhc3QuYy0xNzQte1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg5NC1cdFx0ZWxzZVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjg5NTpcdFx0XHRyZXR2ID0gaXB2Nl9zb2NrX2FjX2Ryb3Aoc2ssIG1yZXEuaXB2Nm1yX2lmaW5kZXgsIFx1MDAyNm1yZXEuaXB2Nm1yX2FjYWRkcik7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODk2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0OTEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVGFyZ2V0aW5nIElQdjYgU29ja2V0IE9wdGlvbnMgZm9yIEFuYWx5c2lzKioKClJpZ2h0LCBzbyBgaXB2Nl9zb2NrX2FjX2Ryb3BgLCB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQuIFdlIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCwgc3BlY2lmaWNhbGx5IGZvciBgSVBWNl9MRUFWRV9BTllDQVNUYC4gVGhvc2UgdHdvIGZ1bmN0aW9ucywgYGlwdjZfc29ja19hY19kcm9wYCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAsIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGluc3BlY3Rpb24uICBXZSBzaG91bGQgYmUgYWJsZSB0byBkaWcgdXAgc29tZXRoaW5nIGludGVyZXN0aW5nLgoKTGV0JiMzOTtzIG5vdCBzdG9wIHRoZXJlLCB0aG91Z2guIFdlIGFsc28gbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFuZCBgaW5ldDZfbmV0Y29uZl9kdW1wX2RldmNvbmZgLiBUaGF0JiMzOTtsbCBwcm92aWRlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuIEl0JiMzOTtzIGFib3V0IHB1bGxpbmcgdG9nZXRoZXIgYWxsIHRoZSBwaWVjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYz02MTg9c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX3ZhbGlkX2dldF9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1Ni1cbm5ldC9pcHY2L2FkZHJjb25mLmM6NjU3OnN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NTgtXHRcdFx0XHQgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NzUzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgYWRkcmNvbmZfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NTUxLVx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVUQ09ORixcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzU1MjpcdCAuZG9pdCA9IGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmYsIC5kdW1waXQgPSBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZixcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzU1My1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMDEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSVB2NiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBuZXRsaW5rIGhhbmRsZXJzLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAgYW5kIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAuIFRoZXkmIzM5O3JlIHRoZSBnby10byBmdW5jdGlvbnMgZm9yIHJldHJpZXZpbmcgYW5kIGR1bXBpbmcgSVB2NiBkZXZpY2UgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTtyZSBkb2luZyBvbiB0aGUgaW5zaWRlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGF0IGRhdGEgaXMgZXhwb3NlZCBpcyBrZXkuCgpHaXZlbiBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29ya2luZyBzdHVmZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgZHVyaW5nIG5laWdoYm9yIGRpc2NvdmVyeSwgYW5kIHRvIHRoYXQgZW5kLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBob3cgYG5kaXNjX3NlbmRfdW5zb2xfbmFgIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB1bnNvbGljaXRlZCBuZWlnaGJvciBhZHZlcnRpc2VtZW50cyBhcmUgYmVpbmcgaGFuZGxlZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhpcyBjb25maWd1cmF0aW9uIGNvbnRleHQuIEl0JiMzOTtsbCBnaXZlIG1lIGEgdmlldyBpbnRvIGhvdyBvdGhlciBub2RlcyBhcmUgdXBkYXRlZCB3aXRoIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmRpc2Nfc2VuZF91bnNvbF9uYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZGlzYy5jPTU3OT1FWFBPUlRfU1lNQk9MX0dQTChuZGlzY19zZW5kX25hKTtcbm5ldC9pcHY2L25kaXNjLmMtNTgwLVxubmV0L2lwdjYvbmRpc2MuYzo1ODE6c3RhdGljIHZvaWQgbmRpc2Nfc2VuZF91bnNvbF9uYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjYvbmRpc2MuYy01ODIte1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTg1Nj1zdGF0aWMgaW50IG5kaXNjX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE4NzQtXHRcdCAgICBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlbmRpc2Nfbm90aWZ5KSlcbm5ldC9pcHY2L25kaXNjLmM6MTg3NTpcdFx0XHRuZGlzY19zZW5kX3Vuc29sX25hKGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTE4NzYtXHRcdGluNl9kZXZfcHV0KGlkZXYpO1xuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTg5OC1cdGNhc2UgTkVUREVWX05PVElGWV9QRUVSUzpcbm5ldC9pcHY2L25kaXNjLmM6MTg5OTpcdFx0bmRpc2Nfc2VuZF91bnNvbF9uYShkZXYpO1xubmV0L2lwdjYvbmRpc2MuYy0xOTAwLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2ODkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBzcGVha2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipOZXR3b3JrIEludGVyZmFjZSBFdmVudCBIYW5kbGluZyAtIEEgUXVpY2sgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBuZXR3b3JrIGludGVyZmFjZSBldmVudHMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbi4gSSBrbm93IHRoYXQgYG5kaXNjX3NlbmRfdW5zb2xfbmFgIGdldHMgdHJpZ2dlcmVkIHdoZW4gY2VydGFpbiBuZXR3b3JrIGRldmljZSBldmVudHMgb2NjdXIuIFRoYXQmIzM5O3MgZmFpcmx5IGNsZWFyLiBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gYXJpc2VzOiBXaGF0IGFib3V0IGBhZGRyY29uZl9wcmVmaXhfcmN2YD8gRG9lcyB0aGF0IG1ldGhvZCBnZXQgY2FsbGVkIG9uIHRob3NlIHNhbWUgZXZlbnRzPyBBcmUgdGhleSBjYWxsZWQgYXQgYWxsLCBvciBhcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmU/IERvZXMgb25lIHRyaWdnZXIgdGhlIG90aGVyPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBldmVudCBoYW5kbGluZyB3b3JrZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9hZGRyY29uZi5oPTE1Mz12b2lkIGFkZHJjb25mX2FkZF9saW5rbG9jYWwoc3RydWN0IGluZXQ2X2RldiAqaWRldixcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTE1NS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MTU2OmludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU3LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0yODI9c3RhdGljIGlubGluZSBib29sIGlwdjZfaXNfbWxkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBpbnQgb2Zmc2V0KVxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzAzLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozMDQ6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMwNS1cdFx0XHQgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbyk7XG4tLVxubmV0LzZsb3dwYW4vbmRpc2MuYz0xODg9c3RhdGljIHZvaWQgbG93cGFuX25kaXNjX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC82bG93cGFuL25kaXNjLmMtMjAzLVx0ICAgICFhZGRyY29uZl9pZmlkXzgwMjE1NF82bG93cGFuKGFkZHItXHUwMDNlczZfYWRkciAmIzQzOyA4LCBkZXYpKSB7XG5uZXQvNmxvd3Bhbi9uZGlzYy5jOjIwNDpcdFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXG5uZXQvNmxvd3Bhbi9uZGlzYy5jLTIwNS1cdFx0XHRcdFx0XHQgICBhZGRyLCBhZGRyX3R5cGUsIGFkZHJfZmxhZ3MsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0xMzY5PXN0YXRpYyBpbnQgaXB2Nl9jcmVhdGVfdGVtcGFkZHIoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwLCBib29sIGJsb2NrKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMTQ4My1cdGNmZy5pZmFfZmxhZ3MgPSBJRkFfRl9URU1QT1JBUlk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE0ODQ6XHQvKiBzZXQgaW4gYWRkcmNvbmZfcHJlZml4X3JjdigpICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODUtXHRpZiAoaWZwLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkFfRl9PUFRJTUlTVElDKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjY4OT1zdGF0aWMgYm9vbCBpc19hZGRyX21vZGVfZ2VuZXJhdGVfc3RhYmxlKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNjk0LVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNjk1OmludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5Ni1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5NS19XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTY6RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTg6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTkte1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0Mi1vazpcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjk0MzpcdFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDQtXHRcdFx0XHRcdFx0ICAgXHUwMDI2YWRkciwgYWRkcl90eXBlLFxuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTU0Ni1cdFx0ICAgICBwID0gbmRpc2NfbmV4dF9vcHRpb24ocCwgbmRvcHRzLm5kX29wdHNfcGlfZW5kKSkge1xubmV0L2lwdjYvbmRpc2MuYzoxNTQ3Olx0XHRcdGFkZHJjb25mX3ByZWZpeF9yY3Yoc2tiLVx1MDAzZWRldiwgKHU4ICopcCxcbm5ldC9pcHY2L25kaXNjLmMtMTU0OC1cdFx0XHRcdFx0ICAgIChwLVx1MDAzZW5kX29wdF9sZW4pIFx1MDAzY1x1MDAzYyAzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkyNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgUHJvbWlzaW5nIElQdjYgTmV0d29yayBQYWNrZXQgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhZGRyY29uZl9wcmVmaXhfcmN2YC4gVGhhdCYjMzk7cyBpZGVhbC4gSXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCB3aGljaCBpcyBpdHNlbGYgdHJpZ2dlcmVkIGJ5IGluY29taW5nIHJvdXRlciBhZHZlcnRpc2VtZW50cy4gTWVhbmluZywgaXQmIzM5O3MgcmVhY3RpbmcgZGlyZWN0bHkgdG8gbmV0d29yayBwYWNrZXRzIOKAkyB0aGF0JiMzOTtzIHRoZSBraW5kIG9mIGVudHJ5IHBvaW50IEkgd2FudCB0byBleGFtaW5lLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgd29ydGggZGlnZ2luZyBpbnRvLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBpcHY2X3NvY2tfYWNfam9pbmAsIGBpcHY2X3NvY2tfYWNfZHJvcGAsIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCwgYGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgICh3aGljaCB3ZSBhbHJlYWR5IGtub3cgaXMgaW50ZXJlc3RpbmcpLCBgbmRpc2NfcmVjdl9uc2AsIGBuZGlzY19yZWN2X25hYCwgYW5kIGBuZGlzY19yZWN2X3JzYC4gWWVwLCBhbGwgb2YgdGhlc2UgbG9vayBsaWtlIGV4Y2VsbGVudCB0YXJnZXRzLiBUaGV5JiMzOTtyZSBhbGwgaGFuZGxpbmcgb3IgcmVhY3RpbmcgdG8gbmV0d29yay1sZXZlbCBldmVudHMsIGdpdmluZyBtZSBhIHNvbGlkIGJhc2lzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQganVzdCB2ZXJpZnkgdGhlIHByZXJlcXVpc2l0ZXMuIEkmIzM5O20gYXNzdW1pbmcgSVB2NiBpcyBlbmFibGVkIGJ5IGBDT05GSUdfSVBWNmAsIHNvIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhhdCB0byBtYWtlIHN1cmUgSSBhbSB3b3JraW5nIHdpdGggYSBjb3JyZWN0bHkgY29uZmlndXJlZCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZy01LVxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtUaGUgSVB2NiBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy0yMC1cbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbm5ldC9pcHY2L0tjb25maWctMjItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzgtXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTktXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcbm5ldC9pcHY2L0tjb25maWctMTIxLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcbm5ldC9pcHY2L0tjb25maWctMTUxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTk1LVxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbm5ldC9pcHY2L0tjb25maWctMTk3LVx0Ym9vbFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDktXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcbm5ldC9pcHY2L0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjI3LVxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjQyLVxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcbm5ldC9pcHY2L0tjb25maWctMjQ0LVx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjc4LVxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcbm5ldC9pcHY2L0tjb25maWctMjgwLVx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjk5LVxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzExLVxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcbm5ldC9pcHY2L0tjb25maWctMzEzLVx0ZGVmX2Jvb2wgeVxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMjctXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXHRib29sIFwmIzM0O0lQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTkzNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM1OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGluNl9kZXZfZ2V0YCBVc2FnZSB3aXRoaW4gdGhlIElQdjYgU3RhY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIGluY29ycG9yYXRlIGBJUFY2YCBpbnRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgaW42X2Rldl9nZXRgLCB3aGljaCBpcyBhIGZ1bmRhbWVudGFsIElQdjYgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgcGFydGljdWxhcmx5IHdoZXJlIGBpbjZfZGV2X2dldGAgaXMgY2FsbGVkLgoKTXkgaW52ZXN0aWdhdGlvbiBoYXMgY29uZmlybWVkIHRoYXQgYGluNl9kZXZfZ2V0YCBpcyBjYWxsZWQgZGlyZWN0bHkgaW4gbXVsdGlwbGUgaW1wb3J0YW50IGZ1bmN0aW9ucy4gVGhlc2UgaW5jbHVkZSBgaXB2Nl9zb2NrX2FjX2pvaW5gLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3Igam9pbmluZyBhbnljYXN0IHNvY2tldHMsIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCB3aGljaCBkZWFscyB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHRoYXQgaXMgdXNlZCB0byBwcm9jZXNzIHByZWZpeCBpbmZvcm1hdGlvbi4gVGhlc2UgYXJlIGFsbCBnb29kIHRhcmdldHMgdG8gdGVzdC4gRnVydGhlcm1vcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgcmVsZXZhbnQgdXNlcyBvZiBgaW42X2Rldl9nZXRgLiBgbmRpc2NfcmVjdl9uc2AgaW4gdGhlIG5laWdoYm9yIGRpc2NvdmVyeSBjb2RlIGFsc28gdXNlcyBpdCBkaXJlY3RseS4KCkFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGBfX2luNl9kZXZfZ2V0YCBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaW5zdGFuY2VzIG9mIHRoaXMgaW4gdGhlIGNvZGUuIEkgYW0gdGhpbmtpbmcgb2YgYGFkZHJjb25mX25vdGlmeWAgYW5kIGBhZGRyY29uZl9pZmRvd25gIGFzIHdlbGwuIEluIGFkZGl0aW9uLCBgaXB2Nl9kZXZfbWNfZGVjYCwgYGlwdjZfZGV2X21jX2luY2AsIGBfX2lwdjZfZGV2X21jX2luY2AsIGBpZ21wNl9ldmVudF9xdWVyeWAsIGBpZ21wNl9ldmVudF9yZXBvcnRgIGFuZCBgbWxkX3NlbmRwYWNrYCBhbGwgdXNlcyBgX19pbjZfZGV2X2dldGAuCgpTbywgdG8gYmUgdmVyeSB0aG9yb3VnaCwgSSB3aWxsIGFkZCBgaXB2Nl9zb2NrX2FjX2pvaW5gLCBgbmRpc2NfcmVjdl9uc2AsIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgaXB2Nl9kZXZfbWNfZGVjYCBhbmQgYF9faXB2Nl9kZXZfbWNfaW5jYCB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0IHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFyZSBmdWxseSBhc3Nlc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9kZXZfbWNfaW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2FkZHJjb25mLmg9MjU5PWJvb2wgaW5ldDZfbWNfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm1jX2FkZHIsXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNjEtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI2MjppbnQgaXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTI2My1pbnQgX19pcHY2X2Rldl9tY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyMzM9c3RhdGljIHZvaWQgYnJfaXA2X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMzctXHRpcHY2X2FkZHJfc2V0KFx1MDAyNmFkZHIsIGh0b25sKDB4ZmYwMjAwMDApLCAwLCAwLCBodG9ubCgweDZhKSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQyMzg6XHRpcHY2X2Rldl9tY19pbmMoYnItXHUwMDNlZGV2LCBcdTAwMjZhZGRyKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDIzOS19XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNzc9c3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwdjZfYWRkX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNDcxLVx0XHQvKiBKb2luIGludGVyZmFjZS1sb2NhbCBhbGwtbm9kZSBtdWx0aWNhc3QgZ3JvdXAgKi9cbm5ldC9pcHY2L2FkZHJjb25mLmM6NDcyOlx0XHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcdTAwMjZpbjZhZGRyX2ludGVyZmFjZWxvY2FsX2FsbG5vZGVzKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDczLVxubmV0L2lwdjYvYWRkcmNvbmYuYy00NzQtXHRcdC8qIEpvaW4gYWxsLW5vZGUgbXVsdGljYXN0IGdyb3VwICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjQ3NTpcdFx0aXB2Nl9kZXZfbWNfaW5jKGRldiwgXHUwMDI2aW42YWRkcl9saW5rbG9jYWxfYWxsbm9kZXMpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy00NzYtXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy00NzgtXHRcdGlmIChuZGV2LVx1MDAzZWNuZi5mb3J3YXJkaW5nIFx1MDAyNlx1MDAyNiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTVVMVElDQVNUKSlcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDc5Olx0XHRcdGlwdjZfZGV2X21jX2luYyhkZXYsIFx1MDAyNmluNmFkZHJfbGlua2xvY2FsX2FsbHJvdXRlcnMpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy00ODAtXHR9XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz04MDY9c3RhdGljIHZvaWQgZGV2X2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy04MTgtXHRcdGlmIChpZGV2LVx1MDAzZWNuZi5mb3J3YXJkaW5nKSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjgxOTpcdFx0XHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcdTAwMjZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6ODIwOlx0XHRcdGlwdjZfZGV2X21jX2luYyhkZXYsIFx1MDAyNmluNmFkZHJfaW50ZXJmYWNlbG9jYWxfYWxscm91dGVycyk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjgyMTpcdFx0XHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcdTAwMjZpbjZhZGRyX3NpdGVsb2NhbF9hbGxyb3V0ZXJzKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtODIyLVx0XHR9IGVsc2Uge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjI1ND12b2lkIGFkZHJjb25mX2pvaW5fc29saWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyNjEtXHRhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KGFkZHIsIFx1MDAyNm1hZGRyKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjI2MjpcdGlwdjZfZGV2X21jX2luYyhkZXYsIFx1MDAyNm1hZGRyKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjI2My19XG4tLVxubmV0L2lwdjYvbWNhc3QuYz05MT1zdGF0aWMgaW50IGlwNl9tY19sZWF2ZV9zcmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqaW1sLFxubmV0L2lwdjYvbWNhc3QuYy05Mi1cdFx0XHQgICAgc3RydWN0IGluZXQ2X2RldiAqaWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jOjkzOnN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L21jYXN0LmMtOTQtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHVuc2lnbmVkIGludCBtb2RlKTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTE5OD1zdGF0aWMgaW50IF9faXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTIzMy1cdC8qIG5vdyBhZGQvaW5jcmVhc2UgdGhlIGdyb3VwIG1lbWJlcnNoaXAgb24gdGhlIGRldmljZSAqL1xubmV0L2lwdjYvbWNhc3QuYzoyMzQ6XHRlcnIgPSBfX2lwdjZfZGV2X21jX2luYyhkZXYsIGFkZHIsIG1vZGUpO1xubmV0L2lwdjYvbWNhc3QuYy0yMzUtXG4tLVxubmV0L2lwdjYvbWNhc3QuYz04OTQ9c3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy05MzItICovXG5uZXQvaXB2Ni9tY2FzdC5jOjkzMzpzdGF0aWMgaW50IF9faXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2Ni9tY2FzdC5jLTkzNC1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy05NzktXG5uZXQvaXB2Ni9tY2FzdC5jOjk4MDppbnQgaXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L21jYXN0LmMtOTgxLXtcbm5ldC9pcHY2L21jYXN0LmM6OTgyOlx0cmV0dXJuIF9faXB2Nl9kZXZfbWNfaW5jKGRldiwgYWRkciwgTUNBU1RfRVhDTFVERSk7XG5uZXQvaXB2Ni9tY2FzdC5jLTk4My19XG5uZXQvaXB2Ni9tY2FzdC5jOjk4NDpFWFBPUlRfU1lNQk9MKGlwdjZfZGV2X21jX2luYyk7XG5uZXQvaXB2Ni9tY2FzdC5jLTk4NS1cbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTM3Mz1zdGF0aWMgaW50IHBuZGlzY19jb25zdHJ1Y3RvcihzdHJ1Y3QgcG5laWdoX2VudHJ5ICpuKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMzgyLVx0YWRkcmNvbmZfYWRkcl9zb2xpY3RfbXVsdChhZGRyLCBcdTAwMjZtYWRkcik7XG5uZXQvaXB2Ni9uZGlzYy5jOjM4MzpcdHJldHVybiBpcHY2X2Rldl9tY19pbmMoZGV2LCBcdTAwMjZtYWRkcik7XG5uZXQvaXB2Ni9uZGlzYy5jLTM4NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTM5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIElQdjYgTXVsdGljYXN0IEpvaW4gT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBpbnRlcm5hbHMgb2YgSVB2NiBtdWx0aWNhc3Qgam9pbnMsIHNwZWNpZmljYWxseSwgdGhlIGBfX2lwdjZfc29ja19tY19qb2luYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhhdCBmdW5jdGlvbiBjYWxscyBgX19pcHY2X2Rldl9tY19pbmNgLCBhbmQgdGhhdCwgaW4gdHVybiwgY2FsbHMgYGluNl9kZXZfZ2V0YC4gVGhhdCB3aG9sZSBmbG93IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiBgaXB2Nl9zb2NrX21jX2pvaW5gIGl0c2VsZiBsb29rcyBsaWtlIGEgbGlrZWx5IHRhcmdldCB0byBleHBsb3JlIGZ1cnRoZXIuIEkgdGhpbmsgSSYjMzk7bGwgZm9jdXMgb24gYGlwdjZfc29ja19tY19qb2luYC4gTGV0JiMzOTtzIGNoZWNrIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X3NvY2tfbWNfam9pbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYz0xNz1pbnQgdnhsYW5faWdtcF9qb2luKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCB1bmlvbiB2eGxhbl9hZGRyICpyaXAsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNDEtXHRcdGxvY2tfc29jayhzayk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzo0MjpcdFx0cmV0ID0gaXB2Nl9zb2NrX21jX2pvaW4oc2ssIGlmaW5kZXgsIFx1MDAyNmlwLVx1MDAzZXNpbjYuc2luNl9hZGRyKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTQzLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MjQ0PXN0YXRpYyBpbmxpbmUgYm9vbCBpcHY2X21jX21heV9wdWxsKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNTItXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI1MzppbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMjU0LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xuLS1cbmluY2x1ZGUvbmV0L2lwdjYuaD0xMjI3PXZvaWQgaXB2Nl9zeXNjdGxfdW5yZWdpc3Rlcih2b2lkKTtcbi0tXG5pbmNsdWRlL25ldC9pcHY2LmgtMTIyOS1cbmluY2x1ZGUvbmV0L2lwdjYuaDoxMjMwOmludCBpcHY2X3NvY2tfbWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMzEtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG5pbmNsdWRlL25ldC9pcHY2Lmg6MTIzMjppbnQgaXB2Nl9zb2NrX21jX2pvaW5fc3NtKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXG5pbmNsdWRlL25ldC9pcHY2LmgtMTIzMy1cdFx0XHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MzAxNj1zdGF0aWMgaW50IGlwdjZfbWNfY29uZmlnKHN0cnVjdCBzb2NrICpzaywgYm9vbCBqb2luLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzAyNC1cdGlmIChqb2luKVxubmV0L2lwdjYvYWRkcmNvbmYuYzozMDI1Olx0XHRyZXQgPSBpcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkcik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMwMjYtXHRlbHNlXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTE0Nj1zdGF0aWMgaW50IGRvX2lwdjZfbWNhc3RfZ3JvdXBfc291cmNlKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTE3MS1cdFx0cHNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKVx1MDAyNmdyZXFzLmdzcl9ncm91cDtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxNzI6XHRcdHJldHYgPSBpcHY2X3NvY2tfbWNfam9pbl9zc20oc2ssIGdyZXFzLmdzcl9pbnRlcmZhY2UsXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTczLVx0XHRcdFx0XHQgICAgIFx1MDAyNnBzaW42LVx1MDAzZXNpbjZfYWRkcixcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MjYyPXN0YXRpYyBpbnQgaXB2Nl9tY2FzdF9qb2luX2xlYXZlKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3Ni1cdGlmIChvcHRuYW1lID09IE1DQVNUX0pPSU5fR1JPVVApXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mjc3Olx0XHRyZXR1cm4gaXB2Nl9zb2NrX21jX2pvaW4oc2ssIGdyZXEuZ3JfaW50ZXJmYWNlLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3OC1cdFx0XHRcdFx0IFx1MDAyNnBzaW42LVx1MDAzZXNpbjZfYWRkcik7XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTI4Mj1zdGF0aWMgaW50IGNvbXBhdF9pcHY2X21jYXN0X2pvaW5fbGVhdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMjk2LVx0aWYgKG9wdG5hbWUgPT0gTUNBU1RfSk9JTl9HUk9VUClcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyOTc6XHRcdHJldHVybiBpcHY2X3NvY2tfbWNfam9pbihzaywgZ3IzMi5ncl9pbnRlcmZhY2UsXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMjk4LVx0XHRcdFx0XHRcdTAwMjZwc2luNi1cdTAwM2VzaW42X2FkZHIpO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg3NC1cdFx0aWYgKG9wdG5hbWUgPT0gSVBWNl9BRERfTUVNQkVSU0hJUClcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo4NzU6XHRcdFx0cmV0diA9IGlwdjZfc29ja19tY19qb2luKHNrLCBtcmVxLmlwdjZtcl9pZmluZGV4LCBcdTAwMjZtcmVxLmlwdjZtcl9tdWx0aWFkZHIpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg3Ni1cdFx0ZWxzZVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTcyPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2X21jX2ZpbmRfZGV2KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTE5Ny0gKi9cbm5ldC9pcHY2L21jYXN0LmM6MTk4OnN0YXRpYyBpbnQgX19pcHY2X3NvY2tfbWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxubmV0L2lwdjYvbWNhc3QuYy0xOTktXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yNDgtXG5uZXQvaXB2Ni9tY2FzdC5jOjI0OTppbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxubmV0L2lwdjYvbWNhc3QuYy0yNTAte1xubmV0L2lwdjYvbWNhc3QuYzoyNTE6XHRyZXR1cm4gX19pcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkciwgTUNBU1RfRVhDTFVERSk7XG5uZXQvaXB2Ni9tY2FzdC5jLTI1Mi19XG5uZXQvaXB2Ni9tY2FzdC5jOjI1MzpFWFBPUlRfU1lNQk9MKGlwdjZfc29ja19tY19qb2luKTtcbm5ldC9pcHY2L21jYXN0LmMtMjU0LVxubmV0L2lwdjYvbWNhc3QuYzoyNTU6aW50IGlwdjZfc29ja19tY19qb2luX3NzbShzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxubmV0L2lwdjYvbWNhc3QuYy0yNTYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHVuc2lnbmVkIGludCBtb2RlKVxubmV0L2lwdjYvbWNhc3QuYy0yNTcte1xubmV0L2lwdjYvbWNhc3QuYzoyNTg6XHRyZXR1cm4gX19pcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkciwgbW9kZSk7XG5uZXQvaXB2Ni9tY2FzdC5jLTI1OS19XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNDAzPXN0YXRpYyBpbnQgam9pbl9tY2FzdF9ncm91cDYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDExLVx0bG9ja19zb2NrKHNrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQxMjpcdHJldCA9IGlwdjZfc29ja19tY19qb2luKHNrLCBkZXYtXHUwMDNlaWZpbmRleCwgYWRkcik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0MTMtXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jPTQwND1zdGF0aWMgaW50IGVuYWJsZV9tY2FzdChzdHJ1Y3QgdWRwX2JlYXJlciAqdWIsIHN0cnVjdCB1ZHBfbWVkaWFfYWRkciAqcmVtb3RlKVxuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jLTQxNi1cdFx0bG9ja19zb2NrKHNrKTtcbm5ldC90aXBjL3VkcF9tZWRpYS5jOjQxNzpcdFx0ZXJyID0gaXB2Nl9zb2NrX21jX2pvaW4oc2ssIHViLVx1MDAzZWlmaW5kZXgsIFx1MDAyNnJlbW90ZS1cdTAwM2VpcHY2KTtcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTQxOC1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2MjAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRm9jdXMgTGlzdCBmb3IgSVB2NiBTb2NrZXQgTXVsdGljYXN0IE9wZXJhdGlvbnMqKgoKT2theSwgYWZ0ZXIgY29uc2lkZXJpbmcgdGhlIGluaXRpYWwgb3B0aW9ucywgYGlwdjZfc29ja19tY19qb2luYCBhbmQgYGlwdjZfc29ja19tY19kcm9wYCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgdGFyZ2V0cyBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEkmIzM5O2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0LCBjbGVhcmx5LgoKU28sIHRvIGJlIHByZWNpc2UsIG15IGN1cnJlbnQgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOgoKKiAgIGBpcHY2X3NvY2tfYWNfam9pbmAKKiAgIGBpcHY2X3NvY2tfYWNfZHJvcGAKKiAgIGBpcHY2X3NvY2tfbWNfam9pbmAKKiAgIGBpcHY2X3NvY2tfbWNfZHJvcGAKKiAgIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYAoqICAgYGFkZHJjb25mX3ByZWZpeF9yY3ZgCiogICBgbmRpc2NfcmVjdl9uc2AKCkhhbmcgb24gYSBtb21lbnQuLi4gaXMgdGhlIGZ1bmN0aW9uIG5hbWUgZm9yIGRyb3BwaW5nIG11bHRpY2FzdCBjb3JyZWN0bHkgc3RhdGVkIGFzIGBpcHY2X3NvY2tfbWNfZHJvcGA/IEJldHRlciBkb3VibGUgY2hlY2sgdGhhdCB0byBjb25maXJtLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGRldGFpbHMgYXJlIHByZWNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc29ja19tY19kcm9wJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jPTUwPWludCB2eGxhbl9pZ21wX2xlYXZlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCB1bmlvbiB2eGxhbl9hZGRyICpyaXAsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNzQtXHRcdGxvY2tfc29jayhzayk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzo3NTpcdFx0cmV0ID0gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIGlmaW5kZXgsIFx1MDAyNmlwLVx1MDAzZXNpbjYuc2luNl9hZGRyKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTc2LVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MjUzPWludCBpcHY2X3NvY2tfbWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNTQtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI1NTppbnQgaXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMjU2LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xuLS1cbmluY2x1ZGUvbmV0L2lwdjYuaD0xMjMyPWludCBpcHY2X3NvY2tfbWNfam9pbl9zc20oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2lwdjYuaC0xMjMzLVx0XHRcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCB1bnNpZ25lZCBpbnQgbW9kZSk7XG5pbmNsdWRlL25ldC9pcHY2Lmg6MTIzNDppbnQgaXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2lwdjYuaC0xMjM1LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MzAxNj1zdGF0aWMgaW50IGlwdjZfbWNfY29uZmlnKHN0cnVjdCBzb2NrICpzaywgYm9vbCBqb2luLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzAyNi1cdGVsc2Vcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzAyNzpcdFx0cmV0ID0gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIGlmaW5kZXgsIGFkZHIpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zMDI4LVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MjYyPXN0YXRpYyBpbnQgaXB2Nl9tY2FzdF9qb2luX2xlYXZlKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3OC1cdFx0XHRcdFx0IFx1MDAyNnBzaW42LVx1MDAzZXNpbjZfYWRkcik7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mjc5Olx0cmV0dXJuIGlwdjZfc29ja19tY19kcm9wKHNrLCBncmVxLmdyX2ludGVyZmFjZSwgXHUwMDI2cHNpbjYtXHUwMDNlc2luNl9hZGRyKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0yODAtfVxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0yODI9c3RhdGljIGludCBjb21wYXRfaXB2Nl9tY2FzdF9qb2luX2xlYXZlKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI5OC1cdFx0XHRcdFx0XHUwMDI2cHNpbjYtXHUwMDNlc2luNl9hZGRyKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyOTk6XHRyZXR1cm4gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIGdyMzIuZ3JfaW50ZXJmYWNlLCBcdTAwMjZwc2luNi1cdTAwM2VzaW42X2FkZHIpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTMwMC19XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc2LVx0XHRlbHNlXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6ODc3Olx0XHRcdHJldHYgPSBpcHY2X3NvY2tfbWNfZHJvcChzaywgbXJlcS5pcHY2bXJfaWZpbmRleCwgXHUwMDI2bXJlcS5pcHY2bXJfbXVsdGlhZGRyKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04NzgtXHRcdGJyZWFrO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9MjU1PWludCBpcHY2X3NvY2tfbWNfam9pbl9zc20oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTI2My0gKi9cbm5ldC9pcHY2L21jYXN0LmM6MjY0OnN0YXRpYyB2b2lkIF9faXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqbWNfbHN0KVxubmV0L2lwdjYvbWNhc3QuYy0yNjUte1xuLS1cbm5ldC9pcHY2L21jYXN0LmMtMjg4LVxubmV0L2lwdjYvbWNhc3QuYzoyODk6aW50IGlwdjZfc29ja19tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L21jYXN0LmMtMjkwLXtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTMwMy1cdFx0XHQqbG5rID0gbWNfbHN0LVx1MDAzZW5leHQ7XG5uZXQvaXB2Ni9tY2FzdC5jOjMwNDpcdFx0XHRfX2lwdjZfc29ja19tY19kcm9wKHNrLCBtY19sc3QpO1xubmV0L2lwdjYvbWNhc3QuYy0zMDUtXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L2lwdjYvbWNhc3QuYy0zMTAtfVxubmV0L2lwdjYvbWNhc3QuYzozMTE6RVhQT1JUX1NZTUJPTChpcHY2X3NvY2tfbWNfZHJvcCk7XG5uZXQvaXB2Ni9tY2FzdC5jLTMxMi1cbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTMzMD12b2lkIF9faXB2Nl9zb2NrX21jX2Nsb3NlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTMzNi1cdFx0bnAtXHUwMDNlaXB2Nl9tY19saXN0ID0gbWNfbHN0LVx1MDAzZW5leHQ7XG5uZXQvaXB2Ni9tY2FzdC5jOjMzNzpcdFx0X19pcHY2X3NvY2tfbWNfZHJvcChzaywgbWNfbHN0KTtcbm5ldC9pcHY2L21jYXN0LmMtMzM4LVx0fVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MzUzPWludCBpcDZfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L21jYXN0LmMtNDgyLVx0aWYgKGxlYXZlZ3JvdXApXG5uZXQvaXB2Ni9tY2FzdC5jOjQ4MzpcdFx0ZXJyID0gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIHBnc3ItXHUwMDNlZ3NyX2ludGVyZmFjZSwgZ3JvdXApO1xubmV0L2lwdjYvbWNhc3QuYy00ODQtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9NDg3PWludCBpcDZfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy01ODAtXHRpZiAobGVhdmVncm91cClcbm5ldC9pcHY2L21jYXN0LmM6NTgxOlx0XHRlcnIgPSBpcHY2X3NvY2tfbWNfZHJvcChzaywgZ3NmLVx1MDAzZWdmX2ludGVyZmFjZSwgZ3JvdXApO1xubmV0L2lwdjYvbWNhc3QuYy01ODItXHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTYyNgoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgeWVzLCBgaXB2Nl9zb2NrX21jX2Ryb3BgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIHJ1biB0aHJvdWdoIHRoaXMgbGlzdCBvZiBmdW5jdGlvbnMgYWdhaW4uIFdlIGhhdmU6IGBpcHY2X3NvY2tfYWNfam9pbmAsIGBpcHY2X3NvY2tfYWNfZHJvcGAsIGBpcHY2X3NvY2tfbWNfam9pbmAsIGBpcHY2X3NvY2tfbWNfZHJvcGAsIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBhbmQgYG5kaXNjX3JlY3ZfbnNgLiBSaWdodC4gVGhlIGNvbW1vbiB0aHJlYWQgaGVyZSBpcyB0aGF0IGFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ugb3IgdHJpZ2dlcmVkIGJ5IG5ldHdvcmsgcGFja2V0cywgYW5kIGNydWNpYWxseSwgdGhleSBhbGwgY2FsbCBgaW42X2Rldl9nZXRgIG9yIGl0cyB2YXJpYW50IGBfX2luNl9kZXZfZ2V0YC4gQW5kIHRoYXQsIGFzIEkgcmVjYWxsLCBpcyBleGFjdGx5IHRoZSBmdW5jdGlvbiB0aGF0IHRoZSBwYXRjaCB0YXJnZXRzLCBzcGVjaWZpY2FsbHkgdG8gZml4IHRoYXQgcGVza3kgcmVmY291bnQgYnVnLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBgaW42X2Rldl9nZXRgIGFmdGVyIGFsbC4gQW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBmbGFnIGlzLCBhcyBleHBlY3RlZCwgYElQVjZgLiBHaXZlbiBhbGwgdGhpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHdpbGwgY29tbWl0IG15IGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfc29ja19hY19qb2luJiMzNDssCiAgICAmIzM0O2lwdjZfc29ja19hY19kcm9wJiMzNDssCiAgICAmIzM0O2lwdjZfc29ja19tY19qb2luJiMzNDssCiAgICAmIzM0O2lwdjZfc29ja19tY19kcm9wJiMzNDssCiAgICAmIzM0O2luZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmYmIzM0OywKICAgICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICAgJiMzNDtuZGlzY19yZWN2X25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpbiB0aGUgY29yZSBJUHY2IGZ1bmN0aW9uIGBpbjZfZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNpbmNlIGBpbjZfZGV2X2dldGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCB3ZSBmb2N1cyBmdXp6aW5nIG9uIHNldmVyYWwga2V5IElQdjYgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhbmQgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAodmlhIHNldHNvY2tvcHQgb3IgbmV0bGluaykgb3IgbmV0d29yayBwYWNrZXRzICh2aWEgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zb2NrX2FjX2pvaW4mIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX2FjX2Ryb3AmIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX21jX2pvaW4mIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX21jX2Ryb3AmIzM0OywKICAgICYjMzQ7aW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JlY3ZfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgdW5kZXJmbG93IGluIHRoZSBjb3JlIElQdjYgZnVuY3Rpb24gYGluNl9kZXZfZ2V0YCBieSB1c2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gU2luY2UgYGluNl9kZXZfZ2V0YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdlIGZvY3VzIGZ1enppbmcgb24gc2V2ZXJhbCBrZXkgSVB2NiBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0IGFuZCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlICh2aWEgc2V0c29ja29wdCBvciBuZXRsaW5rKSBvciBuZXR3b3JrIHBhY2tldHMgKHZpYSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIHJvdXRlciBhZHZlcnRpc2VtZW50cykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyODo0NC4wMzU5MDM3MTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2NDg4MTk4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfc29ja19hY19qb2luXCIsXG4gICAgXCJpcHY2X3NvY2tfYWNfZHJvcFwiLFxuICAgIFwiaXB2Nl9zb2NrX21jX2pvaW5cIixcbiAgICBcImlwdjZfc29ja19tY19kcm9wXCIsXG4gICAgXCJpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mXCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yZWN2X25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgdW5kZXJmbG93IGluIHRoZSBjb3JlIElQdjYgZnVuY3Rpb24gYGluNl9kZXZfZ2V0YCBieSB1c2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gU2luY2UgYGluNl9kZXZfZ2V0YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdlIGZvY3VzIGZ1enppbmcgb24gc2V2ZXJhbCBrZXkgSVB2NiBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0IGFuZCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlICh2aWEgc2V0c29ja29wdCBvciBuZXRsaW5rKSBvciBuZXR3b3JrIHBhY2tldHMgKHZpYSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIHJvdXRlciBhZHZlcnRpc2VtZW50cykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI4OjQ0LjAzNTkwOTU0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MzQ0MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2IzZGQ1NzQ2YmIxZmMwZDU3NzllM2M3MGZhNmQyZTQxZmY4YjQyOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDIwOjI4OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oXFxuaW5kZXggOGNlZDI3YTgyMjliNi4uZTY3NjQyNDU5OTVmMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxcbkBAIC00MDUsOCArNDA1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRpZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cXHUwMDNlaXA2X3B0cik7XFxuLVxcdGlmIChpZGV2KVxcbi1cXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmlkZXYtXFx1MDAzZXJlZmNudCk7XFxuK1xcdGlmIChpZGV2IFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmlkZXYtXFx1MDAzZXJlZmNudCkpXFxuK1xcdFxcdGlkZXYgPSBOVUxMO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIGlkZXY7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjg6NDQuNTY1MzE1MDc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAwMTE5Mzk2Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NvY2tfYWNfam9pblwiLFxuICAgIFwiaXB2Nl9zb2NrX2FjX2Ryb3BcIixcbiAgICBcImlwdjZfc29ja19tY19qb2luXCIsXG4gICAgXCJpcHY2X3NvY2tfbWNfZHJvcFwiLFxuICAgIFwiaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZlwiLFxuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwibmRpc2NfcmVjdl9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpbiB0aGUgY29yZSBJUHY2IGZ1bmN0aW9uIGBpbjZfZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNpbmNlIGBpbjZfZGV2X2dldGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCB3ZSBmb2N1cyBmdXp6aW5nIG9uIHNldmVyYWwga2V5IElQdjYgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhbmQgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAodmlhIHNldHNvY2tvcHQgb3IgbmV0bGluaykgb3IgbmV0d29yayBwYWNrZXRzICh2aWEgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYjNkZDU3NDZiYjFmYzBkNTc3OWUzYzcwZmE2ZDJlNDFmZjhiNDI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAyMDoyODo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oXG5pbmRleCA4Y2VkMjdhODIyOWI2Li5lNjc2NDI0NTk5NWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxuKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxuQEAgLTQwNSw4ICs0MDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRpZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2VpcDZfcHRyKTtcbi1cdGlmIChpZGV2KVxuLVx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aWRldi1cdTAwM2VyZWZjbnQpO1xuK1x0aWYgKGlkZXYgXHUwMDI2XHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2aWRldi1cdTAwM2VyZWZjbnQpKVxuK1x0XHRpZGV2ID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGlkZXY7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjg6NDQuNTY1MzE3NjI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MjQyNjQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBpbjZfZGV2X2dldGAgaW4gYGluY2x1ZGUvbmV0L2FkZHJjb25mLmhgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgcmVwbGFjaW5nIGEgc2ltcGxlIGByZWZjb3VudF9pbmNgIHdpdGggYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNvdW5kcyBsaWtlIGEgc29saWQgZml4IGZvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCB1bmRlcmZsb3cgc2NlbmFyaW8gaWYgYGlkZXYtXHUwMDNlcmVmY250YCBoYXBwZW5zIHRvIGJlIHplcm8uIFByZXR0eSBpbXBvcnRhbnQgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgcmFjZSBjb25kaXRpb25zIGluIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLlxuXG5Ob3csIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoaXMgZnVuY3Rpb24gY2FsbGVkLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz9cIiBJdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBleHBhbmRlZCBpbiBwbGFjZS4gVGhhdCBtYWtlcyB0YXJnZXRlZCBmdXp6aW5nIGJ5IG5hbWUgYSBiaXQgdHJpY2t5LiBJIGNhbid0IGp1c3QgdGhyb3cgYSBmdXp6ZXIgYXQgYGluNl9kZXZfZ2V0YCBkaXJlY3RseS4gSSBuZWVkIHRvIGZpbmQgaXRzIGNhbGxlcnMgdG8gaWRlbnRpZnkgbWVhbmluZ2Z1bCBmdXp6aW5nIHRhcmdldHMuIEkgY291bGQgbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBkaXJlY3RseSwgb3Igc2luY2UgaXQncyBhbiBpbmxpbmUgbmV0d29ya2luZyBmdW5jdGlvbiBJIGNvdWxkIGp1c3QgaW5mZXIgaXQncyB1c2VkIGluIGxvdHMgb2YgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBhbmQgSSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYEZvY3VzU3ltYm9sc2AuIE9yIG1heWJlIEkgc2hvdWxkIGRpZyBpbiBhbmQgdHJ5IHRvIGZpbmQgc29tZSBzcGVjaWZpYyBjYWxsZXJzIHRvIG5hcnJvdyBkb3duIHRoZSBmb2N1cyBvZiB0aGUgdGVzdGluZy5cblxuQWgsIHJpZ2h0LCBpdCdzIElQdjYgbmV0d29ya2luZy4gVGhhdCBoZWxwcyBuYXJyb3cgdGhlIHNjb3BlIGEgYml0LiBMZXQgbWUgcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyODo0OC45MDc3NDgwODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1OTA4NzYxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbjZfZGV2X2dldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0PTg4PXN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIGZpYl9uaF9oZWFkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0Ojg5OnN0cnVjdCBpbmV0Nl9kZXYqICAgICAgICAgICAgICAgICAgIGlwNl9wdHIgICAgICAgICAgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgX19pbjZfZGV2X2dldFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdC05MC1zdHJ1Y3Qgdmxhbl9pbmZvKiAgICAgICAgICAgICAgICAgICB2bGFuX2luZm9cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3JvY2VfZ2lkX21nbXQuYy0zNy1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9yb2NlX2dpZF9tZ210LmM6Mzg6LyogRm9yIGluNl9kZXZfZ2V0L2luNl9kZXZfcHV0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM5LSNpbmNsdWRlIFxcdTAwM2NuZXQvYWRkcmNvbmYuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3JvY2VfZ2lkX21nbXQuYz0zNzU9c3RhdGljIHZvaWQgZW51bV9uZXRkZXZfaXB2Nl9pcHMoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM5MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9yb2NlX2dpZF9tZ210LmM6MzkyOlxcdGluNl9kZXYgPSBpbjZfZGV2X2dldChuZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9yb2NlX2dpZF9tZ210LmMtMzkzLVxcdGlmICghaW42X2RldilcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyNjE9c3RhdGljIGludCBnZXRfbGxhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jLTMyNjctXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNjg6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjY5LVxcdGlmIChpZGV2ICE9IE5VTEwpIHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE2NTY9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzYoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNjc2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE2Nzc6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoaXBfZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNjc4LVxcdFxcdGlmICghaWRldikge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3V0aWxzLmM9MzM2PXN0YXRpYyB2b2lkIGlyZG1hX2FkZF9pcHY2X2FkZHIoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYy0zNDgtXFx0XFx0ICAgICAgKFJFQURfT05DRShpcF9kZXYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IElGRl9VUCkpIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYzozNDk6XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoaXBfZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYy0zNTAtXFx0XFx0XFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmM9MTk2PXN0YXRpYyBpbnQgY3hnYjRfdXBkYXRlX2Rldl9jbGlwKHN0cnVjdCBuZXRfZGV2aWNlICpyb290X2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYy0yMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jOjIwMzpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChyb290X2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIwNC1cXHRpZiAoIWlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz04MjM0PXN0YXRpYyBib29sIF9fbWx4c3dfc3BfZGV2X2FkZHJfbGlzdF9lbXB0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODI0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4MjQzOlxcdGluZXQ2X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04MjQ0LVxcdGlmIChpbmV0Nl9kZXYgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNmluZXQ2X2Rldi1cXHUwMDNlYWRkcl9saXN0KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTIzMzk9c3RhdGljIHZvaWQgZ2VuZXZlX2xpbmtfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzY0LVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjIzNjU6XFx0XFx0aWYgKCFfX2luNl9kZXZfZ2V0KGRldikpXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM2Ni1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zOTM9c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQwNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDA3OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KG5kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MDgtXFx0aWYgKGlkZXYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jPTMwOT1zdGF0aWMgdm9pZCBkb19uZWlnaF9zb2xpY2l0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggKmJ1ZiwgdTE2IHRjaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTMzOC1cXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYzozMzk6XFx0aW42X2RldiA9IGluNl9kZXZfZ2V0KG5ldGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzQwLVxcdGlmICghaW42X2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNzQzPXN0YXRpYyBpbnQgdnhsYW5fY29uZmlnX3ZhbGlkYXRlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCB2eGxhbl9jb25maWcgKmNvbmYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg0NS1cXHRcXHRpZiAodXNlX2lwdjYpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mzg0NjpcXHRcXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChsb3dlcmRldik7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4NDctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MzE9c3RhdGljIGludCB3Z19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzMtXFx0c3RydWN0IGluX2RldmljZSAqZGV2X3Y0ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzQ6XFx0c3RydWN0IGluZXQ2X2RldiAqZGV2X3Y2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNS1cXHRzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyA9IG5ldGRldl9wcml2KGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dvdy5jPTYzOT1zdGF0aWMgdm9pZCBhdGgxMmtfd293X3ByZXBhcmVfbnNfb2ZmbG9hZChzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd293LmMtNjUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd293LmM6NjUyOlxcdGlkZXYgPSBpbjZfZGV2X2dldChuZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dvdy5jLTY1My1cXHRpZiAoIWlkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jPTEwNTE9c3RhdGljIGludCBxZXRoX2wzX2FkZF9tY2FzdF9ydG5sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB2aWQsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMtMTA5Ni1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jOjEwOTc6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jLTEwOTgtXFx0aWYgKCFpbjZfZGV2KVxcbi0tXFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmM9ODU2OT1zdGF0aWMgaW50IGZzY3RsX3F1ZXJ5X2lmYWNlX2luZm9faW9jdGwoc3RydWN0IGtzbWJkX2Nvbm4gKmNvbm4sXFxuLS1cXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYy04NjUzLVxcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jOjg2NTQ6XFx0XFx0XFx0aWRldjYgPSBfX2luNl9kZXZfZ2V0KG5ldGRldik7XFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtODY1NS1cXHRcXHRcXHRpZiAoIWlkZXY2KVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zMzY9dm9pZCBpbmV0Nl9uZXRjb25mX25vdGlmeV9kZXZjb25mKHN0cnVjdCBuZXQgKm5ldCwgaW50IGV2ZW50LCBpbnQgdHlwZSxcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzM5LS8qKlxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MzQwOiAqIF9faW42X2Rldl9nZXQgLSBnZXQgaW5ldDZfZGV2IHBvaW50ZXIgZnJvbSBuZXRkZXZpY2VcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM0MS0gKiBAZGV2OiBuZXR3b3JrIGRldmljZVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNDUtICovXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNDY6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICpfX2luNl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNDcte1xcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zNTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNTUtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNTY6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICpfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNTcte1xcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zNjk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICpfX2luNl9kZXZfc3RhdHNfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM3Ni1cXHR9XFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNzc6XFx0cmV0dXJuIF9faW42X2Rldl9nZXQoZGV2KTtcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM3OC19XFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM4MC0vKipcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjM4MTogKiBfX2luNl9kZXZfZ2V0X3NhZmVseSAtIGdldCBpbmV0Nl9kZXYgcG9pbnRlciBmcm9tIG5ldGRldmljZVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzgyLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zODMtICpcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjM4NDogKiBUaGlzIGlzIGEgc2FmZXIgdmVyc2lvbiBvZiBfX2luNl9kZXZfZ2V0XFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zODUtICovXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozODY6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICpfX2luNl9kZXZfZ2V0X3NhZmVseShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzg3LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzk0LS8qKlxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6Mzk1OiAqIGluNl9kZXZfZ2V0IC0gZ2V0IGluZXQ2X2RldiBwb2ludGVyIGZyb20gbmV0ZGV2aWNlXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zOTYtICogQGRldjogbmV0d29yayBkZXZpY2VcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtNDAxLSAqL1xcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6NDAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqaW42X2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQwMy17XFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTQxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaF9wYXJtcyAqX19pbjZfZGV2X25kX3Bhcm1zX2dldF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQxNS17XFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDo0MTY6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQxNy1cXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9NDU1PXN0YXRpYyBpbmxpbmUgYm9vbCBpcDZfaWdub3JlX2xpbmtkb3duKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC00NTYte1xcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6NDU3OlxcdGNvbnN0IHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC00NTgtXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNjU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNzgtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM3OTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zODAtXFx0aWYgKGlkZXYpXFxuLS1cXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaD02NT1pcDZmcmFnX2V4cGlyZV9mcmFnX3F1ZXVlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZyYWdfcXVldWUgKmZxKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtODktXFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmg6OTA6XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgX19pbjZfZGV2X2dldChkZXYpLCBJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTtcXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaDo5MTpcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNVElNRU9VVCk7XFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtOTItXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaD03NT1zdGF0aWMgaW5saW5lIGludCBuZnRfc2V0X3BrdGluZm9faXB2Nl9pbmdyZXNzKHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19pcHY2LmgtOTQtXFx0aWYgKHBrdF9sZW4gKyBzaXplb2YoKmlwNmgpIFxcdTAwM2UgcGt0LVxcdTAwM2Vza2ItXFx1MDAzZWxlbikge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfaXB2Ni5oOjk1OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KG5mdF9pbihwa3QpKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaC05Ni1cXHRcXHRfX0lQNl9JTkNfU1RBVFMobmZ0X25ldChwa3QpLCBpZGV2LCBJUFNUQVRTX01JQl9JTlRSVU5DQVRFRFBLVFMpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19pcHY2LmgtMTEzLWluaGRyX2Vycm9yOlxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfaXB2Ni5oOjExNDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChuZnRfaW4ocGt0KSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19pcHY2LmgtMTE1LVxcdF9fSVA2X0lOQ19TVEFUUyhuZnRfbmV0KHBrdCksIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4tLVxcbm5ldC82bG93cGFuL2NvcmUuYz0xMDg9c3RhdGljIGludCBsb3dwYW5fZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuLS1cXG5uZXQvNmxvd3Bhbi9jb3JlLmMtMTE4LVxcbm5ldC82bG93cGFuL2NvcmUuYzoxMTk6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvNmxvd3Bhbi9jb3JlLmMtMTIwLVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEzMj1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTMzLXtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzQ6XFx0c3RydWN0IGluZXQ2X2RldiAqaW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzUtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz00MzM9YmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ0Ny1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo0NDg6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy00NDktXFx0aWYgKCFpbjZfZGV2KSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM9NDQ9aW50IGJyX3ZhbGlkYXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTQ2LVxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjQ3OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtNDgtXFx0dTMyIHBrdF9sZW47XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MzYwPXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjM4MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MzgyOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTYzODMtXFx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLmZvcndhcmRpbmcpKSlcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTIxOTU9c3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIyNTUtXFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjIyNTY6XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQocGt0X2Rldi1cXHUwMDNlb2Rldik7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjI1Ny1cXHRcXHRcXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjQvaWNtcC5jPTEyOTE9Ym9vbCBpY21wX2J1aWxkX3Byb2JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpY21waGRyICppY21waGRyKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEzODUtXFxubmV0L2lwdjQvaWNtcC5jOjEzODY6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2NC9pY21wLmMtMTM4Ny1cXHRpZiAoaW42X2RldiBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2aW42X2Rldi1cXHUwMDNlYWRkcl9saXN0KSlcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NDkwPXN0YXRpYyBzdHJ1Y3QgaW5ldDZfZGV2ICppcHY2X2ZpbmRfaWRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00OTUtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo0OTY6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ5Ny1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjU3PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02ODktXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2OTA6XFx0XFx0aW42X2RldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02OTEtXFx0XFx0aWYgKCFpbjZfZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz03MzU9c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjQtXFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzY1OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjYtXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz04NTM9c3RhdGljIHZvaWQgYWRkcmNvbmZfZm9yd2FyZF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBfX3MzMiBuZXdmKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy04NTgtXFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo4NTk6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTg2MC1cXHRcXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz05MTk9c3RhdGljIHZvaWQgYWRkcmNvbmZfbGlua2Rvd25fY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3ZilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtOTI0LVxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6OTI1OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy05MjYtXFx0XFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgwMD1zdGF0aWMgaW50IGlwdjZfZ2V0X3NhZGRyX21hc3RlcihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MDgtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODA5OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTgxMC1cXHRpZiAoaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTgxMy1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE4MTQ6XFx0aWRldiA9IF9faW42X2Rldl9nZXQobWFzdGVyKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTUtXFx0aWYgKGlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MjI9aW50IGlwdjZfZGV2X2dldF9zYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkc3RfZGV2LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODYzLVxcdGlmIChkc3RfZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODY0OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTg2NS1cXHRcXHRpZiAoKGRzdF90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkgfHxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTkwMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE5MDI6XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5MDMtXFx0XFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0xOTQwPWludCBpcHY2X2dldF9sbGFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTQ2LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE5NDc6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5NDgtXFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjA0MD1ib29sIGlwdjZfY2hrX2N1c3RvbV9wcmVmaXgoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDQ3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIwNDg6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNDktXFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjA2Mj1pbnQgaXB2Nl9jaGtfcHJlZml4KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA2OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMDcwOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDcxLVxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI3OTg9dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4MzMtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyODM0OlxcdGluNl9kZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjgzNS1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzEwNj1zdGF0aWMgaW50IGluZXQ2X2FkZHJfZGVsKHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgsIHUzMiBpZmFfZmxhZ3MsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMxMjQtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzozMTI1OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTI2LVxcdGlmICghaWRldikge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNDgyPXN0YXRpYyB2b2lkIGFkZHJjb25mX2Rldl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzQ5OS1cXHRcXHQvKiBBbGFzLCB3ZSBzdXBwb3J0IG9ubHkgRXRoZXJuZXQgYXV0b2NvbmZpZ3VyYXRpb24uICovXFxubmV0L2lwdjYvYWRkcmNvbmYuYzozNTAwOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zNTAxLVxcdFxcdGlmICghSVNfRVJSX09SX05VTEwoaWRldikgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNjM3PXN0YXRpYyB2b2lkIGFkZHJjb25mX3Blcm1hbmVudF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY0NS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM2NDY6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NDctXFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNjcxPXN0YXRpYyBpbnQgYWRkcmNvbmZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY3Ni1cXHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm87XFxubmV0L2lwdjYvYWRkcmNvbmYuYzozNjc3OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjc4LVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mzg1Nj1zdGF0aWMgdm9pZCBhZGRyY29uZl90eXBlX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODYwLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg2MTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg2Mi1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mzg3NT1zdGF0aWMgaW50IGFkZHJjb25mX2lmZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHVucmVnaXN0ZXIpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4ODktXFxubmV0L2lwdjYvYWRkcmNvbmYuYzozODkwOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODkxLVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTQzMD1zdGF0aWMgaW50IGluZXQ2X2R1bXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NjQtXFx0XFx0XFx0fVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ2NTpcXHRcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ2Ni1cXHRcXHRcXHRpZiAoaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ3NS1cXHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ3NjpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ3Ny1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU5MDA9c3RhdGljIHNpemVfdCBpbmV0Nl9nZXRfbGlua19hZl9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MDIte1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTkwMzpcXHRpZiAoIV9faW42X2Rldl9nZXQoZGV2KSlcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MDQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU5MDk9c3RhdGljIGludCBpbmV0Nl9maWxsX2xpbmtfYWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTkxMS17XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1OTEyOlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTEzLVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02MDM1PXN0YXRpYyBpbnQgaW5ldDZfdmFsaWRhdGVfbGlua19hZihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDQzLVxcdGlmIChkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYwNDQ6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNDUtXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02MDY5PXN0YXRpYyBpbnQgaW5ldDZfc2V0X2xpbmtfYWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDcxLXtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYwNzI6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNzMtXFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9JTkVUNl9NQVggKyAxXTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjE3MT1zdGF0aWMgaW50IGluZXQ2X2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjE5My1cXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2MTk0OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MTk1LVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjQxNT1zdGF0aWMgdm9pZCBhZGRyY29uZl9kaXNhYmxlX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY0MjAtXFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NDIxOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NDIyLVxcdFxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1MjQ9c3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfYWRkcl9nZW5fbW9kZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU2OS1cXHRcXHRcXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY1NzA6XFx0XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NzEtXFx0XFx0XFx0XFx0aWYgKGlkZXYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjU5MT1zdGF0aWMgaW50IGFkZHJjb25mX3N5c2N0bF9zdGFibGVfc2VjcmV0KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NjM3LVxcdFxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjYzODpcXHRcXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjYzOS1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjcyNj1pbnQgYWRkcmNvbmZfZGlzYWJsZV9wb2xpY3koY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgKnZhbHAsIGludCB2YWwpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3NDQtXFx0XFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NzQ1OlxcdFxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NzQ2LVxcdFxcdFxcdGlmIChpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02Nzc4PXN0YXRpYyB2b2lkIGFkZHJjb25mX2ZvcmNlX2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3ZilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjc4My1cXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY3ODQ6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3ODUtXFx0XFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NzYyNT12b2lkIGFkZHJjb25mX2NsZWFudXAodm9pZClcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzYzOC1cXHRmb3JfZWFjaF9uZXRkZXYoXFx1MDAyNmluaXRfbmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2Mzk6XFx0XFx0aWYgKCFfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldikpXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjQwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTY3PWludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmMtMTI2LVxcbm5ldC9pcHY2L2FueWNhc3QuYzoxMjc6XFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYW55Y2FzdC5jLTEyOC1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz00MzA9c3RhdGljIGludCBpcHY2X2Rldl9hY19kZWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbm5ldC9pcHY2L2FueWNhc3QuYy00MzEte1xcbm5ldC9pcHY2L2FueWNhc3QuYzo0MzI6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYW55Y2FzdC5jLTQzMy1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTQ3MD1zdGF0aWMgYm9vbCBpcHY2X2Noa19hY2FzdF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jLTQ3NC1cXG5uZXQvaXB2Ni9hbnljYXN0LmM6NDc1OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYW55Y2FzdC5jLTQ3Ni1cXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTUzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpZmFjYWRkcjYgKmFjNl9nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmMtNTQ1LVxcbm5ldC9pcHY2L2FueWNhc3QuYzo1NDY6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc3RhdGUtXFx1MDAzZWRldik7XFxubmV0L2lwdjYvYW55Y2FzdC5jLTU0Ny1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmM9NTU2PXN0YXRpYyBzdHJ1Y3QgaWZhY2FkZHI2ICphYzZfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBpZmFjYWRkcjYgKmltKVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jLTU2NS1cXHRcXHRcXHRicmVhaztcXG5uZXQvaXB2Ni9hbnljYXN0LmM6NTY2OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy01NjctXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTI5Nj1zdGF0aWMgaW50IGlwdjZfZGVzdG9wdF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjk3LXtcXG5uZXQvaXB2Ni9leHRoZHJzLmM6Mjk4OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjk5LVxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODEtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM4MjpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTM4My1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz00ODg9c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTAxLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzo1MDI6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy01MDMtXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjU2LXtcXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjU3OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjU4LVxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz05MTI9c3RhdGljIGJvb2wgaXB2Nl9ob3BfaW9hbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTkyNi1cXHQvKiBEb2VzIHRoZSBkZXZpY2Ugc3RpbGwgaGF2ZSBJUHY2IGNvbmZpZ3VyYXRpb24/ICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjkyNzpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTkyOC1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz00Nzk9c3RhdGljIHN0cnVjdCBpbjZfYWRkciAqaWNtcDZfZXh0X2lpb19hZGRyNl9maW5kKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtNDgzLVxcbm5ldC9pcHY2L2ljbXAuYzo0ODQ6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pY21wLmMtNDg1LVxcdGlmICghaW42X2RldilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz02MzY9dm9pZCBpY21wNl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8sXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtODE1LVxcbm5ldC9pcHY2L2ljbXAuYzo4MTY6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2ljbXAuYy04MTctXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9OTIxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBpY21wdjZfZWNob19yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTEwMDEtXFxubmV0L2lwdjYvaWNtcC5jOjEwMDI6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2ljbXAuYy0xMDAzLVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTEwMzc9ZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTEwOTItb3V0Olxcbm5ldC9pcHY2L2ljbXAuYzoxMDkzOlxcdF9fSUNNUDZfSU5DX1NUQVRTKG5ldCwgX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldiksIElDTVA2X01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjYvaWNtcC5jLTEwOTQtXFx0cmV0dXJuIHJlYXNvbjtcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz0xMTAxPXN0YXRpYyBpbnQgaWNtcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTExMDUtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGljbXA2X2Rldihza2IpO1xcbm5ldC9pcHY2L2ljbXAuYzoxMTA2OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvaWNtcC5jLTExMDctXFx0c3RydWN0IGljbXA2aGRyICpoZHI7XFxuLS1cXG5uZXQvaXB2Ni9pb2FtNi5jPTcwNz1zdGF0aWMgdm9pZCBfX2lvYW02X2ZpbGxfdHJhY2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaW9hbTYuYy03MjUtXFxubmV0L2lwdjYvaW9hbTYuYzo3MjY6XFx0aV9za2JfZGV2ID0gc2tiLVxcdTAwM2VkZXYgPyBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KSA6IE5VTEw7XFxubmV0L2lwdjYvaW9hbTYuYzo3Mjc6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pb2FtNi5jLTcyOC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTE4OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwNl9yY3ZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtMjAzLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjIwNDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvaXA2X2lucHV0LmMtMjA1LVxcbi0tXFxubmV0L2lwdjYvaXA2X2lucHV0LmM9NTU0PWludCBpcDZfbWNfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU2MS1cXHRfX0lQNl9VUERfUE9fU1RBVFMoc2tiX2RzdF9kZXZfbmV0X3JjdShza2IpLFxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjU2MjpcXHRcXHRcXHQgICBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpLCBJUFNUQVRTX01JQl9JTk1DQVNULFxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU2My1cXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MjYyPWludCBpcDZfZHN0X2hvcGxpbWl0KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yNzAtXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI4OjUxLjc2Njg0MzgxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NTMwMjMxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQdjYgUmVmY291bnQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb2RpZmllZCBgaW42X2Rldl9nZXRgIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IsIG1vcmUgcHJlY2lzZWx5LCBhIHJlZmNvdW50IHVuZGVyZmxvdyBpc3N1ZS4gIFRoZSBjaGFuZ2UgaXMgc3VidGxlIGJ1dCBzaWduaWZpY2FudDsgaW5zdGVhZCBvZiBhIHNpbXBsZSBpbmNyZW1lbnQsIHRoZSBjb2RlIG5vdyBjaGVja3MgaWYgYGlkZXYtXHUwMDNlcmVmY250YCBpcyBhbHJlYWR5IHplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGl0LiBUaGlzIG1ha2VzIHNlbnNlIOKAkyBhIHplcm8gcmVmY291bnQgaW5kaWNhdGVzIHRoZSBvYmplY3QgaXMgbGlrZWx5IGdvbmUsIHNvIGluY3JlbWVudGluZyBpdCB3b3VsZCBiZSBhIHByb2JsZW0uXG5cblRoZSBpbXBsaWNhdGlvbnMgYXJlIGNsZWFyOiBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBvYmplY3QgaXMgZnJlZWQgYmVmb3JlIGBpbjZfZGV2X2dldGAgY2FuIGluY3JlbWVudCBpdHMgcmVmY291bnQuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGlzc3VlIHRoYXQncyByaXBlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgcHJldmFsZW5jZSBvZiBgaW42X2Rldl9nZXRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBudW1lcm91cyBsb2NhdGlvbnMsIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLiBJJ3ZlIGdvdCB0byBmaW5kIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIHRvIHRyaWdnZXIgdGhpcy5cblxuVGhlIGNhbGwgc2l0ZXMgYXJlIGxpc3RlZCwgYW5kIGEgcXVpY2sgZ2xhbmNlIHN1Z2dlc3RzIGZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCBhbmQgYG5ldC9pcHY2L2FueWNhc3QuY2AuIFNwZWNpZmljYWxseSwgZnVuY3Rpb25zIGxpa2UgYGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgd2l0aGluIGBhZGRyY29uZi5jYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBpcHY2X3NvY2tfYWNfam9pbmAgYW5kIGBpcHY2X2Rldl9hY19kZWNgIGluIGBhbnljYXN0LmNgLiBUaGVzZSBzZWVtIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgc2luY2UgdGhleSBkZWFsIGRpcmVjdGx5IHdpdGggbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBhZGRyZXNzIG1hbmFnZW1lbnQg4oCTIGNvbXBsZXggYXJlYXMgd2hlcmUgdGltaW5nIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlcyBhcmUgY29tbW9uLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgYW5kIGNyYWZ0IHNvbWUgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTg0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI4OjU3LjYxOTg3MDkxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY3OTYwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW42X2Rldl9nZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQ4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTQ5MD1zdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqaXB2Nl9maW5kX2lkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDk1LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDk2OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy00OTctXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1Nz1zdGF0aWMgaW50IGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjg5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjkwOlxcdFxcdGluNl9kZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjkxLVxcdFxcdGlmICghaW42X2RldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NzM1PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzY0LVxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2NTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzY2LVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9ODUzPXN0YXRpYyB2b2lkIGFkZHJjb25mX2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3ZilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtODU4LVxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6ODU5OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy04NjAtXFx0XFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9OTE5PXN0YXRpYyB2b2lkIGFkZHJjb25mX2xpbmtkb3duX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTkyNC1cXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjkyNTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtOTI2LVxcdFxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MDA9c3RhdGljIGludCBpcHY2X2dldF9zYWRkcl9tYXN0ZXIoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODA4LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTgwOTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTAtXFx0aWYgKGlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTMtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODE0OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KG1hc3Rlcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODE1LVxcdGlmIChpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0xODIyPWludCBpcHY2X2Rldl9nZXRfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZHN0X2RldixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTg2My1cXHRpZiAoZHN0X2Rldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTg2NDpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4NjUtXFx0XFx0aWYgKChkc3RfdHlwZSBcXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpIHx8XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5MDEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxOTAyOlxcdFxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTAzLVxcdFxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTk0MD1pbnQgaXB2Nl9nZXRfbGxhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTk0Ni1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxOTQ3OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTQ4LVxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTIwNDA9Ym9vbCBpcHY2X2Noa19jdXN0b21fcHJlZml4KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA0Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMDQ4OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDQ5LVxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTIwNjI9aW50IGlwdjZfY2hrX3ByZWZpeChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNjktXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjA3MDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA3MS1cXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNzk4PXZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yODMzLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjgzNDpcXHRpbjZfZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4MzUtXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTMxMDY9c3RhdGljIGludCBpbmV0Nl9hZGRyX2RlbChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4LCB1MzIgaWZhX2ZsYWdzLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTI0LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzEyNTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzEyNi1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzQ4Mj1zdGF0aWMgdm9pZCBhZGRyY29uZl9kZXZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM0OTktXFx0XFx0LyogQWxhcywgd2Ugc3VwcG9ydCBvbmx5IEV0aGVybmV0IGF1dG9jb25maWd1cmF0aW9uLiAqL1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzUwMDpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzUwMS1cXHRcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKGlkZXYpIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVAgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzYzNz1zdGF0aWMgdm9pZCBhZGRyY29uZl9wZXJtYW5lbnRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NDUtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzozNjQ2OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjQ3LVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzY3MT1zdGF0aWMgaW50IGFkZHJjb25mX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NzYtXFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2V1cHBlcl9pbmZvICppbmZvO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzY3NzpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY3OC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NTY9c3RhdGljIHZvaWQgYWRkcmNvbmZfdHlwZV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg2MC1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM4NjE6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4NjItXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzU9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODg5LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg5MDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg5MS1cXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU0MzA9c3RhdGljIGludCBpbmV0Nl9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NDY0LVxcdFxcdFxcdH1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU0NjU6XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NjYtXFx0XFx0XFx0aWYgKGlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NzUtXFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAodGd0X25ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU0NzY6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NzctXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01OTAwPXN0YXRpYyBzaXplX3QgaW5ldDZfZ2V0X2xpbmtfYWZfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTAyLXtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU5MDM6XFx0aWYgKCFfX2luNl9kZXZfZ2V0KGRldikpXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTA0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01OTA5PXN0YXRpYyBpbnQgaW5ldDZfZmlsbF9saW5rX2FmKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MTEte1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTkxMjpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTkxMy1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjAzNT1zdGF0aWMgaW50IGluZXQ2X3ZhbGlkYXRlX2xpbmtfYWYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjA0My1cXHRpZiAoZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2MDQ0OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDQ1LVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjA2OT1zdGF0aWMgaW50IGluZXQ2X3NldF9saW5rX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjA3MS17XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2MDcyOlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDczLVxcdHN0cnVjdCBubGF0dHIgKnRiW0lGTEFfSU5FVDZfTUFYICsgMV07XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYxNzE9c3RhdGljIGludCBpbmV0Nl9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYxOTMtXFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjE5NDpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjE5NS1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY0MTU9c3RhdGljIHZvaWQgYWRkcmNvbmZfZGlzYWJsZV9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBfX3MzMiBuZXdmKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NDIwLVxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjQyMTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjQyMi1cXHRcXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02NTI0PXN0YXRpYyBpbnQgYWRkcmNvbmZfc3lzY3RsX2FkZHJfZ2VuX21vZGUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NjktXFx0XFx0XFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NTcwOlxcdFxcdFxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NTcxLVxcdFxcdFxcdFxcdGlmIChpZGV2IFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1OTE9c3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfc3RhYmxlX3NlY3JldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjYzNy1cXHRcXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY2Mzg6XFx0XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY2MzktXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY3MjY9aW50IGFkZHJjb25mX2Rpc2FibGVfcG9saWN5KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50ICp2YWxwLCBpbnQgdmFsKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NzQ0LVxcdFxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6Njc0NTpcXHRcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjc0Ni1cXHRcXHRcXHRpZiAoaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Njc3OD1zdGF0aWMgdm9pZCBhZGRyY29uZl9mb3JjZV9mb3J3YXJkX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3ODMtXFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2Nzg0OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02Nzg1LVxcdFxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTc2MjU9dm9pZCBhZGRyY29uZl9jbGVhbnVwKHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc2MzgtXFx0Zm9yX2VhY2hfbmV0ZGV2KFxcdTAwMjZpbml0X25ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo3NjM5OlxcdFxcdGlmICghX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpKVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzY0MC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz02Nz1pbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jLTEyNi1cXG5uZXQvaXB2Ni9hbnljYXN0LmM6MTI3OlxcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy0xMjgtXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmM9NDMwPXN0YXRpYyBpbnQgaXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9hbnljYXN0LmMtNDMxLXtcXG5uZXQvaXB2Ni9hbnljYXN0LmM6NDMyOlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy00MzMtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz00NzA9c3RhdGljIGJvb2wgaXB2Nl9jaGtfYWNhc3RfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYy00NzQtXFxubmV0L2lwdjYvYW55Y2FzdC5jOjQ3NTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy00NzYtXFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz01Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWZhY2FkZHI2ICphYzZfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jLTU0NS1cXG5uZXQvaXB2Ni9hbnljYXN0LmM6NTQ2OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy01NDctXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTU1Nj1zdGF0aWMgc3RydWN0IGlmYWNhZGRyNiAqYWM2X2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaWZhY2FkZHI2ICppbSlcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYy01NjUtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2lwdjYvYW55Y2FzdC5jOjU2NjpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9hbnljYXN0LmMtNTY3LVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0yOTY9c3RhdGljIGludCBpcHY2X2Rlc3RvcHRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvZXh0aGRycy5jLTI5Ny17XFxubmV0L2lwdjYvZXh0aGRycy5jOjI5ODpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTI5OS1cXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzgxLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozODI6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODMtXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NDg4PXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTUwMS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTAyOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTAzLVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTY1NT1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvZXh0aGRycy5jLTY1Ni17XFxubmV0L2lwdjYvZXh0aGRycy5jOjY1NzpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTY1OC1cXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9OTEyPXN0YXRpYyBib29sIGlwdjZfaG9wX2lvYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy05MjYtXFx0LyogRG9lcyB0aGUgZGV2aWNlIHN0aWxsIGhhdmUgSVB2NiBjb25maWd1cmF0aW9uPyAqL1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo5Mjc6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy05MjgtXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9NDc5PXN0YXRpYyBzdHJ1Y3QgaW42X2FkZHIgKmljbXA2X2V4dF9paW9fYWRkcjZfZmluZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTQ4My1cXG5uZXQvaXB2Ni9pY21wLmM6NDg0OlxcdGluNl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvaWNtcC5jLTQ4NS1cXHRpZiAoIWluNl9kZXYpXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9NjM2PXZvaWQgaWNtcDZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLCB1OCBjb2RlLCBfX3UzMiBpbmZvLFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTgxNS1cXG5uZXQvaXB2Ni9pY21wLmM6ODE2OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9pY21wLmMtODE3LVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTkyMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X2VjaG9fcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMDAxLVxcbm5ldC9pcHY2L2ljbXAuYzoxMDAyOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9pY21wLmMtMTAwMy1cXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz0xMDM3PWVudW0gc2tiX2Ryb3BfcmVhc29uIGljbXB2Nl9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMDkyLW91dDpcXG5uZXQvaXB2Ni9pY21wLmM6MTA5MzpcXHRfX0lDTVA2X0lOQ19TVEFUUyhuZXQsIF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpLCBJQ01QNl9NSUJfSU5FUlJPUlMpO1xcbm5ldC9pcHY2L2ljbXAuYy0xMDk0LVxcdHJldHVybiByZWFzb247XFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTEwMT1zdGF0aWMgaW50IGljbXB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMTA1LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpY21wNl9kZXYoc2tiKTtcXG5uZXQvaXB2Ni9pY21wLmM6MTEwNjpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2ljbXAuYy0xMTA3LVxcdHN0cnVjdCBpY21wNmhkciAqaGRyO1xcbi0tXFxubmV0L2lwdjYvaW9hbTYuYz03MDc9c3RhdGljIHZvaWQgX19pb2FtNl9maWxsX3RyYWNlX2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lvYW02LmMtNzI1LVxcbm5ldC9pcHY2L2lvYW02LmM6NzI2OlxcdGlfc2tiX2RldiA9IHNrYi1cXHUwMDNlZGV2ID8gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldikgOiBOVUxMO1xcbm5ldC9pcHY2L2lvYW02LmM6NzI3OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvaW9hbTYuYy03MjgtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz0xODg9c3RhdGljIHN0cnVjdCBza19idWZmICppcDZfcmN2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTIwMy1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzoyMDQ6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTIwNS1cXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTU1ND1pbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NjEtXFx0X19JUDZfVVBEX1BPX1NUQVRTKHNrYl9kc3RfZGV2X25ldF9yY3Uoc2tiKSxcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1NjI6XFx0XFx0XFx0ICAgX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KSwgSVBTVEFUU19NSUJfSU5NQ0FTVCxcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NjMtXFx0XFx0XFx0ICAgc2tiLVxcdTAwM2VsZW4pO1xcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTI2Mj1pbnQgaXA2X2RzdF9ob3BsaW1pdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjcwLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoyNzE6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjcyLVxcdFxcdGlmIChpZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTUxOT1pbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy01MjktXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjUzMDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBJUDZDQihza2IpLVxcdTAwM2VpaWYpKTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNTMxLVxcdGlmICghUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cXHUwMDNlZm9yd2FyZGluZykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9NzQyPXN0YXRpYyBpbnQgbWlmNl9kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCB2aWZpLCBpbnQgbm90aWZ5LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy03ODMtXFxubmV0L2lwdjYvaXA2bXIuYzo3ODQ6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTc4NS1cXHRpZiAoaW42X2Rldikge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz05MDY9c3RhdGljIGludCBtaWY2X2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy05NTItXFxubmV0L2lwdjYvaXA2bXIuYzo5NTM6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTk1NC1cXHRpZiAoaW42X2Rldikge1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0yNjQ9c3RhdGljIHZvaWQgX19pcHY2X3NvY2tfbWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3QpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTI3MC1cXHRpZiAoZGV2KSB7XFxubmV0L2lwdjYvbWNhc3QuYzoyNzE6XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0yNzItXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTMxMz1zdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqaXA2X21jX2ZpbmRfaWRldihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTMyMy1cXG5uZXQvaXB2Ni9tY2FzdC5jOjMyNDpcXHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTMyNS1cXHRkZXZfcHV0KGRldik7XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTkzMz1zdGF0aWMgaW50IF9faXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTkzOS1cXHQvKiB3ZSBuZWVkIHRvIHRha2UgYSByZWZlcmVuY2Ugb24gaWRldiAqL1xcbm5ldC9pcHY2L21jYXN0LmM6OTQwOlxcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L21jYXN0LmMtOTQxLVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MTAyMz1pbnQgaXB2Nl9kZXZfbWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTAyNy1cXG5uZXQvaXB2Ni9tY2FzdC5jOjEwMjg6XFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0xMDI5LVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MTA0Mj1ib29sIGlwdjZfY2hrX21jYXN0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cCxcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTA0OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvbWNhc3QuYzoxMDUwOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0xMDUxLVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MTQwMj12b2lkIGlnbXA2X2V2ZW50X3F1ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbWNhc3QuYy0xNDAzLXtcXG5uZXQvaXB2Ni9tY2FzdC5jOjE0MDQ6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L21jYXN0LmMtMTQwNS1cXHRib29sIHB1dCA9IGZhbHNlO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNDI2PXN0YXRpYyB2b2lkIF9fbWxkX3F1ZXJ5X3dvcmsoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTQ1Ny1cXG5uZXQvaXB2Ni9tY2FzdC5jOjE0NTg6XFx0aWRldiA9IGluNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTE0NTktXFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNTgyPXZvaWQgaWdtcDZfZXZlbnRfcmVwb3J0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbWNhc3QuYy0xNTgzLXtcXG5uZXQvaXB2Ni9tY2FzdC5jOjE1ODQ6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L21jYXN0LmMtMTU4NS1cXHRib29sIHB1dCA9IGZhbHNlO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNjA2PXN0YXRpYyB2b2lkIF9fbWxkX3JlcG9ydF93b3JrKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTE2MzItXFxubmV0L2lwdjYvbWNhc3QuYzoxNjMzOlxcdGlkZXYgPSBpbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0xNjM0LVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MTgzMD1zdGF0aWMgdm9pZCBtbGRfc2VuZHBhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTg0Mi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvbWNhc3QuYzoxODQzOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTE4NDQtXFx0SVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTtcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MjE3ND1zdGF0aWMgdm9pZCBpZ21wNl9zZW5kKHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHR5cGUpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTIyMDUtXFx0bmV0ID0gZGV2X25ldF9yY3UoZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jOjIyMDY6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTIyMDctXFx0SVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTtcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9Mjg0NT12b2lkIGlwdjZfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMjg1OC1cXHQvKiBXZSBjYW5ub3QgY2FsbCBpcHY2X2Rldl9tY19kZWMoKSBkaXJlY3RseSwgb3VyIGNhbGxlciBpblxcbm5ldC9pcHY2L21jYXN0LmM6Mjg1OTpcXHQgKiBhZGRyY29uZi5jIGhhcyBOVUxMJ2Qgb3V0IGRldi1cXHUwMDNlaXA2X3B0ciBzbyBpbjZfZGV2X2dldCgpIHdpbGxcXG5uZXQvaXB2Ni9tY2FzdC5jLTI4NjAtXFx0ICogZmFpbC5cXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9Mjg5MT1zdGF0aWMgaW50IGlwdjZfbWNfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMjg5NS1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxubmV0L2lwdjYvbWNhc3QuYzoyODk2OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0yODk3LVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0yOTIzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlmbWNhZGRyNiAqaWdtcDZfbWNfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0yOTMxLVxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxubmV0L2lwdjYvbWNhc3QuYzoyOTMyOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L21jYXN0LmMtMjkzMy1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTI5NDU9c3RhdGljIHN0cnVjdCBpZm1jYWRkcjYgKmlnbXA2X21jX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaWZtY2FkZHI2ICppbSlcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMjk1NS1cXHRcXHR9XFxubmV0L2lwdjYvbWNhc3QuYzoyOTU2OlxcdFxcdHN0YXRlLVxcdTAwM2VpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTI5NTctXFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MzAzMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcDZfc2ZfbGlzdCAqaWdtcDZfbWNmX2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMzA0Mi1cXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xcbm5ldC9pcHY2L21jYXN0LmM6MzA0MzpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTMwNDQtXFx0XFx0aWYgKHVubGlrZWx5KGlkZXYgPT0gTlVMTCkpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTMwNjA9c3RhdGljIHN0cnVjdCBpcDZfc2ZfbGlzdCAqaWdtcDZfbWNmX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaXA2X3NmX2xpc3QgKnBzZilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMzA3Mi1cXHRcXHRcXHR9XFxubmV0L2lwdjYvbWNhc3QuYzozMDczOlxcdFxcdFxcdHN0YXRlLVxcdTAwM2VpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTMwNzQtXFx0XFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlaWRldilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MzI1PXN0YXRpYyBpbnQgbmRpc2NfY29uc3RydWN0b3Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTMzMi1cXG5uZXQvaXB2Ni9uZGlzYy5jOjMzMzpcXHRpbjZfZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTMzNC1cXHRpZiAoIWluNl9kZXYpIHtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9NDAwPXN0YXRpYyBib29sIG5kaXNjX2FsbG93X2FkZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy00MDIte1xcbm5ldC9pcHY2L25kaXNjLmM6NDAzOlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy00MDQtXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTQ0MD1zdGF0aWMgdm9pZCBpcDZfbmRfaGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTQ0OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvbmRpc2MuYzo0NTA6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtNDUxLVxcdHRjbGFzcyA9IGlkZXYgPyBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLm5kaXNjX3RjbGFzcykgOiAwO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz00Njg9dm9pZCBuZGlzY19zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy01MDgtXFx0ZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTtcXG5uZXQvaXB2Ni9uZGlzYy5jOjUwOTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtNTEwLVxcdElQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTU4MT1zdGF0aWMgdm9pZCBuZGlzY19zZW5kX3Vuc29sX25hKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTU4NS1cXG5uZXQvaXB2Ni9uZGlzYy5jOjU4NjpcXHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTU4Ny1cXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTc4OD1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2NfcmVjdl9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy04OTUtXFxubmV0L2lwdjYvbmRpc2MuYzo4OTY6XFx0XFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy04OTctXFx0XFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTk4Nz1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2NfcmVjdl9uYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy05OTYtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbm5ldC9pcHY2L25kaXNjLmM6OTk3OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy05OTgtXFx0c3RydWN0IGluZXQ2X2lmYWRkciAqaWZwO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xMTI2PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X3JzKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTExMzktXFxubmV0L2lwdjYvbmRpc2MuYzoxMTQwOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTExNDEtXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTI2Ny1cXG5uZXQvaXB2Ni9uZGlzYy5jOjEyNjg6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTI2OS1cXHRpZiAoIWluNl9kZXYpIHtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTc5MT1zdGF0aWMgYm9vbCBuZGlzY19zdXBwcmVzc19mcmFnX25kaXNjKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbmRpc2MuYy0xNzkyLXtcXG5uZXQvaXB2Ni9uZGlzYy5jOjE3OTM6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTc5NC1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTg1Nj1zdGF0aWMgaW50IG5kaXNjX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTg2OS1cXHRjYXNlIE5FVERFVl9VUDpcXG5uZXQvaXB2Ni9uZGlzYy5jOjE4NzA6XFx0XFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy0xODcxLVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTg3OC1cXHRjYXNlIE5FVERFVl9DSEFOR0U6XFxubmV0L2lwdjYvbmRpc2MuYzoxODc5OlxcdFxcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTg4MC1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTE5Mjk9aW50IG5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTE5NTMtXFxubmV0L2lwdjYvbmRpc2MuYzoxOTU0OlxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiByZXQgPT0gMCBcXHUwMDI2XFx1MDAyNiBkZXYgXFx1MDAyNlxcdTAwMjYgKGlkZXYgPSBpbjZfZGV2X2dldChkZXYpKSAhPSBOVUxMKSB7XFxubmV0L2lwdjYvbmRpc2MuYy0xOTU1LVxcdFxcdGlmIChjdGwtXFx1MDAzZWRhdGEgPT0gTkVJR0hfVkFSX1BUUihpZGV2LVxcdTAwM2VuZF9wYXJtcywgQkFTRV9SRUFDSEFCTEVfVElNRSkpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfdHByb3h5X2lwdjYuYz0xMD1uZl90cHJveHlfbGFkZHI2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdXNlcl9sYWRkcixcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl90cHJveHlfaXB2Ni5jLTIwLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl90cHJveHlfaXB2Ni5jOjIxOlxcdGluZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY2LmMtMjItXFx0aWYgKGluZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTE2MD1zdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMTc3LVxcdFxcdFxcdGlmIChydF9pZGV2IFxcdTAwMjZcXHUwMDI2IHJ0X2lkZXYtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjg6NTcuNzQ2Njc0NTM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4ODk5NjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgUmVmY291bnQgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgYGluNl9kZXZfZ2V0YCBmdW5jdGlvbiBpcyBhcHBhcmVudGx5IGEgcmVhbCB3b3JraG9yc2UgaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdGFjay4gSSBrbmV3IGl0IHdhcyBoZWF2aWx5IHVzZWQsIGJ1dCBub3cgSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIHJlZmNvdW50IGJ1ZyBmaXguIFRoZSB0cmlja3kgcGFydCwgYXMgdXN1YWwsIGlzIHRoYXQgYGluNl9kZXZfZ2V0YCBpcyBpbmxpbmVkIOKAkyBpdCBkb2Vzbid0IGhhdmUgaXRzIG93biBzeW1ib2wuIFRoYXQgbWVhbnMgSSdsbCBoYXZlIHRvIGxvb2sgdXBzdHJlYW0gdG8gdGhlIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiBpdC5cblxuU2luY2UgbXkgZm9jdXMgaXMgb24gdXNlci1zcGFjZSBpbXBhY3QsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgY2FsbCBzaXRlcyB0aGF0IGFyZSBleHBvc2VkIHZpYSB0aGUgc3lzdGVtIGNhbGxzIGFuZCBpb2N0bHMgYW5kIG5ldGxpbmssIGFuZCBzbyBvbi4gTGV0J3MgbWFrZSBhIGxpc3QuIGBpcHY2X3NvY2tfYWNfam9pbmAsIGBpcHY2X2Rldl9hY19kZWNgLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAsIGFuZCBhbGwgdGhlIE5ESVNDLXJlbGF0ZWQgY2FsbHMsIGxpa2UgYG5kaXNjX2NvbnN0cnVjdG9yYCwgYG5kaXNjX3NlbmRfdW5zb2xfbmFgLCBgbmRpc2NfcmVjdl9uc2AsIGBuZGlzY19uZXRkZXZfZXZlbnRgLCBhbmQgYG5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlYC4gSXQncyBhIGxvbmcgbGlzdCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGZpbmQgdGhlIHJpZ2h0IGNhbmRpZGF0ZXMuXG5cbk5vdywgYmVjYXVzZSBgaW42X2Rldl9nZXRgIGlzIGNhbGxlZCAqZXZlcnl3aGVyZSogaW4gdGhlIElQdjYgc3RhY2ssIEkgZG9uJ3Qgd2FudCB0byBnZXQgbG9zdCBpbiBhIGZvcmVzdCBvZiBjb2RlLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9ucyB0aGF0IGxvb2sgbGlrZSBnb29kIGNhbmRpZGF0ZXM6IGBpcHY2X3NvY2tfYWNfam9pbmAgYW5kIGBpcHY2X3NvY2tfYWNfZHJvcGAuIExldCdzIHNlZSBpZiB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSB0aGUgc291cmNlIG9mIHRoZSByZWZjb3VudCBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI5OjAzLjAzNTY3MzExMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzAyMjc0ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc29ja19hY19qb2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MzA0PXZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDktICovXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozMTA6aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMTEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz01NT1zdGF0aWMgdTMyIGluZXQ2X2FjYWRkcl9oYXNoKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYy02Ni1cXG5uZXQvaXB2Ni9hbnljYXN0LmM6Njc6aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9hbnljYXN0LmMtNjgte1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04OTItXFx0XFx0aWYgKG9wdG5hbWUgPT0gSVBWNl9KT0lOX0FOWUNBU1QpXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjg5MzpcXHRcXHRcXHRyZXR2ID0gaXB2Nl9zb2NrX2FjX2pvaW4oc2ssIG1yZXEuaXB2Nm1yX2lmaW5kZXgsIFxcdTAwMjZtcmVxLmlwdjZtcl9hY2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04OTQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyOTowNS43Mzc5NTI4MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY0OTA4OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSoqXG5cbkFscmlnaHQsIHNvIGBpcHY2X3NvY2tfYWNfam9pbmAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGRvX2lwdjZfc2V0c29ja29wdGAsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgSVBWNl9KT0lOX0FOWUNBU1RgIG9wdGlvbiBpcyB1c2VkLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmcg4oCTIGRpcmVjdCB1c2Vyc3BhY2UgYWNjZXNzIGlzIGEgY2xhc3NpYyBlbnRyeSBwb2ludC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBrZXJuZWwgZW52aXJvbm1lbnQuIExldCdzIHNlZS4uLiB0aGUgY29kZSdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIHBpdm90IGFuZCBsb29rIGF0IHRoZSBjb3JyZXNwb25kaW5nIFwiZHJvcFwiIGZ1bmN0aW9uLCBgaXB2Nl9zb2NrX2FjX2Ryb3BgLiBVbmRlcnN0YW5kaW5nIHRoZSBkcm9wIHBhdGggaXMganVzdCBhcyBjcnVjaWFsLiBJdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIGhhbmRsaW5nIG9yIGNsZWFudXAgbG9naWMgbGl2ZXMg4oCTIGFuZCB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgdGVuZCB0byBoaWRlIGlmIG5vdCBwcm9wZXJseSBoYW5kbGVkLiBHb3R0YSBzZWUgaWYgdGhlIGRyb3AgcGF0aCBoYXMgc2ltaWxhciBmbGF3cywgb3IgaWYgb25lIHBhdGggaXMgbW9yZSBwcm9ibGVtYXRpYyB0aGFuIHRoZSBvdGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyOTowOS4yMDI4Njc4OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDU4OTA2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zb2NrX2FjX2Ryb3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zMTA9aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMTEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMxMjppbnQgaXB2Nl9zb2NrX2FjX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMxMy1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTY3PWludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmMtMTcyLSAqL1xcbm5ldC9pcHY2L2FueWNhc3QuYzoxNzM6aW50IGlwdjZfc29ja19hY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9hbnljYXN0LmMtMTc0LXtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODk0LVxcdFxcdGVsc2VcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6ODk1OlxcdFxcdFxcdHJldHYgPSBpcHY2X3NvY2tfYWNfZHJvcChzaywgbXJlcS5pcHY2bXJfaWZpbmRleCwgXFx1MDAyNm1yZXEuaXB2Nm1yX2FjYWRkcik7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg5Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MTEuODA4NzY4MjYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTM5ODEyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipUYXJnZXRpbmcgSVB2NiBTb2NrZXQgT3B0aW9ucyBmb3IgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gYGlwdjZfc29ja19hY19kcm9wYCwgdGhhdCdzIGEga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQuIFdlIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBkb19pcHY2X3NldHNvY2tvcHRgLCBzcGVjaWZpY2FsbHkgZm9yIGBJUFY2X0xFQVZFX0FOWUNBU1RgLiBUaG9zZSB0d28gZnVuY3Rpb25zLCBgaXB2Nl9zb2NrX2FjX2Ryb3BgIGFuZCBgZG9faXB2Nl9zZXRzb2Nrb3B0YCwgdGhleSdyZSBkZWZpbml0ZWx5IHByaW1lIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBpbnNwZWN0aW9uLiAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gZGlnIHVwIHNvbWV0aGluZyBpbnRlcmVzdGluZy5cblxuTGV0J3Mgbm90IHN0b3AgdGhlcmUsIHRob3VnaC4gV2UgYWxzbyBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCBhbmQgYGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mYC4gVGhhdCdsbCBwcm92aWRlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuIEl0J3MgYWJvdXQgcHVsbGluZyB0b2dldGhlciBhbGwgdGhlIHBpZWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0OTEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyOToxNS4yNjI3NTI0NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODk5MTAxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTYxOD1zdGF0aWMgaW50IGluZXQ2X25ldGNvbmZfdmFsaWRfZ2V0X3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NTYtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NTc6c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NTgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NzUzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgYWRkcmNvbmZfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc1NTEtXFx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVUQ09ORixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc1NTI6XFx0IC5kb2l0ID0gaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZiwgLmR1bXBpdCA9IGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzU1My1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUQgfCBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI5OjE3Ljg1MjY2ODE5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc4NjI1NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXRsaW5rIGhhbmRsZXJzLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAgYW5kIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAuIFRoZXkncmUgdGhlIGdvLXRvIGZ1bmN0aW9ucyBmb3IgcmV0cmlldmluZyBhbmQgZHVtcGluZyBJUHY2IGRldmljZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQgdGhleSdyZSBkb2luZyBvbiB0aGUgaW5zaWRlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGF0IGRhdGEgaXMgZXhwb3NlZCBpcyBrZXkuXG5cbkdpdmVuIEknbSBsb29raW5nIGF0IG5ldHdvcmtpbmcgc3R1ZmYsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nIGR1cmluZyBuZWlnaGJvciBkaXNjb3ZlcnksIGFuZCB0byB0aGF0IGVuZCwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBuZGlzY19zZW5kX3Vuc29sX25hYCBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdW5zb2xpY2l0ZWQgbmVpZ2hib3IgYWR2ZXJ0aXNlbWVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbiBjb250ZXh0LiBJdCdsbCBnaXZlIG1lIGEgdmlldyBpbnRvIGhvdyBvdGhlciBub2RlcyBhcmUgdXBkYXRlZCB3aXRoIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMDEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyOToyMS40MzEyOTYyNjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTk0OTQ0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRpc2Nfc2VuZF91bnNvbF9uYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZGlzYy5jPTU3OT1FWFBPUlRfU1lNQk9MX0dQTChuZGlzY19zZW5kX25hKTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTU4MC1cXG5uZXQvaXB2Ni9uZGlzYy5jOjU4MTpzdGF0aWMgdm9pZCBuZGlzY19zZW5kX3Vuc29sX25hKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjYvbmRpc2MuYy01ODIte1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xODU2PXN0YXRpYyBpbnQgbmRpc2NfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xODc0LVxcdFxcdCAgICBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VuZGlzY19ub3RpZnkpKVxcbm5ldC9pcHY2L25kaXNjLmM6MTg3NTpcXHRcXHRcXHRuZGlzY19zZW5kX3Vuc29sX25hKGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy0xODc2LVxcdFxcdGluNl9kZXZfcHV0KGlkZXYpO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xODk4LVxcdGNhc2UgTkVUREVWX05PVElGWV9QRUVSUzpcXG5uZXQvaXB2Ni9uZGlzYy5jOjE4OTk6XFx0XFx0bmRpc2Nfc2VuZF91bnNvbF9uYShkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTkwMC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MjMuOTUwNzk4OTI0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjgwNzMxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBzcGVha2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKk5ldHdvcmsgSW50ZXJmYWNlIEV2ZW50IEhhbmRsaW5nIC0gQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBuZXR3b3JrIGludGVyZmFjZSBldmVudHMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbi4gSSBrbm93IHRoYXQgYG5kaXNjX3NlbmRfdW5zb2xfbmFgIGdldHMgdHJpZ2dlcmVkIHdoZW4gY2VydGFpbiBuZXR3b3JrIGRldmljZSBldmVudHMgb2NjdXIuIFRoYXQncyBmYWlybHkgY2xlYXIuIEJ1dCB0aGVuIHRoZSBxdWVzdGlvbiBhcmlzZXM6IFdoYXQgYWJvdXQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgPyBEb2VzIHRoYXQgbWV0aG9kIGdldCBjYWxsZWQgb24gdGhvc2Ugc2FtZSBldmVudHM/IEFyZSB0aGV5IGNhbGxlZCBhdCBhbGwsIG9yIGFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZT8gRG9lcyBvbmUgdHJpZ2dlciB0aGUgb3RoZXI/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zLiBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGV2ZW50IGhhbmRsaW5nIHdvcmtmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY4OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI5OjI2Ljg3ODg3NjA1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MTkxNDM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRyY29uZl9wcmVmaXhfcmN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MTUzPXZvaWQgYWRkcmNvbmZfYWRkX2xpbmtsb2NhbChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTUtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoxNTY6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0yODI9c3RhdGljIGlubGluZSBib29sIGlwdjZfaXNfbWxkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBpbnQgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDMtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozMDQ6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDUtXFx0XFx0XFx0IHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pO1xcbi0tXFxubmV0LzZsb3dwYW4vbmRpc2MuYz0xODg9c3RhdGljIHZvaWQgbG93cGFuX25kaXNjX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0LzZsb3dwYW4vbmRpc2MuYy0yMDMtXFx0ICAgICFhZGRyY29uZl9pZmlkXzgwMjE1NF82bG93cGFuKGFkZHItXFx1MDAzZXM2X2FkZHIgKyA4LCBkZXYpKSB7XFxubmV0LzZsb3dwYW4vbmRpc2MuYzoyMDQ6XFx0XFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXFxubmV0LzZsb3dwYW4vbmRpc2MuYy0yMDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgYWRkciwgYWRkcl90eXBlLCBhZGRyX2ZsYWdzLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0xMzY5PXN0YXRpYyBpbnQgaXB2Nl9jcmVhdGVfdGVtcGFkZHIoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwLCBib29sIGJsb2NrKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xNDgzLVxcdGNmZy5pZmFfZmxhZ3MgPSBJRkFfRl9URU1QT1JBUlk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxNDg0OlxcdC8qIHNldCBpbiBhZGRyY29uZl9wcmVmaXhfcmN2KCkgKi9cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODUtXFx0aWYgKGlmcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkFfRl9PUFRJTUlTVElDKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNjg5PXN0YXRpYyBib29sIGlzX2FkZHJfbW9kZV9nZW5lcmF0ZV9zdGFibGUoc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5NC1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI2OTU6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5Ni1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5NS19XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk2OkVYUE9SVF9TWU1CT0xfR1BMKGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5Ny1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTg6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk5LXtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0Mi1vazpcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NDM6XFx0XFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQ0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZhZGRyLCBhZGRyX3R5cGUsXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTU0Ni1cXHRcXHQgICAgIHAgPSBuZGlzY19uZXh0X29wdGlvbihwLCBuZG9wdHMubmRfb3B0c19waV9lbmQpKSB7XFxubmV0L2lwdjYvbmRpc2MuYzoxNTQ3OlxcdFxcdFxcdGFkZHJjb25mX3ByZWZpeF9yY3Yoc2tiLVxcdTAwM2VkZXYsICh1OCAqKXAsXFxubmV0L2lwdjYvbmRpc2MuYy0xNTQ4LVxcdFxcdFxcdFxcdFxcdCAgICAocC1cXHUwMDNlbmRfb3B0X2xlbikgXFx1MDAzY1xcdTAwM2MgMyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MjkuNDcwNzk3Njk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNTQ1OTUxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFByb21pc2luZyBJUHY2IE5ldHdvcmsgUGFja2V0IEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaGF0J3MgaWRlYWwuIEl0J3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCB3aGljaCBpcyBpdHNlbGYgdHJpZ2dlcmVkIGJ5IGluY29taW5nIHJvdXRlciBhZHZlcnRpc2VtZW50cy4gTWVhbmluZywgaXQncyByZWFjdGluZyBkaXJlY3RseSB0byBuZXR3b3JrIHBhY2tldHMg4oCTIHRoYXQncyB0aGUga2luZCBvZiBlbnRyeSBwb2ludCBJIHdhbnQgdG8gZXhhbWluZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB3b3J0aCBkaWdnaW5nIGludG8uIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgaXB2Nl9zb2NrX2FjX2pvaW5gLCBgaXB2Nl9zb2NrX2FjX2Ryb3BgLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCAod2hpY2ggd2UgYWxyZWFkeSBrbm93IGlzIGludGVyZXN0aW5nKSwgYG5kaXNjX3JlY3ZfbnNgLCBgbmRpc2NfcmVjdl9uYWAsIGFuZCBgbmRpc2NfcmVjdl9yc2AuIFllcCwgYWxsIG9mIHRoZXNlIGxvb2sgbGlrZSBleGNlbGxlbnQgdGFyZ2V0cy4gVGhleSdyZSBhbGwgaGFuZGxpbmcgb3IgcmVhY3RpbmcgdG8gbmV0d29yay1sZXZlbCBldmVudHMsIGdpdmluZyBtZSBhIHNvbGlkIGJhc2lzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBqdXN0IHZlcmlmeSB0aGUgcHJlcmVxdWlzaXRlcy4gSSdtIGFzc3VtaW5nIElQdjYgaXMgZW5hYmxlZCBieSBgQ09ORklHX0lQVjZgLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhhdCB0byBtYWtlIHN1cmUgSSBhbSB3b3JraW5nIHdpdGggYSBjb3JyZWN0bHkgY29uZmlndXJlZCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MjQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MzUuNjI1Mzk2NzA1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODAyMDg3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MzguNDI3NDg5MjgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDk4OTYxOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBpbjZfZGV2X2dldGAgVXNhZ2Ugd2l0aGluIHRoZSBJUHY2IFN0YWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIGluY29ycG9yYXRlIGBJUFY2YCBpbnRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgaW42X2Rldl9nZXRgLCB3aGljaCBpcyBhIGZ1bmRhbWVudGFsIElQdjYgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgcGFydGljdWxhcmx5IHdoZXJlIGBpbjZfZGV2X2dldGAgaXMgY2FsbGVkLlxuXG5NeSBpbnZlc3RpZ2F0aW9uIGhhcyBjb25maXJtZWQgdGhhdCBgaW42X2Rldl9nZXRgIGlzIGNhbGxlZCBkaXJlY3RseSBpbiBtdWx0aXBsZSBpbXBvcnRhbnQgZnVuY3Rpb25zLiBUaGVzZSBpbmNsdWRlIGBpcHY2X3NvY2tfYWNfam9pbmAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBqb2luaW5nIGFueWNhc3Qgc29ja2V0cywgYGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmZgIHdoaWNoIGRlYWxzIHdpdGggbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgdGhhdCBpcyB1c2VkIHRvIHByb2Nlc3MgcHJlZml4IGluZm9ybWF0aW9uLiBUaGVzZSBhcmUgYWxsIGdvb2QgdGFyZ2V0cyB0byB0ZXN0LiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IHJlbGV2YW50IHVzZXMgb2YgYGluNl9kZXZfZ2V0YC4gYG5kaXNjX3JlY3ZfbnNgIGluIHRoZSBuZWlnaGJvciBkaXNjb3ZlcnkgY29kZSBhbHNvIHVzZXMgaXQgZGlyZWN0bHkuXG5cbkFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGBfX2luNl9kZXZfZ2V0YCBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaW5zdGFuY2VzIG9mIHRoaXMgaW4gdGhlIGNvZGUuIEkgYW0gdGhpbmtpbmcgb2YgYGFkZHJjb25mX25vdGlmeWAgYW5kIGBhZGRyY29uZl9pZmRvd25gIGFzIHdlbGwuIEluIGFkZGl0aW9uLCBgaXB2Nl9kZXZfbWNfZGVjYCwgYGlwdjZfZGV2X21jX2luY2AsIGBfX2lwdjZfZGV2X21jX2luY2AsIGBpZ21wNl9ldmVudF9xdWVyeWAsIGBpZ21wNl9ldmVudF9yZXBvcnRgIGFuZCBgbWxkX3NlbmRwYWNrYCBhbGwgdXNlcyBgX19pbjZfZGV2X2dldGAuXG5cblNvLCB0byBiZSB2ZXJ5IHRob3JvdWdoLCBJIHdpbGwgYWRkIGBpcHY2X3NvY2tfYWNfam9pbmAsIGBuZGlzY19yZWN2X25zYCwgYGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBpcHY2X2Rldl9tY19kZWNgIGFuZCBgX19pcHY2X2Rldl9tY19pbmNgIHRvIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QgdG8gbWFrZSBzdXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYXJlIGZ1bGx5IGFzc2Vzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkzNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MzA6MDYuOTI2NDU1Mzc3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM3NjY0MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfZGV2X21jX2luY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9hZGRyY29uZi5oPTI1OT1ib29sIGluZXQ2X21jX2NoZWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGluNl9hZGRyICptY19hZGRyLFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNjEtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoyNjI6aW50IGlwdjZfZGV2X21jX2luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMjYzLWludCBfX2lwdjZfZGV2X21jX2RlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjMzPXN0YXRpYyB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMzctXFx0aXB2Nl9hZGRyX3NldChcXHUwMDI2YWRkciwgaHRvbmwoMHhmZjAyMDAwMCksIDAsIDAsIGh0b25sKDB4NmEpKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQyMzg6XFx0aXB2Nl9kZXZfbWNfaW5jKGJyLVxcdTAwM2VkZXYsIFxcdTAwMjZhZGRyKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMzktfVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNzc9c3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwdjZfYWRkX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00NzEtXFx0XFx0LyogSm9pbiBpbnRlcmZhY2UtbG9jYWwgYWxsLW5vZGUgbXVsdGljYXN0IGdyb3VwICovXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo0NzI6XFx0XFx0aXB2Nl9kZXZfbWNfaW5jKGRldiwgXFx1MDAyNmluNmFkZHJfaW50ZXJmYWNlbG9jYWxfYWxsbm9kZXMpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDczLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDc0LVxcdFxcdC8qIEpvaW4gYWxsLW5vZGUgbXVsdGljYXN0IGdyb3VwICovXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo0NzU6XFx0XFx0aXB2Nl9kZXZfbWNfaW5jKGRldiwgXFx1MDAyNmluNmFkZHJfbGlua2xvY2FsX2FsbG5vZGVzKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ3Ni1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDc4LVxcdFxcdGlmIChuZGV2LVxcdTAwM2VjbmYuZm9yd2FyZGluZyBcXHUwMDI2XFx1MDAyNiAoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9NVUxUSUNBU1QpKVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDc5OlxcdFxcdFxcdGlwdjZfZGV2X21jX2luYyhkZXYsIFxcdTAwMjZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ4MC1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTgwNj1zdGF0aWMgdm9pZCBkZXZfZm9yd2FyZF9jaGFuZ2Uoc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtODE4LVxcdFxcdGlmIChpZGV2LVxcdTAwM2VjbmYuZm9yd2FyZGluZykge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6ODE5OlxcdFxcdFxcdGlwdjZfZGV2X21jX2luYyhkZXYsIFxcdTAwMjZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjgyMDpcXHRcXHRcXHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcXHUwMDI2aW42YWRkcl9pbnRlcmZhY2Vsb2NhbF9hbGxyb3V0ZXJzKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjgyMTpcXHRcXHRcXHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcXHUwMDI2aW42YWRkcl9zaXRlbG9jYWxfYWxscm91dGVycyk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy04MjItXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjI1ND12b2lkIGFkZHJjb25mX2pvaW5fc29saWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjI2MS1cXHRhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KGFkZHIsIFxcdTAwMjZtYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMjYyOlxcdGlwdjZfZGV2X21jX2luYyhkZXYsIFxcdTAwMjZtYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMjYzLX1cXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9OTE9c3RhdGljIGludCBpcDZfbWNfbGVhdmVfc3JjKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwdjZfbWNfc29ja2xpc3QgKmltbCxcXG5uZXQvaXB2Ni9tY2FzdC5jLTkyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jOjkzOnN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9tY2FzdC5jLTk0LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCB1bnNpZ25lZCBpbnQgbW9kZSk7XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTE5OD1zdGF0aWMgaW50IF9faXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMjMzLVxcdC8qIG5vdyBhZGQvaW5jcmVhc2UgdGhlIGdyb3VwIG1lbWJlcnNoaXAgb24gdGhlIGRldmljZSAqL1xcbm5ldC9pcHY2L21jYXN0LmM6MjM0OlxcdGVyciA9IF9faXB2Nl9kZXZfbWNfaW5jKGRldiwgYWRkciwgbW9kZSk7XFxubmV0L2lwdjYvbWNhc3QuYy0yMzUtXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTg5ND1zdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtOTMyLSAqL1xcbm5ldC9pcHY2L21jYXN0LmM6OTMzOnN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9tY2FzdC5jLTkzNC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTk3OS1cXG5uZXQvaXB2Ni9tY2FzdC5jOjk4MDppbnQgaXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9tY2FzdC5jLTk4MS17XFxubmV0L2lwdjYvbWNhc3QuYzo5ODI6XFx0cmV0dXJuIF9faXB2Nl9kZXZfbWNfaW5jKGRldiwgYWRkciwgTUNBU1RfRVhDTFVERSk7XFxubmV0L2lwdjYvbWNhc3QuYy05ODMtfVxcbm5ldC9pcHY2L21jYXN0LmM6OTg0OkVYUE9SVF9TWU1CT0woaXB2Nl9kZXZfbWNfaW5jKTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTk4NS1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MzczPXN0YXRpYyBpbnQgcG5kaXNjX2NvbnN0cnVjdG9yKHN0cnVjdCBwbmVpZ2hfZW50cnkgKm4pXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTM4Mi1cXHRhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KGFkZHIsIFxcdTAwMjZtYWRkcik7XFxubmV0L2lwdjYvbmRpc2MuYzozODM6XFx0cmV0dXJuIGlwdjZfZGV2X21jX2luYyhkZXYsIFxcdTAwMjZtYWRkcik7XFxubmV0L2lwdjYvbmRpc2MuYy0zODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDozMDowOC42NjQxMzA3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ0NDM0NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gSVB2NiBNdWx0aWNhc3QgSm9pbiBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBpbnRlcm5hbHMgb2YgSVB2NiBtdWx0aWNhc3Qgam9pbnMsIHNwZWNpZmljYWxseSwgdGhlIGBfX2lwdjZfc29ja19tY19qb2luYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhhdCBmdW5jdGlvbiBjYWxscyBgX19pcHY2X2Rldl9tY19pbmNgLCBhbmQgdGhhdCwgaW4gdHVybiwgY2FsbHMgYGluNl9kZXZfZ2V0YC4gVGhhdCB3aG9sZSBmbG93IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiBgaXB2Nl9zb2NrX21jX2pvaW5gIGl0c2VsZiBsb29rcyBsaWtlIGEgbGlrZWx5IHRhcmdldCB0byBleHBsb3JlIGZ1cnRoZXIuIEkgdGhpbmsgSSdsbCBmb2N1cyBvbiBgaXB2Nl9zb2NrX21jX2pvaW5gLiBMZXQncyBjaGVjayBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1MzksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDozMDoxMS44MDg1Njg0NDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ1OTE0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zb2NrX21jX2pvaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM9MTc9aW50IHZ4bGFuX2lnbXBfam9pbihzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgdW5pb24gdnhsYW5fYWRkciAqcmlwLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNDEtXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzo0MjpcXHRcXHRyZXQgPSBpcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgXFx1MDAyNmlwLVxcdTAwM2VzaW42LnNpbjZfYWRkcik7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNDMtXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MjQ0PXN0YXRpYyBpbmxpbmUgYm9vbCBpcHY2X21jX21heV9wdWxsKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTI1Mi1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI1MzppbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTI1NC1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oPTEyMjc9dm9pZCBpcHY2X3N5c2N0bF91bnJlZ2lzdGVyKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMjktXFxuaW5jbHVkZS9uZXQvaXB2Ni5oOjEyMzA6aW50IGlwdjZfc29ja19tY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMzEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG5pbmNsdWRlL25ldC9pcHY2Lmg6MTIzMjppbnQgaXB2Nl9zb2NrX21jX2pvaW5fc3NtKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMzMtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHVuc2lnbmVkIGludCBtb2RlKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzAxNj1zdGF0aWMgaW50IGlwdjZfbWNfY29uZmlnKHN0cnVjdCBzb2NrICpzaywgYm9vbCBqb2luLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMDI0LVxcdGlmIChqb2luKVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzAyNTpcXHRcXHRyZXQgPSBpcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMDI2LVxcdGVsc2VcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xNDY9c3RhdGljIGludCBkb19pcHY2X21jYXN0X2dyb3VwX3NvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTE3MS1cXHRcXHRwc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXFx1MDAyNmdyZXFzLmdzcl9ncm91cDtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTcyOlxcdFxcdHJldHYgPSBpcHY2X3NvY2tfbWNfam9pbl9zc20oc2ssIGdyZXFzLmdzcl9pbnRlcmZhY2UsXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTE3My1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwc2luNi1cXHUwMDNlc2luNl9hZGRyLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTI2Mj1zdGF0aWMgaW50IGlwdjZfbWNhc3Rfam9pbl9sZWF2ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3Ni1cXHRpZiAob3B0bmFtZSA9PSBNQ0FTVF9KT0lOX0dST1VQKVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyNzc6XFx0XFx0cmV0dXJuIGlwdjZfc29ja19tY19qb2luKHNrLCBncmVxLmdyX2ludGVyZmFjZSxcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMjc4LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cHNpbjYtXFx1MDAzZXNpbjZfYWRkcik7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MjgyPXN0YXRpYyBpbnQgY29tcGF0X2lwdjZfbWNhc3Rfam9pbl9sZWF2ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI5Ni1cXHRpZiAob3B0bmFtZSA9PSBNQ0FTVF9KT0lOX0dST1VQKVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyOTc6XFx0XFx0cmV0dXJuIGlwdjZfc29ja19tY19qb2luKHNrLCBncjMyLmdyX2ludGVyZmFjZSxcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMjk4LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwc2luNi1cXHUwMDNlc2luNl9hZGRyKTtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc0LVxcdFxcdGlmIChvcHRuYW1lID09IElQVjZfQUREX01FTUJFUlNISVApXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjg3NTpcXHRcXHRcXHRyZXR2ID0gaXB2Nl9zb2NrX21jX2pvaW4oc2ssIG1yZXEuaXB2Nm1yX2lmaW5kZXgsIFxcdTAwMjZtcmVxLmlwdjZtcl9tdWx0aWFkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04NzYtXFx0XFx0ZWxzZVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNzI9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcDZfbWNfZmluZF9kZXYoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0xOTctICovXFxubmV0L2lwdjYvbWNhc3QuYzoxOTg6c3RhdGljIGludCBfX2lwdjZfc29ja19tY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxubmV0L2lwdjYvbWNhc3QuYy0xOTktXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTI0OC1cXG5uZXQvaXB2Ni9tY2FzdC5jOjI0OTppbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbm5ldC9pcHY2L21jYXN0LmMtMjUwLXtcXG5uZXQvaXB2Ni9tY2FzdC5jOjI1MTpcXHRyZXR1cm4gX19pcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkciwgTUNBU1RfRVhDTFVERSk7XFxubmV0L2lwdjYvbWNhc3QuYy0yNTItfVxcbm5ldC9pcHY2L21jYXN0LmM6MjUzOkVYUE9SVF9TWU1CT0woaXB2Nl9zb2NrX21jX2pvaW4pO1xcbm5ldC9pcHY2L21jYXN0LmMtMjU0LVxcbm5ldC9pcHY2L21jYXN0LmM6MjU1OmludCBpcHY2X3NvY2tfbWNfam9pbl9zc20oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG5uZXQvaXB2Ni9tY2FzdC5jLTI1Ni1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXFxubmV0L2lwdjYvbWNhc3QuYy0yNTcte1xcbm5ldC9pcHY2L21jYXN0LmM6MjU4OlxcdHJldHVybiBfX2lwdjZfc29ja19tY19qb2luKHNrLCBpZmluZGV4LCBhZGRyLCBtb2RlKTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTI1OS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE0MDM9c3RhdGljIGludCBqb2luX21jYXN0X2dyb3VwNihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQxMS1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQxMjpcXHRyZXQgPSBpcHY2X3NvY2tfbWNfam9pbihzaywgZGV2LVxcdTAwM2VpZmluZGV4LCBhZGRyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0MTMtXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC90aXBjL3VkcF9tZWRpYS5jPTQwND1zdGF0aWMgaW50IGVuYWJsZV9tY2FzdChzdHJ1Y3QgdWRwX2JlYXJlciAqdWIsIHN0cnVjdCB1ZHBfbWVkaWFfYWRkciAqcmVtb3RlKVxcbi0tXFxubmV0L3RpcGMvdWRwX21lZGlhLmMtNDE2LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3RpcGMvdWRwX21lZGlhLmM6NDE3OlxcdFxcdGVyciA9IGlwdjZfc29ja19tY19qb2luKHNrLCB1Yi1cXHUwMDNlaWZpbmRleCwgXFx1MDAyNnJlbW90ZS1cXHUwMDNlaXB2Nik7XFxubmV0L3RpcGMvdWRwX21lZGlhLmMtNDE4LVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjMwOjEzLjQ2MzE2ODY0NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY5MzI1MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZvY3VzIExpc3QgZm9yIElQdjYgU29ja2V0IE11bHRpY2FzdCBPcGVyYXRpb25zKipcblxuT2theSwgYWZ0ZXIgY29uc2lkZXJpbmcgdGhlIGluaXRpYWwgb3B0aW9ucywgYGlwdjZfc29ja19tY19qb2luYCBhbmQgYGlwdjZfc29ja19tY19kcm9wYCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgdGFyZ2V0cyBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEknbGwgYWRkIHRoZW0gdG8gdGhlIGxpc3QsIGNsZWFybHkuXG5cblNvLCB0byBiZSBwcmVjaXNlLCBteSBjdXJyZW50IGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczpcblxuKiAgIGBpcHY2X3NvY2tfYWNfam9pbmBcbiogICBgaXB2Nl9zb2NrX2FjX2Ryb3BgXG4qICAgYGlwdjZfc29ja19tY19qb2luYFxuKiAgIGBpcHY2X3NvY2tfbWNfZHJvcGBcbiogICBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmBcbiogICBgYWRkcmNvbmZfcHJlZml4X3JjdmBcbiogICBgbmRpc2NfcmVjdl9uc2BcblxuSGFuZyBvbiBhIG1vbWVudC4uLiBpcyB0aGUgZnVuY3Rpb24gbmFtZSBmb3IgZHJvcHBpbmcgbXVsdGljYXN0IGNvcnJlY3RseSBzdGF0ZWQgYXMgYGlwdjZfc29ja19tY19kcm9wYD8gQmV0dGVyIGRvdWJsZSBjaGVjayB0aGF0IHRvIGNvbmZpcm0uIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZGV0YWlscyBhcmUgcHJlY2lzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2MjAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MzA6MTcuMzMyNDk2MDk3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI4Njg5NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc29ja19tY19kcm9wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jPTUwPWludCB2eGxhbl9pZ21wX2xlYXZlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCB1bmlvbiB2eGxhbl9hZGRyICpyaXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy03NC1cXHRcXHRsb2NrX3NvY2soc2spO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jOjc1OlxcdFxcdHJldCA9IGlwdjZfc29ja19tY19kcm9wKHNrLCBpZmluZGV4LCBcXHUwMDI2aXAtXFx1MDAzZXNpbjYuc2luNl9hZGRyKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy03Ni1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0yNTM9aW50IGlwdjZfc29ja19tY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNTQtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI1NTppbnQgaXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTI1Ni1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oPTEyMzI9aW50IGlwdjZfc29ja19tY19qb2luX3NzbShzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxcbmluY2x1ZGUvbmV0L2lwdjYuaC0xMjMzLVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCB1bnNpZ25lZCBpbnQgbW9kZSk7XFxuaW5jbHVkZS9uZXQvaXB2Ni5oOjEyMzQ6aW50IGlwdjZfc29ja19tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMzUtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzAxNj1zdGF0aWMgaW50IGlwdjZfbWNfY29uZmlnKHN0cnVjdCBzb2NrICpzaywgYm9vbCBqb2luLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMDI2LVxcdGVsc2VcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjMwMjc6XFx0XFx0cmV0ID0gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIGlmaW5kZXgsIGFkZHIpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzAyOC1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTI2Mj1zdGF0aWMgaW50IGlwdjZfbWNhc3Rfam9pbl9sZWF2ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3OC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnBzaW42LVxcdTAwM2VzaW42X2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyNzk6XFx0cmV0dXJuIGlwdjZfc29ja19tY19kcm9wKHNrLCBncmVxLmdyX2ludGVyZmFjZSwgXFx1MDAyNnBzaW42LVxcdTAwM2VzaW42X2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0yODAtfVxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTI4Mj1zdGF0aWMgaW50IGNvbXBhdF9pcHY2X21jYXN0X2pvaW5fbGVhdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0yOTgtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnBzaW42LVxcdTAwM2VzaW42X2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyOTk6XFx0cmV0dXJuIGlwdjZfc29ja19tY19kcm9wKHNrLCBncjMyLmdyX2ludGVyZmFjZSwgXFx1MDAyNnBzaW42LVxcdTAwM2VzaW42X2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zMDAtfVxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04NzYtXFx0XFx0ZWxzZVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo4Nzc6XFx0XFx0XFx0cmV0diA9IGlwdjZfc29ja19tY19kcm9wKHNrLCBtcmVxLmlwdjZtcl9pZmluZGV4LCBcXHUwMDI2bXJlcS5pcHY2bXJfbXVsdGlhZGRyKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0yNTU9aW50IGlwdjZfc29ja19tY19qb2luX3NzbShzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0yNjMtICovXFxubmV0L2lwdjYvbWNhc3QuYzoyNjQ6c3RhdGljIHZvaWQgX19pcHY2X3NvY2tfbWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3QpXFxubmV0L2lwdjYvbWNhc3QuYy0yNjUte1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0yODgtXFxubmV0L2lwdjYvbWNhc3QuYzoyODk6aW50IGlwdjZfc29ja19tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9tY2FzdC5jLTI5MC17XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTMwMy1cXHRcXHRcXHQqbG5rID0gbWNfbHN0LVxcdTAwM2VuZXh0O1xcbm5ldC9pcHY2L21jYXN0LmM6MzA0OlxcdFxcdFxcdF9faXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIG1jX2xzdCk7XFxubmV0L2lwdjYvbWNhc3QuYy0zMDUtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTMxMC19XFxubmV0L2lwdjYvbWNhc3QuYzozMTE6RVhQT1JUX1NZTUJPTChpcHY2X3NvY2tfbWNfZHJvcCk7XFxubmV0L2lwdjYvbWNhc3QuYy0zMTItXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTMzMD12b2lkIF9faXB2Nl9zb2NrX21jX2Nsb3NlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMzM2LVxcdFxcdG5wLVxcdTAwM2VpcHY2X21jX2xpc3QgPSBtY19sc3QtXFx1MDAzZW5leHQ7XFxubmV0L2lwdjYvbWNhc3QuYzozMzc6XFx0XFx0X19pcHY2X3NvY2tfbWNfZHJvcChzaywgbWNfbHN0KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTMzOC1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTM1Mz1pbnQgaXA2X21jX3NvdXJjZShpbnQgYWRkLCBpbnQgb21vZGUsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtNDgyLVxcdGlmIChsZWF2ZWdyb3VwKVxcbm5ldC9pcHY2L21jYXN0LmM6NDgzOlxcdFxcdGVyciA9IGlwdjZfc29ja19tY19kcm9wKHNrLCBwZ3NyLVxcdTAwM2Vnc3JfaW50ZXJmYWNlLCBncm91cCk7XFxubmV0L2lwdjYvbWNhc3QuYy00ODQtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9NDg3PWludCBpcDZfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTU4MC1cXHRpZiAobGVhdmVncm91cClcXG5uZXQvaXB2Ni9tY2FzdC5jOjU4MTpcXHRcXHRlcnIgPSBpcHY2X3NvY2tfbWNfZHJvcChzaywgZ3NmLVxcdTAwM2VnZl9pbnRlcmZhY2UsIGdyb3VwKTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTU4Mi1cXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDozMDoxOC45NjExOTIxODZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MDg3NTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHllcywgYGlwdjZfc29ja19tY19kcm9wYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24uIExldCBtZSBydW4gdGhyb3VnaCB0aGlzIGxpc3Qgb2YgZnVuY3Rpb25zIGFnYWluLiBXZSBoYXZlOiBgaXB2Nl9zb2NrX2FjX2pvaW5gLCBgaXB2Nl9zb2NrX2FjX2Ryb3BgLCBgaXB2Nl9zb2NrX21jX2pvaW5gLCBgaXB2Nl9zb2NrX21jX2Ryb3BgLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYW5kIGBuZGlzY19yZWN2X25zYC4gUmlnaHQuIFRoZSBjb21tb24gdGhyZWFkIGhlcmUgaXMgdGhhdCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIG9yIHRyaWdnZXJlZCBieSBuZXR3b3JrIHBhY2tldHMsIGFuZCBjcnVjaWFsbHksIHRoZXkgYWxsIGNhbGwgYGluNl9kZXZfZ2V0YCBvciBpdHMgdmFyaWFudCBgX19pbjZfZGV2X2dldGAuIEFuZCB0aGF0LCBhcyBJIHJlY2FsbCwgaXMgZXhhY3RseSB0aGUgZnVuY3Rpb24gdGhhdCB0aGUgcGF0Y2ggdGFyZ2V0cywgc3BlY2lmaWNhbGx5IHRvIGZpeCB0aGF0IHBlc2t5IHJlZmNvdW50IGJ1Zy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYGluNl9kZXZfZ2V0YCBhZnRlciBhbGwuIEFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZmxhZyBpcywgYXMgZXhwZWN0ZWQsIGBJUFY2YC4gR2l2ZW4gYWxsIHRoaXMsIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHdpbGwgY29tbWl0IG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTYyNiwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MzA6MjQuNjAyMDcxMjk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2MzYyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NvY2tfYWNfam9pblwiLFxuICAgIFwiaXB2Nl9zb2NrX2FjX2Ryb3BcIixcbiAgICBcImlwdjZfc29ja19tY19qb2luXCIsXG4gICAgXCJpcHY2X3NvY2tfbWNfZHJvcFwiLFxuICAgIFwiaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZlwiLFxuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwibmRpc2NfcmVjdl9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpbiB0aGUgY29yZSBJUHY2IGZ1bmN0aW9uIGBpbjZfZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNpbmNlIGBpbjZfZGV2X2dldGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCB3ZSBmb2N1cyBmdXp6aW5nIG9uIHNldmVyYWwga2V5IElQdjYgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhbmQgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAodmlhIHNldHNvY2tvcHQgb3IgbmV0bGluaykgb3IgbmV0d29yayBwYWNrZXRzICh2aWEgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NvY2tfYWNfam9pblwiLFxuICAgIFwiaXB2Nl9zb2NrX2FjX2Ryb3BcIixcbiAgICBcImlwdjZfc29ja19tY19qb2luXCIsXG4gICAgXCJpcHY2X3NvY2tfbWNfZHJvcFwiLFxuICAgIFwiaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZlwiLFxuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwibmRpc2NfcmVjdl9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpbiB0aGUgY29yZSBJUHY2IGZ1bmN0aW9uIGBpbjZfZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNpbmNlIGBpbjZfZGV2X2dldGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCB3ZSBmb2N1cyBmdXp6aW5nIG9uIHNldmVyYWwga2V5IElQdjYgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhbmQgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAodmlhIHNldHNvY2tvcHQgb3IgbmV0bGluaykgb3IgbmV0d29yayBwYWNrZXRzICh2aWEgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowskllj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 20:07:21 +0000 UTC FinishedAt: 2026-08-01 20:30:25 +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": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "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": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "1b617e37-20ba-4e89-a261-9b479dce08c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_sock_ac_join", "ipv6_sock_ac_drop", "ipv6_sock_mc_join", "ipv6_sock_mc_drop", "inet6_netconf_get_devconf", "addrconf_prefix_rcv", "ndisc_recv_ns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHY2X3NvY2tfYWNfam9pbiYjMzQ7LAogICAgJiMzNDtpcHY2X3NvY2tfYWNfZHJvcCYjMzQ7LAogICAgJiMzNDtpcHY2X3NvY2tfbWNfam9pbiYjMzQ7LAogICAgJiMzNDtpcHY2X3NvY2tfbWNfZHJvcCYjMzQ7LAogICAgJiMzNDtpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mJiMzNDssCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7bmRpc2NfcmVjdl9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCB1bmRlcmZsb3cgaW4gdGhlIGNvcmUgSVB2NiBmdW5jdGlvbiBgaW42X2Rldl9nZXRgIGJ5IHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9gLiBTaW5jZSBgaW42X2Rldl9nZXRgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgd2UgZm9jdXMgZnV6emluZyBvbiBzZXZlcmFsIGtleSBJUHY2IGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQgYW5kIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgKHZpYSBzZXRzb2Nrb3B0IG9yIG5ldGxpbmspIG9yIG5ldHdvcmsgcGFja2V0cyAodmlhIG5laWdoYm9yIGRpc2NvdmVyeSBhbmQgcm91dGVyIGFkdmVydGlzZW1lbnRzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNiM2RkNTc0NmJiMWZjMGQ1Nzc5ZTNjNzBmYTZkMmU0MWZmOGI0MjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDIwOjI4OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oXG5pbmRleCA4Y2VkMjdhODIyOWI2Li5lNjc2NDI0NTk5NWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxuQEAgLTQwNSw4ICYjNDM7NDA1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0aWRldiA9IHJjdV9kZXJlZmVyZW5jZShkZXYtXHUwMDNlaXA2X3B0cik7XG4tXHRpZiAoaWRldilcbi1cdFx0cmVmY291bnRfaW5jKFx1MDAyNmlkZXYtXHUwMDNlcmVmY250KTtcbiYjNDM7XHRpZiAoaWRldiBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZpZGV2LVx1MDAzZXJlZmNudCkpXG4mIzQzO1x0XHRpZGV2ID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGlkZXY7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zb2NrX2FjX2pvaW4mIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX2FjX2Ryb3AmIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX21jX2pvaW4mIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX21jX2Ryb3AmIzM0OywKICAgICYjMzQ7aW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JlY3ZfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgdW5kZXJmbG93IGluIHRoZSBjb3JlIElQdjYgZnVuY3Rpb24gYGluNl9kZXZfZ2V0YCBieSB1c2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gU2luY2UgYGluNl9kZXZfZ2V0YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdlIGZvY3VzIGZ1enppbmcgb24gc2V2ZXJhbCBrZXkgSVB2NiBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0IGFuZCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlICh2aWEgc2V0c29ja29wdCBvciBuZXRsaW5rKSBvciBuZXR3b3JrIHBhY2tldHMgKHZpYSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIHJvdXRlciBhZHZlcnRpc2VtZW50cykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYjNkZDU3NDZiYjFmYzBkNTc3OWUzYzcwZmE2ZDJlNDFmZjhiNDI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAyMDoyODo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCmluZGV4IDhjZWQyN2E4MjI5YjYuLmU2NzY0MjQ1OTk1ZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApAQCAtNDA1LDggJiM0Mzs0MDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaWRldiA9IHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O2lwNl9wdHIpOwotCWlmIChpZGV2KQotCQlyZWZjb3VudF9pbmMoJmFtcDtpZGV2LSZndDtyZWZjbnQpOwomIzQzOwlpZiAoaWRldiAmYW1wOyZhbXA7ICFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtpZGV2LSZndDtyZWZjbnQpKQomIzQzOwkJaWRldiA9IE5VTEw7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGlkZXY7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBpbjZfZGV2X2dldGAgaW4gYGluY2x1ZGUvbmV0L2FkZHJjb25mLmhgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIHJlcGxhY2luZyBhIHNpbXBsZSBgcmVmY291bnRfaW5jYCB3aXRoIGByZWZjb3VudF9pbmNfbm90X3plcm9gLiBTb3VuZHMgbGlrZSBhIHNvbGlkIGZpeCBmb3IgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgdW5kZXJmbG93IHNjZW5hcmlvIGlmIGBpZGV2LSZndDtyZWZjbnRgIGhhcHBlbnMgdG8gYmUgemVyby4gUHJldHR5IGltcG9ydGFudCB0byBjYXRjaCB0aGVzZSBraW5kcyBvZiByYWNlIGNvbmRpdGlvbnMgaW4gY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMuCgpOb3csIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/JiMzNDsgSXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBleHBhbmRlZCBpbiBwbGFjZS4gVGhhdCBtYWtlcyB0YXJnZXRlZCBmdXp6aW5nIGJ5IG5hbWUgYSBiaXQgdHJpY2t5LiBJIGNhbiYjMzk7dCBqdXN0IHRocm93IGEgZnV6emVyIGF0IGBpbjZfZGV2X2dldGAgZGlyZWN0bHkuIEkgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzIHRvIGlkZW50aWZ5IG1lYW5pbmdmdWwgZnV6emluZyB0YXJnZXRzLiBJIGNvdWxkIGxvb2sgZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQgZGlyZWN0bHksIG9yIHNpbmNlIGl0JiMzOTtzIGFuIGlubGluZSBuZXR3b3JraW5nIGZ1bmN0aW9uIEkgY291bGQganVzdCBpbmZlciBpdCYjMzk7cyB1c2VkIGluIGxvdHMgb2YgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBhbmQgSSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgLiBPciBtYXliZSBJIHNob3VsZCBkaWcgaW4gYW5kIHRyeSB0byBmaW5kIHNvbWUgc3BlY2lmaWMgY2FsbGVycyB0byBuYXJyb3cgZG93biB0aGUgZm9jdXMgb2YgdGhlIHRlc3RpbmcuCgpBaCwgcmlnaHQsIGl0JiMzOTtzIElQdjYgbmV0d29ya2luZy4gVGhhdCBoZWxwcyBuYXJyb3cgdGhlIHNjb3BlIGEgYml0LiBMZXQgbWUgcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW42X2Rldl9nZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5NSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0PTg4PXN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIGZpYl9uaF9oZWFkXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3Q6ODk6c3RydWN0IGluZXQ2X2RldiogICAgICAgICAgICAgICAgICAgaXA2X3B0ciAgICAgICAgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICBfX2luNl9kZXZfZ2V0XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvbmV0X2RldmljZS5yc3QtOTAtc3RydWN0IHZsYW5faW5mbyogICAgICAgICAgICAgICAgICAgdmxhbl9pbmZvXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM3LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jOjM4Oi8qIEZvciBpbjZfZGV2X2dldC9pbjZfZGV2X3B1dCAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM5LSNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jPTM3NT1zdGF0aWMgdm9pZCBlbnVtX25ldGRldl9pcHY2X2lwcyhzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM5MS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3JvY2VfZ2lkX21nbXQuYzozOTI6XHRpbjZfZGV2ID0gaW42X2Rldl9nZXQobmRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9yb2NlX2dpZF9tZ210LmMtMzkzLVx0aWYgKCFpbjZfZGV2KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyNjE9c3RhdGljIGludCBnZXRfbGxhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjY3LVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmM6MzI2ODpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjY5LVx0aWYgKGlkZXYgIT0gTlVMTCkge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE2NTY9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzYoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2NtLmMtMTY3Ni1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE2Nzc6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNjc4LVx0XHRpZiAoIWlkZXYpIHtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYz0zMzY9c3RhdGljIHZvaWQgaXJkbWFfYWRkX2lwdjZfYWRkcihzdHJ1Y3QgaXJkbWFfZGV2aWNlICppd2Rldilcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYy0zNDgtXHRcdCAgICAgIChSRUFEX09OQ0UoaXBfZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjYgSUZGX1VQKSkge1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3V0aWxzLmM6MzQ5Olx0XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGlwX2Rldik7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYy0zNTAtXHRcdFx0aWYgKCFpZGV2KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jPTE5Nj1zdGF0aWMgaW50IGN4Z2I0X3VwZGF0ZV9kZXZfY2xpcChzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYzoyMDM6XHRpZGV2ID0gX19pbjZfZGV2X2dldChyb290X2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmMtMjA0LVx0aWYgKCFpZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTgyMzQ9c3RhdGljIGJvb2wgX19tbHhzd19zcF9kZXZfYWRkcl9saXN0X2VtcHR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODI0Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjgyNDM6XHRpbmV0Nl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04MjQ0LVx0aWYgKGluZXQ2X2RldiBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2aW5ldDZfZGV2LVx1MDAzZWFkZHJfbGlzdCkpXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjMzOT1zdGF0aWMgdm9pZCBnZW5ldmVfbGlua19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzY0LVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjM2NTpcdFx0aWYgKCFfX2luNl9kZXZfZ2V0KGRldikpXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzY2LVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zOTM9c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDA3Olx0aWRldiA9IF9faW42X2Rldl9nZXQobmRldik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDA4LVx0aWYgKGlkZXYpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYz0zMDk9c3RhdGljIHZvaWQgZG9fbmVpZ2hfc29saWNpdChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4ICpidWYsIHUxNiB0Y2kpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzM4LVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM6MzM5Olx0aW42X2RldiA9IGluNl9kZXZfZ2V0KG5ldGRldik7XG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYy0zNDAtXHRpZiAoIWluNl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTM3NDM9c3RhdGljIGludCB2eGxhbl9jb25maWdfdmFsaWRhdGUoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2NvbmZpZyAqY29uZixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg0NS1cdFx0aWYgKHVzZV9pcHY2KSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mzg0NjpcdFx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChsb3dlcmRldik7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg0Ny1cbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MzE9c3RhdGljIGludCB3Z19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTMzLVx0c3RydWN0IGluX2RldmljZSAqZGV2X3Y0ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzozNDpcdHN0cnVjdCBpbmV0Nl9kZXYgKmRldl92NiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNS1cdHN0cnVjdCB3Z19kZXZpY2UgKndnID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dvdy5jPTYzOT1zdGF0aWMgdm9pZCBhdGgxMmtfd293X3ByZXBhcmVfbnNfb2ZmbG9hZChzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dvdy5jLTY1MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd293LmM6NjUyOlx0aWRldiA9IGluNl9kZXZfZ2V0KG5kZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93b3cuYy02NTMtXHRpZiAoIWlkZXYpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYz0xMDUxPXN0YXRpYyBpbnQgcWV0aF9sM19hZGRfbWNhc3RfcnRubChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdmlkLCB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYy0xMDk2LVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYzoxMDk3Olx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMtMTA5OC1cdGlmICghaW42X2Rldilcbi0tXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYz04NTY5PXN0YXRpYyBpbnQgZnNjdGxfcXVlcnlfaWZhY2VfaW5mb19pb2N0bChzdHJ1Y3Qga3NtYmRfY29ubiAqY29ubixcbi0tXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYy04NjUzLVxuZnMvc21iL3NlcnZlci9zbWIycGR1LmM6ODY1NDpcdFx0XHRpZGV2NiA9IF9faW42X2Rldl9nZXQobmV0ZGV2KTtcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jLTg2NTUtXHRcdFx0aWYgKCFpZGV2Nilcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTMzNj12b2lkIGluZXQ2X25ldGNvbmZfbm90aWZ5X2RldmNvbmYoc3RydWN0IG5ldCAqbmV0LCBpbnQgZXZlbnQsIGludCB0eXBlLFxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzM5LS8qKlxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNDA6ICogX19pbjZfZGV2X2dldCAtIGdldCBpbmV0Nl9kZXYgcG9pbnRlciBmcm9tIG5ldGRldmljZVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNDEtICogQGRldjogbmV0d29yayBkZXZpY2Vcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM0NS0gKi9cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MzQ2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqX19pbjZfZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNDcte1xuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MzUxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqaW42X2Rldl9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM1NS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MzU2OnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqX19pbjZfZGV2X2dldF9ydG5sX25ldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNTcte1xuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MzY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqX19pbjZfZGV2X3N0YXRzX2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzc2LVx0fVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNzc6XHRyZXR1cm4gX19pbjZfZGV2X2dldChkZXYpO1xuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNzgtfVxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzgwLS8qKlxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozODE6ICogX19pbjZfZGV2X2dldF9zYWZlbHkgLSBnZXQgaW5ldDZfZGV2IHBvaW50ZXIgZnJvbSBuZXRkZXZpY2VcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzgyLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM4My0gKlxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozODQ6ICogVGhpcyBpcyBhIHNhZmVyIHZlcnNpb24gb2YgX19pbjZfZGV2X2dldFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zODUtICovXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjM4NjpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0Nl9kZXYgKl9faW42X2Rldl9nZXRfc2FmZWx5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM4Ny17XG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zOTQtLyoqXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjM5NTogKiBpbjZfZGV2X2dldCAtIGdldCBpbmV0Nl9kZXYgcG9pbnRlciBmcm9tIG5ldGRldmljZVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zOTYtICogQGRldjogbmV0d29yayBkZXZpY2Vcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQwMS0gKi9cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6NDAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqaW42X2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtNDAzLXtcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTQxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaF9wYXJtcyAqX19pbjZfZGV2X25kX3Bhcm1zX2dldF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtNDE1LXtcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6NDE2Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtNDE3LVxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9NDU1PXN0YXRpYyBpbmxpbmUgYm9vbCBpcDZfaWdub3JlX2xpbmtkb3duKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQ1Ni17XG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjQ1NzpcdGNvbnN0IHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQ1OC1cbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNjU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzc4LVx0cmN1X3JlYWRfbG9jaygpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6Mzc5Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldl9yY3UoZHN0KSk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zODAtXHRpZiAoaWRldilcbi0tXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaD02NT1pcDZmcmFnX2V4cGlyZV9mcmFnX3F1ZXVlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZyYWdfcXVldWUgKmZxKVxuLS1cbmluY2x1ZGUvbmV0L2lwdjZfZnJhZy5oLTg5LVxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmg6OTA6XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpO1xuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmg6OTE6XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNVElNRU9VVCk7XG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaC05Mi1cbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaD03NT1zdGF0aWMgaW5saW5lIGludCBuZnRfc2V0X3BrdGluZm9faXB2Nl9pbmdyZXNzKHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfaXB2Ni5oLTk0LVx0aWYgKHBrdF9sZW4gJiM0Mzsgc2l6ZW9mKCppcDZoKSBcdTAwM2UgcGt0LVx1MDAzZXNrYi1cdTAwM2VsZW4pIHtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfaXB2Ni5oOjk1Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChuZnRfaW4ocGt0KSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaC05Ni1cdFx0X19JUDZfSU5DX1NUQVRTKG5mdF9uZXQocGt0KSwgaWRldiwgSVBTVEFUU19NSUJfSU5UUlVOQ0FURURQS1RTKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaC0xMTMtaW5oZHJfZXJyb3I6XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaDoxMTQ6XHRpZGV2ID0gX19pbjZfZGV2X2dldChuZnRfaW4ocGt0KSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaC0xMTUtXHRfX0lQNl9JTkNfU1RBVFMobmZ0X25ldChwa3QpLCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4tLVxubmV0LzZsb3dwYW4vY29yZS5jPTEwOD1zdGF0aWMgaW50IGxvd3Bhbl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbi0tXG5uZXQvNmxvd3Bhbi9jb3JlLmMtMTE4LVxubmV0LzZsb3dwYW4vY29yZS5jOjExOTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvNmxvd3Bhbi9jb3JlLmMtMTIwLVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEzMj1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzMte1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTM0Olx0c3RydWN0IGluZXQ2X2RldiAqaW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz00MzM9YmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy00NDctXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo0NDg6XHRpbjZfZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNDQ5LVx0aWYgKCFpbjZfZGV2KSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jPTQ0PWludCBicl92YWxpZGF0ZV9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtNDYtXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjQ3Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtNDgtXHR1MzIgcGt0X2xlbjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02MzYwPXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTYzODEtXG5uZXQvY29yZS9maWx0ZXIuYzo2MzgyOlx0aWRldiA9IF9faW42X2Rldl9nZXRfc2FmZWx5KGRldik7XG5uZXQvY29yZS9maWx0ZXIuYy02MzgzLVx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuZm9yd2FyZGluZykpKVxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTIxOTU9c3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldilcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0yMjU1LVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9jb3JlL3BrdGdlbi5jOjIyNTY6XHRcdFx0aWRldiA9IF9faW42X2Rldl9nZXQocGt0X2Rldi1cdTAwM2VvZGV2KTtcbm5ldC9jb3JlL3BrdGdlbi5jLTIyNTctXHRcdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2NC9pY21wLmM9MTI5MT1ib29sIGljbXBfYnVpbGRfcHJvYmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGljbXBoZHIgKmljbXBoZHIpXG4tLVxubmV0L2lwdjQvaWNtcC5jLTEzODUtXG5uZXQvaXB2NC9pY21wLmM6MTM4NjpcdGluNl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2NC9pY21wLmMtMTM4Ny1cdGlmIChpbjZfZGV2IFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZpbjZfZGV2LVx1MDAzZWFkZHJfbGlzdCkpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz00OTA9c3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwdjZfZmluZF9pZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy00OTUtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjQ5NjpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ5Ny1cdGlmICghaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjU3PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjg5LVx0XHRcdHJldHVybiAtRUlOVkFMO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2OTA6XHRcdGluNl9kZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02OTEtXHRcdGlmICghaW42X2Rldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTczNT1zdGF0aWMgaW50IGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjQtXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzY1Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy03NjYtXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTg1Mz1zdGF0aWMgdm9pZCBhZGRyY29uZl9mb3J3YXJkX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy04NTgtXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6ODU5Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy04NjAtXHRcdGlmIChpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz05MTk9c3RhdGljIHZvaWQgYWRkcmNvbmZfbGlua2Rvd25fY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3Zilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTkyNC1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo5MjU6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTkyNi1cdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MDA9c3RhdGljIGludCBpcHY2X2dldF9zYWRkcl9tYXN0ZXIoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMTgwOC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MTgwOTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0xODEwLVx0aWYgKGlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODEzLVxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODE0Olx0aWRldiA9IF9faW42X2Rldl9nZXQobWFzdGVyKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTgxNS1cdGlmIChpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgyMj1pbnQgaXB2Nl9kZXZfZ2V0X3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRzdF9kZXYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODYzLVx0aWYgKGRzdF9kZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTg2NDpcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4NjUtXHRcdGlmICgoZHN0X3R5cGUgXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpIHx8XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTAxLVx0XHRcdFx0Y29udGludWU7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE5MDI6XHRcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTkwMy1cdFx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0xOTQwPWludCBpcHY2X2dldF9sbGFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMTk0Ni1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTk0NzpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5NDgtXHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjA0MD1ib29sIGlwdjZfY2hrX2N1c3RvbV9wcmVmaXgoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA0Ny1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjA0ODpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNDktXHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjA2Mj1pbnQgaXB2Nl9jaGtfcHJlZml4KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNjktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIwNzA6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDcxLVx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI3OTg9dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yODMzLVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyODM0Olx0aW42X2RldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4MzUtXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zMTA2PXN0YXRpYyBpbnQgaW5ldDZfYWRkcl9kZWwoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleCwgdTMyIGlmYV9mbGFncyxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMxMjQtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjMxMjU6XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTI2LVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNDgyPXN0YXRpYyB2b2lkIGFkZHJjb25mX2Rldl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM0OTktXHRcdC8qIEFsYXMsIHdlIHN1cHBvcnQgb25seSBFdGhlcm5ldCBhdXRvY29uZmlndXJhdGlvbi4gKi9cbm5ldC9pcHY2L2FkZHJjb25mLmM6MzUwMDpcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzUwMS1cdFx0aWYgKCFJU19FUlJfT1JfTlVMTChpZGV2KSBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVAgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNjM3PXN0YXRpYyB2b2lkIGFkZHJjb25mX3Blcm1hbmVudF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NDUtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM2NDY6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjQ3LVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MzY3MT1zdGF0aWMgaW50IGFkZHJjb25mX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjc2LVx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2V1cHBlcl9pbmZvICppbmZvO1xubmV0L2lwdjYvYWRkcmNvbmYuYzozNjc3Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY3OC1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NTY9c3RhdGljIHZvaWQgYWRkcmNvbmZfdHlwZV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4NjAtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM4NjE6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zODYyLVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Mzg3NT1zdGF0aWMgaW50IGFkZHJjb25mX2lmZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHVucmVnaXN0ZXIpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODg5LVxubmV0L2lwdjYvYWRkcmNvbmYuYzozODkwOlx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg5MS1cdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU0MzA9c3RhdGljIGludCBpbmV0Nl9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ2NC1cdFx0XHR9XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU0NjU6XHRcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ2Ni1cdFx0XHRpZiAoaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NzUtXHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU0NzY6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NzctXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU5MDA9c3RhdGljIHNpemVfdCBpbmV0Nl9nZXRfbGlua19hZl9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTAyLXtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTkwMzpcdGlmICghX19pbjZfZGV2X2dldChkZXYpKVxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTA0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU5MDk9c3RhdGljIGludCBpbmV0Nl9maWxsX2xpbmtfYWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MTEte1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1OTEyOlx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTkxMy1cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYwMzU9c3RhdGljIGludCBpbmV0Nl92YWxpZGF0ZV9saW5rX2FmKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDQzLVx0aWYgKGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2MDQ0Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02MDQ1LVx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02MDY5PXN0YXRpYyBpbnQgaW5ldDZfc2V0X2xpbmtfYWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjA3MS17XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYwNzI6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02MDczLVx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9JTkVUNl9NQVggJiM0MzsgMV07XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02MTcxPXN0YXRpYyBpbnQgaW5ldDZfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjE5My1cdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2MTk0Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02MTk1LVx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02NDE1PXN0YXRpYyB2b2lkIGFkZHJjb25mX2Rpc2FibGVfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3Zilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY0MjAtXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjQyMTpcdFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjQyMi1cdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1MjQ9c3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfYWRkcl9nZW5fbW9kZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NjktXHRcdFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY1NzA6XHRcdFx0XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NTcxLVx0XHRcdFx0aWYgKGlkZXYgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02NTkxPXN0YXRpYyBpbnQgYWRkcmNvbmZfc3lzY3RsX3N0YWJsZV9zZWNyZXQoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02NjM3LVx0XHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjYzODpcdFx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NjM5LVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjcyNj1pbnQgYWRkcmNvbmZfZGlzYWJsZV9wb2xpY3koY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgKnZhbHAsIGludCB2YWwpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02NzQ0LVx0XHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6Njc0NTpcdFx0XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NzQ2LVx0XHRcdGlmIChpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njc3OD1zdGF0aWMgdm9pZCBhZGRyY29uZl9mb3JjZV9mb3J3YXJkX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02NzgzLVx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY3ODQ6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3ODUtXHRcdGlmIChpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz03NjI1PXZvaWQgYWRkcmNvbmZfY2xlYW51cCh2b2lkKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNzYzOC1cdGZvcl9lYWNoX25ldGRldihcdTAwMjZpbml0X25ldCwgZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2Mzk6XHRcdGlmICghX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpKVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjQwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz02Nz1pbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYy0xMjYtXG5uZXQvaXB2Ni9hbnljYXN0LmM6MTI3Olx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hbnljYXN0LmMtMTI4LVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jPTQzMD1zdGF0aWMgaW50IGlwdjZfZGV2X2FjX2RlYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5uZXQvaXB2Ni9hbnljYXN0LmMtNDMxLXtcbm5ldC9pcHY2L2FueWNhc3QuYzo0MzI6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FueWNhc3QuYy00MzMtXHRpbnQgZXJyO1xuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz00NzA9c3RhdGljIGJvb2wgaXB2Nl9jaGtfYWNhc3RfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmMtNDc0LVxubmV0L2lwdjYvYW55Y2FzdC5jOjQ3NTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hbnljYXN0LmMtNDc2LVx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmM9NTM3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlmYWNhZGRyNiAqYWM2X2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmMtNTQ1LVxubmV0L2lwdjYvYW55Y2FzdC5jOjU0NjpcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoc3RhdGUtXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2FueWNhc3QuYy01NDctXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmM9NTU2PXN0YXRpYyBzdHJ1Y3QgaWZhY2FkZHI2ICphYzZfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBpZmFjYWRkcjYgKmltKVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYy01NjUtXHRcdFx0YnJlYWs7XG5uZXQvaXB2Ni9hbnljYXN0LmM6NTY2Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cdTAwM2VkZXYpO1xubmV0L2lwdjYvYW55Y2FzdC5jLTU2Ny1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz0yOTY9c3RhdGljIGludCBpcHY2X2Rlc3RvcHRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjk3LXtcbm5ldC9pcHY2L2V4dGhkcnMuYzoyOTg6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2V4dGhkcnMuYy0yOTktXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTM3MT1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zODEtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzgyOlx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtMzgzLVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTQ4OD1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTAxLVxubmV0L2lwdjYvZXh0aGRycy5jOjUwMjpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTUwMy1cbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2V4dGhkcnMuYy02NTYte1xubmV0L2lwdjYvZXh0aGRycy5jOjY1NzpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTY1OC1cdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9OTEyPXN0YXRpYyBib29sIGlwdjZfaG9wX2lvYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtOTI2LVx0LyogRG9lcyB0aGUgZGV2aWNlIHN0aWxsIGhhdmUgSVB2NiBjb25maWd1cmF0aW9uPyAqL1xubmV0L2lwdjYvZXh0aGRycy5jOjkyNzpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTkyOC1cdGlmICghaWRldikge1xuLS1cbm5ldC9pcHY2L2ljbXAuYz00Nzk9c3RhdGljIHN0cnVjdCBpbjZfYWRkciAqaWNtcDZfZXh0X2lpb19hZGRyNl9maW5kKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaWNtcC5jLTQ4My1cbm5ldC9pcHY2L2ljbXAuYzo0ODQ6XHRpbjZfZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvaWNtcC5jLTQ4NS1cdGlmICghaW42X2Rldilcbi0tXG5uZXQvaXB2Ni9pY21wLmM9NjM2PXZvaWQgaWNtcDZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLCB1OCBjb2RlLCBfX3UzMiBpbmZvLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy04MTUtXG5uZXQvaXB2Ni9pY21wLmM6ODE2Olx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9pY21wLmMtODE3LVxuLS1cbm5ldC9pcHY2L2ljbXAuYz05MjE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIGljbXB2Nl9lY2hvX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWNtcC5jLTEwMDEtXG5uZXQvaXB2Ni9pY21wLmM6MTAwMjpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvaWNtcC5jLTEwMDMtXG4tLVxubmV0L2lwdjYvaWNtcC5jPTEwMzc9ZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0xMDkyLW91dDpcbm5ldC9pcHY2L2ljbXAuYzoxMDkzOlx0X19JQ01QNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpLCBJQ01QNl9NSUJfSU5FUlJPUlMpO1xubmV0L2lwdjYvaWNtcC5jLTEwOTQtXHRyZXR1cm4gcmVhc29uO1xuLS1cbm5ldC9pcHY2L2ljbXAuYz0xMTAxPXN0YXRpYyBpbnQgaWNtcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2ljbXAuYy0xMTA1LVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGljbXA2X2Rldihza2IpO1xubmV0L2lwdjYvaWNtcC5jOjExMDY6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvaWNtcC5jLTExMDctXHRzdHJ1Y3QgaWNtcDZoZHIgKmhkcjtcbi0tXG5uZXQvaXB2Ni9pb2FtNi5jPTcwNz1zdGF0aWMgdm9pZCBfX2lvYW02X2ZpbGxfdHJhY2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lvYW02LmMtNzI1LVxubmV0L2lwdjYvaW9hbTYuYzo3MjY6XHRpX3NrYl9kZXYgPSBza2ItXHUwMDNlZGV2ID8gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KSA6IE5VTEw7XG5uZXQvaXB2Ni9pb2FtNi5jOjcyNzpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9pb2FtNi5jLTcyOC1cbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz0xODg9c3RhdGljIHN0cnVjdCBza19idWZmICppcDZfcmN2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy0yMDMtXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzoyMDQ6XHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTIwNS1cbi0tXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz01NTQ9aW50IGlwNl9tY19pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU2MS1cdF9fSVA2X1VQRF9QT19TVEFUUyhza2JfZHN0X2Rldl9uZXRfcmN1KHNrYiksXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1NjI6XHRcdFx0ICAgX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KSwgSVBTVEFUU19NSUJfSU5NQ0FTVCxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU2My1cdFx0XHQgICBza2ItXHUwMDNlbGVuKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MjYyPWludCBpcDZfZHN0X2hvcGxpbWl0KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjcwLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQdjYgUmVmY291bnQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIG1vZGlmaWVkIGBpbjZfZGV2X2dldGAgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciwgbW9yZSBwcmVjaXNlbHksIGEgcmVmY291bnQgdW5kZXJmbG93IGlzc3VlLiAgVGhlIGNoYW5nZSBpcyBzdWJ0bGUgYnV0IHNpZ25pZmljYW50OyBpbnN0ZWFkIG9mIGEgc2ltcGxlIGluY3JlbWVudCwgdGhlIGNvZGUgbm93IGNoZWNrcyBpZiBgaWRldi0mZ3Q7cmVmY250YCBpcyBhbHJlYWR5IHplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGl0LiBUaGlzIG1ha2VzIHNlbnNlIOKAkyBhIHplcm8gcmVmY291bnQgaW5kaWNhdGVzIHRoZSBvYmplY3QgaXMgbGlrZWx5IGdvbmUsIHNvIGluY3JlbWVudGluZyBpdCB3b3VsZCBiZSBhIHByb2JsZW0uCgpUaGUgaW1wbGljYXRpb25zIGFyZSBjbGVhcjogYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgb2JqZWN0IGlzIGZyZWVkIGJlZm9yZSBgaW42X2Rldl9nZXRgIGNhbiBpbmNyZW1lbnQgaXRzIHJlZmNvdW50LiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBpc3N1ZSB0aGF0JiMzOTtzIHJpcGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwcmV2YWxlbmNlIG9mIGBpbjZfZGV2X2dldGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIG51bWVyb3VzIGxvY2F0aW9ucywgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuIEkmIzM5O3ZlIGdvdCB0byBmaW5kIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIHRvIHRyaWdnZXIgdGhpcy4KClRoZSBjYWxsIHNpdGVzIGFyZSBsaXN0ZWQsIGFuZCBhIHF1aWNrIGdsYW5jZSBzdWdnZXN0cyBmb2N1c2luZyBvbiBgbmV0L2lwdjYvYWRkcmNvbmYuY2AgYW5kIGBuZXQvaXB2Ni9hbnljYXN0LmNgLiBTcGVjaWZpY2FsbHksIGZ1bmN0aW9ucyBsaWtlIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHdpdGhpbiBgYWRkcmNvbmYuY2AsIGFuZCBmdW5jdGlvbnMgbGlrZSBgaXB2Nl9zb2NrX2FjX2pvaW5gIGFuZCBgaXB2Nl9kZXZfYWNfZGVjYCBpbiBgYW55Y2FzdC5jYC4gVGhlc2Ugc2VlbSBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIHNpbmNlIHRoZXkgZGVhbCBkaXJlY3RseSB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgYWRkcmVzcyBtYW5hZ2VtZW50IOKAkyBjb21wbGV4IGFyZWFzIHdoZXJlIHRpbWluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgYXJlIGNvbW1vbi4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aG9zZSBhbmQgY3JhZnQgc29tZSB0YXJnZXRlZCBmdXp6aW5nIGNhbXBhaWducy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbjZfZGV2X2dldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQ4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTQ5MD1zdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqaXB2Nl9maW5kX2lkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ5NS1cbm5ldC9pcHY2L2FkZHJjb25mLmM6NDk2Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDk3LVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02NTc9c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02ODktXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY5MDpcdFx0aW42X2RldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY5MS1cdFx0aWYgKCFpbjZfZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NzM1PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc2NC1cdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlaWZpbmRleCkge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo3NjU6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc2Ni1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9ODUzPXN0YXRpYyB2b2lkIGFkZHJjb25mX2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3Zilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTg1OC1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo4NTk6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTg2MC1cdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTkxOT1zdGF0aWMgdm9pZCBhZGRyY29uZl9saW5rZG93bl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBfX3MzMiBuZXdmKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtOTI0LVx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjkyNTpcdFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtOTI2LVx0XHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgwMD1zdGF0aWMgaW50IGlwdjZfZ2V0X3NhZGRyX21hc3RlcihzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODA4LVxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODA5Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTAtXHRpZiAoaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTMtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE4MTQ6XHRpZGV2ID0gX19pbjZfZGV2X2dldChtYXN0ZXIpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0xODE1LVx0aWYgKGlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0xODIyPWludCBpcHY2X2Rldl9nZXRfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZHN0X2Rldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4NjMtXHRpZiAoZHN0X2Rldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzoxODY0Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTg2NS1cdFx0aWYgKChkc3RfdHlwZSBcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkgfHxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5MDEtXHRcdFx0XHRjb250aW51ZTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTkwMjpcdFx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTAzLVx0XHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE5NDA9aW50IGlwdjZfZ2V0X2xsYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTQ2LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzoxOTQ3Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTk0OC1cdGlmIChpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0yMDQwPWJvb2wgaXB2Nl9jaGtfY3VzdG9tX3ByZWZpeChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDQ3LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzoyMDQ4Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA0OS1cdGlmIChpZGV2KSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0yMDYyPWludCBpcHY2X2Noa19wcmVmaXgoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA2OS1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjA3MDpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNzEtXHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5OD12b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4MzMtXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI4MzQ6XHRpbjZfZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjgzNS1cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTMxMDY9c3RhdGljIGludCBpbmV0Nl9hZGRyX2RlbChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4LCB1MzIgaWZhX2ZsYWdzLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzEyNC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MzEyNTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMxMjYtXHRpZiAoIWlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM0ODI9c3RhdGljIHZvaWQgYWRkcmNvbmZfZGV2X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzQ5OS1cdFx0LyogQWxhcywgd2Ugc3VwcG9ydCBvbmx5IEV0aGVybmV0IGF1dG9jb25maWd1cmF0aW9uLiAqL1xubmV0L2lwdjYvYWRkcmNvbmYuYzozNTAwOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zNTAxLVx0XHRpZiAoIUlTX0VSUl9PUl9OVUxMKGlkZXYpIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM2Mzc9c3RhdGljIHZvaWQgYWRkcmNvbmZfcGVybWFuZW50X2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY0NS1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MzY0NjpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NDctXHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNjcxPXN0YXRpYyBpbnQgYWRkcmNvbmZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NzYtXHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm87XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM2Nzc6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjc4LVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Mzg1Nj1zdGF0aWMgdm9pZCBhZGRyY29uZl90eXBlX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg2MC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg2MTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4NjItXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zODc1PXN0YXRpYyBpbnQgYWRkcmNvbmZfaWZkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdW5yZWdpc3Rlcilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4ODktXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM4OTA6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zODkxLVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTQzMD1zdGF0aWMgaW50IGluZXQ2X2R1bXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NDY0LVx0XHRcdH1cbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ2NTpcdFx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy01NDY2LVx0XHRcdGlmIChpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ3NS1cdGZvcl9lYWNoX25ldGRldl9kdW1wKHRndF9uZXQsIGRldiwgY3R4LVx1MDAzZWlmaW5kZXgpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ3NjpcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ3Ny1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTkwMD1zdGF0aWMgc2l6ZV90IGluZXQ2X2dldF9saW5rX2FmX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MDIte1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1OTAzOlx0aWYgKCFfX2luNl9kZXZfZ2V0KGRldikpXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MDQtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTkwOT1zdGF0aWMgaW50IGluZXQ2X2ZpbGxfbGlua19hZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTkxMS17XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU5MTI6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy01OTEzLVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjAzNT1zdGF0aWMgaW50IGluZXQ2X3ZhbGlkYXRlX2xpbmtfYWYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNDMtXHRpZiAoZGV2KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYwNDQ6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNDUtXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYwNjk9c3RhdGljIGludCBpbmV0Nl9zZXRfbGlua19hZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDcxLXtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjA3MjpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNzMtXHRzdHJ1Y3QgbmxhdHRyICp0YltJRkxBX0lORVQ2X01BWCAmIzQzOyAxXTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYxNzE9c3RhdGljIGludCBpbmV0Nl9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy02MTkzLVx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cdTAwM2VpZmluZGV4KSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYxOTQ6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYxOTUtXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY0MTU9c3RhdGljIHZvaWQgYWRkcmNvbmZfZGlzYWJsZV9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBfX3MzMiBuZXdmKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjQyMC1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2NDIxOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy02NDIyLVx0XHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NjUyND1zdGF0aWMgaW50IGFkZHJjb25mX3N5c2N0bF9hZGRyX2dlbl9tb2RlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU2OS1cdFx0XHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjU3MDpcdFx0XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NzEtXHRcdFx0XHRpZiAoaWRldiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1OTE9c3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfc3RhYmxlX3NlY3JldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY2MzctXHRcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2NjM4Olx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY2MzktXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02NzI2PWludCBhZGRyY29uZl9kaXNhYmxlX3BvbGljeShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCAqdmFscCwgaW50IHZhbClcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3NDQtXHRcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xubmV0L2lwdjYvYWRkcmNvbmYuYzo2NzQ1Olx0XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3NDYtXHRcdFx0aWYgKGlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02Nzc4PXN0YXRpYyB2b2lkIGFkZHJjb25mX2ZvcmNlX2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3Zilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3ODMtXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6Njc4NDpcdFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjc4NS1cdFx0aWYgKGlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTc2MjU9dm9pZCBhZGRyY29uZl9jbGVhbnVwKHZvaWQpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjM4LVx0Zm9yX2VhY2hfbmV0ZGV2KFx1MDAyNmluaXRfbmV0LCBkZXYpIHtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzYzOTpcdFx0aWYgKCFfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldikpXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc2NDAtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jPTY3PWludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jLTEyNi1cbm5ldC9pcHY2L2FueWNhc3QuYzoxMjc6XHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FueWNhc3QuYy0xMjgtXHRpZiAoIWlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmM9NDMwPXN0YXRpYyBpbnQgaXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L2FueWNhc3QuYy00MzEte1xubmV0L2lwdjYvYW55Y2FzdC5jOjQzMjpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvYW55Y2FzdC5jLTQzMy1cdGludCBlcnI7XG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jPTQ3MD1zdGF0aWMgYm9vbCBpcHY2X2Noa19hY2FzdF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYy00NzQtXG5uZXQvaXB2Ni9hbnljYXN0LmM6NDc1Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2FueWNhc3QuYy00NzYtXHRpZiAoaWRldikge1xuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz01Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWZhY2FkZHI2ICphYzZfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYy01NDUtXG5uZXQvaXB2Ni9hbnljYXN0LmM6NTQ2Olx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cdTAwM2VkZXYpO1xubmV0L2lwdjYvYW55Y2FzdC5jLTU0Ny1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz01NTY9c3RhdGljIHN0cnVjdCBpZmFjYWRkcjYgKmFjNl9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGlmYWNhZGRyNiAqaW0pXG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jLTU2NS1cdFx0XHRicmVhaztcbm5ldC9pcHY2L2FueWNhc3QuYzo1NjY6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9hbnljYXN0LmMtNTY3LVx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTI5Nj1zdGF0aWMgaW50IGlwdjZfZGVzdG9wdF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2V4dGhkcnMuYy0yOTcte1xubmV0L2lwdjYvZXh0aGRycy5jOjI5ODpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTI5OS1cdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTM4MS1cbm5ldC9pcHY2L2V4dGhkcnMuYzozODI6XHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODMtXHRpZiAoIWlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NDg4PXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy01MDEtXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTAyOlx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNTAzLVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz02NTU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvZXh0aGRycy5jLTY1Ni17XG5uZXQvaXB2Ni9leHRoZHJzLmM6NjU3Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNjU4LVx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz05MTI9c3RhdGljIGJvb2wgaXB2Nl9ob3BfaW9hbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy05MjYtXHQvKiBEb2VzIHRoZSBkZXZpY2Ugc3RpbGwgaGF2ZSBJUHY2IGNvbmZpZ3VyYXRpb24/ICovXG5uZXQvaXB2Ni9leHRoZHJzLmM6OTI3Olx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtOTI4LVx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTQ3OT1zdGF0aWMgc3RydWN0IGluNl9hZGRyICppY21wNl9leHRfaWlvX2FkZHI2X2ZpbmQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pY21wLmMtNDgzLVxubmV0L2lwdjYvaWNtcC5jOjQ4NDpcdGluNl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9pY21wLmMtNDg1LVx0aWYgKCFpbjZfZGV2KVxuLS1cbm5ldC9pcHY2L2ljbXAuYz02MzY9dm9pZCBpY21wNl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8sXG4tLVxubmV0L2lwdjYvaWNtcC5jLTgxNS1cbm5ldC9pcHY2L2ljbXAuYzo4MTY6XHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L2ljbXAuYy04MTctXG4tLVxubmV0L2lwdjYvaWNtcC5jPTkyMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X2VjaG9fcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pY21wLmMtMTAwMS1cbm5ldC9pcHY2L2ljbXAuYzoxMDAyOlx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9pY21wLmMtMTAwMy1cbi0tXG5uZXQvaXB2Ni9pY21wLmM9MTAzNz1lbnVtIHNrYl9kcm9wX3JlYXNvbiBpY21wdjZfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsXG4tLVxubmV0L2lwdjYvaWNtcC5jLTEwOTItb3V0OlxubmV0L2lwdjYvaWNtcC5jOjEwOTM6XHRfX0lDTVA2X0lOQ19TVEFUUyhuZXQsIF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldiksIElDTVA2X01JQl9JTkVSUk9SUyk7XG5uZXQvaXB2Ni9pY21wLmMtMTA5NC1cdHJldHVybiByZWFzb247XG4tLVxubmV0L2lwdjYvaWNtcC5jPTExMDE9c3RhdGljIGludCBpY21wdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWNtcC5jLTExMDUtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWNtcDZfZGV2KHNrYik7XG5uZXQvaXB2Ni9pY21wLmM6MTEwNjpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9pY21wLmMtMTEwNy1cdHN0cnVjdCBpY21wNmhkciAqaGRyO1xuLS1cbm5ldC9pcHY2L2lvYW02LmM9NzA3PXN0YXRpYyB2b2lkIF9faW9hbTZfZmlsbF90cmFjZV9kYXRhKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaW9hbTYuYy03MjUtXG5uZXQvaXB2Ni9pb2FtNi5jOjcyNjpcdGlfc2tiX2RldiA9IHNrYi1cdTAwM2VkZXYgPyBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpIDogTlVMTDtcbm5ldC9pcHY2L2lvYW02LmM6NzI3Olx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L2lvYW02LmMtNzI4LVxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTE4OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwNl9yY3ZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTIwMy1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjIwNDpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvaXA2X2lucHV0LmMtMjA1LVxuLS1cbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTU1ND1pbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTYxLVx0X19JUDZfVVBEX1BPX1NUQVRTKHNrYl9kc3RfZGV2X25ldF9yY3Uoc2tiKSxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjU2MjpcdFx0XHQgICBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpLCBJUFNUQVRTX01JQl9JTk1DQVNULFxubmV0L2lwdjYvaXA2X2lucHV0LmMtNTYzLVx0XHRcdCAgIHNrYi1cdTAwM2VsZW4pO1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0yNjI9aW50IGlwNl9kc3RfaG9wbGltaXQoc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yNzAtXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MjcxOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTI3Mi1cdFx0aWYgKGlkZXYpXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTUxOT1pbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNTI5LVxubmV0L2lwdjYvaXA2X291dHB1dC5jOjUzMDpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIElQNkNCKHNrYiktXHUwMDNlaWlmKSk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNTMxLVx0aWYgKCFSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlZm9yd2FyZGluZykgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjYvaXA2bXIuYz03NDI9c3RhdGljIGludCBtaWY2X2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXG4tLVxubmV0L2lwdjYvaXA2bXIuYy03ODMtXG5uZXQvaXB2Ni9pcDZtci5jOjc4NDpcdGluNl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9pcDZtci5jLTc4NS1cdGlmIChpbjZfZGV2KSB7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz05MDY9c3RhdGljIGludCBtaWY2X2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtOTUyLVxubmV0L2lwdjYvaXA2bXIuYzo5NTM6XHRpbjZfZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvaXA2bXIuYy05NTQtXHRpZiAoaW42X2Rldikge1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9MjY0PXN0YXRpYyB2b2lkIF9faXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqbWNfbHN0KVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMjcwLVx0aWYgKGRldikge1xubmV0L2lwdjYvbWNhc3QuYzoyNzE6XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0yNzItXG4tLVxubmV0L2lwdjYvbWNhc3QuYz0zMTM9c3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwNl9tY19maW5kX2lkZXYoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMzIzLVxubmV0L2lwdjYvbWNhc3QuYzozMjQ6XHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L21jYXN0LmMtMzI1LVx0ZGV2X3B1dChkZXYpO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9OTMzPXN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTkzOS1cdC8qIHdlIG5lZWQgdG8gdGFrZSBhIHJlZmVyZW5jZSBvbiBpZGV2ICovXG5uZXQvaXB2Ni9tY2FzdC5jOjk0MDpcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy05NDEtXHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvbWNhc3QuYz0xMDIzPWludCBpcHY2X2Rldl9tY19kZWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMTAyNy1cbm5ldC9pcHY2L21jYXN0LmM6MTAyODpcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xMDI5LVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTA0Mj1ib29sIGlwdjZfY2hrX21jYXN0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cCxcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTEwNDktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9tY2FzdC5jOjEwNTA6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xMDUxLVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTQwMj12b2lkIGlnbXA2X2V2ZW50X3F1ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9tY2FzdC5jLTE0MDMte1xubmV0L2lwdjYvbWNhc3QuYzoxNDA0Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jLTE0MDUtXHRib29sIHB1dCA9IGZhbHNlO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTQyNj1zdGF0aWMgdm9pZCBfX21sZF9xdWVyeV93b3JrKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0xNDU3LVxubmV0L2lwdjYvbWNhc3QuYzoxNDU4Olx0aWRldiA9IGluNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xNDU5LVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTU4Mj12b2lkIGlnbXA2X2V2ZW50X3JlcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvbWNhc3QuYy0xNTgzLXtcbm5ldC9pcHY2L21jYXN0LmM6MTU4NDpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xNTg1LVx0Ym9vbCBwdXQgPSBmYWxzZTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTE2MDY9c3RhdGljIHZvaWQgX19tbGRfcmVwb3J0X3dvcmsoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTE2MzItXG5uZXQvaXB2Ni9tY2FzdC5jOjE2MzM6XHRpZGV2ID0gaW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jLTE2MzQtXHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvbWNhc3QuYz0xODMwPXN0YXRpYyB2b2lkIG1sZF9zZW5kcGFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMTg0Mi1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L21jYXN0LmM6MTg0MzpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0xODQ0LVx0SVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTIxNzQ9c3RhdGljIHZvaWQgaWdtcDZfc2VuZChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMjIwNS1cdG5ldCA9IGRldl9uZXRfcmN1KGRldik7XG5uZXQvaXB2Ni9tY2FzdC5jOjIyMDY6XHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0yMjA3LVx0SVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTI4NDU9dm9pZCBpcHY2X21jX2Rlc3Ryb3lfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yODU4LVx0LyogV2UgY2Fubm90IGNhbGwgaXB2Nl9kZXZfbWNfZGVjKCkgZGlyZWN0bHksIG91ciBjYWxsZXIgaW5cbm5ldC9pcHY2L21jYXN0LmM6Mjg1OTpcdCAqIGFkZHJjb25mLmMgaGFzIE5VTEwmIzM5O2Qgb3V0IGRldi1cdTAwM2VpcDZfcHRyIHNvIGluNl9kZXZfZ2V0KCkgd2lsbFxubmV0L2lwdjYvbWNhc3QuYy0yODYwLVx0ICogZmFpbC5cbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTI4OTE9c3RhdGljIGludCBpcHY2X21jX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yODk1LVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xubmV0L2lwdjYvbWNhc3QuYzoyODk2Olx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L21jYXN0LmMtMjg5Ny1cbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTI5MjM9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWZtY2FkZHI2ICppZ21wNl9tY19nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yOTMxLVx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xubmV0L2lwdjYvbWNhc3QuYzoyOTMyOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0yOTMzLVx0XHRpZiAoIWlkZXYpXG4tLVxubmV0L2lwdjYvbWNhc3QuYz0yOTQ1PXN0YXRpYyBzdHJ1Y3QgaWZtY2FkZHI2ICppZ21wNl9tY19nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGlmbWNhZGRyNiAqaW0pXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yOTU1LVx0XHR9XG5uZXQvaXB2Ni9tY2FzdC5jOjI5NTY6XHRcdHN0YXRlLVx1MDAzZWlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jLTI5NTctXHRcdGlmICghc3RhdGUtXHUwMDNlaWRldilcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTMwMzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaXA2X3NmX2xpc3QgKmlnbXA2X21jZl9nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0zMDQyLVx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xubmV0L2lwdjYvbWNhc3QuYzozMDQzOlx0XHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbWNhc3QuYy0zMDQ0LVx0XHRpZiAodW5saWtlbHkoaWRldiA9PSBOVUxMKSlcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTMwNjA9c3RhdGljIHN0cnVjdCBpcDZfc2ZfbGlzdCAqaWdtcDZfbWNmX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaXA2X3NmX2xpc3QgKnBzZilcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTMwNzItXHRcdFx0fVxubmV0L2lwdjYvbWNhc3QuYzozMDczOlx0XHRcdHN0YXRlLVx1MDAzZWlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jLTMwNzQtXHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VpZGV2KVxuLS1cbm5ldC9pcHY2L25kaXNjLmM9MzI1PXN0YXRpYyBpbnQgbmRpc2NfY29uc3RydWN0b3Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0zMzItXG5uZXQvaXB2Ni9uZGlzYy5jOjMzMzpcdGluNl9kZXYgPSBpbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbmRpc2MuYy0zMzQtXHRpZiAoIWluNl9kZXYpIHtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTQwMD1zdGF0aWMgYm9vbCBuZGlzY19hbGxvd19hZGQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTQwMi17XG5uZXQvaXB2Ni9uZGlzYy5jOjQwMzpcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTQwNC1cbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTQ0MD1zdGF0aWMgdm9pZCBpcDZfbmRfaGRyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvbmRpc2MuYy00NDktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9uZGlzYy5jOjQ1MDpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xubmV0L2lwdjYvbmRpc2MuYy00NTEtXHR0Y2xhc3MgPSBpZGV2ID8gUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLm5kaXNjX3RjbGFzcykgOiAwO1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9NDY4PXZvaWQgbmRpc2Nfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTUwOC1cdGRldiA9IGRzdF9kZXZfcmN1KGRzdCk7XG5uZXQvaXB2Ni9uZGlzYy5jOjUwOTpcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTUxMC1cdElQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz01ODE9c3RhdGljIHZvaWQgbmRpc2Nfc2VuZF91bnNvbF9uYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtNTg1LVxubmV0L2lwdjYvbmRpc2MuYzo1ODY6XHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L25kaXNjLmMtNTg3LVx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L25kaXNjLmM9Nzg4PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X25zKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy04OTUtXG5uZXQvaXB2Ni9uZGlzYy5jOjg5NjpcdFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTg5Ny1cdFx0aWYgKCFpZGV2KSB7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz05ODc9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JlY3ZfbmEoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTk5Ni1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItXHUwMDNlZGV2O1xubmV0L2lwdjYvbmRpc2MuYzo5OTc6XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xubmV0L2lwdjYvbmRpc2MuYy05OTgtXHRzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xMTI2PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X3JzKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xMTM5LVxubmV0L2lwdjYvbmRpc2MuYzoxMTQwOlx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTExNDEtXHRpZiAoIWlkZXYpIHtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTEyNjctXG5uZXQvaXB2Ni9uZGlzYy5jOjEyNjg6XHRpbjZfZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L25kaXNjLmMtMTI2OS1cdGlmICghaW42X2Rldikge1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTc5MT1zdGF0aWMgYm9vbCBuZGlzY19zdXBwcmVzc19mcmFnX25kaXNjKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9uZGlzYy5jLTE3OTIte1xubmV0L2lwdjYvbmRpc2MuYzoxNzkzOlx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTE3OTQtXG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xODU2PXN0YXRpYyBpbnQgbmRpc2NfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTg2OS1cdGNhc2UgTkVUREVWX1VQOlxubmV0L2lwdjYvbmRpc2MuYzoxODcwOlx0XHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcbm5ldC9pcHY2L25kaXNjLmMtMTg3MS1cdFx0aWYgKCFpZGV2KVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTg3OC1cdGNhc2UgTkVUREVWX0NIQU5HRTpcbm5ldC9pcHY2L25kaXNjLmM6MTg3OTpcdFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTE4ODAtXHRcdGlmICghaWRldilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTE5Mjk9aW50IG5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L2lwdjYvbmRpc2MuYy0xOTUzLVxubmV0L2lwdjYvbmRpc2MuYzoxOTU0Olx0aWYgKHdyaXRlIFx1MDAyNlx1MDAyNiByZXQgPT0gMCBcdTAwMjZcdTAwMjYgZGV2IFx1MDAyNlx1MDAyNiAoaWRldiA9IGluNl9kZXZfZ2V0KGRldikpICE9IE5VTEwpIHtcbm5ldC9pcHY2L25kaXNjLmMtMTk1NS1cdFx0aWYgKGN0bC1cdTAwM2VkYXRhID09IE5FSUdIX1ZBUl9QVFIoaWRldi1cdTAwM2VuZF9wYXJtcywgQkFTRV9SRUFDSEFCTEVfVElNRSkpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY2LmM9MTA9bmZfdHByb3h5X2xhZGRyNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnVzZXJfbGFkZHIsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY2LmMtMjAtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfdHByb3h5X2lwdjYuYzoyMTpcdGluZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY2L25ldGZpbHRlci9uZl90cHJveHlfaXB2Ni5jLTIyLVx0aWYgKGluZGV2KSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0xNjA9c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0xNzctXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFJlZmNvdW50IEJ1ZyBGaXgqKgoKT2theSwgc28gdGhpcyBgaW42X2Rldl9nZXRgIGZ1bmN0aW9uIGlzIGFwcGFyZW50bHkgYSByZWFsIHdvcmtob3JzZSBpbiB0aGUgSVB2NiBuZXR3b3JraW5nIHN0YWNrLiBJIGtuZXcgaXQgd2FzIGhlYXZpbHkgdXNlZCwgYnV0IG5vdyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgcmVmY291bnQgYnVnIGZpeC4gVGhlIHRyaWNreSBwYXJ0LCBhcyB1c3VhbCwgaXMgdGhhdCBgaW42X2Rldl9nZXRgIGlzIGlubGluZWQg4oCTIGl0IGRvZXNuJiMzOTt0IGhhdmUgaXRzIG93biBzeW1ib2wuIFRoYXQgbWVhbnMgSSYjMzk7bGwgaGF2ZSB0byBsb29rIHVwc3RyZWFtIHRvIHRoZSBmdW5jdGlvbnMgdGhhdCAqY2FsbCogaXQuCgpTaW5jZSBteSBmb2N1cyBpcyBvbiB1c2VyLXNwYWNlIGltcGFjdCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjYWxsIHNpdGVzIHRoYXQgYXJlIGV4cG9zZWQgdmlhIHRoZSBzeXN0ZW0gY2FsbHMgYW5kIGlvY3RscyBhbmQgbmV0bGluaywgYW5kIHNvIG9uLiBMZXQmIzM5O3MgbWFrZSBhIGxpc3QuIGBpcHY2X3NvY2tfYWNfam9pbmAsIGBpcHY2X2Rldl9hY19kZWNgLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAsIGFuZCBhbGwgdGhlIE5ESVNDLXJlbGF0ZWQgY2FsbHMsIGxpa2UgYG5kaXNjX2NvbnN0cnVjdG9yYCwgYG5kaXNjX3NlbmRfdW5zb2xfbmFgLCBgbmRpc2NfcmVjdl9uc2AsIGBuZGlzY19uZXRkZXZfZXZlbnRgLCBhbmQgYG5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlYC4gSXQmIzM5O3MgYSBsb25nIGxpc3QsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gZmluZCB0aGUgcmlnaHQgY2FuZGlkYXRlcy4KCk5vdywgYmVjYXVzZSBgaW42X2Rldl9nZXRgIGlzIGNhbGxlZCAqZXZlcnl3aGVyZSogaW4gdGhlIElQdjYgc3RhY2ssIEkgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IGxvc3QgaW4gYSBmb3Jlc3Qgb2YgY29kZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgZnVuY3Rpb25zIHRoYXQgbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlczogYGlwdjZfc29ja19hY19qb2luYCBhbmQgYGlwdjZfc29ja19hY19kcm9wYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSB0aGUgc291cmNlIG9mIHRoZSByZWZjb3VudCBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zb2NrX2FjX2pvaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zMDQ9dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDktICovXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMxMDppbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzExLVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xuLS1cbm5ldC9pcHY2L2FueWNhc3QuYz01NT1zdGF0aWMgdTMyIGluZXQ2X2FjYWRkcl9oYXNoKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9hbnljYXN0LmMtNjYtXG5uZXQvaXB2Ni9hbnljYXN0LmM6Njc6aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L2FueWNhc3QuYy02OC17XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODkyLVx0XHRpZiAob3B0bmFtZSA9PSBJUFY2X0pPSU5fQU5ZQ0FTVClcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo4OTM6XHRcdFx0cmV0diA9IGlwdjZfc29ja19hY19qb2luKHNrLCBtcmVxLmlwdjZtcl9pZmluZGV4LCBcdTAwMjZtcmVxLmlwdjZtcl9hY2FkZHIpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg5NC1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODA4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRXhhbWluaW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkqKgoKQWxyaWdodCwgc28gYGlwdjZfc29ja19hY19qb2luYCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGBJUFY2X0pPSU5fQU5ZQ0FTVGAgb3B0aW9uIGlzIHVzZWQuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmcg4oCTIGRpcmVjdCB1c2Vyc3BhY2UgYWNjZXNzIGlzIGEgY2xhc3NpYyBlbnRyeSBwb2ludC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIga2VybmVsIGVudmlyb25tZW50LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIGxvb2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgJiMzNDtkcm9wJiMzNDsgZnVuY3Rpb24sIGBpcHY2X3NvY2tfYWNfZHJvcGAuIFVuZGVyc3RhbmRpbmcgdGhlIGRyb3AgcGF0aCBpcyBqdXN0IGFzIGNydWNpYWwuIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIGhhbmRsaW5nIG9yIGNsZWFudXAgbG9naWMgbGl2ZXMg4oCTIGFuZCB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgdGVuZCB0byBoaWRlIGlmIG5vdCBwcm9wZXJseSBoYW5kbGVkLiBHb3R0YSBzZWUgaWYgdGhlIGRyb3AgcGF0aCBoYXMgc2ltaWxhciBmbGF3cywgb3IgaWYgb25lIHBhdGggaXMgbW9yZSBwcm9ibGVtYXRpYyB0aGFuIHRoZSBvdGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zb2NrX2FjX2Ryb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zMTA9aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMxMS1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MzEyOmludCBpcHY2X3NvY2tfYWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMTMtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jPTY3PWludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG4tLVxubmV0L2lwdjYvYW55Y2FzdC5jLTE3Mi0gKi9cbm5ldC9pcHY2L2FueWNhc3QuYzoxNzM6aW50IGlwdjZfc29ja19hY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L2FueWNhc3QuYy0xNzQte1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg5NC1cdFx0ZWxzZVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjg5NTpcdFx0XHRyZXR2ID0gaXB2Nl9zb2NrX2FjX2Ryb3Aoc2ssIG1yZXEuaXB2Nm1yX2lmaW5kZXgsIFx1MDAyNm1yZXEuaXB2Nm1yX2FjYWRkcik7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODk2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0OTEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVGFyZ2V0aW5nIElQdjYgU29ja2V0IE9wdGlvbnMgZm9yIEFuYWx5c2lzKioKClJpZ2h0LCBzbyBgaXB2Nl9zb2NrX2FjX2Ryb3BgLCB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQuIFdlIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCwgc3BlY2lmaWNhbGx5IGZvciBgSVBWNl9MRUFWRV9BTllDQVNUYC4gVGhvc2UgdHdvIGZ1bmN0aW9ucywgYGlwdjZfc29ja19hY19kcm9wYCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAsIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZGVlcGVyIGluc3BlY3Rpb24uICBXZSBzaG91bGQgYmUgYWJsZSB0byBkaWcgdXAgc29tZXRoaW5nIGludGVyZXN0aW5nLgoKTGV0JiMzOTtzIG5vdCBzdG9wIHRoZXJlLCB0aG91Z2guIFdlIGFsc28gbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFuZCBgaW5ldDZfbmV0Y29uZl9kdW1wX2RldmNvbmZgLiBUaGF0JiMzOTtsbCBwcm92aWRlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuIEl0JiMzOTtzIGFib3V0IHB1bGxpbmcgdG9nZXRoZXIgYWxsIHRoZSBwaWVjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYz02MTg9c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX3ZhbGlkX2dldF9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1Ni1cbm5ldC9pcHY2L2FkZHJjb25mLmM6NjU3OnN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NTgtXHRcdFx0XHQgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NzUzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgYWRkcmNvbmZfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy03NTUxLVx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVUQ09ORixcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzU1MjpcdCAuZG9pdCA9IGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmYsIC5kdW1waXQgPSBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZixcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzU1My1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxMDEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSVB2NiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBuZXRsaW5rIGhhbmRsZXJzLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAgYW5kIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAuIFRoZXkmIzM5O3JlIHRoZSBnby10byBmdW5jdGlvbnMgZm9yIHJldHJpZXZpbmcgYW5kIGR1bXBpbmcgSVB2NiBkZXZpY2UgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTtyZSBkb2luZyBvbiB0aGUgaW5zaWRlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGF0IGRhdGEgaXMgZXhwb3NlZCBpcyBrZXkuCgpHaXZlbiBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29ya2luZyBzdHVmZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgYmVoYXZpbmcgZHVyaW5nIG5laWdoYm9yIGRpc2NvdmVyeSwgYW5kIHRvIHRoYXQgZW5kLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBob3cgYG5kaXNjX3NlbmRfdW5zb2xfbmFgIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB1bnNvbGljaXRlZCBuZWlnaGJvciBhZHZlcnRpc2VtZW50cyBhcmUgYmVpbmcgaGFuZGxlZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhpcyBjb25maWd1cmF0aW9uIGNvbnRleHQuIEl0JiMzOTtsbCBnaXZlIG1lIGEgdmlldyBpbnRvIGhvdyBvdGhlciBub2RlcyBhcmUgdXBkYXRlZCB3aXRoIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmRpc2Nfc2VuZF91bnNvbF9uYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZGlzYy5jPTU3OT1FWFBPUlRfU1lNQk9MX0dQTChuZGlzY19zZW5kX25hKTtcbm5ldC9pcHY2L25kaXNjLmMtNTgwLVxubmV0L2lwdjYvbmRpc2MuYzo1ODE6c3RhdGljIHZvaWQgbmRpc2Nfc2VuZF91bnNvbF9uYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjYvbmRpc2MuYy01ODIte1xuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTg1Nj1zdGF0aWMgaW50IG5kaXNjX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE4NzQtXHRcdCAgICBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlbmRpc2Nfbm90aWZ5KSlcbm5ldC9pcHY2L25kaXNjLmM6MTg3NTpcdFx0XHRuZGlzY19zZW5kX3Vuc29sX25hKGRldik7XG5uZXQvaXB2Ni9uZGlzYy5jLTE4NzYtXHRcdGluNl9kZXZfcHV0KGlkZXYpO1xuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTg5OC1cdGNhc2UgTkVUREVWX05PVElGWV9QRUVSUzpcbm5ldC9pcHY2L25kaXNjLmM6MTg5OTpcdFx0bmRpc2Nfc2VuZF91bnNvbF9uYShkZXYpO1xubmV0L2lwdjYvbmRpc2MuYy0xOTAwLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2ODkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBzcGVha2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipOZXR3b3JrIEludGVyZmFjZSBFdmVudCBIYW5kbGluZyAtIEEgUXVpY2sgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBuZXR3b3JrIGludGVyZmFjZSBldmVudHMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbi4gSSBrbm93IHRoYXQgYG5kaXNjX3NlbmRfdW5zb2xfbmFgIGdldHMgdHJpZ2dlcmVkIHdoZW4gY2VydGFpbiBuZXR3b3JrIGRldmljZSBldmVudHMgb2NjdXIuIFRoYXQmIzM5O3MgZmFpcmx5IGNsZWFyLiBCdXQgdGhlbiB0aGUgcXVlc3Rpb24gYXJpc2VzOiBXaGF0IGFib3V0IGBhZGRyY29uZl9wcmVmaXhfcmN2YD8gRG9lcyB0aGF0IG1ldGhvZCBnZXQgY2FsbGVkIG9uIHRob3NlIHNhbWUgZXZlbnRzPyBBcmUgdGhleSBjYWxsZWQgYXQgYWxsLCBvciBhcmUgdGhleSBtdXR1YWxseSBleGNsdXNpdmU/IERvZXMgb25lIHRyaWdnZXIgdGhlIG90aGVyPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBldmVudCBoYW5kbGluZyB3b3JrZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9hZGRyY29uZi5oPTE1Mz12b2lkIGFkZHJjb25mX2FkZF9saW5rbG9jYWwoc3RydWN0IGluZXQ2X2RldiAqaWRldixcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTE1NS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MTU2OmludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU3LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0yODI9c3RhdGljIGlubGluZSBib29sIGlwdjZfaXNfbWxkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBpbnQgb2Zmc2V0KVxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzAzLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozMDQ6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMwNS1cdFx0XHQgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbyk7XG4tLVxubmV0LzZsb3dwYW4vbmRpc2MuYz0xODg9c3RhdGljIHZvaWQgbG93cGFuX25kaXNjX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC82bG93cGFuL25kaXNjLmMtMjAzLVx0ICAgICFhZGRyY29uZl9pZmlkXzgwMjE1NF82bG93cGFuKGFkZHItXHUwMDNlczZfYWRkciAmIzQzOyA4LCBkZXYpKSB7XG5uZXQvNmxvd3Bhbi9uZGlzYy5jOjIwNDpcdFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXG5uZXQvNmxvd3Bhbi9uZGlzYy5jLTIwNS1cdFx0XHRcdFx0XHQgICBhZGRyLCBhZGRyX3R5cGUsIGFkZHJfZmxhZ3MsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0xMzY5PXN0YXRpYyBpbnQgaXB2Nl9jcmVhdGVfdGVtcGFkZHIoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwLCBib29sIGJsb2NrKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMTQ4My1cdGNmZy5pZmFfZmxhZ3MgPSBJRkFfRl9URU1QT1JBUlk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE0ODQ6XHQvKiBzZXQgaW4gYWRkcmNvbmZfcHJlZml4X3JjdigpICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODUtXHRpZiAoaWZwLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkFfRl9PUFRJTUlTVElDKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjY4OT1zdGF0aWMgYm9vbCBpc19hZGRyX21vZGVfZ2VuZXJhdGVfc3RhYmxlKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNjk0LVxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNjk1OmludCBhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5Ni1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5NS19XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTY6RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTg6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTkte1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0Mi1vazpcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mjk0MzpcdFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NDQtXHRcdFx0XHRcdFx0ICAgXHUwMDI2YWRkciwgYWRkcl90eXBlLFxuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTU0Ni1cdFx0ICAgICBwID0gbmRpc2NfbmV4dF9vcHRpb24ocCwgbmRvcHRzLm5kX29wdHNfcGlfZW5kKSkge1xubmV0L2lwdjYvbmRpc2MuYzoxNTQ3Olx0XHRcdGFkZHJjb25mX3ByZWZpeF9yY3Yoc2tiLVx1MDAzZWRldiwgKHU4ICopcCxcbm5ldC9pcHY2L25kaXNjLmMtMTU0OC1cdFx0XHRcdFx0ICAgIChwLVx1MDAzZW5kX29wdF9sZW4pIFx1MDAzY1x1MDAzYyAzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzkyNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgUHJvbWlzaW5nIElQdjYgTmV0d29yayBQYWNrZXQgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhZGRyY29uZl9wcmVmaXhfcmN2YC4gVGhhdCYjMzk7cyBpZGVhbC4gSXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCB3aGljaCBpcyBpdHNlbGYgdHJpZ2dlcmVkIGJ5IGluY29taW5nIHJvdXRlciBhZHZlcnRpc2VtZW50cy4gTWVhbmluZywgaXQmIzM5O3MgcmVhY3RpbmcgZGlyZWN0bHkgdG8gbmV0d29yayBwYWNrZXRzIOKAkyB0aGF0JiMzOTtzIHRoZSBraW5kIG9mIGVudHJ5IHBvaW50IEkgd2FudCB0byBleGFtaW5lLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgd29ydGggZGlnZ2luZyBpbnRvLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBpcHY2X3NvY2tfYWNfam9pbmAsIGBpcHY2X3NvY2tfYWNfZHJvcGAsIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCwgYGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mYCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgICh3aGljaCB3ZSBhbHJlYWR5IGtub3cgaXMgaW50ZXJlc3RpbmcpLCBgbmRpc2NfcmVjdl9uc2AsIGBuZGlzY19yZWN2X25hYCwgYW5kIGBuZGlzY19yZWN2X3JzYC4gWWVwLCBhbGwgb2YgdGhlc2UgbG9vayBsaWtlIGV4Y2VsbGVudCB0YXJnZXRzLiBUaGV5JiMzOTtyZSBhbGwgaGFuZGxpbmcgb3IgcmVhY3RpbmcgdG8gbmV0d29yay1sZXZlbCBldmVudHMsIGdpdmluZyBtZSBhIHNvbGlkIGJhc2lzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQganVzdCB2ZXJpZnkgdGhlIHByZXJlcXVpc2l0ZXMuIEkmIzM5O20gYXNzdW1pbmcgSVB2NiBpcyBlbmFibGVkIGJ5IGBDT05GSUdfSVBWNmAsIHNvIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhhdCB0byBtYWtlIHN1cmUgSSBhbSB3b3JraW5nIHdpdGggYSBjb3JyZWN0bHkgY29uZmlndXJlZCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZy01LVxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtUaGUgSVB2NiBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy0yMC1cbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbm5ldC9pcHY2L0tjb25maWctMjItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzgtXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTktXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcbm5ldC9pcHY2L0tjb25maWctMTIxLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcbm5ldC9pcHY2L0tjb25maWctMTUxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTk1LVxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbm5ldC9pcHY2L0tjb25maWctMTk3LVx0Ym9vbFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDktXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcbm5ldC9pcHY2L0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjI3LVxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjQyLVxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcbm5ldC9pcHY2L0tjb25maWctMjQ0LVx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjc4LVxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcbm5ldC9pcHY2L0tjb25maWctMjgwLVx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjk5LVxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzExLVxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcbm5ldC9pcHY2L0tjb25maWctMzEzLVx0ZGVmX2Jvb2wgeVxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMjctXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXHRib29sIFwmIzM0O0lQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTkzNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM1OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGluNl9kZXZfZ2V0YCBVc2FnZSB3aXRoaW4gdGhlIElQdjYgU3RhY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIGluY29ycG9yYXRlIGBJUFY2YCBpbnRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgaW42X2Rldl9nZXRgLCB3aGljaCBpcyBhIGZ1bmRhbWVudGFsIElQdjYgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgcGFydGljdWxhcmx5IHdoZXJlIGBpbjZfZGV2X2dldGAgaXMgY2FsbGVkLgoKTXkgaW52ZXN0aWdhdGlvbiBoYXMgY29uZmlybWVkIHRoYXQgYGluNl9kZXZfZ2V0YCBpcyBjYWxsZWQgZGlyZWN0bHkgaW4gbXVsdGlwbGUgaW1wb3J0YW50IGZ1bmN0aW9ucy4gVGhlc2UgaW5jbHVkZSBgaXB2Nl9zb2NrX2FjX2pvaW5gLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3Igam9pbmluZyBhbnljYXN0IHNvY2tldHMsIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCB3aGljaCBkZWFscyB3aXRoIG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgIHRoYXQgaXMgdXNlZCB0byBwcm9jZXNzIHByZWZpeCBpbmZvcm1hdGlvbi4gVGhlc2UgYXJlIGFsbCBnb29kIHRhcmdldHMgdG8gdGVzdC4gRnVydGhlcm1vcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgcmVsZXZhbnQgdXNlcyBvZiBgaW42X2Rldl9nZXRgLiBgbmRpc2NfcmVjdl9uc2AgaW4gdGhlIG5laWdoYm9yIGRpc2NvdmVyeSBjb2RlIGFsc28gdXNlcyBpdCBkaXJlY3RseS4KCkFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGBfX2luNl9kZXZfZ2V0YCBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaW5zdGFuY2VzIG9mIHRoaXMgaW4gdGhlIGNvZGUuIEkgYW0gdGhpbmtpbmcgb2YgYGFkZHJjb25mX25vdGlmeWAgYW5kIGBhZGRyY29uZl9pZmRvd25gIGFzIHdlbGwuIEluIGFkZGl0aW9uLCBgaXB2Nl9kZXZfbWNfZGVjYCwgYGlwdjZfZGV2X21jX2luY2AsIGBfX2lwdjZfZGV2X21jX2luY2AsIGBpZ21wNl9ldmVudF9xdWVyeWAsIGBpZ21wNl9ldmVudF9yZXBvcnRgIGFuZCBgbWxkX3NlbmRwYWNrYCBhbGwgdXNlcyBgX19pbjZfZGV2X2dldGAuCgpTbywgdG8gYmUgdmVyeSB0aG9yb3VnaCwgSSB3aWxsIGFkZCBgaXB2Nl9zb2NrX2FjX2pvaW5gLCBgbmRpc2NfcmVjdl9uc2AsIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgaXB2Nl9kZXZfbWNfZGVjYCBhbmQgYF9faXB2Nl9kZXZfbWNfaW5jYCB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0IHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFyZSBmdWxseSBhc3Nlc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9kZXZfbWNfaW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2FkZHJjb25mLmg9MjU5PWJvb2wgaW5ldDZfbWNfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm1jX2FkZHIsXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNjEtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI2MjppbnQgaXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTI2My1pbnQgX19pcHY2X2Rldl9tY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyMzM9c3RhdGljIHZvaWQgYnJfaXA2X211bHRpY2FzdF9qb2luX3Nub29wZXJzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMzctXHRpcHY2X2FkZHJfc2V0KFx1MDAyNmFkZHIsIGh0b25sKDB4ZmYwMjAwMDApLCAwLCAwLCBodG9ubCgweDZhKSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQyMzg6XHRpcHY2X2Rldl9tY19pbmMoYnItXHUwMDNlZGV2LCBcdTAwMjZhZGRyKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDIzOS19XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNzc9c3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwdjZfYWRkX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNDcxLVx0XHQvKiBKb2luIGludGVyZmFjZS1sb2NhbCBhbGwtbm9kZSBtdWx0aWNhc3QgZ3JvdXAgKi9cbm5ldC9pcHY2L2FkZHJjb25mLmM6NDcyOlx0XHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcdTAwMjZpbjZhZGRyX2ludGVyZmFjZWxvY2FsX2FsbG5vZGVzKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDczLVxubmV0L2lwdjYvYWRkcmNvbmYuYy00NzQtXHRcdC8qIEpvaW4gYWxsLW5vZGUgbXVsdGljYXN0IGdyb3VwICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjQ3NTpcdFx0aXB2Nl9kZXZfbWNfaW5jKGRldiwgXHUwMDI2aW42YWRkcl9saW5rbG9jYWxfYWxsbm9kZXMpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy00NzYtXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy00NzgtXHRcdGlmIChuZGV2LVx1MDAzZWNuZi5mb3J3YXJkaW5nIFx1MDAyNlx1MDAyNiAoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTVVMVElDQVNUKSlcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDc5Olx0XHRcdGlwdjZfZGV2X21jX2luYyhkZXYsIFx1MDAyNmluNmFkZHJfbGlua2xvY2FsX2FsbHJvdXRlcnMpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy00ODAtXHR9XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz04MDY9c3RhdGljIHZvaWQgZGV2X2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy04MTgtXHRcdGlmIChpZGV2LVx1MDAzZWNuZi5mb3J3YXJkaW5nKSB7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjgxOTpcdFx0XHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcdTAwMjZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6ODIwOlx0XHRcdGlwdjZfZGV2X21jX2luYyhkZXYsIFx1MDAyNmluNmFkZHJfaW50ZXJmYWNlbG9jYWxfYWxscm91dGVycyk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjgyMTpcdFx0XHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcdTAwMjZpbjZhZGRyX3NpdGVsb2NhbF9hbGxyb3V0ZXJzKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtODIyLVx0XHR9IGVsc2Uge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjI1ND12b2lkIGFkZHJjb25mX2pvaW5fc29saWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyNjEtXHRhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KGFkZHIsIFx1MDAyNm1hZGRyKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjI2MjpcdGlwdjZfZGV2X21jX2luYyhkZXYsIFx1MDAyNm1hZGRyKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjI2My19XG4tLVxubmV0L2lwdjYvbWNhc3QuYz05MT1zdGF0aWMgaW50IGlwNl9tY19sZWF2ZV9zcmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqaW1sLFxubmV0L2lwdjYvbWNhc3QuYy05Mi1cdFx0XHQgICAgc3RydWN0IGluZXQ2X2RldiAqaWRldik7XG5uZXQvaXB2Ni9tY2FzdC5jOjkzOnN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L21jYXN0LmMtOTQtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHVuc2lnbmVkIGludCBtb2RlKTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTE5OD1zdGF0aWMgaW50IF9faXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTIzMy1cdC8qIG5vdyBhZGQvaW5jcmVhc2UgdGhlIGdyb3VwIG1lbWJlcnNoaXAgb24gdGhlIGRldmljZSAqL1xubmV0L2lwdjYvbWNhc3QuYzoyMzQ6XHRlcnIgPSBfX2lwdjZfZGV2X21jX2luYyhkZXYsIGFkZHIsIG1vZGUpO1xubmV0L2lwdjYvbWNhc3QuYy0yMzUtXG4tLVxubmV0L2lwdjYvbWNhc3QuYz04OTQ9c3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy05MzItICovXG5uZXQvaXB2Ni9tY2FzdC5jOjkzMzpzdGF0aWMgaW50IF9faXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2Ni9tY2FzdC5jLTkzNC1cdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy05NzktXG5uZXQvaXB2Ni9tY2FzdC5jOjk4MDppbnQgaXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L21jYXN0LmMtOTgxLXtcbm5ldC9pcHY2L21jYXN0LmM6OTgyOlx0cmV0dXJuIF9faXB2Nl9kZXZfbWNfaW5jKGRldiwgYWRkciwgTUNBU1RfRVhDTFVERSk7XG5uZXQvaXB2Ni9tY2FzdC5jLTk4My19XG5uZXQvaXB2Ni9tY2FzdC5jOjk4NDpFWFBPUlRfU1lNQk9MKGlwdjZfZGV2X21jX2luYyk7XG5uZXQvaXB2Ni9tY2FzdC5jLTk4NS1cbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTM3Mz1zdGF0aWMgaW50IHBuZGlzY19jb25zdHJ1Y3RvcihzdHJ1Y3QgcG5laWdoX2VudHJ5ICpuKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMzgyLVx0YWRkcmNvbmZfYWRkcl9zb2xpY3RfbXVsdChhZGRyLCBcdTAwMjZtYWRkcik7XG5uZXQvaXB2Ni9uZGlzYy5jOjM4MzpcdHJldHVybiBpcHY2X2Rldl9tY19pbmMoZGV2LCBcdTAwMjZtYWRkcik7XG5uZXQvaXB2Ni9uZGlzYy5jLTM4NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTM5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIElQdjYgTXVsdGljYXN0IEpvaW4gT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBpbnRlcm5hbHMgb2YgSVB2NiBtdWx0aWNhc3Qgam9pbnMsIHNwZWNpZmljYWxseSwgdGhlIGBfX2lwdjZfc29ja19tY19qb2luYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhhdCBmdW5jdGlvbiBjYWxscyBgX19pcHY2X2Rldl9tY19pbmNgLCBhbmQgdGhhdCwgaW4gdHVybiwgY2FsbHMgYGluNl9kZXZfZ2V0YC4gVGhhdCB3aG9sZSBmbG93IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiBgaXB2Nl9zb2NrX21jX2pvaW5gIGl0c2VsZiBsb29rcyBsaWtlIGEgbGlrZWx5IHRhcmdldCB0byBleHBsb3JlIGZ1cnRoZXIuIEkgdGhpbmsgSSYjMzk7bGwgZm9jdXMgb24gYGlwdjZfc29ja19tY19qb2luYC4gTGV0JiMzOTtzIGNoZWNrIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X3NvY2tfbWNfam9pbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYz0xNz1pbnQgdnhsYW5faWdtcF9qb2luKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCB1bmlvbiB2eGxhbl9hZGRyICpyaXAsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNDEtXHRcdGxvY2tfc29jayhzayk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzo0MjpcdFx0cmV0ID0gaXB2Nl9zb2NrX21jX2pvaW4oc2ssIGlmaW5kZXgsIFx1MDAyNmlwLVx1MDAzZXNpbjYuc2luNl9hZGRyKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTQzLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MjQ0PXN0YXRpYyBpbmxpbmUgYm9vbCBpcHY2X21jX21heV9wdWxsKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNTItXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI1MzppbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMjU0LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xuLS1cbmluY2x1ZGUvbmV0L2lwdjYuaD0xMjI3PXZvaWQgaXB2Nl9zeXNjdGxfdW5yZWdpc3Rlcih2b2lkKTtcbi0tXG5pbmNsdWRlL25ldC9pcHY2LmgtMTIyOS1cbmluY2x1ZGUvbmV0L2lwdjYuaDoxMjMwOmludCBpcHY2X3NvY2tfbWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMzEtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG5pbmNsdWRlL25ldC9pcHY2Lmg6MTIzMjppbnQgaXB2Nl9zb2NrX21jX2pvaW5fc3NtKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXG5pbmNsdWRlL25ldC9pcHY2LmgtMTIzMy1cdFx0XHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MzAxNj1zdGF0aWMgaW50IGlwdjZfbWNfY29uZmlnKHN0cnVjdCBzb2NrICpzaywgYm9vbCBqb2luLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzAyNC1cdGlmIChqb2luKVxubmV0L2lwdjYvYWRkcmNvbmYuYzozMDI1Olx0XHRyZXQgPSBpcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkcik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMwMjYtXHRlbHNlXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTE0Nj1zdGF0aWMgaW50IGRvX2lwdjZfbWNhc3RfZ3JvdXBfc291cmNlKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTE3MS1cdFx0cHNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKVx1MDAyNmdyZXFzLmdzcl9ncm91cDtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxNzI6XHRcdHJldHYgPSBpcHY2X3NvY2tfbWNfam9pbl9zc20oc2ssIGdyZXFzLmdzcl9pbnRlcmZhY2UsXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTczLVx0XHRcdFx0XHQgICAgIFx1MDAyNnBzaW42LVx1MDAzZXNpbjZfYWRkcixcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MjYyPXN0YXRpYyBpbnQgaXB2Nl9tY2FzdF9qb2luX2xlYXZlKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3Ni1cdGlmIChvcHRuYW1lID09IE1DQVNUX0pPSU5fR1JPVVApXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mjc3Olx0XHRyZXR1cm4gaXB2Nl9zb2NrX21jX2pvaW4oc2ssIGdyZXEuZ3JfaW50ZXJmYWNlLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3OC1cdFx0XHRcdFx0IFx1MDAyNnBzaW42LVx1MDAzZXNpbjZfYWRkcik7XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTI4Mj1zdGF0aWMgaW50IGNvbXBhdF9pcHY2X21jYXN0X2pvaW5fbGVhdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMjk2LVx0aWYgKG9wdG5hbWUgPT0gTUNBU1RfSk9JTl9HUk9VUClcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyOTc6XHRcdHJldHVybiBpcHY2X3NvY2tfbWNfam9pbihzaywgZ3IzMi5ncl9pbnRlcmZhY2UsXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMjk4LVx0XHRcdFx0XHRcdTAwMjZwc2luNi1cdTAwM2VzaW42X2FkZHIpO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg3NC1cdFx0aWYgKG9wdG5hbWUgPT0gSVBWNl9BRERfTUVNQkVSU0hJUClcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo4NzU6XHRcdFx0cmV0diA9IGlwdjZfc29ja19tY19qb2luKHNrLCBtcmVxLmlwdjZtcl9pZmluZGV4LCBcdTAwMjZtcmVxLmlwdjZtcl9tdWx0aWFkZHIpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg3Ni1cdFx0ZWxzZVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MTcyPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2X21jX2ZpbmRfZGV2KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTE5Ny0gKi9cbm5ldC9pcHY2L21jYXN0LmM6MTk4OnN0YXRpYyBpbnQgX19pcHY2X3NvY2tfbWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxubmV0L2lwdjYvbWNhc3QuYy0xOTktXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXG4tLVxubmV0L2lwdjYvbWNhc3QuYy0yNDgtXG5uZXQvaXB2Ni9tY2FzdC5jOjI0OTppbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxubmV0L2lwdjYvbWNhc3QuYy0yNTAte1xubmV0L2lwdjYvbWNhc3QuYzoyNTE6XHRyZXR1cm4gX19pcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkciwgTUNBU1RfRVhDTFVERSk7XG5uZXQvaXB2Ni9tY2FzdC5jLTI1Mi19XG5uZXQvaXB2Ni9tY2FzdC5jOjI1MzpFWFBPUlRfU1lNQk9MKGlwdjZfc29ja19tY19qb2luKTtcbm5ldC9pcHY2L21jYXN0LmMtMjU0LVxubmV0L2lwdjYvbWNhc3QuYzoyNTU6aW50IGlwdjZfc29ja19tY19qb2luX3NzbShzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxubmV0L2lwdjYvbWNhc3QuYy0yNTYtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHVuc2lnbmVkIGludCBtb2RlKVxubmV0L2lwdjYvbWNhc3QuYy0yNTcte1xubmV0L2lwdjYvbWNhc3QuYzoyNTg6XHRyZXR1cm4gX19pcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkciwgbW9kZSk7XG5uZXQvaXB2Ni9tY2FzdC5jLTI1OS19XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNDAzPXN0YXRpYyBpbnQgam9pbl9tY2FzdF9ncm91cDYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNDExLVx0bG9ja19zb2NrKHNrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQxMjpcdHJldCA9IGlwdjZfc29ja19tY19qb2luKHNrLCBkZXYtXHUwMDNlaWZpbmRleCwgYWRkcik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0MTMtXHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jPTQwND1zdGF0aWMgaW50IGVuYWJsZV9tY2FzdChzdHJ1Y3QgdWRwX2JlYXJlciAqdWIsIHN0cnVjdCB1ZHBfbWVkaWFfYWRkciAqcmVtb3RlKVxuLS1cbm5ldC90aXBjL3VkcF9tZWRpYS5jLTQxNi1cdFx0bG9ja19zb2NrKHNrKTtcbm5ldC90aXBjL3VkcF9tZWRpYS5jOjQxNzpcdFx0ZXJyID0gaXB2Nl9zb2NrX21jX2pvaW4oc2ssIHViLVx1MDAzZWlmaW5kZXgsIFx1MDAyNnJlbW90ZS1cdTAwM2VpcHY2KTtcbm5ldC90aXBjL3VkcF9tZWRpYS5jLTQxOC1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2MjAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRm9jdXMgTGlzdCBmb3IgSVB2NiBTb2NrZXQgTXVsdGljYXN0IE9wZXJhdGlvbnMqKgoKT2theSwgYWZ0ZXIgY29uc2lkZXJpbmcgdGhlIGluaXRpYWwgb3B0aW9ucywgYGlwdjZfc29ja19tY19qb2luYCBhbmQgYGlwdjZfc29ja19tY19kcm9wYCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgdGFyZ2V0cyBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEkmIzM5O2xsIGFkZCB0aGVtIHRvIHRoZSBsaXN0LCBjbGVhcmx5LgoKU28sIHRvIGJlIHByZWNpc2UsIG15IGN1cnJlbnQgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOgoKKiAgIGBpcHY2X3NvY2tfYWNfam9pbmAKKiAgIGBpcHY2X3NvY2tfYWNfZHJvcGAKKiAgIGBpcHY2X3NvY2tfbWNfam9pbmAKKiAgIGBpcHY2X3NvY2tfbWNfZHJvcGAKKiAgIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYAoqICAgYGFkZHJjb25mX3ByZWZpeF9yY3ZgCiogICBgbmRpc2NfcmVjdl9uc2AKCkhhbmcgb24gYSBtb21lbnQuLi4gaXMgdGhlIGZ1bmN0aW9uIG5hbWUgZm9yIGRyb3BwaW5nIG11bHRpY2FzdCBjb3JyZWN0bHkgc3RhdGVkIGFzIGBpcHY2X3NvY2tfbWNfZHJvcGA/IEJldHRlciBkb3VibGUgY2hlY2sgdGhhdCB0byBjb25maXJtLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGRldGFpbHMgYXJlIHByZWNpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc29ja19tY19kcm9wJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jPTUwPWludCB2eGxhbl9pZ21wX2xlYXZlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCB1bmlvbiB2eGxhbl9hZGRyICpyaXAsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNzQtXHRcdGxvY2tfc29jayhzayk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzo3NTpcdFx0cmV0ID0gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIGlmaW5kZXgsIFx1MDAyNmlwLVx1MDAzZXNpbjYuc2luNl9hZGRyKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTc2LVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MjUzPWludCBpcHY2X3NvY2tfbWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNTQtXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI1NTppbnQgaXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMjU2LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xuLS1cbmluY2x1ZGUvbmV0L2lwdjYuaD0xMjMyPWludCBpcHY2X3NvY2tfbWNfam9pbl9zc20oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2lwdjYuaC0xMjMzLVx0XHRcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCB1bnNpZ25lZCBpbnQgbW9kZSk7XG5pbmNsdWRlL25ldC9pcHY2Lmg6MTIzNDppbnQgaXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbmluY2x1ZGUvbmV0L2lwdjYuaC0xMjM1LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MzAxNj1zdGF0aWMgaW50IGlwdjZfbWNfY29uZmlnKHN0cnVjdCBzb2NrICpzaywgYm9vbCBqb2luLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzAyNi1cdGVsc2Vcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzAyNzpcdFx0cmV0ID0gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIGlmaW5kZXgsIGFkZHIpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zMDI4LVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MjYyPXN0YXRpYyBpbnQgaXB2Nl9tY2FzdF9qb2luX2xlYXZlKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3OC1cdFx0XHRcdFx0IFx1MDAyNnBzaW42LVx1MDAzZXNpbjZfYWRkcik7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mjc5Olx0cmV0dXJuIGlwdjZfc29ja19tY19kcm9wKHNrLCBncmVxLmdyX2ludGVyZmFjZSwgXHUwMDI2cHNpbjYtXHUwMDNlc2luNl9hZGRyKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0yODAtfVxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0yODI9c3RhdGljIGludCBjb21wYXRfaXB2Nl9tY2FzdF9qb2luX2xlYXZlKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI5OC1cdFx0XHRcdFx0XHUwMDI2cHNpbjYtXHUwMDNlc2luNl9hZGRyKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyOTk6XHRyZXR1cm4gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIGdyMzIuZ3JfaW50ZXJmYWNlLCBcdTAwMjZwc2luNi1cdTAwM2VzaW42X2FkZHIpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTMwMC19XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc2LVx0XHRlbHNlXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6ODc3Olx0XHRcdHJldHYgPSBpcHY2X3NvY2tfbWNfZHJvcChzaywgbXJlcS5pcHY2bXJfaWZpbmRleCwgXHUwMDI2bXJlcS5pcHY2bXJfbXVsdGlhZGRyKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04NzgtXHRcdGJyZWFrO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9MjU1PWludCBpcHY2X3NvY2tfbWNfam9pbl9zc20oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTI2My0gKi9cbm5ldC9pcHY2L21jYXN0LmM6MjY0OnN0YXRpYyB2b2lkIF9faXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqbWNfbHN0KVxubmV0L2lwdjYvbWNhc3QuYy0yNjUte1xuLS1cbm5ldC9pcHY2L21jYXN0LmMtMjg4LVxubmV0L2lwdjYvbWNhc3QuYzoyODk6aW50IGlwdjZfc29ja19tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbm5ldC9pcHY2L21jYXN0LmMtMjkwLXtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTMwMy1cdFx0XHQqbG5rID0gbWNfbHN0LVx1MDAzZW5leHQ7XG5uZXQvaXB2Ni9tY2FzdC5jOjMwNDpcdFx0XHRfX2lwdjZfc29ja19tY19kcm9wKHNrLCBtY19sc3QpO1xubmV0L2lwdjYvbWNhc3QuYy0zMDUtXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L2lwdjYvbWNhc3QuYy0zMTAtfVxubmV0L2lwdjYvbWNhc3QuYzozMTE6RVhQT1JUX1NZTUJPTChpcHY2X3NvY2tfbWNfZHJvcCk7XG5uZXQvaXB2Ni9tY2FzdC5jLTMxMi1cbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTMzMD12b2lkIF9faXB2Nl9zb2NrX21jX2Nsb3NlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTMzNi1cdFx0bnAtXHUwMDNlaXB2Nl9tY19saXN0ID0gbWNfbHN0LVx1MDAzZW5leHQ7XG5uZXQvaXB2Ni9tY2FzdC5jOjMzNzpcdFx0X19pcHY2X3NvY2tfbWNfZHJvcChzaywgbWNfbHN0KTtcbm5ldC9pcHY2L21jYXN0LmMtMzM4LVx0fVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9MzUzPWludCBpcDZfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L21jYXN0LmMtNDgyLVx0aWYgKGxlYXZlZ3JvdXApXG5uZXQvaXB2Ni9tY2FzdC5jOjQ4MzpcdFx0ZXJyID0gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIHBnc3ItXHUwMDNlZ3NyX2ludGVyZmFjZSwgZ3JvdXApO1xubmV0L2lwdjYvbWNhc3QuYy00ODQtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9NDg3PWludCBpcDZfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy01ODAtXHRpZiAobGVhdmVncm91cClcbm5ldC9pcHY2L21jYXN0LmM6NTgxOlx0XHRlcnIgPSBpcHY2X3NvY2tfbWNfZHJvcChzaywgZ3NmLVx1MDAzZWdmX2ludGVyZmFjZSwgZ3JvdXApO1xubmV0L2lwdjYvbWNhc3QuYy01ODItXHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTYyNgoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgeWVzLCBgaXB2Nl9zb2NrX21jX2Ryb3BgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIHJ1biB0aHJvdWdoIHRoaXMgbGlzdCBvZiBmdW5jdGlvbnMgYWdhaW4uIFdlIGhhdmU6IGBpcHY2X3NvY2tfYWNfam9pbmAsIGBpcHY2X3NvY2tfYWNfZHJvcGAsIGBpcHY2X3NvY2tfbWNfam9pbmAsIGBpcHY2X3NvY2tfbWNfZHJvcGAsIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCwgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBhbmQgYG5kaXNjX3JlY3ZfbnNgLiBSaWdodC4gVGhlIGNvbW1vbiB0aHJlYWQgaGVyZSBpcyB0aGF0IGFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ugb3IgdHJpZ2dlcmVkIGJ5IG5ldHdvcmsgcGFja2V0cywgYW5kIGNydWNpYWxseSwgdGhleSBhbGwgY2FsbCBgaW42X2Rldl9nZXRgIG9yIGl0cyB2YXJpYW50IGBfX2luNl9kZXZfZ2V0YC4gQW5kIHRoYXQsIGFzIEkgcmVjYWxsLCBpcyBleGFjdGx5IHRoZSBmdW5jdGlvbiB0aGF0IHRoZSBwYXRjaCB0YXJnZXRzLCBzcGVjaWZpY2FsbHkgdG8gZml4IHRoYXQgcGVza3kgcmVmY291bnQgYnVnLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBgaW42X2Rldl9nZXRgIGFmdGVyIGFsbC4gQW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBmbGFnIGlzLCBhcyBleHBlY3RlZCwgYElQVjZgLiBHaXZlbiBhbGwgdGhpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHdpbGwgY29tbWl0IG15IGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfc29ja19hY19qb2luJiMzNDssCiAgICAmIzM0O2lwdjZfc29ja19hY19kcm9wJiMzNDssCiAgICAmIzM0O2lwdjZfc29ja19tY19qb2luJiMzNDssCiAgICAmIzM0O2lwdjZfc29ja19tY19kcm9wJiMzNDssCiAgICAmIzM0O2luZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmYmIzM0OywKICAgICYjMzQ7YWRkcmNvbmZfcHJlZml4X3JjdiYjMzQ7LAogICAgJiMzNDtuZGlzY19yZWN2X25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpbiB0aGUgY29yZSBJUHY2IGZ1bmN0aW9uIGBpbjZfZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNpbmNlIGBpbjZfZGV2X2dldGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCB3ZSBmb2N1cyBmdXp6aW5nIG9uIHNldmVyYWwga2V5IElQdjYgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhbmQgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAodmlhIHNldHNvY2tvcHQgb3IgbmV0bGluaykgb3IgbmV0d29yayBwYWNrZXRzICh2aWEgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zb2NrX2FjX2pvaW4mIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX2FjX2Ryb3AmIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX21jX2pvaW4mIzM0OywKICAgICYjMzQ7aXB2Nl9zb2NrX21jX2Ryb3AmIzM0OywKICAgICYjMzQ7aW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZiYjMzQ7LAogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O25kaXNjX3JlY3ZfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgdW5kZXJmbG93IGluIHRoZSBjb3JlIElQdjYgZnVuY3Rpb24gYGluNl9kZXZfZ2V0YCBieSB1c2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gU2luY2UgYGluNl9kZXZfZ2V0YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdlIGZvY3VzIGZ1enppbmcgb24gc2V2ZXJhbCBrZXkgSVB2NiBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0IGFuZCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlICh2aWEgc2V0c29ja29wdCBvciBuZXRsaW5rKSBvciBuZXR3b3JrIHBhY2tldHMgKHZpYSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIHJvdXRlciBhZHZlcnRpc2VtZW50cykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyODo0NC4wMzU5MDM3MTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2NDg4MTk4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfc29ja19hY19qb2luXCIsXG4gICAgXCJpcHY2X3NvY2tfYWNfZHJvcFwiLFxuICAgIFwiaXB2Nl9zb2NrX21jX2pvaW5cIixcbiAgICBcImlwdjZfc29ja19tY19kcm9wXCIsXG4gICAgXCJpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mXCIsXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJuZGlzY19yZWN2X25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgdW5kZXJmbG93IGluIHRoZSBjb3JlIElQdjYgZnVuY3Rpb24gYGluNl9kZXZfZ2V0YCBieSB1c2luZyBgcmVmY291bnRfaW5jX25vdF96ZXJvYC4gU2luY2UgYGluNl9kZXZfZ2V0YCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdlIGZvY3VzIGZ1enppbmcgb24gc2V2ZXJhbCBrZXkgSVB2NiBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0IGFuZCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlICh2aWEgc2V0c29ja29wdCBvciBuZXRsaW5rKSBvciBuZXR3b3JrIHBhY2tldHMgKHZpYSBuZWlnaGJvciBkaXNjb3ZlcnkgYW5kIHJvdXRlciBhZHZlcnRpc2VtZW50cykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI4OjQ0LjAzNTkwOTU0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MzQ0MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2IzZGQ1NzQ2YmIxZmMwZDU3NzllM2M3MGZhNmQyZTQxZmY4YjQyOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDIwOjI4OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oXFxuaW5kZXggOGNlZDI3YTgyMjliNi4uZTY3NjQyNDU5OTVmMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oXFxuKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxcbkBAIC00MDUsOCArNDA1LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRpZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cXHUwMDNlaXA2X3B0cik7XFxuLVxcdGlmIChpZGV2KVxcbi1cXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmlkZXYtXFx1MDAzZXJlZmNudCk7XFxuK1xcdGlmIChpZGV2IFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmlkZXYtXFx1MDAzZXJlZmNudCkpXFxuK1xcdFxcdGlkZXYgPSBOVUxMO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0cmV0dXJuIGlkZXY7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjg6NDQuNTY1MzE1MDc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAwMTE5Mzk2Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NvY2tfYWNfam9pblwiLFxuICAgIFwiaXB2Nl9zb2NrX2FjX2Ryb3BcIixcbiAgICBcImlwdjZfc29ja19tY19qb2luXCIsXG4gICAgXCJpcHY2X3NvY2tfbWNfZHJvcFwiLFxuICAgIFwiaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZlwiLFxuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwibmRpc2NfcmVjdl9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpbiB0aGUgY29yZSBJUHY2IGZ1bmN0aW9uIGBpbjZfZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNpbmNlIGBpbjZfZGV2X2dldGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCB3ZSBmb2N1cyBmdXp6aW5nIG9uIHNldmVyYWwga2V5IElQdjYgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhbmQgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAodmlhIHNldHNvY2tvcHQgb3IgbmV0bGluaykgb3IgbmV0d29yayBwYWNrZXRzICh2aWEgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYjNkZDU3NDZiYjFmYzBkNTc3OWUzYzcwZmE2ZDJlNDFmZjhiNDI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAyMDoyODo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oXG5pbmRleCA4Y2VkMjdhODIyOWI2Li5lNjc2NDI0NTk5NWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxuKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaFxuQEAgLTQwNSw4ICs0MDUsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRpZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2VpcDZfcHRyKTtcbi1cdGlmIChpZGV2KVxuLVx0XHRyZWZjb3VudF9pbmMoXHUwMDI2aWRldi1cdTAwM2VyZWZjbnQpO1xuK1x0aWYgKGlkZXYgXHUwMDI2XHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2aWRldi1cdTAwM2VyZWZjbnQpKVxuK1x0XHRpZGV2ID0gTlVMTDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIGlkZXY7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjg6NDQuNTY1MzE3NjI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MjQyNjQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIE5ldHdvcmtpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBpbjZfZGV2X2dldGAgaW4gYGluY2x1ZGUvbmV0L2FkZHJjb25mLmhgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgcmVwbGFjaW5nIGEgc2ltcGxlIGByZWZjb3VudF9pbmNgIHdpdGggYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNvdW5kcyBsaWtlIGEgc29saWQgZml4IGZvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByZWZjb3VudCB1bmRlcmZsb3cgc2NlbmFyaW8gaWYgYGlkZXYtXHUwMDNlcmVmY250YCBoYXBwZW5zIHRvIGJlIHplcm8uIFByZXR0eSBpbXBvcnRhbnQgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgcmFjZSBjb25kaXRpb25zIGluIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLlxuXG5Ob3csIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoaXMgZnVuY3Rpb24gY2FsbGVkLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz9cIiBJdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBleHBhbmRlZCBpbiBwbGFjZS4gVGhhdCBtYWtlcyB0YXJnZXRlZCBmdXp6aW5nIGJ5IG5hbWUgYSBiaXQgdHJpY2t5LiBJIGNhbid0IGp1c3QgdGhyb3cgYSBmdXp6ZXIgYXQgYGluNl9kZXZfZ2V0YCBkaXJlY3RseS4gSSBuZWVkIHRvIGZpbmQgaXRzIGNhbGxlcnMgdG8gaWRlbnRpZnkgbWVhbmluZ2Z1bCBmdXp6aW5nIHRhcmdldHMuIEkgY291bGQgbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBkaXJlY3RseSwgb3Igc2luY2UgaXQncyBhbiBpbmxpbmUgbmV0d29ya2luZyBmdW5jdGlvbiBJIGNvdWxkIGp1c3QgaW5mZXIgaXQncyB1c2VkIGluIGxvdHMgb2YgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBhbmQgSSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYEZvY3VzU3ltYm9sc2AuIE9yIG1heWJlIEkgc2hvdWxkIGRpZyBpbiBhbmQgdHJ5IHRvIGZpbmQgc29tZSBzcGVjaWZpYyBjYWxsZXJzIHRvIG5hcnJvdyBkb3duIHRoZSBmb2N1cyBvZiB0aGUgdGVzdGluZy5cblxuQWgsIHJpZ2h0LCBpdCdzIElQdjYgbmV0d29ya2luZy4gVGhhdCBoZWxwcyBuYXJyb3cgdGhlIHNjb3BlIGEgYml0LiBMZXQgbWUgcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyODo0OC45MDc3NDgwODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1OTA4NzYxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbjZfZGV2X2dldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0PTg4PXN0cnVjdCBobGlzdF9oZWFkICAgICAgICAgICAgICAgICAgIGZpYl9uaF9oZWFkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL25ldF9kZXZpY2UucnN0Ojg5OnN0cnVjdCBpbmV0Nl9kZXYqICAgICAgICAgICAgICAgICAgIGlwNl9wdHIgICAgICAgICAgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgX19pbjZfZGV2X2dldFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9uZXRfZGV2aWNlLnJzdC05MC1zdHJ1Y3Qgdmxhbl9pbmZvKiAgICAgICAgICAgICAgICAgICB2bGFuX2luZm9cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3JvY2VfZ2lkX21nbXQuYy0zNy1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9yb2NlX2dpZF9tZ210LmM6Mzg6LyogRm9yIGluNl9kZXZfZ2V0L2luNl9kZXZfcHV0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM5LSNpbmNsdWRlIFxcdTAwM2NuZXQvYWRkcmNvbmYuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3JvY2VfZ2lkX21nbXQuYz0zNzU9c3RhdGljIHZvaWQgZW51bV9uZXRkZXZfaXB2Nl9pcHMoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvcm9jZV9naWRfbWdtdC5jLTM5MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9yb2NlX2dpZF9tZ210LmM6MzkyOlxcdGluNl9kZXYgPSBpbjZfZGV2X2dldChuZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9yb2NlX2dpZF9tZ210LmMtMzkzLVxcdGlmICghaW42X2RldilcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jPTMyNjE9c3RhdGljIGludCBnZXRfbGxhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jLTMyNjctXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jOjMyNjg6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYy0zMjY5LVxcdGlmIChpZGV2ICE9IE5VTEwpIHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jPTE2NTY9c3RhdGljIGludCBpcmRtYV9hZGRfbXFoXzYoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNjc2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9jbS5jOjE2Nzc6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoaXBfZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvY20uYy0xNjc4LVxcdFxcdGlmICghaWRldikge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3V0aWxzLmM9MzM2PXN0YXRpYyB2b2lkIGlyZG1hX2FkZF9pcHY2X2FkZHIoc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYy0zNDgtXFx0XFx0ICAgICAgKFJFQURfT05DRShpcF9kZXYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IElGRl9VUCkpIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYzozNDk6XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoaXBfZGV2KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdXRpbHMuYy0zNTAtXFx0XFx0XFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmM9MTk2PXN0YXRpYyBpbnQgY3hnYjRfdXBkYXRlX2Rldl9jbGlwKHN0cnVjdCBuZXRfZGV2aWNlICpyb290X2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYy0yMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jOjIwMzpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChyb290X2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jLTIwNC1cXHRpZiAoIWlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz04MjM0PXN0YXRpYyBib29sIF9fbWx4c3dfc3BfZGV2X2FkZHJfbGlzdF9lbXB0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtODI0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzo4MjQzOlxcdGluZXQ2X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy04MjQ0LVxcdGlmIChpbmV0Nl9kZXYgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNmluZXQ2X2Rldi1cXHUwMDNlYWRkcl9saXN0KSlcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTIzMzk9c3RhdGljIHZvaWQgZ2VuZXZlX2xpbmtfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzY0LVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjIzNjU6XFx0XFx0aWYgKCFfX2luNl9kZXZfZ2V0KGRldikpXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM2Ni1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zOTM9c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQwNi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDA3OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KG5kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MDgtXFx0aWYgKGlkZXYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jPTMwOT1zdGF0aWMgdm9pZCBkb19uZWlnaF9zb2xpY2l0KHN0cnVjdCB1c2JuZXQgKmRldiwgdTggKmJ1ZiwgdTE2IHRjaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTMzOC1cXG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYzozMzk6XFx0aW42X2RldiA9IGluNl9kZXZfZ2V0KG5ldGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtMzQwLVxcdGlmICghaW42X2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNzQzPXN0YXRpYyBpbnQgdnhsYW5fY29uZmlnX3ZhbGlkYXRlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCB2eGxhbl9jb25maWcgKmNvbmYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg0NS1cXHRcXHRpZiAodXNlX2lwdjYpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mzg0NjpcXHRcXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChsb3dlcmRldik7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4NDctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MzE9c3RhdGljIGludCB3Z19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMzMtXFx0c3RydWN0IGluX2RldmljZSAqZGV2X3Y0ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MzQ6XFx0c3RydWN0IGluZXQ2X2RldiAqZGV2X3Y2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0zNS1cXHRzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyA9IG5ldGRldl9wcml2KGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dvdy5jPTYzOT1zdGF0aWMgdm9pZCBhdGgxMmtfd293X3ByZXBhcmVfbnNfb2ZmbG9hZChzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd293LmMtNjUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd293LmM6NjUyOlxcdGlkZXYgPSBpbjZfZGV2X2dldChuZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dvdy5jLTY1My1cXHRpZiAoIWlkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jPTEwNTE9c3RhdGljIGludCBxZXRoX2wzX2FkZF9tY2FzdF9ydG5sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB2aWQsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMtMTA5Ni1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jOjEwOTc6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jLTEwOTgtXFx0aWYgKCFpbjZfZGV2KVxcbi0tXFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmM9ODU2OT1zdGF0aWMgaW50IGZzY3RsX3F1ZXJ5X2lmYWNlX2luZm9faW9jdGwoc3RydWN0IGtzbWJkX2Nvbm4gKmNvbm4sXFxuLS1cXG5mcy9zbWIvc2VydmVyL3NtYjJwZHUuYy04NjUzLVxcbmZzL3NtYi9zZXJ2ZXIvc21iMnBkdS5jOjg2NTQ6XFx0XFx0XFx0aWRldjYgPSBfX2luNl9kZXZfZ2V0KG5ldGRldik7XFxuZnMvc21iL3NlcnZlci9zbWIycGR1LmMtODY1NS1cXHRcXHRcXHRpZiAoIWlkZXY2KVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zMzY9dm9pZCBpbmV0Nl9uZXRjb25mX25vdGlmeV9kZXZjb25mKHN0cnVjdCBuZXQgKm5ldCwgaW50IGV2ZW50LCBpbnQgdHlwZSxcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzM5LS8qKlxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MzQwOiAqIF9faW42X2Rldl9nZXQgLSBnZXQgaW5ldDZfZGV2IHBvaW50ZXIgZnJvbSBuZXRkZXZpY2VcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM0MS0gKiBAZGV2OiBuZXR3b3JrIGRldmljZVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNDUtICovXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNDY6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICpfX2luNl9kZXZfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNDcte1xcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zNTE9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNTUtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNTY6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICpfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zNTcte1xcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zNjk9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICpfX2luNl9kZXZfc3RhdHNfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM3Ni1cXHR9XFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozNzc6XFx0cmV0dXJuIF9faW42X2Rldl9nZXQoZGV2KTtcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM3OC19XFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTM4MC0vKipcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjM4MTogKiBfX2luNl9kZXZfZ2V0X3NhZmVseSAtIGdldCBpbmV0Nl9kZXYgcG9pbnRlciBmcm9tIG5ldGRldmljZVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzgyLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zODMtICpcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjM4NDogKiBUaGlzIGlzIGEgc2FmZXIgdmVyc2lvbiBvZiBfX2luNl9kZXZfZ2V0XFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zODUtICovXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozODY6c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICpfX2luNl9kZXZfZ2V0X3NhZmVseShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzg3LXtcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzk0LS8qKlxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6Mzk1OiAqIGluNl9kZXZfZ2V0IC0gZ2V0IGluZXQ2X2RldiBwb2ludGVyIGZyb20gbmV0ZGV2aWNlXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zOTYtICogQGRldjogbmV0d29yayBkZXZpY2VcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtNDAxLSAqL1xcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6NDAyOnN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqaW42X2Rldl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQwMy17XFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTQxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaF9wYXJtcyAqX19pbjZfZGV2X25kX3Bhcm1zX2dldF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQxNS17XFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDo0MTY6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTQxNy1cXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9NDU1PXN0YXRpYyBpbmxpbmUgYm9vbCBpcDZfaWdub3JlX2xpbmtkb3duKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC00NTYte1xcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6NDU3OlxcdGNvbnN0IHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC00NTgtXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNjU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNzgtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM3OTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zODAtXFx0aWYgKGlkZXYpXFxuLS1cXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaD02NT1pcDZmcmFnX2V4cGlyZV9mcmFnX3F1ZXVlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZyYWdfcXVldWUgKmZxKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtODktXFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmg6OTA6XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgX19pbjZfZGV2X2dldChkZXYpLCBJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTtcXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaDo5MTpcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNVElNRU9VVCk7XFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtOTItXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaD03NT1zdGF0aWMgaW5saW5lIGludCBuZnRfc2V0X3BrdGluZm9faXB2Nl9pbmdyZXNzKHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19pcHY2LmgtOTQtXFx0aWYgKHBrdF9sZW4gKyBzaXplb2YoKmlwNmgpIFxcdTAwM2UgcGt0LVxcdTAwM2Vza2ItXFx1MDAzZWxlbikge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfaXB2Ni5oOjk1OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KG5mdF9pbihwa3QpKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2lwdjYuaC05Ni1cXHRcXHRfX0lQNl9JTkNfU1RBVFMobmZ0X25ldChwa3QpLCBpZGV2LCBJUFNUQVRTX01JQl9JTlRSVU5DQVRFRFBLVFMpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19pcHY2LmgtMTEzLWluaGRyX2Vycm9yOlxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfaXB2Ni5oOjExNDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChuZnRfaW4ocGt0KSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19pcHY2LmgtMTE1LVxcdF9fSVA2X0lOQ19TVEFUUyhuZnRfbmV0KHBrdCksIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4tLVxcbm5ldC82bG93cGFuL2NvcmUuYz0xMDg9c3RhdGljIGludCBsb3dwYW5fZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuLS1cXG5uZXQvNmxvd3Bhbi9jb3JlLmMtMTE4LVxcbm5ldC82bG93cGFuL2NvcmUuYzoxMTk6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvNmxvd3Bhbi9jb3JlLmMtMTIwLVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEzMj1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTMzLXtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzQ6XFx0c3RydWN0IGluZXQ2X2RldiAqaW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzUtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz00MzM9YmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTQ0Ny1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo0NDg6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy00NDktXFx0aWYgKCFpbjZfZGV2KSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM9NDQ9aW50IGJyX3ZhbGlkYXRlX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTQ2LVxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjQ3OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtNDgtXFx0dTMyIHBrdF9sZW47XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MzYwPXN0YXRpYyBpbnQgYnBmX2lwdjZfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfZmliX2xvb2t1cCAqcGFyYW1zLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjM4MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MzgyOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTYzODMtXFx0aWYgKHVubGlrZWx5KCFpZGV2IHx8ICFSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLmZvcndhcmRpbmcpKSlcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jPTIxOTU9c3RhdGljIHZvaWQgcGt0Z2VuX3NldHVwX2luamVjdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldilcXG4tLVxcbm5ldC9jb3JlL3BrdGdlbi5jLTIyNTUtXFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9jb3JlL3BrdGdlbi5jOjIyNTY6XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQocGt0X2Rldi1cXHUwMDNlb2Rldik7XFxubmV0L2NvcmUvcGt0Z2VuLmMtMjI1Ny1cXHRcXHRcXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjQvaWNtcC5jPTEyOTE9Ym9vbCBpY21wX2J1aWxkX3Byb2JlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpY21waGRyICppY21waGRyKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTEzODUtXFxubmV0L2lwdjQvaWNtcC5jOjEzODY6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2NC9pY21wLmMtMTM4Ny1cXHRpZiAoaW42X2RldiBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2aW42X2Rldi1cXHUwMDNlYWRkcl9saXN0KSlcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NDkwPXN0YXRpYyBzdHJ1Y3QgaW5ldDZfZGV2ICppcHY2X2ZpbmRfaWRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00OTUtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo0OTY6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ5Ny1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjU3PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02ODktXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2OTA6XFx0XFx0aW42X2RldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02OTEtXFx0XFx0aWYgKCFpbjZfZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz03MzU9c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjQtXFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzY1OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjYtXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz04NTM9c3RhdGljIHZvaWQgYWRkcmNvbmZfZm9yd2FyZF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBfX3MzMiBuZXdmKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy04NTgtXFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo4NTk6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTg2MC1cXHRcXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz05MTk9c3RhdGljIHZvaWQgYWRkcmNvbmZfbGlua2Rvd25fY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3ZilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtOTI0LVxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6OTI1OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy05MjYtXFx0XFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgwMD1zdGF0aWMgaW50IGlwdjZfZ2V0X3NhZGRyX21hc3RlcihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MDgtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODA5OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTgxMC1cXHRpZiAoaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTgxMy1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE4MTQ6XFx0aWRldiA9IF9faW42X2Rldl9nZXQobWFzdGVyKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTUtXFx0aWYgKGlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MjI9aW50IGlwdjZfZGV2X2dldF9zYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkc3RfZGV2LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODYzLVxcdGlmIChkc3RfZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODY0OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTg2NS1cXHRcXHRpZiAoKGRzdF90eXBlIFxcdTAwMjYgSVBWNl9BRERSX01VTFRJQ0FTVCkgfHxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTkwMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE5MDI6XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5MDMtXFx0XFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0xOTQwPWludCBpcHY2X2dldF9sbGFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTQ2LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjE5NDc6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5NDgtXFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjA0MD1ib29sIGlwdjZfY2hrX2N1c3RvbV9wcmVmaXgoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDQ3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIwNDg6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNDktXFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjA2Mj1pbnQgaXB2Nl9jaGtfcHJlZml4KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA2OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMDcwOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDcxLVxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI3OTg9dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4MzMtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyODM0OlxcdGluNl9kZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjgzNS1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzEwNj1zdGF0aWMgaW50IGluZXQ2X2FkZHJfZGVsKHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgsIHUzMiBpZmFfZmxhZ3MsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTMxMjQtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzozMTI1OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTI2LVxcdGlmICghaWRldikge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNDgyPXN0YXRpYyB2b2lkIGFkZHJjb25mX2Rldl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzQ5OS1cXHRcXHQvKiBBbGFzLCB3ZSBzdXBwb3J0IG9ubHkgRXRoZXJuZXQgYXV0b2NvbmZpZ3VyYXRpb24uICovXFxubmV0L2lwdjYvYWRkcmNvbmYuYzozNTAwOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zNTAxLVxcdFxcdGlmICghSVNfRVJSX09SX05VTEwoaWRldikgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNjM3PXN0YXRpYyB2b2lkIGFkZHJjb25mX3Blcm1hbmVudF9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY0NS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM2NDY6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NDctXFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNjcxPXN0YXRpYyBpbnQgYWRkcmNvbmZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY3Ni1cXHRzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm87XFxubmV0L2lwdjYvYWRkcmNvbmYuYzozNjc3OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjc4LVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mzg1Nj1zdGF0aWMgdm9pZCBhZGRyY29uZl90eXBlX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODYwLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg2MTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg2Mi1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mzg3NT1zdGF0aWMgaW50IGFkZHJjb25mX2lmZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHVucmVnaXN0ZXIpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4ODktXFxubmV0L2lwdjYvYWRkcmNvbmYuYzozODkwOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODkxLVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTQzMD1zdGF0aWMgaW50IGluZXQ2X2R1bXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NjQtXFx0XFx0XFx0fVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ2NTpcXHRcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ2Ni1cXHRcXHRcXHRpZiAoaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ3NS1cXHRmb3JfZWFjaF9uZXRkZXZfZHVtcCh0Z3RfbmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTQ3NjpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTQ3Ny1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU5MDA9c3RhdGljIHNpemVfdCBpbmV0Nl9nZXRfbGlua19hZl9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MDIte1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTkwMzpcXHRpZiAoIV9faW42X2Rldl9nZXQoZGV2KSlcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MDQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU5MDk9c3RhdGljIGludCBpbmV0Nl9maWxsX2xpbmtfYWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTkxMS17XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1OTEyOlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTEzLVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02MDM1PXN0YXRpYyBpbnQgaW5ldDZfdmFsaWRhdGVfbGlua19hZihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDQzLVxcdGlmIChkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYwNDQ6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNDUtXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02MDY5PXN0YXRpYyBpbnQgaW5ldDZfc2V0X2xpbmtfYWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDcxLXtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjYwNzI6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYwNzMtXFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9JTkVUNl9NQVggKyAxXTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjE3MT1zdGF0aWMgaW50IGluZXQ2X2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjE5My1cXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2VpZmluZGV4KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2MTk0OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MTk1LVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjQxNT1zdGF0aWMgdm9pZCBhZGRyY29uZl9kaXNhYmxlX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY0MjAtXFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NDIxOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NDIyLVxcdFxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1MjQ9c3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfYWRkcl9nZW5fbW9kZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjU2OS1cXHRcXHRcXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY1NzA6XFx0XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NzEtXFx0XFx0XFx0XFx0aWYgKGlkZXYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjU5MT1zdGF0aWMgaW50IGFkZHJjb25mX3N5c2N0bF9zdGFibGVfc2VjcmV0KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NjM3LVxcdFxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjYzODpcXHRcXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjYzOS1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjcyNj1pbnQgYWRkcmNvbmZfZGlzYWJsZV9wb2xpY3koY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgKnZhbHAsIGludCB2YWwpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3NDQtXFx0XFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NzQ1OlxcdFxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NzQ2LVxcdFxcdFxcdGlmIChpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02Nzc4PXN0YXRpYyB2b2lkIGFkZHJjb25mX2ZvcmNlX2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3ZilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjc4My1cXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY3ODQ6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3ODUtXFx0XFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NzYyNT12b2lkIGFkZHJjb25mX2NsZWFudXAodm9pZClcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzYzOC1cXHRmb3JfZWFjaF9uZXRkZXYoXFx1MDAyNmluaXRfbmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2Mzk6XFx0XFx0aWYgKCFfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldikpXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03NjQwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTY3PWludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmMtMTI2LVxcbm5ldC9pcHY2L2FueWNhc3QuYzoxMjc6XFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYW55Y2FzdC5jLTEyOC1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz00MzA9c3RhdGljIGludCBpcHY2X2Rldl9hY19kZWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbm5ldC9pcHY2L2FueWNhc3QuYy00MzEte1xcbm5ldC9pcHY2L2FueWNhc3QuYzo0MzI6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYW55Y2FzdC5jLTQzMy1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTQ3MD1zdGF0aWMgYm9vbCBpcHY2X2Noa19hY2FzdF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jLTQ3NC1cXG5uZXQvaXB2Ni9hbnljYXN0LmM6NDc1OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYW55Y2FzdC5jLTQ3Ni1cXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTUzNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpZmFjYWRkcjYgKmFjNl9nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmMtNTQ1LVxcbm5ldC9pcHY2L2FueWNhc3QuYzo1NDY6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc3RhdGUtXFx1MDAzZWRldik7XFxubmV0L2lwdjYvYW55Y2FzdC5jLTU0Ny1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmM9NTU2PXN0YXRpYyBzdHJ1Y3QgaWZhY2FkZHI2ICphYzZfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBpZmFjYWRkcjYgKmltKVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jLTU2NS1cXHRcXHRcXHRicmVhaztcXG5uZXQvaXB2Ni9hbnljYXN0LmM6NTY2OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy01NjctXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTI5Nj1zdGF0aWMgaW50IGlwdjZfZGVzdG9wdF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjk3LXtcXG5uZXQvaXB2Ni9leHRoZHJzLmM6Mjk4OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMjk5LVxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODEtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM4MjpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTM4My1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz00ODg9c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTAxLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzo1MDI6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy01MDMtXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU1PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjU2LXtcXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjU3OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjU4LVxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz05MTI9c3RhdGljIGJvb2wgaXB2Nl9ob3BfaW9hbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb3B0b2ZmKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTkyNi1cXHQvKiBEb2VzIHRoZSBkZXZpY2Ugc3RpbGwgaGF2ZSBJUHY2IGNvbmZpZ3VyYXRpb24/ICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjkyNzpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTkyOC1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz00Nzk9c3RhdGljIHN0cnVjdCBpbjZfYWRkciAqaWNtcDZfZXh0X2lpb19hZGRyNl9maW5kKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtNDgzLVxcbm5ldC9pcHY2L2ljbXAuYzo0ODQ6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pY21wLmMtNDg1LVxcdGlmICghaW42X2RldilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz02MzY9dm9pZCBpY21wNl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8sXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmMtODE1LVxcbm5ldC9pcHY2L2ljbXAuYzo4MTY6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2ljbXAuYy04MTctXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9OTIxPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBpY21wdjZfZWNob19yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTEwMDEtXFxubmV0L2lwdjYvaWNtcC5jOjEwMDI6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2ljbXAuYy0xMDAzLVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTEwMzc9ZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTEwOTItb3V0Olxcbm5ldC9pcHY2L2ljbXAuYzoxMDkzOlxcdF9fSUNNUDZfSU5DX1NUQVRTKG5ldCwgX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldiksIElDTVA2X01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjYvaWNtcC5jLTEwOTQtXFx0cmV0dXJuIHJlYXNvbjtcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz0xMTAxPXN0YXRpYyBpbnQgaWNtcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTExMDUtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGljbXA2X2Rldihza2IpO1xcbm5ldC9pcHY2L2ljbXAuYzoxMTA2OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvaWNtcC5jLTExMDctXFx0c3RydWN0IGljbXA2aGRyICpoZHI7XFxuLS1cXG5uZXQvaXB2Ni9pb2FtNi5jPTcwNz1zdGF0aWMgdm9pZCBfX2lvYW02X2ZpbGxfdHJhY2VfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaW9hbTYuYy03MjUtXFxubmV0L2lwdjYvaW9hbTYuYzo3MjY6XFx0aV9za2JfZGV2ID0gc2tiLVxcdTAwM2VkZXYgPyBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KSA6IE5VTEw7XFxubmV0L2lwdjYvaW9hbTYuYzo3Mjc6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pb2FtNi5jLTcyOC1cXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTE4OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwNl9yY3ZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvaXA2X2lucHV0LmMtMjAzLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjIwNDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvaXA2X2lucHV0LmMtMjA1LVxcbi0tXFxubmV0L2lwdjYvaXA2X2lucHV0LmM9NTU0PWludCBpcDZfbWNfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU2MS1cXHRfX0lQNl9VUERfUE9fU1RBVFMoc2tiX2RzdF9kZXZfbmV0X3JjdShza2IpLFxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jOjU2MjpcXHRcXHRcXHQgICBfX2luNl9kZXZfZ2V0X3NhZmVseShkZXYpLCBJUFNUQVRTX01JQl9JTk1DQVNULFxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTU2My1cXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MjYyPWludCBpcDZfZHN0X2hvcGxpbWl0KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0yNzAtXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI4OjUxLjc2Njg0MzgxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NTMwMjMxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQdjYgUmVmY291bnQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb2RpZmllZCBgaW42X2Rldl9nZXRgIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IsIG1vcmUgcHJlY2lzZWx5LCBhIHJlZmNvdW50IHVuZGVyZmxvdyBpc3N1ZS4gIFRoZSBjaGFuZ2UgaXMgc3VidGxlIGJ1dCBzaWduaWZpY2FudDsgaW5zdGVhZCBvZiBhIHNpbXBsZSBpbmNyZW1lbnQsIHRoZSBjb2RlIG5vdyBjaGVja3MgaWYgYGlkZXYtXHUwMDNlcmVmY250YCBpcyBhbHJlYWR5IHplcm8gYmVmb3JlIGF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGl0LiBUaGlzIG1ha2VzIHNlbnNlIOKAkyBhIHplcm8gcmVmY291bnQgaW5kaWNhdGVzIHRoZSBvYmplY3QgaXMgbGlrZWx5IGdvbmUsIHNvIGluY3JlbWVudGluZyBpdCB3b3VsZCBiZSBhIHByb2JsZW0uXG5cblRoZSBpbXBsaWNhdGlvbnMgYXJlIGNsZWFyOiBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBvYmplY3QgaXMgZnJlZWQgYmVmb3JlIGBpbjZfZGV2X2dldGAgY2FuIGluY3JlbWVudCBpdHMgcmVmY291bnQuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGlzc3VlIHRoYXQncyByaXBlIGZvciBmdXp6aW5nLiBHaXZlbiB0aGUgcHJldmFsZW5jZSBvZiBgaW42X2Rldl9nZXRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBudW1lcm91cyBsb2NhdGlvbnMsIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLiBJJ3ZlIGdvdCB0byBmaW5kIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIHRvIHRyaWdnZXIgdGhpcy5cblxuVGhlIGNhbGwgc2l0ZXMgYXJlIGxpc3RlZCwgYW5kIGEgcXVpY2sgZ2xhbmNlIHN1Z2dlc3RzIGZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCBhbmQgYG5ldC9pcHY2L2FueWNhc3QuY2AuIFNwZWNpZmljYWxseSwgZnVuY3Rpb25zIGxpa2UgYGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmZgIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgd2l0aGluIGBhZGRyY29uZi5jYCwgYW5kIGZ1bmN0aW9ucyBsaWtlIGBpcHY2X3NvY2tfYWNfam9pbmAgYW5kIGBpcHY2X2Rldl9hY19kZWNgIGluIGBhbnljYXN0LmNgLiBUaGVzZSBzZWVtIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgc2luY2UgdGhleSBkZWFsIGRpcmVjdGx5IHdpdGggbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBhZGRyZXNzIG1hbmFnZW1lbnQg4oCTIGNvbXBsZXggYXJlYXMgd2hlcmUgdGltaW5nIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlcyBhcmUgY29tbW9uLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgYW5kIGNyYWZ0IHNvbWUgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTg0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI4OjU3LjYxOTg3MDkxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY3OTYwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW42X2Rldl9nZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQ4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTQ5MD1zdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqaXB2Nl9maW5kX2lkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDk1LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDk2OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy00OTctXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1Nz1zdGF0aWMgaW50IGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjg5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjkwOlxcdFxcdGluNl9kZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjkxLVxcdFxcdGlmICghaW42X2RldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NzM1PXN0YXRpYyBpbnQgaW5ldDZfbmV0Y29uZl9kdW1wX2RldmNvbmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzY0LVxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc2NTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzY2LVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9ODUzPXN0YXRpYyB2b2lkIGFkZHJjb25mX2ZvcndhcmRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgX19zMzIgbmV3ZilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtODU4LVxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6ODU5OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy04NjAtXFx0XFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9OTE5PXN0YXRpYyB2b2lkIGFkZHJjb25mX2xpbmtkb3duX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTkyNC1cXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjkyNTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtOTI2LVxcdFxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MDA9c3RhdGljIGludCBpcHY2X2dldF9zYWRkcl9tYXN0ZXIoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODA4LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTgwOTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTAtXFx0aWYgKGlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4MTMtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxODE0OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KG1hc3Rlcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xODE1LVxcdGlmIChpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0xODIyPWludCBpcHY2X2Rldl9nZXRfc2FkZHIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZHN0X2RldixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTg2My1cXHRpZiAoZHN0X2Rldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MTg2NDpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE4NjUtXFx0XFx0aWYgKChkc3RfdHlwZSBcXHUwMDI2IElQVjZfQUREUl9NVUxUSUNBU1QpIHx8XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE5MDEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxOTAyOlxcdFxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTAzLVxcdFxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTk0MD1pbnQgaXB2Nl9nZXRfbGxhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMTk0Ni1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxOTQ3OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xOTQ4LVxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTIwNDA9Ym9vbCBpcHY2X2Noa19jdXN0b21fcHJlZml4KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA0Ny1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMDQ4OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMDQ5LVxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTIwNjI9aW50IGlwdjZfY2hrX3ByZWZpeChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIwNjktXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjA3MDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjA3MS1cXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNzk4PXZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yODMzLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjgzNDpcXHRpbjZfZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI4MzUtXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTMxMDY9c3RhdGljIGludCBpbmV0Nl9hZGRyX2RlbChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4LCB1MzIgaWZhX2ZsYWdzLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMTI0LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzEyNTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzEyNi1cXHRpZiAoIWlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzQ4Mj1zdGF0aWMgdm9pZCBhZGRyY29uZl9kZXZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM0OTktXFx0XFx0LyogQWxhcywgd2Ugc3VwcG9ydCBvbmx5IEV0aGVybmV0IGF1dG9jb25maWd1cmF0aW9uLiAqL1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzUwMDpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzUwMS1cXHRcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKGlkZXYpIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVAgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzYzNz1zdGF0aWMgdm9pZCBhZGRyY29uZl9wZXJtYW5lbnRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NDUtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzozNjQ2OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zNjQ3LVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzY3MT1zdGF0aWMgaW50IGFkZHJjb25mX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM2NzYtXFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9jaGFuZ2V1cHBlcl9pbmZvICppbmZvO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzY3NzpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzY3OC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NTY9c3RhdGljIHZvaWQgYWRkcmNvbmZfdHlwZV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg2MC1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM4NjE6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4NjItXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzU9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODg5LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg5MDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg5MS1cXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU0MzA9c3RhdGljIGludCBpbmV0Nl9kdW1wX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NDY0LVxcdFxcdFxcdH1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU0NjU6XFx0XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NjYtXFx0XFx0XFx0aWYgKGlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NzUtXFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAodGd0X25ldCwgZGV2LCBjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU0NzY6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU0NzctXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01OTAwPXN0YXRpYyBzaXplX3QgaW5ldDZfZ2V0X2xpbmtfYWZfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTAyLXtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU5MDM6XFx0aWYgKCFfX2luNl9kZXZfZ2V0KGRldikpXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01OTA0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01OTA5PXN0YXRpYyBpbnQgaW5ldDZfZmlsbF9saW5rX2FmKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU5MTEte1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTkxMjpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTkxMy1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjAzNT1zdGF0aWMgaW50IGluZXQ2X3ZhbGlkYXRlX2xpbmtfYWYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjA0My1cXHRpZiAoZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2MDQ0OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDQ1LVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NjA2OT1zdGF0aWMgaW50IGluZXQ2X3NldF9saW5rX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjA3MS17XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2MDcyOlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02MDczLVxcdHN0cnVjdCBubGF0dHIgKnRiW0lGTEFfSU5FVDZfTUFYICsgMV07XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTYxNzE9c3RhdGljIGludCBpbmV0Nl9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTYxOTMtXFx0Zm9yX2VhY2hfbmV0ZGV2X2R1bXAobmV0LCBkZXYsIGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjE5NDpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjE5NS1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY0MTU9c3RhdGljIHZvaWQgYWRkcmNvbmZfZGlzYWJsZV9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBfX3MzMiBuZXdmKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NDIwLVxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NjQyMTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjQyMi1cXHRcXHRpZiAoaWRldikge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02NTI0PXN0YXRpYyBpbnQgYWRkcmNvbmZfc3lzY3RsX2FkZHJfZ2VuX21vZGUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY1NjktXFx0XFx0XFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NTcwOlxcdFxcdFxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NTcxLVxcdFxcdFxcdFxcdGlmIChpZGV2IFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY1OTE9c3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfc3RhYmxlX3NlY3JldChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjYzNy1cXHRcXHRmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjY2Mzg6XFx0XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXRfcnRubF9uZXQoZGV2KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY2MzktXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY3MjY9aW50IGFkZHJjb25mX2Rpc2FibGVfcG9saWN5KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50ICp2YWxwLCBpbnQgdmFsKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NzQ0LVxcdFxcdGZvcl9lYWNoX25ldGRldihuZXQsIGRldikge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6Njc0NTpcXHRcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNjc0Ni1cXHRcXHRcXHRpZiAoaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Njc3OD1zdGF0aWMgdm9pZCBhZGRyY29uZl9mb3JjZV9mb3J3YXJkX2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIF9fczMyIG5ld2YpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTY3ODMtXFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2Nzg0OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0X3J0bmxfbmV0KGRldik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy02Nzg1LVxcdFxcdGlmIChpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTc2MjU9dm9pZCBhZGRyY29uZl9jbGVhbnVwKHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc2MzgtXFx0Zm9yX2VhY2hfbmV0ZGV2KFxcdTAwMjZpbml0X25ldCwgZGV2KSB7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo3NjM5OlxcdFxcdGlmICghX19pbjZfZGV2X2dldF9ydG5sX25ldChkZXYpKVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzY0MC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz02Nz1pbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jLTEyNi1cXG5uZXQvaXB2Ni9hbnljYXN0LmM6MTI3OlxcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy0xMjgtXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmM9NDMwPXN0YXRpYyBpbnQgaXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9hbnljYXN0LmMtNDMxLXtcXG5uZXQvaXB2Ni9hbnljYXN0LmM6NDMyOlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy00MzMtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz00NzA9c3RhdGljIGJvb2wgaXB2Nl9jaGtfYWNhc3RfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYy00NzQtXFxubmV0L2lwdjYvYW55Y2FzdC5jOjQ3NTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy00NzYtXFx0aWYgKGlkZXYpIHtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz01Mzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWZhY2FkZHI2ICphYzZfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jLTU0NS1cXG5uZXQvaXB2Ni9hbnljYXN0LmM6NTQ2OlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2FueWNhc3QuYy01NDctXFx0XFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTU1Nj1zdGF0aWMgc3RydWN0IGlmYWNhZGRyNiAqYWM2X2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaWZhY2FkZHI2ICppbSlcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYy01NjUtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2lwdjYvYW55Y2FzdC5jOjU2NjpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9hbnljYXN0LmMtNTY3LVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0yOTY9c3RhdGljIGludCBpcHY2X2Rlc3RvcHRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvZXh0aGRycy5jLTI5Ny17XFxubmV0L2lwdjYvZXh0aGRycy5jOjI5ODpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTI5OS1cXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzgxLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozODI6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODMtXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NDg4PXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTUwMS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTAyOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTAzLVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTY1NT1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvZXh0aGRycy5jLTY1Ni17XFxubmV0L2lwdjYvZXh0aGRycy5jOjY1NzpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTY1OC1cXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9OTEyPXN0YXRpYyBib29sIGlwdjZfaG9wX2lvYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9wdG9mZilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy05MjYtXFx0LyogRG9lcyB0aGUgZGV2aWNlIHN0aWxsIGhhdmUgSVB2NiBjb25maWd1cmF0aW9uPyAqL1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo5Mjc6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy05MjgtXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9NDc5PXN0YXRpYyBzdHJ1Y3QgaW42X2FkZHIgKmljbXA2X2V4dF9paW9fYWRkcjZfZmluZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTQ4My1cXG5uZXQvaXB2Ni9pY21wLmM6NDg0OlxcdGluNl9kZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvaWNtcC5jLTQ4NS1cXHRpZiAoIWluNl9kZXYpXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9NjM2PXZvaWQgaWNtcDZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLCB1OCBjb2RlLCBfX3UzMiBpbmZvLFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTgxNS1cXG5uZXQvaXB2Ni9pY21wLmM6ODE2OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9pY21wLmMtODE3LVxcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTkyMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gaWNtcHY2X2VjaG9fcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMDAxLVxcbm5ldC9pcHY2L2ljbXAuYzoxMDAyOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9pY21wLmMtMTAwMy1cXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz0xMDM3PWVudW0gc2tiX2Ryb3BfcmVhc29uIGljbXB2Nl9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSxcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMDkyLW91dDpcXG5uZXQvaXB2Ni9pY21wLmM6MTA5MzpcXHRfX0lDTVA2X0lOQ19TVEFUUyhuZXQsIF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpLCBJQ01QNl9NSUJfSU5FUlJPUlMpO1xcbm5ldC9pcHY2L2ljbXAuYy0xMDk0LVxcdHJldHVybiByZWFzb247XFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTEwMT1zdGF0aWMgaW50IGljbXB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMTA1LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpY21wNl9kZXYoc2tiKTtcXG5uZXQvaXB2Ni9pY21wLmM6MTEwNjpcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L2ljbXAuYy0xMTA3LVxcdHN0cnVjdCBpY21wNmhkciAqaGRyO1xcbi0tXFxubmV0L2lwdjYvaW9hbTYuYz03MDc9c3RhdGljIHZvaWQgX19pb2FtNl9maWxsX3RyYWNlX2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2lvYW02LmMtNzI1LVxcbm5ldC9pcHY2L2lvYW02LmM6NzI2OlxcdGlfc2tiX2RldiA9IHNrYi1cXHUwMDNlZGV2ID8gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldikgOiBOVUxMO1xcbm5ldC9pcHY2L2lvYW02LmM6NzI3OlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvaW9hbTYuYy03MjgtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYz0xODg9c3RhdGljIHN0cnVjdCBza19idWZmICppcDZfcmN2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTIwMy1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzoyMDQ6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L2lwNl9pbnB1dC5jLTIwNS1cXG4tLVxcbm5ldC9pcHY2L2lwNl9pbnB1dC5jPTU1ND1pbnQgaXA2X21jX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NjEtXFx0X19JUDZfVVBEX1BPX1NUQVRTKHNrYl9kc3RfZGV2X25ldF9yY3Uoc2tiKSxcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYzo1NjI6XFx0XFx0XFx0ICAgX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2KSwgSVBTVEFUU19NSUJfSU5NQ0FTVCxcXG5uZXQvaXB2Ni9pcDZfaW5wdXQuYy01NjMtXFx0XFx0XFx0ICAgc2tiLVxcdTAwM2VsZW4pO1xcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTI2Mj1pbnQgaXA2X2RzdF9ob3BsaW1pdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjcwLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoyNzE6XFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjcyLVxcdFxcdGlmIChpZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTUxOT1pbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy01MjktXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjUzMDpcXHRpZGV2ID0gX19pbjZfZGV2X2dldF9zYWZlbHkoZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBJUDZDQihza2IpLVxcdTAwM2VpaWYpKTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNTMxLVxcdGlmICghUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cXHUwMDNlZm9yd2FyZGluZykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9NzQyPXN0YXRpYyBpbnQgbWlmNl9kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCB2aWZpLCBpbnQgbm90aWZ5LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy03ODMtXFxubmV0L2lwdjYvaXA2bXIuYzo3ODQ6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTc4NS1cXHRpZiAoaW42X2Rldikge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz05MDY9c3RhdGljIGludCBtaWY2X2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy05NTItXFxubmV0L2lwdjYvaXA2bXIuYzo5NTM6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTk1NC1cXHRpZiAoaW42X2Rldikge1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0yNjQ9c3RhdGljIHZvaWQgX19pcHY2X3NvY2tfbWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3QpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTI3MC1cXHRpZiAoZGV2KSB7XFxubmV0L2lwdjYvbWNhc3QuYzoyNzE6XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0yNzItXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTMxMz1zdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqaXA2X21jX2ZpbmRfaWRldihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTMyMy1cXG5uZXQvaXB2Ni9tY2FzdC5jOjMyNDpcXHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTMyNS1cXHRkZXZfcHV0KGRldik7XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTkzMz1zdGF0aWMgaW50IF9faXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTkzOS1cXHQvKiB3ZSBuZWVkIHRvIHRha2UgYSByZWZlcmVuY2Ugb24gaWRldiAqL1xcbm5ldC9pcHY2L21jYXN0LmM6OTQwOlxcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L21jYXN0LmMtOTQxLVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MTAyMz1pbnQgaXB2Nl9kZXZfbWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTAyNy1cXG5uZXQvaXB2Ni9tY2FzdC5jOjEwMjg6XFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0xMDI5LVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MTA0Mj1ib29sIGlwdjZfY2hrX21jYXN0X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cCxcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTA0OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvbWNhc3QuYzoxMDUwOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0xMDUxLVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MTQwMj12b2lkIGlnbXA2X2V2ZW50X3F1ZXJ5KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbWNhc3QuYy0xNDAzLXtcXG5uZXQvaXB2Ni9tY2FzdC5jOjE0MDQ6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L21jYXN0LmMtMTQwNS1cXHRib29sIHB1dCA9IGZhbHNlO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNDI2PXN0YXRpYyB2b2lkIF9fbWxkX3F1ZXJ5X3dvcmsoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTQ1Ny1cXG5uZXQvaXB2Ni9tY2FzdC5jOjE0NTg6XFx0aWRldiA9IGluNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTE0NTktXFx0aWYgKCFpZGV2KVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNTgyPXZvaWQgaWdtcDZfZXZlbnRfcmVwb3J0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbWNhc3QuYy0xNTgzLXtcXG5uZXQvaXB2Ni9tY2FzdC5jOjE1ODQ6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L21jYXN0LmMtMTU4NS1cXHRib29sIHB1dCA9IGZhbHNlO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNjA2PXN0YXRpYyB2b2lkIF9fbWxkX3JlcG9ydF93b3JrKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTE2MzItXFxubmV0L2lwdjYvbWNhc3QuYzoxNjMzOlxcdGlkZXYgPSBpbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0xNjM0LVxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MTgzMD1zdGF0aWMgdm9pZCBtbGRfc2VuZHBhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMTg0Mi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvbWNhc3QuYzoxODQzOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTE4NDQtXFx0SVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTtcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MjE3ND1zdGF0aWMgdm9pZCBpZ21wNl9zZW5kKHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHR5cGUpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTIyMDUtXFx0bmV0ID0gZGV2X25ldF9yY3UoZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jOjIyMDY6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTIyMDctXFx0SVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTtcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9Mjg0NT12b2lkIGlwdjZfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMjg1OC1cXHQvKiBXZSBjYW5ub3QgY2FsbCBpcHY2X2Rldl9tY19kZWMoKSBkaXJlY3RseSwgb3VyIGNhbGxlciBpblxcbm5ldC9pcHY2L21jYXN0LmM6Mjg1OTpcXHQgKiBhZGRyY29uZi5jIGhhcyBOVUxMJ2Qgb3V0IGRldi1cXHUwMDNlaXA2X3B0ciBzbyBpbjZfZGV2X2dldCgpIHdpbGxcXG5uZXQvaXB2Ni9tY2FzdC5jLTI4NjAtXFx0ICogZmFpbC5cXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9Mjg5MT1zdGF0aWMgaW50IGlwdjZfbWNfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMjg5NS1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxubmV0L2lwdjYvbWNhc3QuYzoyODk2OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbWNhc3QuYy0yODk3LVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0yOTIzPXN0YXRpYyBpbmxpbmUgc3RydWN0IGlmbWNhZGRyNiAqaWdtcDZfbWNfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0yOTMxLVxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxubmV0L2lwdjYvbWNhc3QuYzoyOTMyOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHN0YXRlLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L21jYXN0LmMtMjkzMy1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTI5NDU9c3RhdGljIHN0cnVjdCBpZm1jYWRkcjYgKmlnbXA2X21jX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaWZtY2FkZHI2ICppbSlcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMjk1NS1cXHRcXHR9XFxubmV0L2lwdjYvbWNhc3QuYzoyOTU2OlxcdFxcdHN0YXRlLVxcdTAwM2VpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTI5NTctXFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlaWRldilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9MzAzMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcDZfc2ZfbGlzdCAqaWdtcDZfbWNmX2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMzA0Mi1cXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xcbm5ldC9pcHY2L21jYXN0LmM6MzA0MzpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTMwNDQtXFx0XFx0aWYgKHVubGlrZWx5KGlkZXYgPT0gTlVMTCkpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTMwNjA9c3RhdGljIHN0cnVjdCBpcDZfc2ZfbGlzdCAqaWdtcDZfbWNmX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgaXA2X3NmX2xpc3QgKnBzZilcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMzA3Mi1cXHRcXHRcXHR9XFxubmV0L2lwdjYvbWNhc3QuYzozMDczOlxcdFxcdFxcdHN0YXRlLVxcdTAwM2VpZGV2ID0gX19pbjZfZGV2X2dldChzdGF0ZS1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTMwNzQtXFx0XFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlaWRldilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MzI1PXN0YXRpYyBpbnQgbmRpc2NfY29uc3RydWN0b3Ioc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTMzMi1cXG5uZXQvaXB2Ni9uZGlzYy5jOjMzMzpcXHRpbjZfZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTMzNC1cXHRpZiAoIWluNl9kZXYpIHtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9NDAwPXN0YXRpYyBib29sIG5kaXNjX2FsbG93X2FkZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy00MDIte1xcbm5ldC9pcHY2L25kaXNjLmM6NDAzOlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy00MDQtXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTQ0MD1zdGF0aWMgdm9pZCBpcDZfbmRfaGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTQ0OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvbmRpc2MuYzo0NTA6XFx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtNDUxLVxcdHRjbGFzcyA9IGlkZXYgPyBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLm5kaXNjX3RjbGFzcykgOiAwO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz00Njg9dm9pZCBuZGlzY19zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy01MDgtXFx0ZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTtcXG5uZXQvaXB2Ni9uZGlzYy5jOjUwOTpcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtNTEwLVxcdElQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTU4MT1zdGF0aWMgdm9pZCBuZGlzY19zZW5kX3Vuc29sX25hKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTU4NS1cXG5uZXQvaXB2Ni9uZGlzYy5jOjU4NjpcXHRpZGV2ID0gaW42X2Rldl9nZXQoZGV2KTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTU4Ny1cXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTc4OD1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2NfcmVjdl9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy04OTUtXFxubmV0L2lwdjYvbmRpc2MuYzo4OTY6XFx0XFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy04OTctXFx0XFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTk4Nz1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2NfcmVjdl9uYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy05OTYtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbm5ldC9pcHY2L25kaXNjLmM6OTk3OlxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy05OTgtXFx0c3RydWN0IGluZXQ2X2lmYWRkciAqaWZwO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xMTI2PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yZWN2X3JzKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTExMzktXFxubmV0L2lwdjYvbmRpc2MuYzoxMTQwOlxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTExNDEtXFx0aWYgKCFpZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTI2Ny1cXG5uZXQvaXB2Ni9uZGlzYy5jOjEyNjg6XFx0aW42X2RldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTI2OS1cXHRpZiAoIWluNl9kZXYpIHtcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTc5MT1zdGF0aWMgYm9vbCBuZGlzY19zdXBwcmVzc19mcmFnX25kaXNjKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvbmRpc2MuYy0xNzkyLXtcXG5uZXQvaXB2Ni9uZGlzYy5jOjE3OTM6XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTc5NC1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTg1Nj1zdGF0aWMgaW50IG5kaXNjX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTg2OS1cXHRjYXNlIE5FVERFVl9VUDpcXG5uZXQvaXB2Ni9uZGlzYy5jOjE4NzA6XFx0XFx0aWRldiA9IGluNl9kZXZfZ2V0KGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy0xODcxLVxcdFxcdGlmICghaWRldilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTg3OC1cXHRjYXNlIE5FVERFVl9DSEFOR0U6XFxubmV0L2lwdjYvbmRpc2MuYzoxODc5OlxcdFxcdGlkZXYgPSBpbjZfZGV2X2dldChkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTg4MC1cXHRcXHRpZiAoIWlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTE5Mjk9aW50IG5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCB2b2lkICpidWZmZXIsXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTE5NTMtXFxubmV0L2lwdjYvbmRpc2MuYzoxOTU0OlxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiByZXQgPT0gMCBcXHUwMDI2XFx1MDAyNiBkZXYgXFx1MDAyNlxcdTAwMjYgKGlkZXYgPSBpbjZfZGV2X2dldChkZXYpKSAhPSBOVUxMKSB7XFxubmV0L2lwdjYvbmRpc2MuYy0xOTU1LVxcdFxcdGlmIChjdGwtXFx1MDAzZWRhdGEgPT0gTkVJR0hfVkFSX1BUUihpZGV2LVxcdTAwM2VuZF9wYXJtcywgQkFTRV9SRUFDSEFCTEVfVElNRSkpXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfdHByb3h5X2lwdjYuYz0xMD1uZl90cHJveHlfbGFkZHI2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdXNlcl9sYWRkcixcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl90cHJveHlfaXB2Ni5jLTIwLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl90cHJveHlfaXB2Ni5jOjIxOlxcdGluZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3Rwcm94eV9pcHY2LmMtMjItXFx0aWYgKGluZGV2KSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTE2MD1zdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMTc3LVxcdFxcdFxcdGlmIChydF9pZGV2IFxcdTAwMjZcXHUwMDI2IHJ0X2lkZXYtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjg6NTcuNzQ2Njc0NTM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4ODk5NjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgUmVmY291bnQgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgYGluNl9kZXZfZ2V0YCBmdW5jdGlvbiBpcyBhcHBhcmVudGx5IGEgcmVhbCB3b3JraG9yc2UgaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdGFjay4gSSBrbmV3IGl0IHdhcyBoZWF2aWx5IHVzZWQsIGJ1dCBub3cgSSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIHJlZmNvdW50IGJ1ZyBmaXguIFRoZSB0cmlja3kgcGFydCwgYXMgdXN1YWwsIGlzIHRoYXQgYGluNl9kZXZfZ2V0YCBpcyBpbmxpbmVkIOKAkyBpdCBkb2Vzbid0IGhhdmUgaXRzIG93biBzeW1ib2wuIFRoYXQgbWVhbnMgSSdsbCBoYXZlIHRvIGxvb2sgdXBzdHJlYW0gdG8gdGhlIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiBpdC5cblxuU2luY2UgbXkgZm9jdXMgaXMgb24gdXNlci1zcGFjZSBpbXBhY3QsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgY2FsbCBzaXRlcyB0aGF0IGFyZSBleHBvc2VkIHZpYSB0aGUgc3lzdGVtIGNhbGxzIGFuZCBpb2N0bHMgYW5kIG5ldGxpbmssIGFuZCBzbyBvbi4gTGV0J3MgbWFrZSBhIGxpc3QuIGBpcHY2X3NvY2tfYWNfam9pbmAsIGBpcHY2X2Rldl9hY19kZWNgLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAsIGFuZCBhbGwgdGhlIE5ESVNDLXJlbGF0ZWQgY2FsbHMsIGxpa2UgYG5kaXNjX2NvbnN0cnVjdG9yYCwgYG5kaXNjX3NlbmRfdW5zb2xfbmFgLCBgbmRpc2NfcmVjdl9uc2AsIGBuZGlzY19uZXRkZXZfZXZlbnRgLCBhbmQgYG5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlYC4gSXQncyBhIGxvbmcgbGlzdCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGZpbmQgdGhlIHJpZ2h0IGNhbmRpZGF0ZXMuXG5cbk5vdywgYmVjYXVzZSBgaW42X2Rldl9nZXRgIGlzIGNhbGxlZCAqZXZlcnl3aGVyZSogaW4gdGhlIElQdjYgc3RhY2ssIEkgZG9uJ3Qgd2FudCB0byBnZXQgbG9zdCBpbiBhIGZvcmVzdCBvZiBjb2RlLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9ucyB0aGF0IGxvb2sgbGlrZSBnb29kIGNhbmRpZGF0ZXM6IGBpcHY2X3NvY2tfYWNfam9pbmAgYW5kIGBpcHY2X3NvY2tfYWNfZHJvcGAuIExldCdzIHNlZSBpZiB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSB0aGUgc291cmNlIG9mIHRoZSByZWZjb3VudCBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI5OjAzLjAzNTY3MzExMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzAyMjc0ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc29ja19hY19qb2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MzA0PXZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDktICovXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozMTA6aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMTEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYz01NT1zdGF0aWMgdTMyIGluZXQ2X2FjYWRkcl9oYXNoKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY2L2FueWNhc3QuYy02Ni1cXG5uZXQvaXB2Ni9hbnljYXN0LmM6Njc6aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9hbnljYXN0LmMtNjgte1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04OTItXFx0XFx0aWYgKG9wdG5hbWUgPT0gSVBWNl9KT0lOX0FOWUNBU1QpXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjg5MzpcXHRcXHRcXHRyZXR2ID0gaXB2Nl9zb2NrX2FjX2pvaW4oc2ssIG1yZXEuaXB2Nm1yX2lmaW5kZXgsIFxcdTAwMjZtcmVxLmlwdjZtcl9hY2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04OTQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyOTowNS43Mzc5NTI4MjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY0OTA4OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSoqXG5cbkFscmlnaHQsIHNvIGBpcHY2X3NvY2tfYWNfam9pbmAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGRvX2lwdjZfc2V0c29ja29wdGAsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgSVBWNl9KT0lOX0FOWUNBU1RgIG9wdGlvbiBpcyB1c2VkLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmcg4oCTIGRpcmVjdCB1c2Vyc3BhY2UgYWNjZXNzIGlzIGEgY2xhc3NpYyBlbnRyeSBwb2ludC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBrZXJuZWwgZW52aXJvbm1lbnQuIExldCdzIHNlZS4uLiB0aGUgY29kZSdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIHBpdm90IGFuZCBsb29rIGF0IHRoZSBjb3JyZXNwb25kaW5nIFwiZHJvcFwiIGZ1bmN0aW9uLCBgaXB2Nl9zb2NrX2FjX2Ryb3BgLiBVbmRlcnN0YW5kaW5nIHRoZSBkcm9wIHBhdGggaXMganVzdCBhcyBjcnVjaWFsLiBJdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIGhhbmRsaW5nIG9yIGNsZWFudXAgbG9naWMgbGl2ZXMg4oCTIGFuZCB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgdGVuZCB0byBoaWRlIGlmIG5vdCBwcm9wZXJseSBoYW5kbGVkLiBHb3R0YSBzZWUgaWYgdGhlIGRyb3AgcGF0aCBoYXMgc2ltaWxhciBmbGF3cywgb3IgaWYgb25lIHBhdGggaXMgbW9yZSBwcm9ibGVtYXRpYyB0aGFuIHRoZSBvdGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MDgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyOTowOS4yMDI4Njc4OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDU4OTA2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zb2NrX2FjX2Ryb3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0zMTA9aW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMTEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMxMjppbnQgaXB2Nl9zb2NrX2FjX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTMxMy1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbi0tXFxubmV0L2lwdjYvYW55Y2FzdC5jPTY3PWludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuLS1cXG5uZXQvaXB2Ni9hbnljYXN0LmMtMTcyLSAqL1xcbm5ldC9pcHY2L2FueWNhc3QuYzoxNzM6aW50IGlwdjZfc29ja19hY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9hbnljYXN0LmMtMTc0LXtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODk0LVxcdFxcdGVsc2VcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6ODk1OlxcdFxcdFxcdHJldHYgPSBpcHY2X3NvY2tfYWNfZHJvcChzaywgbXJlcS5pcHY2bXJfaWZpbmRleCwgXFx1MDAyNm1yZXEuaXB2Nm1yX2FjYWRkcik7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTg5Ni1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MTEuODA4NzY4MjYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTM5ODEyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipUYXJnZXRpbmcgSVB2NiBTb2NrZXQgT3B0aW9ucyBmb3IgQW5hbHlzaXMqKlxuXG5SaWdodCwgc28gYGlwdjZfc29ja19hY19kcm9wYCwgdGhhdCdzIGEga2V5IGZ1bmN0aW9uIHRvIGxvb2sgYXQuIFdlIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBkb19pcHY2X3NldHNvY2tvcHRgLCBzcGVjaWZpY2FsbHkgZm9yIGBJUFY2X0xFQVZFX0FOWUNBU1RgLiBUaG9zZSB0d28gZnVuY3Rpb25zLCBgaXB2Nl9zb2NrX2FjX2Ryb3BgIGFuZCBgZG9faXB2Nl9zZXRzb2Nrb3B0YCwgdGhleSdyZSBkZWZpbml0ZWx5IHByaW1lIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBpbnNwZWN0aW9uLiAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gZGlnIHVwIHNvbWV0aGluZyBpbnRlcmVzdGluZy5cblxuTGV0J3Mgbm90IHN0b3AgdGhlcmUsIHRob3VnaC4gV2UgYWxzbyBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIGBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mYCBhbmQgYGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mYC4gVGhhdCdsbCBwcm92aWRlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuIEl0J3MgYWJvdXQgcHVsbGluZyB0b2dldGhlciBhbGwgdGhlIHBpZWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0OTEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyOToxNS4yNjI3NTI0NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODk5MTAxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTYxOD1zdGF0aWMgaW50IGluZXQ2X25ldGNvbmZfdmFsaWRfZ2V0X3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NTYtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo2NTc6c3RhdGljIGludCBpbmV0Nl9uZXRjb25mX2dldF9kZXZjb25mKHN0cnVjdCBza19idWZmICppbl9za2IsXFxubmV0L2lwdjYvYWRkcmNvbmYuYy02NTgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NzUzNT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgYWRkcmNvbmZfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTc1NTEtXFx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVUQ09ORixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjc1NTI6XFx0IC5kb2l0ID0gaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZiwgLmR1bXBpdCA9IGluZXQ2X25ldGNvbmZfZHVtcF9kZXZjb25mLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzU1My1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUQgfCBSVE5MX0ZMQUdfRFVNUF9VTkxPQ0tFRH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI5OjE3Ljg1MjY2ODE5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc4NjI1NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBuZXRsaW5rIGhhbmRsZXJzLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAgYW5kIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAuIFRoZXkncmUgdGhlIGdvLXRvIGZ1bmN0aW9ucyBmb3IgcmV0cmlldmluZyBhbmQgZHVtcGluZyBJUHY2IGRldmljZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQgdGhleSdyZSBkb2luZyBvbiB0aGUgaW5zaWRlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGF0IGRhdGEgaXMgZXhwb3NlZCBpcyBrZXkuXG5cbkdpdmVuIEknbSBsb29raW5nIGF0IG5ldHdvcmtpbmcgc3R1ZmYsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nIGR1cmluZyBuZWlnaGJvciBkaXNjb3ZlcnksIGFuZCB0byB0aGF0IGVuZCwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBuZGlzY19zZW5kX3Vuc29sX25hYCBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdW5zb2xpY2l0ZWQgbmVpZ2hib3IgYWR2ZXJ0aXNlbWVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYW5kIG1hbmFnZWQgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbiBjb250ZXh0LiBJdCdsbCBnaXZlIG1lIGEgdmlldyBpbnRvIGhvdyBvdGhlciBub2RlcyBhcmUgdXBkYXRlZCB3aXRoIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMDEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDoyOToyMS40MzEyOTYyNjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTk0OTQ0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRpc2Nfc2VuZF91bnNvbF9uYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZGlzYy5jPTU3OT1FWFBPUlRfU1lNQk9MX0dQTChuZGlzY19zZW5kX25hKTtcXG5uZXQvaXB2Ni9uZGlzYy5jLTU4MC1cXG5uZXQvaXB2Ni9uZGlzYy5jOjU4MTpzdGF0aWMgdm9pZCBuZGlzY19zZW5kX3Vuc29sX25hKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjYvbmRpc2MuYy01ODIte1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xODU2PXN0YXRpYyBpbnQgbmRpc2NfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xODc0LVxcdFxcdCAgICBSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VuZGlzY19ub3RpZnkpKVxcbm5ldC9pcHY2L25kaXNjLmM6MTg3NTpcXHRcXHRcXHRuZGlzY19zZW5kX3Vuc29sX25hKGRldik7XFxubmV0L2lwdjYvbmRpc2MuYy0xODc2LVxcdFxcdGluNl9kZXZfcHV0KGlkZXYpO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xODk4LVxcdGNhc2UgTkVUREVWX05PVElGWV9QRUVSUzpcXG5uZXQvaXB2Ni9uZGlzYy5jOjE4OTk6XFx0XFx0bmRpc2Nfc2VuZF91bnNvbF9uYShkZXYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTkwMC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MjMuOTUwNzk4OTI0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjgwNzMxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCBzcGVha2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKk5ldHdvcmsgSW50ZXJmYWNlIEV2ZW50IEhhbmRsaW5nIC0gQSBRdWljayBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBuZXR3b3JrIGludGVyZmFjZSBldmVudHMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbi4gSSBrbm93IHRoYXQgYG5kaXNjX3NlbmRfdW5zb2xfbmFgIGdldHMgdHJpZ2dlcmVkIHdoZW4gY2VydGFpbiBuZXR3b3JrIGRldmljZSBldmVudHMgb2NjdXIuIFRoYXQncyBmYWlybHkgY2xlYXIuIEJ1dCB0aGVuIHRoZSBxdWVzdGlvbiBhcmlzZXM6IFdoYXQgYWJvdXQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgPyBEb2VzIHRoYXQgbWV0aG9kIGdldCBjYWxsZWQgb24gdGhvc2Ugc2FtZSBldmVudHM/IEFyZSB0aGV5IGNhbGxlZCBhdCBhbGwsIG9yIGFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZT8gRG9lcyBvbmUgdHJpZ2dlciB0aGUgb3RoZXI/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zLiBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGV2ZW50IGhhbmRsaW5nIHdvcmtmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY4OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjI5OjI2Ljg3ODg3NjA1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MTkxNDM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRyY29uZl9wcmVmaXhfcmN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MTUzPXZvaWQgYWRkcmNvbmZfYWRkX2xpbmtsb2NhbChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTUtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoxNTY6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0yODI9c3RhdGljIGlubGluZSBib29sIGlwdjZfaXNfbWxkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBpbnQgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDMtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozMDQ6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDUtXFx0XFx0XFx0IHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pO1xcbi0tXFxubmV0LzZsb3dwYW4vbmRpc2MuYz0xODg9c3RhdGljIHZvaWQgbG93cGFuX25kaXNjX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0LzZsb3dwYW4vbmRpc2MuYy0yMDMtXFx0ICAgICFhZGRyY29uZl9pZmlkXzgwMjE1NF82bG93cGFuKGFkZHItXFx1MDAzZXM2X2FkZHIgKyA4LCBkZXYpKSB7XFxubmV0LzZsb3dwYW4vbmRpc2MuYzoyMDQ6XFx0XFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXFxubmV0LzZsb3dwYW4vbmRpc2MuYy0yMDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgYWRkciwgYWRkcl90eXBlLCBhZGRyX2ZsYWdzLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0xMzY5PXN0YXRpYyBpbnQgaXB2Nl9jcmVhdGVfdGVtcGFkZHIoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwLCBib29sIGJsb2NrKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0xNDgzLVxcdGNmZy5pZmFfZmxhZ3MgPSBJRkFfRl9URU1QT1JBUlk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoxNDg0OlxcdC8qIHNldCBpbiBhZGRyY29uZl9wcmVmaXhfcmN2KCkgKi9cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTE0ODUtXFx0aWYgKGlmcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkFfRl9PUFRJTUlTVElDKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNjg5PXN0YXRpYyBib29sIGlzX2FkZHJfbW9kZV9nZW5lcmF0ZV9zdGFibGUoc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5NC1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI2OTU6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5Ni1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5NS19XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk2OkVYUE9SVF9TWU1CT0xfR1BMKGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5Ny1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTg6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzk5LXtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0Mi1vazpcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NDM6XFx0XFx0ZXJyID0gYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihuZXQsIGRldiwgcGluZm8sIGluNl9kZXYsXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQ0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZhZGRyLCBhZGRyX3R5cGUsXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTEyMzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTU0Ni1cXHRcXHQgICAgIHAgPSBuZGlzY19uZXh0X29wdGlvbihwLCBuZG9wdHMubmRfb3B0c19waV9lbmQpKSB7XFxubmV0L2lwdjYvbmRpc2MuYzoxNTQ3OlxcdFxcdFxcdGFkZHJjb25mX3ByZWZpeF9yY3Yoc2tiLVxcdTAwM2VkZXYsICh1OCAqKXAsXFxubmV0L2lwdjYvbmRpc2MuYy0xNTQ4LVxcdFxcdFxcdFxcdFxcdCAgICAocC1cXHUwMDNlbmRfb3B0X2xlbikgXFx1MDAzY1xcdTAwM2MgMyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MjkuNDcwNzk3Njk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNTQ1OTUxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFByb21pc2luZyBJUHY2IE5ldHdvcmsgUGFja2V0IEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLiBUaGF0J3MgaWRlYWwuIEl0J3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCB3aGljaCBpcyBpdHNlbGYgdHJpZ2dlcmVkIGJ5IGluY29taW5nIHJvdXRlciBhZHZlcnRpc2VtZW50cy4gTWVhbmluZywgaXQncyByZWFjdGluZyBkaXJlY3RseSB0byBuZXR3b3JrIHBhY2tldHMg4oCTIHRoYXQncyB0aGUga2luZCBvZiBlbnRyeSBwb2ludCBJIHdhbnQgdG8gZXhhbWluZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB3b3J0aCBkaWdnaW5nIGludG8uIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgaXB2Nl9zb2NrX2FjX2pvaW5gLCBgaXB2Nl9zb2NrX2FjX2Ryb3BgLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGBpbmV0Nl9uZXRjb25mX2R1bXBfZGV2Y29uZmAsIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCAod2hpY2ggd2UgYWxyZWFkeSBrbm93IGlzIGludGVyZXN0aW5nKSwgYG5kaXNjX3JlY3ZfbnNgLCBgbmRpc2NfcmVjdl9uYWAsIGFuZCBgbmRpc2NfcmVjdl9yc2AuIFllcCwgYWxsIG9mIHRoZXNlIGxvb2sgbGlrZSBleGNlbGxlbnQgdGFyZ2V0cy4gVGhleSdyZSBhbGwgaGFuZGxpbmcgb3IgcmVhY3RpbmcgdG8gbmV0d29yay1sZXZlbCBldmVudHMsIGdpdmluZyBtZSBhIHNvbGlkIGJhc2lzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBqdXN0IHZlcmlmeSB0aGUgcHJlcmVxdWlzaXRlcy4gSSdtIGFzc3VtaW5nIElQdjYgaXMgZW5hYmxlZCBieSBgQ09ORklHX0lQVjZgLCBzbyBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhhdCB0byBtYWtlIHN1cmUgSSBhbSB3b3JraW5nIHdpdGggYSBjb3JyZWN0bHkgY29uZmlndXJlZCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5MjQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MzUuNjI1Mzk2NzA1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODAyMDg3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6Mjk6MzguNDI3NDg5MjgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDk4OTYxOTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBpbjZfZGV2X2dldGAgVXNhZ2Ugd2l0aGluIHRoZSBJUHY2IFN0YWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIGluY29ycG9yYXRlIGBJUFY2YCBpbnRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBjb3JlIG9mIHRoaXMgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgaW42X2Rldl9nZXRgLCB3aGljaCBpcyBhIGZ1bmRhbWVudGFsIElQdjYgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgcGFydGljdWxhcmx5IHdoZXJlIGBpbjZfZGV2X2dldGAgaXMgY2FsbGVkLlxuXG5NeSBpbnZlc3RpZ2F0aW9uIGhhcyBjb25maXJtZWQgdGhhdCBgaW42X2Rldl9nZXRgIGlzIGNhbGxlZCBkaXJlY3RseSBpbiBtdWx0aXBsZSBpbXBvcnRhbnQgZnVuY3Rpb25zLiBUaGVzZSBpbmNsdWRlIGBpcHY2X3NvY2tfYWNfam9pbmAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBqb2luaW5nIGFueWNhc3Qgc29ja2V0cywgYGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmZgIHdoaWNoIGRlYWxzIHdpdGggbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAgdGhhdCBpcyB1c2VkIHRvIHByb2Nlc3MgcHJlZml4IGluZm9ybWF0aW9uLiBUaGVzZSBhcmUgYWxsIGdvb2QgdGFyZ2V0cyB0byB0ZXN0LiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55IHJlbGV2YW50IHVzZXMgb2YgYGluNl9kZXZfZ2V0YC4gYG5kaXNjX3JlY3ZfbnNgIGluIHRoZSBuZWlnaGJvciBkaXNjb3ZlcnkgY29kZSBhbHNvIHVzZXMgaXQgZGlyZWN0bHkuXG5cbkFkZGl0aW9uYWxseSwgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGBfX2luNl9kZXZfZ2V0YCBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaW5zdGFuY2VzIG9mIHRoaXMgaW4gdGhlIGNvZGUuIEkgYW0gdGhpbmtpbmcgb2YgYGFkZHJjb25mX25vdGlmeWAgYW5kIGBhZGRyY29uZl9pZmRvd25gIGFzIHdlbGwuIEluIGFkZGl0aW9uLCBgaXB2Nl9kZXZfbWNfZGVjYCwgYGlwdjZfZGV2X21jX2luY2AsIGBfX2lwdjZfZGV2X21jX2luY2AsIGBpZ21wNl9ldmVudF9xdWVyeWAsIGBpZ21wNl9ldmVudF9yZXBvcnRgIGFuZCBgbWxkX3NlbmRwYWNrYCBhbGwgdXNlcyBgX19pbjZfZGV2X2dldGAuXG5cblNvLCB0byBiZSB2ZXJ5IHRob3JvdWdoLCBJIHdpbGwgYWRkIGBpcHY2X3NvY2tfYWNfam9pbmAsIGBuZGlzY19yZWN2X25zYCwgYGluZXQ2X25ldGNvbmZfZ2V0X2RldmNvbmZgLCBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBpcHY2X2Rldl9tY19kZWNgIGFuZCBgX19pcHY2X2Rldl9tY19pbmNgIHRvIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QgdG8gbWFrZSBzdXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYXJlIGZ1bGx5IGFzc2Vzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTkzNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MzA6MDYuOTI2NDU1Mzc3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM3NjY0MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfZGV2X21jX2luY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9hZGRyY29uZi5oPTI1OT1ib29sIGluZXQ2X21jX2NoZWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGluNl9hZGRyICptY19hZGRyLFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNjEtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoyNjI6aW50IGlwdjZfZGV2X21jX2luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMjYzLWludCBfX2lwdjZfZGV2X21jX2RlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjMzPXN0YXRpYyB2b2lkIGJyX2lwNl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMzctXFx0aXB2Nl9hZGRyX3NldChcXHUwMDI2YWRkciwgaHRvbmwoMHhmZjAyMDAwMCksIDAsIDAsIGh0b25sKDB4NmEpKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQyMzg6XFx0aXB2Nl9kZXZfbWNfaW5jKGJyLVxcdTAwM2VkZXYsIFxcdTAwMjZhZGRyKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMzktfVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNzc9c3RhdGljIHN0cnVjdCBpbmV0Nl9kZXYgKmlwdjZfYWRkX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00NzEtXFx0XFx0LyogSm9pbiBpbnRlcmZhY2UtbG9jYWwgYWxsLW5vZGUgbXVsdGljYXN0IGdyb3VwICovXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo0NzI6XFx0XFx0aXB2Nl9kZXZfbWNfaW5jKGRldiwgXFx1MDAyNmluNmFkZHJfaW50ZXJmYWNlbG9jYWxfYWxsbm9kZXMpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDczLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDc0LVxcdFxcdC8qIEpvaW4gYWxsLW5vZGUgbXVsdGljYXN0IGdyb3VwICovXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo0NzU6XFx0XFx0aXB2Nl9kZXZfbWNfaW5jKGRldiwgXFx1MDAyNmluNmFkZHJfbGlua2xvY2FsX2FsbG5vZGVzKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ3Ni1cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDc4LVxcdFxcdGlmIChuZGV2LVxcdTAwM2VjbmYuZm9yd2FyZGluZyBcXHUwMDI2XFx1MDAyNiAoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9NVUxUSUNBU1QpKVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDc5OlxcdFxcdFxcdGlwdjZfZGV2X21jX2luYyhkZXYsIFxcdTAwMjZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ4MC1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTgwNj1zdGF0aWMgdm9pZCBkZXZfZm9yd2FyZF9jaGFuZ2Uoc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtODE4LVxcdFxcdGlmIChpZGV2LVxcdTAwM2VjbmYuZm9yd2FyZGluZykge1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6ODE5OlxcdFxcdFxcdGlwdjZfZGV2X21jX2luYyhkZXYsIFxcdTAwMjZpbjZhZGRyX2xpbmtsb2NhbF9hbGxyb3V0ZXJzKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjgyMDpcXHRcXHRcXHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcXHUwMDI2aW42YWRkcl9pbnRlcmZhY2Vsb2NhbF9hbGxyb3V0ZXJzKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjgyMTpcXHRcXHRcXHRpcHY2X2Rldl9tY19pbmMoZGV2LCBcXHUwMDI2aW42YWRkcl9zaXRlbG9jYWxfYWxscm91dGVycyk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy04MjItXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjI1ND12b2lkIGFkZHJjb25mX2pvaW5fc29saWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjI2MS1cXHRhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KGFkZHIsIFxcdTAwMjZtYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMjYyOlxcdGlwdjZfZGV2X21jX2luYyhkZXYsIFxcdTAwMjZtYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMjYzLX1cXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9OTE9c3RhdGljIGludCBpcDZfbWNfbGVhdmVfc3JjKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwdjZfbWNfc29ja2xpc3QgKmltbCxcXG5uZXQvaXB2Ni9tY2FzdC5jLTkyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KTtcXG5uZXQvaXB2Ni9tY2FzdC5jOjkzOnN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9tY2FzdC5jLTk0LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCB1bnNpZ25lZCBpbnQgbW9kZSk7XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTE5OD1zdGF0aWMgaW50IF9faXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMjMzLVxcdC8qIG5vdyBhZGQvaW5jcmVhc2UgdGhlIGdyb3VwIG1lbWJlcnNoaXAgb24gdGhlIGRldmljZSAqL1xcbm5ldC9pcHY2L21jYXN0LmM6MjM0OlxcdGVyciA9IF9faXB2Nl9kZXZfbWNfaW5jKGRldiwgYWRkciwgbW9kZSk7XFxubmV0L2lwdjYvbWNhc3QuYy0yMzUtXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTg5ND1zdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtOTMyLSAqL1xcbm5ldC9pcHY2L21jYXN0LmM6OTMzOnN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9tY2FzdC5jLTkzNC1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTk3OS1cXG5uZXQvaXB2Ni9tY2FzdC5jOjk4MDppbnQgaXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9tY2FzdC5jLTk4MS17XFxubmV0L2lwdjYvbWNhc3QuYzo5ODI6XFx0cmV0dXJuIF9faXB2Nl9kZXZfbWNfaW5jKGRldiwgYWRkciwgTUNBU1RfRVhDTFVERSk7XFxubmV0L2lwdjYvbWNhc3QuYy05ODMtfVxcbm5ldC9pcHY2L21jYXN0LmM6OTg0OkVYUE9SVF9TWU1CT0woaXB2Nl9kZXZfbWNfaW5jKTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTk4NS1cXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MzczPXN0YXRpYyBpbnQgcG5kaXNjX2NvbnN0cnVjdG9yKHN0cnVjdCBwbmVpZ2hfZW50cnkgKm4pXFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jLTM4Mi1cXHRhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KGFkZHIsIFxcdTAwMjZtYWRkcik7XFxubmV0L2lwdjYvbmRpc2MuYzozODM6XFx0cmV0dXJuIGlwdjZfZGV2X21jX2luYyhkZXYsIFxcdTAwMjZtYWRkcik7XFxubmV0L2lwdjYvbmRpc2MuYy0zODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDozMDowOC42NjQxMzA3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ0NDM0NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gSVB2NiBNdWx0aWNhc3QgSm9pbiBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBpbnRlcm5hbHMgb2YgSVB2NiBtdWx0aWNhc3Qgam9pbnMsIHNwZWNpZmljYWxseSwgdGhlIGBfX2lwdjZfc29ja19tY19qb2luYCBmdW5jdGlvbi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhhdCBmdW5jdGlvbiBjYWxscyBgX19pcHY2X2Rldl9tY19pbmNgLCBhbmQgdGhhdCwgaW4gdHVybiwgY2FsbHMgYGluNl9kZXZfZ2V0YC4gVGhhdCB3aG9sZSBmbG93IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLiBgaXB2Nl9zb2NrX21jX2pvaW5gIGl0c2VsZiBsb29rcyBsaWtlIGEgbGlrZWx5IHRhcmdldCB0byBleHBsb3JlIGZ1cnRoZXIuIEkgdGhpbmsgSSdsbCBmb2N1cyBvbiBgaXB2Nl9zb2NrX21jX2pvaW5gLiBMZXQncyBjaGVjayBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1MzksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDozMDoxMS44MDg1Njg0NDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ1OTE0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zb2NrX21jX2pvaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM9MTc9aW50IHZ4bGFuX2lnbXBfam9pbihzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgdW5pb24gdnhsYW5fYWRkciAqcmlwLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNDEtXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzo0MjpcXHRcXHRyZXQgPSBpcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgXFx1MDAyNmlwLVxcdTAwM2VzaW42LnNpbjZfYWRkcik7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNDMtXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MjQ0PXN0YXRpYyBpbmxpbmUgYm9vbCBpcHY2X21jX21heV9wdWxsKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTI1Mi1cXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI1MzppbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTI1NC1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oPTEyMjc9dm9pZCBpcHY2X3N5c2N0bF91bnJlZ2lzdGVyKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMjktXFxuaW5jbHVkZS9uZXQvaXB2Ni5oOjEyMzA6aW50IGlwdjZfc29ja19tY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMzEtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG5pbmNsdWRlL25ldC9pcHY2Lmg6MTIzMjppbnQgaXB2Nl9zb2NrX21jX2pvaW5fc3NtKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMzMtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHVuc2lnbmVkIGludCBtb2RlKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzAxNj1zdGF0aWMgaW50IGlwdjZfbWNfY29uZmlnKHN0cnVjdCBzb2NrICpzaywgYm9vbCBqb2luLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMDI0LVxcdGlmIChqb2luKVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MzAyNTpcXHRcXHRyZXQgPSBpcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkcik7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMDI2LVxcdGVsc2VcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xNDY9c3RhdGljIGludCBkb19pcHY2X21jYXN0X2dyb3VwX3NvdXJjZShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTE3MS1cXHRcXHRwc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopXFx1MDAyNmdyZXFzLmdzcl9ncm91cDtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTcyOlxcdFxcdHJldHYgPSBpcHY2X3NvY2tfbWNfam9pbl9zc20oc2ssIGdyZXFzLmdzcl9pbnRlcmZhY2UsXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTE3My1cXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwc2luNi1cXHUwMDNlc2luNl9hZGRyLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTI2Mj1zdGF0aWMgaW50IGlwdjZfbWNhc3Rfam9pbl9sZWF2ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3Ni1cXHRpZiAob3B0bmFtZSA9PSBNQ0FTVF9KT0lOX0dST1VQKVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyNzc6XFx0XFx0cmV0dXJuIGlwdjZfc29ja19tY19qb2luKHNrLCBncmVxLmdyX2ludGVyZmFjZSxcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMjc4LVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cHNpbjYtXFx1MDAzZXNpbjZfYWRkcik7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MjgyPXN0YXRpYyBpbnQgY29tcGF0X2lwdjZfbWNhc3Rfam9pbl9sZWF2ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI5Ni1cXHRpZiAob3B0bmFtZSA9PSBNQ0FTVF9KT0lOX0dST1VQKVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyOTc6XFx0XFx0cmV0dXJuIGlwdjZfc29ja19tY19qb2luKHNrLCBncjMyLmdyX2ludGVyZmFjZSxcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMjk4LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZwc2luNi1cXHUwMDNlc2luNl9hZGRyKTtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc0LVxcdFxcdGlmIChvcHRuYW1lID09IElQVjZfQUREX01FTUJFUlNISVApXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjg3NTpcXHRcXHRcXHRyZXR2ID0gaXB2Nl9zb2NrX21jX2pvaW4oc2ssIG1yZXEuaXB2Nm1yX2lmaW5kZXgsIFxcdTAwMjZtcmVxLmlwdjZtcl9tdWx0aWFkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04NzYtXFx0XFx0ZWxzZVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0xNzI9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppcDZfbWNfZmluZF9kZXYoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0xOTctICovXFxubmV0L2lwdjYvbWNhc3QuYzoxOTg6c3RhdGljIGludCBfX2lwdjZfc29ja19tY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxubmV0L2lwdjYvbWNhc3QuYy0xOTktXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTI0OC1cXG5uZXQvaXB2Ni9tY2FzdC5jOjI0OTppbnQgaXB2Nl9zb2NrX21jX2pvaW4oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbm5ldC9pcHY2L21jYXN0LmMtMjUwLXtcXG5uZXQvaXB2Ni9tY2FzdC5jOjI1MTpcXHRyZXR1cm4gX19pcHY2X3NvY2tfbWNfam9pbihzaywgaWZpbmRleCwgYWRkciwgTUNBU1RfRVhDTFVERSk7XFxubmV0L2lwdjYvbWNhc3QuYy0yNTItfVxcbm5ldC9pcHY2L21jYXN0LmM6MjUzOkVYUE9SVF9TWU1CT0woaXB2Nl9zb2NrX21jX2pvaW4pO1xcbm5ldC9pcHY2L21jYXN0LmMtMjU0LVxcbm5ldC9pcHY2L21jYXN0LmM6MjU1OmludCBpcHY2X3NvY2tfbWNfam9pbl9zc20oc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG5uZXQvaXB2Ni9tY2FzdC5jLTI1Ni1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdW5zaWduZWQgaW50IG1vZGUpXFxubmV0L2lwdjYvbWNhc3QuYy0yNTcte1xcbm5ldC9pcHY2L21jYXN0LmM6MjU4OlxcdHJldHVybiBfX2lwdjZfc29ja19tY19qb2luKHNrLCBpZmluZGV4LCBhZGRyLCBtb2RlKTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTI1OS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE0MDM9c3RhdGljIGludCBqb2luX21jYXN0X2dyb3VwNihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbjZfYWRkciAqYWRkcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTQxMS1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTQxMjpcXHRyZXQgPSBpcHY2X3NvY2tfbWNfam9pbihzaywgZGV2LVxcdTAwM2VpZmluZGV4LCBhZGRyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE0MTMtXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC90aXBjL3VkcF9tZWRpYS5jPTQwND1zdGF0aWMgaW50IGVuYWJsZV9tY2FzdChzdHJ1Y3QgdWRwX2JlYXJlciAqdWIsIHN0cnVjdCB1ZHBfbWVkaWFfYWRkciAqcmVtb3RlKVxcbi0tXFxubmV0L3RpcGMvdWRwX21lZGlhLmMtNDE2LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3RpcGMvdWRwX21lZGlhLmM6NDE3OlxcdFxcdGVyciA9IGlwdjZfc29ja19tY19qb2luKHNrLCB1Yi1cXHUwMDNlaWZpbmRleCwgXFx1MDAyNnJlbW90ZS1cXHUwMDNlaXB2Nik7XFxubmV0L3RpcGMvdWRwX21lZGlhLmMtNDE4LVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDIwOjMwOjEzLjQ2MzE2ODY0NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY5MzI1MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZvY3VzIExpc3QgZm9yIElQdjYgU29ja2V0IE11bHRpY2FzdCBPcGVyYXRpb25zKipcblxuT2theSwgYWZ0ZXIgY29uc2lkZXJpbmcgdGhlIGluaXRpYWwgb3B0aW9ucywgYGlwdjZfc29ja19tY19qb2luYCBhbmQgYGlwdjZfc29ja19tY19kcm9wYCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgdGFyZ2V0cyBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEknbGwgYWRkIHRoZW0gdG8gdGhlIGxpc3QsIGNsZWFybHkuXG5cblNvLCB0byBiZSBwcmVjaXNlLCBteSBjdXJyZW50IGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczpcblxuKiAgIGBpcHY2X3NvY2tfYWNfam9pbmBcbiogICBgaXB2Nl9zb2NrX2FjX2Ryb3BgXG4qICAgYGlwdjZfc29ja19tY19qb2luYFxuKiAgIGBpcHY2X3NvY2tfbWNfZHJvcGBcbiogICBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmBcbiogICBgYWRkcmNvbmZfcHJlZml4X3JjdmBcbiogICBgbmRpc2NfcmVjdl9uc2BcblxuSGFuZyBvbiBhIG1vbWVudC4uLiBpcyB0aGUgZnVuY3Rpb24gbmFtZSBmb3IgZHJvcHBpbmcgbXVsdGljYXN0IGNvcnJlY3RseSBzdGF0ZWQgYXMgYGlwdjZfc29ja19tY19kcm9wYD8gQmV0dGVyIGRvdWJsZSBjaGVjayB0aGF0IHRvIGNvbmZpcm0uIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZGV0YWlscyBhcmUgcHJlY2lzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2MjAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MzA6MTcuMzMyNDk2MDk3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI4Njg5NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc29ja19tY19kcm9wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jPTUwPWludCB2eGxhbl9pZ21wX2xlYXZlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCB1bmlvbiB2eGxhbl9hZGRyICpyaXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy03NC1cXHRcXHRsb2NrX3NvY2soc2spO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jOjc1OlxcdFxcdHJldCA9IGlwdjZfc29ja19tY19kcm9wKHNrLCBpZmluZGV4LCBcXHUwMDI2aXAtXFx1MDAzZXNpbjYuc2luNl9hZGRyKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy03Ni1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0yNTM9aW50IGlwdjZfc29ja19tY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0yNTQtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjI1NTppbnQgaXB2Nl9zb2NrX21jX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBpbnQgaWZpbmRleCxcXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oLTI1Ni1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpO1xcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Ni5oPTEyMzI9aW50IGlwdjZfc29ja19tY19qb2luX3NzbShzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxcbmluY2x1ZGUvbmV0L2lwdjYuaC0xMjMzLVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCB1bnNpZ25lZCBpbnQgbW9kZSk7XFxuaW5jbHVkZS9uZXQvaXB2Ni5oOjEyMzQ6aW50IGlwdjZfc29ja19tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsXFxuaW5jbHVkZS9uZXQvaXB2Ni5oLTEyMzUtXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MzAxNj1zdGF0aWMgaW50IGlwdjZfbWNfY29uZmlnKHN0cnVjdCBzb2NrICpzaywgYm9vbCBqb2luLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zMDI2LVxcdGVsc2VcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjMwMjc6XFx0XFx0cmV0ID0gaXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIGlmaW5kZXgsIGFkZHIpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzAyOC1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTI2Mj1zdGF0aWMgaW50IGlwdjZfbWNhc3Rfam9pbl9sZWF2ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTI3OC1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnBzaW42LVxcdTAwM2VzaW42X2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyNzk6XFx0cmV0dXJuIGlwdjZfc29ja19tY19kcm9wKHNrLCBncmVxLmdyX2ludGVyZmFjZSwgXFx1MDAyNnBzaW42LVxcdTAwM2VzaW42X2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0yODAtfVxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTI4Mj1zdGF0aWMgaW50IGNvbXBhdF9pcHY2X21jYXN0X2pvaW5fbGVhdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0yOTgtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnBzaW42LVxcdTAwM2VzaW42X2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoyOTk6XFx0cmV0dXJuIGlwdjZfc29ja19tY19kcm9wKHNrLCBncjMyLmdyX2ludGVyZmFjZSwgXFx1MDAyNnBzaW42LVxcdTAwM2VzaW42X2FkZHIpO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zMDAtfVxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy04NzYtXFx0XFx0ZWxzZVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo4Nzc6XFx0XFx0XFx0cmV0diA9IGlwdjZfc29ja19tY19kcm9wKHNrLCBtcmVxLmlwdjZtcl9pZmluZGV4LCBcXHUwMDI2bXJlcS5pcHY2bXJfbXVsdGlhZGRyKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtODc4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz0yNTU9aW50IGlwdjZfc29ja19tY19qb2luX3NzbShzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LFxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0yNjMtICovXFxubmV0L2lwdjYvbWNhc3QuYzoyNjQ6c3RhdGljIHZvaWQgX19pcHY2X3NvY2tfbWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3QpXFxubmV0L2lwdjYvbWNhc3QuYy0yNjUte1xcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0yODgtXFxubmV0L2lwdjYvbWNhc3QuYzoyODk6aW50IGlwdjZfc29ja19tY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcXG5uZXQvaXB2Ni9tY2FzdC5jLTI5MC17XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTMwMy1cXHRcXHRcXHQqbG5rID0gbWNfbHN0LVxcdTAwM2VuZXh0O1xcbm5ldC9pcHY2L21jYXN0LmM6MzA0OlxcdFxcdFxcdF9faXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIG1jX2xzdCk7XFxubmV0L2lwdjYvbWNhc3QuYy0zMDUtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTMxMC19XFxubmV0L2lwdjYvbWNhc3QuYzozMTE6RVhQT1JUX1NZTUJPTChpcHY2X3NvY2tfbWNfZHJvcCk7XFxubmV0L2lwdjYvbWNhc3QuYy0zMTItXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTMzMD12b2lkIF9faXB2Nl9zb2NrX21jX2Nsb3NlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtMzM2LVxcdFxcdG5wLVxcdTAwM2VpcHY2X21jX2xpc3QgPSBtY19sc3QtXFx1MDAzZW5leHQ7XFxubmV0L2lwdjYvbWNhc3QuYzozMzc6XFx0XFx0X19pcHY2X3NvY2tfbWNfZHJvcChzaywgbWNfbHN0KTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTMzOC1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTM1Mz1pbnQgaXA2X21jX3NvdXJjZShpbnQgYWRkLCBpbnQgb21vZGUsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmMtNDgyLVxcdGlmIChsZWF2ZWdyb3VwKVxcbm5ldC9pcHY2L21jYXN0LmM6NDgzOlxcdFxcdGVyciA9IGlwdjZfc29ja19tY19kcm9wKHNrLCBwZ3NyLVxcdTAwM2Vnc3JfaW50ZXJmYWNlLCBncm91cCk7XFxubmV0L2lwdjYvbWNhc3QuYy00ODQtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9NDg3PWludCBpcDZfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTU4MC1cXHRpZiAobGVhdmVncm91cClcXG5uZXQvaXB2Ni9tY2FzdC5jOjU4MTpcXHRcXHRlcnIgPSBpcHY2X3NvY2tfbWNfZHJvcChzaywgZ3NmLVxcdTAwM2VnZl9pbnRlcmZhY2UsIGdyb3VwKTtcXG5uZXQvaXB2Ni9tY2FzdC5jLTU4Mi1cXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQyMDozMDoxOC45NjExOTIxODZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MDg3NTUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHllcywgYGlwdjZfc29ja19tY19kcm9wYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24uIExldCBtZSBydW4gdGhyb3VnaCB0aGlzIGxpc3Qgb2YgZnVuY3Rpb25zIGFnYWluLiBXZSBoYXZlOiBgaXB2Nl9zb2NrX2FjX2pvaW5gLCBgaXB2Nl9zb2NrX2FjX2Ryb3BgLCBgaXB2Nl9zb2NrX21jX2pvaW5gLCBgaXB2Nl9zb2NrX21jX2Ryb3BgLCBgaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZmAsIGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYW5kIGBuZGlzY19yZWN2X25zYC4gUmlnaHQuIFRoZSBjb21tb24gdGhyZWFkIGhlcmUgaXMgdGhhdCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIG9yIHRyaWdnZXJlZCBieSBuZXR3b3JrIHBhY2tldHMsIGFuZCBjcnVjaWFsbHksIHRoZXkgYWxsIGNhbGwgYGluNl9kZXZfZ2V0YCBvciBpdHMgdmFyaWFudCBgX19pbjZfZGV2X2dldGAuIEFuZCB0aGF0LCBhcyBJIHJlY2FsbCwgaXMgZXhhY3RseSB0aGUgZnVuY3Rpb24gdGhhdCB0aGUgcGF0Y2ggdGFyZ2V0cywgc3BlY2lmaWNhbGx5IHRvIGZpeCB0aGF0IHBlc2t5IHJlZmNvdW50IGJ1Zy4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYGluNl9kZXZfZ2V0YCBhZnRlciBhbGwuIEFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZmxhZyBpcywgYXMgZXhwZWN0ZWQsIGBJUFY2YC4gR2l2ZW4gYWxsIHRoaXMsIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHdpbGwgY29tbWl0IG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTYyNiwiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMjA6MzA6MjQuNjAyMDcxMjk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2MzYyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NvY2tfYWNfam9pblwiLFxuICAgIFwiaXB2Nl9zb2NrX2FjX2Ryb3BcIixcbiAgICBcImlwdjZfc29ja19tY19qb2luXCIsXG4gICAgXCJpcHY2X3NvY2tfbWNfZHJvcFwiLFxuICAgIFwiaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZlwiLFxuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwibmRpc2NfcmVjdl9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpbiB0aGUgY29yZSBJUHY2IGZ1bmN0aW9uIGBpbjZfZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNpbmNlIGBpbjZfZGV2X2dldGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCB3ZSBmb2N1cyBmdXp6aW5nIG9uIHNldmVyYWwga2V5IElQdjYgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhbmQgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAodmlhIHNldHNvY2tvcHQgb3IgbmV0bGluaykgb3IgbmV0d29yayBwYWNrZXRzICh2aWEgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NvY2tfYWNfam9pblwiLFxuICAgIFwiaXB2Nl9zb2NrX2FjX2Ryb3BcIixcbiAgICBcImlwdjZfc29ja19tY19qb2luXCIsXG4gICAgXCJpcHY2X3NvY2tfbWNfZHJvcFwiLFxuICAgIFwiaW5ldDZfbmV0Y29uZl9nZXRfZGV2Y29uZlwiLFxuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwibmRpc2NfcmVjdl9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpbiB0aGUgY29yZSBJUHY2IGZ1bmN0aW9uIGBpbjZfZGV2X2dldGAgYnkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb2AuIFNpbmNlIGBpbjZfZGV2X2dldGAgaXMgYW4gaW5saW5lIGZ1bmN0aW9uLCB3ZSBmb2N1cyBmdXp6aW5nIG9uIHNldmVyYWwga2V5IElQdjYgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCBhbmQgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAodmlhIHNldHNvY2tvcHQgb3IgbmV0bGluaykgb3IgbmV0d29yayBwYWNrZXRzICh2aWEgbmVpZ2hib3IgZGlzY292ZXJ5IGFuZCByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowskllj[1] Phase: Succeeded StartedAt: 2026-08-01 20:30:47 +0000 UTC FinishedAt: 2026-08-01 20:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 20:30:47 +0000 UTC FinishedAt: 2026-08-01 20:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2] Phase: Succeeded StartedAt: 2026-08-01 20:30:47 +0000 UTC FinishedAt: 2026-08-02 00:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:30:47 +0000 UTC FinishedAt: 2026-08-02 00:22:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:30:47 +0000 UTC FinishedAt: 2026-08-01 20:30:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:30:47 +0000 UTC FinishedAt: 2026-08-01 20:30:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-workflowskllj/series-workflowskllj-convert-artifact-855859852/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:30:57 +0000 UTC FinishedAt: 2026-08-01 20:55:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:30:57 +0000 UTC FinishedAt: 2026-08-01 20:55:59 +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:*5727e1a6-e770-4ae5-bd2c-f21eca064ca6,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-workflowskllj/series-workflowskllj-convert-artifact-855859852/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": "751af9fe-efd4-43db-8f5e-995b9c7f383f", "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-workflowskllj/series-workflowskllj-build-action-1235364026/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:30:57 +0000 UTC FinishedAt: 2026-08-01 20:55:49 +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:*5727e1a6-e770-4ae5-bd2c-f21eca064ca6,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-workflowskllj/series-workflowskllj-convert-artifact-855859852/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": "751af9fe-efd4-43db-8f5e-995b9c7f383f", "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-workflowskllj/series-workflowskllj-build-action-1235364026/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:55:59 +0000 UTC FinishedAt: 2026-08-01 20:55:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:55:59 +0000 UTC FinishedAt: 2026-08-01 20:55:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:55:59 +0000 UTC FinishedAt: 2026-08-01 20:56:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:55:59 +0000 UTC FinishedAt: 2026-08-01 20:56:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-workflowskllj/series-workflowskllj-convert-artifact-2567910091/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:56:09 +0000 UTC FinishedAt: 2026-08-01 20:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:56:09 +0000 UTC FinishedAt: 2026-08-01 20:57:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*751af9fe-efd4-43db-8f5e-995b9c7f383f,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-workflowskllj/series-workflowskllj-build-action-1235364026/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-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:58:06 +0000 UTC FinishedAt: 2026-08-01 20:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:58:06 +0000 UTC FinishedAt: 2026-08-01 20:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:58:06 +0000 UTC FinishedAt: 2026-08-01 21:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:58:06 +0000 UTC FinishedAt: 2026-08-01 21:18:39 +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:*5727e1a6-e770-4ae5-bd2c-f21eca064ca6,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-workflowskllj/series-workflowskllj-convert-artifact-2567910091/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": "26d397f1-37d9-47ae-a33f-7a64fe90f0ed", "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-workflowskllj/series-workflowskllj-build-action-1150113647/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 20:58:06 +0000 UTC FinishedAt: 2026-08-01 21:18:14 +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:*5727e1a6-e770-4ae5-bd2c-f21eca064ca6,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-workflowskllj/series-workflowskllj-convert-artifact-2567910091/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": "26d397f1-37d9-47ae-a33f-7a64fe90f0ed", "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-workflowskllj/series-workflowskllj-build-action-1150113647/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:18:39 +0000 UTC FinishedAt: 2026-08-01 21:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:18:39 +0000 UTC FinishedAt: 2026-08-01 21:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:18:39 +0000 UTC FinishedAt: 2026-08-01 21:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:18:39 +0000 UTC FinishedAt: 2026-08-01 21:20:35 +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:*26d397f1-37d9-47ae-a33f-7a64fe90f0ed,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-workflowskllj/series-workflowskllj-build-action-1150113647/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-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:20:45 +0000 UTC FinishedAt: 2026-08-02 00:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:20:45 +0000 UTC FinishedAt: 2026-08-02 00:22:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"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:*751af9fe-efd4-43db-8f5e-995b9c7f383f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*26d397f1-37d9-47ae-a33f-7a64fe90f0ed,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-workflowskllj/series-workflowskllj-build-action-1235364026/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-workflowskllj/series-workflowskllj-build-action-1150113647/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:20:45 +0000 UTC FinishedAt: 2026-08-01 21:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:20:45 +0000 UTC FinishedAt: 2026-08-01 21:20:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"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-workflowskllj/series-workflowskllj-convert-artifact-1165455972/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:20:45 +0000 UTC FinishedAt: 2026-08-01 21:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:20:45 +0000 UTC FinishedAt: 2026-08-01 21:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:20:45 +0000 UTC FinishedAt: 2026-08-01 21:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:20:55 +0000 UTC FinishedAt: 2026-08-02 00:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowskllj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_sock_ac_join","ipv6_sock_ac_drop","ipv6_sock_mc_join","ipv6_sock_mc_drop","inet6_netconf_get_devconf","addrconf_prefix_rcv","ndisc_recv_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"1b617e37-20ba-4e89-a261-9b479dce08c3","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-01 21:20:55 +0000 UTC FinishedAt: 2026-08-02 00:22:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*751af9fe-efd4-43db-8f5e-995b9c7f383f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*26d397f1-37d9-47ae-a33f-7a64fe90f0ed,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-workflowskllj/series-workflowskllj-build-action-1235364026/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-workflowskllj/series-workflowskllj-build-action-1150113647/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-workflowskllj/series-workflowskllj-convert-artifact-1165455972/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,}