Name: series-workflownx6s2 Phase: Failed StartedAt: 2026-08-09 20:36:48 +0000 UTC FinishedAt: 2026-08-09 20:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflownx6s2[0] Phase: Succeeded StartedAt: 2026-08-09 20:36:48 +0000 UTC FinishedAt: 2026-08-09 20:39:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflownx6s2[0].run-triage Phase: Succeeded StartedAt: 2026-08-09 20:36:48 +0000 UTC FinishedAt: 2026-08-09 20:39:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBkcml2ZXJzIGZvciBYLVBvd2VycyBBQzIwMCBNRkQgYW5kIEFDeDAwIEV0aGVybmV0IFBIWXMsIHdoaWNoIHN0cmljdGx5IHJlcXVpcmUgZGV2aWNlIHRyZWUgbm9kZXMgKG9mX25vZGUpIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gU2luY2Ugc3l6a2FsbGVyIGRvZXMgbm90IGR5bmFtaWNhbGx5IGdlbmVyYXRlIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcywgYW5kIHRoZXNlIGRldmljZXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBkZWZhdWx0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VICYjMzk7dmlydCYjMzk7IG9yIHg4Nl82NCksIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBUaGUgbWlub3IgcmVmYWN0b3JpbmcgaW4gc3lzY29uLmMgaXMgb25seSByZWFjaGFibGUgdmlhIFNvQy1zcGVjaWZpYyBkcml2ZXJzIChFeHlub3MsIFN1bnhpLCBSZW5lc2FzKSB0aGF0IGFyZSBhbHNvIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjA6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkOTRhNWE5OWM1NWU5NTZhMmZmYTBiYTA1NzVhZmEwMDE0NmE1MGM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAyMDozODo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42MDk4MzFiMTVjODA2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWxcbkBAIC0wLDAgJiM0MzsxLDQ5IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBJQ1xuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjpcbiYjNDM7ICBUaGUgQUMyMDAgaXMgYSBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDIGNvbnRhaW5pbmcgYXVkaW8sIHZpZGVvLCBSVEMgYW5kXG4mIzQzOyAgRmFzdCBFdGhlcm5ldCBQSFkgZnVuY3Rpb25zLiBJdHMgY29udHJvbCByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIG92ZXIgSTJDLlxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgQUMyMDAgaW5wdXQgY2xvY2suIFdoZW4gdXNpbmcgdGhlIEV0aGVybmV0IFBIWSwgaXRzIGNvbmZpZ3VyZWQgcmF0ZSBtdXN0XG4mIzQzOyAgICAgIGJlIDI0IG9yIDI3IE1IeiwgbWF0Y2hpbmcgdGhlIHJhdGVzIGVuY29kZWQgYnkgdGhlIGRvY3VtZW50ZWQgRVBIWSBjbG9ja1xuJiM0MzsgICAgICBzZWxlY3Rvci5cbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gcmVnXG4mIzQzOyAgLSBjbG9ja3NcbiYjNDM7XG4mIzQzO2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBpMmMge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIG1peGVkLXNpZ25hbEAxMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgxMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG4mIzQzOy4uLlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWUwYzVlOTgwYzM5ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMjA3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcbiYjNDM7ICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4mIzQzOyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgY29udHJvbCByZWdpc3RlcnMgYXJlIHBhcnQgb2YgYW4gSTJDIE1GRCxcbiYjNDM7ICB3aGlsZSBBQzMwMCBjb250cm9sIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTZcbiYjNDM7ICBwbHVzIHRoZSBsaW5rIFBIWSBhZGRyZXNzLlxuJiM0MztcbiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLlxuJiM0MzsgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4mIzQzOyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4mIzQzO1xuJiM0MzsgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuJiM0MzsgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvXG4mIzQzOyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4mIzQzO1xuJiM0MztzZWxlY3Q6XG4mIzQzOyAgcHJvcGVydGllczpcbiYjNDM7ICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgIGVudW06XG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgcmVxdWlyZWQ6XG4mIzQzOyAgICAtIGNvbXBhdGlibGVcbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGVudW06XG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heGltdW06IDMxXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHouIFRoZSBBQzIwMCBpbnB1dCBjbG9ja1xuJiM0MzsgICAgICBiZWxvbmdzIHRvIHRoZSByZWZlcmVuY2VkIEFDMjAwIE1GRCBpbnN0ZWFkLlxuJiM0MztcbiYjNDM7ICB2Y2Mtc3VwcGx5OlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMVxuJiM0MzsgICAgICBvbiBBQzMwMC5cbiYjNDM7XG4mIzQzOyAgbnZtZW0tY2VsbHM6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nXG4mIzQzOyAgICAgIGNhbGlicmF0aW9uIGNvZGUsIGJpdHMgNyB0aHJvdWdoIDQgYXJlIHJlc2VydmVkLCBiaXQgOCBzZWxlY3RzIEFDMzAwXG4mIzQzOyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwXG4mIzQzOyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5XG4mIzQzOyAgICAgIHRoZSBsb3cgY2FsaWJyYXRpb24gYml0cyBvciBvbWl0IHRoZSBjZWxsIGFuZCB1c2UgaXRzIGludGVybmFsIGVGdXNlXG4mIzQzOyAgICAgIGNvcHkgaW5zdGVhZC5cbiYjNDM7XG4mIzQzOyAgbnZtZW0tY2VsbC1uYW1lczpcbiYjNDM7ICAgIGNvbnN0OiBjb25maWd1cmF0aW9uXG4mIzQzO1xuJiM0MzsgIHgtcG93ZXJzLGFjMjAwOlxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZVxuJiM0MzsgICAgZGVzY3JpcHRpb246IFJlZmVyZW5jZSB0byB0aGUgQUMyMDAgTUZEIGNvbnRhaW5pbmcgdGhpcyBFdGhlcm5ldCBQSFlcbiYjNDM7XG4mIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDpcbiYjNDM7ICAgIHR5cGU6IGJvb2xlYW5cbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lXG4mIzQzOyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXG4mIzQzO1xuJiM0MztwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOlxuJiM0MzsgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXG4mIzQzOyAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcbiYjNDM7ICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAtIGNvbXBhdGlibGVcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gdmNjLXN1cHBseVxuJiM0MztcbiYjNDM7ZGVwZW5kZW50UmVxdWlyZWQ6XG4mIzQzOyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXG4mIzQzOyAgbnZtZW0tY2VsbC1uYW1lczogWyBudm1lbS1jZWxscyBdXG4mIzQzO1xuJiM0MzthbGxPZjpcbiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjbG9ja3M6IGZhbHNlXG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHJlZzpcbiYjNDM7ICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7ICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSBjbG9ja3NcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6XG4mIzQzOyAgICAgICAgICBtYXhpbXVtOiA3XG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0gY2xvY2tzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcdTAwM2NcdTAwMjZhYzIwMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MztcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIG1kaW8ge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7XG4mIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAxIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMSB7XG4mIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7Li4uXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWdcbmluZGV4IDc2M2NlNmEzNDc4MmIuLjk1ZTNjNjI3NDJiYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9LY29uZmlnXG5AQCAtMjA1LDYgJiM0MzsyMDUsMTggQEAgY29uZmlnIE1GRF9BQzEwMFxuIFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcbiBcdCAgY29tcG9uZW50cyBsaWtlIGNvZGVjcyBvciBSVEMgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuXG4gXG4mIzQzO2NvbmZpZyBNRkRfQUMyMDBcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMFwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gSTJDXG4mIzQzO1x0ZGVwZW5kcyBvbiBPRlxuJiM0MztcdHNlbGVjdCBNRkRfU1lTQ09OXG4mIzQzO1x0c2VsZWN0IFJFR01BUF9JMkNcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQy4gVGhlIEFDMjAwXG4mIzQzO1x0ICBjb250YWlucyBhdWRpbywgdmlkZW8sIFJUQyBhbmQgRmFzdCBFdGhlcm5ldCBQSFkgZnVuY3Rpb25zIGFuZCBpc1xuJiM0MztcdCAgY28tcGFja2FnZWQgd2l0aCBzb21lIEFsbHdpbm5lciBINiBhbmQgSDYxNiBTb0NzLiBUaGlzIGRyaXZlciBwcm92aWRlc1xuJiM0MztcdCAgdGhlIHNoYXJlZCByZWdpc3RlciBhY2Nlc3MgdXNlZCBieSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkcml2ZXJzLlxuJiM0MztcbiBjb25maWcgTUZEX0FYUDIwWFxuIFx0dHJpc3RhdGVcbiBcdHNlbGVjdCBNRkRfQ09SRVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcbmluZGV4IGRkNGJiN2U3N2MzMzYuLjg5MGU3NmE5YWQwMGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcbkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSlcdCYjNDM7PSBkYTkwNTItc3BpLm9cbiBvYmotJChDT05GSUdfTUZEX0RBOTA1Ml9JMkMpXHQmIzQzOz0gZGE5MDUyLWkyYy5vXG4gXG4gb2JqLSQoQ09ORklHX01GRF9BQzEwMClcdFx0JiM0Mzs9IGFjMTAwLm9cbiYjNDM7b2JqLSQoQ09ORklHX01GRF9BQzIwMClcdFx0JiM0Mzs9IGFjMjAwLm9cbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWClcdCYjNDM7PSBheHAyMHgub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX0kyQylcdCYjNDM7PSBheHAyMHgtaTJjLm9cbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWF9SU0IpXHQmIzQzOz0gYXhwMjB4LXJzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWMyMDAuYyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNTA2NmJiMzZhYzc2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9hYzIwMC5jXG5AQCAtMCwwICYjNDM7MSwxNzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqXG4mIzQzOyAqIEJhc2VkIG9uIHRoZSBBQzEwMCBkcml2ZXI6XG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxNiBDaGVuLVl1IFRzYWlcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1JFR1x0XHRcdDB4MDAwMFxuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9DSElQX01BU0tcdFx0R0VOTUFTSygxMSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfUkVHXHRcdFx0MHgwMDAyXG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovXG4mIzQzOyNkZWZpbmUgQUMyMDBfVFdJX1JFR19BRERSX0hcdDB4MDBmZVxuJiM0MzsjZGVmaW5lIEFDMjAwX01BWF9SRUdcdFx0MHhhMWYyXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMyMDAge1xuJiM0MztcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlX2NmZyBhYzIwMF9yYW5nZV9jZmdbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHQucmFuZ2VfbWF4ID0gQUMyMDBfTUFYX1JFRyxcbiYjNDM7XHRcdC5zZWxlY3Rvcl9yZWcgPSBBQzIwMF9UV0lfUkVHX0FERFJfSCxcbiYjNDM7XHRcdC5zZWxlY3Rvcl9tYXNrID0gMHhmZixcbiYjNDM7XHRcdC53aW5kb3dfbGVuID0gMjU2LFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFYWNoIEFDMjAwIHN1Yi1ibG9jayBjYW4gcmVzZXQgaW5kZXBlbmRlbnRseSwgaW52YWxpZGF0aW5nIGl0cyByZWdpc3RlclxuJiM0MzsgKiBjb250ZW50cyB3aXRob3V0IHJlZ21hcCYjMzk7cyBrbm93bGVkZ2UuIENhY2hlIG9ubHkgdGhlIGNvbW1vbiBwYWdlIHNlbGVjdG9yO1xuJiM0MzsgKiB0aGlzIGF2b2lkcyBhIHNlbGVjdG9yIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBldmVyeSBhY2Nlc3Mgb24gdGhlIHNhbWUgcGFnZVxuJiM0MzsgKiB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIHN0YWxlIGZ1bmN0aW9uYWwtcmVnaXN0ZXIgdmFsdWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgYWMyMDBfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWcgIT0gQUMyMDBfVFdJX1JFR19BRERSX0g7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBhYzIwMF9yZWdtYXBfY29uZmlnID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7YWMyMDBcJiMzNDssXG4mIzQzO1x0LnJlZ19iaXRzID0gOCxcbiYjNDM7XHQucmVnX3N0cmlkZSA9IDIsXG4mIzQzO1x0LnZhbF9iaXRzID0gMTYsXG4mIzQzO1x0LnJhbmdlcyA9IGFjMjAwX3JhbmdlX2NmZyxcbiYjNDM7XHQubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUoYWMyMDBfcmFuZ2VfY2ZnKSxcbiYjNDM7XHQubWF4X3JlZ2lzdGVyID0gQUMyMDBfTUFYX1JFRyxcbiYjNDM7XHQudm9sYXRpbGVfcmVnID0gYWMyMDBfdm9sYXRpbGVfcmVnLFxuJiM0MztcdC5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTUFQTEUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhYzIwMF9kaXNhYmxlKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDAgKmRkYXRhID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmVnbWFwX3dyaXRlKGRkYXRhLVx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2Y2xpZW50LVx1MDAzZWRldjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdmVyc2lvbjtcbiYjNDM7XHRzdHJ1Y3QgYWMyMDAgKmRkYXRhO1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWRkYXRhKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihjbGspKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGNsayksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRkZGF0YS1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFx1MDAyNmFjMjAwX3JlZ21hcF9jb25maWcpO1xuJiM0MztcdGlmIChJU19FUlIoZGRhdGEtXHUwMDNlcmVnbWFwKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZGF0YS1cdTAwM2VyZWdtYXApLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIG1pbmltdW0gZGVsYXkgaXMgZG9jdW1lbnRlZC4gTWF0Y2ggdGhlIHZlbmRvciBkcml2ZXImIzM5O3MgNDAgbXMgZGVsYXlcbiYjNDM7XHQgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0bXNsZWVwKDQwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnbWFwX3JlYWQoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfVkVSU0lPTl9SRUcsIFx1MDAyNnZlcnNpb24pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGRldl9pbmZvKGRldiwgXCYjMzQ7QUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLLCB2ZXJzaW9uKSxcbiYjNDM7XHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2V0IHRoZSBjaGlwIGFmdGVyIGRlcGVuZGVudCBmdW5jdGlvbiBkcml2ZXJzIGhhdmUgdW5ib3VuZC4gKi9cbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzIwMF9kaXNhYmxlLCBkZGF0YSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYsIGRldi1cdTAwM2VvZl9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICBkZGF0YS1cdTAwM2VyZWdtYXApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciByZWdtYXBcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdGFjMjAwX2Rpc2FibGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhYzIwMF9vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OyB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhYzIwMF9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWMyMDBfaTJjX2lkc1tdID0ge1xuJiM0MztcdHsgLm5hbWUgPSBcJiMzNDthYzIwMFwmIzM0OyB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWMyMDBfaTJjX2lkcyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O2FjMjAwXCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gYWMyMDBfb2ZfbWF0Y2gsXG4mIzQzO1x0fSxcbiYjNDM7XHQucHJvYmUgPSBhYzIwMF9wcm9iZSxcbiYjNDM7XHQuc2h1dGRvd24gPSBhYzIwMF9zaHV0ZG93bixcbiYjNDM7XHQuaWRfdGFibGUgPSBhYzIwMF9pMmNfaWRzLFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfaTJjX2RyaXZlcihhYzIwMF9kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1gtUG93ZXJzIEFDMjAwIE1GRCBjb3JlIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3lzY29uLmMgYi9kcml2ZXJzL21mZC9zeXNjb24uY1xuaW5kZXggMjFhN2ZjZGQyNzM3OS4uNDQ4NDIyZmU0ZjIxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWZkL3N5c2Nvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9zeXNjb24uY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h3c3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuQEAgLTE5Myw1MyAmIzQzOzE5NCw5NSBAQCBzdGF0aWMgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfZ2V0X3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0cmV0dXJuIHN5c2Nvbi1cdTAwM2VyZWdtYXA7XG4gfVxuIFxuLS8qKlxuLSAqIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIHJlZ21hcCBmb3Igc3BlY2lmaWVkIGRldmljZSBub2RlXG4tICogQG5wOiBEZXZpY2UgdHJlZSBub2RlXG4tICogQHJlZ21hcDogUG9pbnRlciB0byByZWdtYXAgb2JqZWN0XG4tICpcbi0gKiBSZWdpc3RlciBhbiBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwIG9iamVjdCB3aXRoIHN5c2NvbiBmb3IgdGhlIHNwZWNpZmllZFxuLSAqIGRldmljZSB0cmVlIG5vZGUuIFRoaXMgcmVnbWFwIHdpbGwgdGhlbiBiZSByZXR1cm5lZCB0byBjbGllbnQgZHJpdmVycyB1c2luZ1xuLSAqIHRoZSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKCkgQVBJLlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbi0gKi9cbi1pbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc3lzY29uICpcbiYjNDM7b2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbiB7XG4gXHRzdHJ1Y3Qgc3lzY29uICplbnRyeSwgKnN5c2NvbiA9IE5VTEw7XG4tXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFucCB8fCAhcmVnbWFwKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuIFx0c3lzY29uID0ga3phbGxvY19vYmooKnN5c2Nvbik7XG4gXHRpZiAoIXN5c2Nvbilcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdC8qIGNoZWNrIGlmIHN5c2NvbiBlbnRyeSBhbHJlYWR5IGV4aXN0cyAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzeXNjb25fbGlzdF9sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNnN5c2Nvbl9saXN0LCBsaXN0KVxuIFx0XHRpZiAoZW50cnktXHUwMDNlbnAgPT0gbnApIHtcbi1cdFx0XHRyZXQgPSAtRUVYSVNUO1xuLVx0XHRcdGdvdG8gZXJyX3VubG9jaztcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xuJiM0MztcdFx0XHRrZnJlZShzeXNjb24pO1xuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTtcbiBcdFx0fVxuIFxuIFx0c3lzY29uLVx1MDAzZXJlZ21hcCA9IHJlZ21hcDtcbi1cdHN5c2Nvbi1cdTAwM2VucCA9IG5wO1xuJiM0MztcdHN5c2Nvbi1cdTAwM2VucCA9IG9mX25vZGVfZ2V0KG5wKTtcbiBcbiBcdC8qIHJlZ2lzdGVyIHRoZSByZWdtYXAgaW4gc3lzY29uIGxpc3QgKi9cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c3lzY29uLVx1MDAzZWxpc3QsIFx1MDAyNnN5c2Nvbl9saXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzeXNjb25fbGlzdF9sb2NrKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBzeXNjb247XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZVxuJiM0MzsgKiBAbnA6IERldmljZSB0cmVlIG5vZGVcbiYjNDM7ICogQHJlZ21hcDogUG9pbnRlciB0byByZWdtYXAgb2JqZWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJlZ2lzdGVyIGFuIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXAgb2JqZWN0IHdpdGggc3lzY29uIGZvciB0aGUgc3BlY2lmaWVkXG4mIzQzOyAqIGRldmljZSB0cmVlIG5vZGUuIFRoaXMgcmVnbWFwIHdpbGwgdGhlbiBiZSByZXR1cm5lZCB0byBjbGllbnQgZHJpdmVycyB1c2luZ1xuJiM0MzsgKiB0aGUgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZSgpIEFQSS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBQVFJfRVJSX09SX1pFUk8ob2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN5c2NvbiAqc3lzY29uID0gZGF0YTtcbiBcbi1lcnJfdW5sb2NrOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9kZWwoXHUwMDI2c3lzY29uLVx1MDAzZWxpc3QpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRvZl9ub2RlX3B1dChzeXNjb24tXHUwMDNlbnApO1xuIFx0a2ZyZWUoc3lzY29uKTtcbi1cdHJldHVybiByZXQ7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpIC0gUmVnaXN0ZXIgYSBtYW5hZ2VkIGV4dGVybmFsIHN5c2NvbiByZWdtYXBcbiYjNDM7ICogQGRldjogRGV2aWNlIHRoYXQgb3ducyB0aGUgcmVnbWFwXG4mIzQzOyAqIEBucDogRGV2aWNlIHRyZWUgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlZ21hcFxuJiM0MzsgKiBAcmVnbWFwOiBQb2ludGVyIHRvIHRoZSBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwXG4mIzQzOyAqXG4mIzQzOyAqIFJlZ2lzdGVyIGFuIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXAgb2JqZWN0IHdpdGggc3lzY29uIGFuZCByZW1vdmUgaXQgd2hlblxuJiM0MzsgKiBAZGV2IGlzIHVuYm91bmQuIENvbnN1bWVycyBtdXN0IHN0b3AgdXNpbmcgdGhlIHJlZ21hcCBiZWZvcmUgdGhlIHByb3ZpZGVyIGlzXG4mIzQzOyAqIHVuYm91bmQsIGZvciBleGFtcGxlIGJ5IGVzdGFibGlzaGluZyBhIG1hbmFnZWQgZGV2aWNlIGxpbmsgdG8gQGRldi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN5c2NvbiAqc3lzY29uO1xuJiM0MztcbiYjNDM7XHRzeXNjb24gPSBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKG5wLCByZWdtYXApO1xuJiM0MztcdGlmIChJU19FUlIoc3lzY29uKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHN5c2Nvbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LFxuJiM0MztcdFx0XHRcdFx0ZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2UsXG4mIzQzO1x0XHRcdFx0XHRzeXNjb24pO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7XG4gXG4gLyoqXG4gICogZGV2aWNlX25vZGVfdG9fcmVnbWFwKCkgLSBHZXQgb3IgY3JlYXRlIGEgcmVnbWFwIGZvciBzcGVjaWZpZWQgZGV2aWNlIG5vZGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBhMjlkM2ZlZDhhMDUzLi4yN2I4ZmZlNGI1MzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDc1LDYgJiM0Mzs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MztcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbiYjNDM7XHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuJiM0MztcdCAgcmVnaXN0ZXJzLlxuJiM0MztcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IGUyM2RmNWU4MzZlOWUuLmZmYjBlZmJjNGNjNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMCw0ICYjNDM7MTAwLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQmIzQzOz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCYjNDM7PSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQmIzQzOz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0JiM0Mzs9IHZpdGVzc2Uub1xuJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXHQmIzQzOz0geHBvd2Vycy9cbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICYjNDM7PSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSwzIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4mIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgJiM0Mzs9IHhwb3dlcnMtYWN4MDAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjgxZTAxM2JlNDAxYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzE1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FjeDAwLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVFx0M1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFR1x0XHRcdDB4MDAxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXHRcdFx0QklUKDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXHRcdFx0MHgwMDE2XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXG4mIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcdFx0XHQweDgwMDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXHRcdFx0MHg2MDAwXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXHRcdFx0R0VOTUFTSyg4LCA0KVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwge1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbiYjNDM7XHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4mIzQzO1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBoeV9hZGRyO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcbiYjNDM7XHRib29sIHBvd2VyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2N0bCB8XG4mIzQzO1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi1cdTAwM2VwaHlfYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVnLCBFUlJfUFRSKHJldCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuJiM0MztcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKCFlcnIpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2UgaWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxuJiM0MztcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0dTE2IGVwaHlfY3RsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHBoeV9hZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7XG4mIzQzO1xuJiM0MztcdC8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovXG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfZGlzYWJsZTpcbiYjNDM7XHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcdGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4mIzQzO1x0c3RydWN0IGRldmljZV9saW5rICpsaW5rO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cHJpdi1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwmIzM0O3ZjY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0YWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFhYzIwMF9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxuXCYjMzQ7KSk7XG4mIzQzO1x0Y2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4mIzQzO1x0aWYgKCFjbGllbnQpIHtcbiYjNDM7XHRcdHJldCA9IElTX0VOQUJMRUQoQ09ORklHX0kyQykgPyAtRVBST0JFX0RFRkVSIDogLUVOT0RFVjtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxcblwmIzM0OykpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGluayA9IGRldmljZV9saW5rX2FkZChkZXYsIFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpO1xuJiM0MztcdGlmICghbGluaykge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKFJFQURfT05DRShsaW5rLVx1MDAzZXN0YXR1cykgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7eC1wb3dlcnMsYWMyMDBcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCksXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUMyMDAgcmVnbWFwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2N0bCA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNsaykpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoY2xrKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbiYjNDM7XHRjbGtfcHV0KGNsayk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbiYjNDM7XHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIGNsa19yYXRlKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbiYjNDM7XHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4mIzQzO1xuJiM0MztvdXRfZXJyb3I6XG4mIzQzO1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxcblwmIzM0Oyk7XG4mIzQzO291dF9wdXRfY2xpZW50OlxuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzg3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVRcdDNcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlx0MjUwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTS1x0XHRHRU5NQVNLKDExLCA4KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLXHRcdFx0R0VOTUFTSyg3LCA2KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTS1x0XHRHRU5NQVNLKDIsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4mIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEVcdFx0QklUKDE1KVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuJiM0MzsjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcdFx0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcdFx0XHRHRU5NQVNLKDExLCAxMClcbiYjNDM7I2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXHRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1x0XHRcdDB4MDZcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbiYjNDM7XHQoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcXFxuJiM0MztcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXG4mIzQzO1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4mIzQzO1x0IEZJRUxEX1BSRVAoQUMzMDBfTUlJX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxuJiM0MztcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxuJiM0MztcbiYjNDM7c3RydWN0IGFjMzAwX2VwaHlfY3RsIHtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4mIzQzO1x0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdHUxNiBzeXNfY29udHJvbDtcbiYjNDM7XHR1MTYgZXBoeV9jb25maWc7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHRib29sIHBhY2thZ2Vfa25vd247XG4mIzQzO1x0Ym9vbCBpbnRlcm5hbF9kbGRvO1xuJiM0MztcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4mIzQzO1x0Ym9vbCBwb3dlcmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludFxuJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4mIzQzO1x0XHRcdFx0dTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbiYjNDM7XHRcdFx0XHQgdTE2IG1hc2ssIHUxNiBzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdHUxNiB2YWwgPSAocmV0IFx1MDAyNiB+bWFzaykgfCAoc2V0IFx1MDAyNiBtYXNrKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XG4mIzQzO1x0XHRcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxuJiM0MztcdFx0XHRcdFx0ICAgIHJlZ251bSwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY29uZmlnIHxcbiYjNDM7XHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcbiYjNDM7XHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXG4mIzQzO1x0ICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIXByaXYtXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbiYjNDM7XHRcdEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuJiM0MztcdFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHRcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKCFlcnIpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2UgaWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHR1OCBwYWNrYWdlX3N0YXR1cztcbiYjNDM7XHR1MTYgcmVzZXRfdmFsdWU7XG4mIzQzO1x0aW50IHN5c19jb250cm9sO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbiYjNDM7XHRcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuJiM0MztcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xuJiM0MztcdGlmIChzeXNfY29udHJvbCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XG4mIzQzO1x0aWYgKCh+cGFja2FnZV9zdGF0dXMgXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT1cbiYjNDM7XHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87XG4mIzQzO1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcbiYjNDM7XHRcdFx0XHQgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsXG4mIzQzO1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIGRvY3VtZW50ZWQgZGVmYXVsdCBkcml2ZSBsZXZlbCBhbmQgbGVhdmUgdGhlIElSUSBkaXNhYmxlZC4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9wb3dlcl9vZmY6XG4mIzQzO1x0YWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjbGtfcHV0KGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0dTggYmdzX2VmZnVzZV9jb2RlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7bGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXG5cJiMzNDspKTtcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwmIzM0O3ZjY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VjbGsgPSBvZl9jbGtfZ2V0KHBhY2thZ2Vfbm9kZSwgMCk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWNsaykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNsa19yYXRlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2NvbmZpZyA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4mIzQzO1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOThmMmIwYjYzOTA5NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xuQEAgLTAsMCAmIzQzOzEsNTM2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1x0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMFx0XHRcdFx0MFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNlx0XHRcdFx0NlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcdDB4NDgyNFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1x0MHgxN1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4ZlxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUdcdFx0XHQweDE1XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuJiM0MztcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFXHRcdDB4MDBiY1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXHQweDAwNDRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbiYjNDM7XHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4mIzQzO1x0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcbiYjNDM7ICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4mIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4mIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbiYjNDM7XHRib29sIGlzX2FjMzAwO1xuJiM0MztcdGJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7XG4mIzQzO1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcGFnZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vbihwcml2LVx1MDAzZWNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vZmYocHJpdi1cdTAwM2Vjb250cm9sKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cdTAwM2Vjb250cm9sLFxuJiM0MztcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XHR1OCAqYnVmO1xuJiM0MztcdHUxNiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XG4mIzQzO1x0aWYgKElTX0VSUihjZWxsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuJiM0MztcbiYjNDM7XHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbiYjNDM7XHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuJiM0MztcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbiYjNDM7XHRcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0KnZhbHVlID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XG4mIzQzO1x0Ym9vbCBzZWxlY3RhYmxlO1xuJiM0MztcdGJvb2wgZml4ZWRfYWMzMDA7XG4mIzQzO1x0Ym9vbCBoYXNfY29uZmlndXJhdGlvbjtcbiYjNDM7XHR1OCBjYWxpYnJhdGlvbjtcbiYjNDM7XHR1MzIgYmFzZV9hZGRyO1xuJiM0MztcdHUxNiBjb25maWd1cmF0aW9uID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cdTAwM2VvZl9ub2RlKTtcbiYjNDM7XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZiYXNlX2FkZHIpO1xuJiM0MztcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XG4mIzQzO1x0aGFzX2NvbmZpZ3VyYXRpb24gPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7bnZtZW0tY2VsbC1uYW1lc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7KSBcdTAwM2U9IDA7XG4mIzQzO1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGVjdGFibGUpIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuJiM0MztcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4mIzQzO1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2NvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbiYjNDM7XHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcbiYjNDM7XHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4mIzQzO1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuJiM0MztcdFx0XHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO1xuJiM0MztvdXRfcHV0X25vZGU6XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4mIzQzO1x0XHRcdFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4mIzQzO1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LVx1MDAzZWlzX2FjMzAwID9cbiYjNDM7XHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuJiM0MztcdFx0QUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTtcbiYjNDM7XHR1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFO1xuJiM0MztcdHUxNiBnbG9iYWxfY29uZmlnO1xuJiM0MztcdGludCBvbGRwYWdlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbiYjNDM7XHRcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0YWZlX2VxX3J4X2RldGVjdCA9XG4mIzQzO1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHRcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xuJiM0MztcdGlmIChvbGRwYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcbiYjNDM7b3V0X3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqL1xuJiM0MztcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmVzdW1lX3JldDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJlc3VtZV9yZXQgPSBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXN1bWVfcmV0KVxuJiM0MztcdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbiYjNDM7XHRib29sIG1hdGNoO1xuJiM0MztcbiYjNDM7XHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuJiM0MztcdGlmICghcGFja2FnZV9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0bWF0Y2ggPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXCYjMzQ7LFxuJiM0MztcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4mIzQzO1x0XHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxuJiM0MztcdFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbiYjNDM7XHRcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgJiM0MzsxLDI4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZpY2Vfbm9kZTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wge1xuJiM0MztcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuJiM0MztcdGludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7XG4mIzQzO1x0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oIGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmhcbmluZGV4IGFhZDljNmI1MDQ2MzYuLjNlODA0ZmMxYjAzZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmhcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZGV2aWNlX25vZGU7XG4mIzQzO3N0cnVjdCBkZXZpY2U7XG4gXG4gI2lmZGVmIENPTkZJR19NRkRfU1lTQ09OXG4gc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xuQEAgLTMwLDYgJiM0MzszMSw5IEBAIHN0cnVjdCByZWdtYXAgKnN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfb3B0aW9uYWwoc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXIgKnByb3BlcnR5KTtcbiBpbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHRcdCAgICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCk7XG4mIzQzO2ludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4ge1xuQEAgLTc1LDYgJiM0Mzs3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0MztkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19MSU5VWF9NRkRfU1lTQ09OX0hfXyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIwOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGRyaXZlcnMgZm9yIFgtUG93ZXJzIEFDMjAwIE1GRCBhbmQgQUN4MDAgRXRoZXJuZXQgUEhZcywgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZSBkZXZpY2UgdHJlZSBub2RlcyAob2Zfbm9kZSkgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBTaW5jZSBzeXprYWxsZXIgZG9lcyBub3QgZHluYW1pY2FsbHkgZ2VuZXJhdGUgYXJiaXRyYXJ5IGRldmljZSB0cmVlIG5vZGVzLCBhbmQgdGhlc2UgZGV2aWNlcyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGRlZmF1bHQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgJiMzOTt2aXJ0JiMzOTsgb3IgeDg2XzY0KSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuIFRoZSBtaW5vciByZWZhY3RvcmluZyBpbiBzeXNjb24uYyBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgU29DLXNwZWNpZmljIGRyaXZlcnMgKEV4eW5vcywgU3VueGksIFJlbmVzYXMpIHRoYXQgYXJlIGFsc28gbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5NGE1YTk5YzU1ZTk1NmEyZmZhMGJhMDU3NWFmYTAwMTQ2YTUwYzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyA5IDIwOjM4OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjYwOTgzMWIxNWM4MDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwKQEAgLTAsMCAmIzQzOzEsNDkgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL21mZC94LXBvd2VycyxhYzIwMC55YW1sIwomIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIwomIzQzOwomIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBtaXhlZC1zaWduYWwgSUMKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7CiYjNDM7ZGVzY3JpcHRpb246CiYjNDM7ICBUaGUgQUMyMDAgaXMgYSBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDIGNvbnRhaW5pbmcgYXVkaW8sIHZpZGVvLCBSVEMgYW5kCiYjNDM7ICBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMuIEl0cyBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgb3ZlciBJMkMuCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMAomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgY2xvY2tzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBBQzIwMCBpbnB1dCBjbG9jay4gV2hlbiB1c2luZyB0aGUgRXRoZXJuZXQgUEhZLCBpdHMgY29uZmlndXJlZCByYXRlIG11c3QKJiM0MzsgICAgICBiZSAyNCBvciAyNyBNSHosIG1hdGNoaW5nIHRoZSByYXRlcyBlbmNvZGVkIGJ5IHRoZSBkb2N1bWVudGVkIEVQSFkgY2xvY2sKJiM0MzsgICAgICBzZWxlY3Rvci4KJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSByZWcKJiM0MzsgIC0gY2xvY2tzCiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgaTJjIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBtaXhlZC1zaWduYWxAMTAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3gtcG93ZXJzLGFjMjAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzB4MTAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZTBjNWU5ODBjMzllCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApAQCAtMCwwICYjNDM7MSwyMDcgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlcwomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnQKJiM0MzsgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGUKJiM0MzsgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsCiYjNDM7ICB3aGlsZSBBQzMwMCBjb250cm9sIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYKJiM0MzsgIHBsdXMgdGhlIGxpbmsgUEhZIGFkZHJlc3MuCiYjNDM7CiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLgomIzQzOyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGEKJiM0MzsgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLgomIzQzOwomIzQzOyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzCiYjNDM7ICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kCiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvCiYjNDM7ICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC4KJiM0MzsKJiM0MztzZWxlY3Q6CiYjNDM7ICBwcm9wZXJ0aWVzOgomIzQzOyAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgIGVudW06CiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7ICByZXF1aXJlZDoKJiM0MzsgICAgLSBjb21wYXRpYmxlCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heGltdW06IDMxCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2sKJiM0MzsgICAgICBiZWxvbmdzIHRvIHRoZSByZWZlcmVuY2VkIEFDMjAwIE1GRCBpbnN0ZWFkLgomIzQzOwomIzQzOyAgdmNjLXN1cHBseToKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxCiYjNDM7ICAgICAgb24gQUMzMDAuCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2cKJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMAomIzQzOyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwCiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHkKJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZQomIzQzOyAgICAgIGNvcHkgaW5zdGVhZC4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBjb25maWd1cmF0aW9uCiYjNDM7CiYjNDM7ICB4LXBvd2VycyxhYzIwMDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZQomIzQzOyAgICBkZXNjcmlwdGlvbjogUmVmZXJlbmNlIHRvIHRoZSBBQzIwMCBNRkQgY29udGFpbmluZyB0aGlzIEV0aGVybmV0IFBIWQomIzQzOwomIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDoKJiM0MzsgICAgdHlwZTogYm9vbGVhbgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lCiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi4KJiM0MzsKJiM0MztwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6CiYjNDM7ICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sIwomIzQzOyAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwCiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gdmNjLXN1cHBseQomIzQzOwomIzQzO2RlcGVuZGVudFJlcXVpcmVkOgomIzQzOyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdCiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOiBbIG52bWVtLWNlbGxzIF0KJiM0MzsKJiM0MzthbGxPZjoKJiM0MzsgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCMKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY2xvY2tzOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMAomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gY2xvY2tzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXMKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gJmx0OyZhbXA7cmVnXzN2MyZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9ICZsdDsmYW1wO2FjMjAwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gJmx0OyZhbXA7cmVnXzN2MyZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMSB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9ICZsdDsmYW1wO2FjMjAwJmd0OzsKJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9ICZsdDsmYW1wO2VwaHlfY29uZmlndXJhdGlvbiZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9ICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAxIHsKJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKJiM0MzsuLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCmluZGV4IDc2M2NlNmEzNDc4MmIuLjk1ZTNjNjI3NDJiYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZmQvS2NvbmZpZwpAQCAtMjA1LDYgJiM0MzsyMDUsMTggQEAgY29uZmlnIE1GRF9BQzEwMAogCSAgVGhpcyBkcml2ZXIgaW5jbHVkZSBvbmx5IHRoZSBjb3JlIEFQSXMuIFlvdSBoYXZlIHRvIHNlbGVjdCBpbmRpdmlkdWFsCiAJICBjb21wb25lbnRzIGxpa2UgY29kZWNzIG9yIFJUQyB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy4KIAomIzQzO2NvbmZpZyBNRkRfQUMyMDAKJiM0MzsJdHJpc3RhdGUgJiMzNDtYLVBvd2VycyBBQzIwMCYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gSTJDCiYjNDM7CWRlcGVuZHMgb24gT0YKJiM0MzsJc2VsZWN0IE1GRF9TWVNDT04KJiM0MzsJc2VsZWN0IFJFR01BUF9JMkMKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBQzIwMCBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDLiBUaGUgQUMyMDAKJiM0MzsJICBjb250YWlucyBhdWRpbywgdmlkZW8sIFJUQyBhbmQgRmFzdCBFdGhlcm5ldCBQSFkgZnVuY3Rpb25zIGFuZCBpcwomIzQzOwkgIGNvLXBhY2thZ2VkIHdpdGggc29tZSBBbGx3aW5uZXIgSDYgYW5kIEg2MTYgU29Dcy4gVGhpcyBkcml2ZXIgcHJvdmlkZXMKJiM0MzsJICB0aGUgc2hhcmVkIHJlZ2lzdGVyIGFjY2VzcyB1c2VkIGJ5IHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9uIGRyaXZlcnMuCiYjNDM7CiBjb25maWcgTUZEX0FYUDIwWAogCXRyaXN0YXRlCiAJc2VsZWN0IE1GRF9DT1JFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IGRkNGJiN2U3N2MzMzYuLjg5MGU3NmE5YWQwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSkJJiM0Mzs9IGRhOTA1Mi1zcGkubwogb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfSTJDKQkmIzQzOz0gZGE5MDUyLWkyYy5vCiAKIG9iai0kKENPTkZJR19NRkRfQUMxMDApCQkmIzQzOz0gYWMxMDAubwomIzQzO29iai0kKENPTkZJR19NRkRfQUMyMDApCQkmIzQzOz0gYWMyMDAubwogb2JqLSQoQ09ORklHX01GRF9BWFAyMFgpCSYjNDM7PSBheHAyMHgubwogb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfSTJDKQkmIzQzOz0gYXhwMjB4LWkyYy5vCiBvYmotJChDT05GSUdfTUZEX0FYUDIwWF9SU0IpCSYjNDM7PSBheHAyMHgtcnNiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FjMjAwLmMgYi9kcml2ZXJzL21mZC9hYzIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI1MDY2YmIzNmFjNzYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9hYzIwMC5jCkBAIC0wLDAgJiM0MzsxLDE3MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIE1GRCBjb3JlIGRyaXZlciBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgJmx0O2plcm5lai5za3JhYmVjQGdtYWlsLmNvbSZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICoKJiM0MzsgKiBCYXNlZCBvbiB0aGUgQUMxMDAgZHJpdmVyOgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAxNiBDaGVuLVl1IFRzYWkKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2kyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZmQvc3lzY29uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1JFRwkJCTB4MDAwMAomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLCQlHRU5NQVNLKDE1LCAxNCkKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSwkJR0VOTUFTSygxMSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFRwkJCTB4MDAwMgomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVAlCSVQoMCkKJiM0MzsKJiM0MzsvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovCiYjNDM7I2RlZmluZSBBQzIwMF9UV0lfUkVHX0FERFJfSAkweDAwZmUKJiM0MzsjZGVmaW5lIEFDMjAwX01BWF9SRUcJCTB4YTFmMgomIzQzOwomIzQzO3N0cnVjdCBhYzIwMCB7CiYjNDM7CXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlX2NmZyBhYzIwMF9yYW5nZV9jZmdbXSA9IHsKJiM0MzsJewomIzQzOwkJLnJhbmdlX21heCA9IEFDMjAwX01BWF9SRUcsCiYjNDM7CQkuc2VsZWN0b3JfcmVnID0gQUMyMDBfVFdJX1JFR19BRERSX0gsCiYjNDM7CQkuc2VsZWN0b3JfbWFzayA9IDB4ZmYsCiYjNDM7CQkud2luZG93X2xlbiA9IDI1NiwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogRWFjaCBBQzIwMCBzdWItYmxvY2sgY2FuIHJlc2V0IGluZGVwZW5kZW50bHksIGludmFsaWRhdGluZyBpdHMgcmVnaXN0ZXIKJiM0MzsgKiBjb250ZW50cyB3aXRob3V0IHJlZ21hcCYjMzk7cyBrbm93bGVkZ2UuIENhY2hlIG9ubHkgdGhlIGNvbW1vbiBwYWdlIHNlbGVjdG9yOwomIzQzOyAqIHRoaXMgYXZvaWRzIGEgc2VsZWN0b3IgcmVhZC1tb2RpZnktd3JpdGUgZm9yIGV2ZXJ5IGFjY2VzcyBvbiB0aGUgc2FtZSBwYWdlCiYjNDM7ICogd2l0aG91dCBldmVyIHJldHVybmluZyBzdGFsZSBmdW5jdGlvbmFsLXJlZ2lzdGVyIHZhbHVlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBhYzIwMF92b2xhdGlsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlZyAhPSBBQzIwMF9UV0lfUkVHX0FERFJfSDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGFjMjAwX3JlZ21hcF9jb25maWcgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDthYzIwMCYjMzQ7LAomIzQzOwkucmVnX2JpdHMgPSA4LAomIzQzOwkucmVnX3N0cmlkZSA9IDIsCiYjNDM7CS52YWxfYml0cyA9IDE2LAomIzQzOwkucmFuZ2VzID0gYWMyMDBfcmFuZ2VfY2ZnLAomIzQzOwkubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUoYWMyMDBfcmFuZ2VfY2ZnKSwKJiM0MzsJLm1heF9yZWdpc3RlciA9IEFDMjAwX01BWF9SRUcsCiYjNDM7CS52b2xhdGlsZV9yZWcgPSBhYzIwMF92b2xhdGlsZV9yZWcsCiYjNDM7CS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTUFQTEUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzIwMF9kaXNhYmxlKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDAgKmRkYXRhID0gZGF0YTsKJiM0MzsKJiM0MzsJcmVnbWFwX3dyaXRlKGRkYXRhLSZndDtyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7Y2xpZW50LSZndDtkZXY7CiYjNDM7CXVuc2lnbmVkIGludCB2ZXJzaW9uOwomIzQzOwlzdHJ1Y3QgYWMyMDAgKmRkYXRhOwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRkYXRhKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoY2xrKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihjbGspLAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBpbnB1dCBjbG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxuJiMzNDspOwomIzQzOwomIzQzOwlkZGF0YS0mZ3Q7cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmYW1wO2FjMjAwX3JlZ21hcF9jb25maWcpOwomIzQzOwlpZiAoSVNfRVJSKGRkYXRhLSZndDtyZWdtYXApKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRkYXRhLSZndDtyZWdtYXApLAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRkYXRhKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm8gbWluaW11bSBkZWxheSBpcyBkb2N1bWVudGVkLiBNYXRjaCB0aGUgdmVuZG9yIGRyaXZlciYjMzk7cyA0MCBtcyBkZWxheQomIzQzOwkgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suCiYjNDM7CSAqLwomIzQzOwltc2xlZXAoNDApOwomIzQzOwomIzQzOwlyZXQgPSByZWdtYXBfcmVhZChkZGF0YS0mZ3Q7cmVnbWFwLCBBQzIwMF9TWVNfVkVSU0lPTl9SRUcsICZhbXA7dmVyc2lvbik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxuJiMzNDspOwomIzQzOwomIzQzOwlkZXZfaW5mbyhkZXYsICYjMzQ7QUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxuJiMzNDssCiYjNDM7CQkgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSywgdmVyc2lvbiksCiYjNDM7CQkgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTSywgdmVyc2lvbikpOwomIzQzOwomIzQzOwkvKiBSZXNldCB0aGUgY2hpcCBhZnRlciBkZXBlbmRlbnQgZnVuY3Rpb24gZHJpdmVycyBoYXZlIHVuYm91bmQuICovCiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMjAwX2Rpc2FibGUsIGRkYXRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ21hcF93cml0ZShkZGF0YS0mZ3Q7cmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3dyaXRlKGRkYXRhLSZndDtyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQzIwMF9TWVNfQ09OVFJPTF9DSElQX1JFU0VUX0RFQVNTRVJUKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYsIGRldi0mZ3Q7b2Zfbm9kZSwKJiM0MzsJCQkJCSAgICAgZGRhdGEtJmd0O3JlZ21hcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZWdpc3RlciByZWdtYXBcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjMjAwX3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiYjNDM7ewomIzQzOwlhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OyB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWMyMDBfaTJjX2lkc1tdID0gewomIzQzOwl7IC5uYW1lID0gJiMzNDthYzIwMCYjMzQ7IH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFjMjAwX2kyY19pZHMpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhYzIwMF9kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7YWMyMDAmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLAomIzQzOwl9LAomIzQzOwkucHJvYmUgPSBhYzIwMF9wcm9iZSwKJiM0MzsJLnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sCiYjNDM7CS5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsCiYjNDM7fTsKJiM0Mzttb2R1bGVfaTJjX2RyaXZlcihhYzIwMF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WC1Qb3dlcnMgQUMyMDAgTUZEIGNvcmUgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3lzY29uLmMgYi9kcml2ZXJzL21mZC9zeXNjb24uYwppbmRleCAyMWE3ZmNkZDI3Mzc5Li40NDg0MjJmZTRmMjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zeXNjb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9zeXNjb24uYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaHdzcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKQEAgLTE5Myw1MyAmIzQzOzE5NCw5NSBAQCBzdGF0aWMgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfZ2V0X3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCXJldHVybiBzeXNjb24tJmd0O3JlZ21hcDsKIH0KIAotLyoqCi0gKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZQotICogQG5wOiBEZXZpY2UgdHJlZSBub2RlCi0gKiBAcmVnbWFwOiBQb2ludGVyIHRvIHJlZ21hcCBvYmplY3QKLSAqCi0gKiBSZWdpc3RlciBhbiBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwIG9iamVjdCB3aXRoIHN5c2NvbiBmb3IgdGhlIHNwZWNpZmllZAotICogZGV2aWNlIHRyZWUgbm9kZS4gVGhpcyByZWdtYXAgd2lsbCB0aGVuIGJlIHJldHVybmVkIHRvIGNsaWVudCBkcml2ZXJzIHVzaW5nCi0gKiB0aGUgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZSgpIEFQSS4KLSAqCi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICovCi1pbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApCiYjNDM7c3RhdGljIHN0cnVjdCBzeXNjb24gKgomIzQzO29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwoc3RydWN0IGRldmljZV9ub2RlICpucCwKJiM0MzsJCQkJICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKQogewogCXN0cnVjdCBzeXNjb24gKmVudHJ5LCAqc3lzY29uID0gTlVMTDsKLQlpbnQgcmV0OwogCiAJaWYgKCFucCB8fCAhcmVnbWFwKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJc3lzY29uID0ga3phbGxvY19vYmooKnN5c2Nvbik7CiAJaWYgKCFzeXNjb24pCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAkvKiBjaGVjayBpZiBzeXNjb24gZW50cnkgYWxyZWFkeSBleGlzdHMgKi8KIAltdXRleF9sb2NrKCZhbXA7c3lzY29uX2xpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1wO3N5c2Nvbl9saXN0LCBsaXN0KQogCQlpZiAoZW50cnktJmd0O25wID09IG5wKSB7Ci0JCQlyZXQgPSAtRUVYSVNUOwotCQkJZ290byBlcnJfdW5sb2NrOwomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO3N5c2Nvbl9saXN0X2xvY2spOwomIzQzOwkJCWtmcmVlKHN5c2Nvbik7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoLUVFWElTVCk7CiAJCX0KIAogCXN5c2Nvbi0mZ3Q7cmVnbWFwID0gcmVnbWFwOwotCXN5c2Nvbi0mZ3Q7bnAgPSBucDsKJiM0MzsJc3lzY29uLSZndDtucCA9IG9mX25vZGVfZ2V0KG5wKTsKIAogCS8qIHJlZ2lzdGVyIHRoZSByZWdtYXAgaW4gc3lzY29uIGxpc3QgKi8KIAlsaXN0X2FkZF90YWlsKCZhbXA7c3lzY29uLSZndDtsaXN0LCAmYW1wO3N5c2Nvbl9saXN0KTsKIAltdXRleF91bmxvY2soJmFtcDtzeXNjb25fbGlzdF9sb2NrKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gc3lzY29uOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZQomIzQzOyAqIEBucDogRGV2aWNlIHRyZWUgbm9kZQomIzQzOyAqIEByZWdtYXA6IFBvaW50ZXIgdG8gcmVnbWFwIG9iamVjdAomIzQzOyAqCiYjNDM7ICogUmVnaXN0ZXIgYW4gZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcCBvYmplY3Qgd2l0aCBzeXNjb24gZm9yIHRoZSBzcGVjaWZpZWQKJiM0MzsgKiBkZXZpY2UgdHJlZSBub2RlLiBUaGlzIHJlZ21hcCB3aWxsIHRoZW4gYmUgcmV0dXJuZWQgdG8gY2xpZW50IGRyaXZlcnMgdXNpbmcKJiM0MzsgKiB0aGUgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZSgpIEFQSS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHJlZ21hcCAqcmVnbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKG5wLCByZWdtYXApKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzeXNjb24gKnN5c2NvbiA9IGRhdGE7CiAKLWVycl91bmxvY2s6CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzeXNjb25fbGlzdF9sb2NrKTsKJiM0MzsJbGlzdF9kZWwoJmFtcDtzeXNjb24tJmd0O2xpc3QpOwogCW11dGV4X3VubG9jaygmYW1wO3N5c2Nvbl9saXN0X2xvY2spOwomIzQzOwomIzQzOwlvZl9ub2RlX3B1dChzeXNjb24tJmd0O25wKTsKIAlrZnJlZShzeXNjb24pOwotCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIGEgbWFuYWdlZCBleHRlcm5hbCBzeXNjb24gcmVnbWFwCiYjNDM7ICogQGRldjogRGV2aWNlIHRoYXQgb3ducyB0aGUgcmVnbWFwCiYjNDM7ICogQG5wOiBEZXZpY2UgdHJlZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnbWFwCiYjNDM7ICogQHJlZ21hcDogUG9pbnRlciB0byB0aGUgZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcAomIzQzOyAqCiYjNDM7ICogUmVnaXN0ZXIgYW4gZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcCBvYmplY3Qgd2l0aCBzeXNjb24gYW5kIHJlbW92ZSBpdCB3aGVuCiYjNDM7ICogQGRldiBpcyB1bmJvdW5kLiBDb25zdW1lcnMgbXVzdCBzdG9wIHVzaW5nIHRoZSByZWdtYXAgYmVmb3JlIHRoZSBwcm92aWRlciBpcwomIzQzOyAqIHVuYm91bmQsIGZvciBleGFtcGxlIGJ5IGVzdGFibGlzaGluZyBhIG1hbmFnZWQgZGV2aWNlIGxpbmsgdG8gQGRldi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiYjNDM7CQkJCSAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzeXNjb24gKnN5c2NvbjsKJiM0MzsKJiM0MzsJc3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKTsKJiM0MzsJaWYgKElTX0VSUihzeXNjb24pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoc3lzY29uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsCiYjNDM7CQkJCQlkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSwKJiM0MzsJCQkJCXN5c2Nvbik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7CiAKIC8qKgogICogZGV2aWNlX25vZGVfdG9fcmVnbWFwKCkgLSBHZXQgb3IgY3JlYXRlIGEgcmVnbWFwIGZvciBzcGVjaWZpZWQgZGV2aWNlIG5vZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggYTI5ZDNmZWQ4YTA1My4uMjdiOGZmZTRiNTM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKQEAgLTQ3NSw2ICYjNDM7NDc1LDE3IEBAIGNvbmZpZyBWSVRFU1NFX1BIWQogCWhlbHAKIAkgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NAogCiYjNDM7Y29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZCiYjNDM7CXRyaXN0YXRlICYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBDT01NT05fQ0xLICZhbXA7JmFtcDsgTlZNRU0gJmFtcDsmYW1wOyBPRl9NRElPICZhbXA7JmFtcDsgUkVHVUxBVE9SCiYjNDM7CWRlcGVuZHMgb24gSTJDIHx8ICFJMkMKJiM0MzsJc2VsZWN0IFBIWV9QQUNLQUdFCiYjNDM7CWhlbHAKJiM0MzsJICBFbmFibGUgdGhlIEZhc3QgRXRoZXJuZXQgUEhZIGRyaXZlciBzaGFyZWQgYnkgdGhlIFgtUG93ZXJzIEFDMjAwCiYjNDM7CSAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFkKJiM0MzsJICByZWdpc3RlcnMgYW5kIHRoZSBwYWNrYWdlLXNwZWNpZmljIEFDMjAwIEkyQyBvciBBQzMwMCBNRElPIGNvbnRyb2wKJiM0MzsJICByZWdpc3RlcnMuCiYjNDM7CiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUkKIAl0cmlzdGF0ZSAmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXImIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQppbmRleCBlMjNkZjVlODM2ZTllLi5mZmIwZWZiYzRjYzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCkBAIC0xMDAsNCAmIzQzOzEwMCw1IEBAIG9iai0kKENPTkZJR19TTVNDX1BIWSkJCSYjNDM7PSBzbXNjLm8KIG9iai0kKENPTkZJR19TVEUxMFhQKQkJJiM0Mzs9IHN0ZTEwWHAubwogb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKQkmIzQzOz0gdGVyYW5ldGljcy5vCiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpCSYjNDM7PSB2aXRlc3NlLm8KJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpCSYjNDM7PSB4cG93ZXJzLwogb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSAmIzQzOz0geGlsaW54X2dtaWkycmdtaWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsMyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0Mzt4cG93ZXJzLWFjeDAwLXkgOj0gYWN4MDAubyBhYzIwMC5vIGFjMzAwLm8KJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICYjNDM7PSB4cG93ZXJzLWFjeDAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjY4MWUwMTNiZTQwMWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jCkBAIC0wLDAgJiM0MzsxLDMxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmQKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgJmx0O2FuZHJlLnByenl3YXJhQGFybS5jb20mZ3Q7KQomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2kyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZmQvc3lzY29uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFoJMjcwMDAwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHCQkJMHgwMDE0CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRQkJCUJJVCgxKQomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcJCQkweDAwMTYKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRQkJCUJJVCgwKQomIzQzOwomIzQzOy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi8KJiM0MzsjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHCQkJMHg4MDA0CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUcJCQkweDYwMDAKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV04JCQlCSVQoMCkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLCQkJR0VOTUFTSyg4LCA0KQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTAkJCUJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLCQlHRU5NQVNLKDE1LCAxMikKJiM0MzsKJiM0MztzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKJiM0MzsJc3RydWN0IHJlZ3VsYXRvciAqdmNjOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJdW5zaWduZWQgaW50IHBoeV9hZGRyOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOwomIzQzOwlib29sIHN1cHBseV9lbmFibGVkOwomIzQzOwlib29sIHBvd2VyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jdGwgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHwKJiM0MzsJCUZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LSZndDtwaHlfYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCByZWcsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxuJiMzNDssCiYjNDM7CQkJcmVnLCBFUlJfUFRSKHJldCkpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkKSB7CiYjNDM7CQlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCQkgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfAomIzQzOwkJCQkJICAgQUMyMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CQllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQlwcml2LSZndDtwb3dlcmVkID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UgaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CiYjNDM7CXJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7YWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZSA9PSBpbnRlcmZhY2UpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJIEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1MTYgZXBoeV9jdGw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAmZ3Q7IEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkICZhbXA7JmFtcDsgcHJpdi0mZ3Q7cGh5X2FkZHIgPT0gcGh5X2FkZHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7cGh5X2FkZHIgPSBwaHlfYWRkcjsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpOwomIzQzOwomIzQzOwkvKiBTdGFydCBmcm9tIGEgZGlzYWJsZWQgc3RhdGUgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb25maWd1cmF0aW9uLiAqLwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywKJiM0MzsJCQkJICAgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwKJiM0MzsJCQkJICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywgZXBoeV9jdGwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9kaXNhYmxlOgomIzQzOwkvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi8KJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CWFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlOwomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiYjNDM7CXN0cnVjdCBkZXZpY2VfbGluayAqbGluazsKJiM0MzsJdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsKJiM0MzsJdTggYnBzX2VmZnVzZV9jb2RlOwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CXByaXYtJmd0O2RldiA9IGRldjsKJiM0MzsJcHJpdi0mZ3Q7dmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCAmIzM0O3ZjYyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDt2Y2MpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7dmNjKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XG4mIzM0OykpOwomIzQzOwomIzQzOwlhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OywgMCk7CiYjNDM7CWlmICghYWMyMDBfbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXG4mIzM0OykpOwomIzQzOwljbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7CiYjNDM7CWlmICghY2xpZW50KSB7CiYjNDM7CQlyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxuJiMzNDspKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsaW5rID0gZGV2aWNlX2xpbmtfYWRkKGRldiwgJmFtcDtjbGllbnQtJmd0O2RldiwKJiM0MzsJCQkgICAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKTsKJiM0MzsJaWYgKCFsaW5rKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChSRUFEX09OQ0UobGluay0mZ3Q7c3RhdHVzKSAhPSBETF9TVEFURV9DT05TVU1FUl9QUk9CRSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsCiYjNDM7CQkJCSAgICAmIzM0O0FDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9jbGllbnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkJICAgICAgICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7cmVnbWFwKSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7cmVnbWFwKSwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBBQzIwMCByZWdtYXBcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X2Vycm9yOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGFzX2NhbGlicmF0aW9uKSB7CiYjNDM7CQlyZXQgPSByZWdtYXBfcmVhZChwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VGVVNFX0VQSFlfUkVHLAomIzQzOwkJCQkgICZhbXA7aW50ZXJuYWxfY2FsaWJyYXRpb24pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9lcnJvcjsKJiM0MzsJCWNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqLwomIzQzOwlicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spOwomIzQzOwlwcml2LSZndDtlcGh5X2N0bCA9CiYjNDM7CQlGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpOwomIzQzOwkvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovCiYjNDM7CiYjNDM7CWNsayA9IGNsa19nZXQoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoY2xrKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihjbGspOwomIzQzOwkJZ290byBvdXRfZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKJiM0MzsJY2xrX3B1dChjbGspOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDt1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCSAgICBjbGtfcmF0ZSk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7CiYjNDM7CS8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKJiM0MzsJcHV0X2RldmljZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cHJpdi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MztvdXRfZXJyb3I6CiYjNDM7CXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxuJiMzNDspOwomIzQzO291dF9wdXRfY2xpZW50OgomIzQzOwlwdXRfZGV2aWNlKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFhNTYwNDMyYTE0YzkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCkBAIC0wLDAgJiM0MzsxLDM4NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmQKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFoJMjUwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaCTI3MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUcJCQkweDAwCiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLCQlHRU5NQVNLKDExLCA4KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0sJCQlHRU5NQVNLKDcsIDYpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpCiYjNDM7I2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFCQkJQklUKDUpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVAkJQklUKDEpCiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE8JCUJJVCgzKQomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLCQlHRU5NQVNLKDIsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHCQkJMHgwMgomIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUJCUJJVCgxNSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUcJCQkweDA1CiYjNDM7I2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLCQkJR0VOTUFTSygxNSwgMTQpCiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0sJCQlHRU5NQVNLKDExLCAxMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yCQkJMgomIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUcJCQkweDA2CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSwkJR0VOTUFTSygxNSwgMTIpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXAomIzQzOwkoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcCiYjNDM7CSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFwKJiM0MzsJIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXAomIzQzOwkoRklFTERfUFJFUChBQzMwMF9NRElPX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSkKJiM0MzsKJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnZjYzsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwl1MTYgc3lzX2NvbnRyb2w7CiYjNDM7CXUxNiBlcGh5X2NvbmZpZzsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwYWNrYWdlX2tub3duOwomIzQzOwlib29sIGludGVybmFsX2RsZG87CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJIHUxNiBtYXNrLCB1MTYgc2V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1MTYgdmFsID0gKHJldCAmYW1wOyB+bWFzaykgfCAoc2V0ICZhbXA7IG1hc2spOwomIzQzOwomIzQzOwkJcmV0ID0gdmFsID09IHJldCA/IDAgOgomIzQzOwkJCV9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwKJiM0MzsJCQkJCSAgICByZWdudW0sIHZhbCk7CiYjNDM7CX0KJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jb25maWcgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkCiYjNDM7CSAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGUKJiM0MzsJICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhcHJpdi0mZ3Q7cGFja2FnZV9rbm93biB8fCAhcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA/CiYjNDM7CQlBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJCSAgIEFDMzAwX0VQSFlfU0hVVERPV04pOwomIzQzOwkJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCQkgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCQkgICAgQUMzMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1OCBwYWNrYWdlX3N0YXR1czsKJiM0MzsJdTE2IHJlc2V0X3ZhbHVlOwomIzQzOwlpbnQgc3lzX2NvbnRyb2w7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqLwomIzQzOwkJZnNsZWVwKDEwMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi8KJiM0MzsJcmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8CiYjNDM7CQkJCSAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi8KJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgICBwcml2LSZndDtzeXNfY29udHJvbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpOwomIzQzOwlpZiAoc3lzX2NvbnRyb2wgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzeXNfY29udHJvbDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7CiYjNDM7CWlmICgofnBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT0KJiM0MzsJICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgJmFtcDsgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETzsKJiM0MzsJcHJpdi0mZ3Q7cGFja2FnZV9rbm93biA9IHRydWU7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLAomIzQzOwkJCQkgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsCiYjNDM7CQkJCSAgIHByaXYtJmd0O2ludGVybmFsX2RsZG8gPwomIzQzOwkJCQkgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX1NZU19JT19WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJICBBQzMwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZnNsZWVwKDEwMDAwKTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcG93ZXJfb2ZmOgomIzQzOwlhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWNsa19wdXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJnc19lZmZ1c2VfY29kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZndDsgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxuJiMzNDspKTsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwomIzQzOwlwcml2LSZndDt2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsICYjMzQ7dmNjJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O3ZjYykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LSZndDt2Y2MpLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtjbGspKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7Y2xrKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXG4mIzM0OykpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LSZndDtjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXG4mIzM0OykpOwomIzQzOwomIzQzOwljbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtjbGspOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCQkgICAgIGNsa19yYXRlKSk7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7CiYjNDM7CiYjNDM7CS8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi8KJiM0MzsJYmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpICZhbXA7CiYjNDM7CQkJICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTsKJiM0MzsJcHJpdi0mZ3Q7ZXBoeV9jb25maWcgPQomIzQzOwkJRklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTsKJiM0MzsJLyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqLwomIzQzOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmOwomIzQzOwlwcml2LSZndDtjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlOwomIzQzOwkvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovCiYjNDM7CXByaXYtJmd0O2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3ByaXYtJmd0O2NvbnRyb2w7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOThmMmIwYjYzOTA5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKQEAgLTAsMCAmIzQzOzEsNTM2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjICZsdDtqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20mZ3Q7CiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLWNvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9waHlsaWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSUQJCQkJMHgwMDQ0MTQwMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSwlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVwlCSVQoOSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFRwkJCTB4MWYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0sJCQlHRU5NQVNLKDEyLCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8wCQkJCTAKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMQkJCQkxCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzIJCQkJMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV82CQkJCTYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOAkJCQk4CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQJQklUKDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSwkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTwkJMgomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHCQkweDEyCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUJMHg0ODI0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRQkJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRwkweDE3CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFCUJJVCgzKQomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0sJCUdFTk1BU0soMTQsIDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQJMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHCQkweDEwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFCTB4NTUyMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRQkJMHhmMDAwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHCTB4MTQKJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUJMHg3MDhmCiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4YgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHCQkJMHgxNQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLCQlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0sJCUdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcCiYjNDM7CShGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFwKJiM0MzsJQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUJCTB4MDBiYwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcJCTB4MWQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUwkweDAwNDQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSBcCiYjNDM7CShBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXAomIzQzOwkgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUykKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvcgomIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMAomIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlCiYjNDM7ICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7CiYjNDM7CWJvb2wgaXNfYWMzMDA7CiYjNDM7CWJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7CiYjNDM7CWJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsCiYjNDM7CQkJICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb24ocHJpdi0mZ3Q7Y29udHJvbCwKJiM0MzsJCQkJICAgICAgIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb2ZmKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7c2V0X2ludGVyZmFjZShwcml2LSZndDtjb250cm9sLAomIzQzOwkJCQkJICAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcGh5ZGV2X3dhcm4ocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXG4mIzM0OywKJiM0MzsJCQkgICAgRVJSX1BUUihyZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVtX2NlbGwgKmNlbGw7CiYjNDM7CXNpemVfdCBpOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwl1OCAqYnVmOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJY2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKGNlbGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoY2VsbCk7CiYjNDM7CiYjNDM7CWJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYW1wO2xlbik7CiYjNDM7CW52bWVtX2NlbGxfcHV0KGNlbGwpOwomIzQzOwlpZiAoSVNfRVJSKGJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihidWYpOwomIzQzOwlpZiAoIWxlbiB8fCBsZW4gJmd0OyBzaXplb2YoKnZhbHVlKSkgewomIzQzOwkJa2ZyZWUoYnVmKTsKJiM0MzsJCXJldHVybiBsZW4gPyAtRVJBTkdFIDogLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXZhbCB8PSAodTE2KWJ1ZltpXSAmbHQ7Jmx0OyAoOCAqIGkpOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwkqdmFsdWUgPSB2YWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlOwomIzQzOwlib29sIHNlbGVjdGFibGU7CiYjNDM7CWJvb2wgZml4ZWRfYWMzMDA7CiYjNDM7CWJvb2wgaGFzX2NvbmZpZ3VyYXRpb247CiYjNDM7CXU4IGNhbGlicmF0aW9uOwomIzQzOwl1MzIgYmFzZV9hZGRyOwomIzQzOwl1MTYgY29uZmlndXJhdGlvbiA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LSZndDtvZl9ub2RlKTsKJiM0MzsJaWYgKCFwYWNrYWdlX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2Jhc2VfYWRkcik7CiYjNDM7CWlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi0mZ3Q7bWRpby5hZGRyKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWZpeGVkX2FjMzAwID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWlmICghc2VsZWN0YWJsZSAmYW1wOyZhbXA7ICFmaXhlZF9hYzMwMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsKJiM0MzsJaGFzX2NvbmZpZ3VyYXRpb24gPQomIzQzOwkJb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgJiMzNDtudm1lbS1jZWxsLW5hbWVzJiMzNDssCiYjNDM7CQkJCQkgJiMzNDtjb25maWd1cmF0aW9uJiMzNDspICZndDs9IDA7CiYjNDM7CWlmIChoYXNfY29uZmlndXJhdGlvbikgewomIzQzOwkJcmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7LAomIzQzOwkJCQkJCSZhbXA7Y29uZmlndXJhdGlvbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKHNlbGVjdGFibGUgfHwgZml4ZWRfYWMzMDApIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDtwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzZWxlY3RhYmxlKSB7CiYjNDM7CQlwcml2LSZndDtpc19hYzMwMCA9CiYjNDM7CQkJY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPSBmaXhlZF9hYzMwMDsKJiM0MzsJCWlmIChoYXNfY29uZmlndXJhdGlvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPQomIzQzOwkJICAgIHByaXYtJmd0O2lzX2FjMzAwKSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljYWxpYnJhdGlvbiA9IEZJRUxEX0dFVChBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLLAomIzQzOwkJCQljb25maWd1cmF0aW9uKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPQomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkJISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpOwomIzQzOwlwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkID0KJiM0MzsJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsCiYjNDM7CQkJCSAgICAgICYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwKQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgY2FsaWJyYXRpb24pOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtjb250cm9sID0KJiM0MzsJCQlhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICBoYXNfY29uZmlndXJhdGlvbiwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzOwomIzQzO291dF9wdXRfbm9kZToKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLAomIzQzOwkJCQlBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCUFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O29mX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqLwomIzQzOwlyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwl1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtJmd0O2lzX2FjMzAwID8KJiM0MzsJCUFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOgomIzQzOwkJQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTsKJiM0MzsJdTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTsKJiM0MzsJdTE2IGdsb2JhbF9jb25maWc7CiYjNDM7CWludCBvbGRwYWdlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLAomIzQzOwkJCQkgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTsKJiM0MzsJaWYgKHByaXYtJmd0O3htaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpCiYjNDM7CQlnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRywKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQgfAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlhZmVfZXFfcnhfZGV0ZWN0ID0KJiM0MzsJCQlBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7CiYjNDM7CQl0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7CiYjNDM7CWlmIChvbGRwYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssCiYjNDM7CQkJCSAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIGFmZV9lcV9yeF9kZXRlY3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUcsIHR4X2xldmVsX3ZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpOwomIzQzOwomIzQzO291dF9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi8KJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi8KJiM0MzsJcmV0dXJuIGFjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJlc3VtZV9yZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7CiYjNDM7CQlpZiAocmVzdW1lX3JldCkKJiM0MzsJCQlwaHlkZXZfd2FybihwaHlkZXYsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgIEVSUl9QVFIocmVzdW1lX3JldCkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBtYXRjaDsKJiM0MzsKJiM0MzsJaWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovCiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0OykgfHwKJiM0MzsJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZSYjMzQ7KTsKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hdGNoOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLAomIzQzOwkJLm5hbWUgPSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFkmIzM0OywKJiM0MzsJCS5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLAomIzQzOwkJLnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSwKJiM0MzsJCS5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLAomIzQzOwkJLnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsCiYjNDM7CQkuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LAomIzQzOwkJLmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsCiYjNDM7CQkuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7CiYjNDM7CXsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0phbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKQEAgLTAsMCAmIzQzOzEsMjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQJMTYKJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlX25vZGU7CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7CiYjNDM7CWludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCXVuc2lnbmVkIGludCBwaHlfYWRkcik7CiYjNDM7CWludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7CiYjNDM7CWludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTsKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oIGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgKaW5kZXggYWFkOWM2YjUwNDYzNi4uM2U4MDRmYzFiMDNlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKIAogc3RydWN0IGRldmljZV9ub2RlOwomIzQzO3N0cnVjdCBkZXZpY2U7CiAKICNpZmRlZiBDT05GSUdfTUZEX1NZU0NPTgogc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwpAQCAtMzAsNiAmIzQzOzMxLDkgQEAgc3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCQkJCWNvbnN0IGNoYXIgKnByb3BlcnR5KTsKIGludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkgICAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApOwomIzQzO2ludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAomIzQzOwkJCQkgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CkBAIC03NSw2ICYjNDM7NzksMTQgQEAgc3RhdGljIGlubGluZSBpbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7ZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX19MSU5VWF9NRkRfU1lTQ09OX0hfXyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjEyMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBQYXRjaCBmb3IgRnV6emluZyBSZWFjaGFiaWxpdHkqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgbmV3IEV0aGVybmV0IFBIWSBwYWNrYWdlcyBmcm9tIFgtUG93ZXJzLCBzcGVjaWZpY2FsbHkgdGhlIEFDMjAwIGFuZCBBQzMwMC4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBkZXZpY2UgdHJlZSBiaW5kaW5ncywgS2NvbmZpZy9NYWtlZmlsZXMsIGFuZCBuZXcgZHJpdmVyIGZpbGVzIGZvciB0aGUgTXVsdGktRnVuY3Rpb24gRGV2aWNlIChNRkQpIGFuZCB0aGUgUEhZIGl0c2VsZi4gTXkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHN5emthbGxlciwgb3IgYW55IGZ1enppbmcgc2V0dXAsIGNhbiBhY3R1YWxseSByZWFjaCB0aGlzIG5ldyBjb2RlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSByZWxpYW5jZSBvbiBkZXZpY2UgdHJlZSBub2Rlcy4KCkkmIzM5O3ZlIGdvdCBhbiBNRkQgZHJpdmVyIChgYWMyMDAuY2ApIGFuZCBhIFBIWSBkcml2ZXIgKGBhY3gwMC5jYCBhbmQgYXNzb2NpYXRlZCBmaWxlcykuIFRoZSBgc3lzY29uLmNgIGZpbGUgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWRkIGEgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCYjMzk7cyBjb3JlIGtlcm5lbCBsb2dpYywgYSBjb21tb24gZW50cnkgcG9pbnQgZm9yIHBvdGVudGlhbCBmdXp6aW5nLiBUaGlzIGlzIHRoZSBmaXJzdCB0aGluZyB0byBwcm9iZSBmb3IgcmVhY2hhYmlsaXR5LgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgaW5zdGFudGlhdGlvbiBtZXRob2RzLiBDYW4gSSBpbnN0YW50aWF0ZSB0aGVzZSBkZXZpY2VzIHRocm91Z2ggSTJDIG9yIE1ESU8gc3lzZnMgZW50cmllcywgb3IgZXZlbiB2aXJ0dWFsIGRldmljZSB0cmVlIG1hbmlwdWxhdGlvbj8gVGhlIGFuc3dlciwgYXQgbGVhc3Qgc3RyYWlnaHRmb3J3YXJkbHksIGlzIG5vLiAgVGhlIFBIWSBkcml2ZXIgKGBhY3gwMF9lcGh5X3Byb2JlYCkgZXhwbGljaXRseSBjaGVja3MgZm9yIGEgYGRldi0mZ3Q7b2Zfbm9kZWAgYW5kIHJldHVybnMgYC1FTk9ERVZgIGlmIGl0JiMzOTtzIG5vdCBwcmVzZW50LiAgVGhlIE1GRCBkcml2ZXIgKGBhYzIwMF9wcm9iZWApIGFsc28gdXNlcyBgZGV2LSZndDtvZl9ub2RlYCBpbiB0aGUgY3JpdGljYWwgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgY2FsbC4gIElmIEkgdHJ5IHRvIGluc3RhbnRpYXRlIHRoZXNlIGRldmljZXMgd2l0aCBzeXNmcyBgbmV3X2RldmljZWAsIHRoZXJlJiMzOTtzIG5vIHdheSB0byBhdHRhY2ggYSBEVCBub2RlLgoKU3l6a2FsbGVyIGRvZXMgaGF2ZSBsaW1pdGVkIEkyQy9NRElPIHN1cHBvcnQsIHR5cGljYWxseSB1c2VkIHZpYSBgL2Rldi9pMmMtKmAgZGV2aWNlcy4gSG93ZXZlciwgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGF1dG9tYXRpY2FsbHkgKnByb2JlKiBkcml2ZXJzIHVubGVzcyB0aGUgZGV2aWNlIGlzIHByb3Blcmx5IGluc3RhbnRpYXRlZCwgYW5kIGNlcnRhaW5seSBpc24mIzM5O3QgZ29pbmcgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9uIGRlbWFuZC4gIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGl0JiMzOTtzIGRpZmZpY3VsdCB0byBnZXQgdGhhdCBub2RlIHNldCB1cCBkeW5hbWljYWxseSwgYW5kIGJvdGggcHJvYmVzIHdpbGwgZmFpbC4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRoZSB1c2Ugb2YgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAuIEl0ICppcyogYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgYnV0IGl0cyBvbmx5IGV4cGxpY2l0IHVzZSBpbiB0aGUgcGF0Y2ggaXMgd2l0aGluIHRoZSBgYWMyMDAuY2AgZmlsZS4gIFdoaWxlIHRoZSBtb2RpZmljYXRpb24gKnNlZW1zKiBpbXBhY3RmdWwgdG8gY29yZSBjb2RlLCBpZiBgYWMyMDBfcHJvYmVgIGlzIG5ldmVyIGNhbGxlZCwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBub3QgYmUgdGVzdGVkLgoKSSB0aG91Z2h0IGFib3V0IHRoZSBwb3RlbnRpYWwgdG8gaW5zdGFudGlhdGUgdGhlIEkyQyBkZXZpY2UgdmlhIHN5c2ZzIC0gYXMgaW4sIGVjaG8gdGhlIGRldmljZSBhbmQgYWRkcmVzcywgYW5kIHRyeSB0byBoYXZlIGl0IGJpbmQuIFRoaXMgd291bGQgY2FsbCBgYWMyMDBfcHJvYmVgLiBBbmQgaXQgKndvdWxkKiwgYnV0IHRoZW4gdGhlIGBkZXZtX2Nsa19nZXRfZW5hYmxlZGAgZnVuY3Rpb24gd291bGQgZmFpbCB3aXRoIGAtRU5PRU5UYCBiZWNhdXNlIHRoZSBjbGsgbm9kZSBpcyBhbHNvIG1pc3NpbmcgZnJvbSB0aGUgZGV2aWNlIHRyZWUgYW5kIHRoZSBNRkQgY29kZSByZXF1aXJlcyBpdCB0byBiZSBwcmVzZW50LgoKU28sIHJlYWxpc3RpY2FsbHksICpuZWl0aGVyKiBkcml2ZXIgaXMgbGlrZWx5IHRvIGV4ZWN1dGUgYW55IHNpZ25pZmljYW50IGNvZGUgcGF0aCB3aXRob3V0IGEgKndlbGwtZGVmaW5lZCogZGV2aWNlIHRyZWUgbm9kZS4gVGhlcmVmb3JlLCB0aGUgcmVmYWN0b3JlZCBzeXNjb24gQVBJIGlzIHVubGlrZWx5IHRvIGJlIHRlc3RlZCwgdG9vLgoKSG93ZXZlciwgdGhlIHJlZmFjdG9yaW5nIGl0c2VsZiBpcyBhIGNoYW5nZSB0byBjb3JlIGBzeXNjb24uY2AgY29kZS4gVGhlIGZ1bmN0aW9uIG5hbWUgYG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgIGFscmVhZHkgZXhpc3RlZCBhbmQgb25seSB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gd2FzIG1vZGlmaWVkIHRvIHVzZSBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbGAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHVzZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgc28gdGhpcyBjaGFuZ2UgKmNvdWxkKiBiZSByZWFjaGFibGUgaWYgdGhlcmUgaXMgYW5vdGhlciBjYWxsIHRvIGl0LgoKVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgd2hpbGUgSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGFkZGluZyBzdXBwb3J0LCB0aGF0IGNvZGUgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBjcmFmdGluZyBhIHNwZWNpZmljIGRldmljZSB0cmVlLCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIHN5emthbGxlciB0eXBpY2FsbHkgZG9lcyBhdXRvbWF0aWNhbGx5IGZvciBhcmJpdHJhcnkgZHJpdmVycyBhbmQgaXQgaXMgdW5saWtlbHkgdG8gdGVzdCB0aGUgZHJpdmVycyBpZiBJIGp1c3QgZGVjbGFyZSB0aGF0IGNvZGUgaXMgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWZkL2FjMjAwLmM9NzQ9c3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvbWZkL2FjMjAwLmMtMTMwLVxuZHJpdmVycy9tZmQvYWMyMDAuYzoxMzE6XHRyZXQgPSBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoZGV2LCBkZXYtXHUwMDNlb2Zfbm9kZSxcbmRyaXZlcnMvbWZkL2FjMjAwLmMtMTMyLVx0XHRcdFx0XHQgICAgIGRkYXRhLVx1MDAzZXJlZ21hcCk7XG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmM9MTk3PXN0YXRpYyBzdHJ1Y3Qgc3lzY29uICpcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjE5ODpvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG5kcml2ZXJzL21mZC9zeXNjb24uYy0xOTktXHRcdFx0XHQgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjMwLS8qKlxuZHJpdmVycy9tZmQvc3lzY29uLmM6MjMxOiAqIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIHJlZ21hcCBmb3Igc3BlY2lmaWVkIGRldmljZSBub2RlXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yMzItICogQG5wOiBEZXZpY2UgdHJlZSBub2RlXG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjQwLSAqL1xuZHJpdmVycy9tZmQvc3lzY29uLmM6MjQxOmludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI0Mi17XG5kcml2ZXJzL21mZC9zeXNjb24uYzoyNDM6XHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwobnAsIHJlZ21hcCkpO1xuZHJpdmVycy9tZmQvc3lzY29uLmMtMjQ0LX1cbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI0NTpFWFBPUlRfU1lNQk9MX0dQTChvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTtcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI0Ni1cbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI0NzpzdGF0aWMgdm9pZCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSh2b2lkICpkYXRhKVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjQ4LXtcbi0tXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNTktLyoqXG5kcml2ZXJzL21mZC9zeXNjb24uYzoyNjA6ICogZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciBhIG1hbmFnZWQgZXh0ZXJuYWwgc3lzY29uIHJlZ21hcFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjYxLSAqIEBkZXY6IERldmljZSB0aGF0IG93bnMgdGhlIHJlZ21hcFxuLS1cbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI3MC0gKi9cbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI3MTppbnQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI3Mi1cdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjc2LVxuZHJpdmVycy9tZmQvc3lzY29uLmM6Mjc3Olx0c3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKTtcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI3OC1cdGlmIChJU19FUlIoc3lzY29uKSlcbi0tXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODEtXHRyZXR1cm4gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldixcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI4MjpcdFx0XHRcdFx0ZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2UsXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODMtXHRcdFx0XHRcdHN5c2Nvbik7XG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODQtfVxuZHJpdmVycy9tZmQvc3lzY29uLmM6Mjg1OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7XG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODYtXG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmM9MzAyPUVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9ub2RlX3RvX3JlZ21hcCk7XG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMzEwLSAqIGZ1bmN0aW9uIGlzIHNhZmUgdG8gdXNlIGZvciBhIHN5c2NvbiByZWdpc3RlcmVkIHdpdGhcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjMxMTogKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkuXG5kcml2ZXJzL21mZC9zeXNjb24uYy0zMTItICpcbi0tXG5kcml2ZXJzL3NvYy9yZW5lc2FzL3J6LXN5c2MuYz0xMDc9c3RhdGljIGludCByel9zeXNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmMtMTUxLVxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmM6MTUyOlx0cmV0dXJuIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoZGV2LVx1MDAzZW9mX25vZGUsIHJlZ21hcCk7XG5kcml2ZXJzL3NvYy9yZW5lc2FzL3J6LXN5c2MuYy0xNTMtfVxuLS1cbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jPTQxMD1zdGF0aWMgaW50IHNldHVwX2NwdWhwX2FuZF9jcHVpZGxlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3NvYy9zYW1zdW5nL2V4eW5vcy1wbXUuYy00NDgtXHQvKiByZWdpc3RlciBjdXN0b20gbW1pbyByZWdtYXAgd2l0aCBzeXNjb24gKi9cbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jOjQ0OTpcdHJldCA9IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoaW50cl9nZW5fbm9kZSxcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTQ1MC1cdFx0XHRcdFx0cG11X2NvbnRleHQtXHUwMDNlcG11aW50cmdlbik7XG4tLVxuZHJpdmVycy9zb2Mvc2Ftc3VuZy9leHlub3MtcG11LmM9NDc2PXN0YXRpYyBpbnQgZXh5bm9zX3BtdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTUxNi1cbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jOjUxNzpcdFx0cmV0ID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYtXHUwMDNlb2Zfbm9kZSwgcmVnbWFwKTtcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTUxOC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3NvYy9zdW54aS9zdW54aV9zcmFtLmM9NDA4PXN0YXRpYyBpbnQgX19pbml0IHN1bnhpX3NyYW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3NvYy9zdW54aS9zdW54aV9zcmFtLmMtNDMxLVxuZHJpdmVycy9zb2Mvc3VueGkvc3VueGlfc3JhbS5jOjQzMjpcdFx0cmV0ID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYtXHUwMDNlb2Zfbm9kZSwgcmVnbWFwKTtcbmRyaXZlcnMvc29jL3N1bnhpL3N1bnhpX3NyYW0uYy00MzMtXHRcdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmg9MzA9c3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtMzEtXHRcdFx0XHRcdFx0XHRjb25zdCBjaGFyICpwcm9wZXJ0eSk7XG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaDozMjppbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtMzMtXHRcdFx0ICAgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKTtcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjM0OmludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtMzUtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oPTY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChcbi0tXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaC03NS1cbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjc2OnN0YXRpYyBpbmxpbmUgaW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oLTc3LVx0XHRcdFx0XHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4tLVxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmg9ODI9c3RhdGljIGlubGluZSBpbnRcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjgzOmRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaC04NC1cdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQwNAoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA0MDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHJlZmFjdG9ycyBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgYW5kIGFkZHMgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBvcmlnaW5hbCBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgaXMgdXNlZCBieSBhIGZldyBTb0Mtc3BlY2lmaWMgZHJpdmVycyAoYGV4eW5vcy1wbXUuY2AsIGByei1zeXNjLmNgLCBhbmQgYHN1bnhpX3NyYW0uY2ApLiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHNvbWUgY29yZSBzeXNjb24gY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcm5hbCByZWdpc3RyYXRpb24gZnVuY3Rpb24uIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGl0IG5vdyB1c2VzIGBvZl9ub2RlX2dldCgpYCB0byB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2Ugbm9kZSwgZml4aW5nIGEgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZSwgd2hpY2ggaXMgZ29vZC4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIG1pbm9yIGRpZmZlcmVuY2UgaW4gbWVtb3J5IGFsbG9jYXRpb24uIEkgYWxzbyBzZWUgdGhhdCB0aGVyZSYjMzk7cyBhIG5ldyBgYWMyMDBgIE1GRCBkcml2ZXIgYW5kIGBhY3gwMGAgUEhZIGRyaXZlciBpbmNsdWRlZCBpbiB0aGlzIHBhdGNoLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgYnkgc3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIHRlc3QgZW52aXJvbm1lbnRzLCBwcmltYXJpbHkgeDg2XzY0IGFuZCBBUk02NCBgdmlydGAuIEkga25vdyBzeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IHJ1biB0aGVzZSBzcGVjaWZpYyBTb0NzLCBhbmQgc28sIHRoZSBTb0MgZHJpdmVycyB0aGF0IHVzZSBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgYXJlIGxpa2VseSB1bnJlYWNoYWJsZS4gQnV0LCBpcyB0aGUgY29yZSBmdW5jdGlvbiBhZmZlY3RlZCBieSB0aGUgcGF0Y2ggcmVhY2hhYmxlPwoKTGV0JiMzOTtzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRob3NlIG5ldyBkcml2ZXJzLiBgYWMyMDBfcHJvYmVgIGlzIGFuIEkyQyBwcm9iZSBmdW5jdGlvbiwgYW5kIHRoZSBgYWN4MDBfZXBoeV9wcm9iZWAgaXMgYSBNRElPIFBIWSBwcm9iZSBmdW5jdGlvbi4gRm9yIGJvdGggb2YgdGhlbSwgdGhlIGRldmljZSB0cmVlIG5vZGUgKGBvZl9ub2RlYCkgaXMgY3JpdGljYWwuIEluIHRoZSBgYWMyMDBgIGNhc2UsIEkgbm90aWNlZCB0aGUgZnVuY3Rpb24gY2FsbHMgYGRldm1fY2xrX2dldF9lbmFibGVkYC4gSWYgbm8gY2xvY2sgaXMgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gbm9kZSwgaXQgcmV0dXJucyBhbiBlcnJvciBhbmQgdGhlIHByb2JlIGZhaWxzLiBGb3IgYGFjeDAwYCwgdGhlIHByb2JlIHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBkZXZpY2UgZG9lc24mIzM5O3QgaGF2ZSBhbiBgb2Zfbm9kZWAuIEkgYWxzbyBzZWUgdGhhdCB0aGUgUEhZIGRyaXZlciB1c2VzIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGZvciBkZXZpY2UgbWF0Y2hpbmcgYGdlbnBoeV9tYXRjaF9waHlfZGV2aWNlYCwgd2hpY2ggZmFpbHMgaWYgYG9mX25vZGVgIGlzIGBOVUxMYC4KCkNhbiBzeXprYWxsZXIgY3JlYXRlIGEgc2l0dWF0aW9uIHdoZXJlIHRoZXNlIGRyaXZlcnMmIzM5OyBwcm9iZXMgZ2V0IGNhbGxlZD8gSSBjYW4gdHJ5IHRvIGNyZWF0ZSBhbiBJMkMgb3IgTURJTyBkZXZpY2UgdmlhIHN5c2ZzIGluIGEgdmlydHVhbGl6ZWQgUUVNVS9HQ0UgZW52aXJvbm1lbnQuIEJ1dCB0aGUgY3J1Y2lhbCBpc3N1ZSBpcyB0aGUgZGV2aWNlIHRyZWUgbm9kZS4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGN1cnJlbnRseSBpbmplY3QgRFQgb3ZlcmxheXMsIGFuZCB3aXRob3V0IHRoZSBEVCBub2RlLCB0aGUgZHJpdmVycyB3aWxsIG5vdCBpbml0aWFsaXplIHByb3Blcmx5LiBXaXRob3V0IGEgdmFsaWQgYG9mX25vZGVgLCB0aGVzZSBkcml2ZXJzIHdvbiYjMzk7dCBleGVjdXRlIGFueSBzaWduaWZpY2FudCBjb2RlIHBhdGhzLCByZXR1cm5pbmcgZWFybHkgb3IgZmFpbGluZyBhdCBgZGV2bV9jbGtfZ2V0X2VuYWJsZWRgLiBUaGUgYGFjeDAwYCBkcml2ZXIgd2lsbCBhbHNvIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGVyZSBpcyBubyBub2RlIGF2YWlsYWJsZS4KClNvLCBJJiMzOTttIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IG90aGVyIHdheXMgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsYCBvciB0aGUgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGA/IEZyb20gYSBjb2RlIHNlYXJjaCwgSSBzZWUgdGhhdCB0aGlzIGlzIG5vdCBwb3NzaWJsZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBjYWxsZWQgYnkgdGhlIGRyaXZlciBwcm9iZXMgYW5kIHRob3NlIGFyZSB0aGUgb25seSBwbGFjZXMuCgpPa2F5LCBsZXQgbWUgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYWdhaW46IHRoZSBwYXRjaCBoYXMgc29tZSBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIFRoYXQgaXMgbXkgY29uY2x1c2lvbi4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHJlZmFjdG9yZWQgY29kZSBwYXRoIGlzIG5vdCBlYXNpbHkgcmVhY2hhYmxlIGluIHRoZSBzeXprYWxsZXIgc2V0dXAsIGFuZCB0aGUgZHJpdmVycyBkZXBlbmQgb24gZGV2aWNlIHRyZWUgbm9kZXMgdGhhdCBhcmUgbm90IGVhc2lseSBwcm92aWRlZCwgdGhlIHBhdGNoIGlzIHVubGlrZWx5IHRvIHVuY292ZXIgYW55IG1lYW5pbmdmdWwgbmV3IGZ1enppbmcgdGFyZ2V0cyBpbiBteSB0eXBpY2FsIHRlc3QgZW52aXJvbm1lbnQsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBkcml2ZXJzIGZvciBYLVBvd2VycyBBQzIwMCBNRkQgYW5kIEFDeDAwIEV0aGVybmV0IFBIWXMsIHdoaWNoIHN0cmljdGx5IHJlcXVpcmUgZGV2aWNlIHRyZWUgbm9kZXMgKG9mX25vZGUpIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gU2luY2Ugc3l6a2FsbGVyIGRvZXMgbm90IGR5bmFtaWNhbGx5IGdlbmVyYXRlIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcywgYW5kIHRoZXNlIGRldmljZXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBkZWZhdWx0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VICYjMzk7dmlydCYjMzk7IG9yIHg4Nl82NCksIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBUaGUgbWlub3IgcmVmYWN0b3JpbmcgaW4gc3lzY29uLmMgaXMgb25seSByZWFjaGFibGUgdmlhIFNvQy1zcGVjaWZpYyBkcml2ZXJzIChFeHlub3MsIFN1bnhpLCBSZW5lc2FzKSB0aGF0IGFyZSBhbHNvIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZHJpdmVycyBmb3IgWC1Qb3dlcnMgQUMyMDAgTUZEIGFuZCBBQ3gwMCBFdGhlcm5ldCBQSFlzLCB3aGljaCBzdHJpY3RseSByZXF1aXJlIGRldmljZSB0cmVlIG5vZGVzIChvZl9ub2RlKSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIFNpbmNlIHN5emthbGxlciBkb2VzIG5vdCBkeW5hbWljYWxseSBnZW5lcmF0ZSBhcmJpdHJhcnkgZGV2aWNlIHRyZWUgbm9kZXMsIGFuZCB0aGVzZSBkZXZpY2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZGVmYXVsdCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSAmIzM5O3ZpcnQmIzM5OyBvciB4ODZfNjQpLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gVGhlIG1pbm9yIHJlZmFjdG9yaW5nIGluIHN5c2Nvbi5jIGlzIG9ubHkgcmVhY2hhYmxlIHZpYSBTb0Mtc3BlY2lmaWMgZHJpdmVycyAoRXh5bm9zLCBTdW54aSwgUmVuZXNhcykgdGhhdCBhcmUgYWxzbyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIwOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMDozODo0MS4wNTQ0MTA3MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjUxMjU2NTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZHJpdmVycyBmb3IgWC1Qb3dlcnMgQUMyMDAgTUZEIGFuZCBBQ3gwMCBFdGhlcm5ldCBQSFlzLCB3aGljaCBzdHJpY3RseSByZXF1aXJlIGRldmljZSB0cmVlIG5vZGVzIChvZl9ub2RlKSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIFNpbmNlIHN5emthbGxlciBkb2VzIG5vdCBkeW5hbWljYWxseSBnZW5lcmF0ZSBhcmJpdHJhcnkgZGV2aWNlIHRyZWUgbm9kZXMsIGFuZCB0aGVzZSBkZXZpY2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZGVmYXVsdCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSAndmlydCcgb3IgeDg2XzY0KSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuIFRoZSBtaW5vciByZWZhY3RvcmluZyBpbiBzeXNjb24uYyBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgU29DLXNwZWNpZmljIGRyaXZlcnMgKEV4eW5vcywgU3VueGksIFJlbmVzYXMpIHRoYXQgYXJlIGFsc28gbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjA6Mzg6NDEuMDU0NDE3ODc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU5NzA5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkOTRhNWE5OWM1NWU5NTZhMmZmYTBiYTA1NzVhZmEwMDE0NmE1MGM0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMjA6Mzg6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi42MDk4MzFiMTVjODA2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxcbkBAIC0wLDAgKzEsNDkgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIElDXFxuK1xcbittYWludGFpbmVyczpcXG4rICAtIEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246XFxuKyAgVGhlIEFDMjAwIGlzIGEgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQyBjb250YWluaW5nIGF1ZGlvLCB2aWRlbywgUlRDIGFuZFxcbisgIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucy4gSXRzIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBvdmVyIEkyQy5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMFxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEFDMjAwIGlucHV0IGNsb2NrLiBXaGVuIHVzaW5nIHRoZSBFdGhlcm5ldCBQSFksIGl0cyBjb25maWd1cmVkIHJhdGUgbXVzdFxcbisgICAgICBiZSAyNCBvciAyNyBNSHosIG1hdGNoaW5nIHRoZSByYXRlcyBlbmNvZGVkIGJ5IHRoZSBkb2N1bWVudGVkIEVQSFkgY2xvY2tcXG4rICAgICAgc2VsZWN0b3IuXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHJlZ1xcbisgIC0gY2xvY2tzXFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgaTJjIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgbWl4ZWQtc2lnbmFsQDEwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzIwMFxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MweDEwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuKy4uLlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWUwYzVlOTgwYzM5ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxuQEAgLTAsMCArMSwyMDcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XFxuKyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxcbisgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsXFxuKyAgd2hpbGUgQUMzMDAgY29udHJvbCByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2XFxuKyAgcGx1cyB0aGUgbGluayBQSFkgYWRkcmVzcy5cXG4rXFxuKyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxcbisgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLlxcbitcXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcXG4rICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kXFxuKyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xcbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxcbitcXG4rc2VsZWN0OlxcbisgIHByb3BlcnRpZXM6XFxuKyAgICBjb21wYXRpYmxlOlxcbisgICAgICBlbnVtOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXG4rICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgIHJlcXVpcmVkOlxcbisgICAgLSBjb21wYXRpYmxlXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbitcXG4rICByZWc6XFxuKyAgICBtYXhpbXVtOiAzMVxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2tcXG4rICAgICAgYmVsb25ncyB0byB0aGUgcmVmZXJlbmNlZCBBQzIwMCBNRkQgaW5zdGVhZC5cXG4rXFxuKyAgdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzFcXG4rICAgICAgb24gQUMzMDAuXFxuK1xcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxcbisgICAgICBjb3B5IGluc3RlYWQuXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxcbitcXG4rICB4LXBvd2VycyxhYzIwMDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgdG8gdGhlIEFDMjAwIE1GRCBjb250YWluaW5nIHRoaXMgRXRoZXJuZXQgUEhZXFxuK1xcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XFxuKyAgICB0eXBlOiBib29sZWFuXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxcbitcXG4rcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxcbisgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXFxuKyAgICBwcm9wZXJ0aWVzOlxcbisgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXG4rICAgIHJlcXVpcmVkOlxcbisgICAgICAtIGNvbXBhdGlibGVcXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gdmNjLXN1cHBseVxcbitcXG4rZGVwZW5kZW50UmVxdWlyZWQ6XFxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXFxuKyAgbnZtZW0tY2VsbC1uYW1lczogWyBudm1lbS1jZWxscyBdXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjbG9ja3M6IGZhbHNlXFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJlZzpcXG4rICAgICAgICAgIG1heGltdW06IDdcXG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6XFxuKyAgICAgICAgICBtYXhpbXVtOiA3XFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gY2xvY2tzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rXFxuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnB3bSA1XFx1MDAzZTtcXG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXFx1MDAzY1xcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXFxcImNvbmZpZ3VyYXRpb25cXFwiO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXFwiO1xcbisgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcXHUwMDNjXFx1MDAyNnJlZ18zdjNcXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJjb25maWd1cmF0aW9uXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcXG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxcIjtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgLSB8XFxuKyAgICBtZGlvIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMSB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcXHUwMDNjXFx1MDAyNnJlZ18zdjNcXHUwMDNlO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJjb25maWd1cmF0aW9uXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAxIHtcXG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxcIjtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rLi4uXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXFxuaW5kZXggNzYzY2U2YTM0NzgyYi4uOTVlM2M2Mjc0MmJiNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xcbkBAIC0yMDUsNiArMjA1LDE4IEBAIGNvbmZpZyBNRkRfQUMxMDBcXG4gXFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcXG4gXFx0ICBjb21wb25lbnRzIGxpa2UgY29kZWNzIG9yIFJUQyB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy5cXG4gXFxuK2NvbmZpZyBNRkRfQUMyMDBcXG4rXFx0dHJpc3RhdGUgXFxcIlgtUG93ZXJzIEFDMjAwXFxcIlxcbitcXHRkZXBlbmRzIG9uIEkyQ1xcbitcXHRkZXBlbmRzIG9uIE9GXFxuK1xcdHNlbGVjdCBNRkRfU1lTQ09OXFxuK1xcdHNlbGVjdCBSRUdNQVBfSTJDXFxuK1xcdGhlbHBcXG4rXFx0ICBTdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQy4gVGhlIEFDMjAwXFxuK1xcdCAgY29udGFpbnMgYXVkaW8sIHZpZGVvLCBSVEMgYW5kIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucyBhbmQgaXNcXG4rXFx0ICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXFxuK1xcdCAgdGhlIHNoYXJlZCByZWdpc3RlciBhY2Nlc3MgdXNlZCBieSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkcml2ZXJzLlxcbitcXG4gY29uZmlnIE1GRF9BWFAyMFhcXG4gXFx0dHJpc3RhdGVcXG4gXFx0c2VsZWN0IE1GRF9DT1JFXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcXG5pbmRleCBkZDRiYjdlNzdjMzM2Li44OTBlNzZhOWFkMDBhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcXG5AQCAtMTUwLDYgKzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSlcXHQrPSBkYTkwNTItc3BpLm9cXG4gb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfSTJDKVxcdCs9IGRhOTA1Mi1pMmMub1xcbiBcXG4gb2JqLSQoQ09ORklHX01GRF9BQzEwMClcXHRcXHQrPSBhYzEwMC5vXFxuK29iai0kKENPTkZJR19NRkRfQUMyMDApXFx0XFx0Kz0gYWMyMDAub1xcbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWClcXHQrPSBheHAyMHgub1xcbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWF9JMkMpXFx0Kz0gYXhwMjB4LWkyYy5vXFxuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX1JTQilcXHQrPSBheHAyMHgtcnNiLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWMyMDAuYyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI1MDY2YmIzNmFjNzZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9tZmQvYWMyMDAuY1xcbkBAIC0wLDAgKzEsMTcwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogTUZEIGNvcmUgZHJpdmVyIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICpcXG4rICogQmFzZWQgb24gdGhlIEFDMTAwIGRyaXZlcjpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE2IENoZW4tWXUgVHNhaVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9SRUdcXHRcXHRcXHQweDAwMDBcXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9QQUNLQUdFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9DSElQX01BU0tcXHRcXHRHRU5NQVNLKDExLCAwKVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfQ09OVFJPTF9SRUdcXHRcXHRcXHQweDAwMDJcXG4rI2RlZmluZSBBQzIwMF9TWVNfQ09OVFJPTF9DSElQX1JFU0VUX0RFQVNTRVJUXFx0QklUKDApXFxuK1xcbisvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovXFxuKyNkZWZpbmUgQUMyMDBfVFdJX1JFR19BRERSX0hcXHQweDAwZmVcXG4rI2RlZmluZSBBQzIwMF9NQVhfUkVHXFx0XFx0MHhhMWYyXFxuK1xcbitzdHJ1Y3QgYWMyMDAge1xcbitcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZV9jZmcgYWMyMDBfcmFuZ2VfY2ZnW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0LnJhbmdlX21heCA9IEFDMjAwX01BWF9SRUcsXFxuK1xcdFxcdC5zZWxlY3Rvcl9yZWcgPSBBQzIwMF9UV0lfUkVHX0FERFJfSCxcXG4rXFx0XFx0LnNlbGVjdG9yX21hc2sgPSAweGZmLFxcbitcXHRcXHQud2luZG93X2xlbiA9IDI1NixcXG4rXFx0fSxcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIEVhY2ggQUMyMDAgc3ViLWJsb2NrIGNhbiByZXNldCBpbmRlcGVuZGVudGx5LCBpbnZhbGlkYXRpbmcgaXRzIHJlZ2lzdGVyXFxuKyAqIGNvbnRlbnRzIHdpdGhvdXQgcmVnbWFwJ3Mga25vd2xlZGdlLiBDYWNoZSBvbmx5IHRoZSBjb21tb24gcGFnZSBzZWxlY3RvcjtcXG4rICogdGhpcyBhdm9pZHMgYSBzZWxlY3RvciByZWFkLW1vZGlmeS13cml0ZSBmb3IgZXZlcnkgYWNjZXNzIG9uIHRoZSBzYW1lIHBhZ2VcXG4rICogd2l0aG91dCBldmVyIHJldHVybmluZyBzdGFsZSBmdW5jdGlvbmFsLXJlZ2lzdGVyIHZhbHVlcy5cXG4rICovXFxuK3N0YXRpYyBib29sIGFjMjAwX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIHJlZyAhPSBBQzIwMF9UV0lfUkVHX0FERFJfSDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGFjMjAwX3JlZ21hcF9jb25maWcgPSB7XFxuK1xcdC5uYW1lID0gXFxcImFjMjAwXFxcIixcXG4rXFx0LnJlZ19iaXRzID0gOCxcXG4rXFx0LnJlZ19zdHJpZGUgPSAyLFxcbitcXHQudmFsX2JpdHMgPSAxNixcXG4rXFx0LnJhbmdlcyA9IGFjMjAwX3JhbmdlX2NmZyxcXG4rXFx0Lm51bV9yYW5nZXMgPSBBUlJBWV9TSVpFKGFjMjAwX3JhbmdlX2NmZyksXFxuK1xcdC5tYXhfcmVnaXN0ZXIgPSBBQzIwMF9NQVhfUkVHLFxcbitcXHQudm9sYXRpbGVfcmVnID0gYWMyMDBfdm9sYXRpbGVfcmVnLFxcbitcXHQuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX01BUExFLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgYWMyMDBfZGlzYWJsZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMCAqZGRhdGEgPSBkYXRhO1xcbitcXG4rXFx0cmVnbWFwX3dyaXRlKGRkYXRhLVxcdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuK1xcdHVuc2lnbmVkIGludCB2ZXJzaW9uO1xcbitcXHRzdHJ1Y3QgYWMyMDAgKmRkYXRhO1xcbitcXHRzdHJ1Y3QgY2xrICpjbGs7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFkZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRjbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKGNsaykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihjbGspLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIGNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxcXFxuXFxcIik7XFxuK1xcbitcXHRkZGF0YS1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcXHUwMDI2YWMyMDBfcmVnbWFwX2NvbmZpZyk7XFxuK1xcdGlmIChJU19FUlIoZGRhdGEtXFx1MDAzZXJlZ21hcCkpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZGF0YS1cXHUwMDNlcmVnbWFwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRkYXRhKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vIG1pbmltdW0gZGVsYXkgaXMgZG9jdW1lbnRlZC4gTWF0Y2ggdGhlIHZlbmRvciBkcml2ZXIncyA0MCBtcyBkZWxheVxcbitcXHQgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suXFxuK1xcdCAqL1xcbitcXHRtc2xlZXAoNDApO1xcbitcXG4rXFx0cmV0ID0gcmVnbWFwX3JlYWQoZGRhdGEtXFx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX1ZFUlNJT05fUkVHLCBcXHUwMDI2dmVyc2lvbik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVhZCBjaGlwIHZlcnNpb25cXFxcblxcXCIpO1xcbitcXG4rXFx0ZGV2X2luZm8oZGV2LCBcXFwiQUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0IEZJRUxEX0dFVChBQzIwMF9TWVNfVkVSU0lPTl9DSElQX01BU0ssIHZlcnNpb24pLFxcbitcXHRcXHQgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTSywgdmVyc2lvbikpO1xcbitcXG4rXFx0LyogUmVzZXQgdGhlIGNoaXAgYWZ0ZXIgZGVwZW5kZW50IGZ1bmN0aW9uIGRyaXZlcnMgaGF2ZSB1bmJvdW5kLiAqL1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzIwMF9kaXNhYmxlLCBkZGF0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdtYXBfd3JpdGUoZGRhdGEtXFx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgIEFDMjAwX1NZU19DT05UUk9MX0NISVBfUkVTRVRfREVBU1NFUlQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKGRldiwgZGV2LVxcdTAwM2VvZl9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRkYXRhLVxcdTAwM2VyZWdtYXApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ21hcFxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4re1xcbitcXHRhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzIwMFxcXCIgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XFxuK1xcdHsgLm5hbWUgPSBcXFwiYWMyMDBcXFwiIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWMyMDBfaTJjX2lkcyk7XFxuK1xcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJhYzIwMFxcXCIsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmUgPSBhYzIwMF9wcm9iZSxcXG4rXFx0LnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sXFxuK1xcdC5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsXFxuK307XFxuK21vZHVsZV9pMmNfZHJpdmVyKGFjMjAwX2RyaXZlcik7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYLVBvd2VycyBBQzIwMCBNRkQgY29yZSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zeXNjb24uYyBiL2RyaXZlcnMvbWZkL3N5c2Nvbi5jXFxuaW5kZXggMjFhN2ZjZGQyNzM3OS4uNDQ4NDIyZmU0ZjIxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21mZC9zeXNjb24uY1xcbisrKyBiL2RyaXZlcnMvbWZkL3N5c2Nvbi5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9od3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuQEAgLTE5Myw1MyArMTk0LDk1IEBAIHN0YXRpYyBzdHJ1Y3QgcmVnbWFwICpkZXZpY2Vfbm9kZV9nZXRfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIFxcdHJldHVybiBzeXNjb24tXFx1MDAzZXJlZ21hcDtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIHJlZ21hcCBmb3Igc3BlY2lmaWVkIGRldmljZSBub2RlXFxuLSAqIEBucDogRGV2aWNlIHRyZWUgbm9kZVxcbi0gKiBAcmVnbWFwOiBQb2ludGVyIHRvIHJlZ21hcCBvYmplY3RcXG4tICpcXG4tICogUmVnaXN0ZXIgYW4gZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcCBvYmplY3Qgd2l0aCBzeXNjb24gZm9yIHRoZSBzcGVjaWZpZWRcXG4tICogZGV2aWNlIHRyZWUgbm9kZS4gVGhpcyByZWdtYXAgd2lsbCB0aGVuIGJlIHJldHVybmVkIHRvIGNsaWVudCBkcml2ZXJzIHVzaW5nXFxuLSAqIHRoZSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKCkgQVBJLlxcbi0gKlxcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbi0gKi9cXG4taW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHJlZ21hcCAqcmVnbWFwKVxcbitzdGF0aWMgc3RydWN0IHN5c2NvbiAqXFxuK29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKVxcbiB7XFxuIFxcdHN0cnVjdCBzeXNjb24gKmVudHJ5LCAqc3lzY29uID0gTlVMTDtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghbnAgfHwgIXJlZ21hcClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXG4gXFx0c3lzY29uID0ga3phbGxvY19vYmooKnN5c2Nvbik7XFxuIFxcdGlmICghc3lzY29uKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHQvKiBjaGVjayBpZiBzeXNjb24gZW50cnkgYWxyZWFkeSBleGlzdHMgKi9cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2c3lzY29uX2xpc3QsIGxpc3QpXFxuIFxcdFxcdGlmIChlbnRyeS1cXHUwMDNlbnAgPT0gbnApIHtcXG4tXFx0XFx0XFx0cmV0ID0gLUVFWElTVDtcXG4tXFx0XFx0XFx0Z290byBlcnJfdW5sb2NrO1xcbitcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xcbitcXHRcXHRcXHRrZnJlZShzeXNjb24pO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0c3lzY29uLVxcdTAwM2VyZWdtYXAgPSByZWdtYXA7XFxuLVxcdHN5c2Nvbi1cXHUwMDNlbnAgPSBucDtcXG4rXFx0c3lzY29uLVxcdTAwM2VucCA9IG9mX25vZGVfZ2V0KG5wKTtcXG4gXFxuIFxcdC8qIHJlZ2lzdGVyIHRoZSByZWdtYXAgaW4gc3lzY29uIGxpc3QgKi9cXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c3lzY29uLVxcdTAwM2VsaXN0LCBcXHUwMDI2c3lzY29uX2xpc3QpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBzeXNjb247XFxuK31cXG4rXFxuKy8qKlxcbisgKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZVxcbisgKiBAbnA6IERldmljZSB0cmVlIG5vZGVcXG4rICogQHJlZ21hcDogUG9pbnRlciB0byByZWdtYXAgb2JqZWN0XFxuKyAqXFxuKyAqIFJlZ2lzdGVyIGFuIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXAgb2JqZWN0IHdpdGggc3lzY29uIGZvciB0aGUgc3BlY2lmaWVkXFxuKyAqIGRldmljZSB0cmVlIG5vZGUuIFRoaXMgcmVnbWFwIHdpbGwgdGhlbiBiZSByZXR1cm5lZCB0byBjbGllbnQgZHJpdmVycyB1c2luZ1xcbisgKiB0aGUgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZSgpIEFQSS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcXG4re1xcbitcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwobnAsIHJlZ21hcCkpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xcbitcXG4rc3RhdGljIHZvaWQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3lzY29uICpzeXNjb24gPSBkYXRhO1xcbiBcXG4tZXJyX3VubG9jazpcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XFxuK1xcdGxpc3RfZGVsKFxcdTAwMjZzeXNjb24tXFx1MDAzZWxpc3QpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xcbitcXG4rXFx0b2Zfbm9kZV9wdXQoc3lzY29uLVxcdTAwM2VucCk7XFxuIFxcdGtmcmVlKHN5c2Nvbik7XFxuLVxcdHJldHVybiByZXQ7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwob2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7XFxuK1xcbisvKipcXG4rICogZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciBhIG1hbmFnZWQgZXh0ZXJuYWwgc3lzY29uIHJlZ21hcFxcbisgKiBAZGV2OiBEZXZpY2UgdGhhdCBvd25zIHRoZSByZWdtYXBcXG4rICogQG5wOiBEZXZpY2UgdHJlZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnbWFwXFxuKyAqIEByZWdtYXA6IFBvaW50ZXIgdG8gdGhlIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXBcXG4rICpcXG4rICogUmVnaXN0ZXIgYW4gZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcCBvYmplY3Qgd2l0aCBzeXNjb24gYW5kIHJlbW92ZSBpdCB3aGVuXFxuKyAqIEBkZXYgaXMgdW5ib3VuZC4gQ29uc3VtZXJzIG11c3Qgc3RvcCB1c2luZyB0aGUgcmVnbWFwIGJlZm9yZSB0aGUgcHJvdmlkZXIgaXNcXG4rICogdW5ib3VuZCwgZm9yIGV4YW1wbGUgYnkgZXN0YWJsaXNoaW5nIGEgbWFuYWdlZCBkZXZpY2UgbGluayB0byBAZGV2LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcXG4re1xcbitcXHRzdHJ1Y3Qgc3lzY29uICpzeXNjb247XFxuK1xcbitcXHRzeXNjb24gPSBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKG5wLCByZWdtYXApO1xcbitcXHRpZiAoSVNfRVJSKHN5c2NvbikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHN5c2Nvbik7XFxuK1xcbitcXHRyZXR1cm4gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2UsXFxuK1xcdFxcdFxcdFxcdFxcdHN5c2Nvbik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTtcXG4gXFxuIC8qKlxcbiAgKiBkZXZpY2Vfbm9kZV90b19yZWdtYXAoKSAtIEdldCBvciBjcmVhdGUgYSByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuaW5kZXggYTI5ZDNmZWQ4YTA1My4uMjdiOGZmZTRiNTM5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuQEAgLTQ3NSw2ICs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXFxuIFxcdGhlbHBcXG4gXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcXG4gXFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxcbitcXHR0cmlzdGF0ZSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXFxcIlxcbitcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXFx1MDAyNlxcdTAwMjYgTlZNRU0gXFx1MDAyNlxcdTAwMjYgT0ZfTURJTyBcXHUwMDI2XFx1MDAyNiBSRUdVTEFUT1JcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4rXFx0aGVscFxcbitcXHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rXFx0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxcbitcXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxcbitcXHQgIHJlZ2lzdGVycy5cXG4rXFxuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxcbiBcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlclxcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcXG5pbmRleCBlMjNkZjVlODM2ZTllLi5mZmIwZWZiYzRjYzRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbkBAIC0xMDAsNCArMTAwLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVxcdFxcdCs9IHNtc2Mub1xcbiBvYmotJChDT05GSUdfU1RFMTBYUClcXHRcXHQrPSBzdGUxMFhwLm9cXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVxcdCs9IHRlcmFuZXRpY3Mub1xcbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXFx0Kz0gdml0ZXNzZS5vXFxuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcXHQrPSB4cG93ZXJzL1xcbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICs9IHhpbGlueF9nbWlpMnJnbWlpLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsMyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAub1xcbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICs9IHhwb3dlcnMtYWN4MDAub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjgxZTAxM2JlNDAxYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXFxuQEAgLTAsMCArMSwzMTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgXFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cXHUwMDNlKVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlxcdDI3MDAwMDAwXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXFx0XFx0XFx0MHgwMDE0XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCgxKVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1xcdFxcdFxcdDB4MDAxNlxcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xcbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXFx0XFx0XFx0MHg4MDA0XFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1xcdFxcdFxcdDB4NjAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXFx0XFx0XFx0R0VOTUFTSyg4LCA0KVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rXFxuK3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcXG4rXFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rXFx0dTE2IGVwaHlfY3RsO1xcbitcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XFxuK1xcdGJvb2wgcG93ZXJlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jdGwgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVxcdTAwM2VwaHlfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnLCBFUlJfUFRSKHJldCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdFxcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0XFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2UgaWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFxuK1xcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5X2FkZHIgXFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkKSB7XFxuK1xcdFxcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcXG4rXFxuK1xcdC8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxcbitcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZGlzYWJsZTpcXG4rXFx0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbms7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XFxuK1xcdHU4IGJwc19lZmZ1c2VfY29kZTtcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXFxcIngtcG93ZXJzLGFjMjAwXFxcIiwgMCk7XFxuK1xcdGlmICghYWMyMDBfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxcXG5cXFwiKSk7XFxuK1xcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcXG4rXFx0aWYgKCFjbGllbnQpIHtcXG4rXFx0XFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXFxcblxcXCIpKTtcXG4rXFx0fVxcbitcXG4rXFx0bGluayA9IGRldmljZV9saW5rX2FkZChkZXYsIFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ICAgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUik7XFxuK1xcdGlmICghbGluaykge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKGxpbmstXFx1MDAzZXN0YXR1cykgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIngtcG93ZXJzLGFjMjAwXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlcmVnbWFwKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBnZXQgQUMyMDAgcmVnbWFwXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XFxuK1xcdFxcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgXFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdFxcdGNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cXG4rXFx0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXFx1MDAyNlxcbitcXHRcXHRcXHQgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spO1xcbitcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCA9XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0ssIGJwc19lZmZ1c2VfY29kZSk7XFxuK1xcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cXG4rXFxuK1xcdGNsayA9IGNsa19nZXQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihjbGspKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIoY2xrKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdH1cXG4rXFxuK1xcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XFxuK1xcdGNsa19wdXQoY2xrKTtcXG4rXFxuK1xcdHN3aXRjaCAoY2xrX3JhdGUpIHtcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJ1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIGNsa19yYXRlKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXHRwdXRfZGV2aWNlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldik7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnByaXYtXFx1MDAzZWNvbnRyb2w7XFxuK1xcbitvdXRfZXJyb3I6XFxuK1xcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxcXG5cXFwiKTtcXG4rb3V0X3B1dF9jbGllbnQ6XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXFxuQEAgLTAsMCArMSwzODcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYWN4MDAuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVFxcdDNcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlxcdDI0MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcXHQyNTAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXFx0MjcwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcXHRcXHRcXHQweDAwXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTS1xcdFxcdEdFTk1BU0soMTEsIDgpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDYpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDApXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpXFxuKyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCg1KVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExET1xcdFxcdEJJVCgzKVxcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTS1xcdFxcdEdFTk1BU0soMiwgMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1xcdFxcdFxcdDB4MDJcXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVxcdFxcdEJJVCgxNSlcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1JFR1xcdFxcdFxcdDB4MDVcXG4rI2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxNSwgMTQpXFxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMSwgMTApXFxuKyNkZWZpbmUgQUMzMDBfSU9fRFJWX0xFVkVMXzJcXHRcXHRcXHQyXFxuKyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcXHRcXHRcXHQweDA2XFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXFx0XFx0XFx0QklUKDExKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcXFxcbitcXHQoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcXFxcXFxuK1xcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXFxcXG4rXFx0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXFxuK1xcbisjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxcXFxuK1xcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEZJRUxEX1BSRVAoQUMzMDBfTUlJX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxcXFxuK1xcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxcbitcXG4rc3RydWN0IGFjMzAwX2VwaHlfY3RsIHtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0dTE2IHN5c19jb250cm9sO1xcbitcXHR1MTYgZXBoeV9jb25maWc7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdGJvb2wgcGFja2FnZV9rbm93bjtcXG4rXFx0Ym9vbCBpbnRlcm5hbF9kbGRvO1xcbitcXHRib29sIHN1cHBseV9lbmFibGVkO1xcbitcXHRib29sIHBvd2VyZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgaW50XFxuK2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0dTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0dTE2IHZhbCA9IChyZXQgXFx1MDAyNiB+bWFzaykgfCAoc2V0IFxcdTAwMjYgbWFzayk7XFxuK1xcbitcXHRcXHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XFxuK1xcdFxcdFxcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcmVnbnVtLCB2YWwpO1xcbitcXHR9XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jb25maWcgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcXG4rXFx0ICogdGhlIHN1cHBseSBhcnJhbmdlbWVudCwgcHJlc2VydmUgYW55IGV4dGVybmFsLVZERCBzZXR1cCBsZWZ0IGJ5IHRoZVxcbitcXHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuICFwcml2LVxcdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID9cXG4rXFx0XFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0XFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2UgaWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFxuK1xcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0dTggcGFja2FnZV9zdGF0dXM7XFxuK1xcdHUxNiByZXNldF92YWx1ZTtcXG4rXFx0aW50IHN5c19jb250cm9sO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeV9hZGRyICE9IGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkKSB7XFxuK1xcdFxcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xcbitcXG4rXFx0XFx0LyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqL1xcbitcXHRcXHRmc2xlZXAoMTAwMDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cXG4rXFx0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VzeXNfY29udHJvbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xcbitcXHRpZiAoc3lzX2NvbnRyb2wgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IHN5c19jb250cm9sO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4rXFxuK1xcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcXG4rXFx0aWYgKCh+cGFja2FnZV9zdGF0dXMgXFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XFxuK1xcdCAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgXFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xcbitcXHRwcml2LVxcdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX1NZU19CSUFTMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcXG4rXFx0XFx0XFx0XFx0ICAgcHJpdi1cXHUwMDNlaW50ZXJuYWxfZGxkbyA/XFxuK1xcdFxcdFxcdFxcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIGRvY3VtZW50ZWQgZGVmYXVsdCBkcml2ZSBsZXZlbCBhbmQgbGVhdmUgdGhlIElSUSBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcG93ZXJfb2ZmOlxcbitcXHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0Y2xrX3B1dChkYXRhKTtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcXG4rXFx0dTggYmdzX2VmZnVzZV9jb2RlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgXFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImxpbmsgYWRkcmVzcyBpcyBvdXRzaWRlIHRoZSBwYWNrYWdlIHJhbmdlXFxcXG5cXFwiKSk7XFxuK1xcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VjbGspKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VjbGspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRzd2l0Y2ggKGNsa19yYXRlKSB7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjbGtfcmF0ZSkpO1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY29uZmlnID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwcml2LVxcdTAwM2Vjb250cm9sO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OGYyYjBiNjM5MDk2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcXG5AQCAtMCwwICsxLDUzNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYWN4MDAuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9JRFxcdFxcdFxcdFxcdDB4MDA0NDE0MDBcXG4rXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1xcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXFx0XFx0QklUKDgpXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXFx0QklUKDkpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1xcdFxcdFxcdDB4MWZcXG4rI2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMiwgOClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzBcXHRcXHRcXHRcXHQwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8xXFx0XFx0XFx0XFx0MVxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlxcdFxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzZcXHRcXHRcXHRcXHQ2XFxuKyNkZWZpbmUgQUNYMDBfUEFHRV84XFx0XFx0XFx0XFx0OFxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVFxcdEJJVCgxMilcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXFx0XFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cXHRcXHQyXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFR1xcdFxcdDB4MTJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcXHQweDQ4MjRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXFx0XFx0XFx0QklUKDE1KVxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1xcdDB4MTdcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXFx0QklUKDMpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcXHRcXHQweDE4XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcXHRcXHRHRU5NQVNLKDE0LCAxMilcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFxcdDBcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXFx0XFx0MHgxMFxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcXHQweDU1MjNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcXHRcXHQweGYwMDBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHXFx0MHgxNFxcbisjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcXHQweDcwOGZcXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXFx0MHg3MDhiXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1xcdFxcdFxcdDB4MTVcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0tcXHRcXHRHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLXFx0XFx0R0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxcXFxuK1xcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxcXFxuK1xcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcXFxcbitcXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcXFxcbitcXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcXHRcXHQweDE4XFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcXHRcXHQweDAwYmNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1xcdFxcdDB4MWRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXFx0MHgwMDQ0XFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXFxcXG4rXFx0KEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgfCBcXFxcXFxuK1xcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxcbitcXG4rLypcXG4rICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXFxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxcbisgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZVxcbisgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cXG4rICovXFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcXG4rXFx0Ym9vbCBpc19hYzMwMDtcXG4rXFx0Ym9vbCB1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZztcXG4rXFx0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXBvd2VyX29uKHByaXYtXFx1MDAzZWNvbnRyb2wsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwcml2LVxcdTAwM2VwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2Vjb250cm9sLVxcdTAwM2Vwb3dlcl9vZmYocHJpdi1cXHUwMDNlY29udHJvbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBoeWRldl93YXJuKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIEVSUl9QVFIocmV0KSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcXG4rXFx0c2l6ZV90IGk7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdHU4ICpidWY7XFxuK1xcdHUxNiB2YWwgPSAwO1xcbitcXG4rXFx0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xcbitcXHRpZiAoSVNfRVJSKGNlbGwpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihjZWxsKTtcXG4rXFxuK1xcdGJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCBcXHUwMDI2bGVuKTtcXG4rXFx0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XFxuK1xcdGlmIChJU19FUlIoYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcXG4rXFx0aWYgKCFsZW4gfHwgbGVuIFxcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcXG4rXFx0XFx0a2ZyZWUoYnVmKTtcXG4rXFx0XFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspXFxuK1xcdFxcdHZhbCB8PSAodTE2KWJ1ZltpXSBcXHUwMDNjXFx1MDAzYyAoOCAqIGkpO1xcbitcXHRrZnJlZShidWYpO1xcbitcXHQqdmFsdWUgPSB2YWw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBzZWxlY3RhYmxlO1xcbitcXHRib29sIGZpeGVkX2FjMzAwO1xcbitcXHRib29sIGhhc19jb25maWd1cmF0aW9uO1xcbitcXHR1OCBjYWxpYnJhdGlvbjtcXG4rXFx0dTMyIGJhc2VfYWRkcjtcXG4rXFx0dTE2IGNvbmZpZ3VyYXRpb24gPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXFx1MDAzZW9mX25vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXFxcImV0aGVybmV0LXBoeS1wYWNrYWdlXFxcIikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiUEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2YmFzZV9hZGRyKTtcXG4rXFx0aWYgKHJldCB8fCBiYXNlX2FkZHIgIT0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRzZWxlY3RhYmxlID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0aWYgKCFzZWxlY3RhYmxlIFxcdTAwMjZcXHUwMDI2ICFmaXhlZF9hYzMwMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwidW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcbitcXHRoYXNfY29uZmlndXJhdGlvbiA9XFxuK1xcdFxcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFxcXCJudm1lbS1jZWxsLW5hbWVzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJjb25maWd1cmF0aW9uXFxcIikgXFx1MDAzZT0gMDtcXG4rXFx0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XFxuK1xcdFxcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcXFwiY29uZmlndXJhdGlvblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25maWd1cmF0aW9uKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNlbGVjdGFibGUpIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgPVxcbitcXHRcXHRcXHRjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgPSBmaXhlZF9hYzMwMDtcXG4rXFx0XFx0aWYgKGhhc19jb25maWd1cmF0aW9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhIShjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWlzX2FjMzAwKSB7XFxuK1xcdFxcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXFxuK1xcdFxcdFxcdFxcdGNvbmZpZ3VyYXRpb24pO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQhIShjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcXG4rXFx0cHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZCA9XFxuK1xcdFxcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXFxcIik7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYWMzMDApXFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbnRyb2wgPVxcbitcXHRcXHRcXHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNhbGlicmF0aW9uKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcml2LVxcdTAwM2Vjb250cm9sID1cXG4rXFx0XFx0XFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FsaWJyYXRpb24pO1xcbitcXHRyZXQgPSBQVFJfRVJSX09SX1pFUk8ocHJpdi1cXHUwMDNlY29udHJvbCk7XFxuK1xcbitvdXRfcHV0X25vZGU6XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXFxuK1xcdFxcdFxcdFxcdEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZW9mX25vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqL1xcbitcXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LVxcdTAwM2Vpc19hYzMwMCA/XFxuK1xcdFxcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxcbitcXHRcXHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xcbitcXHR1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFO1xcbitcXHR1MTYgZ2xvYmFsX2NvbmZpZztcXG4rXFx0aW50IG9sZHBhZ2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpXFxuK1xcdFxcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLFxcbitcXHRcXHRcXHQgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRhZmVfZXFfcnhfZGV0ZWN0ID1cXG4rXFx0XFx0XFx0QUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFO1xcbitcXHRcXHR0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7XFxuK1xcdH1cXG4rXFxuK1xcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xcbitcXHRpZiAob2xkcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXFxuK1xcdFxcdFxcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYWMzMDAgXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcXG4rXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRSk7XFxuK1xcbitvdXRfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqL1xcbitcXHRyZXR1cm4gYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXN1bWVfcmV0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmVzdW1lX3JldCA9IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xcbitcXHRcXHRpZiAocmVzdW1lX3JldClcXG4rXFx0XFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBoeWRldi1cXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XFxuK1xcdGJvb2wgbWF0Y2g7XFxuK1xcbitcXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cXG4rXFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcXG4rXFx0aWYgKCFwYWNrYWdlX25vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcXCIpIHx8XFxuK1xcdFxcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcXCIpIHx8XFxuK1xcdFxcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xcbitcXG4rXFx0cmV0dXJuIG1hdGNoO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCksXFxuK1xcdFxcdC5uYW1lID0gXFxcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcXFwiLFxcbitcXHRcXHQubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSxcXG4rXFx0XFx0LnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSxcXG4rXFx0XFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLFxcbitcXHRcXHQuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxcbitcXHR9LFxcbit9O1xcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7XFxuK1xcdHsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3Mlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXFxuQEAgLTAsMCArMSwyOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKyNpZm5kZWYgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXFxuKyNkZWZpbmUgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUXFx0MTZcXG4rXFxuK3N0cnVjdCBkZXZpY2Vfbm9kZTtcXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wge1xcbitcXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IHBoeV9hZGRyKTtcXG4rXFx0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcXG4rXFx0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxcbithYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXFxuK1xcdFxcdCAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbik7XFxuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaCBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oXFxuaW5kZXggYWFkOWM2YjUwNDYzNi4uM2U4MDRmYzFiMDNlYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgZGV2aWNlX25vZGU7XFxuK3N0cnVjdCBkZXZpY2U7XFxuIFxcbiAjaWZkZWYgQ09ORklHX01GRF9TWVNDT05cXG4gc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xcbkBAIC0zMCw2ICszMSw5IEBAIHN0cnVjdCByZWdtYXAgKnN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfb3B0aW9uYWwoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqcHJvcGVydHkpO1xcbiBpbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApO1xcbitpbnQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVnbWFwICpkZXZpY2Vfbm9kZV90b19yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4ge1xcbkBAIC03NSw2ICs3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnRcXG4rZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBfX0xJTlVYX01GRF9TWVNDT05fSF9fICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIwOjM4OjQxLjU0MTEwNzY0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2MDI1ODU2MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGRyaXZlcnMgZm9yIFgtUG93ZXJzIEFDMjAwIE1GRCBhbmQgQUN4MDAgRXRoZXJuZXQgUEhZcywgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZSBkZXZpY2UgdHJlZSBub2RlcyAob2Zfbm9kZSkgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBTaW5jZSBzeXprYWxsZXIgZG9lcyBub3QgZHluYW1pY2FsbHkgZ2VuZXJhdGUgYXJiaXRyYXJ5IGRldmljZSB0cmVlIG5vZGVzLCBhbmQgdGhlc2UgZGV2aWNlcyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGRlZmF1bHQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgJ3ZpcnQnIG9yIHg4Nl82NCksIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBUaGUgbWlub3IgcmVmYWN0b3JpbmcgaW4gc3lzY29uLmMgaXMgb25seSByZWFjaGFibGUgdmlhIFNvQy1zcGVjaWZpYyBkcml2ZXJzIChFeHlub3MsIFN1bnhpLCBSZW5lc2FzKSB0aGF0IGFyZSBhbHNvIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5NGE1YTk5YzU1ZTk1NmEyZmZhMGJhMDU3NWFmYTAwMTQ2YTUwYzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDIwOjM4OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjA5ODMxYjE1YzgwNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sXG5AQCAtMCwwICsxLDQ5IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIElDXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjpcbisgIFRoZSBBQzIwMCBpcyBhIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMgY29udGFpbmluZyBhdWRpbywgdmlkZW8sIFJUQyBhbmRcbisgIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucy4gSXRzIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBvdmVyIEkyQy5cbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICBjbG9ja3M6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEFDMjAwIGlucHV0IGNsb2NrLiBXaGVuIHVzaW5nIHRoZSBFdGhlcm5ldCBQSFksIGl0cyBjb25maWd1cmVkIHJhdGUgbXVzdFxuKyAgICAgIGJlIDI0IG9yIDI3IE1IeiwgbWF0Y2hpbmcgdGhlIHJhdGVzIGVuY29kZWQgYnkgdGhlIGRvY3VtZW50ZWQgRVBIWSBjbG9ja1xuKyAgICAgIHNlbGVjdG9yLlxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rICAtIHJlZ1xuKyAgLSBjbG9ja3NcbitcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgIC0gfFxuKyAgICBpMmMge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgbWl4ZWQtc2lnbmFsQDEwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhYzIwMFwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MTBcdTAwM2U7XG4rICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4rICAgICAgICB9O1xuKyAgICB9O1xuKy4uLlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWUwYzVlOTgwYzM5ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCArMSwyMDcgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4rICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBjb250cm9sIHJlZ2lzdGVycyBhcmUgcGFydCBvZiBhbiBJMkMgTUZELFxuKyAgd2hpbGUgQUMzMDAgY29udHJvbCByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2XG4rICBwbHVzIHRoZSBsaW5rIFBIWSBhZGRyZXNzLlxuK1xuKyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cbisgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4rICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cbitcbisgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuKyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxuKyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xuKyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4rXG4rc2VsZWN0OlxuKyAgcHJvcGVydGllczpcbisgICAgY29tcGF0aWJsZTpcbisgICAgICBlbnVtOlxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbisgICAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuKyAgcmVxdWlyZWQ6XG4rICAgIC0gY29tcGF0aWJsZVxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuK1xuKyAgcmVnOlxuKyAgICBtYXhpbXVtOiAzMVxuK1xuKyAgY2xvY2tzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBBQzMwMCBpbnB1dCBjbG9jaywgcnVubmluZyBhdCAyNCwgMjUsIG9yIDI3IE1Iei4gVGhlIEFDMjAwIGlucHV0IGNsb2NrXG4rICAgICAgYmVsb25ncyB0byB0aGUgcmVmZXJlbmNlZCBBQzIwMCBNRkQgaW5zdGVhZC5cbitcbisgIHZjYy1zdXBwbHk6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMVxuKyAgICAgIG9uIEFDMzAwLlxuK1xuKyAgbnZtZW0tY2VsbHM6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nXG4rICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuKyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5XG4rICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbisgICAgICBjb3B5IGluc3RlYWQuXG4rXG4rICBudm1lbS1jZWxsLW5hbWVzOlxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxuK1xuKyAgeC1wb3dlcnMsYWMyMDA6XG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbisgICAgZGVzY3JpcHRpb246IFJlZmVyZW5jZSB0byB0aGUgQUMyMDAgTUZEIGNvbnRhaW5pbmcgdGhpcyBFdGhlcm5ldCBQSFlcbitcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XG4rICAgIHR5cGU6IGJvb2xlYW5cbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxuKyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXG4rXG4rcGF0dGVyblByb3BlcnRpZXM6XG4rICBeZXRoZXJuZXQtcGh5QFthLWYwLTldKyQ6XG4rICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xuKyAgICBwcm9wZXJ0aWVzOlxuKyAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXG4rICAgIHJlcXVpcmVkOlxuKyAgICAgIC0gY29tcGF0aWJsZVxuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gdmNjLXN1cHBseVxuK1xuK2RlcGVuZGVudFJlcXVpcmVkOlxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXG4rICBudm1lbS1jZWxsLW5hbWVzOiBbIG52bWVtLWNlbGxzIF1cbitcbithbGxPZjpcbisgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY2xvY2tzOiBmYWxzZVxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICByZWc6XG4rICAgICAgICAgIG1heGltdW06IDdcbisgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICByZWc6XG4rICAgICAgICAgIG1heGltdW06IDdcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gY2xvY2tzXG4rICAgICAgICAtIG52bWVtLWNlbGxzXG4rICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgbWRpbyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwiY29uZmlndXJhdGlvblwiO1xuKyAgICAgICAgICAgIHgtcG93ZXJzLGFjMjAwID0gXHUwMDNjXHUwMDI2YWMyMDBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisgIC0gfFxuKyAgICBtZGlvIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbisgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCJjb25maWd1cmF0aW9uXCI7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisgIC0gfFxuKyAgICBtZGlvIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDEge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcImNvbmZpZ3VyYXRpb25cIjtcbitcbisgICAgICAgICAgICBldGhlcm5ldC1waHlAMSB7XG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwiO1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuKy4uLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXG5pbmRleCA3NjNjZTZhMzQ3ODJiLi45NWUzYzYyNzQyYmI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xuQEAgLTIwNSw2ICsyMDUsMTggQEAgY29uZmlnIE1GRF9BQzEwMFxuIFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcbiBcdCAgY29tcG9uZW50cyBsaWtlIGNvZGVjcyBvciBSVEMgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuXG4gXG4rY29uZmlnIE1GRF9BQzIwMFxuK1x0dHJpc3RhdGUgXCJYLVBvd2VycyBBQzIwMFwiXG4rXHRkZXBlbmRzIG9uIEkyQ1xuK1x0ZGVwZW5kcyBvbiBPRlxuK1x0c2VsZWN0IE1GRF9TWVNDT05cbitcdHNlbGVjdCBSRUdNQVBfSTJDXG4rXHRoZWxwXG4rXHQgIFN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBQzIwMCBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDLiBUaGUgQUMyMDBcbitcdCAgY29udGFpbnMgYXVkaW8sIHZpZGVvLCBSVEMgYW5kIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucyBhbmQgaXNcbitcdCAgY28tcGFja2FnZWQgd2l0aCBzb21lIEFsbHdpbm5lciBINiBhbmQgSDYxNiBTb0NzLiBUaGlzIGRyaXZlciBwcm92aWRlc1xuK1x0ICB0aGUgc2hhcmVkIHJlZ2lzdGVyIGFjY2VzcyB1c2VkIGJ5IHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9uIGRyaXZlcnMuXG4rXG4gY29uZmlnIE1GRF9BWFAyMFhcbiBcdHRyaXN0YXRlXG4gXHRzZWxlY3QgTUZEX0NPUkVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlXG5pbmRleCBkZDRiYjdlNzdjMzM2Li44OTBlNzZhOWFkMDBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlXG5AQCAtMTUwLDYgKzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSlcdCs9IGRhOTA1Mi1zcGkub1xuIG9iai0kKENPTkZJR19NRkRfREE5MDUyX0kyQylcdCs9IGRhOTA1Mi1pMmMub1xuIFxuIG9iai0kKENPTkZJR19NRkRfQUMxMDApXHRcdCs9IGFjMTAwLm9cbitvYmotJChDT05GSUdfTUZEX0FDMjAwKVx0XHQrPSBhYzIwMC5vXG4gb2JqLSQoQ09ORklHX01GRF9BWFAyMFgpXHQrPSBheHAyMHgub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX0kyQylcdCs9IGF4cDIweC1pMmMub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX1JTQilcdCs9IGF4cDIweC1yc2Iub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FjMjAwLmMgYi9kcml2ZXJzL21mZC9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjUwNjZiYjM2YWM3NlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9tZmQvYWMyMDAuY1xuQEAgLTAsMCArMSwxNzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBQzIwMFxuKyAqXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFx1MDAzY2plcm5lai5za3JhYmVjQGdtYWlsLmNvbVx1MDAzZVxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICpcbisgKiBCYXNlZCBvbiB0aGUgQUMxMDAgZHJpdmVyOlxuKyAqIENvcHlyaWdodCAoQykgMjAxNiBDaGVuLVl1IFRzYWlcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9SRUdcdFx0XHQweDAwMDBcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxNClcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTS1x0XHRHRU5NQVNLKDExLCAwKVxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfUkVHXHRcdFx0MHgwMDAyXG4rI2RlZmluZSBBQzIwMF9TWVNfQ09OVFJPTF9DSElQX1JFU0VUX0RFQVNTRVJUXHRCSVQoMClcbitcbisvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovXG4rI2RlZmluZSBBQzIwMF9UV0lfUkVHX0FERFJfSFx0MHgwMGZlXG4rI2RlZmluZSBBQzIwMF9NQVhfUkVHXHRcdDB4YTFmMlxuK1xuK3N0cnVjdCBhYzIwMCB7XG4rXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZV9jZmcgYWMyMDBfcmFuZ2VfY2ZnW10gPSB7XG4rXHR7XG4rXHRcdC5yYW5nZV9tYXggPSBBQzIwMF9NQVhfUkVHLFxuK1x0XHQuc2VsZWN0b3JfcmVnID0gQUMyMDBfVFdJX1JFR19BRERSX0gsXG4rXHRcdC5zZWxlY3Rvcl9tYXNrID0gMHhmZixcbitcdFx0LndpbmRvd19sZW4gPSAyNTYsXG4rXHR9LFxuK307XG4rXG4rLypcbisgKiBFYWNoIEFDMjAwIHN1Yi1ibG9jayBjYW4gcmVzZXQgaW5kZXBlbmRlbnRseSwgaW52YWxpZGF0aW5nIGl0cyByZWdpc3RlclxuKyAqIGNvbnRlbnRzIHdpdGhvdXQgcmVnbWFwJ3Mga25vd2xlZGdlLiBDYWNoZSBvbmx5IHRoZSBjb21tb24gcGFnZSBzZWxlY3RvcjtcbisgKiB0aGlzIGF2b2lkcyBhIHNlbGVjdG9yIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBldmVyeSBhY2Nlc3Mgb24gdGhlIHNhbWUgcGFnZVxuKyAqIHdpdGhvdXQgZXZlciByZXR1cm5pbmcgc3RhbGUgZnVuY3Rpb25hbC1yZWdpc3RlciB2YWx1ZXMuXG4rICovXG4rc3RhdGljIGJvb2wgYWMyMDBfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZylcbit7XG4rXHRyZXR1cm4gcmVnICE9IEFDMjAwX1RXSV9SRUdfQUREUl9IO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWMyMDBfcmVnbWFwX2NvbmZpZyA9IHtcbitcdC5uYW1lID0gXCJhYzIwMFwiLFxuK1x0LnJlZ19iaXRzID0gOCxcbitcdC5yZWdfc3RyaWRlID0gMixcbitcdC52YWxfYml0cyA9IDE2LFxuK1x0LnJhbmdlcyA9IGFjMjAwX3JhbmdlX2NmZyxcbitcdC5udW1fcmFuZ2VzID0gQVJSQVlfU0laRShhYzIwMF9yYW5nZV9jZmcpLFxuK1x0Lm1heF9yZWdpc3RlciA9IEFDMjAwX01BWF9SRUcsXG4rXHQudm9sYXRpbGVfcmVnID0gYWMyMDBfdm9sYXRpbGVfcmVnLFxuK1x0LmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9NQVBMRSxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIGFjMjAwX2Rpc2FibGUodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgYWMyMDAgKmRkYXRhID0gZGF0YTtcbitcbitcdHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuK1x0dW5zaWduZWQgaW50IHZlcnNpb247XG4rXHRzdHJ1Y3QgYWMyMDAgKmRkYXRhO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0aW50IHJldDtcbitcbitcdGRkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFkZGF0YSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihjbGspKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoY2xrKSxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXFxuXCIpO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgY2xrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cIik7XG4rXG4rXHRkZGF0YS1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFx1MDAyNmFjMjAwX3JlZ21hcF9jb25maWcpO1xuK1x0aWYgKElTX0VSUihkZGF0YS1cdTAwM2VyZWdtYXApKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZGRhdGEtXHUwMDNlcmVnbWFwKSxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXG5cIik7XG4rXG4rXHRpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZGF0YSk7XG4rXG4rXHQvKlxuK1x0ICogTm8gbWluaW11bSBkZWxheSBpcyBkb2N1bWVudGVkLiBNYXRjaCB0aGUgdmVuZG9yIGRyaXZlcidzIDQwIG1zIGRlbGF5XG4rXHQgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suXG4rXHQgKi9cbitcdG1zbGVlcCg0MCk7XG4rXG4rXHRyZXQgPSByZWdtYXBfcmVhZChkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19WRVJTSU9OX1JFRywgXHUwMDI2dmVyc2lvbik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcmVhZCBjaGlwIHZlcnNpb25cXG5cIik7XG4rXG4rXHRkZXZfaW5mbyhkZXYsIFwiQUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxcblwiLFxuK1x0XHQgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSywgdmVyc2lvbiksXG4rXHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7XG4rXG4rXHQvKiBSZXNldCB0aGUgY2hpcCBhZnRlciBkZXBlbmRlbnQgZnVuY3Rpb24gZHJpdmVycyBoYXZlIHVuYm91bmQuICovXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzIwMF9kaXNhYmxlLCBkZGF0YSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcmVnbWFwX3dyaXRlKGRkYXRhLVx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSByZWdtYXBfd3JpdGUoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKGRldiwgZGV2LVx1MDAzZW9mX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgZGRhdGEtXHUwMDNlcmVnbWFwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byByZWdpc3RlciByZWdtYXBcXG5cIik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwXCIgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYWMyMDBfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XG4rXHR7IC5uYW1lID0gXCJhYzIwMFwiIH0sXG4rXHR7IH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhYzIwMF9pMmNfaWRzKTtcbitcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcImFjMjAwXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLFxuK1x0fSxcbitcdC5wcm9iZSA9IGFjMjAwX3Byb2JlLFxuK1x0LnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sXG4rXHQuaWRfdGFibGUgPSBhYzIwMF9pMmNfaWRzLFxuK307XG4rbW9kdWxlX2kyY19kcml2ZXIoYWMyMDBfZHJpdmVyKTtcbitcbitNT0RVTEVfQVVUSE9SKFwiSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJYLVBvd2VycyBBQzIwMCBNRkQgY29yZSBkcml2ZXJcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3lzY29uLmMgYi9kcml2ZXJzL21mZC9zeXNjb24uY1xuaW5kZXggMjFhN2ZjZGQyNzM3OS4uNDQ4NDIyZmU0ZjIxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWZkL3N5c2Nvbi5jXG4rKysgYi9kcml2ZXJzL21mZC9zeXNjb24uY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbkBAIC0xOTMsNTMgKzE5NCw5NSBAQCBzdGF0aWMgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfZ2V0X3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0cmV0dXJuIHN5c2Nvbi1cdTAwM2VyZWdtYXA7XG4gfVxuIFxuLS8qKlxuLSAqIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIHJlZ21hcCBmb3Igc3BlY2lmaWVkIGRldmljZSBub2RlXG4tICogQG5wOiBEZXZpY2UgdHJlZSBub2RlXG4tICogQHJlZ21hcDogUG9pbnRlciB0byByZWdtYXAgb2JqZWN0XG4tICpcbi0gKiBSZWdpc3RlciBhbiBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwIG9iamVjdCB3aXRoIHN5c2NvbiBmb3IgdGhlIHNwZWNpZmllZFxuLSAqIGRldmljZSB0cmVlIG5vZGUuIFRoaXMgcmVnbWFwIHdpbGwgdGhlbiBiZSByZXR1cm5lZCB0byBjbGllbnQgZHJpdmVycyB1c2luZ1xuLSAqIHRoZSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKCkgQVBJLlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbi0gKi9cbi1pbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4rc3RhdGljIHN0cnVjdCBzeXNjb24gKlxuK29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwoc3RydWN0IGRldmljZV9ub2RlICpucCxcbitcdFx0XHRcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbiB7XG4gXHRzdHJ1Y3Qgc3lzY29uICplbnRyeSwgKnN5c2NvbiA9IE5VTEw7XG4tXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFucCB8fCAhcmVnbWFwKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHRzeXNjb24gPSBremFsbG9jX29iaigqc3lzY29uKTtcbiBcdGlmICghc3lzY29uKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHQvKiBjaGVjayBpZiBzeXNjb24gZW50cnkgYWxyZWFkeSBleGlzdHMgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZzeXNjb25fbGlzdCwgbGlzdClcbiBcdFx0aWYgKGVudHJ5LVx1MDAzZW5wID09IG5wKSB7XG4tXHRcdFx0cmV0ID0gLUVFWElTVDtcbi1cdFx0XHRnb3RvIGVycl91bmxvY2s7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xuK1x0XHRcdGtmcmVlKHN5c2Nvbik7XG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVFWElTVCk7XG4gXHRcdH1cbiBcbiBcdHN5c2Nvbi1cdTAwM2VyZWdtYXAgPSByZWdtYXA7XG4tXHRzeXNjb24tXHUwMDNlbnAgPSBucDtcbitcdHN5c2Nvbi1cdTAwM2VucCA9IG9mX25vZGVfZ2V0KG5wKTtcbiBcbiBcdC8qIHJlZ2lzdGVyIHRoZSByZWdtYXAgaW4gc3lzY29uIGxpc3QgKi9cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c3lzY29uLVx1MDAzZWxpc3QsIFx1MDAyNnN5c2Nvbl9saXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzeXNjb25fbGlzdF9sb2NrKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHN5c2Nvbjtcbit9XG4rXG4rLyoqXG4rICogb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpIC0gUmVnaXN0ZXIgcmVnbWFwIGZvciBzcGVjaWZpZWQgZGV2aWNlIG5vZGVcbisgKiBAbnA6IERldmljZSB0cmVlIG5vZGVcbisgKiBAcmVnbWFwOiBQb2ludGVyIHRvIHJlZ21hcCBvYmplY3RcbisgKlxuKyAqIFJlZ2lzdGVyIGFuIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXAgb2JqZWN0IHdpdGggc3lzY29uIGZvciB0aGUgc3BlY2lmaWVkXG4rICogZGV2aWNlIHRyZWUgbm9kZS4gVGhpcyByZWdtYXAgd2lsbCB0aGVuIGJlIHJldHVybmVkIHRvIGNsaWVudCBkcml2ZXJzIHVzaW5nXG4rICogdGhlIHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoKSBBUEkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbit7XG4rXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwobnAsIHJlZ21hcCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTtcbitcbitzdGF0aWMgdm9pZCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBzeXNjb24gKnN5c2NvbiA9IGRhdGE7XG4gXG4tZXJyX3VubG9jazpcbitcdG11dGV4X2xvY2soXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XG4rXHRsaXN0X2RlbChcdTAwMjZzeXNjb24tXHUwMDNlbGlzdCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XG4rXG4rXHRvZl9ub2RlX3B1dChzeXNjb24tXHUwMDNlbnApO1xuIFx0a2ZyZWUoc3lzY29uKTtcbi1cdHJldHVybiByZXQ7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xuK1xuKy8qKlxuKyAqIGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpIC0gUmVnaXN0ZXIgYSBtYW5hZ2VkIGV4dGVybmFsIHN5c2NvbiByZWdtYXBcbisgKiBAZGV2OiBEZXZpY2UgdGhhdCBvd25zIHRoZSByZWdtYXBcbisgKiBAbnA6IERldmljZSB0cmVlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdtYXBcbisgKiBAcmVnbWFwOiBQb2ludGVyIHRvIHRoZSBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwXG4rICpcbisgKiBSZWdpc3RlciBhbiBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwIG9iamVjdCB3aXRoIHN5c2NvbiBhbmQgcmVtb3ZlIGl0IHdoZW5cbisgKiBAZGV2IGlzIHVuYm91bmQuIENvbnN1bWVycyBtdXN0IHN0b3AgdXNpbmcgdGhlIHJlZ21hcCBiZWZvcmUgdGhlIHByb3ZpZGVyIGlzXG4rICogdW5ib3VuZCwgZm9yIGV4YW1wbGUgYnkgZXN0YWJsaXNoaW5nIGEgbWFuYWdlZCBkZXZpY2UgbGluayB0byBAZGV2LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4re1xuK1x0c3RydWN0IHN5c2NvbiAqc3lzY29uO1xuK1xuK1x0c3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKTtcbitcdGlmIChJU19FUlIoc3lzY29uKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoc3lzY29uKTtcbitcbitcdHJldHVybiBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LFxuK1x0XHRcdFx0XHRkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSxcbitcdFx0XHRcdFx0c3lzY29uKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTtcbiBcbiAvKipcbiAgKiBkZXZpY2Vfbm9kZV90b19yZWdtYXAoKSAtIEdldCBvciBjcmVhdGUgYSByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbmluZGV4IGEyOWQzZmVkOGEwNTMuLjI3YjhmZmU0YjUzOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbkBAIC00NzUsNiArNDc1LDE3IEBAIGNvbmZpZyBWSVRFU1NFX1BIWVxuIFx0aGVscFxuIFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcbiBcbitjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbitcdHRyaXN0YXRlIFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXCJcbitcdGRlcGVuZHMgb24gQ09NTU9OX0NMSyBcdTAwMjZcdTAwMjYgTlZNRU0gXHUwMDI2XHUwMDI2IE9GX01ESU8gXHUwMDI2XHUwMDI2IFJFR1VMQVRPUlxuK1x0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xuK1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4rXHRoZWxwXG4rXHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcbitcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbitcdCAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sXG4rXHQgIHJlZ2lzdGVycy5cbitcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwiWGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlclwiXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5pbmRleCBlMjNkZjVlODM2ZTllLi5mZmIwZWZiYzRjYzRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbkBAIC0xMDAsNCArMTAwLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQrPSBzbXNjLm9cbiBvYmotJChDT05GSUdfU1RFMTBYUClcdFx0Kz0gc3RlMTBYcC5vXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVx0Kz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0Kz0gdml0ZXNzZS5vXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVx0Kz0geHBvd2Vycy9cbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICs9IHhpbGlueF9nbWlpMnJnbWlpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGVcbkBAIC0wLDAgKzEsMyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbit4cG93ZXJzLWFjeDAwLXkgOj0gYWN4MDAubyBhYzIwMC5vIGFjMzAwLm9cbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICs9IHhwb3dlcnMtYWN4MDAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjgxZTAxM2JlNDAxYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xuQEAgLTAsMCArMSwzMTUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImFjeDAwLmhcIlxuK1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVFx0M1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbitcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXHRcdFx0MHgwMDE0XG4rI2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXHRcdFx0QklUKDEpXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1x0XHRcdDB4MDAxNlxuKyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4rXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xuKyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcdFx0XHQweDgwMDRcbitcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1x0XHRcdDB4NjAwMFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRCSVQoMilcbisjZGVmaW5lIEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTS1x0XHRcdEdFTk1BU0soOCwgNClcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbitcbitzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuK1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK1x0dTE2IGVwaHlfY3RsO1xuK1x0dW5zaWduZWQgaW50IHBoeV9hZGRyO1xuK1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbitcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4rXHRib29sIHBvd2VyZWQ7XG4rfTtcbitcbitzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jdGwgfFxuK1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcbitcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtXHUwMDNlcGh5X2FkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdixcbitcdFx0XHRcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxuXCIsXG4rXHRcdFx0cmVnLCBFUlJfUFRSKHJldCkpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcbitcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuK1x0XHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVx1MDAzZXZjYyk7XG4rXHRcdGlmICghZXJyKVxuK1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbitcdFx0ZWxzZSBpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxuK3tcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuK1xuK1x0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbithYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuK3tcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4rXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbitcdFx0cmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4rXHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxuK1x0XHRcdFx0XHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbitcdGlmICghcmV0KVxuK1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdHUxNiBlcGh5X2N0bDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5X2FkZHIgXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlcGh5X2FkZHIgPT0gcGh5X2FkZHIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXHRwcml2LVx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcbitcbitcdC8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfZGlzYWJsZTtcbitcbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK1xuK2Vycl9kaXNhYmxlOlxuK1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0YWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4rXHRzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbms7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXCJ4LXBvd2VycyxhYzIwMFwiLCAwKTtcbitcdGlmICghYWMyMDBfbm9kZSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJtaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcblwiKSk7XG4rXHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcbitcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuK1x0aWYgKCFjbGllbnQpIHtcbitcdFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiQUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxuXCIpKTtcbitcdH1cbitcbitcdGxpbmsgPSBkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuK1x0XHRcdCAgICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpO1xuK1x0aWYgKCFsaW5rKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwiZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0aWYgKFJFQURfT05DRShsaW5rLVx1MDAzZXN0YXR1cykgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXG4rXHRcdFx0XHQgICAgXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2VyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgICAgXCJ4LXBvd2VycyxhYzIwMFwiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSxcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byBnZXQgQUMyMDAgcmVnbWFwXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9lcnJvcjtcbitcdH1cbitcbitcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XG4rXHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbitcdFx0XHRcdCAgXHUwMDI2aW50ZXJuYWxfY2FsaWJyYXRpb24pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuK1x0XHRjYWxpYnJhdGlvbiA9IGludGVybmFsX2NhbGlicmF0aW9uO1xuK1x0fVxuK1xuK1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuK1x0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4rXHRcdFx0ICAgRklFTERfTUFYKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLKTtcbitcdHByaXYtXHUwMDNlZXBoeV9jdGwgPVxuK1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuK1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuK1xuK1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdGlmIChJU19FUlIoY2xrKSkge1xuK1x0XHRyZXQgPSBQVFJfRVJSKGNsayk7XG4rXHRcdGdvdG8gb3V0X2Vycm9yO1xuK1x0fVxuK1xuK1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbitcdGNsa19wdXQoY2xrKTtcbitcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwidW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdCAgICBjbGtfcmF0ZSk7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4rXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4rXHRwcml2LVx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4rXHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbitcbitvdXRfZXJyb3I6XG4rXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXG5cIik7XG4rb3V0X3B1dF9jbGllbnQ6XG4rXHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1x0cmV0dXJuIEVSUl9QVFIocmV0KTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5AQCAtMCwwICsxLDM4NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVRcdDNcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcdDI1MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDBcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0tcdFx0R0VOTUFTSygxMSwgOClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLXHRcdFx0R0VOTUFTSyg3LCA2KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAxKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKVxuKyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVx0XHRcdEJJVCg1KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcdFx0QklUKDIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgxKVxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbitcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE9cdFx0QklUKDMpXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0tcdFx0R0VOTUFTSygyLCAwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1x0XHRcdDB4MDJcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXHRcdEJJVCgxNSlcbitcbisjZGVmaW5lIEFDMzAwX1NZU19JT19SRUdcdFx0XHQweDA1XG4rI2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxNSwgMTQpXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcdFx0XHRHRU5NQVNLKDExLCAxMClcbisjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yXHRcdFx0MlxuKyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcdFx0XHQweDA2XG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxuK1x0KEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXFxcbitcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXG4rXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxuK1x0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbitcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxuK1xuK3N0cnVjdCBhYzMwMF9lcGh5X2N0bCB7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0dTE2IHN5c19jb250cm9sO1xuK1x0dTE2IGVwaHlfY29uZmlnO1xuK1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbitcdGJvb2wgcGFja2FnZV9rbm93bjtcbitcdGJvb2wgaW50ZXJuYWxfZGxkbztcbitcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4rXHRib29sIHBvd2VyZWQ7XG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgaW50XG4rYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbitcdFx0XHRcdHUxNiB2YWwpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpO1xuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHQgdTE2IG1hc2ssIHUxNiBzZXQpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHR1MTYgdmFsID0gKHJldCBcdTAwMjYgfm1hc2spIHwgKHNldCBcdTAwMjYgbWFzayk7XG4rXG4rXHRcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcbitcdFx0XHRfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxuK1x0XHRcdFx0XHQgICAgcmVnbnVtLCB2YWwpO1xuK1x0fVxuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jb25maWcgfFxuK1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuK31cbitcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHQvKlxuK1x0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcbitcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcbitcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXG4rXHQgKi9cbitcdHJldHVybiAhcHJpdi1cdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuK1x0XHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXG4rXHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZWNsayk7XG4rXHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4rXHRcdGVsc2UgaWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcbitcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxuK1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbitcdGlmICghcmV0KVxuK1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdHU4IHBhY2thZ2Vfc3RhdHVzO1xuK1x0dTE2IHJlc2V0X3ZhbHVlO1xuK1x0aW50IHN5c19jb250cm9sO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbitcdFx0ZnNsZWVwKDEwMDAwKTtcbitcdH1cbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1xuK1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuK1x0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XG4rXHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcbitcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4rXHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuK1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxuK1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuK1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0XHRcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuK1x0XHRcdFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Bvd2VyX29mZjpcbitcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcbit7XG4rXHRjbGtfcHV0KGRhdGEpO1xuK31cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4rXHR1OCBiZ3NfZWZmdXNlX2NvZGU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcblwiKSk7XG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdHByaXYtXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWNsaykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlY2xrKSxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXG5cIikpO1xuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cIikpO1xuK1xuK1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VjbGspO1xuK1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFo7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcblwiLFxuK1x0XHRcdFx0XHQgICAgIGNsa19yYXRlKSk7XG4rXHR9XG4rXHRwcml2LVx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xuK1xuK1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuK1x0YmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4rXHRcdFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcbitcdHByaXYtXHUwMDNlZXBoeV9jb25maWcgPVxuK1x0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xuK1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OGYyYjBiNjM5MDk2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5AQCAtMCwwICsxLDUzNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vcGh5bGliLmhcIlxuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbitcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8wXHRcdFx0XHQwXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuKyNkZWZpbmUgQUNYMDBfUEFHRV82XHRcdFx0XHQ2XG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cdFx0MlxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVx0MHg0ODI0XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXHQweDE3XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVx0MHg3MDhmXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1x0XHRcdDB4MTVcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXG4rXHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbitcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcdFx0MHgwMGJjXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcdDB4MDA0NFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4rXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4rXHQgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUylcbitcbisvKlxuKyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvclxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4rICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuXG4rICovXG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRwaHlkZXZfd2Fybihwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwiLFxuK1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuK1x0c2l6ZV90IGk7XG4rXHRzaXplX3QgbGVuO1xuK1x0dTggKmJ1ZjtcbitcdHUxNiB2YWwgPSAwO1xuK1xuK1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuK1x0aWYgKElTX0VSUihjZWxsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY2VsbCk7XG4rXG4rXHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbitcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xuK1x0aWYgKElTX0VSUihidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuK1x0aWYgKCFsZW4gfHwgbGVuIFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xuK1x0XHRrZnJlZShidWYpO1xuK1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKylcbitcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuK1x0a2ZyZWUoYnVmKTtcbitcdCp2YWx1ZSA9IHZhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuK1x0Ym9vbCBzZWxlY3RhYmxlO1xuK1x0Ym9vbCBmaXhlZF9hYzMwMDtcbitcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4rXHR1OCBjYWxpYnJhdGlvbjtcbitcdHUzMiBiYXNlX2FkZHI7XG4rXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCJyZWdcIiwgXHUwMDI2YmFzZV9hZGRyKTtcbitcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRpZiAoIXNlbGVjdGFibGUgXHUwMDI2XHUwMDI2ICFmaXhlZF9hYzMwMCBcdTAwMjZcdTAwMjZcbitcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcbitcdGhhc19jb25maWd1cmF0aW9uID1cbitcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCJudm1lbS1jZWxsLW5hbWVzXCIsXG4rXHRcdFx0XHRcdCBcImNvbmZpZ3VyYXRpb25cIikgXHUwMDNlPSAwO1xuK1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4rXHRcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcImNvbmZpZ3VyYXRpb25cIixcbitcdFx0XHRcdFx0XHRcdTAwMjZjb25maWd1cmF0aW9uKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdGlmIChzZWxlY3RhYmxlKSB7XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuK1x0XHRcdGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4rXHRcdGlmIChoYXNfY29uZmlndXJhdGlvbiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4rXHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4rXHRcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICBcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbitcdFx0XHRcdGNvbmZpZ3VyYXRpb24pO1xuK1xuK1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4rXHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuK1x0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICAgXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCIpO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4rXHRlbHNlXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4rXG4rb3V0X3B1dF9ub2RlOlxuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VvZl9ub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4rXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuK1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbitcbitvdXRfcmVzdG9yZV9wYWdlOlxuK1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbitcdHJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbitcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJlc3VtZV9yZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRcdGlmIChyZXN1bWVfcmV0KVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgbWF0Y2g7XG4rXG4rXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikgfHxcbitcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbitcdFx0Lm5hbWUgPSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcIixcbitcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4rXHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4rXHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4rXHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuK1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuK1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbitcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbitcdH0sXG4rfTtcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuK1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbitcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4rXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuK1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbitcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbit9O1xuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaCBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oXG5pbmRleCBhYWQ5YzZiNTA0NjM2Li4zZTgwNGZjMWIwM2ViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rc3RydWN0IGRldmljZTtcbiBcbiAjaWZkZWYgQ09ORklHX01GRF9TWVNDT05cbiBzdHJ1Y3QgcmVnbWFwICpkZXZpY2Vfbm9kZV90b19yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5AQCAtMzAsNiArMzEsOSBAQCBzdHJ1Y3QgcmVnbWFwICpzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlX29wdGlvbmFsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRcdFx0XHRcdFx0XHRjb25zdCBjaGFyICpwcm9wZXJ0eSk7XG4gaW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApO1xuK2ludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcbitcdFx0XHRcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWdtYXAgKmRldmljZV9ub2RlX3RvX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuIHtcbkBAIC03NSw2ICs3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50XG4rZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fTElOVVhfTUZEX1NZU0NPTl9IX18gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIwOjM4OjQxLjU0MTEwOTM1MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDgxNTgzOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgUGF0Y2ggZm9yIEZ1enppbmcgUmVhY2hhYmlsaXR5KipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBuZXcgRXRoZXJuZXQgUEhZIHBhY2thZ2VzIGZyb20gWC1Qb3dlcnMsIHNwZWNpZmljYWxseSB0aGUgQUMyMDAgYW5kIEFDMzAwLiBJdCdzIHRvdWNoaW5nIHRoZSB1c3VhbCBzdXNwZWN0czogZGV2aWNlIHRyZWUgYmluZGluZ3MsIEtjb25maWcvTWFrZWZpbGVzLCBhbmQgbmV3IGRyaXZlciBmaWxlcyBmb3IgdGhlIE11bHRpLUZ1bmN0aW9uIERldmljZSAoTUZEKSBhbmQgdGhlIFBIWSBpdHNlbGYuIE15IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBzeXprYWxsZXIsIG9yIGFueSBmdXp6aW5nIHNldHVwLCBjYW4gYWN0dWFsbHkgcmVhY2ggdGhpcyBuZXcgY29kZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmVsaWFuY2Ugb24gZGV2aWNlIHRyZWUgbm9kZXMuXG5cbkkndmUgZ290IGFuIE1GRCBkcml2ZXIgKGBhYzIwMC5jYCkgYW5kIGEgUEhZIGRyaXZlciAoYGFjeDAwLmNgIGFuZCBhc3NvY2lhdGVkIGZpbGVzKS4gVGhlIGBzeXNjb24uY2AgZmlsZSBpcyBiZWluZyBtb2RpZmllZCB0byBhZGQgYSBgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwYCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0J3MgY29yZSBrZXJuZWwgbG9naWMsIGEgY29tbW9uIGVudHJ5IHBvaW50IGZvciBwb3RlbnRpYWwgZnV6emluZy4gVGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgdG8gcHJvYmUgZm9yIHJlYWNoYWJpbGl0eS5cblxuSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgaW5zdGFudGlhdGlvbiBtZXRob2RzLiBDYW4gSSBpbnN0YW50aWF0ZSB0aGVzZSBkZXZpY2VzIHRocm91Z2ggSTJDIG9yIE1ESU8gc3lzZnMgZW50cmllcywgb3IgZXZlbiB2aXJ0dWFsIGRldmljZSB0cmVlIG1hbmlwdWxhdGlvbj8gVGhlIGFuc3dlciwgYXQgbGVhc3Qgc3RyYWlnaHRmb3J3YXJkbHksIGlzIG5vLiAgVGhlIFBIWSBkcml2ZXIgKGBhY3gwMF9lcGh5X3Byb2JlYCkgZXhwbGljaXRseSBjaGVja3MgZm9yIGEgYGRldi1cdTAwM2VvZl9ub2RlYCBhbmQgcmV0dXJucyBgLUVOT0RFVmAgaWYgaXQncyBub3QgcHJlc2VudC4gIFRoZSBNRkQgZHJpdmVyIChgYWMyMDBfcHJvYmVgKSBhbHNvIHVzZXMgYGRldi1cdTAwM2VvZl9ub2RlYCBpbiB0aGUgY3JpdGljYWwgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgY2FsbC4gIElmIEkgdHJ5IHRvIGluc3RhbnRpYXRlIHRoZXNlIGRldmljZXMgd2l0aCBzeXNmcyBgbmV3X2RldmljZWAsIHRoZXJlJ3Mgbm8gd2F5IHRvIGF0dGFjaCBhIERUIG5vZGUuXG5cblN5emthbGxlciBkb2VzIGhhdmUgbGltaXRlZCBJMkMvTURJTyBzdXBwb3J0LCB0eXBpY2FsbHkgdXNlZCB2aWEgYC9kZXYvaTJjLSpgIGRldmljZXMuIEhvd2V2ZXIsIGl0J3Mgbm90IGdvaW5nIHRvIGF1dG9tYXRpY2FsbHkgKnByb2JlKiBkcml2ZXJzIHVubGVzcyB0aGUgZGV2aWNlIGlzIHByb3Blcmx5IGluc3RhbnRpYXRlZCwgYW5kIGNlcnRhaW5seSBpc24ndCBnb2luZyB0byBpbmplY3QgZGV2aWNlIHRyZWUgbm9kZXMgb24gZGVtYW5kLiAgSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgaXQncyBkaWZmaWN1bHQgdG8gZ2V0IHRoYXQgbm9kZSBzZXQgdXAgZHluYW1pY2FsbHksIGFuZCBib3RoIHByb2JlcyB3aWxsIGZhaWwuXG5cblRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRoZSB1c2Ugb2YgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAuIEl0ICppcyogYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgYnV0IGl0cyBvbmx5IGV4cGxpY2l0IHVzZSBpbiB0aGUgcGF0Y2ggaXMgd2l0aGluIHRoZSBgYWMyMDAuY2AgZmlsZS4gIFdoaWxlIHRoZSBtb2RpZmljYXRpb24gKnNlZW1zKiBpbXBhY3RmdWwgdG8gY29yZSBjb2RlLCBpZiBgYWMyMDBfcHJvYmVgIGlzIG5ldmVyIGNhbGxlZCwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBub3QgYmUgdGVzdGVkLlxuXG5JIHRob3VnaHQgYWJvdXQgdGhlIHBvdGVudGlhbCB0byBpbnN0YW50aWF0ZSB0aGUgSTJDIGRldmljZSB2aWEgc3lzZnMgLSBhcyBpbiwgZWNobyB0aGUgZGV2aWNlIGFuZCBhZGRyZXNzLCBhbmQgdHJ5IHRvIGhhdmUgaXQgYmluZC4gVGhpcyB3b3VsZCBjYWxsIGBhYzIwMF9wcm9iZWAuIEFuZCBpdCAqd291bGQqLCBidXQgdGhlbiB0aGUgYGRldm1fY2xrX2dldF9lbmFibGVkYCBmdW5jdGlvbiB3b3VsZCBmYWlsIHdpdGggYC1FTk9FTlRgIGJlY2F1c2UgdGhlIGNsayBub2RlIGlzIGFsc28gbWlzc2luZyBmcm9tIHRoZSBkZXZpY2UgdHJlZSBhbmQgdGhlIE1GRCBjb2RlIHJlcXVpcmVzIGl0IHRvIGJlIHByZXNlbnQuXG5cblNvLCByZWFsaXN0aWNhbGx5LCAqbmVpdGhlciogZHJpdmVyIGlzIGxpa2VseSB0byBleGVjdXRlIGFueSBzaWduaWZpY2FudCBjb2RlIHBhdGggd2l0aG91dCBhICp3ZWxsLWRlZmluZWQqIGRldmljZSB0cmVlIG5vZGUuIFRoZXJlZm9yZSwgdGhlIHJlZmFjdG9yZWQgc3lzY29uIEFQSSBpcyB1bmxpa2VseSB0byBiZSB0ZXN0ZWQsIHRvby5cblxuSG93ZXZlciwgdGhlIHJlZmFjdG9yaW5nIGl0c2VsZiBpcyBhIGNoYW5nZSB0byBjb3JlIGBzeXNjb24uY2AgY29kZS4gVGhlIGZ1bmN0aW9uIG5hbWUgYG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgIGFscmVhZHkgZXhpc3RlZCBhbmQgb25seSB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gd2FzIG1vZGlmaWVkIHRvIHVzZSBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbGAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHVzZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgc28gdGhpcyBjaGFuZ2UgKmNvdWxkKiBiZSByZWFjaGFibGUgaWYgdGhlcmUgaXMgYW5vdGhlciBjYWxsIHRvIGl0LlxuXG5UaGUgYm90dG9tIGxpbmUgaXMgdGhhdCB3aGlsZSBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgYWRkaW5nIHN1cHBvcnQsIHRoYXQgY29kZSBpcyB1bnJlYWNoYWJsZSB3aXRob3V0IGNyYWZ0aW5nIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgc3l6a2FsbGVyIHR5cGljYWxseSBkb2VzIGF1dG9tYXRpY2FsbHkgZm9yIGFyYml0cmFyeSBkcml2ZXJzIGFuZCBpdCBpcyB1bmxpa2VseSB0byB0ZXN0IHRoZSBkcml2ZXJzIGlmIEkganVzdCBkZWNsYXJlIHRoYXQgY29kZSBpcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjEyMSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMDozOTowOC42MjI2OTU4MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NzE5NjQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWZkL2FjMjAwLmM9NzQ9c3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbi0tXFxuZHJpdmVycy9tZmQvYWMyMDAuYy0xMzAtXFxuZHJpdmVycy9tZmQvYWMyMDAuYzoxMzE6XFx0cmV0ID0gZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKGRldiwgZGV2LVxcdTAwM2VvZl9ub2RlLFxcbmRyaXZlcnMvbWZkL2FjMjAwLmMtMTMyLVxcdFxcdFxcdFxcdFxcdCAgICAgZGRhdGEtXFx1MDAzZXJlZ21hcCk7XFxuLS1cXG5kcml2ZXJzL21mZC9zeXNjb24uYz0xOTc9c3RhdGljIHN0cnVjdCBzeXNjb24gKlxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjE5ODpvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMTk5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcXG4tLVxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTIzMC0vKipcXG5kcml2ZXJzL21mZC9zeXNjb24uYzoyMzE6ICogb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpIC0gUmVnaXN0ZXIgcmVnbWFwIGZvciBzcGVjaWZpZWQgZGV2aWNlIG5vZGVcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yMzItICogQG5wOiBEZXZpY2UgdHJlZSBub2RlXFxuLS1cXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNDAtICovXFxuZHJpdmVycy9tZmQvc3lzY29uLmM6MjQxOmludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNDIte1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI0MzpcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwobnAsIHJlZ21hcCkpO1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI0NC19XFxuZHJpdmVycy9tZmQvc3lzY29uLmM6MjQ1OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI0Ni1cXG5kcml2ZXJzL21mZC9zeXNjb24uYzoyNDc6c3RhdGljIHZvaWQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNDgte1xcbi0tXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjU5LS8qKlxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI2MDogKiBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIGEgbWFuYWdlZCBleHRlcm5hbCBzeXNjb24gcmVnbWFwXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjYxLSAqIEBkZXY6IERldmljZSB0aGF0IG93bnMgdGhlIHJlZ21hcFxcbi0tXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjcwLSAqL1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI3MTppbnQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNzItXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI3Ni1cXG5kcml2ZXJzL21mZC9zeXNjb24uYzoyNzc6XFx0c3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKTtcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNzgtXFx0aWYgKElTX0VSUihzeXNjb24pKVxcbi0tXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjgxLVxcdHJldHVybiBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LFxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI4MjpcXHRcXHRcXHRcXHRcXHRkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSxcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODMtXFx0XFx0XFx0XFx0XFx0c3lzY29uKTtcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODQtfVxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI4NTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI4Ni1cXG4tLVxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jPTMwMj1FWFBPUlRfU1lNQk9MX0dQTChkZXZpY2Vfbm9kZV90b19yZWdtYXApO1xcbi0tXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMzEwLSAqIGZ1bmN0aW9uIGlzIHNhZmUgdG8gdXNlIGZvciBhIHN5c2NvbiByZWdpc3RlcmVkIHdpdGhcXG5kcml2ZXJzL21mZC9zeXNjb24uYzozMTE6ICogb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpLlxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTMxMi0gKlxcbi0tXFxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmM9MTA3PXN0YXRpYyBpbnQgcnpfc3lzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmMtMTUxLVxcbmRyaXZlcnMvc29jL3JlbmVzYXMvcnotc3lzYy5jOjE1MjpcXHRyZXR1cm4gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYtXFx1MDAzZW9mX25vZGUsIHJlZ21hcCk7XFxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmMtMTUzLX1cXG4tLVxcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jPTQxMD1zdGF0aWMgaW50IHNldHVwX2NwdWhwX2FuZF9jcHVpZGxlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTQ0OC1cXHQvKiByZWdpc3RlciBjdXN0b20gbW1pbyByZWdtYXAgd2l0aCBzeXNjb24gKi9cXG5kcml2ZXJzL3NvYy9zYW1zdW5nL2V4eW5vcy1wbXUuYzo0NDk6XFx0cmV0ID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChpbnRyX2dlbl9ub2RlLFxcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTQ1MC1cXHRcXHRcXHRcXHRcXHRwbXVfY29udGV4dC1cXHUwMDNlcG11aW50cmdlbik7XFxuLS1cXG5kcml2ZXJzL3NvYy9zYW1zdW5nL2V4eW5vcy1wbXUuYz00NzY9c3RhdGljIGludCBleHlub3NfcG11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3NvYy9zYW1zdW5nL2V4eW5vcy1wbXUuYy01MTYtXFxuZHJpdmVycy9zb2Mvc2Ftc3VuZy9leHlub3MtcG11LmM6NTE3OlxcdFxcdHJldCA9IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoZGV2LVxcdTAwM2VvZl9ub2RlLCByZWdtYXApO1xcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTUxOC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9zb2Mvc3VueGkvc3VueGlfc3JhbS5jPTQwOD1zdGF0aWMgaW50IF9faW5pdCBzdW54aV9zcmFtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3NvYy9zdW54aS9zdW54aV9zcmFtLmMtNDMxLVxcbmRyaXZlcnMvc29jL3N1bnhpL3N1bnhpX3NyYW0uYzo0MzI6XFx0XFx0cmV0ID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYtXFx1MDAzZW9mX25vZGUsIHJlZ21hcCk7XFxuZHJpdmVycy9zb2Mvc3VueGkvc3VueGlfc3JhbS5jLTQzMy1cXHRcXHRpZiAocmV0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmg9MzA9c3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oLTMxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKnByb3BlcnR5KTtcXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaDozMjppbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oLTMzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmg6MzQ6aW50IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtMzUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oPTY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChcXG4tLVxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oLTc1LVxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjc2OnN0YXRpYyBpbmxpbmUgaW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaC03Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaD04Mj1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjgzOmRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtODQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIwOjM5OjEwLjYxOTg5NjgyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTQ3MDQwODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCByZWZhY3RvcnMgYG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgIGFuZCBhZGRzIGBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBvcmlnaW5hbCBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgaXMgdXNlZCBieSBhIGZldyBTb0Mtc3BlY2lmaWMgZHJpdmVycyAoYGV4eW5vcy1wbXUuY2AsIGByei1zeXNjLmNgLCBhbmQgYHN1bnhpX3NyYW0uY2ApLiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHNvbWUgY29yZSBzeXNjb24gY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcm5hbCByZWdpc3RyYXRpb24gZnVuY3Rpb24uIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGl0IG5vdyB1c2VzIGBvZl9ub2RlX2dldCgpYCB0byB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2Ugbm9kZSwgZml4aW5nIGEgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZSwgd2hpY2ggaXMgZ29vZC4gVGhlcmUncyBhbHNvIHNvbWUgbWlub3IgZGlmZmVyZW5jZSBpbiBtZW1vcnkgYWxsb2NhdGlvbi4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlJ3MgYSBuZXcgYGFjMjAwYCBNRkQgZHJpdmVyIGFuZCBgYWN4MDBgIFBIWSBkcml2ZXIgaW5jbHVkZWQgaW4gdGhpcyBwYXRjaC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgYnkgc3l6a2FsbGVyJ3Mgc3RhbmRhcmQgdGVzdCBlbnZpcm9ubWVudHMsIHByaW1hcmlseSB4ODZfNjQgYW5kIEFSTTY0IGB2aXJ0YC4gSSBrbm93IHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBydW4gdGhlc2Ugc3BlY2lmaWMgU29DcywgYW5kIHNvLCB0aGUgU29DIGRyaXZlcnMgdGhhdCB1c2UgYG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgIGFyZSBsaWtlbHkgdW5yZWFjaGFibGUuIEJ1dCwgaXMgdGhlIGNvcmUgZnVuY3Rpb24gYWZmZWN0ZWQgYnkgdGhlIHBhdGNoIHJlYWNoYWJsZT9cblxuTGV0J3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhvc2UgbmV3IGRyaXZlcnMuIGBhYzIwMF9wcm9iZWAgaXMgYW4gSTJDIHByb2JlIGZ1bmN0aW9uLCBhbmQgdGhlIGBhY3gwMF9lcGh5X3Byb2JlYCBpcyBhIE1ESU8gUEhZIHByb2JlIGZ1bmN0aW9uLiBGb3IgYm90aCBvZiB0aGVtLCB0aGUgZGV2aWNlIHRyZWUgbm9kZSAoYG9mX25vZGVgKSBpcyBjcml0aWNhbC4gSW4gdGhlIGBhYzIwMGAgY2FzZSwgSSBub3RpY2VkIHRoZSBmdW5jdGlvbiBjYWxscyBgZGV2bV9jbGtfZ2V0X2VuYWJsZWRgLiBJZiBubyBjbG9jayBpcyBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBub2RlLCBpdCByZXR1cm5zIGFuIGVycm9yIGFuZCB0aGUgcHJvYmUgZmFpbHMuIEZvciBgYWN4MDBgLCB0aGUgcHJvYmUgcmV0dXJucyBgLUVOT0RFVmAgaWYgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUgYW4gYG9mX25vZGVgLiBJIGFsc28gc2VlIHRoYXQgdGhlIFBIWSBkcml2ZXIgdXNlcyB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBmb3IgZGV2aWNlIG1hdGNoaW5nIGBnZW5waHlfbWF0Y2hfcGh5X2RldmljZWAsIHdoaWNoIGZhaWxzIGlmIGBvZl9ub2RlYCBpcyBgTlVMTGAuXG5cbkNhbiBzeXprYWxsZXIgY3JlYXRlIGEgc2l0dWF0aW9uIHdoZXJlIHRoZXNlIGRyaXZlcnMnIHByb2JlcyBnZXQgY2FsbGVkPyBJIGNhbiB0cnkgdG8gY3JlYXRlIGFuIEkyQyBvciBNRElPIGRldmljZSB2aWEgc3lzZnMgaW4gYSB2aXJ0dWFsaXplZCBRRU1VL0dDRSBlbnZpcm9ubWVudC4gQnV0IHRoZSBjcnVjaWFsIGlzc3VlIGlzIHRoZSBkZXZpY2UgdHJlZSBub2RlLiBTeXprYWxsZXIgZG9lc24ndCBjdXJyZW50bHkgaW5qZWN0IERUIG92ZXJsYXlzLCBhbmQgd2l0aG91dCB0aGUgRFQgbm9kZSwgdGhlIGRyaXZlcnMgd2lsbCBub3QgaW5pdGlhbGl6ZSBwcm9wZXJseS4gV2l0aG91dCBhIHZhbGlkIGBvZl9ub2RlYCwgdGhlc2UgZHJpdmVycyB3b24ndCBleGVjdXRlIGFueSBzaWduaWZpY2FudCBjb2RlIHBhdGhzLCByZXR1cm5pbmcgZWFybHkgb3IgZmFpbGluZyBhdCBgZGV2bV9jbGtfZ2V0X2VuYWJsZWRgLiBUaGUgYGFjeDAwYCBkcml2ZXIgd2lsbCBhbHNvIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGVyZSBpcyBubyBub2RlIGF2YWlsYWJsZS5cblxuU28sIEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBvdGhlciB3YXlzIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbGAgb3IgdGhlIGBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgPyBGcm9tIGEgY29kZSBzZWFyY2gsIEkgc2VlIHRoYXQgdGhpcyBpcyBub3QgcG9zc2libGU7IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgY2FsbGVkIGJ5IHRoZSBkcml2ZXIgcHJvYmVzIGFuZCB0aG9zZSBhcmUgdGhlIG9ubHkgcGxhY2VzLlxuXG5Pa2F5LCBsZXQgbWUgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYWdhaW46IHRoZSBwYXRjaCBoYXMgc29tZSBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIFRoYXQgaXMgbXkgY29uY2x1c2lvbi5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcmVmYWN0b3JlZCBjb2RlIHBhdGggaXMgbm90IGVhc2lseSByZWFjaGFibGUgaW4gdGhlIHN5emthbGxlciBzZXR1cCwgYW5kIHRoZSBkcml2ZXJzIGRlcGVuZCBvbiBkZXZpY2UgdHJlZSBub2RlcyB0aGF0IGFyZSBub3QgZWFzaWx5IHByb3ZpZGVkLCB0aGUgcGF0Y2ggaXMgdW5saWtlbHkgdG8gdW5jb3ZlciBhbnkgbWVhbmluZ2Z1bCBuZXcgZnV6emluZyB0YXJnZXRzIGluIG15IHR5cGljYWwgdGVzdCBlbnZpcm9ubWVudCwgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MDQsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMDozOTo0Ny41NjY5NDAwODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZHJpdmVycyBmb3IgWC1Qb3dlcnMgQUMyMDAgTUZEIGFuZCBBQ3gwMCBFdGhlcm5ldCBQSFlzLCB3aGljaCBzdHJpY3RseSByZXF1aXJlIGRldmljZSB0cmVlIG5vZGVzIChvZl9ub2RlKSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIFNpbmNlIHN5emthbGxlciBkb2VzIG5vdCBkeW5hbWljYWxseSBnZW5lcmF0ZSBhcmJpdHJhcnkgZGV2aWNlIHRyZWUgbm9kZXMsIGFuZCB0aGVzZSBkZXZpY2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZGVmYXVsdCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSAndmlydCcgb3IgeDg2XzY0KSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuIFRoZSBtaW5vciByZWZhY3RvcmluZyBpbiBzeXNjb24uYyBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgU29DLXNwZWNpZmljIGRyaXZlcnMgKEV4eW5vcywgU3VueGksIFJlbmVzYXMpIHRoYXQgYXJlIGFsc28gbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBkcml2ZXJzIGZvciBYLVBvd2VycyBBQzIwMCBNRkQgYW5kIEFDeDAwIEV0aGVybmV0IFBIWXMsIHdoaWNoIHN0cmljdGx5IHJlcXVpcmUgZGV2aWNlIHRyZWUgbm9kZXMgKG9mX25vZGUpIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gU2luY2Ugc3l6a2FsbGVyIGRvZXMgbm90IGR5bmFtaWNhbGx5IGdlbmVyYXRlIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcywgYW5kIHRoZXNlIGRldmljZXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBkZWZhdWx0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VICd2aXJ0JyBvciB4ODZfNjQpLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gVGhlIG1pbm9yIHJlZmFjdG9yaW5nIGluIHN5c2Nvbi5jIGlzIG9ubHkgcmVhY2hhYmxlIHZpYSBTb0Mtc3BlY2lmaWMgZHJpdmVycyAoRXh5bm9zLCBTdW54aSwgUmVuZXNhcykgdGhhdCBhcmUgYWxzbyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMDozOTo0Ny41NjY5NjU4MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownx6s2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-09 20:36:48 +0000 UTC FinishedAt: 2026-08-09 20:39:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBkcml2ZXJzIGZvciBYLVBvd2VycyBBQzIwMCBNRkQgYW5kIEFDeDAwIEV0aGVybmV0IFBIWXMsIHdoaWNoIHN0cmljdGx5IHJlcXVpcmUgZGV2aWNlIHRyZWUgbm9kZXMgKG9mX25vZGUpIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gU2luY2Ugc3l6a2FsbGVyIGRvZXMgbm90IGR5bmFtaWNhbGx5IGdlbmVyYXRlIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcywgYW5kIHRoZXNlIGRldmljZXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBkZWZhdWx0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VICYjMzk7dmlydCYjMzk7IG9yIHg4Nl82NCksIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBUaGUgbWlub3IgcmVmYWN0b3JpbmcgaW4gc3lzY29uLmMgaXMgb25seSByZWFjaGFibGUgdmlhIFNvQy1zcGVjaWZpYyBkcml2ZXJzIChFeHlub3MsIFN1bnhpLCBSZW5lc2FzKSB0aGF0IGFyZSBhbHNvIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMjA6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkOTRhNWE5OWM1NWU5NTZhMmZmYTBiYTA1NzVhZmEwMDE0NmE1MGM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAyMDozODo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42MDk4MzFiMTVjODA2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWxcbkBAIC0wLDAgJiM0MzsxLDQ5IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IFgtUG93ZXJzIEFDMjAwIG1peGVkLXNpZ25hbCBJQ1xuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjpcbiYjNDM7ICBUaGUgQUMyMDAgaXMgYSBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDIGNvbnRhaW5pbmcgYXVkaW8sIHZpZGVvLCBSVEMgYW5kXG4mIzQzOyAgRmFzdCBFdGhlcm5ldCBQSFkgZnVuY3Rpb25zLiBJdHMgY29udHJvbCByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIG92ZXIgSTJDLlxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgQUMyMDAgaW5wdXQgY2xvY2suIFdoZW4gdXNpbmcgdGhlIEV0aGVybmV0IFBIWSwgaXRzIGNvbmZpZ3VyZWQgcmF0ZSBtdXN0XG4mIzQzOyAgICAgIGJlIDI0IG9yIDI3IE1IeiwgbWF0Y2hpbmcgdGhlIHJhdGVzIGVuY29kZWQgYnkgdGhlIGRvY3VtZW50ZWQgRVBIWSBjbG9ja1xuJiM0MzsgICAgICBzZWxlY3Rvci5cbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gcmVnXG4mIzQzOyAgLSBjbG9ja3NcbiYjNDM7XG4mIzQzO2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBpMmMge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIG1peGVkLXNpZ25hbEAxMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgxMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG4mIzQzOy4uLlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWUwYzVlOTgwYzM5ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMjA3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcbiYjNDM7ICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4mIzQzOyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgY29udHJvbCByZWdpc3RlcnMgYXJlIHBhcnQgb2YgYW4gSTJDIE1GRCxcbiYjNDM7ICB3aGlsZSBBQzMwMCBjb250cm9sIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTZcbiYjNDM7ICBwbHVzIHRoZSBsaW5rIFBIWSBhZGRyZXNzLlxuJiM0MztcbiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLlxuJiM0MzsgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4mIzQzOyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4mIzQzO1xuJiM0MzsgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuJiM0MzsgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvXG4mIzQzOyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4mIzQzO1xuJiM0MztzZWxlY3Q6XG4mIzQzOyAgcHJvcGVydGllczpcbiYjNDM7ICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgIGVudW06XG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgcmVxdWlyZWQ6XG4mIzQzOyAgICAtIGNvbXBhdGlibGVcbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGVudW06XG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heGltdW06IDMxXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHouIFRoZSBBQzIwMCBpbnB1dCBjbG9ja1xuJiM0MzsgICAgICBiZWxvbmdzIHRvIHRoZSByZWZlcmVuY2VkIEFDMjAwIE1GRCBpbnN0ZWFkLlxuJiM0MztcbiYjNDM7ICB2Y2Mtc3VwcGx5OlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMVxuJiM0MzsgICAgICBvbiBBQzMwMC5cbiYjNDM7XG4mIzQzOyAgbnZtZW0tY2VsbHM6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nXG4mIzQzOyAgICAgIGNhbGlicmF0aW9uIGNvZGUsIGJpdHMgNyB0aHJvdWdoIDQgYXJlIHJlc2VydmVkLCBiaXQgOCBzZWxlY3RzIEFDMzAwXG4mIzQzOyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwXG4mIzQzOyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5XG4mIzQzOyAgICAgIHRoZSBsb3cgY2FsaWJyYXRpb24gYml0cyBvciBvbWl0IHRoZSBjZWxsIGFuZCB1c2UgaXRzIGludGVybmFsIGVGdXNlXG4mIzQzOyAgICAgIGNvcHkgaW5zdGVhZC5cbiYjNDM7XG4mIzQzOyAgbnZtZW0tY2VsbC1uYW1lczpcbiYjNDM7ICAgIGNvbnN0OiBjb25maWd1cmF0aW9uXG4mIzQzO1xuJiM0MzsgIHgtcG93ZXJzLGFjMjAwOlxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZVxuJiM0MzsgICAgZGVzY3JpcHRpb246IFJlZmVyZW5jZSB0byB0aGUgQUMyMDAgTUZEIGNvbnRhaW5pbmcgdGhpcyBFdGhlcm5ldCBQSFlcbiYjNDM7XG4mIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDpcbiYjNDM7ICAgIHR5cGU6IGJvb2xlYW5cbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lXG4mIzQzOyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXG4mIzQzO1xuJiM0MztwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOlxuJiM0MzsgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXG4mIzQzOyAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcbiYjNDM7ICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAtIGNvbXBhdGlibGVcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gdmNjLXN1cHBseVxuJiM0MztcbiYjNDM7ZGVwZW5kZW50UmVxdWlyZWQ6XG4mIzQzOyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXG4mIzQzOyAgbnZtZW0tY2VsbC1uYW1lczogWyBudm1lbS1jZWxscyBdXG4mIzQzO1xuJiM0MzthbGxPZjpcbiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjbG9ja3M6IGZhbHNlXG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHJlZzpcbiYjNDM7ICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7ICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSBjbG9ja3NcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6XG4mIzQzOyAgICAgICAgICBtYXhpbXVtOiA3XG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0gY2xvY2tzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgeC1wb3dlcnMsYWMyMDAgPSBcdTAwM2NcdTAwMjZhYzIwMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcbiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDtldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MztcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIG1kaW8ge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7XG4mIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAxIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwmIzM0O2NvbmZpZ3VyYXRpb25cJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMSB7XG4mIzQzOyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbiYjNDM7Li4uXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWdcbmluZGV4IDc2M2NlNmEzNDc4MmIuLjk1ZTNjNjI3NDJiYjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9LY29uZmlnXG5AQCAtMjA1LDYgJiM0MzsyMDUsMTggQEAgY29uZmlnIE1GRF9BQzEwMFxuIFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcbiBcdCAgY29tcG9uZW50cyBsaWtlIGNvZGVjcyBvciBSVEMgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuXG4gXG4mIzQzO2NvbmZpZyBNRkRfQUMyMDBcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMFwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gSTJDXG4mIzQzO1x0ZGVwZW5kcyBvbiBPRlxuJiM0MztcdHNlbGVjdCBNRkRfU1lTQ09OXG4mIzQzO1x0c2VsZWN0IFJFR01BUF9JMkNcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQy4gVGhlIEFDMjAwXG4mIzQzO1x0ICBjb250YWlucyBhdWRpbywgdmlkZW8sIFJUQyBhbmQgRmFzdCBFdGhlcm5ldCBQSFkgZnVuY3Rpb25zIGFuZCBpc1xuJiM0MztcdCAgY28tcGFja2FnZWQgd2l0aCBzb21lIEFsbHdpbm5lciBINiBhbmQgSDYxNiBTb0NzLiBUaGlzIGRyaXZlciBwcm92aWRlc1xuJiM0MztcdCAgdGhlIHNoYXJlZCByZWdpc3RlciBhY2Nlc3MgdXNlZCBieSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkcml2ZXJzLlxuJiM0MztcbiBjb25maWcgTUZEX0FYUDIwWFxuIFx0dHJpc3RhdGVcbiBcdHNlbGVjdCBNRkRfQ09SRVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcbmluZGV4IGRkNGJiN2U3N2MzMzYuLjg5MGU3NmE5YWQwMGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcbkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSlcdCYjNDM7PSBkYTkwNTItc3BpLm9cbiBvYmotJChDT05GSUdfTUZEX0RBOTA1Ml9JMkMpXHQmIzQzOz0gZGE5MDUyLWkyYy5vXG4gXG4gb2JqLSQoQ09ORklHX01GRF9BQzEwMClcdFx0JiM0Mzs9IGFjMTAwLm9cbiYjNDM7b2JqLSQoQ09ORklHX01GRF9BQzIwMClcdFx0JiM0Mzs9IGFjMjAwLm9cbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWClcdCYjNDM7PSBheHAyMHgub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX0kyQylcdCYjNDM7PSBheHAyMHgtaTJjLm9cbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWF9SU0IpXHQmIzQzOz0gYXhwMjB4LXJzYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWMyMDAuYyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yNTA2NmJiMzZhYzc2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9hYzIwMC5jXG5AQCAtMCwwICYjNDM7MSwxNzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqXG4mIzQzOyAqIEJhc2VkIG9uIHRoZSBBQzEwMCBkcml2ZXI6XG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxNiBDaGVuLVl1IFRzYWlcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1JFR1x0XHRcdDB4MDAwMFxuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9DSElQX01BU0tcdFx0R0VOTUFTSygxMSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfUkVHXHRcdFx0MHgwMDAyXG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovXG4mIzQzOyNkZWZpbmUgQUMyMDBfVFdJX1JFR19BRERSX0hcdDB4MDBmZVxuJiM0MzsjZGVmaW5lIEFDMjAwX01BWF9SRUdcdFx0MHhhMWYyXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMyMDAge1xuJiM0MztcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlX2NmZyBhYzIwMF9yYW5nZV9jZmdbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHQucmFuZ2VfbWF4ID0gQUMyMDBfTUFYX1JFRyxcbiYjNDM7XHRcdC5zZWxlY3Rvcl9yZWcgPSBBQzIwMF9UV0lfUkVHX0FERFJfSCxcbiYjNDM7XHRcdC5zZWxlY3Rvcl9tYXNrID0gMHhmZixcbiYjNDM7XHRcdC53aW5kb3dfbGVuID0gMjU2LFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBFYWNoIEFDMjAwIHN1Yi1ibG9jayBjYW4gcmVzZXQgaW5kZXBlbmRlbnRseSwgaW52YWxpZGF0aW5nIGl0cyByZWdpc3RlclxuJiM0MzsgKiBjb250ZW50cyB3aXRob3V0IHJlZ21hcCYjMzk7cyBrbm93bGVkZ2UuIENhY2hlIG9ubHkgdGhlIGNvbW1vbiBwYWdlIHNlbGVjdG9yO1xuJiM0MzsgKiB0aGlzIGF2b2lkcyBhIHNlbGVjdG9yIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBldmVyeSBhY2Nlc3Mgb24gdGhlIHNhbWUgcGFnZVxuJiM0MzsgKiB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIHN0YWxlIGZ1bmN0aW9uYWwtcmVnaXN0ZXIgdmFsdWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgYWMyMDBfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWcgIT0gQUMyMDBfVFdJX1JFR19BRERSX0g7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBhYzIwMF9yZWdtYXBfY29uZmlnID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7YWMyMDBcJiMzNDssXG4mIzQzO1x0LnJlZ19iaXRzID0gOCxcbiYjNDM7XHQucmVnX3N0cmlkZSA9IDIsXG4mIzQzO1x0LnZhbF9iaXRzID0gMTYsXG4mIzQzO1x0LnJhbmdlcyA9IGFjMjAwX3JhbmdlX2NmZyxcbiYjNDM7XHQubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUoYWMyMDBfcmFuZ2VfY2ZnKSxcbiYjNDM7XHQubWF4X3JlZ2lzdGVyID0gQUMyMDBfTUFYX1JFRyxcbiYjNDM7XHQudm9sYXRpbGVfcmVnID0gYWMyMDBfdm9sYXRpbGVfcmVnLFxuJiM0MztcdC5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTUFQTEUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhYzIwMF9kaXNhYmxlKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDAgKmRkYXRhID0gZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmVnbWFwX3dyaXRlKGRkYXRhLVx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2Y2xpZW50LVx1MDAzZWRldjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdmVyc2lvbjtcbiYjNDM7XHRzdHJ1Y3QgYWMyMDAgKmRkYXRhO1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWRkYXRhKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihjbGspKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGNsayksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRkZGF0YS1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFx1MDAyNmFjMjAwX3JlZ21hcF9jb25maWcpO1xuJiM0MztcdGlmIChJU19FUlIoZGRhdGEtXHUwMDNlcmVnbWFwKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZGF0YS1cdTAwM2VyZWdtYXApLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vIG1pbmltdW0gZGVsYXkgaXMgZG9jdW1lbnRlZC4gTWF0Y2ggdGhlIHZlbmRvciBkcml2ZXImIzM5O3MgNDAgbXMgZGVsYXlcbiYjNDM7XHQgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0bXNsZWVwKDQwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnbWFwX3JlYWQoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfVkVSU0lPTl9SRUcsIFx1MDAyNnZlcnNpb24pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGRldl9pbmZvKGRldiwgXCYjMzQ7QUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fQ0hJUF9NQVNLLCB2ZXJzaW9uKSxcbiYjNDM7XHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2V0IHRoZSBjaGlwIGFmdGVyIGRlcGVuZGVudCBmdW5jdGlvbiBkcml2ZXJzIGhhdmUgdW5ib3VuZC4gKi9cbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzIwMF9kaXNhYmxlLCBkZGF0YSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYsIGRldi1cdTAwM2VvZl9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICBkZGF0YS1cdTAwM2VyZWdtYXApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciByZWdtYXBcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiYjNDM7e1xuJiM0MztcdGFjMjAwX2Rpc2FibGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhYzIwMF9vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OyB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhYzIwMF9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWMyMDBfaTJjX2lkc1tdID0ge1xuJiM0MztcdHsgLm5hbWUgPSBcJiMzNDthYzIwMFwmIzM0OyB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWMyMDBfaTJjX2lkcyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xuJiM0MztcdC5kcml2ZXIgPSB7XG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O2FjMjAwXCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gYWMyMDBfb2ZfbWF0Y2gsXG4mIzQzO1x0fSxcbiYjNDM7XHQucHJvYmUgPSBhYzIwMF9wcm9iZSxcbiYjNDM7XHQuc2h1dGRvd24gPSBhYzIwMF9zaHV0ZG93bixcbiYjNDM7XHQuaWRfdGFibGUgPSBhYzIwMF9pMmNfaWRzLFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfaTJjX2RyaXZlcihhYzIwMF9kcml2ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1gtUG93ZXJzIEFDMjAwIE1GRCBjb3JlIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3lzY29uLmMgYi9kcml2ZXJzL21mZC9zeXNjb24uY1xuaW5kZXggMjFhN2ZjZGQyNzM3OS4uNDQ4NDIyZmU0ZjIxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWZkL3N5c2Nvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9zeXNjb24uY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h3c3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuQEAgLTE5Myw1MyAmIzQzOzE5NCw5NSBAQCBzdGF0aWMgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfZ2V0X3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0cmV0dXJuIHN5c2Nvbi1cdTAwM2VyZWdtYXA7XG4gfVxuIFxuLS8qKlxuLSAqIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIHJlZ21hcCBmb3Igc3BlY2lmaWVkIGRldmljZSBub2RlXG4tICogQG5wOiBEZXZpY2UgdHJlZSBub2RlXG4tICogQHJlZ21hcDogUG9pbnRlciB0byByZWdtYXAgb2JqZWN0XG4tICpcbi0gKiBSZWdpc3RlciBhbiBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwIG9iamVjdCB3aXRoIHN5c2NvbiBmb3IgdGhlIHNwZWNpZmllZFxuLSAqIGRldmljZSB0cmVlIG5vZGUuIFRoaXMgcmVnbWFwIHdpbGwgdGhlbiBiZSByZXR1cm5lZCB0byBjbGllbnQgZHJpdmVycyB1c2luZ1xuLSAqIHRoZSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKCkgQVBJLlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbi0gKi9cbi1pbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc3lzY29uICpcbiYjNDM7b2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbiB7XG4gXHRzdHJ1Y3Qgc3lzY29uICplbnRyeSwgKnN5c2NvbiA9IE5VTEw7XG4tXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFucCB8fCAhcmVnbWFwKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuIFx0c3lzY29uID0ga3phbGxvY19vYmooKnN5c2Nvbik7XG4gXHRpZiAoIXN5c2Nvbilcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdC8qIGNoZWNrIGlmIHN5c2NvbiBlbnRyeSBhbHJlYWR5IGV4aXN0cyAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzeXNjb25fbGlzdF9sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNnN5c2Nvbl9saXN0LCBsaXN0KVxuIFx0XHRpZiAoZW50cnktXHUwMDNlbnAgPT0gbnApIHtcbi1cdFx0XHRyZXQgPSAtRUVYSVNUO1xuLVx0XHRcdGdvdG8gZXJyX3VubG9jaztcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xuJiM0MztcdFx0XHRrZnJlZShzeXNjb24pO1xuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTtcbiBcdFx0fVxuIFxuIFx0c3lzY29uLVx1MDAzZXJlZ21hcCA9IHJlZ21hcDtcbi1cdHN5c2Nvbi1cdTAwM2VucCA9IG5wO1xuJiM0MztcdHN5c2Nvbi1cdTAwM2VucCA9IG9mX25vZGVfZ2V0KG5wKTtcbiBcbiBcdC8qIHJlZ2lzdGVyIHRoZSByZWdtYXAgaW4gc3lzY29uIGxpc3QgKi9cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c3lzY29uLVx1MDAzZWxpc3QsIFx1MDAyNnN5c2Nvbl9saXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzeXNjb25fbGlzdF9sb2NrKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBzeXNjb247XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZVxuJiM0MzsgKiBAbnA6IERldmljZSB0cmVlIG5vZGVcbiYjNDM7ICogQHJlZ21hcDogUG9pbnRlciB0byByZWdtYXAgb2JqZWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJlZ2lzdGVyIGFuIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXAgb2JqZWN0IHdpdGggc3lzY29uIGZvciB0aGUgc3BlY2lmaWVkXG4mIzQzOyAqIGRldmljZSB0cmVlIG5vZGUuIFRoaXMgcmVnbWFwIHdpbGwgdGhlbiBiZSByZXR1cm5lZCB0byBjbGllbnQgZHJpdmVycyB1c2luZ1xuJiM0MzsgKiB0aGUgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZSgpIEFQSS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBQVFJfRVJSX09SX1pFUk8ob2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN5c2NvbiAqc3lzY29uID0gZGF0YTtcbiBcbi1lcnJfdW5sb2NrOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9kZWwoXHUwMDI2c3lzY29uLVx1MDAzZWxpc3QpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRvZl9ub2RlX3B1dChzeXNjb24tXHUwMDNlbnApO1xuIFx0a2ZyZWUoc3lzY29uKTtcbi1cdHJldHVybiByZXQ7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpIC0gUmVnaXN0ZXIgYSBtYW5hZ2VkIGV4dGVybmFsIHN5c2NvbiByZWdtYXBcbiYjNDM7ICogQGRldjogRGV2aWNlIHRoYXQgb3ducyB0aGUgcmVnbWFwXG4mIzQzOyAqIEBucDogRGV2aWNlIHRyZWUgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlZ21hcFxuJiM0MzsgKiBAcmVnbWFwOiBQb2ludGVyIHRvIHRoZSBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwXG4mIzQzOyAqXG4mIzQzOyAqIFJlZ2lzdGVyIGFuIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXAgb2JqZWN0IHdpdGggc3lzY29uIGFuZCByZW1vdmUgaXQgd2hlblxuJiM0MzsgKiBAZGV2IGlzIHVuYm91bmQuIENvbnN1bWVycyBtdXN0IHN0b3AgdXNpbmcgdGhlIHJlZ21hcCBiZWZvcmUgdGhlIHByb3ZpZGVyIGlzXG4mIzQzOyAqIHVuYm91bmQsIGZvciBleGFtcGxlIGJ5IGVzdGFibGlzaGluZyBhIG1hbmFnZWQgZGV2aWNlIGxpbmsgdG8gQGRldi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN5c2NvbiAqc3lzY29uO1xuJiM0MztcbiYjNDM7XHRzeXNjb24gPSBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKG5wLCByZWdtYXApO1xuJiM0MztcdGlmIChJU19FUlIoc3lzY29uKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHN5c2Nvbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LFxuJiM0MztcdFx0XHRcdFx0ZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2UsXG4mIzQzO1x0XHRcdFx0XHRzeXNjb24pO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7XG4gXG4gLyoqXG4gICogZGV2aWNlX25vZGVfdG9fcmVnbWFwKCkgLSBHZXQgb3IgY3JlYXRlIGEgcmVnbWFwIGZvciBzcGVjaWZpZWQgZGV2aWNlIG5vZGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBhMjlkM2ZlZDhhMDUzLi4yN2I4ZmZlNGI1MzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDc1LDYgJiM0Mzs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MztcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbiYjNDM7XHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuJiM0MztcdCAgcmVnaXN0ZXJzLlxuJiM0MztcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IGUyM2RmNWU4MzZlOWUuLmZmYjBlZmJjNGNjNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMCw0ICYjNDM7MTAwLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQmIzQzOz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCYjNDM7PSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQmIzQzOz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0JiM0Mzs9IHZpdGVzc2Uub1xuJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXHQmIzQzOz0geHBvd2Vycy9cbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICYjNDM7PSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSwzIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4mIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgJiM0Mzs9IHhwb3dlcnMtYWN4MDAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjgxZTAxM2JlNDAxYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzE1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FjeDAwLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVFx0M1xuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFR1x0XHRcdDB4MDAxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXHRcdFx0QklUKDEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXHRcdFx0MHgwMDE2XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXG4mIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcdFx0XHQweDgwMDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXHRcdFx0MHg2MDAwXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXHRcdFx0R0VOTUFTSyg4LCA0KVxuJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwge1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbiYjNDM7XHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4mIzQzO1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBoeV9hZGRyO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcbiYjNDM7XHRib29sIHBvd2VyZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2N0bCB8XG4mIzQzO1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi1cdTAwM2VwaHlfYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVnLCBFUlJfUFRSKHJldCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuJiM0MztcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKCFlcnIpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2UgaWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxuJiM0MztcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0dTE2IGVwaHlfY3RsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHBoeV9hZGRyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7XG4mIzQzO1xuJiM0MztcdC8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovXG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfZGlzYWJsZTpcbiYjNDM7XHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcdGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4mIzQzO1x0c3RydWN0IGRldmljZV9saW5rICpsaW5rO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cHJpdi1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwmIzM0O3ZjY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0YWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCBcJiMzNDt4LXBvd2VycyxhYzIwMFwmIzM0OywgMCk7XG4mIzQzO1x0aWYgKCFhYzIwMF9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxuXCYjMzQ7KSk7XG4mIzQzO1x0Y2xpZW50ID0gb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGUoYWMyMDBfbm9kZSk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4mIzQzO1x0aWYgKCFjbGllbnQpIHtcbiYjNDM7XHRcdHJldCA9IElTX0VOQUJMRUQoQ09ORklHX0kyQykgPyAtRVBST0JFX0RFRkVSIDogLUVOT0RFVjtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxcblwmIzM0OykpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGluayA9IGRldmljZV9saW5rX2FkZChkZXYsIFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpO1xuJiM0MztcdGlmICghbGluaykge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKFJFQURfT05DRShsaW5rLVx1MDAzZXN0YXR1cykgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUocGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7eC1wb3dlcnMsYWMyMDBcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCksXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUMyMDAgcmVnbWFwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2N0bCA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNsaykpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoY2xrKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbiYjNDM7XHRjbGtfcHV0KGNsayk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbiYjNDM7XHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIGNsa19yYXRlKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbiYjNDM7XHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4mIzQzO1xuJiM0MztvdXRfZXJyb3I6XG4mIzQzO1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxcblwmIzM0Oyk7XG4mIzQzO291dF9wdXRfY2xpZW50OlxuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzg3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVRcdDNcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlx0MjUwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTS1x0XHRHRU5NQVNLKDExLCA4KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLXHRcdFx0R0VOTUFTSyg3LCA2KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTS1x0XHRHRU5NQVNLKDIsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4mIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEVcdFx0QklUKDE1KVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuJiM0MzsjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcdFx0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcdFx0XHRHRU5NQVNLKDExLCAxMClcbiYjNDM7I2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXHRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1x0XHRcdDB4MDZcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbiYjNDM7XHQoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcXFxuJiM0MztcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXG4mIzQzO1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4mIzQzO1x0IEZJRUxEX1BSRVAoQUMzMDBfTUlJX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxuJiM0MztcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxuJiM0MztcbiYjNDM7c3RydWN0IGFjMzAwX2VwaHlfY3RsIHtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4mIzQzO1x0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdHUxNiBzeXNfY29udHJvbDtcbiYjNDM7XHR1MTYgZXBoeV9jb25maWc7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHRib29sIHBhY2thZ2Vfa25vd247XG4mIzQzO1x0Ym9vbCBpbnRlcm5hbF9kbGRvO1xuJiM0MztcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4mIzQzO1x0Ym9vbCBwb3dlcmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludFxuJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4mIzQzO1x0XHRcdFx0dTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbiYjNDM7XHRcdFx0XHQgdTE2IG1hc2ssIHUxNiBzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdHUxNiB2YWwgPSAocmV0IFx1MDAyNiB+bWFzaykgfCAoc2V0IFx1MDAyNiBtYXNrKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XG4mIzQzO1x0XHRcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxuJiM0MztcdFx0XHRcdFx0ICAgIHJlZ251bSwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY29uZmlnIHxcbiYjNDM7XHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcbiYjNDM7XHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXG4mIzQzO1x0ICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIXByaXYtXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbiYjNDM7XHRcdEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuJiM0MztcdFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHRcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKCFlcnIpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2UgaWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHR1OCBwYWNrYWdlX3N0YXR1cztcbiYjNDM7XHR1MTYgcmVzZXRfdmFsdWU7XG4mIzQzO1x0aW50IHN5c19jb250cm9sO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbiYjNDM7XHRcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuJiM0MztcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xuJiM0MztcdGlmIChzeXNfY29udHJvbCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XG4mIzQzO1x0aWYgKCh+cGFja2FnZV9zdGF0dXMgXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT1cbiYjNDM7XHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87XG4mIzQzO1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcbiYjNDM7XHRcdFx0XHQgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsXG4mIzQzO1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIGRvY3VtZW50ZWQgZGVmYXVsdCBkcml2ZSBsZXZlbCBhbmQgbGVhdmUgdGhlIElSUSBkaXNhYmxlZC4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9wb3dlcl9vZmY6XG4mIzQzO1x0YWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjbGtfcHV0KGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0dTggYmdzX2VmZnVzZV9jb2RlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7bGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXG5cJiMzNDspKTtcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwmIzM0O3ZjY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VjbGsgPSBvZl9jbGtfZ2V0KHBhY2thZ2Vfbm9kZSwgMCk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWNsaykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNsa19yYXRlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2NvbmZpZyA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4mIzQzO1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOThmMmIwYjYzOTA5NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xuQEAgLTAsMCAmIzQzOzEsNTM2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1x0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMFx0XHRcdFx0MFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNlx0XHRcdFx0NlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcdDB4NDgyNFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1x0MHgxN1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4ZlxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUdcdFx0XHQweDE1XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuJiM0MztcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFXHRcdDB4MDBiY1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXHQweDAwNDRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbiYjNDM7XHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4mIzQzO1x0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcbiYjNDM7ICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4mIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4mIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbiYjNDM7XHRib29sIGlzX2FjMzAwO1xuJiM0MztcdGJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7XG4mIzQzO1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcGFnZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vbihwcml2LVx1MDAzZWNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vZmYocHJpdi1cdTAwM2Vjb250cm9sKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cdTAwM2Vjb250cm9sLFxuJiM0MztcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XHR1OCAqYnVmO1xuJiM0MztcdHUxNiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XG4mIzQzO1x0aWYgKElTX0VSUihjZWxsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuJiM0MztcbiYjNDM7XHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbiYjNDM7XHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuJiM0MztcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbiYjNDM7XHRcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0KnZhbHVlID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XG4mIzQzO1x0Ym9vbCBzZWxlY3RhYmxlO1xuJiM0MztcdGJvb2wgZml4ZWRfYWMzMDA7XG4mIzQzO1x0Ym9vbCBoYXNfY29uZmlndXJhdGlvbjtcbiYjNDM7XHR1OCBjYWxpYnJhdGlvbjtcbiYjNDM7XHR1MzIgYmFzZV9hZGRyO1xuJiM0MztcdHUxNiBjb25maWd1cmF0aW9uID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cdTAwM2VvZl9ub2RlKTtcbiYjNDM7XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZiYXNlX2FkZHIpO1xuJiM0MztcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XG4mIzQzO1x0aGFzX2NvbmZpZ3VyYXRpb24gPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7bnZtZW0tY2VsbC1uYW1lc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7KSBcdTAwM2U9IDA7XG4mIzQzO1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGVjdGFibGUpIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuJiM0MztcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4mIzQzO1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2NvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbiYjNDM7XHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcbiYjNDM7XHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4mIzQzO1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuJiM0MztcdFx0XHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO1xuJiM0MztvdXRfcHV0X25vZGU6XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4mIzQzO1x0XHRcdFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4mIzQzO1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LVx1MDAzZWlzX2FjMzAwID9cbiYjNDM7XHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuJiM0MztcdFx0QUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTtcbiYjNDM7XHR1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFO1xuJiM0MztcdHUxNiBnbG9iYWxfY29uZmlnO1xuJiM0MztcdGludCBvbGRwYWdlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbiYjNDM7XHRcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0YWZlX2VxX3J4X2RldGVjdCA9XG4mIzQzO1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHRcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xuJiM0MztcdGlmIChvbGRwYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcbiYjNDM7b3V0X3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqL1xuJiM0MztcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmVzdW1lX3JldDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJlc3VtZV9yZXQgPSBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXN1bWVfcmV0KVxuJiM0MztcdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbiYjNDM7XHRib29sIG1hdGNoO1xuJiM0MztcbiYjNDM7XHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuJiM0MztcdGlmICghcGFja2FnZV9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0bWF0Y2ggPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXCYjMzQ7LFxuJiM0MztcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4mIzQzO1x0XHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxuJiM0MztcdFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbiYjNDM7XHRcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgJiM0MzsxLDI4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZpY2Vfbm9kZTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wge1xuJiM0MztcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuJiM0MztcdGludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7XG4mIzQzO1x0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oIGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmhcbmluZGV4IGFhZDljNmI1MDQ2MzYuLjNlODA0ZmMxYjAzZWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmhcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZGV2aWNlX25vZGU7XG4mIzQzO3N0cnVjdCBkZXZpY2U7XG4gXG4gI2lmZGVmIENPTkZJR19NRkRfU1lTQ09OXG4gc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xuQEAgLTMwLDYgJiM0MzszMSw5IEBAIHN0cnVjdCByZWdtYXAgKnN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfb3B0aW9uYWwoc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXIgKnByb3BlcnR5KTtcbiBpbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHRcdCAgICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCk7XG4mIzQzO2ludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4ge1xuQEAgLTc1LDYgJiM0Mzs3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0MztkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19MSU5VWF9NRkRfU1lTQ09OX0hfXyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIwOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGRyaXZlcnMgZm9yIFgtUG93ZXJzIEFDMjAwIE1GRCBhbmQgQUN4MDAgRXRoZXJuZXQgUEhZcywgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZSBkZXZpY2UgdHJlZSBub2RlcyAob2Zfbm9kZSkgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBTaW5jZSBzeXprYWxsZXIgZG9lcyBub3QgZHluYW1pY2FsbHkgZ2VuZXJhdGUgYXJiaXRyYXJ5IGRldmljZSB0cmVlIG5vZGVzLCBhbmQgdGhlc2UgZGV2aWNlcyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGRlZmF1bHQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgJiMzOTt2aXJ0JiMzOTsgb3IgeDg2XzY0KSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuIFRoZSBtaW5vciByZWZhY3RvcmluZyBpbiBzeXNjb24uYyBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgU29DLXNwZWNpZmljIGRyaXZlcnMgKEV4eW5vcywgU3VueGksIFJlbmVzYXMpIHRoYXQgYXJlIGFsc28gbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5NGE1YTk5YzU1ZTk1NmEyZmZhMGJhMDU3NWFmYTAwMTQ2YTUwYzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyA5IDIwOjM4OjQwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjYwOTgzMWIxNWM4MDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL3gtcG93ZXJzLGFjMjAwLnlhbWwKQEAgLTAsMCAmIzQzOzEsNDkgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL21mZC94LXBvd2VycyxhYzIwMC55YW1sIwomIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIwomIzQzOwomIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBtaXhlZC1zaWduYWwgSUMKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7CiYjNDM7ZGVzY3JpcHRpb246CiYjNDM7ICBUaGUgQUMyMDAgaXMgYSBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDIGNvbnRhaW5pbmcgYXVkaW8sIHZpZGVvLCBSVEMgYW5kCiYjNDM7ICBGYXN0IEV0aGVybmV0IFBIWSBmdW5jdGlvbnMuIEl0cyBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgb3ZlciBJMkMuCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMAomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgY2xvY2tzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBBQzIwMCBpbnB1dCBjbG9jay4gV2hlbiB1c2luZyB0aGUgRXRoZXJuZXQgUEhZLCBpdHMgY29uZmlndXJlZCByYXRlIG11c3QKJiM0MzsgICAgICBiZSAyNCBvciAyNyBNSHosIG1hdGNoaW5nIHRoZSByYXRlcyBlbmNvZGVkIGJ5IHRoZSBkb2N1bWVudGVkIEVQSFkgY2xvY2sKJiM0MzsgICAgICBzZWxlY3Rvci4KJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSByZWcKJiM0MzsgIC0gY2xvY2tzCiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgaTJjIHsKJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICBtaXhlZC1zaWduYWxAMTAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3gtcG93ZXJzLGFjMjAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzB4MTAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZTBjNWU5ODBjMzllCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApAQCAtMCwwICYjNDM7MSwyMDcgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlcwomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnQKJiM0MzsgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGUKJiM0MzsgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsCiYjNDM7ICB3aGlsZSBBQzMwMCBjb250cm9sIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYKJiM0MzsgIHBsdXMgdGhlIGxpbmsgUEhZIGFkZHJlc3MuCiYjNDM7CiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLgomIzQzOyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGEKJiM0MzsgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLgomIzQzOwomIzQzOyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzCiYjNDM7ICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kCiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvCiYjNDM7ICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC4KJiM0MzsKJiM0MztzZWxlY3Q6CiYjNDM7ICBwcm9wZXJ0aWVzOgomIzQzOyAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgIGVudW06CiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7ICByZXF1aXJlZDoKJiM0MzsgICAgLSBjb21wYXRpYmxlCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7CiYjNDM7ICByZWc6CiYjNDM7ICAgIG1heGltdW06IDMxCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2sKJiM0MzsgICAgICBiZWxvbmdzIHRvIHRoZSByZWZlcmVuY2VkIEFDMjAwIE1GRCBpbnN0ZWFkLgomIzQzOwomIzQzOyAgdmNjLXN1cHBseToKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxCiYjNDM7ICAgICAgb24gQUMzMDAuCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2cKJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMAomIzQzOyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwCiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHkKJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZQomIzQzOyAgICAgIGNvcHkgaW5zdGVhZC4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBjb25maWd1cmF0aW9uCiYjNDM7CiYjNDM7ICB4LXBvd2VycyxhYzIwMDoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZQomIzQzOyAgICBkZXNjcmlwdGlvbjogUmVmZXJlbmNlIHRvIHRoZSBBQzIwMCBNRkQgY29udGFpbmluZyB0aGlzIEV0aGVybmV0IFBIWQomIzQzOwomIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDoKJiM0MzsgICAgdHlwZTogYm9vbGVhbgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lCiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi4KJiM0MzsKJiM0MztwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6CiYjNDM7ICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sIwomIzQzOyAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwCiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gdmNjLXN1cHBseQomIzQzOwomIzQzO2RlcGVuZGVudFJlcXVpcmVkOgomIzQzOyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdCiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOiBbIG52bWVtLWNlbGxzIF0KJiM0MzsKJiM0MzthbGxPZjoKJiM0MzsgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCMKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY2xvY2tzOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMAomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gY2xvY2tzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXMKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gJmx0OyZhbXA7cmVnXzN2MyZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9ICZsdDsmYW1wO2FjMjAwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gJmx0OyZhbXA7cmVnXzN2MyZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMSB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSAmbHQ7JmFtcDtyZWdfM3YzJmd0OzsKJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9ICZsdDsmYW1wO2FjMjAwJmd0OzsKJiM0MzsgICAgICAgICAgICBudm1lbS1jZWxscyA9ICZsdDsmYW1wO2VwaHlfY29uZmlndXJhdGlvbiZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9ICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAxIHsKJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKJiM0MzsuLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCmluZGV4IDc2M2NlNmEzNDc4MmIuLjk1ZTNjNjI3NDJiYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZmQvS2NvbmZpZwpAQCAtMjA1LDYgJiM0MzsyMDUsMTggQEAgY29uZmlnIE1GRF9BQzEwMAogCSAgVGhpcyBkcml2ZXIgaW5jbHVkZSBvbmx5IHRoZSBjb3JlIEFQSXMuIFlvdSBoYXZlIHRvIHNlbGVjdCBpbmRpdmlkdWFsCiAJICBjb21wb25lbnRzIGxpa2UgY29kZWNzIG9yIFJUQyB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy4KIAomIzQzO2NvbmZpZyBNRkRfQUMyMDAKJiM0MzsJdHJpc3RhdGUgJiMzNDtYLVBvd2VycyBBQzIwMCYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gSTJDCiYjNDM7CWRlcGVuZHMgb24gT0YKJiM0MzsJc2VsZWN0IE1GRF9TWVNDT04KJiM0MzsJc2VsZWN0IFJFR01BUF9JMkMKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBQzIwMCBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDLiBUaGUgQUMyMDAKJiM0MzsJICBjb250YWlucyBhdWRpbywgdmlkZW8sIFJUQyBhbmQgRmFzdCBFdGhlcm5ldCBQSFkgZnVuY3Rpb25zIGFuZCBpcwomIzQzOwkgIGNvLXBhY2thZ2VkIHdpdGggc29tZSBBbGx3aW5uZXIgSDYgYW5kIEg2MTYgU29Dcy4gVGhpcyBkcml2ZXIgcHJvdmlkZXMKJiM0MzsJICB0aGUgc2hhcmVkIHJlZ2lzdGVyIGFjY2VzcyB1c2VkIGJ5IHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9uIGRyaXZlcnMuCiYjNDM7CiBjb25maWcgTUZEX0FYUDIwWAogCXRyaXN0YXRlCiAJc2VsZWN0IE1GRF9DT1JFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IGRkNGJiN2U3N2MzMzYuLjg5MGU3NmE5YWQwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC0xNTAsNiAmIzQzOzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSkJJiM0Mzs9IGRhOTA1Mi1zcGkubwogb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfSTJDKQkmIzQzOz0gZGE5MDUyLWkyYy5vCiAKIG9iai0kKENPTkZJR19NRkRfQUMxMDApCQkmIzQzOz0gYWMxMDAubwomIzQzO29iai0kKENPTkZJR19NRkRfQUMyMDApCQkmIzQzOz0gYWMyMDAubwogb2JqLSQoQ09ORklHX01GRF9BWFAyMFgpCSYjNDM7PSBheHAyMHgubwogb2JqLSQoQ09ORklHX01GRF9BWFAyMFhfSTJDKQkmIzQzOz0gYXhwMjB4LWkyYy5vCiBvYmotJChDT05GSUdfTUZEX0FYUDIwWF9SU0IpCSYjNDM7PSBheHAyMHgtcnNiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FjMjAwLmMgYi9kcml2ZXJzL21mZC9hYzIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI1MDY2YmIzNmFjNzYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9hYzIwMC5jCkBAIC0wLDAgJiM0MzsxLDE3MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIE1GRCBjb3JlIGRyaXZlciBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgJmx0O2plcm5lai5za3JhYmVjQGdtYWlsLmNvbSZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICoKJiM0MzsgKiBCYXNlZCBvbiB0aGUgQUMxMDAgZHJpdmVyOgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAxNiBDaGVuLVl1IFRzYWkKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2kyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZmQvc3lzY29uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1JFRwkJCTB4MDAwMAomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLCQlHRU5NQVNLKDE1LCAxNCkKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSwkJR0VOTUFTSygxMSwgMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19DT05UUk9MX1JFRwkJCTB4MDAwMgomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVAlCSVQoMCkKJiM0MzsKJiM0MzsvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovCiYjNDM7I2RlZmluZSBBQzIwMF9UV0lfUkVHX0FERFJfSAkweDAwZmUKJiM0MzsjZGVmaW5lIEFDMjAwX01BWF9SRUcJCTB4YTFmMgomIzQzOwomIzQzO3N0cnVjdCBhYzIwMCB7CiYjNDM7CXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlX2NmZyBhYzIwMF9yYW5nZV9jZmdbXSA9IHsKJiM0MzsJewomIzQzOwkJLnJhbmdlX21heCA9IEFDMjAwX01BWF9SRUcsCiYjNDM7CQkuc2VsZWN0b3JfcmVnID0gQUMyMDBfVFdJX1JFR19BRERSX0gsCiYjNDM7CQkuc2VsZWN0b3JfbWFzayA9IDB4ZmYsCiYjNDM7CQkud2luZG93X2xlbiA9IDI1NiwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogRWFjaCBBQzIwMCBzdWItYmxvY2sgY2FuIHJlc2V0IGluZGVwZW5kZW50bHksIGludmFsaWRhdGluZyBpdHMgcmVnaXN0ZXIKJiM0MzsgKiBjb250ZW50cyB3aXRob3V0IHJlZ21hcCYjMzk7cyBrbm93bGVkZ2UuIENhY2hlIG9ubHkgdGhlIGNvbW1vbiBwYWdlIHNlbGVjdG9yOwomIzQzOyAqIHRoaXMgYXZvaWRzIGEgc2VsZWN0b3IgcmVhZC1tb2RpZnktd3JpdGUgZm9yIGV2ZXJ5IGFjY2VzcyBvbiB0aGUgc2FtZSBwYWdlCiYjNDM7ICogd2l0aG91dCBldmVyIHJldHVybmluZyBzdGFsZSBmdW5jdGlvbmFsLXJlZ2lzdGVyIHZhbHVlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBhYzIwMF92b2xhdGlsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlZyAhPSBBQzIwMF9UV0lfUkVHX0FERFJfSDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGFjMjAwX3JlZ21hcF9jb25maWcgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDthYzIwMCYjMzQ7LAomIzQzOwkucmVnX2JpdHMgPSA4LAomIzQzOwkucmVnX3N0cmlkZSA9IDIsCiYjNDM7CS52YWxfYml0cyA9IDE2LAomIzQzOwkucmFuZ2VzID0gYWMyMDBfcmFuZ2VfY2ZnLAomIzQzOwkubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUoYWMyMDBfcmFuZ2VfY2ZnKSwKJiM0MzsJLm1heF9yZWdpc3RlciA9IEFDMjAwX01BWF9SRUcsCiYjNDM7CS52b2xhdGlsZV9yZWcgPSBhYzIwMF92b2xhdGlsZV9yZWcsCiYjNDM7CS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTUFQTEUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzIwMF9kaXNhYmxlKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDAgKmRkYXRhID0gZGF0YTsKJiM0MzsKJiM0MzsJcmVnbWFwX3dyaXRlKGRkYXRhLSZndDtyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7Y2xpZW50LSZndDtkZXY7CiYjNDM7CXVuc2lnbmVkIGludCB2ZXJzaW9uOwomIzQzOwlzdHJ1Y3QgYWMyMDAgKmRkYXRhOwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRkYXRhKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWNsayA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoY2xrKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihjbGspLAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBpbnB1dCBjbG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxuJiMzNDspOwomIzQzOwomIzQzOwlkZGF0YS0mZ3Q7cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmYW1wO2FjMjAwX3JlZ21hcF9jb25maWcpOwomIzQzOwlpZiAoSVNfRVJSKGRkYXRhLSZndDtyZWdtYXApKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRkYXRhLSZndDtyZWdtYXApLAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRkYXRhKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTm8gbWluaW11bSBkZWxheSBpcyBkb2N1bWVudGVkLiBNYXRjaCB0aGUgdmVuZG9yIGRyaXZlciYjMzk7cyA0MCBtcyBkZWxheQomIzQzOwkgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suCiYjNDM7CSAqLwomIzQzOwltc2xlZXAoNDApOwomIzQzOwomIzQzOwlyZXQgPSByZWdtYXBfcmVhZChkZGF0YS0mZ3Q7cmVnbWFwLCBBQzIwMF9TWVNfVkVSU0lPTl9SRUcsICZhbXA7dmVyc2lvbik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZWFkIGNoaXAgdmVyc2lvblxuJiMzNDspOwomIzQzOwomIzQzOwlkZXZfaW5mbyhkZXYsICYjMzQ7QUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxuJiMzNDssCiYjNDM7CQkgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSywgdmVyc2lvbiksCiYjNDM7CQkgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTSywgdmVyc2lvbikpOwomIzQzOwomIzQzOwkvKiBSZXNldCB0aGUgY2hpcCBhZnRlciBkZXBlbmRlbnQgZnVuY3Rpb24gZHJpdmVycyBoYXZlIHVuYm91bmQuICovCiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMjAwX2Rpc2FibGUsIGRkYXRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ21hcF93cml0ZShkZGF0YS0mZ3Q7cmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnbWFwX3dyaXRlKGRkYXRhLSZndDtyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQzIwMF9TWVNfQ09OVFJPTF9DSElQX1JFU0VUX0RFQVNTRVJUKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYsIGRldi0mZ3Q7b2Zfbm9kZSwKJiM0MzsJCQkJCSAgICAgZGRhdGEtJmd0O3JlZ21hcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZWdpc3RlciByZWdtYXBcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjMjAwX3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiYjNDM7ewomIzQzOwlhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OyB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWMyMDBfaTJjX2lkc1tdID0gewomIzQzOwl7IC5uYW1lID0gJiMzNDthYzIwMCYjMzQ7IH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFjMjAwX2kyY19pZHMpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhYzIwMF9kcml2ZXIgPSB7CiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7YWMyMDAmIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLAomIzQzOwl9LAomIzQzOwkucHJvYmUgPSBhYzIwMF9wcm9iZSwKJiM0MzsJLnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sCiYjNDM7CS5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsCiYjNDM7fTsKJiM0Mzttb2R1bGVfaTJjX2RyaXZlcihhYzIwMF9kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WC1Qb3dlcnMgQUMyMDAgTUZEIGNvcmUgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3lzY29uLmMgYi9kcml2ZXJzL21mZC9zeXNjb24uYwppbmRleCAyMWE3ZmNkZDI3Mzc5Li40NDg0MjJmZTRmMjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9zeXNjb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21mZC9zeXNjb24uYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaHdzcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKQEAgLTE5Myw1MyAmIzQzOzE5NCw5NSBAQCBzdGF0aWMgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfZ2V0X3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCXJldHVybiBzeXNjb24tJmd0O3JlZ21hcDsKIH0KIAotLyoqCi0gKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZQotICogQG5wOiBEZXZpY2UgdHJlZSBub2RlCi0gKiBAcmVnbWFwOiBQb2ludGVyIHRvIHJlZ21hcCBvYmplY3QKLSAqCi0gKiBSZWdpc3RlciBhbiBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwIG9iamVjdCB3aXRoIHN5c2NvbiBmb3IgdGhlIHNwZWNpZmllZAotICogZGV2aWNlIHRyZWUgbm9kZS4gVGhpcyByZWdtYXAgd2lsbCB0aGVuIGJlIHJldHVybmVkIHRvIGNsaWVudCBkcml2ZXJzIHVzaW5nCi0gKiB0aGUgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZSgpIEFQSS4KLSAqCi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICovCi1pbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApCiYjNDM7c3RhdGljIHN0cnVjdCBzeXNjb24gKgomIzQzO29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwoc3RydWN0IGRldmljZV9ub2RlICpucCwKJiM0MzsJCQkJICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKQogewogCXN0cnVjdCBzeXNjb24gKmVudHJ5LCAqc3lzY29uID0gTlVMTDsKLQlpbnQgcmV0OwogCiAJaWYgKCFucCB8fCAhcmVnbWFwKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJc3lzY29uID0ga3phbGxvY19vYmooKnN5c2Nvbik7CiAJaWYgKCFzeXNjb24pCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAkvKiBjaGVjayBpZiBzeXNjb24gZW50cnkgYWxyZWFkeSBleGlzdHMgKi8KIAltdXRleF9sb2NrKCZhbXA7c3lzY29uX2xpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYW1wO3N5c2Nvbl9saXN0LCBsaXN0KQogCQlpZiAoZW50cnktJmd0O25wID09IG5wKSB7Ci0JCQlyZXQgPSAtRUVYSVNUOwotCQkJZ290byBlcnJfdW5sb2NrOwomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO3N5c2Nvbl9saXN0X2xvY2spOwomIzQzOwkJCWtmcmVlKHN5c2Nvbik7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoLUVFWElTVCk7CiAJCX0KIAogCXN5c2Nvbi0mZ3Q7cmVnbWFwID0gcmVnbWFwOwotCXN5c2Nvbi0mZ3Q7bnAgPSBucDsKJiM0MzsJc3lzY29uLSZndDtucCA9IG9mX25vZGVfZ2V0KG5wKTsKIAogCS8qIHJlZ2lzdGVyIHRoZSByZWdtYXAgaW4gc3lzY29uIGxpc3QgKi8KIAlsaXN0X2FkZF90YWlsKCZhbXA7c3lzY29uLSZndDtsaXN0LCAmYW1wO3N5c2Nvbl9saXN0KTsKIAltdXRleF91bmxvY2soJmFtcDtzeXNjb25fbGlzdF9sb2NrKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gc3lzY29uOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZQomIzQzOyAqIEBucDogRGV2aWNlIHRyZWUgbm9kZQomIzQzOyAqIEByZWdtYXA6IFBvaW50ZXIgdG8gcmVnbWFwIG9iamVjdAomIzQzOyAqCiYjNDM7ICogUmVnaXN0ZXIgYW4gZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcCBvYmplY3Qgd2l0aCBzeXNjb24gZm9yIHRoZSBzcGVjaWZpZWQKJiM0MzsgKiBkZXZpY2UgdHJlZSBub2RlLiBUaGlzIHJlZ21hcCB3aWxsIHRoZW4gYmUgcmV0dXJuZWQgdG8gY2xpZW50IGRyaXZlcnMgdXNpbmcKJiM0MzsgKiB0aGUgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZSgpIEFQSS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHJlZ21hcCAqcmVnbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKG5wLCByZWdtYXApKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzeXNjb24gKnN5c2NvbiA9IGRhdGE7CiAKLWVycl91bmxvY2s6CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzeXNjb25fbGlzdF9sb2NrKTsKJiM0MzsJbGlzdF9kZWwoJmFtcDtzeXNjb24tJmd0O2xpc3QpOwogCW11dGV4X3VubG9jaygmYW1wO3N5c2Nvbl9saXN0X2xvY2spOwomIzQzOwomIzQzOwlvZl9ub2RlX3B1dChzeXNjb24tJmd0O25wKTsKIAlrZnJlZShzeXNjb24pOwotCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIGEgbWFuYWdlZCBleHRlcm5hbCBzeXNjb24gcmVnbWFwCiYjNDM7ICogQGRldjogRGV2aWNlIHRoYXQgb3ducyB0aGUgcmVnbWFwCiYjNDM7ICogQG5wOiBEZXZpY2UgdHJlZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnbWFwCiYjNDM7ICogQHJlZ21hcDogUG9pbnRlciB0byB0aGUgZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcAomIzQzOyAqCiYjNDM7ICogUmVnaXN0ZXIgYW4gZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcCBvYmplY3Qgd2l0aCBzeXNjb24gYW5kIHJlbW92ZSBpdCB3aGVuCiYjNDM7ICogQGRldiBpcyB1bmJvdW5kLiBDb25zdW1lcnMgbXVzdCBzdG9wIHVzaW5nIHRoZSByZWdtYXAgYmVmb3JlIHRoZSBwcm92aWRlciBpcwomIzQzOyAqIHVuYm91bmQsIGZvciBleGFtcGxlIGJ5IGVzdGFibGlzaGluZyBhIG1hbmFnZWQgZGV2aWNlIGxpbmsgdG8gQGRldi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiYjNDM7CQkJCSAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzeXNjb24gKnN5c2NvbjsKJiM0MzsKJiM0MzsJc3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKTsKJiM0MzsJaWYgKElTX0VSUihzeXNjb24pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoc3lzY29uKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsCiYjNDM7CQkJCQlkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSwKJiM0MzsJCQkJCXN5c2Nvbik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7CiAKIC8qKgogICogZGV2aWNlX25vZGVfdG9fcmVnbWFwKCkgLSBHZXQgb3IgY3JlYXRlIGEgcmVnbWFwIGZvciBzcGVjaWZpZWQgZGV2aWNlIG5vZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggYTI5ZDNmZWQ4YTA1My4uMjdiOGZmZTRiNTM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKQEAgLTQ3NSw2ICYjNDM7NDc1LDE3IEBAIGNvbmZpZyBWSVRFU1NFX1BIWQogCWhlbHAKIAkgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NAogCiYjNDM7Y29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZCiYjNDM7CXRyaXN0YXRlICYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBDT01NT05fQ0xLICZhbXA7JmFtcDsgTlZNRU0gJmFtcDsmYW1wOyBPRl9NRElPICZhbXA7JmFtcDsgUkVHVUxBVE9SCiYjNDM7CWRlcGVuZHMgb24gSTJDIHx8ICFJMkMKJiM0MzsJc2VsZWN0IFBIWV9QQUNLQUdFCiYjNDM7CWhlbHAKJiM0MzsJICBFbmFibGUgdGhlIEZhc3QgRXRoZXJuZXQgUEhZIGRyaXZlciBzaGFyZWQgYnkgdGhlIFgtUG93ZXJzIEFDMjAwCiYjNDM7CSAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFkKJiM0MzsJICByZWdpc3RlcnMgYW5kIHRoZSBwYWNrYWdlLXNwZWNpZmljIEFDMjAwIEkyQyBvciBBQzMwMCBNRElPIGNvbnRyb2wKJiM0MzsJICByZWdpc3RlcnMuCiYjNDM7CiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUkKIAl0cmlzdGF0ZSAmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXImIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQppbmRleCBlMjNkZjVlODM2ZTllLi5mZmIwZWZiYzRjYzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCkBAIC0xMDAsNCAmIzQzOzEwMCw1IEBAIG9iai0kKENPTkZJR19TTVNDX1BIWSkJCSYjNDM7PSBzbXNjLm8KIG9iai0kKENPTkZJR19TVEUxMFhQKQkJJiM0Mzs9IHN0ZTEwWHAubwogb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKQkmIzQzOz0gdGVyYW5ldGljcy5vCiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpCSYjNDM7PSB2aXRlc3NlLm8KJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpCSYjNDM7PSB4cG93ZXJzLwogb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSAmIzQzOz0geGlsaW54X2dtaWkycmdtaWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsMyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0Mzt4cG93ZXJzLWFjeDAwLXkgOj0gYWN4MDAubyBhYzIwMC5vIGFjMzAwLm8KJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICYjNDM7PSB4cG93ZXJzLWFjeDAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjY4MWUwMTNiZTQwMWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jCkBAIC0wLDAgJiM0MzsxLDMxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmQKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgJmx0O2FuZHJlLnByenl3YXJhQGFybS5jb20mZ3Q7KQomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2kyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tZmQvc3lzY29uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFoJMjcwMDAwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHCQkJMHgwMDE0CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRQkJCUJJVCgxKQomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcJCQkweDAwMTYKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRQkJCUJJVCgwKQomIzQzOwomIzQzOy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi8KJiM0MzsjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHCQkJMHg4MDA0CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUcJCQkweDYwMDAKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV04JCQlCSVQoMCkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLCQkJR0VOTUFTSyg4LCA0KQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTAkJCUJJVCgxMSkKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLCQlHRU5NQVNLKDE1LCAxMikKJiM0MzsKJiM0MztzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKJiM0MzsJc3RydWN0IHJlZ3VsYXRvciAqdmNjOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJdW5zaWduZWQgaW50IHBoeV9hZGRyOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOwomIzQzOwlib29sIHN1cHBseV9lbmFibGVkOwomIzQzOwlib29sIHBvd2VyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jdGwgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHwKJiM0MzsJCUZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LSZndDtwaHlfYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCByZWcsIHZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRldl9lcnIocHJpdi0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxuJiMzNDssCiYjNDM7CQkJcmVnLCBFUlJfUFRSKHJldCkpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkKSB7CiYjNDM7CQlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCQkgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfAomIzQzOwkJCQkJICAgQUMyMDBfRVBIWV9TSFVURE9XTik7CiYjNDM7CQllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQlwcml2LSZndDtwb3dlcmVkID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKCFlcnIpCiYjNDM7CQkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSBmYWxzZTsKJiM0MzsJCWVsc2UgaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CiYjNDM7CXJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7YWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZSA9PSBpbnRlcmZhY2UpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsCiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJIEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1MTYgZXBoeV9jdGw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAmZ3Q7IEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwb3dlcmVkICZhbXA7JmFtcDsgcHJpdi0mZ3Q7cGh5X2FkZHIgPT0gcGh5X2FkZHIpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7cGh5X2FkZHIgPSBwaHlfYWRkcjsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpOwomIzQzOwomIzQzOwkvKiBTdGFydCBmcm9tIGEgZGlzYWJsZWQgc3RhdGUgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb25maWd1cmF0aW9uLiAqLwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywKJiM0MzsJCQkJICAgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwKJiM0MzsJCQkJICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywgZXBoeV9jdGwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9kaXNhYmxlOgomIzQzOwkvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi8KJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CWFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlOwomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiYjNDM7CXN0cnVjdCBkZXZpY2VfbGluayAqbGluazsKJiM0MzsJdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsKJiM0MzsJdTggYnBzX2VmZnVzZV9jb2RlOwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CXByaXYtJmd0O2RldiA9IGRldjsKJiM0MzsJcHJpdi0mZ3Q7dmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCAmIzM0O3ZjYyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDt2Y2MpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7dmNjKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XG4mIzM0OykpOwomIzQzOwomIzQzOwlhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OywgMCk7CiYjNDM7CWlmICghYWMyMDBfbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXG4mIzM0OykpOwomIzQzOwljbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7CiYjNDM7CWlmICghY2xpZW50KSB7CiYjNDM7CQlyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxuJiMzNDspKTsKJiM0MzsJfQomIzQzOwomIzQzOwlsaW5rID0gZGV2aWNlX2xpbmtfYWRkKGRldiwgJmFtcDtjbGllbnQtJmd0O2RldiwKJiM0MzsJCQkgICAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKTsKJiM0MzsJaWYgKCFsaW5rKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChSRUFEX09OQ0UobGluay0mZ3Q7c3RhdHVzKSAhPSBETF9TVEFURV9DT05TVU1FUl9QUk9CRSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsCiYjNDM7CQkJCSAgICAmIzM0O0FDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9jbGllbnQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkJICAgICAgICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIocHJpdi0mZ3Q7cmVnbWFwKSkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7cmVnbWFwKSwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBBQzIwMCByZWdtYXBcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X2Vycm9yOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGFzX2NhbGlicmF0aW9uKSB7CiYjNDM7CQlyZXQgPSByZWdtYXBfcmVhZChwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VGVVNFX0VQSFlfUkVHLAomIzQzOwkJCQkgICZhbXA7aW50ZXJuYWxfY2FsaWJyYXRpb24pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9lcnJvcjsKJiM0MzsJCWNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqLwomIzQzOwlicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spOwomIzQzOwlwcml2LSZndDtlcGh5X2N0bCA9CiYjNDM7CQlGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpOwomIzQzOwkvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovCiYjNDM7CiYjNDM7CWNsayA9IGNsa19nZXQoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoY2xrKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihjbGspOwomIzQzOwkJZ290byBvdXRfZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKJiM0MzsJY2xrX3B1dChjbGspOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDt1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCSAgICBjbGtfcmF0ZSk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7CiYjNDM7CS8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKJiM0MzsJcHV0X2RldmljZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cHJpdi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MztvdXRfZXJyb3I6CiYjNDM7CXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxuJiMzNDspOwomIzQzO291dF9wdXRfY2xpZW50OgomIzQzOwlwdXRfZGV2aWNlKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFhNTYwNDMyYTE0YzkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCkBAIC0wLDAgJiM0MzsxLDM4NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmQKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFoJMjUwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaCTI3MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUcJCQkweDAwCiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLCQlHRU5NQVNLKDExLCA4KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0sJCQlHRU5NQVNLKDcsIDYpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpCiYjNDM7I2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFCQkJQklUKDUpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVAkJQklUKDEpCiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE8JCUJJVCgzKQomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLCQlHRU5NQVNLKDIsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHCQkJMHgwMgomIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUJCUJJVCgxNSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUcJCQkweDA1CiYjNDM7I2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLCQkJR0VOTUFTSygxNSwgMTQpCiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0sJCQlHRU5NQVNLKDExLCAxMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yCQkJMgomIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUcJCQkweDA2CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSwkJR0VOTUFTSygxNSwgMTIpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXAomIzQzOwkoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcCiYjNDM7CSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFwKJiM0MzsJIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXAomIzQzOwkoRklFTERfUFJFUChBQzMwMF9NRElPX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSkKJiM0MzsKJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnZjYzsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwl1MTYgc3lzX2NvbnRyb2w7CiYjNDM7CXUxNiBlcGh5X2NvbmZpZzsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwYWNrYWdlX2tub3duOwomIzQzOwlib29sIGludGVybmFsX2RsZG87CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJIHUxNiBtYXNrLCB1MTYgc2V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1MTYgdmFsID0gKHJldCAmYW1wOyB+bWFzaykgfCAoc2V0ICZhbXA7IG1hc2spOwomIzQzOwomIzQzOwkJcmV0ID0gdmFsID09IHJldCA/IDAgOgomIzQzOwkJCV9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwKJiM0MzsJCQkJCSAgICByZWdudW0sIHZhbCk7CiYjNDM7CX0KJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jb25maWcgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkCiYjNDM7CSAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGUKJiM0MzsJICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhcHJpdi0mZ3Q7cGFja2FnZV9rbm93biB8fCAhcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA/CiYjNDM7CQlBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJCSAgIEFDMzAwX0VQSFlfU0hVVERPV04pOwomIzQzOwkJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCQkgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCQkgICAgQUMzMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1OCBwYWNrYWdlX3N0YXR1czsKJiM0MzsJdTE2IHJlc2V0X3ZhbHVlOwomIzQzOwlpbnQgc3lzX2NvbnRyb2w7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqLwomIzQzOwkJZnNsZWVwKDEwMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi8KJiM0MzsJcmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8CiYjNDM7CQkJCSAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi8KJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgICBwcml2LSZndDtzeXNfY29udHJvbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpOwomIzQzOwlpZiAoc3lzX2NvbnRyb2wgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzeXNfY29udHJvbDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7CiYjNDM7CWlmICgofnBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT0KJiM0MzsJICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgJmFtcDsgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETzsKJiM0MzsJcHJpdi0mZ3Q7cGFja2FnZV9rbm93biA9IHRydWU7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLAomIzQzOwkJCQkgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsCiYjNDM7CQkJCSAgIHByaXYtJmd0O2ludGVybmFsX2RsZG8gPwomIzQzOwkJCQkgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX1NZU19JT19WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJICBBQzMwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZnNsZWVwKDEwMDAwKTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcG93ZXJfb2ZmOgomIzQzOwlhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWNsa19wdXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJnc19lZmZ1c2VfY29kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZndDsgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxuJiMzNDspKTsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwomIzQzOwlwcml2LSZndDt2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsICYjMzQ7dmNjJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O3ZjYykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LSZndDt2Y2MpLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtjbGspKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7Y2xrKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXG4mIzM0OykpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LSZndDtjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXG4mIzM0OykpOwomIzQzOwomIzQzOwljbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtjbGspOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCQkgICAgIGNsa19yYXRlKSk7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7CiYjNDM7CiYjNDM7CS8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi8KJiM0MzsJYmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpICZhbXA7CiYjNDM7CQkJICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTsKJiM0MzsJcHJpdi0mZ3Q7ZXBoeV9jb25maWcgPQomIzQzOwkJRklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTsKJiM0MzsJLyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqLwomIzQzOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmOwomIzQzOwlwcml2LSZndDtjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlOwomIzQzOwkvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovCiYjNDM7CXByaXYtJmd0O2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3ByaXYtJmd0O2NvbnRyb2w7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOThmMmIwYjYzOTA5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKQEAgLTAsMCAmIzQzOzEsNTM2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjICZsdDtqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20mZ3Q7CiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLWNvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9waHlsaWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSUQJCQkJMHgwMDQ0MTQwMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSwlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVwlCSVQoOSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFRwkJCTB4MWYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0sJCQlHRU5NQVNLKDEyLCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8wCQkJCTAKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMQkJCQkxCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzIJCQkJMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV82CQkJCTYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOAkJCQk4CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQJQklUKDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSwkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTwkJMgomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHCQkweDEyCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUJMHg0ODI0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRQkJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRwkweDE3CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFCUJJVCgzKQomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0sJCUdFTk1BU0soMTQsIDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQJMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHCQkweDEwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFCTB4NTUyMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRQkJMHhmMDAwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHCTB4MTQKJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUJMHg3MDhmCiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4YgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHCQkJMHgxNQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLCQlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0sJCUdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcCiYjNDM7CShGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFwKJiM0MzsJQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUJCTB4MDBiYwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcJCTB4MWQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUwkweDAwNDQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSBcCiYjNDM7CShBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXAomIzQzOwkgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUykKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvcgomIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMAomIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlCiYjNDM7ICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7CiYjNDM7CWJvb2wgaXNfYWMzMDA7CiYjNDM7CWJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7CiYjNDM7CWJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsCiYjNDM7CQkJICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb24ocHJpdi0mZ3Q7Y29udHJvbCwKJiM0MzsJCQkJICAgICAgIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb2ZmKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7c2V0X2ludGVyZmFjZShwcml2LSZndDtjb250cm9sLAomIzQzOwkJCQkJICAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcGh5ZGV2X3dhcm4ocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXG4mIzM0OywKJiM0MzsJCQkgICAgRVJSX1BUUihyZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVtX2NlbGwgKmNlbGw7CiYjNDM7CXNpemVfdCBpOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwl1OCAqYnVmOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJY2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKGNlbGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoY2VsbCk7CiYjNDM7CiYjNDM7CWJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYW1wO2xlbik7CiYjNDM7CW52bWVtX2NlbGxfcHV0KGNlbGwpOwomIzQzOwlpZiAoSVNfRVJSKGJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihidWYpOwomIzQzOwlpZiAoIWxlbiB8fCBsZW4gJmd0OyBzaXplb2YoKnZhbHVlKSkgewomIzQzOwkJa2ZyZWUoYnVmKTsKJiM0MzsJCXJldHVybiBsZW4gPyAtRVJBTkdFIDogLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXZhbCB8PSAodTE2KWJ1ZltpXSAmbHQ7Jmx0OyAoOCAqIGkpOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwkqdmFsdWUgPSB2YWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlOwomIzQzOwlib29sIHNlbGVjdGFibGU7CiYjNDM7CWJvb2wgZml4ZWRfYWMzMDA7CiYjNDM7CWJvb2wgaGFzX2NvbmZpZ3VyYXRpb247CiYjNDM7CXU4IGNhbGlicmF0aW9uOwomIzQzOwl1MzIgYmFzZV9hZGRyOwomIzQzOwl1MTYgY29uZmlndXJhdGlvbiA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LSZndDtvZl9ub2RlKTsKJiM0MzsJaWYgKCFwYWNrYWdlX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2Jhc2VfYWRkcik7CiYjNDM7CWlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi0mZ3Q7bWRpby5hZGRyKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWZpeGVkX2FjMzAwID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWlmICghc2VsZWN0YWJsZSAmYW1wOyZhbXA7ICFmaXhlZF9hYzMwMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsKJiM0MzsJaGFzX2NvbmZpZ3VyYXRpb24gPQomIzQzOwkJb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgJiMzNDtudm1lbS1jZWxsLW5hbWVzJiMzNDssCiYjNDM7CQkJCQkgJiMzNDtjb25maWd1cmF0aW9uJiMzNDspICZndDs9IDA7CiYjNDM7CWlmIChoYXNfY29uZmlndXJhdGlvbikgewomIzQzOwkJcmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7LAomIzQzOwkJCQkJCSZhbXA7Y29uZmlndXJhdGlvbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKHNlbGVjdGFibGUgfHwgZml4ZWRfYWMzMDApIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDtwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzZWxlY3RhYmxlKSB7CiYjNDM7CQlwcml2LSZndDtpc19hYzMwMCA9CiYjNDM7CQkJY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPSBmaXhlZF9hYzMwMDsKJiM0MzsJCWlmIChoYXNfY29uZmlndXJhdGlvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPQomIzQzOwkJICAgIHByaXYtJmd0O2lzX2FjMzAwKSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljYWxpYnJhdGlvbiA9IEZJRUxEX0dFVChBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLLAomIzQzOwkJCQljb25maWd1cmF0aW9uKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPQomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkJISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpOwomIzQzOwlwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkID0KJiM0MzsJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsCiYjNDM7CQkJCSAgICAgICYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwKQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgY2FsaWJyYXRpb24pOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtjb250cm9sID0KJiM0MzsJCQlhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICBoYXNfY29uZmlndXJhdGlvbiwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzOwomIzQzO291dF9wdXRfbm9kZToKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLAomIzQzOwkJCQlBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCUFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O29mX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqLwomIzQzOwlyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwl1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtJmd0O2lzX2FjMzAwID8KJiM0MzsJCUFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOgomIzQzOwkJQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTsKJiM0MzsJdTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTsKJiM0MzsJdTE2IGdsb2JhbF9jb25maWc7CiYjNDM7CWludCBvbGRwYWdlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLAomIzQzOwkJCQkgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTsKJiM0MzsJaWYgKHByaXYtJmd0O3htaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpCiYjNDM7CQlnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRywKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQgfAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlhZmVfZXFfcnhfZGV0ZWN0ID0KJiM0MzsJCQlBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7CiYjNDM7CQl0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7CiYjNDM7CWlmIChvbGRwYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssCiYjNDM7CQkJCSAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIGFmZV9lcV9yeF9kZXRlY3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUcsIHR4X2xldmVsX3ZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpOwomIzQzOwomIzQzO291dF9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi8KJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi8KJiM0MzsJcmV0dXJuIGFjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJlc3VtZV9yZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7CiYjNDM7CQlpZiAocmVzdW1lX3JldCkKJiM0MzsJCQlwaHlkZXZfd2FybihwaHlkZXYsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgIEVSUl9QVFIocmVzdW1lX3JldCkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBtYXRjaDsKJiM0MzsKJiM0MzsJaWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovCiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0OykgfHwKJiM0MzsJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZSYjMzQ7KTsKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hdGNoOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLAomIzQzOwkJLm5hbWUgPSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFkmIzM0OywKJiM0MzsJCS5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLAomIzQzOwkJLnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSwKJiM0MzsJCS5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLAomIzQzOwkJLnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsCiYjNDM7CQkuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LAomIzQzOwkJLmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsCiYjNDM7CQkuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7CiYjNDM7CXsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0phbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKQEAgLTAsMCAmIzQzOzEsMjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQJMTYKJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlX25vZGU7CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7CiYjNDM7CWludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCXVuc2lnbmVkIGludCBwaHlfYWRkcik7CiYjNDM7CWludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7CiYjNDM7CWludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTsKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oIGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgKaW5kZXggYWFkOWM2YjUwNDYzNi4uM2U4MDRmYzFiMDNlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKIAogc3RydWN0IGRldmljZV9ub2RlOwomIzQzO3N0cnVjdCBkZXZpY2U7CiAKICNpZmRlZiBDT05GSUdfTUZEX1NZU0NPTgogc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwpAQCAtMzAsNiAmIzQzOzMxLDkgQEAgc3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCQkJCWNvbnN0IGNoYXIgKnByb3BlcnR5KTsKIGludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkgICAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApOwomIzQzO2ludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAomIzQzOwkJCQkgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CkBAIC03NSw2ICYjNDM7NzksMTQgQEAgc3RhdGljIGlubGluZSBpbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7ZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX19MSU5VWF9NRkRfU1lTQ09OX0hfXyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjEyMQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBQYXRjaCBmb3IgRnV6emluZyBSZWFjaGFiaWxpdHkqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgbmV3IEV0aGVybmV0IFBIWSBwYWNrYWdlcyBmcm9tIFgtUG93ZXJzLCBzcGVjaWZpY2FsbHkgdGhlIEFDMjAwIGFuZCBBQzMwMC4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIHVzdWFsIHN1c3BlY3RzOiBkZXZpY2UgdHJlZSBiaW5kaW5ncywgS2NvbmZpZy9NYWtlZmlsZXMsIGFuZCBuZXcgZHJpdmVyIGZpbGVzIGZvciB0aGUgTXVsdGktRnVuY3Rpb24gRGV2aWNlIChNRkQpIGFuZCB0aGUgUEhZIGl0c2VsZi4gTXkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHN5emthbGxlciwgb3IgYW55IGZ1enppbmcgc2V0dXAsIGNhbiBhY3R1YWxseSByZWFjaCB0aGlzIG5ldyBjb2RlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSByZWxpYW5jZSBvbiBkZXZpY2UgdHJlZSBub2Rlcy4KCkkmIzM5O3ZlIGdvdCBhbiBNRkQgZHJpdmVyIChgYWMyMDAuY2ApIGFuZCBhIFBIWSBkcml2ZXIgKGBhY3gwMC5jYCBhbmQgYXNzb2NpYXRlZCBmaWxlcykuIFRoZSBgc3lzY29uLmNgIGZpbGUgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWRkIGEgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCYjMzk7cyBjb3JlIGtlcm5lbCBsb2dpYywgYSBjb21tb24gZW50cnkgcG9pbnQgZm9yIHBvdGVudGlhbCBmdXp6aW5nLiBUaGlzIGlzIHRoZSBmaXJzdCB0aGluZyB0byBwcm9iZSBmb3IgcmVhY2hhYmlsaXR5LgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgaW5zdGFudGlhdGlvbiBtZXRob2RzLiBDYW4gSSBpbnN0YW50aWF0ZSB0aGVzZSBkZXZpY2VzIHRocm91Z2ggSTJDIG9yIE1ESU8gc3lzZnMgZW50cmllcywgb3IgZXZlbiB2aXJ0dWFsIGRldmljZSB0cmVlIG1hbmlwdWxhdGlvbj8gVGhlIGFuc3dlciwgYXQgbGVhc3Qgc3RyYWlnaHRmb3J3YXJkbHksIGlzIG5vLiAgVGhlIFBIWSBkcml2ZXIgKGBhY3gwMF9lcGh5X3Byb2JlYCkgZXhwbGljaXRseSBjaGVja3MgZm9yIGEgYGRldi0mZ3Q7b2Zfbm9kZWAgYW5kIHJldHVybnMgYC1FTk9ERVZgIGlmIGl0JiMzOTtzIG5vdCBwcmVzZW50LiAgVGhlIE1GRCBkcml2ZXIgKGBhYzIwMF9wcm9iZWApIGFsc28gdXNlcyBgZGV2LSZndDtvZl9ub2RlYCBpbiB0aGUgY3JpdGljYWwgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgY2FsbC4gIElmIEkgdHJ5IHRvIGluc3RhbnRpYXRlIHRoZXNlIGRldmljZXMgd2l0aCBzeXNmcyBgbmV3X2RldmljZWAsIHRoZXJlJiMzOTtzIG5vIHdheSB0byBhdHRhY2ggYSBEVCBub2RlLgoKU3l6a2FsbGVyIGRvZXMgaGF2ZSBsaW1pdGVkIEkyQy9NRElPIHN1cHBvcnQsIHR5cGljYWxseSB1c2VkIHZpYSBgL2Rldi9pMmMtKmAgZGV2aWNlcy4gSG93ZXZlciwgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGF1dG9tYXRpY2FsbHkgKnByb2JlKiBkcml2ZXJzIHVubGVzcyB0aGUgZGV2aWNlIGlzIHByb3Blcmx5IGluc3RhbnRpYXRlZCwgYW5kIGNlcnRhaW5seSBpc24mIzM5O3QgZ29pbmcgdG8gaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIG9uIGRlbWFuZC4gIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGl0JiMzOTtzIGRpZmZpY3VsdCB0byBnZXQgdGhhdCBub2RlIHNldCB1cCBkeW5hbWljYWxseSwgYW5kIGJvdGggcHJvYmVzIHdpbGwgZmFpbC4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRoZSB1c2Ugb2YgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAuIEl0ICppcyogYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgYnV0IGl0cyBvbmx5IGV4cGxpY2l0IHVzZSBpbiB0aGUgcGF0Y2ggaXMgd2l0aGluIHRoZSBgYWMyMDAuY2AgZmlsZS4gIFdoaWxlIHRoZSBtb2RpZmljYXRpb24gKnNlZW1zKiBpbXBhY3RmdWwgdG8gY29yZSBjb2RlLCBpZiBgYWMyMDBfcHJvYmVgIGlzIG5ldmVyIGNhbGxlZCwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBub3QgYmUgdGVzdGVkLgoKSSB0aG91Z2h0IGFib3V0IHRoZSBwb3RlbnRpYWwgdG8gaW5zdGFudGlhdGUgdGhlIEkyQyBkZXZpY2UgdmlhIHN5c2ZzIC0gYXMgaW4sIGVjaG8gdGhlIGRldmljZSBhbmQgYWRkcmVzcywgYW5kIHRyeSB0byBoYXZlIGl0IGJpbmQuIFRoaXMgd291bGQgY2FsbCBgYWMyMDBfcHJvYmVgLiBBbmQgaXQgKndvdWxkKiwgYnV0IHRoZW4gdGhlIGBkZXZtX2Nsa19nZXRfZW5hYmxlZGAgZnVuY3Rpb24gd291bGQgZmFpbCB3aXRoIGAtRU5PRU5UYCBiZWNhdXNlIHRoZSBjbGsgbm9kZSBpcyBhbHNvIG1pc3NpbmcgZnJvbSB0aGUgZGV2aWNlIHRyZWUgYW5kIHRoZSBNRkQgY29kZSByZXF1aXJlcyBpdCB0byBiZSBwcmVzZW50LgoKU28sIHJlYWxpc3RpY2FsbHksICpuZWl0aGVyKiBkcml2ZXIgaXMgbGlrZWx5IHRvIGV4ZWN1dGUgYW55IHNpZ25pZmljYW50IGNvZGUgcGF0aCB3aXRob3V0IGEgKndlbGwtZGVmaW5lZCogZGV2aWNlIHRyZWUgbm9kZS4gVGhlcmVmb3JlLCB0aGUgcmVmYWN0b3JlZCBzeXNjb24gQVBJIGlzIHVubGlrZWx5IHRvIGJlIHRlc3RlZCwgdG9vLgoKSG93ZXZlciwgdGhlIHJlZmFjdG9yaW5nIGl0c2VsZiBpcyBhIGNoYW5nZSB0byBjb3JlIGBzeXNjb24uY2AgY29kZS4gVGhlIGZ1bmN0aW9uIG5hbWUgYG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgIGFscmVhZHkgZXhpc3RlZCBhbmQgb25seSB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gd2FzIG1vZGlmaWVkIHRvIHVzZSBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbGAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHVzZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgc28gdGhpcyBjaGFuZ2UgKmNvdWxkKiBiZSByZWFjaGFibGUgaWYgdGhlcmUgaXMgYW5vdGhlciBjYWxsIHRvIGl0LgoKVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgd2hpbGUgSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGFkZGluZyBzdXBwb3J0LCB0aGF0IGNvZGUgaXMgdW5yZWFjaGFibGUgd2l0aG91dCBjcmFmdGluZyBhIHNwZWNpZmljIGRldmljZSB0cmVlLCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIHN5emthbGxlciB0eXBpY2FsbHkgZG9lcyBhdXRvbWF0aWNhbGx5IGZvciBhcmJpdHJhcnkgZHJpdmVycyBhbmQgaXQgaXMgdW5saWtlbHkgdG8gdGVzdCB0aGUgZHJpdmVycyBpZiBJIGp1c3QgZGVjbGFyZSB0aGF0IGNvZGUgaXMgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWZkL2FjMjAwLmM9NzQ9c3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvbWZkL2FjMjAwLmMtMTMwLVxuZHJpdmVycy9tZmQvYWMyMDAuYzoxMzE6XHRyZXQgPSBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoZGV2LCBkZXYtXHUwMDNlb2Zfbm9kZSxcbmRyaXZlcnMvbWZkL2FjMjAwLmMtMTMyLVx0XHRcdFx0XHQgICAgIGRkYXRhLVx1MDAzZXJlZ21hcCk7XG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmM9MTk3PXN0YXRpYyBzdHJ1Y3Qgc3lzY29uICpcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjE5ODpvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG5kcml2ZXJzL21mZC9zeXNjb24uYy0xOTktXHRcdFx0XHQgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjMwLS8qKlxuZHJpdmVycy9tZmQvc3lzY29uLmM6MjMxOiAqIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIHJlZ21hcCBmb3Igc3BlY2lmaWVkIGRldmljZSBub2RlXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yMzItICogQG5wOiBEZXZpY2UgdHJlZSBub2RlXG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjQwLSAqL1xuZHJpdmVycy9tZmQvc3lzY29uLmM6MjQxOmludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI0Mi17XG5kcml2ZXJzL21mZC9zeXNjb24uYzoyNDM6XHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwobnAsIHJlZ21hcCkpO1xuZHJpdmVycy9tZmQvc3lzY29uLmMtMjQ0LX1cbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI0NTpFWFBPUlRfU1lNQk9MX0dQTChvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTtcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI0Ni1cbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI0NzpzdGF0aWMgdm9pZCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSh2b2lkICpkYXRhKVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjQ4LXtcbi0tXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNTktLyoqXG5kcml2ZXJzL21mZC9zeXNjb24uYzoyNjA6ICogZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciBhIG1hbmFnZWQgZXh0ZXJuYWwgc3lzY29uIHJlZ21hcFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjYxLSAqIEBkZXY6IERldmljZSB0aGF0IG93bnMgdGhlIHJlZ21hcFxuLS1cbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI3MC0gKi9cbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI3MTppbnQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI3Mi1cdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjc2LVxuZHJpdmVycy9tZmQvc3lzY29uLmM6Mjc3Olx0c3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKTtcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI3OC1cdGlmIChJU19FUlIoc3lzY29uKSlcbi0tXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODEtXHRyZXR1cm4gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldixcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI4MjpcdFx0XHRcdFx0ZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2UsXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODMtXHRcdFx0XHRcdHN5c2Nvbik7XG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODQtfVxuZHJpdmVycy9tZmQvc3lzY29uLmM6Mjg1OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7XG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODYtXG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmM9MzAyPUVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9ub2RlX3RvX3JlZ21hcCk7XG4tLVxuZHJpdmVycy9tZmQvc3lzY29uLmMtMzEwLSAqIGZ1bmN0aW9uIGlzIHNhZmUgdG8gdXNlIGZvciBhIHN5c2NvbiByZWdpc3RlcmVkIHdpdGhcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjMxMTogKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkuXG5kcml2ZXJzL21mZC9zeXNjb24uYy0zMTItICpcbi0tXG5kcml2ZXJzL3NvYy9yZW5lc2FzL3J6LXN5c2MuYz0xMDc9c3RhdGljIGludCByel9zeXNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmMtMTUxLVxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmM6MTUyOlx0cmV0dXJuIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoZGV2LVx1MDAzZW9mX25vZGUsIHJlZ21hcCk7XG5kcml2ZXJzL3NvYy9yZW5lc2FzL3J6LXN5c2MuYy0xNTMtfVxuLS1cbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jPTQxMD1zdGF0aWMgaW50IHNldHVwX2NwdWhwX2FuZF9jcHVpZGxlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3NvYy9zYW1zdW5nL2V4eW5vcy1wbXUuYy00NDgtXHQvKiByZWdpc3RlciBjdXN0b20gbW1pbyByZWdtYXAgd2l0aCBzeXNjb24gKi9cbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jOjQ0OTpcdHJldCA9IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoaW50cl9nZW5fbm9kZSxcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTQ1MC1cdFx0XHRcdFx0cG11X2NvbnRleHQtXHUwMDNlcG11aW50cmdlbik7XG4tLVxuZHJpdmVycy9zb2Mvc2Ftc3VuZy9leHlub3MtcG11LmM9NDc2PXN0YXRpYyBpbnQgZXh5bm9zX3BtdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTUxNi1cbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jOjUxNzpcdFx0cmV0ID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYtXHUwMDNlb2Zfbm9kZSwgcmVnbWFwKTtcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTUxOC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3NvYy9zdW54aS9zdW54aV9zcmFtLmM9NDA4PXN0YXRpYyBpbnQgX19pbml0IHN1bnhpX3NyYW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL3NvYy9zdW54aS9zdW54aV9zcmFtLmMtNDMxLVxuZHJpdmVycy9zb2Mvc3VueGkvc3VueGlfc3JhbS5jOjQzMjpcdFx0cmV0ID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYtXHUwMDNlb2Zfbm9kZSwgcmVnbWFwKTtcbmRyaXZlcnMvc29jL3N1bnhpL3N1bnhpX3NyYW0uYy00MzMtXHRcdGlmIChyZXQpXG4tLVxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmg9MzA9c3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtMzEtXHRcdFx0XHRcdFx0XHRjb25zdCBjaGFyICpwcm9wZXJ0eSk7XG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaDozMjppbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtMzMtXHRcdFx0ICAgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKTtcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjM0OmludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtMzUtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oPTY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChcbi0tXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaC03NS1cbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjc2OnN0YXRpYyBpbmxpbmUgaW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oLTc3LVx0XHRcdFx0XHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4tLVxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmg9ODI9c3RhdGljIGlubGluZSBpbnRcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjgzOmRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaC04NC1cdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAyMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQwNAoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA0MDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHJlZmFjdG9ycyBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgYW5kIGFkZHMgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBvcmlnaW5hbCBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgaXMgdXNlZCBieSBhIGZldyBTb0Mtc3BlY2lmaWMgZHJpdmVycyAoYGV4eW5vcy1wbXUuY2AsIGByei1zeXNjLmNgLCBhbmQgYHN1bnhpX3NyYW0uY2ApLiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHNvbWUgY29yZSBzeXNjb24gY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcm5hbCByZWdpc3RyYXRpb24gZnVuY3Rpb24uIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGl0IG5vdyB1c2VzIGBvZl9ub2RlX2dldCgpYCB0byB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2Ugbm9kZSwgZml4aW5nIGEgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZSwgd2hpY2ggaXMgZ29vZC4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIG1pbm9yIGRpZmZlcmVuY2UgaW4gbWVtb3J5IGFsbG9jYXRpb24uIEkgYWxzbyBzZWUgdGhhdCB0aGVyZSYjMzk7cyBhIG5ldyBgYWMyMDBgIE1GRCBkcml2ZXIgYW5kIGBhY3gwMGAgUEhZIGRyaXZlciBpbmNsdWRlZCBpbiB0aGlzIHBhdGNoLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgYnkgc3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIHRlc3QgZW52aXJvbm1lbnRzLCBwcmltYXJpbHkgeDg2XzY0IGFuZCBBUk02NCBgdmlydGAuIEkga25vdyBzeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IHJ1biB0aGVzZSBzcGVjaWZpYyBTb0NzLCBhbmQgc28sIHRoZSBTb0MgZHJpdmVycyB0aGF0IHVzZSBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgYXJlIGxpa2VseSB1bnJlYWNoYWJsZS4gQnV0LCBpcyB0aGUgY29yZSBmdW5jdGlvbiBhZmZlY3RlZCBieSB0aGUgcGF0Y2ggcmVhY2hhYmxlPwoKTGV0JiMzOTtzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRob3NlIG5ldyBkcml2ZXJzLiBgYWMyMDBfcHJvYmVgIGlzIGFuIEkyQyBwcm9iZSBmdW5jdGlvbiwgYW5kIHRoZSBgYWN4MDBfZXBoeV9wcm9iZWAgaXMgYSBNRElPIFBIWSBwcm9iZSBmdW5jdGlvbi4gRm9yIGJvdGggb2YgdGhlbSwgdGhlIGRldmljZSB0cmVlIG5vZGUgKGBvZl9ub2RlYCkgaXMgY3JpdGljYWwuIEluIHRoZSBgYWMyMDBgIGNhc2UsIEkgbm90aWNlZCB0aGUgZnVuY3Rpb24gY2FsbHMgYGRldm1fY2xrX2dldF9lbmFibGVkYC4gSWYgbm8gY2xvY2sgaXMgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gbm9kZSwgaXQgcmV0dXJucyBhbiBlcnJvciBhbmQgdGhlIHByb2JlIGZhaWxzLiBGb3IgYGFjeDAwYCwgdGhlIHByb2JlIHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBkZXZpY2UgZG9lc24mIzM5O3QgaGF2ZSBhbiBgb2Zfbm9kZWAuIEkgYWxzbyBzZWUgdGhhdCB0aGUgUEhZIGRyaXZlciB1c2VzIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGZvciBkZXZpY2UgbWF0Y2hpbmcgYGdlbnBoeV9tYXRjaF9waHlfZGV2aWNlYCwgd2hpY2ggZmFpbHMgaWYgYG9mX25vZGVgIGlzIGBOVUxMYC4KCkNhbiBzeXprYWxsZXIgY3JlYXRlIGEgc2l0dWF0aW9uIHdoZXJlIHRoZXNlIGRyaXZlcnMmIzM5OyBwcm9iZXMgZ2V0IGNhbGxlZD8gSSBjYW4gdHJ5IHRvIGNyZWF0ZSBhbiBJMkMgb3IgTURJTyBkZXZpY2UgdmlhIHN5c2ZzIGluIGEgdmlydHVhbGl6ZWQgUUVNVS9HQ0UgZW52aXJvbm1lbnQuIEJ1dCB0aGUgY3J1Y2lhbCBpc3N1ZSBpcyB0aGUgZGV2aWNlIHRyZWUgbm9kZS4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGN1cnJlbnRseSBpbmplY3QgRFQgb3ZlcmxheXMsIGFuZCB3aXRob3V0IHRoZSBEVCBub2RlLCB0aGUgZHJpdmVycyB3aWxsIG5vdCBpbml0aWFsaXplIHByb3Blcmx5LiBXaXRob3V0IGEgdmFsaWQgYG9mX25vZGVgLCB0aGVzZSBkcml2ZXJzIHdvbiYjMzk7dCBleGVjdXRlIGFueSBzaWduaWZpY2FudCBjb2RlIHBhdGhzLCByZXR1cm5pbmcgZWFybHkgb3IgZmFpbGluZyBhdCBgZGV2bV9jbGtfZ2V0X2VuYWJsZWRgLiBUaGUgYGFjeDAwYCBkcml2ZXIgd2lsbCBhbHNvIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGVyZSBpcyBubyBub2RlIGF2YWlsYWJsZS4KClNvLCBJJiMzOTttIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IG90aGVyIHdheXMgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsYCBvciB0aGUgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGA/IEZyb20gYSBjb2RlIHNlYXJjaCwgSSBzZWUgdGhhdCB0aGlzIGlzIG5vdCBwb3NzaWJsZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBjYWxsZWQgYnkgdGhlIGRyaXZlciBwcm9iZXMgYW5kIHRob3NlIGFyZSB0aGUgb25seSBwbGFjZXMuCgpPa2F5LCBsZXQgbWUgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYWdhaW46IHRoZSBwYXRjaCBoYXMgc29tZSBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIFRoYXQgaXMgbXkgY29uY2x1c2lvbi4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHJlZmFjdG9yZWQgY29kZSBwYXRoIGlzIG5vdCBlYXNpbHkgcmVhY2hhYmxlIGluIHRoZSBzeXprYWxsZXIgc2V0dXAsIGFuZCB0aGUgZHJpdmVycyBkZXBlbmQgb24gZGV2aWNlIHRyZWUgbm9kZXMgdGhhdCBhcmUgbm90IGVhc2lseSBwcm92aWRlZCwgdGhlIHBhdGNoIGlzIHVubGlrZWx5IHRvIHVuY292ZXIgYW55IG1lYW5pbmdmdWwgbmV3IGZ1enppbmcgdGFyZ2V0cyBpbiBteSB0eXBpY2FsIHRlc3QgZW52aXJvbm1lbnQsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBkcml2ZXJzIGZvciBYLVBvd2VycyBBQzIwMCBNRkQgYW5kIEFDeDAwIEV0aGVybmV0IFBIWXMsIHdoaWNoIHN0cmljdGx5IHJlcXVpcmUgZGV2aWNlIHRyZWUgbm9kZXMgKG9mX25vZGUpIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gU2luY2Ugc3l6a2FsbGVyIGRvZXMgbm90IGR5bmFtaWNhbGx5IGdlbmVyYXRlIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcywgYW5kIHRoZXNlIGRldmljZXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBkZWZhdWx0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VICYjMzk7dmlydCYjMzk7IG9yIHg4Nl82NCksIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBUaGUgbWlub3IgcmVmYWN0b3JpbmcgaW4gc3lzY29uLmMgaXMgb25seSByZWFjaGFibGUgdmlhIFNvQy1zcGVjaWZpYyBkcml2ZXJzIChFeHlub3MsIFN1bnhpLCBSZW5lc2FzKSB0aGF0IGFyZSBhbHNvIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZHJpdmVycyBmb3IgWC1Qb3dlcnMgQUMyMDAgTUZEIGFuZCBBQ3gwMCBFdGhlcm5ldCBQSFlzLCB3aGljaCBzdHJpY3RseSByZXF1aXJlIGRldmljZSB0cmVlIG5vZGVzIChvZl9ub2RlKSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIFNpbmNlIHN5emthbGxlciBkb2VzIG5vdCBkeW5hbWljYWxseSBnZW5lcmF0ZSBhcmJpdHJhcnkgZGV2aWNlIHRyZWUgbm9kZXMsIGFuZCB0aGVzZSBkZXZpY2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZGVmYXVsdCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSAmIzM5O3ZpcnQmIzM5OyBvciB4ODZfNjQpLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gVGhlIG1pbm9yIHJlZmFjdG9yaW5nIGluIHN5c2Nvbi5jIGlzIG9ubHkgcmVhY2hhYmxlIHZpYSBTb0Mtc3BlY2lmaWMgZHJpdmVycyAoRXh5bm9zLCBTdW54aSwgUmVuZXNhcykgdGhhdCBhcmUgYWxzbyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDIwOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMDozODo0MS4wNTQ0MTA3MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjUxMjU2NTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZHJpdmVycyBmb3IgWC1Qb3dlcnMgQUMyMDAgTUZEIGFuZCBBQ3gwMCBFdGhlcm5ldCBQSFlzLCB3aGljaCBzdHJpY3RseSByZXF1aXJlIGRldmljZSB0cmVlIG5vZGVzIChvZl9ub2RlKSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIFNpbmNlIHN5emthbGxlciBkb2VzIG5vdCBkeW5hbWljYWxseSBnZW5lcmF0ZSBhcmJpdHJhcnkgZGV2aWNlIHRyZWUgbm9kZXMsIGFuZCB0aGVzZSBkZXZpY2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZGVmYXVsdCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSAndmlydCcgb3IgeDg2XzY0KSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuIFRoZSBtaW5vciByZWZhY3RvcmluZyBpbiBzeXNjb24uYyBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgU29DLXNwZWNpZmljIGRyaXZlcnMgKEV4eW5vcywgU3VueGksIFJlbmVzYXMpIHRoYXQgYXJlIGFsc28gbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMjA6Mzg6NDEuMDU0NDE3ODc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU5NzA5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkOTRhNWE5OWM1NWU5NTZhMmZmYTBiYTA1NzVhZmEwMDE0NmE1MGM0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMjA6Mzg6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi42MDk4MzFiMTVjODA2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbFxcbkBAIC0wLDAgKzEsNDkgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIElDXFxuK1xcbittYWludGFpbmVyczpcXG4rICAtIEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246XFxuKyAgVGhlIEFDMjAwIGlzIGEgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQyBjb250YWluaW5nIGF1ZGlvLCB2aWRlbywgUlRDIGFuZFxcbisgIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucy4gSXRzIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBvdmVyIEkyQy5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMFxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEFDMjAwIGlucHV0IGNsb2NrLiBXaGVuIHVzaW5nIHRoZSBFdGhlcm5ldCBQSFksIGl0cyBjb25maWd1cmVkIHJhdGUgbXVzdFxcbisgICAgICBiZSAyNCBvciAyNyBNSHosIG1hdGNoaW5nIHRoZSByYXRlcyBlbmNvZGVkIGJ5IHRoZSBkb2N1bWVudGVkIEVQSFkgY2xvY2tcXG4rICAgICAgc2VsZWN0b3IuXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHJlZ1xcbisgIC0gY2xvY2tzXFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgaTJjIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgbWl4ZWQtc2lnbmFsQDEwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzIwMFxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MweDEwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgfTtcXG4rICAgIH07XFxuKy4uLlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWUwYzVlOTgwYzM5ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxuQEAgLTAsMCArMSwyMDcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XFxuKyAgdGhlIHNhbWUgQ2xhdXNlIDIyIFBIWSBJRCBhbmQgdXNlIHRoZSBzYW1lIGxpbmstc2lkZSByZWdpc3RlciBsYXlvdXQuIFRoZVxcbisgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIGFuIEkyQyBNRkQsXFxuKyAgd2hpbGUgQUMzMDAgY29udHJvbCByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2XFxuKyAgcGx1cyB0aGUgbGluayBQSFkgYWRkcmVzcy5cXG4rXFxuKyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxcbisgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLlxcbitcXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcXG4rICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kXFxuKyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xcbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxcbitcXG4rc2VsZWN0OlxcbisgIHByb3BlcnRpZXM6XFxuKyAgICBjb21wYXRpYmxlOlxcbisgICAgICBlbnVtOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXG4rICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgIHJlcXVpcmVkOlxcbisgICAgLSBjb21wYXRpYmxlXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbitcXG4rICByZWc6XFxuKyAgICBtYXhpbXVtOiAzMVxcbitcXG4rICBjbG9ja3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6LiBUaGUgQUMyMDAgaW5wdXQgY2xvY2tcXG4rICAgICAgYmVsb25ncyB0byB0aGUgcmVmZXJlbmNlZCBBQzIwMCBNRkQgaW5zdGVhZC5cXG4rXFxuKyAgdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzFcXG4rICAgICAgb24gQUMzMDAuXFxuK1xcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxcbisgICAgICBjb3B5IGluc3RlYWQuXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxcbitcXG4rICB4LXBvd2VycyxhYzIwMDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgdG8gdGhlIEFDMjAwIE1GRCBjb250YWluaW5nIHRoaXMgRXRoZXJuZXQgUEhZXFxuK1xcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XFxuKyAgICB0eXBlOiBib29sZWFuXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxcbitcXG4rcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxcbisgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXFxuKyAgICBwcm9wZXJ0aWVzOlxcbisgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXG4rICAgIHJlcXVpcmVkOlxcbisgICAgICAtIGNvbXBhdGlibGVcXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gdmNjLXN1cHBseVxcbitcXG4rZGVwZW5kZW50UmVxdWlyZWQ6XFxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXFxuKyAgbnZtZW0tY2VsbC1uYW1lczogWyBudm1lbS1jZWxscyBdXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjbG9ja3M6IGZhbHNlXFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJlZzpcXG4rICAgICAgICAgIG1heGltdW06IDdcXG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6XFxuKyAgICAgICAgICBtYXhpbXVtOiA3XFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gY2xvY2tzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rXFxuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnB3bSA1XFx1MDAzZTtcXG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXFx1MDAzY1xcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXFxcImNvbmZpZ3VyYXRpb25cXFwiO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXFwiO1xcbisgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZwd20gNVxcdTAwM2U7XFxuKyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcXHUwMDNjXFx1MDAyNnJlZ18zdjNcXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJjb25maWd1cmF0aW9uXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcXG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxcIjtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rXFxuKyAgLSB8XFxuKyAgICBtZGlvIHtcXG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMSB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcXHUwMDNjXFx1MDAyNnJlZ18zdjNcXHUwMDNlO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFxcdTAwM2NcXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXFx1MDAzZTtcXG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFxcXCJjb25maWd1cmF0aW9uXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAxIHtcXG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxcIjtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG4rLi4uXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXFxuaW5kZXggNzYzY2U2YTM0NzgyYi4uOTVlM2M2Mjc0MmJiNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xcbkBAIC0yMDUsNiArMjA1LDE4IEBAIGNvbmZpZyBNRkRfQUMxMDBcXG4gXFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcXG4gXFx0ICBjb21wb25lbnRzIGxpa2UgY29kZWNzIG9yIFJUQyB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy5cXG4gXFxuK2NvbmZpZyBNRkRfQUMyMDBcXG4rXFx0dHJpc3RhdGUgXFxcIlgtUG93ZXJzIEFDMjAwXFxcIlxcbitcXHRkZXBlbmRzIG9uIEkyQ1xcbitcXHRkZXBlbmRzIG9uIE9GXFxuK1xcdHNlbGVjdCBNRkRfU1lTQ09OXFxuK1xcdHNlbGVjdCBSRUdNQVBfSTJDXFxuK1xcdGhlbHBcXG4rXFx0ICBTdXBwb3J0IGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIGNvbXBhbmlvbiBJQy4gVGhlIEFDMjAwXFxuK1xcdCAgY29udGFpbnMgYXVkaW8sIHZpZGVvLCBSVEMgYW5kIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucyBhbmQgaXNcXG4rXFx0ICBjby1wYWNrYWdlZCB3aXRoIHNvbWUgQWxsd2lubmVyIEg2IGFuZCBINjE2IFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzXFxuK1xcdCAgdGhlIHNoYXJlZCByZWdpc3RlciBhY2Nlc3MgdXNlZCBieSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkcml2ZXJzLlxcbitcXG4gY29uZmlnIE1GRF9BWFAyMFhcXG4gXFx0dHJpc3RhdGVcXG4gXFx0c2VsZWN0IE1GRF9DT1JFXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcXG5pbmRleCBkZDRiYjdlNzdjMzM2Li44OTBlNzZhOWFkMDBhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGVcXG5AQCAtMTUwLDYgKzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSlcXHQrPSBkYTkwNTItc3BpLm9cXG4gb2JqLSQoQ09ORklHX01GRF9EQTkwNTJfSTJDKVxcdCs9IGRhOTA1Mi1pMmMub1xcbiBcXG4gb2JqLSQoQ09ORklHX01GRF9BQzEwMClcXHRcXHQrPSBhYzEwMC5vXFxuK29iai0kKENPTkZJR19NRkRfQUMyMDApXFx0XFx0Kz0gYWMyMDAub1xcbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWClcXHQrPSBheHAyMHgub1xcbiBvYmotJChDT05GSUdfTUZEX0FYUDIwWF9JMkMpXFx0Kz0gYXhwMjB4LWkyYy5vXFxuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX1JTQilcXHQrPSBheHAyMHgtcnNiLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWMyMDAuYyBiL2RyaXZlcnMvbWZkL2FjMjAwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI1MDY2YmIzNmFjNzZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9tZmQvYWMyMDAuY1xcbkBAIC0wLDAgKzEsMTcwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogTUZEIGNvcmUgZHJpdmVyIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICpcXG4rICogQmFzZWQgb24gdGhlIEFDMTAwIGRyaXZlcjpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE2IENoZW4tWXUgVHNhaVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9SRUdcXHRcXHRcXHQweDAwMDBcXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9QQUNLQUdFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9DSElQX01BU0tcXHRcXHRHRU5NQVNLKDExLCAwKVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfQ09OVFJPTF9SRUdcXHRcXHRcXHQweDAwMDJcXG4rI2RlZmluZSBBQzIwMF9TWVNfQ09OVFJPTF9DSElQX1JFU0VUX0RFQVNTRVJUXFx0QklUKDApXFxuK1xcbisvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovXFxuKyNkZWZpbmUgQUMyMDBfVFdJX1JFR19BRERSX0hcXHQweDAwZmVcXG4rI2RlZmluZSBBQzIwMF9NQVhfUkVHXFx0XFx0MHhhMWYyXFxuK1xcbitzdHJ1Y3QgYWMyMDAge1xcbitcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZV9jZmcgYWMyMDBfcmFuZ2VfY2ZnW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0LnJhbmdlX21heCA9IEFDMjAwX01BWF9SRUcsXFxuK1xcdFxcdC5zZWxlY3Rvcl9yZWcgPSBBQzIwMF9UV0lfUkVHX0FERFJfSCxcXG4rXFx0XFx0LnNlbGVjdG9yX21hc2sgPSAweGZmLFxcbitcXHRcXHQud2luZG93X2xlbiA9IDI1NixcXG4rXFx0fSxcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIEVhY2ggQUMyMDAgc3ViLWJsb2NrIGNhbiByZXNldCBpbmRlcGVuZGVudGx5LCBpbnZhbGlkYXRpbmcgaXRzIHJlZ2lzdGVyXFxuKyAqIGNvbnRlbnRzIHdpdGhvdXQgcmVnbWFwJ3Mga25vd2xlZGdlLiBDYWNoZSBvbmx5IHRoZSBjb21tb24gcGFnZSBzZWxlY3RvcjtcXG4rICogdGhpcyBhdm9pZHMgYSBzZWxlY3RvciByZWFkLW1vZGlmeS13cml0ZSBmb3IgZXZlcnkgYWNjZXNzIG9uIHRoZSBzYW1lIHBhZ2VcXG4rICogd2l0aG91dCBldmVyIHJldHVybmluZyBzdGFsZSBmdW5jdGlvbmFsLXJlZ2lzdGVyIHZhbHVlcy5cXG4rICovXFxuK3N0YXRpYyBib29sIGFjMjAwX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIHJlZyAhPSBBQzIwMF9UV0lfUkVHX0FERFJfSDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGFjMjAwX3JlZ21hcF9jb25maWcgPSB7XFxuK1xcdC5uYW1lID0gXFxcImFjMjAwXFxcIixcXG4rXFx0LnJlZ19iaXRzID0gOCxcXG4rXFx0LnJlZ19zdHJpZGUgPSAyLFxcbitcXHQudmFsX2JpdHMgPSAxNixcXG4rXFx0LnJhbmdlcyA9IGFjMjAwX3JhbmdlX2NmZyxcXG4rXFx0Lm51bV9yYW5nZXMgPSBBUlJBWV9TSVpFKGFjMjAwX3JhbmdlX2NmZyksXFxuK1xcdC5tYXhfcmVnaXN0ZXIgPSBBQzIwMF9NQVhfUkVHLFxcbitcXHQudm9sYXRpbGVfcmVnID0gYWMyMDBfdm9sYXRpbGVfcmVnLFxcbitcXHQuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX01BUExFLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgYWMyMDBfZGlzYWJsZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMCAqZGRhdGEgPSBkYXRhO1xcbitcXG4rXFx0cmVnbWFwX3dyaXRlKGRkYXRhLVxcdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuK1xcdHVuc2lnbmVkIGludCB2ZXJzaW9uO1xcbitcXHRzdHJ1Y3QgYWMyMDAgKmRkYXRhO1xcbitcXHRzdHJ1Y3QgY2xrICpjbGs7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFkZGF0YSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRjbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKGNsaykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihjbGspLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIGNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxcXFxuXFxcIik7XFxuK1xcbitcXHRkZGF0YS1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcXHUwMDI2YWMyMDBfcmVnbWFwX2NvbmZpZyk7XFxuK1xcdGlmIChJU19FUlIoZGRhdGEtXFx1MDAzZXJlZ21hcCkpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkZGF0YS1cXHUwMDNlcmVnbWFwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRkYXRhKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vIG1pbmltdW0gZGVsYXkgaXMgZG9jdW1lbnRlZC4gTWF0Y2ggdGhlIHZlbmRvciBkcml2ZXIncyA0MCBtcyBkZWxheVxcbitcXHQgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suXFxuK1xcdCAqL1xcbitcXHRtc2xlZXAoNDApO1xcbitcXG4rXFx0cmV0ID0gcmVnbWFwX3JlYWQoZGRhdGEtXFx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX1ZFUlNJT05fUkVHLCBcXHUwMDI2dmVyc2lvbik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVhZCBjaGlwIHZlcnNpb25cXFxcblxcXCIpO1xcbitcXG4rXFx0ZGV2X2luZm8oZGV2LCBcXFwiQUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0IEZJRUxEX0dFVChBQzIwMF9TWVNfVkVSU0lPTl9DSElQX01BU0ssIHZlcnNpb24pLFxcbitcXHRcXHQgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTSywgdmVyc2lvbikpO1xcbitcXG4rXFx0LyogUmVzZXQgdGhlIGNoaXAgYWZ0ZXIgZGVwZW5kZW50IGZ1bmN0aW9uIGRyaXZlcnMgaGF2ZSB1bmJvdW5kLiAqL1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzIwMF9kaXNhYmxlLCBkZGF0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdtYXBfd3JpdGUoZGRhdGEtXFx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShkZGF0YS1cXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgIEFDMjAwX1NZU19DT05UUk9MX0NISVBfUkVTRVRfREVBU1NFUlQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKGRldiwgZGV2LVxcdTAwM2VvZl9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRkYXRhLVxcdTAwM2VyZWdtYXApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ21hcFxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4re1xcbitcXHRhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ4LXBvd2VycyxhYzIwMFxcXCIgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjMjAwX29mX21hdGNoKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XFxuK1xcdHsgLm5hbWUgPSBcXFwiYWMyMDBcXFwiIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWMyMDBfaTJjX2lkcyk7XFxuK1xcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJhYzIwMFxcXCIsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLFxcbitcXHR9LFxcbitcXHQucHJvYmUgPSBhYzIwMF9wcm9iZSxcXG4rXFx0LnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sXFxuK1xcdC5pZF90YWJsZSA9IGFjMjAwX2kyY19pZHMsXFxuK307XFxuK21vZHVsZV9pMmNfZHJpdmVyKGFjMjAwX2RyaXZlcik7XFxuK1xcbitNT0RVTEVfQVVUSE9SKFxcXCJKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJYLVBvd2VycyBBQzIwMCBNRkQgY29yZSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zeXNjb24uYyBiL2RyaXZlcnMvbWZkL3N5c2Nvbi5jXFxuaW5kZXggMjFhN2ZjZGQyNzM3OS4uNDQ4NDIyZmU0ZjIxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL21mZC9zeXNjb24uY1xcbisrKyBiL2RyaXZlcnMvbWZkL3N5c2Nvbi5jXFxuQEAgLTEwLDYgKzEwLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9od3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuQEAgLTE5Myw1MyArMTk0LDk1IEBAIHN0YXRpYyBzdHJ1Y3QgcmVnbWFwICpkZXZpY2Vfbm9kZV9nZXRfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIFxcdHJldHVybiBzeXNjb24tXFx1MDAzZXJlZ21hcDtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIHJlZ21hcCBmb3Igc3BlY2lmaWVkIGRldmljZSBub2RlXFxuLSAqIEBucDogRGV2aWNlIHRyZWUgbm9kZVxcbi0gKiBAcmVnbWFwOiBQb2ludGVyIHRvIHJlZ21hcCBvYmplY3RcXG4tICpcXG4tICogUmVnaXN0ZXIgYW4gZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcCBvYmplY3Qgd2l0aCBzeXNjb24gZm9yIHRoZSBzcGVjaWZpZWRcXG4tICogZGV2aWNlIHRyZWUgbm9kZS4gVGhpcyByZWdtYXAgd2lsbCB0aGVuIGJlIHJldHVybmVkIHRvIGNsaWVudCBkcml2ZXJzIHVzaW5nXFxuLSAqIHRoZSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKCkgQVBJLlxcbi0gKlxcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbi0gKi9cXG4taW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHJlZ21hcCAqcmVnbWFwKVxcbitzdGF0aWMgc3RydWN0IHN5c2NvbiAqXFxuK29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKVxcbiB7XFxuIFxcdHN0cnVjdCBzeXNjb24gKmVudHJ5LCAqc3lzY29uID0gTlVMTDtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghbnAgfHwgIXJlZ21hcClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXG4gXFx0c3lzY29uID0ga3phbGxvY19vYmooKnN5c2Nvbik7XFxuIFxcdGlmICghc3lzY29uKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHQvKiBjaGVjayBpZiBzeXNjb24gZW50cnkgYWxyZWFkeSBleGlzdHMgKi9cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcXHUwMDI2c3lzY29uX2xpc3QsIGxpc3QpXFxuIFxcdFxcdGlmIChlbnRyeS1cXHUwMDNlbnAgPT0gbnApIHtcXG4tXFx0XFx0XFx0cmV0ID0gLUVFWElTVDtcXG4tXFx0XFx0XFx0Z290byBlcnJfdW5sb2NrO1xcbitcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xcbitcXHRcXHRcXHRrZnJlZShzeXNjb24pO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0c3lzY29uLVxcdTAwM2VyZWdtYXAgPSByZWdtYXA7XFxuLVxcdHN5c2Nvbi1cXHUwMDNlbnAgPSBucDtcXG4rXFx0c3lzY29uLVxcdTAwM2VucCA9IG9mX25vZGVfZ2V0KG5wKTtcXG4gXFxuIFxcdC8qIHJlZ2lzdGVyIHRoZSByZWdtYXAgaW4gc3lzY29uIGxpc3QgKi9cXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c3lzY29uLVxcdTAwM2VsaXN0LCBcXHUwMDI2c3lzY29uX2xpc3QpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBzeXNjb247XFxuK31cXG4rXFxuKy8qKlxcbisgKiBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZVxcbisgKiBAbnA6IERldmljZSB0cmVlIG5vZGVcXG4rICogQHJlZ21hcDogUG9pbnRlciB0byByZWdtYXAgb2JqZWN0XFxuKyAqXFxuKyAqIFJlZ2lzdGVyIGFuIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXAgb2JqZWN0IHdpdGggc3lzY29uIGZvciB0aGUgc3BlY2lmaWVkXFxuKyAqIGRldmljZSB0cmVlIG5vZGUuIFRoaXMgcmVnbWFwIHdpbGwgdGhlbiBiZSByZXR1cm5lZCB0byBjbGllbnQgZHJpdmVycyB1c2luZ1xcbisgKiB0aGUgc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZSgpIEFQSS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK2ludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcXG4re1xcbitcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwobnAsIHJlZ21hcCkpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xcbitcXG4rc3RhdGljIHZvaWQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3lzY29uICpzeXNjb24gPSBkYXRhO1xcbiBcXG4tZXJyX3VubG9jazpcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XFxuK1xcdGxpc3RfZGVsKFxcdTAwMjZzeXNjb24tXFx1MDAzZWxpc3QpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xcbitcXG4rXFx0b2Zfbm9kZV9wdXQoc3lzY29uLVxcdTAwM2VucCk7XFxuIFxcdGtmcmVlKHN5c2Nvbik7XFxuLVxcdHJldHVybiByZXQ7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwob2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCk7XFxuK1xcbisvKipcXG4rICogZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKCkgLSBSZWdpc3RlciBhIG1hbmFnZWQgZXh0ZXJuYWwgc3lzY29uIHJlZ21hcFxcbisgKiBAZGV2OiBEZXZpY2UgdGhhdCBvd25zIHRoZSByZWdtYXBcXG4rICogQG5wOiBEZXZpY2UgdHJlZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnbWFwXFxuKyAqIEByZWdtYXA6IFBvaW50ZXIgdG8gdGhlIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXBcXG4rICpcXG4rICogUmVnaXN0ZXIgYW4gZXh0ZXJuYWxseSBjcmVhdGVkIHJlZ21hcCBvYmplY3Qgd2l0aCBzeXNjb24gYW5kIHJlbW92ZSBpdCB3aGVuXFxuKyAqIEBkZXYgaXMgdW5ib3VuZC4gQ29uc3VtZXJzIG11c3Qgc3RvcCB1c2luZyB0aGUgcmVnbWFwIGJlZm9yZSB0aGUgcHJvdmlkZXIgaXNcXG4rICogdW5ib3VuZCwgZm9yIGV4YW1wbGUgYnkgZXN0YWJsaXNoaW5nIGEgbWFuYWdlZCBkZXZpY2UgbGluayB0byBAZGV2LlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcXG4re1xcbitcXHRzdHJ1Y3Qgc3lzY29uICpzeXNjb247XFxuK1xcbitcXHRzeXNjb24gPSBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKG5wLCByZWdtYXApO1xcbitcXHRpZiAoSVNfRVJSKHN5c2NvbikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHN5c2Nvbik7XFxuK1xcbitcXHRyZXR1cm4gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2UsXFxuK1xcdFxcdFxcdFxcdFxcdHN5c2Nvbik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTtcXG4gXFxuIC8qKlxcbiAgKiBkZXZpY2Vfbm9kZV90b19yZWdtYXAoKSAtIEdldCBvciBjcmVhdGUgYSByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuaW5kZXggYTI5ZDNmZWQ4YTA1My4uMjdiOGZmZTRiNTM5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuQEAgLTQ3NSw2ICs0NzUsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXFxuIFxcdGhlbHBcXG4gXFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcXG4gXFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxcbitcXHR0cmlzdGF0ZSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXFxcIlxcbitcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXFx1MDAyNlxcdTAwMjYgTlZNRU0gXFx1MDAyNlxcdTAwMjYgT0ZfTURJTyBcXHUwMDI2XFx1MDAyNiBSRUdVTEFUT1JcXG4rXFx0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xcbitcXHRzZWxlY3QgUEhZX1BBQ0tBR0VcXG4rXFx0aGVscFxcbitcXHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcXG4rXFx0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxcbitcXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxcbitcXHQgIHJlZ2lzdGVycy5cXG4rXFxuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxcbiBcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlclxcXCJcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcXG5pbmRleCBlMjNkZjVlODM2ZTllLi5mZmIwZWZiYzRjYzRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbkBAIC0xMDAsNCArMTAwLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVxcdFxcdCs9IHNtc2Mub1xcbiBvYmotJChDT05GSUdfU1RFMTBYUClcXHRcXHQrPSBzdGUxMFhwLm9cXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVxcdCs9IHRlcmFuZXRpY3Mub1xcbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXFx0Kz0gdml0ZXNzZS5vXFxuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcXHQrPSB4cG93ZXJzL1xcbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICs9IHhpbGlueF9nbWlpMnJnbWlpLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsMyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAub1xcbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICs9IHhwb3dlcnMtYWN4MDAub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjgxZTAxM2JlNDAxYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXFxuQEAgLTAsMCArMSwzMTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgXFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cXHUwMDNlKVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWZkL3N5c2Nvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVnbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlxcdDI3MDAwMDAwXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXFx0XFx0XFx0MHgwMDE0XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCgxKVxcbitcXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1xcdFxcdFxcdDB4MDAxNlxcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xcbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXFx0XFx0XFx0MHg4MDA0XFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1xcdFxcdFxcdDB4NjAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXFx0XFx0XFx0R0VOTUFTSyg4LCA0KVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rXFxuK3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcXG4rXFx0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rXFx0dTE2IGVwaHlfY3RsO1xcbitcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XFxuK1xcdGJvb2wgcG93ZXJlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jdGwgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVxcdTAwM2VwaHlfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVnLCBFUlJfUFRSKHJldCkpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdFxcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0XFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2UgaWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFxuK1xcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5X2FkZHIgXFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkKSB7XFxuK1xcdFxcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcXG4rXFxuK1xcdC8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxcbitcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZGlzYWJsZTpcXG4rXFx0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xcbitcXHRzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbms7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XFxuK1xcdHU4IGJwc19lZmZ1c2VfY29kZTtcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXFxcIngtcG93ZXJzLGFjMjAwXFxcIiwgMCk7XFxuK1xcdGlmICghYWMyMDBfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxcXG5cXFwiKSk7XFxuK1xcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcXG4rXFx0aWYgKCFjbGllbnQpIHtcXG4rXFx0XFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXFxcblxcXCIpKTtcXG4rXFx0fVxcbitcXG4rXFx0bGluayA9IGRldmljZV9saW5rX2FkZChkZXYsIFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ICAgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUik7XFxuK1xcdGlmICghbGluaykge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKGxpbmstXFx1MDAzZXN0YXR1cykgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIngtcG93ZXJzLGFjMjAwXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlcmVnbWFwKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBnZXQgQUMyMDAgcmVnbWFwXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XFxuK1xcdFxcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgXFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdFxcdGNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cXG4rXFx0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXFx1MDAyNlxcbitcXHRcXHRcXHQgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spO1xcbitcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCA9XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0ssIGJwc19lZmZ1c2VfY29kZSk7XFxuK1xcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cXG4rXFxuK1xcdGNsayA9IGNsa19nZXQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihjbGspKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIoY2xrKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdH1cXG4rXFxuK1xcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XFxuK1xcdGNsa19wdXQoY2xrKTtcXG4rXFxuK1xcdHN3aXRjaCAoY2xrX3JhdGUpIHtcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJ1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIGNsa19yYXRlKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXHRwdXRfZGV2aWNlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldik7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnByaXYtXFx1MDAzZWNvbnRyb2w7XFxuK1xcbitvdXRfZXJyb3I6XFxuK1xcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxcXG5cXFwiKTtcXG4rb3V0X3B1dF9jbGllbnQ6XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXFxuQEAgLTAsMCArMSwzODcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYWN4MDAuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVFxcdDNcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlxcdDI0MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcXHQyNTAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXFx0MjcwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcXHRcXHRcXHQweDAwXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTS1xcdFxcdEdFTk1BU0soMTEsIDgpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDYpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDApXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlxcdFxcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpXFxuKyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVxcdFxcdFxcdEJJVCg1KVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExET1xcdFxcdEJJVCgzKVxcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTS1xcdFxcdEdFTk1BU0soMiwgMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1xcdFxcdFxcdDB4MDJcXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVxcdFxcdEJJVCgxNSlcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1JFR1xcdFxcdFxcdDB4MDVcXG4rI2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxNSwgMTQpXFxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMSwgMTApXFxuKyNkZWZpbmUgQUMzMDBfSU9fRFJWX0xFVkVMXzJcXHRcXHRcXHQyXFxuKyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVxcdFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcXHRcXHRcXHQweDA2XFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXFx0XFx0XFx0QklUKDExKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV05cXHRcXHRcXHRCSVQoMClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcXFxcbitcXHQoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcXFxcXFxuK1xcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXFxcXG4rXFx0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXFxuK1xcbisjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxcXFxuK1xcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEZJRUxEX1BSRVAoQUMzMDBfTUlJX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxcXFxuK1xcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxcbitcXG4rc3RydWN0IGFjMzAwX2VwaHlfY3RsIHtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XFxuK1xcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0dTE2IHN5c19jb250cm9sO1xcbitcXHR1MTYgZXBoeV9jb25maWc7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcdGJvb2wgcGFja2FnZV9rbm93bjtcXG4rXFx0Ym9vbCBpbnRlcm5hbF9kbGRvO1xcbitcXHRib29sIHN1cHBseV9lbmFibGVkO1xcbitcXHRib29sIHBvd2VyZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgaW50XFxuK2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0dTE2IHZhbClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0dTE2IHZhbCA9IChyZXQgXFx1MDAyNiB+bWFzaykgfCAoc2V0IFxcdTAwMjYgbWFzayk7XFxuK1xcbitcXHRcXHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XFxuK1xcdFxcdFxcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcmVnbnVtLCB2YWwpO1xcbitcXHR9XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlZXBoeV9jb25maWcgfFxcbitcXHRcXHQocHJpdi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcXG4rXFx0ICogdGhlIHN1cHBseSBhcnJhbmdlbWVudCwgcHJlc2VydmUgYW55IGV4dGVybmFsLVZERCBzZXR1cCBsZWZ0IGJ5IHRoZVxcbitcXHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuICFwcml2LVxcdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID9cXG4rXFx0XFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZCkge1xcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0XFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XFxuK1xcdFxcdGVsc2UgaWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFxuK1xcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcXG4rXFx0dTggcGFja2FnZV9zdGF0dXM7XFxuK1xcdHUxNiByZXNldF92YWx1ZTtcXG4rXFx0aW50IHN5c19jb250cm9sO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeV9hZGRyICE9IGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcG93ZXJlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXN1cHBseV9lbmFibGVkKSB7XFxuK1xcdFxcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cXHUwMDNldmNjKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xcbitcXG4rXFx0XFx0LyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqL1xcbitcXHRcXHRmc2xlZXAoMTAwMDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cXG4rXFx0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VzeXNfY29udHJvbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xcbitcXHRpZiAoc3lzX2NvbnRyb2wgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJldCA9IHN5c19jb250cm9sO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4rXFxuK1xcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcXG4rXFx0aWYgKCh+cGFja2FnZV9zdGF0dXMgXFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XFxuK1xcdCAgICBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgXFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xcbitcXHRwcml2LVxcdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX1NZU19CSUFTMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcXG4rXFx0XFx0XFx0XFx0ICAgcHJpdi1cXHUwMDNlaW50ZXJuYWxfZGxkbyA/XFxuK1xcdFxcdFxcdFxcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIEtlZXAgdGhlIGRvY3VtZW50ZWQgZGVmYXVsdCBkcml2ZSBsZXZlbCBhbmQgbGVhdmUgdGhlIElSUSBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0ZnNsZWVwKDEwMDAwKTtcXG4rXFxuK1xcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcG93ZXJfb2ZmOlxcbitcXHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0Y2xrX3B1dChkYXRhKTtcXG4rfVxcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcXG4rXFx0dTggYmdzX2VmZnVzZV9jb2RlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgXFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImxpbmsgYWRkcmVzcyBpcyBvdXRzaWRlIHRoZSBwYWNrYWdlIHJhbmdlXFxcXG5cXFwiKSk7XFxuK1xcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcXG4rXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VjbGspKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VjbGspLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxcXG5cXFwiKSk7XFxuK1xcbitcXHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRzd2l0Y2ggKGNsa19yYXRlKSB7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XFxuK1xcdFxcdHByaXYtXFx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjbGtfcmF0ZSkpO1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY29uZmlnID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcXG4rXFx0cHJpdi1cXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcXG4rXFx0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwcml2LVxcdTAwM2Vjb250cm9sO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OGYyYjBiNjM5MDk2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcXG5AQCAtMCwwICsxLDUzNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFxcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYWN4MDAuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9JRFxcdFxcdFxcdFxcdDB4MDA0NDE0MDBcXG4rXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1xcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXFx0XFx0QklUKDgpXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXFx0QklUKDkpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1xcdFxcdFxcdDB4MWZcXG4rI2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMiwgOClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzBcXHRcXHRcXHRcXHQwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8xXFx0XFx0XFx0XFx0MVxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlxcdFxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzZcXHRcXHRcXHRcXHQ2XFxuKyNkZWZpbmUgQUNYMDBfUEFHRV84XFx0XFx0XFx0XFx0OFxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVFxcdEJJVCgxMilcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXFx0XFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cXHRcXHQyXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFR1xcdFxcdDB4MTJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcXHQweDQ4MjRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXFx0XFx0XFx0QklUKDE1KVxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1xcdDB4MTdcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXFx0QklUKDMpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcXHRcXHQweDE4XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcXHRcXHRHRU5NQVNLKDE0LCAxMilcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFxcdDBcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXFx0XFx0MHgxMFxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcXHQweDU1MjNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcXHRcXHQweGYwMDBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHXFx0MHgxNFxcbisjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcXHQweDcwOGZcXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXFx0MHg3MDhiXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1xcdFxcdFxcdDB4MTVcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0tcXHRcXHRHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLXFx0XFx0R0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxcXFxuK1xcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxcXFxuK1xcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcXFxcbitcXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcXFxcbitcXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcXHRcXHQweDE4XFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcXHRcXHQweDAwYmNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1xcdFxcdDB4MWRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXFx0MHgwMDQ0XFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXFxcXG4rXFx0KEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgfCBcXFxcXFxuK1xcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxcbitcXG4rLypcXG4rICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXFxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxcbisgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZVxcbisgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cXG4rICovXFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcXG4rXFx0Ym9vbCBpc19hYzMwMDtcXG4rXFx0Ym9vbCB1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZztcXG4rXFx0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xcbit9O1xcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXBvd2VyX29uKHByaXYtXFx1MDAzZWNvbnRyb2wsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwcml2LVxcdTAwM2VwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2Vjb250cm9sLVxcdTAwM2Vwb3dlcl9vZmYocHJpdi1cXHUwMDNlY29udHJvbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBoeWRldl93YXJuKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIEVSUl9QVFIocmV0KSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcXG4rXFx0c2l6ZV90IGk7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdHU4ICpidWY7XFxuK1xcdHUxNiB2YWwgPSAwO1xcbitcXG4rXFx0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xcbitcXHRpZiAoSVNfRVJSKGNlbGwpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihjZWxsKTtcXG4rXFxuK1xcdGJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCBcXHUwMDI2bGVuKTtcXG4rXFx0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XFxuK1xcdGlmIChJU19FUlIoYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcXG4rXFx0aWYgKCFsZW4gfHwgbGVuIFxcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcXG4rXFx0XFx0a2ZyZWUoYnVmKTtcXG4rXFx0XFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspXFxuK1xcdFxcdHZhbCB8PSAodTE2KWJ1ZltpXSBcXHUwMDNjXFx1MDAzYyAoOCAqIGkpO1xcbitcXHRrZnJlZShidWYpO1xcbitcXHQqdmFsdWUgPSB2YWw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBzZWxlY3RhYmxlO1xcbitcXHRib29sIGZpeGVkX2FjMzAwO1xcbitcXHRib29sIGhhc19jb25maWd1cmF0aW9uO1xcbitcXHR1OCBjYWxpYnJhdGlvbjtcXG4rXFx0dTMyIGJhc2VfYWRkcjtcXG4rXFx0dTE2IGNvbmZpZ3VyYXRpb24gPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXFx1MDAzZW9mX25vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXFxcImV0aGVybmV0LXBoeS1wYWNrYWdlXFxcIikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiUEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2YmFzZV9hZGRyKTtcXG4rXFx0aWYgKHJldCB8fCBiYXNlX2FkZHIgIT0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRzZWxlY3RhYmxlID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0aWYgKCFzZWxlY3RhYmxlIFxcdTAwMjZcXHUwMDI2ICFmaXhlZF9hYzMwMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwidW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcbitcXHRoYXNfY29uZmlndXJhdGlvbiA9XFxuK1xcdFxcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFxcXCJudm1lbS1jZWxsLW5hbWVzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJjb25maWd1cmF0aW9uXFxcIikgXFx1MDAzZT0gMDtcXG4rXFx0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XFxuK1xcdFxcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcXFwiY29uZmlndXJhdGlvblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25maWd1cmF0aW9uKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNlbGVjdGFibGUpIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgPVxcbitcXHRcXHRcXHRjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgPSBmaXhlZF9hYzMwMDtcXG4rXFx0XFx0aWYgKGhhc19jb25maWd1cmF0aW9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhIShjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWlzX2FjMzAwKSB7XFxuK1xcdFxcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXFxuK1xcdFxcdFxcdFxcdGNvbmZpZ3VyYXRpb24pO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQhIShjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcXG4rXFx0cHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZCA9XFxuK1xcdFxcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXFxcIik7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYWMzMDApXFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbnRyb2wgPVxcbitcXHRcXHRcXHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNhbGlicmF0aW9uKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcml2LVxcdTAwM2Vjb250cm9sID1cXG4rXFx0XFx0XFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FsaWJyYXRpb24pO1xcbitcXHRyZXQgPSBQVFJfRVJSX09SX1pFUk8ocHJpdi1cXHUwMDNlY29udHJvbCk7XFxuK1xcbitvdXRfcHV0X25vZGU6XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXFxuK1xcdFxcdFxcdFxcdEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZW9mX25vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4rXFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqL1xcbitcXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LVxcdTAwM2Vpc19hYzMwMCA/XFxuK1xcdFxcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxcbitcXHRcXHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xcbitcXHR1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFO1xcbitcXHR1MTYgZ2xvYmFsX2NvbmZpZztcXG4rXFx0aW50IG9sZHBhZ2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpXFxuK1xcdFxcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLFxcbitcXHRcXHRcXHQgICAgICAgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRhZmVfZXFfcnhfZGV0ZWN0ID1cXG4rXFx0XFx0XFx0QUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFO1xcbitcXHRcXHR0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7XFxuK1xcdH1cXG4rXFxuK1xcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xcbitcXHRpZiAob2xkcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXFxuK1xcdFxcdFxcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYWMzMDAgXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcXG4rXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRSk7XFxuK1xcbitvdXRfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqL1xcbitcXHRyZXR1cm4gYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXN1bWVfcmV0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmVzdW1lX3JldCA9IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xcbitcXHRcXHRpZiAocmVzdW1lX3JldClcXG4rXFx0XFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBoeWRldi1cXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XFxuK1xcdGJvb2wgbWF0Y2g7XFxuK1xcbitcXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cXG4rXFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcXG4rXFx0aWYgKCFwYWNrYWdlX25vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcXCIpIHx8XFxuK1xcdFxcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcXCIpIHx8XFxuK1xcdFxcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xcbitcXG4rXFx0cmV0dXJuIG1hdGNoO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCksXFxuK1xcdFxcdC5uYW1lID0gXFxcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcXFwiLFxcbitcXHRcXHQubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSxcXG4rXFx0XFx0LnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSxcXG4rXFx0XFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLFxcbitcXHRcXHQuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxcbitcXHR9LFxcbit9O1xcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7XFxuK1xcdHsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3Mlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXFxuQEAgLTAsMCArMSwyOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKyNpZm5kZWYgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXFxuKyNkZWZpbmUgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUXFx0MTZcXG4rXFxuK3N0cnVjdCBkZXZpY2Vfbm9kZTtcXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wge1xcbitcXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IHBoeV9hZGRyKTtcXG4rXFx0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcXG4rXFx0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxcbithYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXFxuK1xcdFxcdCAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbik7XFxuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaCBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oXFxuaW5kZXggYWFkOWM2YjUwNDYzNi4uM2U4MDRmYzFiMDNlYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgZGV2aWNlX25vZGU7XFxuK3N0cnVjdCBkZXZpY2U7XFxuIFxcbiAjaWZkZWYgQ09ORklHX01GRF9TWVNDT05cXG4gc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfdG9fcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xcbkBAIC0zMCw2ICszMSw5IEBAIHN0cnVjdCByZWdtYXAgKnN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGVfb3B0aW9uYWwoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqcHJvcGVydHkpO1xcbiBpbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApO1xcbitpbnQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVnbWFwICpkZXZpY2Vfbm9kZV90b19yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4ge1xcbkBAIC03NSw2ICs3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnRcXG4rZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXFxuK3tcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbiAjZW5kaWZcXG4gXFxuICNlbmRpZiAvKiBfX0xJTlVYX01GRF9TWVNDT05fSF9fICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIwOjM4OjQxLjU0MTEwNzY0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2MDI1ODU2MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGRyaXZlcnMgZm9yIFgtUG93ZXJzIEFDMjAwIE1GRCBhbmQgQUN4MDAgRXRoZXJuZXQgUEhZcywgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZSBkZXZpY2UgdHJlZSBub2RlcyAob2Zfbm9kZSkgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBTaW5jZSBzeXprYWxsZXIgZG9lcyBub3QgZHluYW1pY2FsbHkgZ2VuZXJhdGUgYXJiaXRyYXJ5IGRldmljZSB0cmVlIG5vZGVzLCBhbmQgdGhlc2UgZGV2aWNlcyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGRlZmF1bHQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgJ3ZpcnQnIG9yIHg4Nl82NCksIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBUaGUgbWlub3IgcmVmYWN0b3JpbmcgaW4gc3lzY29uLmMgaXMgb25seSByZWFjaGFibGUgdmlhIFNvQy1zcGVjaWZpYyBkcml2ZXJzIChFeHlub3MsIFN1bnhpLCBSZW5lc2FzKSB0aGF0IGFyZSBhbHNvIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5NGE1YTk5YzU1ZTk1NmEyZmZhMGJhMDU3NWFmYTAwMTQ2YTUwYzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDIwOjM4OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjA5ODMxYjE1YzgwNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC94LXBvd2VycyxhYzIwMC55YW1sXG5AQCAtMCwwICsxLDQ5IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9tZmQveC1wb3dlcnMsYWMyMDAueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgbWl4ZWQtc2lnbmFsIElDXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjpcbisgIFRoZSBBQzIwMCBpcyBhIG1peGVkLXNpZ25hbCBjb21wYW5pb24gSUMgY29udGFpbmluZyBhdWRpbywgdmlkZW8sIFJUQyBhbmRcbisgIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucy4gSXRzIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBvdmVyIEkyQy5cbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICBjbG9ja3M6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEFDMjAwIGlucHV0IGNsb2NrLiBXaGVuIHVzaW5nIHRoZSBFdGhlcm5ldCBQSFksIGl0cyBjb25maWd1cmVkIHJhdGUgbXVzdFxuKyAgICAgIGJlIDI0IG9yIDI3IE1IeiwgbWF0Y2hpbmcgdGhlIHJhdGVzIGVuY29kZWQgYnkgdGhlIGRvY3VtZW50ZWQgRVBIWSBjbG9ja1xuKyAgICAgIHNlbGVjdG9yLlxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rICAtIHJlZ1xuKyAgLSBjbG9ja3NcbitcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgIC0gfFxuKyAgICBpMmMge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgbWl4ZWQtc2lnbmFsQDEwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhYzIwMFwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4MTBcdTAwM2U7XG4rICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4rICAgICAgICB9O1xuKyAgICB9O1xuKy4uLlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWUwYzVlOTgwYzM5ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCArMSwyMDcgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4rICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBjb250cm9sIHJlZ2lzdGVycyBhcmUgcGFydCBvZiBhbiBJMkMgTUZELFxuKyAgd2hpbGUgQUMzMDAgY29udHJvbCByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2XG4rICBwbHVzIHRoZSBsaW5rIFBIWSBhZGRyZXNzLlxuK1xuKyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cbisgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4rICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cbitcbisgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuKyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxuKyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xuKyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4rXG4rc2VsZWN0OlxuKyAgcHJvcGVydGllczpcbisgICAgY29tcGF0aWJsZTpcbisgICAgICBlbnVtOlxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbisgICAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuKyAgcmVxdWlyZWQ6XG4rICAgIC0gY29tcGF0aWJsZVxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuK1xuKyAgcmVnOlxuKyAgICBtYXhpbXVtOiAzMVxuK1xuKyAgY2xvY2tzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBBQzMwMCBpbnB1dCBjbG9jaywgcnVubmluZyBhdCAyNCwgMjUsIG9yIDI3IE1Iei4gVGhlIEFDMjAwIGlucHV0IGNsb2NrXG4rICAgICAgYmVsb25ncyB0byB0aGUgcmVmZXJlbmNlZCBBQzIwMCBNRkQgaW5zdGVhZC5cbitcbisgIHZjYy1zdXBwbHk6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMVxuKyAgICAgIG9uIEFDMzAwLlxuK1xuKyAgbnZtZW0tY2VsbHM6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nXG4rICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuKyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5XG4rICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbisgICAgICBjb3B5IGluc3RlYWQuXG4rXG4rICBudm1lbS1jZWxsLW5hbWVzOlxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxuK1xuKyAgeC1wb3dlcnMsYWMyMDA6XG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbisgICAgZGVzY3JpcHRpb246IFJlZmVyZW5jZSB0byB0aGUgQUMyMDAgTUZEIGNvbnRhaW5pbmcgdGhpcyBFdGhlcm5ldCBQSFlcbitcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XG4rICAgIHR5cGU6IGJvb2xlYW5cbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxuKyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXG4rXG4rcGF0dGVyblByb3BlcnRpZXM6XG4rICBeZXRoZXJuZXQtcGh5QFthLWYwLTldKyQ6XG4rICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xuKyAgICBwcm9wZXJ0aWVzOlxuKyAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXG4rICAgIHJlcXVpcmVkOlxuKyAgICAgIC0gY29tcGF0aWJsZVxuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gdmNjLXN1cHBseVxuK1xuK2RlcGVuZGVudFJlcXVpcmVkOlxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXG4rICBudm1lbS1jZWxsLW5hbWVzOiBbIG52bWVtLWNlbGxzIF1cbitcbithbGxPZjpcbisgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY2xvY2tzOiBmYWxzZVxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICByZWc6XG4rICAgICAgICAgIG1heGltdW06IDdcbisgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICByZWc6XG4rICAgICAgICAgIG1heGltdW06IDdcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gY2xvY2tzXG4rICAgICAgICAtIG52bWVtLWNlbGxzXG4rICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgbWRpbyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwiY29uZmlndXJhdGlvblwiO1xuKyAgICAgICAgICAgIHgtcG93ZXJzLGFjMjAwID0gXHUwMDNjXHUwMDI2YWMyMDBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisgIC0gfFxuKyAgICBtZGlvIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZwd20gNVx1MDAzZTtcbisgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxscyA9IFx1MDAzY1x1MDAyNmVwaHlfY29uZmlndXJhdGlvblx1MDAzZTtcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXCJjb25maWd1cmF0aW9uXCI7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisgIC0gfFxuKyAgICBtZGlvIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDEge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcImNvbmZpZ3VyYXRpb25cIjtcbitcbisgICAgICAgICAgICBldGhlcm5ldC1waHlAMSB7XG4rICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwiO1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuKy4uLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnXG5pbmRleCA3NjNjZTZhMzQ3ODJiLi45NWUzYzYyNzQyYmI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZ1xuQEAgLTIwNSw2ICsyMDUsMTggQEAgY29uZmlnIE1GRF9BQzEwMFxuIFx0ICBUaGlzIGRyaXZlciBpbmNsdWRlIG9ubHkgdGhlIGNvcmUgQVBJcy4gWW91IGhhdmUgdG8gc2VsZWN0IGluZGl2aWR1YWxcbiBcdCAgY29tcG9uZW50cyBsaWtlIGNvZGVjcyBvciBSVEMgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuXG4gXG4rY29uZmlnIE1GRF9BQzIwMFxuK1x0dHJpc3RhdGUgXCJYLVBvd2VycyBBQzIwMFwiXG4rXHRkZXBlbmRzIG9uIEkyQ1xuK1x0ZGVwZW5kcyBvbiBPRlxuK1x0c2VsZWN0IE1GRF9TWVNDT05cbitcdHNlbGVjdCBSRUdNQVBfSTJDXG4rXHRoZWxwXG4rXHQgIFN1cHBvcnQgZm9yIHRoZSBYLVBvd2VycyBBQzIwMCBtaXhlZC1zaWduYWwgY29tcGFuaW9uIElDLiBUaGUgQUMyMDBcbitcdCAgY29udGFpbnMgYXVkaW8sIHZpZGVvLCBSVEMgYW5kIEZhc3QgRXRoZXJuZXQgUEhZIGZ1bmN0aW9ucyBhbmQgaXNcbitcdCAgY28tcGFja2FnZWQgd2l0aCBzb21lIEFsbHdpbm5lciBINiBhbmQgSDYxNiBTb0NzLiBUaGlzIGRyaXZlciBwcm92aWRlc1xuK1x0ICB0aGUgc2hhcmVkIHJlZ2lzdGVyIGFjY2VzcyB1c2VkIGJ5IHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9uIGRyaXZlcnMuXG4rXG4gY29uZmlnIE1GRF9BWFAyMFhcbiBcdHRyaXN0YXRlXG4gXHRzZWxlY3QgTUZEX0NPUkVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlXG5pbmRleCBkZDRiYjdlNzdjMzM2Li44OTBlNzZhOWFkMDBhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlXG5AQCAtMTUwLDYgKzE1MCw3IEBAIG9iai0kKENPTkZJR19NRkRfREE5MDUyX1NQSSlcdCs9IGRhOTA1Mi1zcGkub1xuIG9iai0kKENPTkZJR19NRkRfREE5MDUyX0kyQylcdCs9IGRhOTA1Mi1pMmMub1xuIFxuIG9iai0kKENPTkZJR19NRkRfQUMxMDApXHRcdCs9IGFjMTAwLm9cbitvYmotJChDT05GSUdfTUZEX0FDMjAwKVx0XHQrPSBhYzIwMC5vXG4gb2JqLSQoQ09ORklHX01GRF9BWFAyMFgpXHQrPSBheHAyMHgub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX0kyQylcdCs9IGF4cDIweC1pMmMub1xuIG9iai0kKENPTkZJR19NRkRfQVhQMjBYX1JTQilcdCs9IGF4cDIweC1yc2Iub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FjMjAwLmMgYi9kcml2ZXJzL21mZC9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjUwNjZiYjM2YWM3NlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9tZmQvYWMyMDAuY1xuQEAgLTAsMCArMSwxNzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBNRkQgY29yZSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBQzIwMFxuKyAqXG4rICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFx1MDAzY2plcm5lai5za3JhYmVjQGdtYWlsLmNvbVx1MDAzZVxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICpcbisgKiBCYXNlZCBvbiB0aGUgQUMxMDAgZHJpdmVyOlxuKyAqIENvcHlyaWdodCAoQykgMjAxNiBDaGVuLVl1IFRzYWlcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfVkVSU0lPTl9SRUdcdFx0XHQweDAwMDBcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX1BBQ0tBR0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxNClcbisjZGVmaW5lIEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTS1x0XHRHRU5NQVNLKDExLCAwKVxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX0NPTlRST0xfUkVHXHRcdFx0MHgwMDAyXG4rI2RlZmluZSBBQzIwMF9TWVNfQ09OVFJPTF9DSElQX1JFU0VUX0RFQVNTRVJUXHRCSVQoMClcbitcbisvKiBJbnRlcmZhY2UgcmVnaXN0ZXIgYWNjZXNzaWJsZSBmcm9tIGV2ZXJ5IHJlZ2lzdGVyIHBhZ2UuICovXG4rI2RlZmluZSBBQzIwMF9UV0lfUkVHX0FERFJfSFx0MHgwMGZlXG4rI2RlZmluZSBBQzIwMF9NQVhfUkVHXHRcdDB4YTFmMlxuK1xuK3N0cnVjdCBhYzIwMCB7XG4rXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZV9jZmcgYWMyMDBfcmFuZ2VfY2ZnW10gPSB7XG4rXHR7XG4rXHRcdC5yYW5nZV9tYXggPSBBQzIwMF9NQVhfUkVHLFxuK1x0XHQuc2VsZWN0b3JfcmVnID0gQUMyMDBfVFdJX1JFR19BRERSX0gsXG4rXHRcdC5zZWxlY3Rvcl9tYXNrID0gMHhmZixcbitcdFx0LndpbmRvd19sZW4gPSAyNTYsXG4rXHR9LFxuK307XG4rXG4rLypcbisgKiBFYWNoIEFDMjAwIHN1Yi1ibG9jayBjYW4gcmVzZXQgaW5kZXBlbmRlbnRseSwgaW52YWxpZGF0aW5nIGl0cyByZWdpc3RlclxuKyAqIGNvbnRlbnRzIHdpdGhvdXQgcmVnbWFwJ3Mga25vd2xlZGdlLiBDYWNoZSBvbmx5IHRoZSBjb21tb24gcGFnZSBzZWxlY3RvcjtcbisgKiB0aGlzIGF2b2lkcyBhIHNlbGVjdG9yIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBldmVyeSBhY2Nlc3Mgb24gdGhlIHNhbWUgcGFnZVxuKyAqIHdpdGhvdXQgZXZlciByZXR1cm5pbmcgc3RhbGUgZnVuY3Rpb25hbC1yZWdpc3RlciB2YWx1ZXMuXG4rICovXG4rc3RhdGljIGJvb2wgYWMyMDBfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZylcbit7XG4rXHRyZXR1cm4gcmVnICE9IEFDMjAwX1RXSV9SRUdfQUREUl9IO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWMyMDBfcmVnbWFwX2NvbmZpZyA9IHtcbitcdC5uYW1lID0gXCJhYzIwMFwiLFxuK1x0LnJlZ19iaXRzID0gOCxcbitcdC5yZWdfc3RyaWRlID0gMixcbitcdC52YWxfYml0cyA9IDE2LFxuK1x0LnJhbmdlcyA9IGFjMjAwX3JhbmdlX2NmZyxcbitcdC5udW1fcmFuZ2VzID0gQVJSQVlfU0laRShhYzIwMF9yYW5nZV9jZmcpLFxuK1x0Lm1heF9yZWdpc3RlciA9IEFDMjAwX01BWF9SRUcsXG4rXHQudm9sYXRpbGVfcmVnID0gYWMyMDBfdm9sYXRpbGVfcmVnLFxuK1x0LmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9NQVBMRSxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIGFjMjAwX2Rpc2FibGUodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgYWMyMDAgKmRkYXRhID0gZGF0YTtcbitcbitcdHJlZ21hcF93cml0ZShkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19DT05UUk9MX1JFRywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZjbGllbnQtXHUwMDNlZGV2O1xuK1x0dW5zaWduZWQgaW50IHZlcnNpb247XG4rXHRzdHJ1Y3QgYWMyMDAgKmRkYXRhO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0aW50IHJldDtcbitcbitcdGRkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFkZGF0YSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihjbGspKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoY2xrKSxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZW5hYmxlIGlucHV0IGNsb2NrXFxuXCIpO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgY2xrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cIik7XG4rXG4rXHRkZGF0YS1cdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIFx1MDAyNmFjMjAwX3JlZ21hcF9jb25maWcpO1xuK1x0aWYgKElTX0VSUihkZGF0YS1cdTAwM2VyZWdtYXApKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZGRhdGEtXHUwMDNlcmVnbWFwKSxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXG5cIik7XG4rXG4rXHRpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZGF0YSk7XG4rXG4rXHQvKlxuK1x0ICogTm8gbWluaW11bSBkZWxheSBpcyBkb2N1bWVudGVkLiBNYXRjaCB0aGUgdmVuZG9yIGRyaXZlcidzIDQwIG1zIGRlbGF5XG4rXHQgKiBiZWZvcmUgaXRzIGZpcnN0IEFDMjAwIHJlZ2lzdGVyIGFjY2VzcyBhZnRlciBlbmFibGluZyB0aGUgaW5wdXQgY2xvY2suXG4rXHQgKi9cbitcdG1zbGVlcCg0MCk7XG4rXG4rXHRyZXQgPSByZWdtYXBfcmVhZChkZGF0YS1cdTAwM2VyZWdtYXAsIEFDMjAwX1NZU19WRVJTSU9OX1JFRywgXHUwMDI2dmVyc2lvbik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcmVhZCBjaGlwIHZlcnNpb25cXG5cIik7XG4rXG4rXHRkZXZfaW5mbyhkZXYsIFwiQUMyMDAgcmV2aXNpb24gJSNseCBpbiBwYWNrYWdlICVsdVxcblwiLFxuK1x0XHQgRklFTERfR0VUKEFDMjAwX1NZU19WRVJTSU9OX0NISVBfTUFTSywgdmVyc2lvbiksXG4rXHRcdCBGSUVMRF9HRVQoQUMyMDBfU1lTX1ZFUlNJT05fUEFDS0FHRV9NQVNLLCB2ZXJzaW9uKSk7XG4rXG4rXHQvKiBSZXNldCB0aGUgY2hpcCBhZnRlciBkZXBlbmRlbnQgZnVuY3Rpb24gZHJpdmVycyBoYXZlIHVuYm91bmQuICovXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzIwMF9kaXNhYmxlLCBkZGF0YSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcmVnbWFwX3dyaXRlKGRkYXRhLVx1MDAzZXJlZ21hcCwgQUMyMDBfU1lTX0NPTlRST0xfUkVHLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSByZWdtYXBfd3JpdGUoZGRhdGEtXHUwMDNlcmVnbWFwLCBBQzIwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUMyMDBfU1lTX0NPTlRST0xfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKGRldiwgZGV2LVx1MDAzZW9mX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgZGRhdGEtXHUwMDNlcmVnbWFwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byByZWdpc3RlciByZWdtYXBcXG5cIik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMyMDBfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbit7XG4rXHRhYzIwMF9kaXNhYmxlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWMyMDBfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcIngtcG93ZXJzLGFjMjAwXCIgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYWMyMDBfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYzIwMF9pMmNfaWRzW10gPSB7XG4rXHR7IC5uYW1lID0gXCJhYzIwMFwiIH0sXG4rXHR7IH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhYzIwMF9pMmNfaWRzKTtcbitcbitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWMyMDBfZHJpdmVyID0ge1xuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcImFjMjAwXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IGFjMjAwX29mX21hdGNoLFxuK1x0fSxcbitcdC5wcm9iZSA9IGFjMjAwX3Byb2JlLFxuK1x0LnNodXRkb3duID0gYWMyMDBfc2h1dGRvd24sXG4rXHQuaWRfdGFibGUgPSBhYzIwMF9pMmNfaWRzLFxuK307XG4rbW9kdWxlX2kyY19kcml2ZXIoYWMyMDBfZHJpdmVyKTtcbitcbitNT0RVTEVfQVVUSE9SKFwiSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJYLVBvd2VycyBBQzIwMCBNRkQgY29yZSBkcml2ZXJcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3lzY29uLmMgYi9kcml2ZXJzL21mZC9zeXNjb24uY1xuaW5kZXggMjFhN2ZjZGQyNzM3OS4uNDQ4NDIyZmU0ZjIxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWZkL3N5c2Nvbi5jXG4rKysgYi9kcml2ZXJzL21mZC9zeXNjb24uY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od3NwaW5sb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbkBAIC0xOTMsNTMgKzE5NCw5NSBAQCBzdGF0aWMgc3RydWN0IHJlZ21hcCAqZGV2aWNlX25vZGVfZ2V0X3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0cmV0dXJuIHN5c2Nvbi1cdTAwM2VyZWdtYXA7XG4gfVxuIFxuLS8qKlxuLSAqIG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIHJlZ21hcCBmb3Igc3BlY2lmaWVkIGRldmljZSBub2RlXG4tICogQG5wOiBEZXZpY2UgdHJlZSBub2RlXG4tICogQHJlZ21hcDogUG9pbnRlciB0byByZWdtYXAgb2JqZWN0XG4tICpcbi0gKiBSZWdpc3RlciBhbiBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwIG9iamVjdCB3aXRoIHN5c2NvbiBmb3IgdGhlIHNwZWNpZmllZFxuLSAqIGRldmljZSB0cmVlIG5vZGUuIFRoaXMgcmVnbWFwIHdpbGwgdGhlbiBiZSByZXR1cm5lZCB0byBjbGllbnQgZHJpdmVycyB1c2luZ1xuLSAqIHRoZSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKCkgQVBJLlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbi0gKi9cbi1pbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4rc3RhdGljIHN0cnVjdCBzeXNjb24gKlxuK29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwoc3RydWN0IGRldmljZV9ub2RlICpucCxcbitcdFx0XHRcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbiB7XG4gXHRzdHJ1Y3Qgc3lzY29uICplbnRyeSwgKnN5c2NvbiA9IE5VTEw7XG4tXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFucCB8fCAhcmVnbWFwKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHRzeXNjb24gPSBremFsbG9jX29iaigqc3lzY29uKTtcbiBcdGlmICghc3lzY29uKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHQvKiBjaGVjayBpZiBzeXNjb24gZW50cnkgYWxyZWFkeSBleGlzdHMgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcdTAwMjZzeXNjb25fbGlzdCwgbGlzdClcbiBcdFx0aWYgKGVudHJ5LVx1MDAzZW5wID09IG5wKSB7XG4tXHRcdFx0cmV0ID0gLUVFWElTVDtcbi1cdFx0XHRnb3RvIGVycl91bmxvY2s7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnN5c2Nvbl9saXN0X2xvY2spO1xuK1x0XHRcdGtmcmVlKHN5c2Nvbik7XG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVFWElTVCk7XG4gXHRcdH1cbiBcbiBcdHN5c2Nvbi1cdTAwM2VyZWdtYXAgPSByZWdtYXA7XG4tXHRzeXNjb24tXHUwMDNlbnAgPSBucDtcbitcdHN5c2Nvbi1cdTAwM2VucCA9IG9mX25vZGVfZ2V0KG5wKTtcbiBcbiBcdC8qIHJlZ2lzdGVyIHRoZSByZWdtYXAgaW4gc3lzY29uIGxpc3QgKi9cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c3lzY29uLVx1MDAzZWxpc3QsIFx1MDAyNnN5c2Nvbl9saXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzeXNjb25fbGlzdF9sb2NrKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHN5c2Nvbjtcbit9XG4rXG4rLyoqXG4rICogb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpIC0gUmVnaXN0ZXIgcmVnbWFwIGZvciBzcGVjaWZpZWQgZGV2aWNlIG5vZGVcbisgKiBAbnA6IERldmljZSB0cmVlIG5vZGVcbisgKiBAcmVnbWFwOiBQb2ludGVyIHRvIHJlZ21hcCBvYmplY3RcbisgKlxuKyAqIFJlZ2lzdGVyIGFuIGV4dGVybmFsbHkgY3JlYXRlZCByZWdtYXAgb2JqZWN0IHdpdGggc3lzY29uIGZvciB0aGUgc3BlY2lmaWVkXG4rICogZGV2aWNlIHRyZWUgbm9kZS4gVGhpcyByZWdtYXAgd2lsbCB0aGVuIGJlIHJldHVybmVkIHRvIGNsaWVudCBkcml2ZXJzIHVzaW5nXG4rICogdGhlIHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoKSBBUEkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcbit7XG4rXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwobnAsIHJlZ21hcCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTtcbitcbitzdGF0aWMgdm9pZCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBzeXNjb24gKnN5c2NvbiA9IGRhdGE7XG4gXG4tZXJyX3VubG9jazpcbitcdG11dGV4X2xvY2soXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XG4rXHRsaXN0X2RlbChcdTAwMjZzeXNjb24tXHUwMDNlbGlzdCk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2c3lzY29uX2xpc3RfbG9jayk7XG4rXG4rXHRvZl9ub2RlX3B1dChzeXNjb24tXHUwMDNlbnApO1xuIFx0a2ZyZWUoc3lzY29uKTtcbi1cdHJldHVybiByZXQ7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xuK1xuKy8qKlxuKyAqIGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpIC0gUmVnaXN0ZXIgYSBtYW5hZ2VkIGV4dGVybmFsIHN5c2NvbiByZWdtYXBcbisgKiBAZGV2OiBEZXZpY2UgdGhhdCBvd25zIHRoZSByZWdtYXBcbisgKiBAbnA6IERldmljZSB0cmVlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdtYXBcbisgKiBAcmVnbWFwOiBQb2ludGVyIHRvIHRoZSBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwXG4rICpcbisgKiBSZWdpc3RlciBhbiBleHRlcm5hbGx5IGNyZWF0ZWQgcmVnbWFwIG9iamVjdCB3aXRoIHN5c2NvbiBhbmQgcmVtb3ZlIGl0IHdoZW5cbisgKiBAZGV2IGlzIHVuYm91bmQuIENvbnN1bWVycyBtdXN0IHN0b3AgdXNpbmcgdGhlIHJlZ21hcCBiZWZvcmUgdGhlIHByb3ZpZGVyIGlzXG4rICogdW5ib3VuZCwgZm9yIGV4YW1wbGUgYnkgZXN0YWJsaXNoaW5nIGEgbWFuYWdlZCBkZXZpY2UgbGluayB0byBAZGV2LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXG4re1xuK1x0c3RydWN0IHN5c2NvbiAqc3lzY29uO1xuK1xuK1x0c3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKTtcbitcdGlmIChJU19FUlIoc3lzY29uKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoc3lzY29uKTtcbitcbitcdHJldHVybiBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LFxuK1x0XHRcdFx0XHRkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSxcbitcdFx0XHRcdFx0c3lzY29uKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKTtcbiBcbiAvKipcbiAgKiBkZXZpY2Vfbm9kZV90b19yZWdtYXAoKSAtIEdldCBvciBjcmVhdGUgYSByZWdtYXAgZm9yIHNwZWNpZmllZCBkZXZpY2Ugbm9kZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbmluZGV4IGEyOWQzZmVkOGEwNTMuLjI3YjhmZmU0YjUzOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbkBAIC00NzUsNiArNDc1LDE3IEBAIGNvbmZpZyBWSVRFU1NFX1BIWVxuIFx0aGVscFxuIFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDRcbiBcbitjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbitcdHRyaXN0YXRlIFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZXCJcbitcdGRlcGVuZHMgb24gQ09NTU9OX0NMSyBcdTAwMjZcdTAwMjYgTlZNRU0gXHUwMDI2XHUwMDI2IE9GX01ESU8gXHUwMDI2XHUwMDI2IFJFR1VMQVRPUlxuK1x0ZGVwZW5kcyBvbiBJMkMgfHwgIUkyQ1xuK1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4rXHRoZWxwXG4rXHQgIEVuYWJsZSB0aGUgRmFzdCBFdGhlcm5ldCBQSFkgZHJpdmVyIHNoYXJlZCBieSB0aGUgWC1Qb3dlcnMgQUMyMDBcbitcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbitcdCAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sXG4rXHQgIHJlZ2lzdGVycy5cbitcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwiWGlsaW54IEdNSUkyUkdNSUkgY29udmVydGVyIGRyaXZlclwiXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5pbmRleCBlMjNkZjVlODM2ZTllLi5mZmIwZWZiYzRjYzRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbkBAIC0xMDAsNCArMTAwLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQrPSBzbXNjLm9cbiBvYmotJChDT05GSUdfU1RFMTBYUClcdFx0Kz0gc3RlMTBYcC5vXG4gb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKVx0Kz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0Kz0gdml0ZXNzZS5vXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVx0Kz0geHBvd2Vycy9cbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICs9IHhpbGlueF9nbWlpMnJnbWlpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGVcbkBAIC0wLDAgKzEsMyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbit4cG93ZXJzLWFjeDAwLXkgOj0gYWN4MDAubyBhYzIwMC5vIGFjMzAwLm9cbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpICs9IHhwb3dlcnMtYWN4MDAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjgxZTAxM2JlNDAxYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xuQEAgLTAsMCArMSwzMTUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImFjeDAwLmhcIlxuK1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVFx0M1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbitcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXHRcdFx0MHgwMDE0XG4rI2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXHRcdFx0QklUKDEpXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFR1x0XHRcdDB4MDAxNlxuKyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4rXG4rLyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqL1xuKyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcdFx0XHQweDgwMDRcbitcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFR1x0XHRcdDB4NjAwMFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRCSVQoMilcbisjZGVmaW5lIEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTS1x0XHRcdEdFTk1BU0soOCwgNClcbisjZGVmaW5lIEFDMjAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbitcbitzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHJlZ21hcCAqcmVnbWFwO1xuK1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK1x0dTE2IGVwaHlfY3RsO1xuK1x0dW5zaWduZWQgaW50IHBoeV9hZGRyO1xuK1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbitcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4rXHRib29sIHBvd2VyZWQ7XG4rfTtcbitcbitzdGF0aWMgdTE2IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jdGwgfFxuK1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcbitcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtXHUwMDNlcGh5X2FkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdixcbitcdFx0XHRcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxuXCIsXG4rXHRcdFx0cmVnLCBFUlJfUFRSKHJldCkpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcbitcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuK1x0XHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVx1MDAzZXZjYyk7XG4rXHRcdGlmICghZXJyKVxuK1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbitcdFx0ZWxzZSBpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxuK3tcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuK1xuK1x0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbithYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuK3tcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4rXHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbitcdFx0cmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4rXHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMLFxuK1x0XHRcdFx0XHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbitcdGlmICghcmV0KVxuK1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdHUxNiBlcGh5X2N0bDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5X2FkZHIgXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlcGh5X2FkZHIgPT0gcGh5X2FkZHIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXHRwcml2LVx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcbitcbitcdC8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfZGlzYWJsZTtcbitcbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK1xuK2Vycl9kaXNhYmxlOlxuK1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0YWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4rXHRzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbms7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXCJ4LXBvd2VycyxhYzIwMFwiLCAwKTtcbitcdGlmICghYWMyMDBfbm9kZSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJtaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcblwiKSk7XG4rXHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcbitcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuK1x0aWYgKCFjbGllbnQpIHtcbitcdFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiQUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxuXCIpKTtcbitcdH1cbitcbitcdGxpbmsgPSBkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuK1x0XHRcdCAgICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpO1xuK1x0aWYgKCFsaW5rKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwiZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0aWYgKFJFQURfT05DRShsaW5rLVx1MDAzZXN0YXR1cykgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXG4rXHRcdFx0XHQgICAgXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2VyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgICAgXCJ4LXBvd2VycyxhYzIwMFwiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSxcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byBnZXQgQUMyMDAgcmVnbWFwXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9lcnJvcjtcbitcdH1cbitcbitcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XG4rXHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbitcdFx0XHRcdCAgXHUwMDI2aW50ZXJuYWxfY2FsaWJyYXRpb24pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuK1x0XHRjYWxpYnJhdGlvbiA9IGludGVybmFsX2NhbGlicmF0aW9uO1xuK1x0fVxuK1xuK1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuK1x0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4rXHRcdFx0ICAgRklFTERfTUFYKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLKTtcbitcdHByaXYtXHUwMDNlZXBoeV9jdGwgPVxuK1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuK1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuK1xuK1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdGlmIChJU19FUlIoY2xrKSkge1xuK1x0XHRyZXQgPSBQVFJfRVJSKGNsayk7XG4rXHRcdGdvdG8gb3V0X2Vycm9yO1xuK1x0fVxuK1xuK1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbitcdGNsa19wdXQoY2xrKTtcbitcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwidW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdCAgICBjbGtfcmF0ZSk7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4rXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4rXHRwcml2LVx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4rXHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbitcbitvdXRfZXJyb3I6XG4rXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXG5cIik7XG4rb3V0X3B1dF9jbGllbnQ6XG4rXHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1x0cmV0dXJuIEVSUl9QVFIocmV0KTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5AQCAtMCwwICsxLDM4NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVRcdDNcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcdDI1MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDBcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0tcdFx0R0VOTUFTSygxMSwgOClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLXHRcdFx0R0VOTUFTSyg3LCA2KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAxKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKVxuKyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVx0XHRcdEJJVCg1KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcdFx0QklUKDIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgxKVxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbitcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE9cdFx0QklUKDMpXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0tcdFx0R0VOTUFTSygyLCAwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1x0XHRcdDB4MDJcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXHRcdEJJVCgxNSlcbitcbisjZGVmaW5lIEFDMzAwX1NZU19JT19SRUdcdFx0XHQweDA1XG4rI2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxNSwgMTQpXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcdFx0XHRHRU5NQVNLKDExLCAxMClcbisjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yXHRcdFx0MlxuKyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcdFx0XHQweDA2XG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxuK1x0KEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXFxcbitcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXG4rXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxuK1x0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbitcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxuK1xuK3N0cnVjdCBhYzMwMF9lcGh5X2N0bCB7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0dTE2IHN5c19jb250cm9sO1xuK1x0dTE2IGVwaHlfY29uZmlnO1xuK1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbitcdGJvb2wgcGFja2FnZV9rbm93bjtcbitcdGJvb2wgaW50ZXJuYWxfZGxkbztcbitcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4rXHRib29sIHBvd2VyZWQ7XG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgaW50XG4rYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbitcdFx0XHRcdHUxNiB2YWwpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpO1xuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHQgdTE2IG1hc2ssIHUxNiBzZXQpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHR1MTYgdmFsID0gKHJldCBcdTAwMjYgfm1hc2spIHwgKHNldCBcdTAwMjYgbWFzayk7XG4rXG4rXHRcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcbitcdFx0XHRfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxuK1x0XHRcdFx0XHQgICAgcmVnbnVtLCB2YWwpO1xuK1x0fVxuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jb25maWcgfFxuK1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuK31cbitcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHQvKlxuK1x0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcbitcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcbitcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXG4rXHQgKi9cbitcdHJldHVybiAhcHJpdi1cdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuK1x0XHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXG4rXHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZWNsayk7XG4rXHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4rXHRcdGVsc2UgaWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcbitcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxuK1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbitcdGlmICghcmV0KVxuK1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdHU4IHBhY2thZ2Vfc3RhdHVzO1xuK1x0dTE2IHJlc2V0X3ZhbHVlO1xuK1x0aW50IHN5c19jb250cm9sO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbitcdFx0ZnNsZWVwKDEwMDAwKTtcbitcdH1cbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1xuK1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuK1x0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XG4rXHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcbitcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4rXHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuK1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxuK1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuK1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0XHRcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuK1x0XHRcdFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Bvd2VyX29mZjpcbitcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcbit7XG4rXHRjbGtfcHV0KGRhdGEpO1xuK31cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4rXHR1OCBiZ3NfZWZmdXNlX2NvZGU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcblwiKSk7XG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdHByaXYtXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWNsaykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlY2xrKSxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXG5cIikpO1xuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cIikpO1xuK1xuK1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VjbGspO1xuK1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFo7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcblwiLFxuK1x0XHRcdFx0XHQgICAgIGNsa19yYXRlKSk7XG4rXHR9XG4rXHRwcml2LVx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xuK1xuK1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuK1x0YmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4rXHRcdFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcbitcdHByaXYtXHUwMDNlZXBoeV9jb25maWcgPVxuK1x0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xuK1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OGYyYjBiNjM5MDk2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5AQCAtMCwwICsxLDUzNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vcGh5bGliLmhcIlxuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbitcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8wXHRcdFx0XHQwXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuKyNkZWZpbmUgQUNYMDBfUEFHRV82XHRcdFx0XHQ2XG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cdFx0MlxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVx0MHg0ODI0XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXHQweDE3XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVx0MHg3MDhmXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1x0XHRcdDB4MTVcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXG4rXHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbitcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcdFx0MHgwMGJjXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcdDB4MDA0NFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4rXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4rXHQgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUylcbitcbisvKlxuKyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvclxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4rICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuXG4rICovXG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRwaHlkZXZfd2Fybihwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwiLFxuK1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuK1x0c2l6ZV90IGk7XG4rXHRzaXplX3QgbGVuO1xuK1x0dTggKmJ1ZjtcbitcdHUxNiB2YWwgPSAwO1xuK1xuK1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuK1x0aWYgKElTX0VSUihjZWxsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY2VsbCk7XG4rXG4rXHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbitcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xuK1x0aWYgKElTX0VSUihidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuK1x0aWYgKCFsZW4gfHwgbGVuIFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xuK1x0XHRrZnJlZShidWYpO1xuK1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKylcbitcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuK1x0a2ZyZWUoYnVmKTtcbitcdCp2YWx1ZSA9IHZhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuK1x0Ym9vbCBzZWxlY3RhYmxlO1xuK1x0Ym9vbCBmaXhlZF9hYzMwMDtcbitcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4rXHR1OCBjYWxpYnJhdGlvbjtcbitcdHUzMiBiYXNlX2FkZHI7XG4rXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCJyZWdcIiwgXHUwMDI2YmFzZV9hZGRyKTtcbitcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRpZiAoIXNlbGVjdGFibGUgXHUwMDI2XHUwMDI2ICFmaXhlZF9hYzMwMCBcdTAwMjZcdTAwMjZcbitcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcbitcdGhhc19jb25maWd1cmF0aW9uID1cbitcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCJudm1lbS1jZWxsLW5hbWVzXCIsXG4rXHRcdFx0XHRcdCBcImNvbmZpZ3VyYXRpb25cIikgXHUwMDNlPSAwO1xuK1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4rXHRcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcImNvbmZpZ3VyYXRpb25cIixcbitcdFx0XHRcdFx0XHRcdTAwMjZjb25maWd1cmF0aW9uKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdGlmIChzZWxlY3RhYmxlKSB7XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuK1x0XHRcdGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4rXHRcdGlmIChoYXNfY29uZmlndXJhdGlvbiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4rXHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4rXHRcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICBcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbitcdFx0XHRcdGNvbmZpZ3VyYXRpb24pO1xuK1xuK1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4rXHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuK1x0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICAgXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCIpO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4rXHRlbHNlXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4rXG4rb3V0X3B1dF9ub2RlOlxuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VvZl9ub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4rXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuK1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbitcbitvdXRfcmVzdG9yZV9wYWdlOlxuK1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbitcdHJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbitcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJlc3VtZV9yZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRcdGlmIChyZXN1bWVfcmV0KVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgbWF0Y2g7XG4rXG4rXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikgfHxcbitcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbitcdFx0Lm5hbWUgPSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcIixcbitcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4rXHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4rXHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4rXHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuK1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuK1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbitcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbitcdH0sXG4rfTtcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuK1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbitcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4rXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuK1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbitcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbit9O1xuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaCBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oXG5pbmRleCBhYWQ5YzZiNTA0NjM2Li4zZTgwNGZjMWIwM2ViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rc3RydWN0IGRldmljZTtcbiBcbiAjaWZkZWYgQ09ORklHX01GRF9TWVNDT05cbiBzdHJ1Y3QgcmVnbWFwICpkZXZpY2Vfbm9kZV90b19yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5AQCAtMzAsNiArMzEsOSBAQCBzdHJ1Y3QgcmVnbWFwICpzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlX29wdGlvbmFsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRcdFx0XHRcdFx0XHRjb25zdCBjaGFyICpwcm9wZXJ0eSk7XG4gaW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXApO1xuK2ludCBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcbitcdFx0XHRcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWdtYXAgKmRldmljZV9ub2RlX3RvX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuIHtcbkBAIC03NSw2ICs3OSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50XG4rZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwKVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fTElOVVhfTUZEX1NZU0NPTl9IX18gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIwOjM4OjQxLjU0MTEwOTM1MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDgxNTgzOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgUGF0Y2ggZm9yIEZ1enppbmcgUmVhY2hhYmlsaXR5KipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBuZXcgRXRoZXJuZXQgUEhZIHBhY2thZ2VzIGZyb20gWC1Qb3dlcnMsIHNwZWNpZmljYWxseSB0aGUgQUMyMDAgYW5kIEFDMzAwLiBJdCdzIHRvdWNoaW5nIHRoZSB1c3VhbCBzdXNwZWN0czogZGV2aWNlIHRyZWUgYmluZGluZ3MsIEtjb25maWcvTWFrZWZpbGVzLCBhbmQgbmV3IGRyaXZlciBmaWxlcyBmb3IgdGhlIE11bHRpLUZ1bmN0aW9uIERldmljZSAoTUZEKSBhbmQgdGhlIFBIWSBpdHNlbGYuIE15IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciBzeXprYWxsZXIsIG9yIGFueSBmdXp6aW5nIHNldHVwLCBjYW4gYWN0dWFsbHkgcmVhY2ggdGhpcyBuZXcgY29kZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmVsaWFuY2Ugb24gZGV2aWNlIHRyZWUgbm9kZXMuXG5cbkkndmUgZ290IGFuIE1GRCBkcml2ZXIgKGBhYzIwMC5jYCkgYW5kIGEgUEhZIGRyaXZlciAoYGFjeDAwLmNgIGFuZCBhc3NvY2lhdGVkIGZpbGVzKS4gVGhlIGBzeXNjb24uY2AgZmlsZSBpcyBiZWluZyBtb2RpZmllZCB0byBhZGQgYSBgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwYCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0J3MgY29yZSBrZXJuZWwgbG9naWMsIGEgY29tbW9uIGVudHJ5IHBvaW50IGZvciBwb3RlbnRpYWwgZnV6emluZy4gVGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgdG8gcHJvYmUgZm9yIHJlYWNoYWJpbGl0eS5cblxuSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgaW5zdGFudGlhdGlvbiBtZXRob2RzLiBDYW4gSSBpbnN0YW50aWF0ZSB0aGVzZSBkZXZpY2VzIHRocm91Z2ggSTJDIG9yIE1ESU8gc3lzZnMgZW50cmllcywgb3IgZXZlbiB2aXJ0dWFsIGRldmljZSB0cmVlIG1hbmlwdWxhdGlvbj8gVGhlIGFuc3dlciwgYXQgbGVhc3Qgc3RyYWlnaHRmb3J3YXJkbHksIGlzIG5vLiAgVGhlIFBIWSBkcml2ZXIgKGBhY3gwMF9lcGh5X3Byb2JlYCkgZXhwbGljaXRseSBjaGVja3MgZm9yIGEgYGRldi1cdTAwM2VvZl9ub2RlYCBhbmQgcmV0dXJucyBgLUVOT0RFVmAgaWYgaXQncyBub3QgcHJlc2VudC4gIFRoZSBNRkQgZHJpdmVyIChgYWMyMDBfcHJvYmVgKSBhbHNvIHVzZXMgYGRldi1cdTAwM2VvZl9ub2RlYCBpbiB0aGUgY3JpdGljYWwgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgY2FsbC4gIElmIEkgdHJ5IHRvIGluc3RhbnRpYXRlIHRoZXNlIGRldmljZXMgd2l0aCBzeXNmcyBgbmV3X2RldmljZWAsIHRoZXJlJ3Mgbm8gd2F5IHRvIGF0dGFjaCBhIERUIG5vZGUuXG5cblN5emthbGxlciBkb2VzIGhhdmUgbGltaXRlZCBJMkMvTURJTyBzdXBwb3J0LCB0eXBpY2FsbHkgdXNlZCB2aWEgYC9kZXYvaTJjLSpgIGRldmljZXMuIEhvd2V2ZXIsIGl0J3Mgbm90IGdvaW5nIHRvIGF1dG9tYXRpY2FsbHkgKnByb2JlKiBkcml2ZXJzIHVubGVzcyB0aGUgZGV2aWNlIGlzIHByb3Blcmx5IGluc3RhbnRpYXRlZCwgYW5kIGNlcnRhaW5seSBpc24ndCBnb2luZyB0byBpbmplY3QgZGV2aWNlIHRyZWUgbm9kZXMgb24gZGVtYW5kLiAgSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgaXQncyBkaWZmaWN1bHQgdG8gZ2V0IHRoYXQgbm9kZSBzZXQgdXAgZHluYW1pY2FsbHksIGFuZCBib3RoIHByb2JlcyB3aWxsIGZhaWwuXG5cblRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRoZSB1c2Ugb2YgYGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAuIEl0ICppcyogYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgYnV0IGl0cyBvbmx5IGV4cGxpY2l0IHVzZSBpbiB0aGUgcGF0Y2ggaXMgd2l0aGluIHRoZSBgYWMyMDAuY2AgZmlsZS4gIFdoaWxlIHRoZSBtb2RpZmljYXRpb24gKnNlZW1zKiBpbXBhY3RmdWwgdG8gY29yZSBjb2RlLCBpZiBgYWMyMDBfcHJvYmVgIGlzIG5ldmVyIGNhbGxlZCwgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBub3QgYmUgdGVzdGVkLlxuXG5JIHRob3VnaHQgYWJvdXQgdGhlIHBvdGVudGlhbCB0byBpbnN0YW50aWF0ZSB0aGUgSTJDIGRldmljZSB2aWEgc3lzZnMgLSBhcyBpbiwgZWNobyB0aGUgZGV2aWNlIGFuZCBhZGRyZXNzLCBhbmQgdHJ5IHRvIGhhdmUgaXQgYmluZC4gVGhpcyB3b3VsZCBjYWxsIGBhYzIwMF9wcm9iZWAuIEFuZCBpdCAqd291bGQqLCBidXQgdGhlbiB0aGUgYGRldm1fY2xrX2dldF9lbmFibGVkYCBmdW5jdGlvbiB3b3VsZCBmYWlsIHdpdGggYC1FTk9FTlRgIGJlY2F1c2UgdGhlIGNsayBub2RlIGlzIGFsc28gbWlzc2luZyBmcm9tIHRoZSBkZXZpY2UgdHJlZSBhbmQgdGhlIE1GRCBjb2RlIHJlcXVpcmVzIGl0IHRvIGJlIHByZXNlbnQuXG5cblNvLCByZWFsaXN0aWNhbGx5LCAqbmVpdGhlciogZHJpdmVyIGlzIGxpa2VseSB0byBleGVjdXRlIGFueSBzaWduaWZpY2FudCBjb2RlIHBhdGggd2l0aG91dCBhICp3ZWxsLWRlZmluZWQqIGRldmljZSB0cmVlIG5vZGUuIFRoZXJlZm9yZSwgdGhlIHJlZmFjdG9yZWQgc3lzY29uIEFQSSBpcyB1bmxpa2VseSB0byBiZSB0ZXN0ZWQsIHRvby5cblxuSG93ZXZlciwgdGhlIHJlZmFjdG9yaW5nIGl0c2VsZiBpcyBhIGNoYW5nZSB0byBjb3JlIGBzeXNjb24uY2AgY29kZS4gVGhlIGZ1bmN0aW9uIG5hbWUgYG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgIGFscmVhZHkgZXhpc3RlZCBhbmQgb25seSB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gd2FzIG1vZGlmaWVkIHRvIHVzZSBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbGAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHVzZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgc28gdGhpcyBjaGFuZ2UgKmNvdWxkKiBiZSByZWFjaGFibGUgaWYgdGhlcmUgaXMgYW5vdGhlciBjYWxsIHRvIGl0LlxuXG5UaGUgYm90dG9tIGxpbmUgaXMgdGhhdCB3aGlsZSBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgYWRkaW5nIHN1cHBvcnQsIHRoYXQgY29kZSBpcyB1bnJlYWNoYWJsZSB3aXRob3V0IGNyYWZ0aW5nIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgc3l6a2FsbGVyIHR5cGljYWxseSBkb2VzIGF1dG9tYXRpY2FsbHkgZm9yIGFyYml0cmFyeSBkcml2ZXJzIGFuZCBpdCBpcyB1bmxpa2VseSB0byB0ZXN0IHRoZSBkcml2ZXJzIGlmIEkganVzdCBkZWNsYXJlIHRoYXQgY29kZSBpcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjEyMSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMDozOTowOC42MjI2OTU4MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NzE5NjQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWZkL2FjMjAwLmM9NzQ9c3RhdGljIGludCBhYzIwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbi0tXFxuZHJpdmVycy9tZmQvYWMyMDAuYy0xMzAtXFxuZHJpdmVycy9tZmQvYWMyMDAuYzoxMzE6XFx0cmV0ID0gZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKGRldiwgZGV2LVxcdTAwM2VvZl9ub2RlLFxcbmRyaXZlcnMvbWZkL2FjMjAwLmMtMTMyLVxcdFxcdFxcdFxcdFxcdCAgICAgZGRhdGEtXFx1MDAzZXJlZ21hcCk7XFxuLS1cXG5kcml2ZXJzL21mZC9zeXNjb24uYz0xOTc9c3RhdGljIHN0cnVjdCBzeXNjb24gKlxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjE5ODpvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX2ludGVybmFsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMTk5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcXG4tLVxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTIzMC0vKipcXG5kcml2ZXJzL21mZC9zeXNjb24uYzoyMzE6ICogb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpIC0gUmVnaXN0ZXIgcmVnbWFwIGZvciBzcGVjaWZpZWQgZGV2aWNlIG5vZGVcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yMzItICogQG5wOiBEZXZpY2UgdHJlZSBub2RlXFxuLS1cXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNDAtICovXFxuZHJpdmVycy9tZmQvc3lzY29uLmM6MjQxOmludCBvZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCByZWdtYXAgKnJlZ21hcClcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNDIte1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI0MzpcXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfaW50ZXJuYWwobnAsIHJlZ21hcCkpO1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI0NC19XFxuZHJpdmVycy9tZmQvc3lzY29uLmM6MjQ1OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI0Ni1cXG5kcml2ZXJzL21mZC9zeXNjb24uYzoyNDc6c3RhdGljIHZvaWQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNDgte1xcbi0tXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjU5LS8qKlxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI2MDogKiBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoKSAtIFJlZ2lzdGVyIGEgbWFuYWdlZCBleHRlcm5hbCBzeXNjb24gcmVnbWFwXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjYxLSAqIEBkZXY6IERldmljZSB0aGF0IG93bnMgdGhlIHJlZ21hcFxcbi0tXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjcwLSAqL1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI3MTppbnQgZGV2bV9vZl9zeXNjb25fcmVnaXN0ZXJfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNzItXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI3Ni1cXG5kcml2ZXJzL21mZC9zeXNjb24uYzoyNzc6XFx0c3lzY29uID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbChucCwgcmVnbWFwKTtcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yNzgtXFx0aWYgKElTX0VSUihzeXNjb24pKVxcbi0tXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMjgxLVxcdHJldHVybiBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LFxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI4MjpcXHRcXHRcXHRcXHRcXHRkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBfcmVsZWFzZSxcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODMtXFx0XFx0XFx0XFx0XFx0c3lzY29uKTtcXG5kcml2ZXJzL21mZC9zeXNjb24uYy0yODQtfVxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jOjI4NTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXApO1xcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTI4Ni1cXG4tLVxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jPTMwMj1FWFBPUlRfU1lNQk9MX0dQTChkZXZpY2Vfbm9kZV90b19yZWdtYXApO1xcbi0tXFxuZHJpdmVycy9tZmQvc3lzY29uLmMtMzEwLSAqIGZ1bmN0aW9uIGlzIHNhZmUgdG8gdXNlIGZvciBhIHN5c2NvbiByZWdpc3RlcmVkIHdpdGhcXG5kcml2ZXJzL21mZC9zeXNjb24uYzozMTE6ICogb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcCgpLlxcbmRyaXZlcnMvbWZkL3N5c2Nvbi5jLTMxMi0gKlxcbi0tXFxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmM9MTA3PXN0YXRpYyBpbnQgcnpfc3lzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmMtMTUxLVxcbmRyaXZlcnMvc29jL3JlbmVzYXMvcnotc3lzYy5jOjE1MjpcXHRyZXR1cm4gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYtXFx1MDAzZW9mX25vZGUsIHJlZ21hcCk7XFxuZHJpdmVycy9zb2MvcmVuZXNhcy9yei1zeXNjLmMtMTUzLX1cXG4tLVxcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jPTQxMD1zdGF0aWMgaW50IHNldHVwX2NwdWhwX2FuZF9jcHVpZGxlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTQ0OC1cXHQvKiByZWdpc3RlciBjdXN0b20gbW1pbyByZWdtYXAgd2l0aCBzeXNjb24gKi9cXG5kcml2ZXJzL3NvYy9zYW1zdW5nL2V4eW5vcy1wbXUuYzo0NDk6XFx0cmV0ID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChpbnRyX2dlbl9ub2RlLFxcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTQ1MC1cXHRcXHRcXHRcXHRcXHRwbXVfY29udGV4dC1cXHUwMDNlcG11aW50cmdlbik7XFxuLS1cXG5kcml2ZXJzL3NvYy9zYW1zdW5nL2V4eW5vcy1wbXUuYz00NzY9c3RhdGljIGludCBleHlub3NfcG11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3NvYy9zYW1zdW5nL2V4eW5vcy1wbXUuYy01MTYtXFxuZHJpdmVycy9zb2Mvc2Ftc3VuZy9leHlub3MtcG11LmM6NTE3OlxcdFxcdHJldCA9IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoZGV2LVxcdTAwM2VvZl9ub2RlLCByZWdtYXApO1xcbmRyaXZlcnMvc29jL3NhbXN1bmcvZXh5bm9zLXBtdS5jLTUxOC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9zb2Mvc3VueGkvc3VueGlfc3JhbS5jPTQwOD1zdGF0aWMgaW50IF9faW5pdCBzdW54aV9zcmFtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3NvYy9zdW54aS9zdW54aV9zcmFtLmMtNDMxLVxcbmRyaXZlcnMvc29jL3N1bnhpL3N1bnhpX3NyYW0uYzo0MzI6XFx0XFx0cmV0ID0gb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChkZXYtXFx1MDAzZW9mX25vZGUsIHJlZ21hcCk7XFxuZHJpdmVycy9zb2Mvc3VueGkvc3VueGlfc3JhbS5jLTQzMy1cXHRcXHRpZiAocmV0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmg9MzA9c3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oLTMxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKnByb3BlcnR5KTtcXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaDozMjppbnQgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oLTMzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmg6MzQ6aW50IGRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtMzUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oPTY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ21hcCAqc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZV9vcHRpb25hbChcXG4tLVxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oLTc1LVxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjc2OnN0YXRpYyBpbmxpbmUgaW50IG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXAoc3RydWN0IGRldmljZV9ub2RlICpucCxcXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaC03Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21mZC9zeXNjb24uaD04Mj1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbGludXgvbWZkL3N5c2Nvbi5oOjgzOmRldm1fb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmgtODQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDIwOjM5OjEwLjYxOTg5NjgyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTQ3MDQwODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCByZWZhY3RvcnMgYG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgIGFuZCBhZGRzIGBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBvcmlnaW5hbCBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcGAgaXMgdXNlZCBieSBhIGZldyBTb0Mtc3BlY2lmaWMgZHJpdmVycyAoYGV4eW5vcy1wbXUuY2AsIGByei1zeXNjLmNgLCBhbmQgYHN1bnhpX3NyYW0uY2ApLiBUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHNvbWUgY29yZSBzeXNjb24gY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcm5hbCByZWdpc3RyYXRpb24gZnVuY3Rpb24uIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGl0IG5vdyB1c2VzIGBvZl9ub2RlX2dldCgpYCB0byB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2Ugbm9kZSwgZml4aW5nIGEgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZSwgd2hpY2ggaXMgZ29vZC4gVGhlcmUncyBhbHNvIHNvbWUgbWlub3IgZGlmZmVyZW5jZSBpbiBtZW1vcnkgYWxsb2NhdGlvbi4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlJ3MgYSBuZXcgYGFjMjAwYCBNRkQgZHJpdmVyIGFuZCBgYWN4MDBgIFBIWSBkcml2ZXIgaW5jbHVkZWQgaW4gdGhpcyBwYXRjaC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgYnkgc3l6a2FsbGVyJ3Mgc3RhbmRhcmQgdGVzdCBlbnZpcm9ubWVudHMsIHByaW1hcmlseSB4ODZfNjQgYW5kIEFSTTY0IGB2aXJ0YC4gSSBrbm93IHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBydW4gdGhlc2Ugc3BlY2lmaWMgU29DcywgYW5kIHNvLCB0aGUgU29DIGRyaXZlcnMgdGhhdCB1c2UgYG9mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgIGFyZSBsaWtlbHkgdW5yZWFjaGFibGUuIEJ1dCwgaXMgdGhlIGNvcmUgZnVuY3Rpb24gYWZmZWN0ZWQgYnkgdGhlIHBhdGNoIHJlYWNoYWJsZT9cblxuTGV0J3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhvc2UgbmV3IGRyaXZlcnMuIGBhYzIwMF9wcm9iZWAgaXMgYW4gSTJDIHByb2JlIGZ1bmN0aW9uLCBhbmQgdGhlIGBhY3gwMF9lcGh5X3Byb2JlYCBpcyBhIE1ESU8gUEhZIHByb2JlIGZ1bmN0aW9uLiBGb3IgYm90aCBvZiB0aGVtLCB0aGUgZGV2aWNlIHRyZWUgbm9kZSAoYG9mX25vZGVgKSBpcyBjcml0aWNhbC4gSW4gdGhlIGBhYzIwMGAgY2FzZSwgSSBub3RpY2VkIHRoZSBmdW5jdGlvbiBjYWxscyBgZGV2bV9jbGtfZ2V0X2VuYWJsZWRgLiBJZiBubyBjbG9jayBpcyBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBub2RlLCBpdCByZXR1cm5zIGFuIGVycm9yIGFuZCB0aGUgcHJvYmUgZmFpbHMuIEZvciBgYWN4MDBgLCB0aGUgcHJvYmUgcmV0dXJucyBgLUVOT0RFVmAgaWYgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUgYW4gYG9mX25vZGVgLiBJIGFsc28gc2VlIHRoYXQgdGhlIFBIWSBkcml2ZXIgdXNlcyB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBmb3IgZGV2aWNlIG1hdGNoaW5nIGBnZW5waHlfbWF0Y2hfcGh5X2RldmljZWAsIHdoaWNoIGZhaWxzIGlmIGBvZl9ub2RlYCBpcyBgTlVMTGAuXG5cbkNhbiBzeXprYWxsZXIgY3JlYXRlIGEgc2l0dWF0aW9uIHdoZXJlIHRoZXNlIGRyaXZlcnMnIHByb2JlcyBnZXQgY2FsbGVkPyBJIGNhbiB0cnkgdG8gY3JlYXRlIGFuIEkyQyBvciBNRElPIGRldmljZSB2aWEgc3lzZnMgaW4gYSB2aXJ0dWFsaXplZCBRRU1VL0dDRSBlbnZpcm9ubWVudC4gQnV0IHRoZSBjcnVjaWFsIGlzc3VlIGlzIHRoZSBkZXZpY2UgdHJlZSBub2RlLiBTeXprYWxsZXIgZG9lc24ndCBjdXJyZW50bHkgaW5qZWN0IERUIG92ZXJsYXlzLCBhbmQgd2l0aG91dCB0aGUgRFQgbm9kZSwgdGhlIGRyaXZlcnMgd2lsbCBub3QgaW5pdGlhbGl6ZSBwcm9wZXJseS4gV2l0aG91dCBhIHZhbGlkIGBvZl9ub2RlYCwgdGhlc2UgZHJpdmVycyB3b24ndCBleGVjdXRlIGFueSBzaWduaWZpY2FudCBjb2RlIHBhdGhzLCByZXR1cm5pbmcgZWFybHkgb3IgZmFpbGluZyBhdCBgZGV2bV9jbGtfZ2V0X2VuYWJsZWRgLiBUaGUgYGFjeDAwYCBkcml2ZXIgd2lsbCBhbHNvIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGVyZSBpcyBubyBub2RlIGF2YWlsYWJsZS5cblxuU28sIEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBvdGhlciB3YXlzIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBgb2Zfc3lzY29uX3JlZ2lzdGVyX3JlZ21hcF9pbnRlcm5hbGAgb3IgdGhlIGBkZXZtX29mX3N5c2Nvbl9yZWdpc3Rlcl9yZWdtYXBgPyBGcm9tIGEgY29kZSBzZWFyY2gsIEkgc2VlIHRoYXQgdGhpcyBpcyBub3QgcG9zc2libGU7IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgY2FsbGVkIGJ5IHRoZSBkcml2ZXIgcHJvYmVzIGFuZCB0aG9zZSBhcmUgdGhlIG9ubHkgcGxhY2VzLlxuXG5Pa2F5LCBsZXQgbWUgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYWdhaW46IHRoZSBwYXRjaCBoYXMgc29tZSBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuIFRoYXQgaXMgbXkgY29uY2x1c2lvbi5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcmVmYWN0b3JlZCBjb2RlIHBhdGggaXMgbm90IGVhc2lseSByZWFjaGFibGUgaW4gdGhlIHN5emthbGxlciBzZXR1cCwgYW5kIHRoZSBkcml2ZXJzIGRlcGVuZCBvbiBkZXZpY2UgdHJlZSBub2RlcyB0aGF0IGFyZSBub3QgZWFzaWx5IHByb3ZpZGVkLCB0aGUgcGF0Y2ggaXMgdW5saWtlbHkgdG8gdW5jb3ZlciBhbnkgbWVhbmluZ2Z1bCBuZXcgZnV6emluZyB0YXJnZXRzIGluIG15IHR5cGljYWwgdGVzdCBlbnZpcm9ubWVudCwgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MDQsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMDozOTo0Ny41NjY5NDAwODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZHJpdmVycyBmb3IgWC1Qb3dlcnMgQUMyMDAgTUZEIGFuZCBBQ3gwMCBFdGhlcm5ldCBQSFlzLCB3aGljaCBzdHJpY3RseSByZXF1aXJlIGRldmljZSB0cmVlIG5vZGVzIChvZl9ub2RlKSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIFNpbmNlIHN5emthbGxlciBkb2VzIG5vdCBkeW5hbWljYWxseSBnZW5lcmF0ZSBhcmJpdHJhcnkgZGV2aWNlIHRyZWUgbm9kZXMsIGFuZCB0aGVzZSBkZXZpY2VzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZGVmYXVsdCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSAndmlydCcgb3IgeDg2XzY0KSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuIFRoZSBtaW5vciByZWZhY3RvcmluZyBpbiBzeXNjb24uYyBpcyBvbmx5IHJlYWNoYWJsZSB2aWEgU29DLXNwZWNpZmljIGRyaXZlcnMgKEV4eW5vcywgU3VueGksIFJlbmVzYXMpIHRoYXQgYXJlIGFsc28gbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBkcml2ZXJzIGZvciBYLVBvd2VycyBBQzIwMCBNRkQgYW5kIEFDeDAwIEV0aGVybmV0IFBIWXMsIHdoaWNoIHN0cmljdGx5IHJlcXVpcmUgZGV2aWNlIHRyZWUgbm9kZXMgKG9mX25vZGUpIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gU2luY2Ugc3l6a2FsbGVyIGRvZXMgbm90IGR5bmFtaWNhbGx5IGdlbmVyYXRlIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcywgYW5kIHRoZXNlIGRldmljZXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBkZWZhdWx0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VICd2aXJ0JyBvciB4ODZfNjQpLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gVGhlIG1pbm9yIHJlZmFjdG9yaW5nIGluIHN5c2Nvbi5jIGlzIG9ubHkgcmVhY2hhYmxlIHZpYSBTb0Mtc3BlY2lmaWMgZHJpdmVycyAoRXh5bm9zLCBTdW54aSwgUmVuZXNhcykgdGhhdCBhcmUgYWxzbyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQyMDozOTo0Ny41NjY5NjU4MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownx6s2[1] Phase: Running StartedAt: 2026-08-09 20:39:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownx6s2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-09 20:39:58 +0000 UTC FinishedAt: 2026-08-09 20:40:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}